隨順科,孫長江,周選選
SUI Shun-ke,SUN Chang-jiang,ZHOU Xuan-xuan
(中國礦業大學 信息與電氣工程學院,徐州 221116)
離散傅里葉變換(Discrete Fourier Tran- sform,DFT)是把時域信號變換成頻域信號進行處理的一種方式,它具有原理簡單、實現方便、功能多、精度高等許多優點。而快速傅里葉變換(Fast Fourier Transform,FFT)是離散傅里葉變換的一種快速算法,FFT可以明顯的降低運算量,大大的提高DFT的運算速度。根據FFT算法中按時間抽選和按頻率抽選的推導中可以看出,每級抽選時,每一組的偶序號部分都不乘旋轉因子,乘旋轉因子都出現在奇序號上,加之考慮到基-4FFT算法比基-2FFT算法更有效,1984年法國的Duhamel和Holtmann提出了“分裂基”FFT算法(split-radix FFT或SRFFT)。分裂基算法能有效減少運算量,節省運算時間,節省存儲單元,提高運算效率[1]。
本文將基于分裂基算法的原理和實現方法,采用數字信號處理芯片DSP TMS320F- 2812來實現分裂基FFT運算,能快速實現數據的采集,進行實時分析處理。
分裂基算法的基本思路是對偶序號輸出使用基-2算法,對奇序號輸出使用基-4算法。在N=2L各種算法中,分裂基算法所需的乘法數和加法次數為最小,并接近理論上的最小值。例如對于長度為N=2L的實序列x(n),其DFT所需的理論上的最小實數乘法次數僅是LR=2N-L2-L-2,并且分裂基算法還具有和基-2 FFT算法同樣好的同址運算結構,因此被認為是一種實用的高效算法。
分裂基FFT算法要求序列次數N為2的整冪次,即N=2L(L為正整數),有

這里,X1(k)為偶序號X(n)組成N/2點DFT,X2(k)和X3(k)為奇序號的x(n)組成N/4點DFT[1]。
由上綜合其計算公式可得如下:
1)對偶數序號的輸出項采用基2算法,即

2)對于奇序號項采用基4算法,即


圖1 分裂基算法的示意圖
從圖1中可以看出一個N點序列x(n)的N點DFT可以分解成1個N/2點DFT和2個N/4點DFT。這種分解既有基-2,也有基-4部分,令基-2部分x(2r)的奇數點部分又進一步按基-4抽取分解,而基4部分的偶數點部分又進一步按基-2抽取分解。以此類推的進行下去,直至分解為4點或2點DFT,完成序列x(n)的N點DFT的快速運算[4]。
現以N=8為例,推導其算法,信號流程圖如圖2所示。

綜上可得:


圖2 8點分裂基算法信號流圖
TMS320F2812是TI(Texas Instruments)公司推出的性價比極高的、最佳測控應用的32位定點DSP芯片,它不但具有數字信號處理能力,又具有強大的事件管理能力和嵌入式控制能力,是目前在國內外使用較為廣泛的DSP芯片之一。
TMS320F2812具有以下特點:哈佛總線結構,8級流水線操作,采用高性能的靜態CMOS技術,時鐘頻率可達150 MHz,能在一個周期內完成16x16、32x32的乘法和累加運算,快速的指令周期,支持JTAG邊界掃描。另外由于他采用了內部1.8V,外部3.3V供電,因而功耗很低等特點。除此之外TMS320F2812還具有豐富的片上資源[2]:
1)18k×16位的SARAM,分別為1k×16位的M0和M1,4K×16位的L0和L1,及8K×16位的H0。
2)4 k×16位的Boot ROM (3FF000H-3FFFC0H)。包含了Boot loader引導程序,當芯片工作于微計算機模式,ROM內的Boot loader引導程序在加電后自動運行,將外部載體(如ROM,串口)內的用戶代碼加載到片外程序存儲器或片內SRAM的任何空間。
3)內部鎖相環電路(PLL)。在保持工作頻率相同的情況下,能夠使用低速的晶振或晶體,最高的鎖相倍數可達到數倍。
4)片上還包括SPI、SCIs、eCAN、McBSP,以及12位的ADC等。
其功能結構圖如圖3所示。

圖3 TMS320F2812功能結構圖
系統實現的硬件平臺框圖如圖4所示,它主要有TMS320F2812處理芯片、信號的采集調理電路、數據程序的存儲單元,以及按鍵顯示等電路構成。

圖4 系統硬件平臺結構圖
本系統采用DSP TMS320F2812作為核心,相比于其它處理芯片而言,其具有更大的運算能力,而且該型號的DSP在某一時刻,流水線上可以運行8條指令,這樣大大提高了程序的執行效率。在采集調理電路中,主要是對信號進行相應的信號轉換和放大處理,使得信號在0-3.3V內,以滿足DSP的輸入要求。同時在ADC中可以選擇外接A/D轉換器,也可以使用芯片自帶的12位ADC,本系統采用了自帶的12位ADC。在芯片內部雖然有數據和程序存儲器,但可根據數據處理量的大小進行外擴一部分存儲器。通過人機接口部分還可以控制和查看程序的運行和輸出。
這里采用的是基于頻域抽取(decimation in frequency)的原位(in place)分裂基算法[1,3]。程序共分3個部分:
1)進行L型蝶形運算,由一個3層循環嵌套構成。最外層的循環對于N點FFT(N=2L)控制循環M回,只需在初始時給定N的值,就可以進行相應各點的FFT。中間的循環要進行AK次,這里的AK等于N/2K+1次(0≤k≤L-1),它表示在第k回循環分成了nK(nK=(1/3)[2k+(-1)K+1])組中每一組L型蝶形運算的數目,同在一組具有相同的結構及旋轉因子分布。里層的循環用來計算相鄰的蝶型運算和他們的旋轉因子。
2)單獨計算基2蝶型運算。
3)進行整序運算,在FFT中由于不斷地對輸入序列進行奇偶抽取,導致序列最后按稱之為倒序的規律排列,所以最后要重新排序。
以其計算蝶形因子的部分程序為例如:


當輸入f=100Hz的正弦信號,采樣點N=256時,并調整采樣頻率使得256個點采樣時間為10ms,即一個輸入信號的周期,即截取信號的長度T0=10ms(信號的周期)。我們在CCS仿真環境下觀察采樣后的正弦序列,如圖5所示,其中橫坐標為采樣點,縱坐標為輸入信號的幅值。對該正弦信號分別進行基一2FFT計算和分裂基FFT計算,可分別得到其頻譜如圖6和圖7所示,其中橫坐標為K,縱坐標為x(k)。經比較可知兩種方法得到的結果基本相同。

圖5 輸入f=100Hz的正弦序列,采樣點數=256

圖6 由基2算法得到的頻譜圖

圖7 由分裂基算法得到的頻譜圖
在工業控制的數據采集后的處理過程中,如何提高數據的精度和縮短處理所耗費的時間,對工業控制系統的改進有著至關重要的作用。通過以上實驗可以看出,分裂基FFT分析方法能快速有效地實時檢測出數據參數,保證了檢測精度的情況下,同時相對于其它算法而言有著更快的速度,從而提高了系統的效率。
[1] 胡廣書.數字信號處理——理論、算法與實現[M].北京:清華大學出版社,2003.
[2] 孫麗明.TMS320F2812原理及其C語言程序[M].北京:清華大學出版社,2008.
[3] 王裕,黃洪全.分裂基FFT在電力系統諧波檢測中的應用[J].自動化技術與應用,2010,29(4):73-76.
[4] 劉歡,謝志遠.分裂基FFT算法的討論與改進[J].通信技術,2008,3(41):124-128.