如何计算出fft输出的频率?

时间:2017-03-19 20:17:43

标签: arduino signal-processing fft

我正在制作计步器应用程序,我正在运行加速度计数据的实时fft,我在Arduino 101上使用arduinoFFT(kosme)库。

所以我们说我的采样频率是100Hz。我感兴趣的是身体的向下运动,它匹配1-4Hz左右的步行或跑步频率。包括我使用的库在内的许多库似乎都具有计算量级功能。这实际上给了我一半的振荡器数量(如果我输入64个样本,它将给我32个振幅)。

所以我的问题是这些振幅对应的频率是多少? 在库提供的示例代码中,频率计算如下:

for (int i=0; i<(noofbins>>1); i++) {
  freq[i]=((i*samplingfreq)/(noofbins>>1));
}

我真的不明白为什么会这样,如果我对此完全愚蠢,请原谅。此外,这确实给出了0到100Hz的频率(我使用的采样频率)。是否有任何方法可以在不降低采样频率的情况下优化fft关于感兴趣的频率以匹配&#39;它(这在这里可能是一个可怕的想法)?

1 个答案:

答案 0 :(得分:0)

  

这些振幅对应的频率是多少?

我不确定你得到的那个例子,以及为什么它除以noofbins>>1。每个箱的频率的正确公式由下式给出:

for (int i=0; i<(noofbins>>1); i++) {
  freq[i]=((i*samplingfreq)/noofbins);
}

这将为您提供从0到奈奎斯特频率(采样频率的一半)的频率。在您的具体情况下,从0到50Hz(增量为100/64 = 1.5625Hz)。

  

有没有办法在不降低采样频率 [...] 的情况下改善fft关于感兴趣的频率?

捕获更多数据,即增加用作FFT输入的采样数量,将导致FFT的更好的频率分辨率。例如,使用128个样本(略大于1秒的数据)而不是64个,将频率增量从1.5625Hz降低到0.78125Hz。将样本数量进一步增加到256(约2.5秒)会将频率增量降低到~0.39Hz。