如何在 FFT 中选择频率分辨率和窗口大小?

电器工程 数字信号处理器 fft
2022-01-28 14:43:53

我正在对频率从 200Hz 变化到 10kHz 的时变信号进行频谱分析。我正在使用 FFT 分析信号中的频率分量。我的问题是:

  1. 如何确定信号的频率分辨率和窗口宽度?
  2. 哪种窗函数适合时变信号?
  3. FFT 的最佳尺寸应该是多少?

信号的采样率为 44.1kHz。

2个回答

由于您使用的是固定采样率,因此您的 FFT 长度(这将要求您的窗口具有相同的宽度)将增加您的频率分辨率。拥有更精细的频率分辨率的好处是双重的:显而易见的是,您可以获得更精细的频率分辨率,这样您就可以区分频率非常接近的两个信号。第二个是,频率分辨率越高,FFT 本底噪声就越低。系统中的噪声具有固定功率,与 FFT 的点数无关,并且该功率均匀分布(如果我们说的是白噪声)到所有频率分量。因此,拥有更多频率分量意味着您的频率区间的单个噪声贡献将降低,而总集成噪声保持不变,从而降低本底噪声。这将使您能够区分更高的动态范围。

但是,使用较长的 FFT 也有缺点。第一个是您需要更多的处理能力。FFT 是一种 O(NlogN) 算法,其中 N 是点数。虽然它可能不像幼稚的 DFT 那样引人注目,但 N 的增加将开始使您的处理器流血,尤其是当您在嵌入式系统的范围内工作时。其次,当你增加 N 时,你会获得频率分辨率,而你会失去时间分辨率。N 越大,您需要采集更多样本才能得出频域结果,这意味着您需要采集更长的样本时间。您将能够检测到更高的动态范围和更精细的频率分辨率,但如果您正在寻找杂散,您将不太清楚该杂散何时发生。

您应该使用的窗口类型完全是另一个主题,我不知道要给您一个更好的答案。然而,不同的窗口具有不同的输出特性,其中大多数(如果不是全部)是可逆的后处理 FFT 结果。某些窗口可能会使您的频率分量泄漏到侧箱(如果我没记错的话,汉宁窗口会使您的组件出现在三个箱上。),其他窗口可能会为您提供更好的频率精度,同时为您的组件引入一些增益误差。这完全取决于您要达到的结果的性质,因此我会进行一些研究(或一些模拟)以得出最适合您的特定应用的结果。

所以首先,采样频率必须至少是信号最大频率的两倍(44.1kHz > 2x10kHz)。接下来,如果时域中的窗口长度为 T,则 FFT 的频率分辨率恰好为 1/T。使用 FFT 的频域分辨率与时域中的采样频率无关。但是正如前面的回答中指出的那样,时域窗口不能太大,因为那样你会丢失关于仅暂时弹出的虚假信号的信息。因此必须在频率分辨率和检测杂散信号之间进行折衷。最后,FFT 并不是将信号从时域转换到频域的唯一算法。如果您正在寻找时域中样本数量有限的频域高分辨率,您可以使用高分辨率频谱估计技术,例如 MUSIC 和 ESPIRIT。这些也用于到达方向(DOA)估计,这与频谱估计问题非常相似。