今天,我想談的是數字訊號處理中的兩個重要的問題,什麼是頻譜洩露,以及什麼是窗函式,為什麼使用窗函式。
我想大部分人和我一樣,在學習數字訊號處理或者從事相關工作時,會遇到相關的問題,那麼今天,就給大家分析頻譜洩露這個問題。
大家在其他地方也經常聽見頻譜洩露這個概念,那麼頻譜洩露究竟是什麼呢?
頻譜洩露,來自於對於原訊號序列的截斷,大家可能會問:為什麼有時候頻譜沒有洩露,有時候頻譜又洩露了?今天我們就來談談這個問題,是真的頻譜沒有洩露嗎?
我們大家知道對於理論分析來說,序列都是無限長的,而對於實際的離散時間訊號,我們都是有限長的,那麼想想,通過理論分析我們得出的頻譜,和我們利用fft計算得到的頻譜區別在哪呢?區別就在於,我們在不知不覺中使用了矩形窗對原無限長序列進行了截斷,其實按道理來說,頻譜已經不再是我們理想的訊號了,而是被矩形窗截斷之後的訊號。我們都知道,矩形窗的時域和頻域對應關係是這樣的:
;%取樣頻率1000hz
w=boxcar
(100);
%生成長度為100的矩形窗t=0
:1/fs:1-
1/fs;
%假設訊號持續期為1s,矩形窗持續0.1s
x=[w',
zeros(1
,length
(t)-
100)];
%生成訊號f=0
:fs/n:
(fs-fs/n)
;%頻率刻度
f=f-fs/2;
%頻率刻度
y=abs
(fft
(x));y=
fftshift
(y);
plot
(f,y)
%在這裡沒有考慮幅度譜修正的問題
首先我在這裡想提示大家的是,matlab中的fft是dft的快速計算,正如大家在這裡看到的矩形窗的時域和頻域的對應這樣,洩露都是存在的。對於乙個單頻訊號來說,在頻域表現為衝擊,而這樣的矩形窗,與無限長訊號相乘,相當於為頻域做卷積,單頻訊號被擴散成了這樣類似sa函式的表示形式。那麼,我們怎麼才能避免頻譜洩露呢?
在這裡,我首先想解釋這樣乙個問題為什麼洩露一直存在,但是有時看不到,有時候看得到?為什麼我們看不到的原因,是因為在柵欄效應中,我們在頻率域取樣點,除了在0頻率點處取到1的樣值,其餘地方,我們都取到的是0的樣值,所以在我們看來,「沒有洩露」。而一旦我們非週期取樣,我們會在sa函式的非零點處取得樣值,從而導致洩露。上面的原理我引用宋知用《matlab數字訊號處理85個案例精講-從入門當高階》中的一幅圖
引入窗函式的目的,就是為了減小由於訊號頻譜洩露對臨近頻率的影響。下面我給出窗函式的型別及相關引數。
窗函式旁瓣峰值db
近似過渡頻寬
精確過渡頻寬
阻帶最小衰減/db
matlab函式
矩形窗-13
4 πn
\frac
n4π
1.8 πn
\frac
n1.8π
21boxcar(n)
三角形窗
-258πn
\frac
n8π
6.1 πn
\frac
n6.1π
25triang(n)
漢寧窗-31
8 πn
\frac
n8π
6.2 πn
\frac
n6.2π
44hanning(n)
哈明窗-41
8 πn
\frac
n8π
6.6 πn
\frac
n6.6π
53hamming(n)
布萊克曼窗
-5712πn
\frac
n12π11πn
\frac
n11π74
blackman(n)
凱賽窗-57—10πn
\frac
n10π80
blackman(n)
matlab窗函式的頻譜 如何理解頻譜洩露?
這只是我個人的理解,錯誤之處還請指正。如果原始訊號中有頻率成分處於兩個基本函式的頻率之間,會怎麼樣呢?fig.1 a 解釋了答案,原始訊號包含兩路不同頻率的正弦波,一路頻率與基本函式匹配,一路頻率不匹配。前者用乙個點就能表示峰值,而後者則會出現乙個峰值伴隨著兩個尾巴的頻譜,即發生了譜洩露 拖尾 可以...
關於MATLAB FFT頻譜洩露和加窗
我們分析的訊號,如果只含整數次諧波的話,用fft分析訊號的頻譜和相位是非常準確的,如果訊號含有確定的間諧波,比如訊號含有60hz和65hz的頻率,那我們也可以準確的分析出訊號的頻譜和相位,我們只要用矩形窗擷取10個周波的訊號就可以分析出50hz 10 5hz以及5hz的整數倍的訊號的頻譜和相位了,分...
FFT頻譜洩露和加窗 (一)
我們分析的訊號,如果只含整數次諧波的話,用fft分析訊號的頻譜和相位是非常準確的,如果訊號含有確定的間諧波,比如訊號含有60hz和65hz的頻率,那我們也可以準確的分析出訊號的頻譜和相位,我們只要用矩形窗擷取10個周波的訊號就可以分析出50hz 10 5hz以及5hz的整數倍的訊號的頻譜和相位了,分...