窗函数详解
为什么需要窗函数(频谱泄露)
离散傅里叶变换,建立在“假设分析信号是整数周期且满足采样率的情况下”,本质上是对原信号的周期延拓。
但做信号截断(分帧)时,往往是无法满足上述条件的:做信号截断时,是无法满足周期截断的。
上图为原信号和非周期分帧得到的信号
可以看到,在主频点附近的频点上,也有着许多不可忽视的能量。即主频点能量泄露到附近频点上了。 通过上述两个对比实验,可以看到。因为非周期截断,得到的帧,无法满足DFT的条件:周期主值序列。进而做FFT时,会导致频谱泄露。
到这里,我们可以得到一个初步的结论:频谱泄露是由于非周期截断导致的。
窗函数直观表示
如果想解决频谱泄露问题,只有周期截断。但实际情况下,很难做到周期截断,既然无法解决问题,只能尽可能减少问题带来的影响。
为了减少泄露,用一个窗函数乘原始信号,得到加窗后的信号为周期信号,从而满足DFT变换的周期性要求。 上图为原始信号(上)以及窗信号(下) 下图为加窗后的信号
可以定性看到,加窗的信号(上)相比原信号(下)做FFT后,频谱能量更为集中:集中于两个点中,其它频点能量变少。即,加窗能减少频谱泄露。
窗函数时域频域参数
使用不同的窗函数,它的时域形状和频域特征是不相同的。在这,介绍三种常见的窗函数的时域表达形式,以及它们的时域窗形状和频域特征。这三种窗分别是矩形窗、汉宁窗和平顶窗。它们的时域表达形式如下表所示,并且假设时间窗的范围为0≤t≤T,如果时间t的取值区间不同,窗函数的表达形式也会略有差异。
窗函数 | 时域表达式 |
---|---|
矩形窗 | ( w(t) = 1 ) |
汉宁窗 | ( w(t) = \frac{1}{2} \left( 1 - \cos \frac{2 \pi t}{T} \right) ) |
平顶窗 | ( w(t) = \frac{1 - 1.93 \cos \frac{2 \pi t}{T} + 1.29 \cos \frac{4 \pi t}{T} - 0.388 \cos \frac{6 \pi t}{T} + 0.0322 \cos \frac{8 \pi t}{T}}{4.634} ) |
窗函数的典型频谱特征如下图所示:
各种窗函数频谱特征的主要差别在于:主瓣宽度(也称为有效噪声带宽,ENBW)、幅值失真度、最高旁瓣高度和旁瓣衰减速率等参数。加窗的主要想法是用比较光滑的窗函数代替截取信号样本的矩形窗函数,也就是对截断后的时域信号进行特定的不等计权,使被截断后的时域波形两端突变变得平滑些,以此压低谱窗的旁瓣。因为旁瓣泄露量最大,旁瓣小了泄露也相应减少了。不同的窗函数具有不同的频谱特征,下表列出了一些常用窗函数的特征。
窗类型 | 主瓣 ENBW | 主瓣 3dB 带宽 | 幅值误差/dB(百分比) | 最高旁瓣/dB | 旁瓣衰减/dB 每 10 个倍频程 |
---|---|---|---|---|---|
矩形窗 | 1.0 | 0.89 | -3.92 (36.3%) | -13.3 | -20 |
汉宁窗 | 1.50 | 1.44 | -1.42 (15.1%) | -31.5 | -60 |
哈明窗 | 1.36 | 1.30 | -1.78 (20.6%) | -43.2 | -20 |
平顶窗 | 3.77 | 3.72 | -0.01 (0.1%) | -93.6 | 0 |
凯塞窗 | 1.80 | 1.71 | -1.02 (11.1%) | -66.6 | -20 |
布莱克曼窗 | 2.0 | 1.68 | -1.10 (12.5%) | -92.2 | -20 |
主瓣宽度主要影响信号能量分布和频率分辨能力。频率的实际分辨能力为有效噪声带宽乘以频率分辨率,因此,主瓣越宽,有效噪声带宽越宽,在频率分辨率相同的情况下,频率的分辨能力越差。如下图所示,红色为平顶窗(3.77∆f),黑色为汉宁窗(1.5∆f),蓝色为信号频率,可以明显地看出,主瓣越窄,频率分辨越准确。对于窗函数宽的主瓣而言,如果有邻近的小峰值频率,则越难辨别出来。 旁瓣高低及其衰减率影响能量泄漏程度。旁瓣越高,说明能量泄漏越严重,衰减越慢,频谱拖尾越严重。
窗函数选取的原则
加窗函数时,应使窗函数频谱的主瓣宽度应尽量窄,以获得高的频率分辨能力;旁瓣衰减应尽量大,以减少频谱拖尾,但通常都不能同时满足这两个要求。各种窗的差别主要在于集中于主瓣的能量和分散在所有旁瓣的能量之比。窗的选择取决于分析的目标和被分析信号的类型。
一般来说,有效噪声频带越宽,频率分辨能力越差,越难于分清有相同幅值的邻近频率。选择性(即分辨出强分量频率邻近的弱分量的能力)的提高与旁瓣的衰减率有关。通常,有效噪声带宽窄的窗,其旁瓣的衰减率较低,因此窗的选择是在二者中取折衷。
因而,窗函数的选择一般原则如下:
- 如果截断的信号仍为周期信号,则不存在泄漏,无须加窗,相当于加矩形窗。
- 如果信号是随机信号或者未知信号,或者有多个频率分量,测试关注的是频率点而非能量大小,建议选择汉宁窗,像LMS Test.Lab中默认加的就是汉宁窗。
- 对于校准目的,则要求幅值精确,平顶窗是个不错的选择。
- 如果同时要求幅值精度和频率精度,可选择凯塞窗。
- 如果检测两个频率相近、幅值不同的信号,建议用布莱克曼窗。