|
|
| <!--插入廣告JS代碼--> |
Accomplishment of 2048 points FFT in TMS320C240x fixed-point DSP
(北京工業(yè)大學(xué))文其林 白曉東 周洪直 賈寶敦
Wen,Qilin Bai,Xiaodong Zhou,Hongzhi Jia,Baodun
摘要:針對線陣CCD輸出數(shù)據(jù)的處理需要,介紹了2048點FFT在TMS320C240x定點DSP上的實現(xiàn)。FFT算法程序采用匯編語言編寫,可通過C語言函數(shù)調(diào)用,因此具有實現(xiàn)簡單、高效的特點,且擴(kuò)展性和兼容性強(qiáng),可運行于嵌入式線陣CCD光譜探測系統(tǒng)中。
關(guān)鍵詞:FFT;DSP;劈分算法;位反轉(zhuǎn)算法
Abstract:Because of the demand of data processing in linear CCD, this paper introduces the realization of 2048 points FFT in TMS320C240x fixed-point DSP. Arithmetic program of FFT is programmed in assembly code,and it can be called by C function. So it has the features of easy realization,high efficiency,good expansibility and compatibility. It had run in the embedded system for linear CCD spectral detection successfully.
Key words:FFT;DSP;splitting arithmetic;bit-reversed arithmetic
引言
傅立葉變換是一種將信號從時域轉(zhuǎn)變?yōu)轭l域表示的變換手段,它在信號的頻譜分析以及系統(tǒng)的分析、設(shè)計中得到了廣泛的應(yīng)用。在計算機(jī)系統(tǒng)中,實際上是以離散傅立葉變換(DFT)的方式處理數(shù)據(jù)。由于DFT的運算量比較大,實際應(yīng)用中常使用DFT的快速算法-快速傅立葉變換(FFT)?焖俑盗⑷~變換算法有基2算法、基4算法等,還有按時間抽。―IT)和按頻率抽。―IF)的算法。
目前,由于線陣CCD在光譜探測、光學(xué)傳感等方面的廣泛應(yīng)用,常需要嵌入式芯片(如DSP)對CCD輸出的數(shù)據(jù)進(jìn)行實時分析處理。用于工業(yè)探測的線陣CCD與我們通常認(rèn)識的面陣CCD有所不同。我們?nèi)粘I钪谐霈F(xiàn)的面陣CCD少說也有幾十萬像素,高的可達(dá)上千萬像素,常用在數(shù)碼相機(jī)等設(shè)備上。相比較而言,用于工業(yè)探測的線陣CCD像素不高,但在光譜響應(yīng)范圍、幾何精度、動態(tài)范圍有自己獨特的優(yōu)勢。比如我們所用的TCD1208 CCD就是一款面向光譜探測用的線陣CCD,有2160像元,光譜響應(yīng)范圍400納米-1100納米,并且動態(tài)范圍大,靈敏度高,穩(wěn)定可靠。整個嵌入式線陣CCD光譜探測系統(tǒng)的結(jié)構(gòu)框圖如圖1所示,在DSP上要完成CCD驅(qū)動、A/D轉(zhuǎn)換、FFT運算、控制液晶顯示等功能,其中FFT運算是重點。

考慮到CCD是2160像元,為了方便運用基2算法計算FFT,又不損失太多的像元,我
們在DSP上計算2048點FFT。由于TI公司提供的FFT程序只能計算512點FFT,因此,就需要我們編寫能夠?qū)崿F(xiàn)2048點FFT的程序。以FFT在嵌入式線陣CCD光譜探測系統(tǒng)中的應(yīng)用為例,重點介紹2048點實數(shù)基2DIT-FFT在TMS320LF2407定點DSP中的實現(xiàn)。此程序也可實現(xiàn)1024點復(fù)數(shù)FFT。由于TMS320C240x系列DSP的硬件內(nèi)核與匯編指令完全相同,此程序可以直接移植到所有TMS320C240x DSP上。根據(jù)此程序,可以方便地擴(kuò)展至4096點FFT,用于5000像元CCD的數(shù)據(jù)處理。
1 程序介紹與實現(xiàn)
1.1程序流程
FFT的計算量比傅立葉變換的計算量減少了,但是FFT要做到大點數(shù),實時運算,對于普通的單片機(jī)來說還是一件比較困難的事。一方面,F(xiàn)FT需要對原始自然序列進(jìn)行碼位倒序排列;另一方面,蝶形運算是復(fù)數(shù)運算,需要多次查表相乘運算才能實現(xiàn)。DSP控制器就是針對這些需求而設(shè)計的專用芯片:具有專為FFT算法而設(shè)計的反序間接尋址;可實現(xiàn)增/減1或增/減一個變址量的間接尋址方式,為各種查表運算提供方便;能在一個指令周期完成乘和累加操作,提高了乘法運算的速度[1]。TMS320LF2407定點DSP是一款專為工業(yè)控制、電機(jī)控制和數(shù)字信號處理等用途而設(shè)計的DSP,具備單周期乘加指令,具有FFT反序間接尋址功能,最高運行速度為40MIPS。為了充分利用DSP芯片特有的反序間接尋址等功能,F(xiàn)FT算法程序采用匯編語言編寫,主程序采用C語言,因此程序具有良好的接口性能和可擴(kuò)展性能。
一般計算N點實數(shù)FFT時,簡單的把N點實數(shù)數(shù)據(jù)當(dāng)作N點虛部為0的復(fù)數(shù)數(shù)據(jù)來處理,直接計算N點復(fù)數(shù)FFT。這樣不僅浪費了DSP片內(nèi)資源,還影響了計算的實時性,尤其是點數(shù)比較大時,這種影響更加明顯。為了提高實數(shù)FFT的計算效率,利用FFT計算的特點,把N點實數(shù)數(shù)據(jù)打包成N/2點復(fù)數(shù)數(shù)據(jù),通過計算N/2點復(fù)數(shù)FFT來獲得N點實數(shù)FFT,這樣可以把FFT的計算速度提高近一倍。實數(shù)FFT的計算流程為:
1 把2048點實數(shù)數(shù)據(jù)打包成為1024點復(fù)數(shù)數(shù)據(jù),并完成復(fù)數(shù)數(shù)據(jù)的位反轉(zhuǎn)操作;
2 計算1024點基2復(fù)數(shù)FFT;
3 劈分還原計算,獲得2048點實數(shù)FFT結(jié)果;
4 計算幅值的平方,獲得頻譜的幅度譜。
根據(jù)實際需要,還可以對數(shù)據(jù)進(jìn)行加窗函數(shù)處理。
1.2具體函數(shù)介紹
根據(jù)上面的程序流程,介紹具體的函數(shù)模塊[4]?紤]到程序的效率和代碼的精簡,F(xiàn)FT算法函數(shù)全部采用匯編語言編寫,但是在各子程序的入口和出口都考慮了與C語言的兼容性,使得各子程序能夠直接被C語言調(diào)用。
1 匯編模塊fft_brev.asm,此模塊的功能是把2048點實數(shù)數(shù)據(jù)打包成為1024點復(fù)數(shù)數(shù)據(jù),并把復(fù)數(shù)數(shù)據(jù)進(jìn)行倒位序排列。在C函數(shù)中,通過FFT_brev()來調(diào)用。具體聲明形式為:void FFT_brev(int *source,int *done,int size),其中指針source指向的數(shù)組存放未經(jīng)倒位序排列的數(shù)據(jù),指針done指向的數(shù)組存放倒位序排列后的數(shù)據(jù),size是數(shù)組的大小,為了節(jié)省空間,指針source和done可以指向同一數(shù)組。
2 匯編模塊fft1024c.asm,此模塊的功能是計算1024點基2復(fù)數(shù)FFT。輸入的數(shù)據(jù)必須是Q15格式的數(shù)據(jù)。
3 匯編模塊fft2048.asm,此模塊的功能是劈分1024點復(fù)數(shù)FFT的結(jié)果,得到2048點實數(shù)FFT的真正結(jié)果。
4 匯編模塊fft_mag.asm,此模塊的功能是計算2048點實數(shù)FFT的結(jié)果的幅值平方,得到幅度譜,輸出的數(shù)據(jù)格式為Q14格式。
主函數(shù)調(diào)用示例:
void main(void)
{ ……
fft.ipcbptr=ipcb; //FFT計算緩沖區(qū)
fft.magptr=mag; //存放幅度譜
fft.init1(); //復(fù)制計算復(fù)數(shù)FFT所需的旋轉(zhuǎn)因子
fft.init2(); //復(fù)制劈分復(fù)數(shù)FFT結(jié)果所需的旋轉(zhuǎn)因子
fft.calc(&fft); //計算復(fù)數(shù)FFT
fft.split(&fft); //劈分復(fù)數(shù)FFT結(jié)果
fft.mag(&fft); //計算幅度譜
}
幾點說明:
1 由于定點DSP的浮點計算能力有限,為了保證計算的有效性和實時性,對輸入輸出數(shù)據(jù)采取了定點處理,其中輸入數(shù)據(jù)是Q15格式,輸出的幅度譜是Q14格式。
2 在FFT計算的蝶形運算和劈分計算中,涉及到正弦和余弦計算。因此需要預(yù)先制好正弦和余弦表。
3 簡單改變幾個參數(shù)值和擴(kuò)展一下正弦和余弦表,就可以用此程序計算4096以及更大點數(shù)的實數(shù)FFT。但需要注意擴(kuò)展存儲空間以及防止結(jié)果精度的降低。
1.3 抗干擾設(shè)計
為防止各種干擾使得程序不能正常運行,我們從軟硬件兩個方面采取抗干擾措施。從硬件方面,我們采用TI的專用電源芯片TPS7333,為DSP提供穩(wěn)定電源;在集成芯片的電源與地之間放置0.01μF和0.1μF的去耦電容,并讓去耦電容盡量靠近集成芯片;模擬地與數(shù)字地分開,只在一點共接等。在軟件方面,為了使程序跑飛的DSP回到正常狀態(tài),加入看門狗功能。
2實驗結(jié)果及分析
整個程序是在集成開發(fā)環(huán)境CC4.1下開發(fā)完成,為了方便程序運行結(jié)果的說明,用此程

圖2 2048點正弦數(shù)據(jù)波形
序去計算一組2048點正弦數(shù)據(jù),頻率為1赫茲,采樣頻率為128赫茲。數(shù)據(jù)采用Q15格式。
正弦數(shù)據(jù)波形如圖2所示。一般情況下,我們只關(guān)心信號頻域的幅度譜。幅度譜|X(k)|2的
計算:X(k)=Xr(k)+jXi(k),|X(k)|2=|Xr(k)|2+|Xi(k)|2,F(xiàn)FT計算結(jié)果的信號幅度
譜|X(k)|2如圖3所示。
根據(jù)快速傅立葉變換理論[3],N點FFT的結(jié)果是N個復(fù)數(shù)數(shù)據(jù),這N個復(fù)數(shù)數(shù)據(jù)代表著原始數(shù)據(jù)的頻域信息。當(dāng)原始數(shù)據(jù)是實數(shù)時,那么FFT的結(jié)果會出現(xiàn)復(fù)共軛對稱,即X(k)=X*(N-k)。對于信號的幅度譜|X(k)|2來說,N點實數(shù)FFT有用的信息就只有(N/2)+1個。根據(jù)公式f=kfs/N,f是原始信號的頻率,k表示峰值出現(xiàn)的位置,fs是采樣頻率,N是FFT計算的點數(shù),從幅度譜中看出峰值出現(xiàn)在k=16處,那么,f=16×128/2048=1,與原始信號的實際頻率一致,說明計算結(jié)果正確。

圖3 頻譜的幅度譜
3 小結(jié)
實驗證明,此程序在TMS320LF2407定點DSP中運行良好,滿足嵌入式線陣CCD探測系統(tǒng)數(shù)據(jù)處理的需要,并已經(jīng)成功運行于該系統(tǒng)中。同樣,此程序也適用于其它以TMS320C240x定點DSP為核心的嵌入式系統(tǒng)中。
參考文獻(xiàn):
[1] 劉和平 等,TMS320C240xDSP C語言開發(fā)應(yīng)用[M].北京:北京航空航天大學(xué)出版社,2003.1
[2] 肖宛昂,嵌入式系統(tǒng)中FFT算法研究.單片機(jī)與嵌入式系統(tǒng)應(yīng)用[J],2003.4
[3] TI.FFT Library. fft_mdl.pdf
[4] 王潞鋼 等,DSP C2000程序員高手進(jìn)階[M].北京:機(jī)械工業(yè)出版社,2005.1
作者簡介:文其林(1979-),男,土家族,北京工業(yè)大學(xué)碩士研究生,研究方向:近代高頻技術(shù),e-mail: vincilin@tom.com;白曉東(1947-),男,漢族,北京工業(yè)大學(xué)應(yīng)用數(shù)理學(xué)院副教授,主要從事高頻技術(shù)以及光電儀器等研究。
Author brief introduction: Wen,Qilin(1979-), male, Nationality: TuJia, Graduate student of Beijing University of Technology, Research direction: HF Technology, e-mail: vincilin@tom.com. Bai,Xiaodong(1947-),male,Han,associate professor of Beijing University of Technology,Research direction: HF Technology and optic & electric instrument.
(100022 北京工業(yè)大學(xué)應(yīng)用數(shù)理學(xué)院) 文其林 白曉東 周洪直 賈寶敦
(The college of applied science,Beijing University of Technology,Beijing 100022,China)Wen,Qilin Bai,Xiaodong Zhou,Hongzhi Jia,Baodun