如何从信号中提取频率

时间:2013-08-09 11:44:41

标签: filter frequency extraction

有没有一种简单的方法可以从信号中提取主频率/周期(不使用FFT)?

根据我的要求,这可能导致主频率的值(例如3Hz)或表示目标频率强度的值。例如,在下面的1-D信号中,频率约为4Hz,假设采样率为50ms。

如何以编程方式从数据中提取它?

10 2 1 2 8 10 8 2 1 1 8 10 7 1 1 2 7 10 五 1

1 个答案:

答案 0 :(得分:2)

使用自动关联!

%using Matlab

%convert sample rate to hertz

fs = 1/(50/1000) % result = 20hz

vector = [10 2 1 2 8 10 8 2 1 1 8 10 7 1 1 2 7 10 5 1];

R = xcorr(vector);

[pks,locs]=findpeaks(R);

%result in hertz

fs./(diff(locs))

ans =

3.3333    4.0000    3.3333    3.3333    4.0000    3.3333

max(fs./diff(locs))

ans =

4
  • 在信号上应用Autocorrelation,你可以找到很多 Web中的源代码以不同的语言进行自相关,伪代码:

    TotalSamples = length(signal)
    for z=1:TotalSamples
     sum = 0;
    
     for i=1:TotalSamples
    
               sum = sum + (signal(i)*signal(i + pos));
    
     end
    
     Xcorre(z) = Xcorre(z) + sum;
    end
    
  • 从自相关结果中找出所有局部峰

  • 计算本地峰值locs[k+1] - locs[k]

  • 之间的差异
  • 将帧速率除以局部峰值之差

  • 频率是最大值