FFT功能摘要
1. 为什么要加窗
FFT变换只能对有限长度的时域数据进行变换,因此,需要对时域信号进行信号截断。即使是周期信号,如果截断的时间长度不是周期的整数倍(周期截断),那么,截取后的信号将会存在泄漏。为了将这个泄漏误差减少到最小程度(注意我说是的减少,而不是消除),我们需要使用加权函数,也叫窗函数。加窗主要是为了使时域信号似乎更好地满足FFT处理的周期性要求,减少泄漏。
如下图所示,若周期截断,则FFT频谱为单一谱线。若为非周期截断,则频谱出现拖尾,如图中部所示,可以看出泄漏很严重,位于横轴0点位置的是正弦信号真实频谱,其余频谱均为谱泄漏, 频率单位为“DFT bins”(DFT 量化单位)即这些整数值是DFT采样得到的频率。为了减少泄漏,给信号施加一个窗函数(如图中上部红色曲线所示),原始截断后的信号与这个窗函数相乘之后得到的信号为上面右侧的信号。可以看出,此时,信号的起始时刻和结束时刻幅值都为0,也就是说在这个时间长度内,信号为周期信号,但是只有一个周期。对这个信号做FFT分析,得到的频谱如下部右侧所示。相比较之前未加窗的频谱,可以看出,泄漏已明显改善,但并没有完全消除。因此,窗函数只能减少泄漏,不能消除泄漏
2. 窗函数的定义
Wiki定义:
在信号处理中,窗函数(window function)是一种除在给定区间之外取值均为0的实函数。譬如:在给定区间内为常数而在区间外为0的窗函数被形象地称为矩形窗。任何函数与窗函数之积仍为窗函数,所以相乘的结果就像透过窗口“看”其他函数一样。窗函数在频谱分析、滤波器设计、波束形成、以及音频数据压缩(如在Ogg Vorbis音频格式中)等方面有广泛的应用
信号截断时,只能截取一定长度,哪怕原始信号是无限长的,因此,好像是用一个“窗”(确切地说更像个“框”)去作这样的截取了。如下图所示,原始信号是周期信号,时间很长,截取时用红色的“窗”去截取这个周期信号,截取得到的信号如图中下部所示。
到底用何种窗函数基于信号类型和分析目的。常用的窗函数有矩形窗、汉宁窗、平顶窗、指数窗等。
3. 窗函数的时频域特征
加窗实质是用一个所谓的窗函数与原始的时域信号作乘积的过程(当然加窗也可以在频域进行,但时域更为普遍),使得相乘后的信号似乎更好地满足傅立叶变换的周期性要求。如下图所示,原始的信号是不满足FFT变换的周期性要求的,变换后存在泄漏,如果施加一个窗函数,会在一定程度上减少泄漏。为了减少泄漏,用一个窗函数与原始周期信号相乘,得到加窗后的信号为周期信号,从而满足FFT变换的周期性要求。
使用不同的时间窗,它的时域形状和频域特征是不相同的。并且假设时间窗的范围为0≤t≤T,如果时间t的取值区间不同,窗函数的表达形式也会略有差异。泄漏是与窗函数的频谱特征相关的。窗函数的典型频谱特征如下图所示:
各种窗函数频谱特征的主要差别在于:主瓣宽度(也称为有效噪声带宽,ENBW)、幅值失真度、最高旁瓣高度和旁瓣衰减速率等参数。加窗的主要想法是用比较光滑的窗函数代替截取信号样本的矩形窗函数,也就是对截断后的时域信号进行特定的不等计权,使被截断后的时域波形两端突变变得平滑些,以此压低谱窗的旁瓣。因为旁瓣泄露量最大,旁瓣小了泄露也相应减少了。不同的窗函数具有不同的频谱特征,下表列出了一些常用窗函数的特征
主瓣宽度主要影响信号能量分布和频率分辨能力。频率的实际分辨能力为有效噪声带宽乘以频率分辨率,因此,主瓣越宽,有效噪声带宽越宽,在频率分辨率相同的情况下,频率的分辨能力越差。如下图所示,红色为平顶窗(3.77∆f),黑色为汉宁窗(1.5∆f),蓝色为信号频率,可以明显地看出,主瓣越窄,频率分辨越准确。对于窗函数宽的主瓣而言,如果有邻近的小峰值频率,则越难辨别出来。
旁瓣高低及其衰减率影响能量泄漏程度(频谱拖尾效应)。旁瓣越高,说明能量泄漏越严重,衰减越慢,频谱拖尾越严重。对50.5Hz(频率分辨率为1Hz)的信号分别施加矩形窗(红色)、汉宁窗(绿色)和平顶窗(蓝色),用对数显示幅值,加窗后的结果如下图所示。从图中可以看出,矩形窗的频谱拖尾更严重。
相对而言,如果旁瓣能量较小,高度趋于零,使得信号能量相对集中于主瓣,则较为接近真实的频谱。不同的窗函数对信号频谱的影响是不一样的,这主要是因为不同的窗函数,产生泄漏的大小不一样,频率分辨能力也不一样。
4. 加窗函数的原则
加窗函数时,应使窗函数频谱的主瓣宽度应尽量窄,以获得高的频率分辨能力;旁瓣衰减应尽量大,以减少频谱拖尾,但通常都不能同时满足这两个要求。各种窗的差别主要在于集中于主瓣的能量和分散在所有旁瓣的能量之比。
一般说,有效噪声频带越宽,频率分辨能力越差,越难于分清有相同幅值的邻近频率。选择性的提高与旁瓣的衰减率有关。有效噪声带宽窄的窗,其旁瓣的衰减率较低,因而
窗函数的选择一般原则如下:
1. 如果截断的信号仍为周期信号,则不存在泄漏,无须加窗,相当于加矩形窗。
2. 如果信号是随机信号或者未知信号,或者有多个频率分量,测试关注的是频率点而非能量大小,建议选择汉宁窗,像LMS Test.Lab中默认加的就是汉宁窗。
3. 对于校准目的,则要求幅值精确,平顶窗是个不错的选择。
4. 如果同时要求幅值精度和频率精度,可选择凯塞窗。
5. 如果检测两个频率相近、幅值不同的信号,建议用布莱克曼窗。
6. 锤击法试验力信号加力窗,响应可加指数窗
不应使用窗函数的应用
在一些应用中,最好不使用窗函数。例如:
Ø 在冲击模型测试中,当分析暂态信号,如重锤打击产生的激发信号(脉冲激发技术)时,大部分能量位于记录的开头。若使用非矩形的窗,会无谓的减弱大部分能量和传播频率响应。
Ø 上述的一种推广,当测量自窗口信号,如脉冲,冲击响应,正弦丛发,连续变频丛发,噪声丛发时,这样的信号使用模态分析。在这种情况下应用窗函数只会恶化信噪比。
Ø 测量一个周期T的虚拟随机噪声(PRN)激发信号,并使用相同的记录周期T时。PRN信号是周期性的,因此,该信号的所有频谱分量将会与FFT区间中心重合而无泄漏。
Ø 当测量被锁定于采样频率的重复信号,例如在测量的振动频谱分析的轴对准,轴承,发动机,变速器等的故障诊断。由于信号是重复的,所有的频谱能量被限制到基本的重复频率的整数倍。
Ø 在正交分频多工(OFDM)接收器中,输入信号不经窗函数,被直接乘以FFT。的频率子载波(也称为符号)被设计为恰好对齐FFT频率区间。一个Cyclic prefix通常添加到所传输的信号,使得肇因于多径的频率选择性衰落可用圆周折积模拟,从而避免了在OFDM中相当于频谱泄漏的符号间干扰。
5. 窗函数带来的影响
窗函数会使信号幅值失真,那么窗函数对计算RMS值是否有影响呢?由于加窗使得频率峰值失真,因此,如果计算峰值处的RMS值,必然也是有影响的。如下图所示,由于峰值高低不一样,则对应的RMS也不一样。但如果计算窄带RMS或整个频带的总RMS值(见其他文档)呢?
从下图可以看出,不同的窗函数下,计算19-87Hz内的总有效值都为0.71,因此,对于不同的窗函数下,计算总有效值是没有影响的。因为能量虽然泄漏到旁瓣上,但总的能量是不变的
从前文第三点中对比原始信号和加窗后的信号可以看出,信号的能量在起始和结束位置都计权置零,因而,从能量的角度来考虑,加窗后的信号能量要比加窗之前的能量小。因此,如果对信号施加了窗函数,则频谱还需要进行修正。修正分幅值修正和能量修正,如果是单条谱线则为幅值修正;如果是宽带则为能量修正。这个工作,通常商业软件会自动处理,无须人工处理,只需要知道有这么一步工作即可。
6. 几个常用窗函数
矩形窗(Rectangular)
每个DFT过程都被窗所修饰限制,因为一个有限时间序列等效上是由无限长时间序列乘上一长度与资料区块长度相同(NΔt)的矩形窗。习惯上不加窗就是使信号通过了矩形窗。这种窗的优点是主瓣比较集中,缺点是旁瓣较高,并有负旁瓣,导致变换中带进了高频干扰和泄漏,甚至出现负谱现象。
时域函数:
时域和频域特性:
Hamming窗
时域函数:
时域和频域特性:
当a0=0.53836,即为Hamming窗,a0=0.5为Hanning窗
汉宁窗(Hanning)
时域函数:
时域和频域特性:
Blackman-Harris窗
Blackman-Harris窗是Hamming窗家族的一般化,借由加上更多位移sinc函数而产生,并能够减低旁瓣的影响
时域函数:
时域和频域特性:
平顶窗(Flattop)
时域函数:
时域和频域特性:
7. 实测信号