更改 FFT 箱位置

信息处理 fft 离散信号 零填充
2022-02-10 13:54:20

我正在以 44100kHz 对信号进行采样,并且我有 1024 个样本在其上执行 FFT。因此,我的 bin 分辨率约为 43 hz/bin,因此我获得能量的频率是 43hz 的倍数:43Hz、86Hz、129Hz 等...

问题是我需要计算能量的频率位于这些垃圾箱之间!具体来说,我有: BIN[389]= 16750 Hz BIN[390]= 16793 Hz 但我希望计算 16781Hz、16824Hz、...

我可以通过数学运算来获取我需要的信息吗?零填充?或者在执行 FFT 之前将我的样本乘以指数?

谢谢您的帮助

2个回答

实际上可以用复指数预乘信号,从而改变 FFT 箱的中心频率。特别有用的是移动半个 bin 的乘法,因为它保持实值时域信号的复共轭对称性,并且最终在 N/2 频率处得到 N/2 复数,而不是在 N/2-1 处得到 N/2+1 频率复数和两个实数(奈奎斯特和 DC)。

但是,这实际上取决于您要做什么。将 FFT 幅度解释为“能量”有点问题。您不仅在中心频率处获得能量,而且在一堆频率上获得能量的加权总和,其中加权函数大致具有 sin(x)/x 形状。FFT 的频率选择性实际上并不是特别好,并且它不是实际计算特定频带中的能量的好工具。

零填充也可用于提高频率分辨率,但您需要记住,FFT 假定离散信号和 PERIODIC 信号,因此只能对充分衰减的信号进行零填充(如滤波器的脉冲响应)或者当应用加窗来减轻信号和零点之间的转换时。

如果您在 FFT 之前对信号使用了矩形窗口(例如,与无窗口相同),那么您可以使用 Sinc 插值内核在 bin 中心之间插入任何点(短窗口 Sinc 插值内核可能是一个足够好的近似值)。

零填充和使用更长的 FFT 与此插值相同,如果您需要大量插值点,计算量可能会更少。

请注意,“bin”不仅包含一个频率,而且实际上包含宽度约为 1 到 2 个 bin 的带通滤波器的结果(除非使用合适的非矩形窗口,否则会有很多阻带纹波)。