Mathematica 文档中列出了许多窗口函数。在计算离散傅里叶变换时,我尝试使用一些来减少泄漏。据我所知,使用哪个窗口函数几乎没有区别。其中两个非常不同的是 BartlettHannWindow 和 BlackmanHarrisWindow。有人可以提供一个例子,其中 BarttletHannWindow 是一个非常好的选择,另一个例子是 BlackmanHarrisWindow 是一个非常好的选择。这可能有助于我理解为什么有这么多可供选择。
为什么有这么多窗口函数?
除了减少频谱泄漏之外,在选择窗函数时还有一个主要的权衡取舍。下面你可以看到一个带有各种参数的图。其中两个是最重要的:
- 主瓣宽度
- 峰值旁瓣电平
主瓣宽度会影响分析的分辨率。我相信你知道时域中的乘法是频域中的卷积。默认情况下,您总是使用矩形窗口,它的频率响应形式为功能。
例如,两个纯正弦曲线(傅里叶变换是狄拉克三角洲)的频率可能非常接近,峰值可能很难区分,因此可能会合二为一。在下图中,我比较了两个正弦曲线的 4 个窗口函数,两个正弦曲线被 3 个频率区间完全分开。您可以看到 Nuttall 窗口的主瓣宽度以及它如何影响分离,而矩形窗口是主瓣宽度可能最窄的窗口(即最低归一化等效噪声带宽 - NENBW)
另一方面,当存在频谱泄漏时,第一旁瓣的电平会影响识别相邻频率的能力,并且具有高幅度频率的旁瓣几乎“覆盖”了旁边的其他频率,幅度要低得多:
这里是权衡......你不能得到非常低的旁瓣和非常窄的主瓣,即不可能像矩形窗口那样具有主峰的窗口函数,并且旁瓣的水平非常低如在 Nuttal 窗口中。这是一些窗口的比较:
除了上面提到的参数之外,还有更多的功能,例如:
- 旁瓣滚降率(旁瓣下降的速度——例如见上面的 Bartlett 和 Nuttal)
- 存在分析频率响应方程(在进行理论计算时很有用)
- 进行重叠时将窗口样本求和到时域中的常数值(例如 Hann 窗口与重叠)
当您要执行 STFT 然后重建时域信号时,这非常有用。
所以现在回答你的问题。为什么我们有这么多窗口函数?
根据任务是否是简单的 FFT 分析:密集的正弦波、白噪声、脉冲声音,甚至 FIR 滤波器设计,建议使用不同类型的窗口。显然,在 90% 的情况下,人们使用 Hamming/Hanning 窗口或根本不使用窗口。然而,对于某些特定信号,您可能会发现根据窗口选择提取的特征往往更具辨别力。
有关窗口函数的更多信息,请参阅:
G. Heinzel 等人 - DFT 的频谱和频谱密度估计,包括窗口函数的综合列表和一些新的平顶窗口
主要区别在于频率和幅度分辨率以及计算复杂性之间。Wiki 有相当全面的报道http://en.wikipedia.org/wiki/Window_function