頻譜洩露與傅利葉變換尤其是離散時間傅利葉變換有關,對於頻譜洩露,通常的解釋是這樣的:
訊號為無限長序列,運算需要擷取其中一部分(截斷),於是需要加窗函式,加了窗函式相當於時域相乘,於是相當於頻域卷積,於是頻譜中除了本來該有的主瓣之外,還會出現本不該有的旁瓣,這就是頻譜洩露!為了減弱頻譜洩露,可以採用加權的窗函式,加權的窗函式包括平頂窗、漢寧窗、高斯窗等等。而未加權的矩形窗洩露最為嚴重。
為了說明頻譜洩露,一下子引入了時域、頻域、窗函式、卷積、主瓣、旁瓣等等抽象的概念。
頻譜洩露有這麼複雜嗎?頻譜洩露到底是什麼意思?
一句話,頻譜洩露就是分析結果中,出現了本來沒有的頻率分量。比如說,50hz的純正弦波,本來只有一種頻率分量,分析結果卻包含了與50hz頻率相近的其它頻率分量。
更簡單的描述是:分析結果與實際不一致!
造成頻譜洩露的原因在於傅利葉變換的輸入訊號不能準確的、完整的代表被分析訊號,輸出產生的一種誤差,這種誤差可以通過加合適的窗函式或延長時間窗得以改善,當輸入訊號的不完整性達到一定程度,輸出是一種錯誤的結果。
對於週期訊號,整週期截斷是不發生頻譜洩露的充分且必要條件,抑制頻譜洩露應該從源頭抓起,盡可能進行整週期截斷。
如x(n)=cos(2π/n),(n=0,1,2,3…..n-1,) n點的fft則不會發生洩露,但2n,或n+1,n+2等均會引起失真,而引起失真可以從表示式上可以看出 x(k)=卷積以後的頻譜在2π/n*k的取樣值,所以如果是2n的dft,為2π/2n*k,相當於n點dft結果各個值中間再取樣了乙個值,而
2π/(n+2)*k,就與n點fft完全不一樣了。
解決辦法:可以擴大窗函式的寬度(時域上的寬了,頻域上就窄了,(時域頻域有相對性),也就是洩露的能量就小了)或者不要加矩形的窗函式,可以加緩變的窗函式,也可以讓洩露的能量變小。因為洩露造成成頻譜的擴大,所以也可能會造成頻譜混疊的現象,而洩露引起的後果就是降低頻譜解析度。
頻譜洩露會令主譜線旁邊有很多旁瓣,這就會造成譜線間的干擾,更嚴重就是旁瓣的能量強到分不清是旁瓣還是訊號本身的,這就是所謂的譜間干擾。
柵欄效應描述的是訊號取樣時只能得到取樣點的資訊,而忽略了取樣間隔中資料資訊的現象。不管是時域取樣還是頻域取樣,都有相應的柵欄效應,只是當時域取樣滿足取樣定理時,柵欄效應不會有什麼影響。而頻域取樣的柵欄效應則影響很大,「擋住」或丟失的頻率成分有可能是重要的或具有特徵的成分,使訊號處理失去意義。減小柵欄效應可用提高取樣間隔也就是頻率分辨力的方法來解決。間隔小,頻率分辨力高,被「擋住」或丟失的頻率成分就會越少。但會增加取樣點數,使計算工作量增加。
連續時間訊號經取樣、截斷後的序列為xn(n),其頻譜函式xn(ejw),並不隨序列末端補零而改變,訊號的頻解析度為fs/n.序列末端補零只能提高訊號頻譜顯示的解析度。換句話說,如果連續時間訊號在離散化或時域加窗截斷過程中,由於頻譜洩漏或混疊等原因已造成訊號頻譜中資訊的失真,則無論怎麼補零做dft,都無法再恢復已損失的資訊。
提高訊號的頻率解析度只有提高訊號的取樣頻率或增加序列的截斷長度
n(訊號的持續時間加長)。
為什麼fft時域補0後,經fft變換就是頻域進行內插?
應該這樣來理解這個問題:
補0後的dft(fft是dft的快速演算法),實際上公式並沒變,變化的只是頻域項(如:補0前fft計算得到的是m*2*pi/m處的頻域值,而補0後得到的是n*2*pi/n處的頻域值),m為原dft長度,n變成了補0後的長度。將(-pi,pi)從原來的m份變成了n份,如果將補0前後的這些頻域值畫在座標上,其中m*2*pi/m和n*2*pi/n重合的部分,它所對應的頻域值(變換後的值)是不變的,而在原來的m份裡多了(n-m)份的分量,即在頻域內多了(n-m)份插值,這樣理解就清楚了。
補零好處有二:
其一是,可使資料點數為2的整次冪,以便於使用fft
其二,對原資料起到了做插值的作用,一方面克服「欄柵」效應,使譜的外觀平滑,
另一方面,由於對資料截短時引起的頻域洩漏,有可能在頻譜中出現一些難以確認的譜峰(見《數字訊號處理》課本147頁圖6-13),補零後有可能消除這種現象。
fft補零:
n點dft的頻譜解析度是2π /n。柵欄效應一節指出可以通過補零觀察到更多的頻點(見《數字訊號處理》課本148頁),但是這並不意味著補零能夠提高真正的頻譜解析度。這是因為x[n]實際上是x(t) 取樣的主值序列,而將x[n]補零得到的x』[n] 週期延拓之後與原來的序列並不相同,也不是x(t)的取樣。因此已是不同離散訊號的頻譜。對於補零至m點的x』的dft,只能說它的解析度2π /m僅具有計算上的意義,並不是真正的、物理意義上的頻譜。頻譜解析度的提高只能在滿足取樣定理的條件下增加時域有效的取樣長度來實現(見《數字訊號處理》課本146頁),而補零並不是時域訊號的有效資料。
離散傅利葉變換(dft)的輸入是一組離散的值,輸出同樣是一組離散的值。在輸入訊號而言,相鄰兩個取樣點的間隔為取樣時間ts。在輸出訊號而言,相鄰兩個取樣點的間隔為頻率解析度fs/n,其中fs為取樣頻率,其大小等於1/ts,n為輸入訊號的取樣點數。這也就是說,dft的頻域解析度不僅與取樣頻率有關,也與訊號的取樣點數有關。那麼,如果保持輸入訊號長度不變,但卻對輸入訊號進行補零,增加dft的點數,此時的解析度是變還是不變?
答案是此時解析度不變。從時域來看,假定要把頻率相差很小的兩個訊號區分開來,直觀上理解,至少要保證兩個訊號在時域上相差乙個完整的週期,也即是相位相差2*pi。
舉個例子,假定取樣頻率為1hz,要將週期為10s的正弦訊號和週期為11s的正弦訊號區分開來,那麼訊號至少要持續110s,兩個訊號才能相差乙個週期,此時週期為10s的那個訊號經歷的週期數為11,而11s的那個訊號經歷的週期書為10。轉化到頻域,這種情況下,時域取樣點為110,解析度為1/110=0.00909,恰好等於兩個訊號頻率只差(1/10-1/11)。如果兩個訊號在時域上不滿足「相差乙個完整週期「的話,補零同樣也不能滿足「相差乙個完整週期」,即解析度不發生變化。另外,從資訊理論的角度,也很好理解,對輸入訊號補零並沒有增加輸入訊號的資訊,因此解析度不會發生變化。
那麼,補零到底會帶來什麼樣的影響呢?因為dft可以看做是對dtft的取樣,補零僅是減小了頻域取樣的間隔。這樣有利於克服由於柵欄效應帶來的有些頻譜洩露的問題。也就是說,補零可以使訊號能在頻域被更細緻地觀察。如果不滿足上述「至少相差乙個完整週期」的要求,即便是如dtft一般在頻域連續,也無法分辨出兩個訊號。
那麼,影響dft解析度最本質的物理機制是什麼呢?在於dft的積累時間,解析度為積累時間t的倒數。這點從數學公式上可以很容易得到: fs
n=1n
∗ts=
1/t
舉個例子說,如果輸入訊號的時長為10s,那麼無論取樣頻率為多少,當然前提是要滿足奈奎斯特定理,其解析度為1/10=0.1hz。
資料後面補零—-不能提高訊號的頻率解析度
序列末端補零後,儘管訊號的頻譜不會變化,但對序列做補零後l點
dft後,計算出的頻譜實際上是原訊號頻譜在[0,2*pi)區間上l個等間隔取樣,從而增加了對真實頻譜取樣的點數,並改變了取樣點的位置,這將會顯示出原訊號頻譜的更多的細節。故而資料後面補零可以克服柵欄效應。資料間隔補零不能提高訊號的頻率解析度資料插值相當於提高了訊號的取樣率,可以提高訊號的頻率解析度
頻譜洩露與窗函式
今天,我想談的是數字訊號處理中的兩個重要的問題,什麼是頻譜洩露,以及什麼是窗函式,為什麼使用窗函式。我想大部分人和我一樣,在學習數字訊號處理或者從事相關工作時,會遇到相關的問題,那麼今天,就給大家分析頻譜洩露這個問題。大家在其他地方也經常聽見頻譜洩露這個概念,那麼頻譜洩露究竟是什麼呢?頻譜洩露,來自...
matlab窗函式的頻譜 如何理解頻譜洩露?
這只是我個人的理解,錯誤之處還請指正。如果原始訊號中有頻率成分處於兩個基本函式的頻率之間,會怎麼樣呢?fig.1 a 解釋了答案,原始訊號包含兩路不同頻率的正弦波,一路頻率與基本函式匹配,一路頻率不匹配。前者用乙個點就能表示峰值,而後者則會出現乙個峰值伴隨著兩個尾巴的頻譜,即發生了譜洩露 拖尾 可以...
關於MATLAB FFT頻譜洩露和加窗
我們分析的訊號,如果只含整數次諧波的話,用fft分析訊號的頻譜和相位是非常準確的,如果訊號含有確定的間諧波,比如訊號含有60hz和65hz的頻率,那我們也可以準確的分析出訊號的頻譜和相位,我們只要用矩形窗擷取10個周波的訊號就可以分析出50hz 10 5hz以及5hz的整數倍的訊號的頻譜和相位了,分...