泄漏與窗函數(shù)頻譜的兩側(cè)旁瓣有關(guān),對(duì)于窗函數(shù)的選用總的原則是,要從保持最大信息和消除旁瓣的綜合效果出發(fā)來(lái)考慮問(wèn)題,盡可能使窗函數(shù)頻譜中的主瓣寬度應(yīng)盡量窄,以獲得較陡的過(guò)渡帶;旁瓣衰減應(yīng)盡量大,以提高阻帶的衰減,但通常都不能同時(shí)滿(mǎn)足這兩個(gè)要求。頻譜中的如果兩側(cè)瓣的高度趨于零,而使能量相對(duì)集中在主瓣,就可以較為接近于真實(shí)的頻譜。不同的窗函數(shù)對(duì)信號(hào)頻譜的影響是不一樣的,這主要是因?yàn)椴煌拇昂瘮?shù),產(chǎn)生泄漏的大小不一樣,頻率分辨能力也不一樣。信號(hào)的加窗處理,重要的問(wèn)題是在于根據(jù)信號(hào)的性質(zhì)和研究目的來(lái)選用窗函數(shù)。圖1是幾種常用的窗函數(shù)的時(shí)域和頻域波形,其中矩形窗主瓣窄,旁瓣大,頻率識(shí)別精度最高,幅值識(shí)別精度最低,如果僅要求精確讀出主瓣頻率,而不考慮幅值精度,則可選用矩形窗,例如測(cè)量物體的自振頻率等;布萊克曼窗主瓣寬,旁瓣小,頻率識(shí)別精度最低,但幅值識(shí)別精度最高;如果分析窄帶信號(hào),且有較強(qiáng)的干擾噪聲,則應(yīng)選用旁瓣幅度小的窗函數(shù),如漢寧窗、三角窗等;對(duì)于隨時(shí)間按指數(shù)衰減的函數(shù),可采用指數(shù)窗來(lái)提高信噪比。表1 是幾種常用的窗函數(shù)的比較。
如果被測(cè)信號(hào)是隨機(jī)或者未知的,或者是一般使用者對(duì)窗函數(shù)不大了解,要求也不是特別高時(shí),可以選擇漢寧窗,因?yàn)樗男孤⒉▌?dòng)都較小,并且選擇性也較高。但在用于校準(zhǔn)時(shí)選用平頂窗較好,因?yàn)樗耐◣Р▌?dòng)非常小,幅度誤差也較小。
表1 幾種常用的窗函數(shù)的比較
名稱(chēng) | 特點(diǎn) | 應(yīng)用 |
矩形窗 Rectangle | 矩形窗使用最多,習(xí)慣上不加窗就是使信號(hào)通過(guò)了矩形窗。這種窗的優(yōu)點(diǎn)是主瓣比較集中,缺點(diǎn)是旁瓣較高,并有負(fù)旁瓣,導(dǎo)致變換中帶進(jìn)了高頻干擾和泄漏,甚至出現(xiàn)負(fù)譜現(xiàn)象。頻率識(shí)別精度最高,幅值識(shí)別精度最低,所以矩形窗不是一個(gè)理想的窗。 | 如果僅要求精確讀出主瓣頻率,而不考慮幅值精度,則可選用矩形窗,例如測(cè)量物體的自振頻率等,也可以用在階次分析中。 |
漢寧窗 Hanning | 又稱(chēng)升余弦窗。主瓣加寬并降低,旁瓣則顯著減小,從減小泄漏觀點(diǎn)出發(fā),漢寧窗優(yōu)于矩形窗.但漢寧窗主瓣加寬,相當(dāng)于分析帶寬加寬,頻率分辨力下降。它與矩形窗相比,泄漏、波動(dòng)都減小了,并且選擇性也提高。 | 是很有用的窗函數(shù)。如果測(cè)試信號(hào)有多個(gè)頻率分量,頻譜表現(xiàn)的十分復(fù)雜,且測(cè)試的目的更多關(guān)注頻率點(diǎn)而非能量的大小,需要選擇漢寧窗。如果被測(cè)信號(hào)是隨機(jī)或者未知的,選擇漢寧窗。 |
海明窗 (漢明窗) Hamming | 與漢寧窗都是余弦窗,又稱(chēng)改進(jìn)的升余弦窗,只是加權(quán)系數(shù)不同,使旁瓣達(dá)到更小。但其旁瓣衰減速度比漢寧窗衰減速度慢。 | 與漢明窗類(lèi)似,也是很有用的窗函數(shù)。 |
平頂窗 Flap Top | 平頂窗在頻域時(shí)的表現(xiàn)就象它的名稱(chēng)一樣有非常小的通帶波動(dòng)。 | 由于在幅度上有較小的誤差,所以這個(gè)窗可以用在校準(zhǔn)上。 |
凱塞窗 Kaiser | 定義了一組可調(diào)的由零階貝塞爾Bessel 函數(shù)構(gòu)成的窗函數(shù),通過(guò)調(diào)整參數(shù)β可以在主瓣寬度和旁瓣衰減之間自由選擇它們的比重。對(duì)于某一長(zhǎng)度的Kaiser 窗,給定β,則旁瓣高度也就固定了。 | |
布萊克曼窗 Blackman | 二階升余弦窗,主瓣寬,旁瓣比較低,但等效噪聲帶寬比漢寧窗要大一點(diǎn),波動(dòng)卻小一點(diǎn)。頻率識(shí)別精度最低,但幅值識(shí)別精度最高,有更好的選擇性。 | 常用來(lái)檢測(cè)兩個(gè)頻率相近幅度不同的信號(hào)。 |
高斯窗 Gaussian | 是一種指數(shù)窗。主瓣較寬,故而頻率分辨力低;無(wú)負(fù)的旁瓣,第一旁瓣衰減達(dá)一55dB。常被用來(lái)截短一些非周期信號(hào),如指數(shù)衰減信號(hào)等。 | 對(duì)于隨時(shí)間按指數(shù)衰減的函數(shù),可采用指數(shù)窗來(lái)提高信噪比。 |
三角窗 (費(fèi)杰窗) Fejer | 是冪窗的一次方形式。與矩形窗比較,主瓣寬約等于矩形窗的兩倍,但旁瓣小,而且無(wú)負(fù)旁瓣。 | 如果分析窄帶信號(hào),且有較強(qiáng)的干擾噪聲,則應(yīng)選用旁瓣幅度小的窗函數(shù),如漢寧窗、三角窗等; |
切比雪夫窗(Chebyshev) | 在給定旁瓣高度下,Chebyshev窗的主瓣寬度最小,具有等波動(dòng)性,也就是說(shuō),其所有的旁瓣都具有相等的高度。 |
下面是幾種窗函數(shù)歸一化DTFT幅度的MATLAB程序:
附上DTFT函數(shù)(dtft.m):
function [ X ] = dtft( x,n,w )
% Computes Discrete-time Fourier Transform
% [X] = dtft(x,n,w)
% X = DTFT values computed at w.frequencies
% x = finite duration sequence over n
% n = sample position vector
% w = frequency location vector
X = x*exp(-j*n'*w);
%
end
矩形窗:
%DTFT of a Rectangular Window, M=10,25,50,101
clc; close all;
Hf_1=figure; set(Hf_1,'NumberTitle','off','Name','P0304a');
w=linspace(-pi,pi,501); wtick=[-1:0.5:1]; magtick=[0:0.5:1.1];
% M=10
M=10; n=0:M; x=ones(1,length(n));
X=dtft(x,n,w); magX=abs(X); magX=magX/max(magX);
subplot(2,2,1); plot(w/pi,magX,'LineWidth',1.5); axis([-1 1 0 1.1]);
ylabel('|X|'); title(['M=10']);
set(gca,'XTick',wtick,'YTick',magtick);
% M=25
M=25; n=0:M; x=ones(1,length(n));
X=dtft(x,n,w); magX=abs(X); magX=magX/max(magX);
subplot(2,2,2); plot(w/pi,magX,'LineWidth',1.5); axis([-1 1 0 1.1]);
title(['M=25']); set(gca,'XTick',wtick,'YTick',magtick);
% M=50
M=50; n=0:M; x=ones(1,length(n));
X=dtft(x,n,w); magX=abs(X); magX=magX/max(magX);
subplot(2,2,3); plot(w/pi,magX,'LineWidth',1.5); axis([-1 1 0 1.1]);
xlabel('\omega/\pi'); ylabel('|X|');
title('M=50'); set(gca,'XTick',wtick,'YTick',magtick);
% M=101
M=101; n=0:M; x=ones(1,length(n));
X=dtft(x,n,w); magX=abs(X); magX=magX/max(magX);
subplot(2,2,4); plot(w/pi,magX,'LineWidth',1.5); axis([-1 1 0 1.1]);
xlabel('\omega/\pi'); ylabel('|X|');
title(['M=101']);
三角窗:
% Triangular Window:
% DTFT of a Triangular Window,M = 10,25,50,101
clc; close all;
Hf_1=figure; set(Hf_1,'NumberTitle','off','Name','P0304b');
w=linspace(-pi,pi,501); wtick=[-1:0.5:1]; magtick=[0:0.5:1.1];
% M = 10
M=10; n=0:M; x=(1-(abs(M-1-(2*n))/(M+1)));
x=dtft(x,n,w); magX=abs(X); magX=magX/max(magX);
subplot(2,2,1); plot(w/pi,magX,'LineWidth',1.5); axis([-1 1 0 1.1]);
ylabel('|X|'); title(['M = 10']);
set(gca,'XTick',wtick,'YTick',magtick);
% M = 25
M=25; n=0:M; x=(1-(abs(M-1-(2*n))/(M+1)));
X=dtft(x,n,w); magX=abs(X); magX=magX/max(magX);
subplot(2,2,2); plot(w/pi,magX,'LineWidth',1.5); axis([-1 1 0 1.1]);
title(['M = 25']); set(gca,'XTick',wtick,'YTick',magtick);
% M = 50
M=50; n=0:M; x=(1-(abs(M-1-(2*n))/(M+1)));
X=dtft(x,n,w); magX=abs(X); magX=magX/max(magX);
subplot(2,2,3); plot(w/pi,magX,'LineWidth',1.5); axis([-1 1 0 1.1]);
xlabel('\omega/\pi'); ylabel('|X|'); title(['M = 50']);
set(gca,'XTick',wtick,'YTick',magtick);
% M = 100
M=101;n=0:M; x=(1-(abs(M-1-(2*n))/(M+1)));
X=dtft(x,n,w); magX=abs(X); magX=magX/max(magX);
subplot(2,2,4); plot(w/pi,magX,'LineWidth',1.5); axis([-1 1 0 1.1]);
xlabel('\omega/\pi'); title(['M = 101']);
set(gca,'XTick',wtick,'YTick',magtick);
海寧窗:
% Hann Window
% DTFT of a Hann Window, M = 10,25,50,101
clc;close all;
Hf_1 = figure; set(Hf_1,'NumberTitle','off','Name','P0304c');
w=linspace(-pi,pi,501); wtick=[-1:0.5:1]; magtick=[0:0.5:1.1];
% M = 10
M=10;n=0:M; x=0.5*(1-cos((2*pi*n)/(M-1)));
X=dtft(x,n,w); magX=abs(X); magX=magX/max(magX);
subplot(2,2,1); plot(w/pi,magX,'LineWidth',1.5); axis([-1 1 0 1.1]);
ylabel('|X|'); title(['M = 10']);
set(gca,'XTick',wtick,'YTick',magtick);
% M = 25
M=25;n=0:M; x=0.5*(1-cos((2*pi*n)/(M-1)));
X=dtft(x,n,w); magX=abs(X); magX=magX/max(magX);
subplot(2,2,2); plot(w/pi,magX,'LineWidth',1.5); axis([-1 1 0 1.1]);
title(['M = 25']);
set(gca,'XTick',wtick,'YTick',magtick);
% M = 50
M=50;n=0:M; x=0.5*(1-cos((2*pi*n)/(M-1)));
X=dtft(x,n,w); magX=abs(X); magX=magX/max(magX);
subplot(2,2,3); plot(w/pi,magX,'LineWidth',1.5); axis([-1 1 0 1.1]);
xlabel('\omega/\pi'); ylabel('|X|'); title(['M = 50']);
set(gca,'XTick',wtick,'YTick',magtick);
% M = 101
M=101;n=0:M; x=0.5*(1-cos((2*pi*n)/(M-1)));
X=dtft(x,n,w); magX=abs(X); magX=magX/max(magX);
subplot(2,2,4); plot(w/pi,magX,'LineWidth',1.5); axis([-1 1 0 1.1]);
xlabel('\omega/\pi'); title(['M = 101']);
set(gca,'XTick',wtick,'YTick',magtick);
哈明窗:
% Hamming Window:
clc; close all;
Hf_1=figure; set(Hf_1,'NumberTitle','off','Name','P0304d');
w=linspace(-pi,pi,501); wtick=[-1:0.5:1]; magtick=[0:0.5:1.1];
% M = 10
M=10; n=0:M; x=(0.54-0.46*cos((2*pi*n)/(M-1)));
X=dtft(x,n,w); magX=abs(X); magX=magX/max(magX);
subplot(2,2,1); plot(w/pi,magX,'LineWidth',1.5); axis([-1 1 0 1.1]);
ylabel('|X|'); title(['M = 10']);
set(gca,'XTick',wtick,'YTick',magtick);
% M = 25
M=25; n=0:M; x=(0.54-0.46*cos((2*pi*n)/(M-1)));
X=dtft(x,n,w); magX=abs(X); magX=magX/max(magX);
subplot(2,2,2); plot(w/pi,magX,'LineWidth',1.5); axis([-1 1 0 1.1]);
title(['M = 25']);
set(gca,'XTick',wtick,'YTick',magtick);
% M = 50
M=50; n=0:M; x=(0.54-0.46*cos((2*pi*n)/(M-1)));
X=dtft(x,n,w); magX=abs(X); magX=magX/max(magX);
subplot(2,2,3); plot(w/pi,magX,'LineWidth',1.5); axis([-1 1 0 1.1]);
xlabel('\omega/\pi'); ylabel('|X|'); title(['M=50']);
set(gca,'XTick',wtick,'YTick',magtick);
% M = 101
M=101; n=0:M; x=(0.54-0.46*cos((2*pi*n)/(M-1)));
X=dtft(x,n,w); magX=abs(X); magX=magX/max(magX);
subplot(2,2,4); plot(w/pi,magX,'LineWidth',1.5); axis([-1 1 0 1.1]);
xlabel('\omega/\pi');title(['M=101']);
set(gca,'XTick',wtick,'YTick',magtick);
聯(lián)系客服