什么是窗函数?
似乎每次做FFT都需要加窗函数,很少有不加窗函数的时候。那为什么要加窗函数,加窗有什么好处,又有什么坏处呢,凭什么目的来加函数呢?
1. 为什么要加窗
在《什么是泄漏?》中已经讲到每次FFT变换只能对有限长度的时域数据进行变换,因此,需要对时域信号进行信号截断。即使是周期信号,如果截断的时间长度不是周期的整数倍(周期截断),那么,截取后的信号将会存在泄漏。为了将这个泄漏误差减少到最小程度(注意说是的减少,而不是消除),我们需要使用加权函数,也叫窗函数。加窗主要是为了使时域信号似乎更好地满足FFT处理的周期性要求,减少泄漏。
如下图所示,若周期截断,则FFT频谱为单一谱线。若为非周期截断,则频谱出现拖尾,如图中部所示,可以看出泄漏很严重。为了减少泄漏,给信号施加一个窗函数(如图中上部红色曲线所示),原始截断后的信号与这个窗函数相乘之后得到的信号为上面右侧的信号。可以看出,此时,信号的起始时刻和结束时刻幅值都为0,也就是说在这个时间长度内,信号为周期信号,但是只有一个周期。对这个信号做FFT分析,得到的频谱如下部右侧所示。相比较之前未加窗的频谱,可以看出,泄漏已明显改善,但并没有完全消除。因此,窗函数只能减少泄漏,不能消除泄漏。
因此,加窗目的是为了减少泄漏。但加窗不能消除泄漏,只能减少。
2. 窗函数定义
信号截断时,只能截取一定长度,哪怕原始信号是无限长的,因此,好像是用一个“窗”(确切地说更像个“框”)去作这样的截取了。如下图所示,原始信号是周期信号,时间很长,截取时用红色的“窗”去截取这个周期信号,截取得到的信号如图中下部所示。
原始信号和时间窗截断后的信号
当然这个“窗”是一个单位权重的加权函数,称为“矩形窗”。这个“窗”外的信号是看不到的,只能看到窗内的信号,这就好比通过窗户看外面的世界,世界很大也很精彩,您能看到的只是位于窗内的世界,而窗外的世界,您是看不到的。因此,这就是为什么这样的加权函数被称为窗函数的真正原因。这样称呼更为直观形象。
上图中用于截取信号的时域截取函数(就是上图中红色的那个“窗”)就称为窗函数,它是一种计权函数,不同的窗函数计权是不一样的。也就是说,可以用不同的截取函数(窗函数)来做信号截取。到底用何种窗函数基于信号类型和分析目的。常用的窗函数有矩形窗、汉宁窗、平顶窗、指数窗等。
3. 窗函数时频域特征
加窗实质是用一个所谓的窗函数与原始的时域信号作乘积的过程(当然加窗也可以在频域进行,但时域更为普遍),使得相乘后的信号似乎更好地满足傅立叶变换的周期性要求。如下图所示,原始的信号是不满足FFT变换的周期性要求的,变换后存在泄漏,如果施加一个窗函数,会在一定程度上减少泄漏。为了减少泄漏,用一个窗函数与原始周期信号相乘,得到加窗后的信号为周期信号,从而满足FFT变换的周期性要求。
原始周期信号×窗函数
加窗后的信号
使用不同的时间窗,它的时域形状和频域特征是不相同的。在这,介绍三种常见的窗函数的时域表达形式,以及它们的时域窗形状和频域特征。这三种窗分别是矩形窗、汉宁窗和平顶窗。它们的时域表达形式如下表所示,并且假设时间窗的范围为0≤t≤T,如果时间t的取值区间不同,窗函数的表达形式也会略有差异。
矩形窗、汉宁窗和平顶窗的时域形状和频域特征如下图所示,可以看出,窗函数不同,时域和频域都是不同的。
频谱特征
为了减少泄漏,可采用不同的窗函数来进行信号截取,因而,泄漏与窗函数的频谱特征相关的。窗函数的典型频谱特征如下图所示:
窗函数的典型频谱特征
各种窗函数频谱特征的主要差别在于:主瓣宽度(也称为有效噪声带宽,ENBW)、幅值失真度、最高旁瓣高度和旁瓣衰减速率等参数。加窗的主要想法是用比较光滑的窗函数代替截取信号样本的矩形窗函数,也就是对截断后的时域信号进行特定的不等计权,使被截断后的时域波形两端突变变得平滑些,以此压低谱窗的旁瓣。因为旁瓣泄露量最大,旁瓣小了泄露也相应减少了。不同的窗函数具有不同的频谱特征,下表列出了一些常用窗函数的特征。
主瓣宽度主要影响信号能量分布和频率分辨能力。频率的实际分辨能力为有效噪声带宽乘以频率分辨率,因此,主瓣越宽,有效噪声带宽越宽,在频率分辨率相同的情况下,频率的分辨能力越差。如下图所示,红色为平顶窗(3.77∆f),黑色为汉宁窗(1.5∆f),蓝色为信号频率,可以明显地看出,主瓣越窄,频率分辨越准确。对于窗函数宽的主瓣而言,如果有邻近的小峰值频率,则越难辨别出来。
旁瓣高低及其衰减率影响能量泄漏程度(频谱拖尾效应)。旁瓣越高,说明能量泄漏越严重,衰减越慢,频谱拖尾越严重。对50.5Hz(频率分辨率为1Hz)的信号分别施加矩形窗(红色)、汉宁窗(绿色)和平顶窗(蓝色),用对数显示幅值,加窗后的结果如下图所示。从图中可以看出,矩形窗的频谱拖尾更严重。
相对而言,如果旁瓣能量较小,高度趋于零,使得信号能量相对集中于主瓣,则较为接近真实的频谱。不同的窗函数对信号频谱的影响是不一样的,这主要是因为不同的窗函数,产生泄漏的大小不一样,频率分辨能力也不一样。
4. 加窗函数原则
加窗函数时,应使窗函数频谱的主瓣宽度尽量窄,以获得高的频率分辨能力;旁瓣衰减应尽量大,以减少频谱拖尾,但通常都不能同时满足这两个要求。各种窗的差别主要在于集中于主瓣的能量和分散在所有旁瓣的能量之比。
窗的选择取决于分析的目标和被分析信号的类型。一般说,有效噪声频带越宽,频率分辨能力越差,越难于分清有相同幅值的邻近频率。选择性(即分辨出强分量频率邻近的弱分量的能力)的提高与旁瓣的衰减率有关。通常,有效噪声带宽窄的窗,其旁瓣的衰减率较低,因此窗的选择是在二者中取折衷。
因而,窗函数的选择一般原则如下:
- 如果截断的信号仍为周期信号,则不存在泄漏,无须加窗,相当于加矩形窗。
- 如果信号是随机信号或者未知信号,或者有多个频率分量,测试关注的是频率点而非能量大小,建议选择汉宁窗,像LMS Test.Lab中默认加的就是汉宁窗。
- 对于校准目的,则要求幅值精确,平顶窗是个不错的选择。
- 如果同时要求幅值精度和频率精度,可选择凯塞窗。
- 如果检测两个频率相近、幅值不同的信号,建议用布莱克曼窗。
- 锤击法试验力信号加力窗,响应可加指数窗。
5. 模态测试所用窗函数
所有的窗函数都会使时域信号的开始和结束端归零。用于锤击试验的“力窗”和“指数窗”却是个例外。
力窗是单位增益的窗函数(实质是部分矩形窗),作用于脉冲激励发生的那部分时段。加力窗是为了消除可能来自于力锤激励通道的噪声。通常,设置力窗的宽度约为数据样本窗口的2~10%,使得力脉冲完全位于这个单位增益窗内,力窗之外的时域样本纪录则被加权置零。需要着重注意的是,力窗从来不能消除测试过程中可能出现的二次连击的影响。使用力窗消除连击所造成的影响,将严重扭曲输入力谱。
指数窗通常用于在采样时间长度内信号没有完全衰减到零的响应信号。指数窗的应用强制响应信号更好地满足FFT变换的周期性要求。通常,对于小阻尼结构,锤击激起的结构响应在采样时间长度的末端不会完全衰减到零。这种情况下,变换后的数据将遭受泄漏影响。为了将泄漏减少到最低程度,需要对测量响应数据施加指数窗,如下图所示。
对于锤击法测试,应尽量实现无泄漏的测量,即响应不需要加指数窗,因为加窗之后,相对而言,阻尼会是过估计,使得估计出来的阻尼大于实际阻尼。因此,可以通过增加采样时间,使响应有足够的时间衰减,以避免加窗。
对于激振器测试最常用是矩形窗和汉宁窗。需要明白的是所有窗函数都会使数据失真。需要记住的是窗函数总是会使测到的峰值发生失真,并且总会给出这样的假象:测量得到的FRF中的结构阻尼大于结构实际存在的阻尼,而这两个非常重要的属性刚好是我们需要从FRF中估计的属性。矩形窗会使得幅值失真36%,汉宁窗失真16%。FRF的幅值失真从而使得阻尼估计不准确。
6. 窗函数带来的影响
窗函数会使信号幅值失真,那么窗函数对计算RMS值是否有影响呢?由于加窗使得频率峰值失真,因此,如果计算峰值处的RMS值,必然也是有影响的。如下图所示,由于峰值高低不一样,则对应的RMS也不一样。但如果计算窄带RMS或整个频带的总RMS值呢?
从上图可以看出,不同的窗函数下,计算19~87Hz内的总有效值都为0.71,因此,对于不同的窗函数下,计算总有效值是没有影响的。因为能量虽然泄漏到旁瓣上,但总的能量是不变的。
从第3小节中对比原始信号和加窗后的信号可以看出,信号的能量在起始和结束位置都计权置零,因而,从能量的角度来考虑,加窗后的信号能量要比加窗之前的能量小。因此,如果对信号施加了窗函数,则频谱还需要进行修正。修正分幅值修正和能量修正,如果是单条谱线则为幅值修正;如果是宽带则为能量修正。关于加窗后的频谱修正,请参考《简单总结FFT变换的幅值和能量校正》。但需要记住一点,这个工作,通常商业软件会自动处理,无须人工处理,只需要知道有这么一步工作即可。
在《01.04:锤击测试使用指数窗会引起什么问题吗?》一文中曾经指出,锤击法测试对响应加指数窗以最小化泄漏是必须的,但是如果加大的指数窗函数可能会扭曲了真实的FRF,致使在FRF的密集模态很难观测到。因此,指数窗的使用,虽然是数字信号处理必须考虑的事项,但是当估计小阻尼结构和密集模态时,如果使用不当,将会引起一些严重的问题。
每个窗函数对数据的频域描述都有影响。一般而言,窗函数将降低函数峰值幅值的精度,并且使得最终得到的阻尼似乎比实际真实存在的阻尼要更大。尽管这些误差完全是不想要的,但相比泄漏造成的严重失真而言,它们还是更能让人接受。