《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 嵌入式技術(shù) > 設(shè)計應(yīng)用 > TMS320F2812 DSP的FFT運算和DCT實現(xiàn)
TMS320F2812 DSP的FFT運算和DCT實現(xiàn)
來源:微型機與應(yīng)用2012年第9期
艾 紅,,鄧大偉
(北京信息科技大學(xué) 自動化學(xué)院,,北京 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的功能?;贑CS調(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ù)處理和控制能力大幅度提高了應(yīng)用效率,。
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)換完成中斷服務(wù)程序中讀取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;
//復(fù)位排序器SEQ1
  AdcRegs.ADCST.bit.INT_SEQ1_CLR=1,;
//清除排序器SEQ1中斷標志位
  PieCtrlRegs.PIEACK.all=PIEACK_GROUP1,;
 //寫1清零中斷應(yīng)答寄存器PIEACK相應(yīng)位,
//以便能夠響應(yīng)該組隨后的中斷
  return,;
}
1.2 FFT算法原理與程序流程圖
 FFT是DFT的快速運算,。由于有些信號在時域很難看出特性,使用FFT將其變換到頻域,,就會很容易看出其特性,。DFT算法的基本公式為:

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

 DCT是一種與傅里葉變換緊密相關(guān)的數(shù)學(xué)運算,。在傅里葉級數(shù)展開式中,如果被展開的函數(shù)是實偶函數(shù),,則其傅里葉級數(shù)中只包含余弦項,,再將其離散化可導(dǎo)出余弦變換,因此稱之為離散余弦變換,。DCT被認為是性能接近K-L變換的準最佳變換,,是對語音和圖像信號進行變換的最佳方法。DCT變換的快速算法有以下兩種方式:
?。?)由于FFT算法的普遍采用,,直接利用FFT實現(xiàn)DCT變換的快速算法相對容易。但是這種方法也有不足之處,,即計算過程會涉及復(fù)數(shù)的運算,。由于DCT變換前后的數(shù)據(jù)都是實數(shù),計算過程中引入了復(fù)數(shù),,而一對復(fù)數(shù)的加法相當于兩對實數(shù)的加法,,一對復(fù)數(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].北京:清華大學(xué)出版社,,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)載。