機(jī)電之家資源網(wǎng)
單片機(jī)首頁(yè)|單片機(jī)基礎(chǔ)|單片機(jī)應(yīng)用|單片機(jī)開發(fā)|單片機(jī)文案|軟件資料下載|音響制作|電路圖下載 |嵌入式開發(fā)
培訓(xùn)信息
贊助商
2048點(diǎn)FFT在TMS320C240x定點(diǎn)DSP上的實(shí)現(xiàn)
2048點(diǎn)FFT在TMS320C240x定點(diǎn)DSP上的實(shí)現(xiàn)
 更新時(shí)間:2009-6-5 9:06:23  點(diǎn)擊數(shù):1
【字體: 字體顏色

Accomplishment of 2048 points FFT in TMS320C240x fixed-point DSP

(北京工業(yè)大學(xué))文其林 白曉東 周洪直 賈寶敦

Wen,Qilin  Bai,Xiaodong  Zhou,Hongzhi  Jia,Baodun

 

摘要:針對(duì)線陣CCD輸出數(shù)據(jù)的處理需要,介紹了2048點(diǎn)FFT在TMS320C240x定點(diǎn)DSP上的實(shí)現(xiàn)。FFT算法程序采用匯編語(yǔ)言編寫,可通過C語(yǔ)言函數(shù)調(diào)用,因此具有實(shí)現(xiàn)簡(jiǎn)單、高效的特點(diǎn),且擴(kuò)展性和兼容性強(qiáng),可運(yùn)行于嵌入式線陣CCD光譜探測(cè)系統(tǒng)中。

關(guān)鍵詞:FFT;DSP;劈分算法;位反轉(zhuǎn)算法

 

AbstractBecause 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

 

引言

傅立葉變換是一種將信號(hào)從時(shí)域轉(zhuǎn)變?yōu)轭l域表示的變換手段,它在信號(hào)的頻譜分析以及系統(tǒng)的分析、設(shè)計(jì)中得到了廣泛的應(yīng)用。在計(jì)算機(jī)系統(tǒng)中,實(shí)際上是以離散傅立葉變換(DFT)的方式處理數(shù)據(jù)。由于DFT的運(yùn)算量比較大,實(shí)際應(yīng)用中常使用DFT的快速算法-快速傅立葉變換(FFT)?焖俑盗⑷~變換算法有基2算法、基4算法等,還有按時(shí)間抽。―IT)和按頻率抽取(DIF)的算法。

目前,由于線陣CCD在光譜探測(cè)、光學(xué)傳感等方面的廣泛應(yīng)用,常需要嵌入式芯片(如DSP)對(duì)CCD輸出的數(shù)據(jù)進(jìn)行實(shí)時(shí)分析處理。用于工業(yè)探測(cè)的線陣CCD與我們通常認(rèn)識(shí)的面陣CCD有所不同。我們?nèi)粘I钪谐霈F(xiàn)的面陣CCD少說也有幾十萬像素,高的可達(dá)上千萬像素,常用在數(shù)碼相機(jī)等設(shè)備上。相比較而言,用于工業(yè)探測(cè)的線陣CCD像素不高,但在光譜響應(yīng)范圍、幾何精度、動(dòng)態(tài)范圍有自己獨(dú)特的優(yōu)勢(shì)。比如我們所用的TCD1208 CCD就是一款面向光譜探測(cè)用的線陣CCD,有2160像元,光譜響應(yīng)范圍400納米-1100納米,并且動(dòng)態(tài)范圍大,靈敏度高,穩(wěn)定可靠。整個(gè)嵌入式線陣CCD光譜探測(cè)系統(tǒng)的結(jié)構(gòu)框圖如圖1所示,在DSP上要完成CCD驅(qū)動(dòng)、A/D轉(zhuǎn)換、FFT運(yùn)算、控制液晶顯示等功能,其中FFT運(yùn)算是重點(diǎn)。

考慮到CCD是2160像元,為了方便運(yùn)用基2算法計(jì)算FFT,又不損失太多的像元,我

們?cè)贒SP上計(jì)算2048點(diǎn)FFT。由于TI公司提供的FFT程序只能計(jì)算512點(diǎn)FFT,因此,就需要我們編寫能夠?qū)崿F(xiàn)2048點(diǎn)FFT的程序。以FFT在嵌入式線陣CCD光譜探測(cè)系統(tǒng)中的應(yīng)用為例,重點(diǎn)介紹2048點(diǎn)實(shí)數(shù)基2DIT-FFT在TMS320LF2407定點(diǎn)DSP中的實(shí)現(xiàn)。此程序也可實(shí)現(xiàn)1024點(diǎn)復(fù)數(shù)FFT。由于TMS320C240x系列DSP的硬件內(nèi)核與匯編指令完全相同,此程序可以直接移植到所有TMS320C240x DSP上。根據(jù)此程序,可以方便地?cái)U(kuò)展至4096點(diǎn)FFT,用于5000像元CCD的數(shù)據(jù)處理。

1 程序介紹與實(shí)現(xiàn)

1.1程序流程

FFT的計(jì)算量比傅立葉變換的計(jì)算量減少了,但是FFT要做到大點(diǎn)數(shù),實(shí)時(shí)運(yùn)算,對(duì)于普通的單片機(jī)來說還是一件比較困難的事。一方面,F(xiàn)FT需要對(duì)原始自然序列進(jìn)行碼位倒序排列;另一方面,蝶形運(yùn)算是復(fù)數(shù)運(yùn)算,需要多次查表相乘運(yùn)算才能實(shí)現(xiàn)。DSP控制器就是針對(duì)這些需求而設(shè)計(jì)的專用芯片:具有專為FFT算法而設(shè)計(jì)的反序間接尋址;可實(shí)現(xiàn)增/減1或增/減一個(gè)變址量的間接尋址方式,為各種查表運(yùn)算提供方便;能在一個(gè)指令周期完成乘和累加操作,提高了乘法運(yùn)算的速度[1]。TMS320LF2407定點(diǎn)DSP是一款專為工業(yè)控制、電機(jī)控制和數(shù)字信號(hào)處理等用途而設(shè)計(jì)的DSP,具備單周期乘加指令,具有FFT反序間接尋址功能,最高運(yùn)行速度為40MIPS。為了充分利用DSP芯片特有的反序間接尋址等功能,F(xiàn)FT算法程序采用匯編語(yǔ)言編寫,主程序采用C語(yǔ)言,因此程序具有良好的接口性能和可擴(kuò)展性能。

一般計(jì)算N點(diǎn)實(shí)數(shù)FFT時(shí),簡(jiǎn)單的把N點(diǎn)實(shí)數(shù)數(shù)據(jù)當(dāng)作N點(diǎn)虛部為0的復(fù)數(shù)數(shù)據(jù)來處理,直接計(jì)算N點(diǎn)復(fù)數(shù)FFT。這樣不僅浪費(fèi)了DSP片內(nèi)資源,還影響了計(jì)算的實(shí)時(shí)性,尤其是點(diǎn)數(shù)比較大時(shí),這種影響更加明顯。為了提高實(shí)數(shù)FFT的計(jì)算效率,利用FFT計(jì)算的特點(diǎn),把N點(diǎn)實(shí)數(shù)數(shù)據(jù)打包成N/2點(diǎn)復(fù)數(shù)數(shù)據(jù),通過計(jì)算N/2點(diǎn)復(fù)數(shù)FFT來獲得N點(diǎn)實(shí)數(shù)FFT,這樣可以把FFT的計(jì)算速度提高近一倍。實(shí)數(shù)FFT的計(jì)算流程為:

1 把2048點(diǎn)實(shí)數(shù)數(shù)據(jù)打包成為1024點(diǎn)復(fù)數(shù)數(shù)據(jù),并完成復(fù)數(shù)數(shù)據(jù)的位反轉(zhuǎn)操作;

2 計(jì)算1024點(diǎn)基2復(fù)數(shù)FFT;

3 劈分還原計(jì)算,獲得2048點(diǎn)實(shí)數(shù)FFT結(jié)果;

4 計(jì)算幅值的平方,獲得頻譜的幅度譜。

根據(jù)實(shí)際需要,還可以對(duì)數(shù)據(jù)進(jìn)行加窗函數(shù)處理。

1.2具體函數(shù)介紹

根據(jù)上面的程序流程,介紹具體的函數(shù)模塊[4]?紤]到程序的效率和代碼的精簡(jiǎn),F(xiàn)FT算法函數(shù)全部采用匯編語(yǔ)言編寫,但是在各子程序的入口和出口都考慮了與C語(yǔ)言的兼容性,使得各子程序能夠直接被C語(yǔ)言調(diào)用。

1 匯編模塊fft_brev.asm,此模塊的功能是把2048點(diǎn)實(shí)數(shù)數(shù)據(jù)打包成為1024點(diǎn)復(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,此模塊的功能是計(jì)算1024點(diǎn)基2復(fù)數(shù)FFT。輸入的數(shù)據(jù)必須是Q15格式的數(shù)據(jù)。

3 匯編模塊fft2048.asm,此模塊的功能是劈分1024點(diǎn)復(fù)數(shù)FFT的結(jié)果,得到2048點(diǎn)實(shí)數(shù)FFT的真正結(jié)果。

4 匯編模塊fft_mag.asm,此模塊的功能是計(jì)算2048點(diǎn)實(shí)數(shù)FFT的結(jié)果的幅值平方,得到幅度譜,輸出的數(shù)據(jù)格式為Q14格式。

主函數(shù)調(diào)用示例:

void main(void)

{   ……

    fft.ipcbptr=ipcb;       //FFT計(jì)算緩沖區(qū)

    fft.magptr=mag;         //存放幅度譜

    fft.init1();                //復(fù)制計(jì)算復(fù)數(shù)FFT所需的旋轉(zhuǎn)因子

    fft.init2();                //復(fù)制劈分復(fù)數(shù)FFT結(jié)果所需的旋轉(zhuǎn)因子

    fft.calc(&fft);         //計(jì)算復(fù)數(shù)FFT

    fft.split(&fft);            //劈分復(fù)數(shù)FFT結(jié)果

    fft.mag(&fft);          //計(jì)算幅度譜

}

幾點(diǎn)說明:

1 由于定點(diǎn)DSP的浮點(diǎn)計(jì)算能力有限,為了保證計(jì)算的有效性和實(shí)時(shí)性,對(duì)輸入輸出數(shù)據(jù)采取了定點(diǎn)處理,其中輸入數(shù)據(jù)是Q15格式,輸出的幅度譜是Q14格式。

2 在FFT計(jì)算的蝶形運(yùn)算和劈分計(jì)算中,涉及到正弦和余弦計(jì)算。因此需要預(yù)先制好正弦和余弦表。

3 簡(jiǎn)單改變幾個(gè)參數(shù)值和擴(kuò)展一下正弦和余弦表,就可以用此程序計(jì)算4096以及更大點(diǎn)數(shù)的實(shí)數(shù)FFT。但需要注意擴(kuò)展存儲(chǔ)空間以及防止結(jié)果精度的降低。

1.3 抗干擾設(shè)計(jì)

為防止各種干擾使得程序不能正常運(yùn)行,我們從軟硬件兩個(gè)方面采取抗干擾措施。從硬件方面,我們采用TI的專用電源芯片TPS7333,為DSP提供穩(wěn)定電源;在集成芯片的電源與地之間放置0.01μF和0.1μF的去耦電容,并讓去耦電容盡量靠近集成芯片;模擬地與數(shù)字地分開,只在一點(diǎn)共接等。在軟件方面,為了使程序跑飛的DSP回到正常狀態(tài),加入看門狗功能。

2實(shí)驗(yàn)結(jié)果及分析

整個(gè)程序是在集成開發(fā)環(huán)境CC4.1下開發(fā)完成,為了方便程序運(yùn)行結(jié)果的說明,用此程

圖2 2048點(diǎn)正弦數(shù)據(jù)波形

序去計(jì)算一組2048點(diǎn)正弦數(shù)據(jù),頻率為1赫茲,采樣頻率為128赫茲。數(shù)據(jù)采用Q15格式。

正弦數(shù)據(jù)波形如圖2所示。一般情況下,我們只關(guān)心信號(hào)頻域的幅度譜。幅度譜|X(k)|2

計(jì)算:X(k)=Xr(k)+jXi(k),|X(k)|2=|Xr(k)|2+|Xi(k)|2,F(xiàn)FT計(jì)算結(jié)果的信號(hào)幅度

譜|X(k)|2如圖3所示。

根據(jù)快速傅立葉變換理論[3],N點(diǎn)FFT的結(jié)果是N個(gè)復(fù)數(shù)數(shù)據(jù),這N個(gè)復(fù)數(shù)數(shù)據(jù)代表著原始數(shù)據(jù)的頻域信息。當(dāng)原始數(shù)據(jù)是實(shí)數(shù)時(shí),那么FFT的結(jié)果會(huì)出現(xiàn)復(fù)共軛對(duì)稱,即X(k)=X*(N-k)。對(duì)于信號(hào)的幅度譜|X(k)|2來說,N點(diǎn)實(shí)數(shù)FFT有用的信息就只有(N/2)+1個(gè)。根據(jù)公式f=kfs/N,f是原始信號(hào)的頻率,k表示峰值出現(xiàn)的位置,fs是采樣頻率,N是FFT計(jì)算的點(diǎn)數(shù),從幅度譜中看出峰值出現(xiàn)在k=16處,那么,f=16×128/2048=1,與原始信號(hào)的實(shí)際頻率一致,說明計(jì)算結(jié)果正確。

圖3 頻譜的幅度譜

3 小結(jié)

實(shí)驗(yàn)證明,此程序在TMS320LF2407定點(diǎn)DSP中運(yùn)行良好,滿足嵌入式線陣CCD探測(cè)系統(tǒng)數(shù)據(jù)處理的需要,并已經(jīng)成功運(yùn)行于該系統(tǒng)中。同樣,此程序也適用于其它以TMS320C240x定點(diǎn)DSP為核心的嵌入式系統(tǒng)中。

 

參考文獻(xiàn):

[1] 劉和平 等,TMS320C240xDSP C語(yǔ)言開發(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

 

作者簡(jiǎn)介:文其林(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 scienceBeijing University of Technology,Beijing 100022,China)Wen,Qilin Bai,Xiaodong Zhou,Hongzhi Jia,Baodun

 

<!--插入廣告JS代碼-->
  • 上一篇: DM642上TCP/IP協(xié)議的實(shí)現(xiàn)及性能測(cè)試
  • 下一篇: 基于DSP三軸跟蹤轉(zhuǎn)臺(tái)伺服控制系統(tǒng)設(shè)計(jì)
  • 發(fā)表評(píng)論   告訴好友   打印此文  收藏此頁(yè)  關(guān)閉窗口  返回頂部
    熱點(diǎn)文章
     
    推薦文章
     
    相關(guān)文章
    網(wǎng)友評(píng)論:(只顯示最新5條。)
    關(guān)于我們 | 聯(lián)系我們 | 廣告合作 | 付款方式 | 使用幫助 | 機(jī)電之家 | 會(huì)員助手 | 免費(fèi)鏈接

    點(diǎn)擊這里給我發(fā)消息66821730(技術(shù)支持)點(diǎn)擊這里給我發(fā)消息66821730(廣告投放) 點(diǎn)擊這里給我發(fā)消息41031197(編輯) 點(diǎn)擊這里給我發(fā)消息58733127(審核)
    本站提供的機(jī)電設(shè)備,機(jī)電供求等信息由機(jī)電企業(yè)自行提供,該企業(yè)負(fù)責(zé)信息內(nèi)容的真實(shí)性、準(zhǔn)確性和合法性。
    機(jī)電之家對(duì)此不承擔(dān)任何保證責(zé)任,有侵犯您利益的地方請(qǐng)聯(lián)系機(jī)電之家,機(jī)電之家將及時(shí)作出處理。
    Copyright 2007 機(jī)電之家 Inc All Rights Reserved.機(jī)電之家-由機(jī)電一體化網(wǎng)更名-聲明
    電話:0571-87774297 傳真:0571-87774298
    杭州濱興科技有限公司提供技術(shù)支持

    主辦:杭州市高新區(qū)(濱江)機(jī)電一體化學(xué)會(huì)
    中國(guó)行業(yè)電子商務(wù)100強(qiáng)網(wǎng)站

    網(wǎng)站經(jīng)營(yíng)許可證:浙B2-20080178-1