《電子技術(shù)應用》
您所在的位置:首頁 > 嵌入式技術(shù) > 設(shè)計應用 > TMS320F2812 DSP的FFT運算和DCT實現(xiàn)
TMS320F2812 DSP的FFT運算和DCT實現(xiàn)
來源:微型機與應用2012年第9期
艾 紅,鄧大偉
(北京信息科技大學 自動化學院,北京 100192)
摘要: 介紹了快速傅里葉變換(FFT)算法的原理,利用DSP實現(xiàn)了FFT算法,利用TMS320F2812 DSP內(nèi)部的ADC模塊與事件管理器的定時器實現(xiàn)信號的實時采集。分析了DSP中數(shù)據(jù)采集ADC的功能?;贑CS調(diào)試軟件顯示了輸入輸出信號波形。在CCS環(huán)境下,采用C語言編程,實現(xiàn)了FFT算法和離散余弦變換。
Abstract:
Key words :

摘  要: 介紹了快速傅里葉變換(FFT)算法的原理,利用DSP實現(xiàn)了FFT算法,利用TMS320F2812 DSP內(nèi)部的ADC模塊與事件管理器的定時器實現(xiàn)信號的實時采集。分析了DSP中數(shù)據(jù)采集ADC的功能。基于CCS調(diào)試軟件顯示了輸入輸出信號波形。在CCS環(huán)境下,采用C語言編程,實現(xiàn)了FFT算法和離散余弦變換
關(guān)鍵詞: DSP;快速傅里葉變換;A/D轉(zhuǎn)換;離散余弦變換

 傅里葉變換是一種將信號從時域變換到頻域的變換方式,而快速傅里葉變換FFT(Fast Fourier Transform)是數(shù)字信號處理技術(shù)的基石。FFT和離散余弦變換DCT(Discrete Cosine Transform)都是數(shù)字信號處理技術(shù)中的基本算法,也是數(shù)字信號處理的基本工具。DSP芯片的出現(xiàn)使FFT和DCT的實現(xiàn)更為方便。本文利用TMS320F2812 DSP內(nèi)部的ADC模塊與事件管理器(EVA)構(gòu)建了數(shù)據(jù)采集與數(shù)據(jù)變換并行處理的信號處理系統(tǒng),充分利用TMS320F2812強大的數(shù)據(jù)處理能力,實現(xiàn)了FFT運算,提高了運算速度[1-2]。
1 FFT算法的實現(xiàn)
 TI公司的TMS320F2812 DSP是目前控制領(lǐng)域性能較高的處理器,它將各種高級數(shù)字控制功能集成于一塊芯片上,整合了Flash存儲器、快速的A/D轉(zhuǎn)換器等外設(shè),強大的數(shù)據(jù)處理和控制能力大幅度提高了應用效率。
1.1 數(shù)據(jù)采集ADC功能
 DSP系統(tǒng)的模擬輸入電壓范圍為0~3 V。通過使用事件管理器的定時器1下溢中斷啟動ADC。系統(tǒng)設(shè)計時晶振為30 MHz,經(jīng)過鎖相環(huán)倍頻后CPU時鐘頻率SYSCLKOUT是150 MHz,事件管理器采用高速外設(shè)時鐘HSPCLK,經(jīng)過程序設(shè)計6分頻得到高速外設(shè)時鐘HSPCLK為25 MHz。
SysCtrlRegs.HISPCP.all=0x3;//HSPCLK= SYSCLKOUT/6
將事件管理器中通用定時器1的周期寄存器值設(shè)置為0x07FF,每經(jīng)過2 048(0x07FF+1)個通用定時器的時鐘周期啟動一次ADC。事件管理器中的通用定時器1由于沒有對高速外設(shè)時鐘分頻,因此通用定時器1的時鐘頻率為25 MHz。
EvaRegs.T1PR=0x07FF;//設(shè)置通用定時器1周期寄存器
EvaRegs.GPTCONA.bit.T1TOADC=1;
//通用定時器1啟動ADC
EvaRegs.T1CON.all=0x1042;
//通用定時器1連續(xù)增計數(shù)模式,不分頻,采用HSPCLK
為了實現(xiàn)數(shù)據(jù)采集,設(shè)置ADC工作在級聯(lián)排序器模式,最大轉(zhuǎn)換通道數(shù)為1,并且采集數(shù)據(jù)來自通道ADCINA4,使能事件管理器EVA的觸發(fā)信號啟動ADC排序器SEQ1,允許ADC產(chǎn)生中斷。相關(guān)程序設(shè)計如下。
AdcRegs.ADCTRL1.bit.SEQ_CASC=1;//級聯(lián)排序器模式
AdcRegs.ADCMAXCONV.all=0x0000;
//設(shè)置1個轉(zhuǎn)換通道AdcRegs.ADCCHSELSEQ1.bit.CONV00=0x4;
//設(shè)置轉(zhuǎn)換通道ADCINA4
AdcRegs.ADCTRL2.bit.EVA_SOC_SEQ1=1;
//使能EVA的觸發(fā)信號啟動排序器SEQ1
AdcRegs.ADCTRL2.bit.INT_ENA_SEQ1=1;
//使能SEQ1產(chǎn)生的中斷請求
當事件管理器的通用定時器1產(chǎn)生下溢中斷時,啟動ADC。在ADC轉(zhuǎn)換完成中斷服務程序中讀取12 bit A/D轉(zhuǎn)換結(jié)果。程序設(shè)計如下:
interrupt void adc_isr(void)
{
 px[ConversionCount]=AdcRegs.ADCRESULT0>>4;
 if(ConversionCount==128)
   {ConversionCount=0;}
 else  ConversionCount++;                      
  AdcRegs.ADCTRL2.bit.RST_SEQ1=1;
//復位排序器SEQ1
  AdcRegs.ADCST.bit.INT_SEQ1_CLR=1;
//清除排序器SEQ1中斷標志位
  PieCtrlRegs.PIEACK.all=PIEACK_GROUP1;
 //寫1清零中斷應答寄存器PIEACK相應位,
//以便能夠響應該組隨后的中斷
  return;
}
1.2 FFT算法原理與程序流程圖
 FFT是DFT的快速運算。由于有些信號在時域很難看出特性,使用FFT將其變換到頻域,就會很容易看出其特性。DFT算法的基本公式為:

2 DCT的實現(xiàn)
2.1 DCT基本原理

 DCT是一種與傅里葉變換緊密相關(guān)的數(shù)學運算。在傅里葉級數(shù)展開式中,如果被展開的函數(shù)是實偶函數(shù),則其傅里葉級數(shù)中只包含余弦項,再將其離散化可導出余弦變換,因此稱之為離散余弦變換。DCT被認為是性能接近K-L變換的準最佳變換,是對語音和圖像信號進行變換的最佳方法。DCT變換的快速算法有以下兩種方式:
?。?)由于FFT算法的普遍采用,直接利用FFT實現(xiàn)DCT變換的快速算法相對容易。但是這種方法也有不足之處,即計算過程會涉及復數(shù)的運算。由于DCT變換前后的數(shù)據(jù)都是實數(shù),計算過程中引入了復數(shù),而一對復數(shù)的加法相當于兩對實數(shù)的加法,一對復數(shù)的乘法相當于4對實數(shù)的乘法和兩對實數(shù)的加法,顯然是增加了運算量,也給硬件存儲提出了更高的要求。
 (2)直接在實數(shù)域進行DCT快速變換。顯然,這種方法的計算量和硬件要求都要優(yōu)于前者。鑒于此,本文采用第二種方法實現(xiàn)DCT變換的快速算法。
給定序列x(n),n=0,1,…,N-1,其離散余弦變換定義為:

 


  圖5為正變換結(jié)果,其中上方為輸入信號,下方為輸出信號。圖6為逆變換輸出結(jié)果,此輸出波形與圖5的輸入波形一致,由此可以驗證程序的正確性。

 本文說明了數(shù)據(jù)采集ADC的功能和FFT算法的原理以及程序設(shè)計流程圖,在CCS調(diào)試平臺下,采用C語言編程實現(xiàn)了FFT算法,并且實時性好。闡述了離散余弦變換DCT基本原理,基于TMS320F2812 DSP實現(xiàn)了離散余弦變換。程序運行結(jié)果表明,DSP能夠快速高效地完成一系列數(shù)字信號處理算法[4]。
參考文獻
[1] 賈瑋,楊錄,張艷花.基于TMS320VC5416的FFT算法的實現(xiàn)[J].山西電子技術(shù),2009(2):11-13.
[2] 萬浩平,馬進,王鋒.基于TMS320F2812的高精度數(shù)據(jù)采集及FFT實現(xiàn)[J].工業(yè)控制計算機,2009,22(4),54-55.
[3] 胡廣書.數(shù)字信號處理[M].北京:清華大學出版社,2003.
[4] 伍小芹,吳秋麗.FIR數(shù)字濾波器在DSP上的實現(xiàn)[J]. 現(xiàn)代電子技術(shù),2007(1):85-87.

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。