一般的,對正余弦信號進行採樣並DFT運算,畫出頻譜圖,會發現頻譜並不干凈。這樣的現象稱為頻譜泄漏。由於DFT運算僅僅能是有限序列,突然的截斷產生了泄漏。
會有這種特殊情況。當採樣截取的剛好是整數個周期,則頻譜圖顯得特別干凈。
能夠理解為剛好取的完整周期。周期性明顯了,頻率就比較單一。
為此做了matlab實驗:
ts = 0.01;%採樣率100Hz
n = 0:N-1;
y = sin(2*pi*20*n*ts);%20Hz信號,每周期採5個點
xk = abs(fft(y,N));%注意依據fft算法,這里的N和序列長度N是一樣的
stem(xk);
當N = 20、22、24、25時的頻譜:




由於20和25是5的倍數。取的周期是完整的。所以頻譜是干凈的。這就是所謂的特殊情況。
但一般的,取不到完整的周期,頻譜泄漏是避免不了的。並且泄露的嚴重了會影響分辨能力。那么接下來的問題是,怎么提高分辨力?
我們試一試採樣點數,同一時候FFT點數也添加了。當N=64時的頻譜:

通常DFT點數能夠添加。採樣點數添加不了。於是我們有了補零的方法。
以上面的樣例為例。還是64點DFT,可是n是0:24,后面的補零,即 y = [sin(2*pi*20*n*ts),zeros(1,39)];補到64個點。這樣得到的頻譜是:

我們再取高的點數。當採樣點數等於DFT點數等於1024時的頻譜:

當採樣點數靠補零的方法補到1024個點的頻譜:

因此我們得到重要結論:
為了使得頻譜更加精確,即逼近於DTFT的波形,有兩種方法。第一種方法是採樣長度和DFT長度都添加,假設可能應該盡可能採取這樣的方法,這樣的方法能提高實際的分辨率,降低泄漏。另外一種方法是添加DFT長度,而採樣長度通過補零補到一樣的長度。這樣的方法僅僅能添加視在分辨率。該泄漏的還是泄漏了。
