1. 程式人生 > >快速傅立葉變換在訊號處理中的應用

快速傅立葉變換在訊號處理中的應用

傅立葉變換FT(Fourier Transform)是一種將訊號從時域變換到頻域的變換形式。它在聲學、訊號處理等領域有廣泛的應用。計算機處理訊號的要求是:在時域和頻域都應該是離散的,而且都應該是有限長的。而傅立葉變換僅能處理連續訊號,離散傅立葉變換DFT(Discrete Fourier Transform)就是應這種需要而誕生的。它是傅立葉變換在離散域的表示形式。但是一般來說,DFT的運算量是非常大的。在1965年首次提出快速傅立葉變換演算法FFT(Fast Fourier Transform)之前,其應用領域一直難以拓展,是FFT的提出使DFT的實現變得接近實時。DFT的應用領域也得以迅速拓展。除了一些速度要求非常高的場合之外,FFT演算法基本上可以滿足工業應用的要求。由於數字訊號處理的其它運算都可以由DFT來實現,因此FFT演算法是數字訊號處理的重要基石。

傅立葉原理表明:任何連續測量的時序或訊號,都可以表示為不同頻率的正弦波訊號的無限疊加。而根據該原理創立的傅立葉變換演算法利用直接測量到的原始訊號,以累加方式來計算該訊號中不同正弦波訊號的頻率、振幅和相位。如圖1所示,即為時域訊號與不同頻率的正弦波訊號的關係,這是最近翻閱文獻看到的對於時域頻域表示的最簡單明瞭的圖,原處為參考文獻中的第二個連結,有興趣的朋友可以去原文查閱。圖中最右側展示的是時域中的一個訊號,這是一個近似於矩形的波,而圖的正中間則是組成該訊號的各個頻率的正弦波。從圖中我們可以看出,即使角度幾乎為直角的正弦波,其實也是由眾多的弧度圓滑的正弦波來組成的。在時域影象中,我們看到的只有一個矩形波,我們無從得知他是由這些正弦波組成。但當我們通過傅立葉變換將該矩形波轉換到頻域之後,我們能夠很清楚的看到許多脈衝,其中頻域圖中的橫軸為頻率,縱軸為振幅。因此可以通過這個頻域影象得知,時域中的矩形波是由這麼多頻率的正弦波疊加而成的。

圖1   時域頻域關係圖

這就是傅立葉變換的最基本最簡單的應用,當然這是從數學的角度去看傅立葉變換。在訊號分析過程中,傅立葉變換的作用就是將組成這個回波訊號的所有輸入源在頻域中按照頻率的大小來表示出來。傅立葉變換之後,訊號的幅度譜可表示對應頻率的能量,而相位譜可表示對應頻率的相位特徵。經過傅立葉變換可以在頻率中很容易的找出雜亂訊號中各頻率分量的幅度譜和相位譜,然後根據需求,進行高通或者低通濾波處理,最終得到所需要頻率域的回波。

傅立葉變換在影象處理過程中也有非常重要的作用,設訊號f是一個能量有限的模擬訊號,則其傅立葉變換就表示訊號f的頻譜。從純粹的數學意義上看,傅立葉變換是將一個函式轉換為一系列周期函式來處理的。從物理效果看,傅立葉變換是將影象從空間域轉換到頻率域,其逆變換是將影象從頻率域轉換到空間域。換句話說,傅立葉變換的物理意義是將影象的灰度分佈函式變換為影象的頻率分佈函式。傅立葉逆變換是將影象的頻率分佈函式變換為灰度分佈函式。傅立葉頻譜圖上我們看到的明暗不一的亮點,其意義是指影象上某一點與鄰域點差異的強弱,即梯度的大小,也即該點的頻率的大小。一般來講,梯度大則該點的亮度強,否則該點亮度弱。這樣通過觀察傅立葉變換後的頻譜圖,也叫功率圖,我們就可以直觀地看出影象的能量分佈:如果頻譜圖中暗的點數更多,那麼實際影象是比較柔和的,這是因為各點與鄰域差異都不大,梯度相對較小;反之,如果頻譜圖中亮的點數多,那麼實際影象一定是尖銳的、邊界分明且邊界兩邊畫素差異較大的。

下面我們以訊號處理過程中的一個例子來詳細說明FFT的效果:假設取樣頻率為Fs,訊號頻率為F,取樣點數為N。那麼FFT處理之後的結果就是一個點數為N點的複數。每一個點就對應著一個頻率點,而每個點的模值,就是該頻率值下的幅度特性。假設原始訊號的峰值為A,那麼在處理後除第一個點之外的其他點的模值就是A的N/2倍。而第一個點就是直流分量,它的模值就是直流分量的N倍。而每個點的相位呢,就是在該頻率下的訊號的相位。第一個點表示直流分量(即頻率為0Hz),而最後一個點N的再下一個點(實際上這個點是不存在的,這裡是假設的第N+1個點,也可以看做是將第一個點分做兩半分,另一半移到最後)則表示取樣頻率Fs,這中間被N-1個點平均分成N等份,每個點的頻率依次增加。例如某點n所表示的頻率為:Fn=(n-1)*Fs/N。由上面的公式可以看出,Fn 所能分辨到的最小頻率為Fs/N,如果取樣頻率Fs為1024Hz,取樣點數N為1024點,則最小解析度可以精確到1Hz。1024Hz的取樣率取樣1024點,剛好是1秒,也就是說,取樣1秒時間的訊號並做FFT處理,則結果可以分析到1Hz;如果取樣2秒時間的訊號並做FFT處理,則結果可以精確到0.5Hz。

假設現在我們有一個輸入訊號,該訊號總共包含3種成分訊號,其一是5V的直流分量;其二是頻率為50Hz、相位為-60度、幅度為10V的交流訊號;第三個成分訊號是頻率為100Hz、相位為90度、幅度為5V的交流訊號。該輸入訊號用數學表示式表示如下:

                                            S=5+10*cos(2*pi*50*t-pi*60/180)+5*cos(2*pi*100*t+pi*90/180)

圖2 輸入訊號

圖2即為S訊號的影象表示。現在,我們以256Hz的取樣率Fs對這個訊號進行取樣,取樣點數N同樣為256點。根據公式我們可以算出其頻譜圖中的頻率精度為1Hz。因此對於輸入訊號頻率包含0Hz、50Hz和100hz的複合訊號,在其經過FFT處理之後,應該會在頻譜圖中出現3個峰值,而且頻率分別為0Hz、50Hz和100Hz,處理結果如圖3所示:

圖3 訊號頻譜全圖

結果正如我們所預料的,對輸入訊號’S’做FFT處理之後,圖3中出現了5個峰值,這是因為對輸入訊號做256點的FFT處理之後並沒有第257個頻點資訊,這也是前文中所提到的第一個點的模值是N倍的原因。因此,訊號的 FFT結果具有一定的對稱性。一般情況下,我們只使用前半部分的結果,即小於取樣頻率一半的結果。對於影象進行簡單處理後,我們的前半部分的FFT結果如圖4所示:

圖4  處理後的頻譜圖

從圖4中可以看出,三個輸入訊號頻點的幅值依次為1280、1280、640;其他頻率所對應的幅值均為0。按照公式,可以計算直流分量(頻率為0Hz)的幅值為:1280/N= 1280/256=5;頻率為50Hz的交流訊號的幅值為:1280/(N/2)= 1280/(256/2)=10;而75Hz的交流訊號的幅值為640/(N/2)=640/(256/2)=5。這也正是我們輸入訊號中的三個分量的直流分量值,由此可見,從頻譜分析出來的幅值是正確的。

通過上面的例子我們可以看出,對於一個輸入訊號,假如我們不能確定該輸入訊號的頻率組成,我們對其進行FFT處理之後,便可以很輕鬆的看出其頻率分量,並且可以通過簡單的計算來獲知該訊號的幅值資訊等。另外,如果想要提高頻率解析度,我們根據計算公式首先想到的就是需要增加取樣點數,但增加取樣點數也就意味著計算量增加,這在工程應用中增加了工程難度。解決這個問題的方法有頻率細分法,比較簡單的方法是取樣較短時間的訊號,然後在後面補充一定數量的0,使其長度達到需要的點數(一般為2的冪次方的點數),然後再做FFT,就能在一定程度上提高頻率解析度。

參考文獻