華北電力大學電氣與電子工程學院 王 濤 陳邵權 范寒柏 王 磊
傳統的FFT方法得到的信號頻譜是一種離散的頻譜,其分辨率為Δf=fs/N,其中,fs為采樣頻率,N為采樣點數。由此我們可以得出,頻譜的分辨率是由采樣頻率fs和采樣點數N來確定,根據乃奎斯特采樣定理,要使信號的頻譜不產生混疊,采樣頻率fs應大于信號帶寬的兩倍。而分辨率的提高(Δf越小分辨率越高)只能通過降低采樣頻率fs或增大采樣點數N,但fs的降低受到乃奎斯特定律的限制,不能過小,過小會發生頻譜混疊;而增加取樣點數會增加運算量和存儲量,使得算法的時間增大,效率降低。由此看來,只有長的時間數據才有可能得到高的頻率分辨力,但是由于實際測量條件和硬件方面等的限制,這樣做并不總是可能的。而在實際測量中,我們往往只是對信號的某一頻段的頻率感興趣,只分析這個頻段的信號即可?;趶驼{制的ZOOMFFT可以實現在較窄的頻帶范圍實現較高的頻率分辨率。是一種折中的方法[4]。因此在很多領域得到了廣泛的應用。

圖1 基于復調制ZoomFFT的基本原理流程圖

圖2 實際信號ZoomFFT后未進行頻率調整的頻譜

圖3 測量物體動態時得到的頻譜
ZoomFFT方法基本原理是:移頻——數字低通濾波——重新抽樣——復FFT——頻率調整,其原理過程如圖1所示。
設模擬信號為x(t),經過A/D采樣后,得到離散的序列x0(n),(n=0,1…N-1),fs為采樣頻率,fe為需要細化頻帶的中心頻率,D為細化倍數,N為FFT的點數,X(k)為輸出的序列。具體的算法過程可歸納為以下幾個步驟:
(1)復調制移頻
所謂復調制移頻指的是將頻域坐標向左或向右移動,使得被觀察的頻段的起點移動到頻域坐標的零頻位置。模擬信號x(t)經過A/D轉換后,得到離散的信號x0(n),假設要觀測的頻帶為f1~f2,則在此頻帶范圍內進行細化分析,觀測的中心頻率為fe=(f1+f2)/2對x0(n)以e-j2πfe/fs進行復調制,得到的頻移信號:

式中fs=NΔf為采樣頻率,Δf為譜線間隔,L0=fe/Δf為頻率的中心移位,也是在全局頻譜顯示中所對應中心頻率fe的譜線序號,則fe=L0Δf。由此可得出,復調制使x0(n)的頻率成分fe移到x(n)的零頻點,也就是說X0(k)中的第L0條譜線移到X(k)中零點頻譜的位置。為了得到X(k)零點附近的部分細化頻譜,可重新抽樣把頻率降到fs/D,D為細化倍數。為了是抽樣后的頻率不發生頻譜混疊,需要在抽樣前進行低通濾波。
(2)數字低通濾波
為了保證重新采樣后的信號在頻譜分析時不發生頻譜混疊,需進行抗混疊濾波,濾出需要分析的頻段信號,設細化倍數為D,則數字低通濾波器的截止頻率fC≤fs/2D。
(3)重新抽樣
信號經過移頻、低通濾波后,分析信號點數變少,但再以較低的采樣頻率進行重新采樣,在通過補零保證相同的采樣點數時,樣本的總長度加大,頻譜的分辨率也就得到了提高。
設原采樣頻率為fs,采樣點數為N,則頻率分辨率為fs/N,現重采樣頻率為fs/D,當采樣點數仍是N是,其分辨率為fs/(D*N),分辨率提高了D倍。這樣就在原采樣頻率不變的情況下得到了更高的頻率分辨率。
(4)復數FFT
重新采樣后的信號實部和虛部是分開的,需要對信號進行N點復FFT,從而得出N條譜線,此時分辨率為Δf′=fs′/N=fs/ND=Δf/D,可見分辨率提高了D倍。
(5)頻率調整
經過算法運行后的譜線不為實際頻率的譜線,需要將其反向搬移,轉換成實際頻率,進而得出細化后的頻率。
目前我們用的芯片是STM32,在芯片上運行ZoomFFT算法程序,可直接調用STM32固件庫,程序簡單、穩定可靠、結構性強。STM32固件庫有FIR濾波器,只要求出所需濾波器參數的系數,調用固件庫的函數即可,計算既快又穩定,效率很高。FFT的實現是通過C語言編的FFT子函數,只要得到輸入序列和FFT點數,調用FFT子函數就可求出FFT的輸出序列。部分核心ZoomFFT的C語言程序如下:

mrelfft(adr,adi,N,-1);
//// /求幅頻特性/////////
for(k=0;k<N;k++)
{p=pow(adr[k],2)+pow(adi[k],2);
fft[k]=sqrt(p);}
//頻率調整可通過公式實現f=fe+i*(fs/(D*1024.0));
算法的驗證通過兩種方式進行了驗證:函數信號發生器加入實際信號;在工程中實際測量。
(1)加實際信號。通過函數信號發生器加頻率為55000Hz、幅值為1V和頻率為55030Hz、幅值為0.7V的實際信號,得到的頻譜如圖2所示。
通過實驗得出,未經過ZOOMFFT的信號,兩個很接近的頻率疊加到了一起,而經過ZoomFFT后的頻譜在分辨率內可以分別,通過分析可得出ZoomFFT得到的信號頻率比直接FFT得到的頻率更真實,分辨率高、誤差小、穩定性好。
(2)在工程中實驗
將算法應用到測量設備中,測量物體動作時的返回頻率,通過動態測量返回信號的頻譜如圖3所示。
由實驗我們可以看出,函數信號發生器的信號是理想信號,測得頻譜均為一根譜線,而實際測量中,由于有噪聲的存在,測量的頻譜不是一根譜線,而是一個峰,但峰頂的位置和實際頻率一致,稍微的運動就可以從峰頂的位置反應出來。
實際的測量時,STM32通過外部AD進行采樣,在其上只運行算法程序,約150毫秒,將移頻時的三角函數的計算用數組表示,也就是將三角函數的值算出放在數組里,移頻時直接調用數組,省去兩次1024點的三角相乘計算的時間,用數組存放三角函數值后,算法程序耗時110毫秒。為降低,我們可測試了調用STM32固件庫自帶的匯編FFT,此時耗時約30毫秒,但STM32自帶的FFT的輸入輸出都是32位整型,計算的精度沒有C語言的浮點型變量FFT精度高。目前我們已經將該算法成功應用到了自己制作的水速測量算法中,并取得了理想的效果。
通過實際的測量分析實現了對某頻段的頻譜細化分析,ZoomFFT在不增大FFT點數N的情況下降低了采樣頻率,提高了在細化頻譜分析中有很重要的作用,可以通過此算法得到欲觀測的頻段局部頻譜特性。由于計算量小,在實際應用中不需要用高速處理芯片,如我們應用的STM32足以滿足其應用??梢奪oomFFT是一個行之有效的解決局部頻段分析的方法。
[1]王世一.數字信號處理[M].北京:北京理工大學出版社(修訂版),1997.
[2]胡廣書.數字信號處理——理論、算法與實現[M].北京:清華大學出版社.1997.
[3]高懷鋼,王華.一種分析頻譜局部特性的快速算法[J].火控雷達技術,1999(3):14-17.
[4]江波,唐普英.基于復調制的ZoomFFT算法在局部頻譜細化中的研究與實現[J].大眾科技,2010(7):48-49.
[5]徐卓華.基于MATLAB的ZOOM FFT在水聲測量中的應用[J].聲學與電子工程,2004(4):13-16.