漢寧窗的性質

2021-07-11 19:37:22 字數 3653 閱讀 7657

對數碼訊號進行快速傅利葉變換,可得到數碼訊號的分析頻譜。分析頻譜是實際頻譜的近似。傅利葉變換是對延拓後的週期離散訊號進行頻譜分析。如果取樣不合適,某一頻率的訊號能量會擴散到相鄰頻率點上,出現頻譜洩漏現象。

為了減少頻譜洩漏,通常在取樣後對訊號加窗。常見的窗函式有矩形窗(即不加窗)、三角窗、漢寧窗、漢明窗、高斯窗等。除了矩形窗外,其他的窗在時域上體現為中間高,兩端低。

傅利葉分析的頻率解析度主要是受窗函式的主瓣寬度影響,而洩漏的程度則依賴於主瓣和旁瓣的相對幅值大小。矩形窗有最小的主瓣寬度,但是在這些最常見的窗中,矩形窗的旁瓣最大。因此,矩形窗的頻率解析度最高,而頻譜洩漏則最大。不同的窗函式就是在頻率解析度和頻譜洩漏中作乙個折中選擇。

在電機故障診斷領域,需同時考慮頻率解析度和頻譜洩漏。應用最廣泛的窗函式是漢寧窗。

漢寧窗的英文寫法有兩種: hann 窗和 hanning 窗。正確寫法是 hann,但是在實際使用過程中和漢明窗 (hamming)混淆而慢慢變成了 hanning (參見維基百科 hann function 條目)。目前,這兩種表述都可以。在 matlab 中,也存在 hann 和 hanning 兩個函式。每乙個窗函式都可以選擇 『symmetric』 或 『periodic』 型別。』symmetric』 型別表示窗函式是對稱的,對稱的窗函式主要用於濾波器的設計。』periodic』 型別表示窗函式是週期性的,常用於頻譜分析。因此,這裡只比較 『periodic』 型別的 hann 和 hanning。

在 matlab 中, 可通過w = hann(n,'periodic')w = hanning(n,'periodic')來獲得長度為 n 的窗函式。實際上,上述兩個函式得到的窗函式是完全一樣的,均等價於ω(

n)=1

2[1−

cos(2π

(n−1

)n)]

其驗證過程如下:

n = 20;%窗函式的長度

w1 = hann(n,'periodic');

w2=zeros(n,1);

for n=1:n

w2(n) = 0.5*(1-cos(2*pi*(n-1)/n));

endfigure(1);

subplot(2,1,1);

plot(w2);

title(['hann(n,','periodic',')']);

subplot(2,1,2);

plot(w1-w2);

w3 = hanning(n,'periodic');

figure(2);

subplot(2,1,1);

plot(w3);

title(['hanning(n,','periodic',')']);

subplot(2,1,2);

plot(w3-w1);

ylim([-2e-16, 2e-16]);

title(['hann(n,','periodic',') 和 ', 'hanning(n,','periodic',') 的誤差'])

其輸出的波形如下:

值得注意的是,w = hann(n,'symmetric')w = hanning(n,'symmetric')並不是一回事。前者等價於ω(

n)=1

2[1−

cos(2π

(n−1

)n−1

)]而後者則等價於ω(

n)=1

2[1−

cos(2π

nn+1

)]

%% 訊號

% 訊號引數

fs = 2500; %取樣頻率

n=fs*10;

t=(1:n)/fs;

w1=49.85*2*pi;

w2=w1+2*pi*1;

w3=w1-2*pi*1;

x = 10*cos(w1*t) + 0.005*cos(w2*t)+0.03*cos(w3*t);

%% 窗函式對訊號頻譜的影響

% 矩形窗

x1 = x;

myplotf=(0:(n-1))*fs/n;

ff1=fft(x1,n);

y1=abs(ff1)*2/n;%fft幅值

y1(1)=y1(1)/2;

figure(3);

plot(myplotf,20*log10(y1));

xlim([40 60]);

title('矩形窗後的頻譜');

% 漢寧窗

w = hanning (n,'periodic');

x2 = w'.*x;%加窗

ff2=fft(x2,n);

y2=abs(ff2)*2/n;%fft幅值

y2(1)=y2(1)/2;

figure(4);

plot(myplotf,20*log10(y2));

xlim([40 60]);

title('漢寧窗後的頻譜');

不加窗(矩形窗)時的頻譜為

加漢寧窗時的頻譜為

從上述兩個圖可以看到,加入漢寧窗後,頻譜洩露減小。原來被洩露的能量所掩蓋而看不到的頻率分量也可以清晰地看到。

波形為 x=

asin(2

πft)

的訊號,加漢寧窗後進行傅利葉分析,其傅利葉頻譜中頻率為

f 的分量幅值為 a2

(不考慮頻譜洩露問題)。

例:

fs = 1000;%取樣頻率

t = 1/fs:1/fs:0.2;%分析時間0.2s

a = 10; %幅值

f = 50; %頻率

x = a * sin(2*pi* f*t);

n = numel(t);

w = hann(n,'periodic');%生成窗函式

x_window = w'.*x;

myplotf=(0:(n-1))*fs/n;

ff=fft(x,n);

y=abs(ff)*2/n;%fft幅值

ff=fft(x_window,n);

y_window=abs(ff)*2/n;%加窗後fft幅值

figure(5);

plot(myplotf,y,'r',myplotf,y_window,'k');

legend('不加窗(矩形窗)','加漢寧窗');

title('加漢寧窗對訊號頻譜頻譜幅值的影響');

xlim([0 100]);

得到的結果如下圖所示:

從圖上可以看到,幅值為 10 的訊號,不加窗時得到的幅值也為 10 (由於恰好能取到50 hz 這個頻率點,所以不存在頻譜洩露), 加入漢寧窗後的幅值變為了原來的一半。但是,會在該頻率點兩側各引入乙個本不存在的頻率點,且這些點的幅值為中心點幅值的一半。這是由漢寧窗本身的頻譜決定的。

上述結果表明:

matlab 中,w = hann(n,'periodic')w = hanning(n,'periodic')是完全一樣的;

加窗後頻譜洩漏減小;

加漢寧窗後,其幅值減為原來的一半,且會在改頻率點兩旁各引入乙個本不存在的點,且這兩個點的幅值為中心點幅值的一半。

申明:本博文來自 xinhuasz 的部落格,位址為

FFT 頻域漢寧窗

legend fft fft加窗 hold off title 不對fft結果進行log運算 figure hold on plot freq,20 log10 abs y ori r plot freq,20 log10 abs y new b legend fft fft加窗 hold off ...

語音識別 漢明窗

首先,hamming 函式的作用是返回乙個l點的對稱海明窗列向量w。語音頻號一般在10ms到30ms之間,我們可以把它看成是平穩的。為了處理語音頻號,我們要對語音頻號進行加窗,也就是一次僅處理窗中的資料。因為實際的語音頻號是很長的,我們不能也不必對非常長的資料進行一次性處理。明智的解決辦法就是每次取...

不同組織的窗寬窗位

頭顱,腦組織 窗寬設定為80 hu 100 hu,窗位為30 hu 40 hu,垂體及蝶鞍區病 變窗寬宜設在200 hu 250 hu,窗位45 hu 50 hu,腦出血患者可改變 窗寬位80 hu 140 hu,窗位30 hu 50 hu,腦梗死患者 常用窄窗60 hu,能提高病灶的檢出率,清楚顯...