1. 补偿系数
前面文章已经讲过信号加入窗函数可以减少频谱的泄露,但是加入窗函数后会引起信号值的衰减,此时需要对信号值进行修正。如下图是幅值为3,频率为80Hz的一个正弦信号。
对该信号加入汉宁窗作fft变换,此时频谱曲线如下图所示:
如果我们只关心信号的幅值,此时需要采用的是幅值修正,此时从图中可看出应该在200Hz处应该乘以2。
如果此时采用能量修正的话,此时正弦信号的所有能量:
此时信号需要修正的系数是:
常用的窗函数的幅值和能量修正系数如下表格所示,表格中的点数为1024:
窗函数
幅值系数
能量系数
矩形窗
1
1
汉宁窗
2
1.6338
汉明窗
1.8516
1.5863
三角窗
1.998
1.7312
高斯窗
2.401
1.8399
布莱克曼窗
2.3810
1.8119
Matlab代码实现:
clc
clear all
N=1024;
w=hann(N);
fAmp=sum(w);
fAmp=1.0/(fAmp/(N))
psdscale=w'*w;
psdscale=1.0/(psdscale/(N));
psdcsale=sqrt(psdscale)
2.主瓣
窗函数除了修正系数,还需要关注主瓣宽度等参数。
在这里主瓣分为两种,一种是主瓣带宽(ENBW),还有一种是主瓣3dB带宽。
主瓣3dB带宽一般指的是窗的频谱,指的是频谱峰值的半功率带,一般就是指的是峰值的处的带宽。
主瓣带宽即等效噪声带宽(ENBW),指的是双边的噪声带宽。
Pxx = periodogram(x,hanning(length(x)),[],Fs,'centered','psd');
Sxx = periodogram(x,hanning(length(x)),[],Fs,'centered','power');
plot(1:1:N,Sxx./Pxx)
在Matlab中代码实现,ENBW代表的信号的功率谱密度函数与能量的比值或者直接用ENBW函数。
当信号通过幅值系数修正后,窗函数的能量与实际信号的比值的系数:
以上图中80Hz幅值为3的正弦信号,经汉宁窗后,此时对信号进行幅值比例系数调整,将幅值都乘以2:
此时:
即。
3.栅栏效应
除了信号存在泄露原因外,由于傅里叶频谱变换是离散的,当信号的频率不存在频率分辨率上,此时信号的能量就会在频率左右的谱线。比如当点数为1024,采样率是1024时,此时频率分辨率是1Hz,当频率80.5Hz,幅值为3的正弦信号经过矩形窗时,此时对信号作频谱变换,此时的频谱为:
从图中可以明显看出80.5Hz的正弦信号分布到80Hz与81Hz的谱线上,该现象存在栅栏现象。当信号频率不同,频率分辨率不同时,信号的幅值误差即栅栏损失是不同的。当信号的频率在谱线中间时,栅栏损失是更大的即幅值误差更大。
更高旁瓣,旁瓣衰减
更高旁瓣指的是更大边瓣的幅值,边瓣衰减指的是边瓣谱峰渐进衰减速度。如图所示。
常用窗函数的参数如下图所示:
窗函数
主瓣
ENBW
主瓣
3dB带宽
更大幅值误差(栅栏损失)(dB)
更高旁瓣/dB
旁瓣衰减/每倍频程
矩形窗
1
0.89
-3.92(36.3%)
-13
-6dB
汉宁窗
1.5
1.44
-1.42(15.1%)
-32
-18dB
汉明窗
1.36
1.3
-1.78(20.6%)
-43
-6dB
布莱克曼窗
1.73
1.68
-1.10(12.5%)
-58
-18dB