窗函数介绍
文章内容主要来源于
Fast Fourier Transform Introduction
我们知道数字信号处理的主要数学工具是傅里叶变换,而傅里叶变换是研究整个时间域和频率域的关系,当运用计算机实现测试信号处理时,不可能对无限长的信号进行测量和运算,而是取其有限的时间片段进行分析。具体做法是从信号中截取一个时间片段,然后用截取的信号时间片段进行周期延拓处理,得到虚拟的无限长信号,再进行傅里叶变换和相关分析。无限长信号被截断后,其频谱发生了畸变,我们称为频谱能量泄漏,为了减少频谱泄漏,可采用不同的截取函数对信号进行截断,截断函数称为窗函数,简称为窗。
一 为什么要加窗
每次FFT变换只能对有限长度的时域数据进行变换,因此需要对时域信号进行信号截断,即使是周期信号,如果截断的时间长度不是周期的整数倍(整周期截断),那么截取后的信号将会存在频谱泄漏,为了将这个泄漏误差减少到最小程度(不是消除),我们需要使用窗函数。加窗主要是为了使时域信号似乎更好的满足FFT处理的周期性要求,减少泄漏。
图1 整周期截断、非整周期截断及加窗后的频谱
如上图1所示,若整周期截断,则FFT频谱为单一谱线。若为非整周期截断,则频谱出现拖尾,可以看出泄漏很严重。为了减少泄漏,给信号施加一个窗函数,原始截断后的信号与这个窗函数相乘之后得到的信号为图1最右侧的信号。可以看出,此时信号的起始时刻和结束时刻幅值都为0,也就是说在这个时间长度内,信号为周期信号,但是只有一个周期,对这个信号做FFT分析,相比之前未加窗的频谱,泄漏已明显改善,但并未完全消除,因此窗函数只能减少泄漏,不能消除泄漏。
二 窗函数的定义
信号截断时,只能截取一定长度,哪怕原始信号是无限长,就好像是用一个“窗”(确切来说更像一个“框”)去做这样的截取。如下图2所示,原始信号是周期信号,时间很长,截取时用红色的“窗”去截取这个周期信号,截取得到的信号如图3所示。
图2 原始信号
图3 时间窗截断后的信号
当然,这个“窗”是一个单位权重的加权函数,成为“矩形窗”。这个“窗”外的信号是看不到的,就好比通过窗户看外面的世界,世界很大也很精彩,但您能看到的只是位于窗内的世界。这就是为什么这样的加权函数被成为窗函数的真正原因。
上图3中用于截取信号的时域截取函数称为窗函数,它是一种加权函数,不同窗的加权是不一样的,也就是说,可以用不同的窗函数来做信号截断。常用的窗函数有矩形窗、汉宁窗、平顶窗和指数窗等。
三 窗函数的时频域特征
加窗实质是用一个所谓的窗函数与原始的时域信号做乘积的过程,使得相乘后的信号似乎更好的满足傅里叶变换的周期性要求,如下图4所示,原始的信号是不满足FFT变换的周期性要求的,变换后存在泄漏,如果施加一个窗函数,会在一定程度上减少泄漏。
原始周期信号 窗函数 加窗后的信号
图4 信号加窗
使用不同的时间窗,他们的时域形状和频域特征是不相同的,这里主要介绍三种常见的窗函数的时域表达形式,以及他们的时域窗形状和频域特征。这三种窗分别是矩形窗、汉宁窗和平顶窗。它们的时域表达式如下表所示,并且假设时间窗的范围为0≤t≤T,t的取值区间不同,窗函数的表达形式会略有差异。
窗函数 时域表达式
矩形窗
汉宁窗
平顶窗
矩形窗、汉宁窗和平顶窗的时域形状和频域特征如下图5~图6所示,可以看出,窗函数不同,时域和频域都是不同的。
图5 三种窗函数的时域形状
图6 三种窗函数的频域特征
窗函数的典型频谱特征如下图7所示:
图7 窗函数的典型频谱特征
四 加窗函数的原则
- 加窗函数时,应使窗函数频谱的主瓣宽度应尽量窄,以获得高的频率分辨能力
- 旁瓣衰减应尽量大,以减少频谱拖尾。
但通常都不能同时满足这两个要求,各种窗的差别主要在集中于主瓣的能量和分散在所有旁瓣的能量之比。窗函数的选择取决于分析的目标和被分析信号的类型,一般来说,有效噪声频带越宽,频率分辨能力越差,越难于分清有相同幅值的邻近频率。选择性的提高与旁瓣的衰减率有关,通常有效噪声带宽窄的窗,其旁瓣的衰减率较低,因此窗的选择在二者中进行折中处理。
窗函数的选择一般原则如下:
1. 如果截断的信号仍为周期信号,则不存在泄漏,无需加窗,相当于加矩形窗;
2. 如果信号是随机信号或者未知信号,或者有多个频率分量,测试关注的是频率点而非能量大小,建议选择汉宁窗;
3. 对于校准目的,则要求幅值精确,平顶窗是个不错的选择;
4. 如果同时要求幅值精度和频率精度,可选择凯塞窗;
5. 如果检测两个频率相近、幅值不同的信号,建议用布莱克曼窗;
6. 锤击法试验,力信号加力窗,响应可加指数窗。
有效噪声带宽怎么定义的?
如何在窗函数时域或频域上判断有效噪声带宽大小?
如何在Matlab中对比分析不同窗函数的时频特性?