常见的四种窗函数的表达式为:
四种常见窗函数的参数表
对于实际信号序列,该如何选取窗函数呢” />窗函数选择的一般规则
主瓣窄的窗函数一般旁瓣泄漏大,频谱泄漏主要集中在旁瓣范围内。旁瓣衰减大的窗函数,一般主瓣较宽,泄漏主要集中在主瓣范围内。
当选择加窗DFT时,已知采样长度N的选择与最小频域分辨率有关,而从上表中看到采样长度N还与窗函数的主瓣宽度相关,所以N的选择应为
N≥(fs/△fmin)K
式中:K为窗函数的主瓣宽度与矩形窗的主瓣宽度之比。
根据窗函数对数据处理的影响,可参照下列原则选取理想的窗函数:
①窗函数频谱的主瓣应尽可能地窄,以提高谱估计时的频域分辨率和减小泄漏。
②尽量减小窗函数频谱的最大旁瓣的相对幅度,以使旁瓣高度随频率尽快衰减。
若以上两条不能同时得到满足,则往往是增加主瓣宽度以换取对旁瓣的抑制。
总之,在应用窗函数时,除要考虑窗函数频谱本身的特性外,还应充分考虑被分析信号的特点及具体处理要求。
案例、设N=256,用boxcar函数产生矩形窗,以N=256进行FFT,又以N=2048点进行FFT,比较它们的谱图。并用hanning函数,hamming函数和blackman函数得到它们的谱图和时域图,程序如下:
clear all; clc; close all;N=256; % 窗长度 x=boxcar(N); % 设置矩形窗y=hanning(N);z=hamming(N);w=blackman(N);% 第一部分X1=fft(x); % FFTX1_abs=abs(fftshift(X1));% 计算幅值freq1=(-128:127)/N;% 频率刻度1figure(1);subplot 311; plot(freq1,X1_abs,'k');% 作图xlim([-0.1 0.1]);xlabel('归一化频率'); ylabel('幅值');title('(a) 补零前FFT谱图')% 第二部分X2=fft(x,N*8); % 对矩形窗补零后FFTX2_abs=abs(fftshift(X2));% 计算幅值freq2=(-N*4:N*4-1)/(N*8);% 频率刻度2subplot 312; plot(freq2,X2_abs,'k');% 作图xlim([-0.1 0.1]);xlabel('归一化频率'); ylabel('幅值');title('(b) 补零后FFT谱图')X2_dB=20*log10(X2_abs/(max(X2_abs))+eps); % 幅值取分贝值subplot 313; plot(freq2,X2_dB,'k'); % 作图axis([0 0.1 -50 5]);%xlim([-0.1 0.1]);xlabel('归一化频率'); ylabel('幅值/dB');title('(c) 补零后FFT谱图-分贝值')set(gcf,'color','w');%%Y2=fft(y,N*8); % 对hanning窗补零后FFTY2_abs=abs(fftshift(Y2));% 计算幅值Y2_dB=20*log10(Y2_abs/(max(Y2_abs))+eps); % 幅值取分贝值Z2=fft(z,N*8); % 对hamming窗补零后FFTZ2_abs=abs(fftshift(Z2));% 计算幅值Z2_dB=20*log10(Z2_abs/(max(Z2_abs))+eps); % 幅值取分贝值W2=fft(w,N*8); % 对blackman窗补零后FFTW2_abs=abs(fftshift(W2));% 计算幅值W2_dB=20*log10(W2_abs/(max(W2_abs))+eps); % 幅值取分贝值figure(2);plot(freq2,Y2_dB,'k'); % 作图hold on;plot(freq2,X2_dB,'r');plot(freq2,Z2_dB,'b');plot(freq2,W2_dB,'g');axis([0 0.1 -150 5]);%xlim([-0.1 0.1]);xlabel('归一化频率'); ylabel('幅值/dB');title('补零后FFT谱图-分贝值')legend('hanning','boxcar','hamming','blackman');set(gcf,'color','w');figure(3);plot(hanning(N));hold on;plot(boxcar(N));plot(hamming(N));plot(blackman(N));legend('hanning','boxcar','hamming','blackman');title('四种窗函数的时域波形图');
运行结果如下:
在程序第一部分中(第一张图片),N=256,作256点的FFT,得图1(a)。从图中可看
到矩形窗的谱图并不只有一条谱线,且没有泄漏。这是怎么回事?
矩形窗的谱函数为
在N点DFT后离散频率为wk=2πk/N(k=C,1,…,N-1)。把wk代入上式可以发现,除k=0外,其他频点的幅值都为0,这就是为什么在图1(a)中除0点有谱线外,其他都为0值。
要得到常见的矩形窗谱图(把0值之间泄漏的值都能绘制出来),可以通过对数据补零得到。在程序第二部分N=256,但FFT变换长度L=2048,其中在数据后补了1792(256*7)个零值。FFT后的结果见图1(b),同时对FFT后的幅值取分贝值后的结果见图1(c),这就是我们常见的矩形窗的谱图。
同时在程序第二部分,我们得到了四种窗函数的时域波形和频谱图。
参考文献:MATLAB数字信号处理85个实用案例精讲——入门到进阶;宋知用(编著)