我如何获得FFT中每个值的频率?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (20)

我有一个FFT结果。这些存储在两个double数组中:一个实数部分数组和一个虚数部分数组。我如何确定这些数组中每个元素对应的频率?

换句话说,我想创建一个数组来存储FFT的每个实部和虚部的频率。

提问于
用户回答回答于

FFT实际上计算的是互相关具有正弦和余弦函数(基函数)的输入信号,频率范围相等。对于给定的FFT输出,有一个对应的频率(F),这是我贴出的答案给出的。输出样本的真实部分是输入信号与cos(2*pi*F*t)而虚部是输入信号的互相关。sin(2*pi*F*t)...。输入信号与sincos函数是考虑输入信号和基函数之间的相位差。

通过获取复FFT输出的幅度,可以得到输入信号与一组频率上的正弦信号的相关性程度,而不管输入信号相位如何。

用户回答回答于

在FFT的第一二进制值是DC(0赫兹),第二是Fs / N,其中Fs被采样率和N在FFT的大小。下一个bin是2 * Fs / N。为了表达这一点,一般来说,第n个bin是n * Fs / N

因此,如果采样率Fs是44.1 kHz,而FFT大小N是1024,那么FFT输出箱位于:

  0:   0 * 44100 / 1024 =     0.0 Hz
  1:   1 * 44100 / 1024 =    43.1 Hz
  2:   2 * 44100 / 1024 =    86.1 Hz
  3:   3 * 44100 / 1024 =   129.2 Hz
  4: ...
  5: ...
     ...
511: 511 * 44100 / 1024 = 22006.9 Hz

扫码关注云+社区