艾 紅,鄧大偉
(北京信息科技大學 自動化學院,北京 100192)
傅里葉變換是一種將信號從時域變換到頻域的變換方式,而快速傅里葉變換 FFT(Fast Fourier Transform)是數字信號處理技術的基石。FFT和離散余弦變換DCT(Discrete Cosine Transform)都是數字信號處理技術中的基本算法,也是數字信號處理的基本工具。DSP芯片的出現使FFT和DCT的實現更為方便。本文利用TMS320F2812DSP內部的ADC模塊與事件管理器(EVA)構建了數據采集與數據變換并行處理的信號處理系統,充分利用TMS320F2812強大的數據處理能力,實現了FFT運算,提高了運算速度[1-2]。
TI公司的TMS320F2812 DSP是目前控制領域性能較高的處理器,它將各種高級數字控制功能集成于一塊芯片上,整合了Flash存儲器、快速的A/D轉換器等外設,強大的數據處理和控制能力大幅度提高了應用效率。
DSP系統的模擬輸入電壓范圍為0~3 V。通過使用事件管理器的定時器1下溢中斷啟動ADC。系統設計時晶振為30 MHz,經過鎖相環倍頻后CPU時鐘頻率SYSCLKOUT是150 MHz,事件管理器采用高速外設時鐘HSPCLK,經過程序設計6分頻得到高速外設時鐘HSPCLK 為 25 MHz。
SysCtrlRegs.HISPCP.all=0x3;//HSPCLK=SYSCLKOUT/6
將事件管理器中通用定時器1的周期寄存器值設置為 0x07FF,每經過 2 048(0x07FF+1)個通用定時器的時鐘周期啟動一次ADC。事件管理器中的通用定時器1由于沒有對高速外設時鐘分頻,因此通用定時器1的時鐘頻率為 25 MHz。


為了實現數據采集,設置ADC工作在級聯排序器模式,最大轉換通道數為1,并且采集數據來自通道ADCINA4,使能事件管理器EVA的觸發信號啟動ADC排序器SEQ1,允許ADC產生中斷。相關程序設計如下。

當事件管理器的通用定時器1產生下溢中斷時,啟動ADC。在ADC轉換完成中斷服務程序中讀取12 bit A/D轉換結果。程序設計如下:
FFT是DFT的快速運算。由于有些信號在時域很難看出特性,使用FFT將其變換到頻域,就會很容易看出其特性。DFT算法的基本公式為:

其中,x(n)表示時域信號,X(k)表示頻域信號,WknN為運算蝶式權。

FFT算法程序的基本流程如圖1所示。
首先需要對時域序列進行比特排序,即接收處理單元把放在數據空間中的每個采樣點按地址讀出,按比特逆序再放入數據空間,準備進行運算[3]。然后計算蝶式運算的重要元素:運算蝶式權WknN。 此處可充分利用WknN的周期性,減少運算量,節省 DSP的存儲空間。以8點FFT為例,因為有則計算8點FFT所有的運算蝶式權,只需將第三級即最后一級的運算蝶式權算出即可。所以對于N(N=2M)點 FFT來說,只需計算出第 M級的 M個運算蝶式權即可得到各級的運算蝶式權。所有的FFT運算,第一級權值為1,所以第一級權值不用計算,僅此一項就可大大減少運算量。WknN可以分為實部和虛部兩部分進行計算,即:WknN=cos(2πK/N)-jsin(2πK/N)。 在 FFT 中,每級的蝶式運算都具有不同數量的蝶群和不同的翅間距(第M級的翅間距為2M-1),這些都需要定義相應的變量來控制。
調整模擬信號的頻率和幅值,通過A/D采集可以看到輸入信號波形及其FFT算法程序執行結果,如圖2和圖3所示。

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

DCT程序設計流程圖如圖4所示。

圖4 DCT流程設計流程圖
程序先將一序列 x(n)作為輸入信號進行離散余弦的正變換,再將得到的結果進行離散余弦逆變換,從而還原出輸入序列x(n)。程序實現的是128點的DCT變換。程序設計中,px是正變換的輸入序列,pz是逆變換的輸出序列。x、y和z是 3個中間變量,在正變換的子程序中,x是輸入序列,y是輸出序列;在逆變換的子程序中,y是輸入序列,z是輸出序列。程序設計如下:

設置觀察窗口,可以看到DCT變換的輸入輸出信號,如圖5和圖6所示。
圖5為正變換結果,其中上方為輸入信號,下方為輸出信號。圖6為逆變換輸出結果,此輸出波形與圖5的輸入波形一致,由此可以驗證程序的正確性。

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