隨順科,孫長(zhǎng)江,周選選
SUI Shun-ke,SUN Chang-jiang,ZHOU Xuan-xuan
(中國(guó)礦業(yè)大學(xué) 信息與電氣工程學(xué)院,徐州 221116)
離散傅里葉變換(Discrete Fourier Tran- sform,DFT)是把時(shí)域信號(hào)變換成頻域信號(hào)進(jìn)行處理的一種方式,它具有原理簡(jiǎn)單、實(shí)現(xiàn)方便、功能多、精度高等許多優(yōu)點(diǎn)。而快速傅里葉變換(Fast Fourier Transform,F(xiàn)FT)是離散傅里葉變換的一種快速算法,F(xiàn)FT可以明顯的降低運(yùn)算量,大大的提高DFT的運(yùn)算速度。根據(jù)FFT算法中按時(shí)間抽選和按頻率抽選的推導(dǎo)中可以看出,每級(jí)抽選時(shí),每一組的偶序號(hào)部分都不乘旋轉(zhuǎn)因子,乘旋轉(zhuǎn)因子都出現(xiàn)在奇序號(hào)上,加之考慮到基-4FFT算法比基-2FFT算法更有效,1984年法國(guó)的Duhamel和Holtmann提出了“分裂基”FFT算法(split-radix FFT或SRFFT)。分裂基算法能有效減少運(yùn)算量,節(jié)省運(yùn)算時(shí)間,節(jié)省存儲(chǔ)單元,提高運(yùn)算效率[1]。
本文將基于分裂基算法的原理和實(shí)現(xiàn)方法,采用數(shù)字信號(hào)處理芯片DSP TMS320F- 2812來(lái)實(shí)現(xiàn)分裂基FFT運(yùn)算,能快速實(shí)現(xiàn)數(shù)據(jù)的采集,進(jìn)行實(shí)時(shí)分析處理。
分裂基算法的基本思路是對(duì)偶序號(hào)輸出使用基-2算法,對(duì)奇序號(hào)輸出使用基-4算法。在N=2L各種算法中,分裂基算法所需的乘法數(shù)和加法次數(shù)為最小,并接近理論上的最小值。例如對(duì)于長(zhǎng)度為N=2L的實(shí)序列x(n),其DFT所需的理論上的最小實(shí)數(shù)乘法次數(shù)僅是LR=2N-L2-L-2,并且分裂基算法還具有和基-2 FFT算法同樣好的同址運(yùn)算結(jié)構(gòu),因此被認(rèn)為是一種實(shí)用的高效算法。
分裂基FFT算法要求序列次數(shù)N為2的整冪次,即N=2L(L為正整數(shù)),有
這里,X1(k)為偶序號(hào)X(n)組成N/2點(diǎn)DFT,X2(k)和X3(k)為奇序號(hào)的x(n)組成N/4點(diǎn)DFT[1]。
由上綜合其計(jì)算公式可得如下:
1)對(duì)偶數(shù)序號(hào)的輸出項(xiàng)采用基2算法,即
2)對(duì)于奇序號(hào)項(xiàng)采用基4算法,即
圖1 分裂基算法的示意圖
從圖1中可以看出一個(gè)N點(diǎn)序列x(n)的N點(diǎn)DFT可以分解成1個(gè)N/2點(diǎn)DFT和2個(gè)N/4點(diǎn)DFT。這種分解既有基-2,也有基-4部分,令基-2部分x(2r)的奇數(shù)點(diǎn)部分又進(jìn)一步按基-4抽取分解,而基4部分的偶數(shù)點(diǎn)部分又進(jìn)一步按基-2抽取分解。以此類推的進(jìn)行下去,直至分解為4點(diǎn)或2點(diǎn)DFT,完成序列x(n)的N點(diǎn)DFT的快速運(yùn)算[4]。
現(xiàn)以N=8為例,推導(dǎo)其算法,信號(hào)流程圖如圖2所示。
綜上可得:
圖2 8點(diǎn)分裂基算法信號(hào)流圖
TMS320F2812是TI(Texas Instruments)公司推出的性價(jià)比極高的、最佳測(cè)控應(yīng)用的32位定點(diǎn)DSP芯片,它不但具有數(shù)字信號(hào)處理能力,又具有強(qiáng)大的事件管理能力和嵌入式控制能力,是目前在國(guó)內(nèi)外使用較為廣泛的DSP芯片之一。
TMS320F2812具有以下特點(diǎn):哈佛總線結(jié)構(gòu),8級(jí)流水線操作,采用高性能的靜態(tài)CMOS技術(shù),時(shí)鐘頻率可達(dá)150 MHz,能在一個(gè)周期內(nèi)完成16x16、32x32的乘法和累加運(yùn)算,快速的指令周期,支持JTAG邊界掃描。另外由于他采用了內(nèi)部1.8V,外部3.3V供電,因而功耗很低等特點(diǎn)。除此之外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引導(dǎo)程序,當(dāng)芯片工作于微計(jì)算機(jī)模式,ROM內(nèi)的Boot loader引導(dǎo)程序在加電后自動(dòng)運(yùn)行,將外部載體(如ROM,串口)內(nèi)的用戶代碼加載到片外程序存儲(chǔ)器或片內(nèi)SRAM的任何空間。
3)內(nèi)部鎖相環(huán)電路(PLL)。在保持工作頻率相同的情況下,能夠使用低速的晶振或晶體,最高的鎖相倍數(shù)可達(dá)到數(shù)倍。
4)片上還包括SPI、SCIs、eCAN、McBSP,以及12位的ADC等。
其功能結(jié)構(gòu)圖如圖3所示。
圖3 TMS320F2812功能結(jié)構(gòu)圖
系統(tǒng)實(shí)現(xiàn)的硬件平臺(tái)框圖如圖4所示,它主要有TMS320F2812處理芯片、信號(hào)的采集調(diào)理電路、數(shù)據(jù)程序的存儲(chǔ)單元,以及按鍵顯示等電路構(gòu)成。
圖4 系統(tǒng)硬件平臺(tái)結(jié)構(gòu)圖
本系統(tǒng)采用DSP TMS320F2812作為核心,相比于其它處理芯片而言,其具有更大的運(yùn)算能力,而且該型號(hào)的DSP在某一時(shí)刻,流水線上可以運(yùn)行8條指令,這樣大大提高了程序的執(zhí)行效率。在采集調(diào)理電路中,主要是對(duì)信號(hào)進(jìn)行相應(yīng)的信號(hào)轉(zhuǎn)換和放大處理,使得信號(hào)在0-3.3V內(nèi),以滿足DSP的輸入要求。同時(shí)在ADC中可以選擇外接A/D轉(zhuǎn)換器,也可以使用芯片自帶的12位ADC,本系統(tǒng)采用了自帶的12位ADC。在芯片內(nèi)部雖然有數(shù)據(jù)和程序存儲(chǔ)器,但可根據(jù)數(shù)據(jù)處理量的大小進(jìn)行外擴(kuò)一部分存儲(chǔ)器。通過(guò)人機(jī)接口部分還可以控制和查看程序的運(yùn)行和輸出。
這里采用的是基于頻域抽取(decimation in frequency)的原位(in place)分裂基算法[1,3]。程序共分3個(gè)部分:
1)進(jìn)行L型蝶形運(yùn)算,由一個(gè)3層循環(huán)嵌套構(gòu)成。最外層的循環(huán)對(duì)于N點(diǎn)FFT(N=2L)控制循環(huán)M回,只需在初始時(shí)給定N的值,就可以進(jìn)行相應(yīng)各點(diǎn)的FFT。中間的循環(huán)要進(jìn)行AK次,這里的AK等于N/2K+1次(0≤k≤L-1),它表示在第k回循環(huán)分成了nK(nK=(1/3)[2k+(-1)K+1])組中每一組L型蝶形運(yùn)算的數(shù)目,同在一組具有相同的結(jié)構(gòu)及旋轉(zhuǎn)因子分布。里層的循環(huán)用來(lái)計(jì)算相鄰的蝶型運(yùn)算和他們的旋轉(zhuǎn)因子。
2)單獨(dú)計(jì)算基2蝶型運(yùn)算。
3)進(jìn)行整序運(yùn)算,在FFT中由于不斷地對(duì)輸入序列進(jìn)行奇偶抽取,導(dǎo)致序列最后按稱之為倒序的規(guī)律排列,所以最后要重新排序。
以其計(jì)算蝶形因子的部分程序?yàn)槔纾?/p>
當(dāng)輸入f=100Hz的正弦信號(hào),采樣點(diǎn)N=256時(shí),并調(diào)整采樣頻率使得256個(gè)點(diǎn)采樣時(shí)間為10ms,即一個(gè)輸入信號(hào)的周期,即截取信號(hào)的長(zhǎng)度T0=10ms(信號(hào)的周期)。我們?cè)贑CS仿真環(huán)境下觀察采樣后的正弦序列,如圖5所示,其中橫坐標(biāo)為采樣點(diǎn),縱坐標(biāo)為輸入信號(hào)的幅值。對(duì)該正弦信號(hào)分別進(jìn)行基一2FFT計(jì)算和分裂基FFT計(jì)算,可分別得到其頻譜如圖6和圖7所示,其中橫坐標(biāo)為K,縱坐標(biāo)為x(k)。經(jīng)比較可知兩種方法得到的結(jié)果基本相同。
圖5 輸入f=100Hz的正弦序列,采樣點(diǎn)數(shù)=256
圖6 由基2算法得到的頻譜圖
圖7 由分裂基算法得到的頻譜圖
在工業(yè)控制的數(shù)據(jù)采集后的處理過(guò)程中,如何提高數(shù)據(jù)的精度和縮短處理所耗費(fèi)的時(shí)間,對(duì)工業(yè)控制系統(tǒng)的改進(jìn)有著至關(guān)重要的作用。通過(guò)以上實(shí)驗(yàn)可以看出,分裂基FFT分析方法能快速有效地實(shí)時(shí)檢測(cè)出數(shù)據(jù)參數(shù),保證了檢測(cè)精度的情況下,同時(shí)相對(duì)于其它算法而言有著更快的速度,從而提高了系統(tǒng)的效率。
[1] 胡廣書(shū).數(shù)字信號(hào)處理——理論、算法與實(shí)現(xiàn)[M].北京:清華大學(xué)出版社,2003.
[2] 孫麗明.TMS320F2812原理及其C語(yǔ)言程序[M].北京:清華大學(xué)出版社,2008.
[3] 王裕,黃洪全.分裂基FFT在電力系統(tǒng)諧波檢測(cè)中的應(yīng)用[J].自動(dòng)化技術(shù)與應(yīng)用,2010,29(4):73-76.
[4] 劉歡,謝志遠(yuǎn).分裂基FFT算法的討論與改進(jìn)[J].通信技術(shù),2008,3(41):124-128.