FFT在嵌入式系統(tǒng)上的實現(xiàn)_第1頁
FFT在嵌入式系統(tǒng)上的實現(xiàn)_第2頁
FFT在嵌入式系統(tǒng)上的實現(xiàn)_第3頁
FFT在嵌入式系統(tǒng)上的實現(xiàn)_第4頁
FFT在嵌入式系統(tǒng)上的實現(xiàn)_第5頁
全文預覽已結束

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、精選優(yōu)質文檔-傾情為你奉上FFT在嵌入式系統(tǒng)上的實現(xiàn)吳杰摘要:FFT在信號處理方面有的獨特的優(yōu)勢,本文通過對FFT的研究完成了FFT算法C語言實現(xiàn),并基于Matlab及TMS320的實驗結果證實了程序的正確性和可行性。關鍵詞:FFT Matlab TMS320 FPGA1引言FFT,即為快速傅氏變換,是離散傅氏變換的快速算法,它是根據(jù)離散傅氏變換的奇、偶、虛、實等特性,對離散傅立葉變換的算法進行改進獲得的。對于在計算機系統(tǒng)或者說數(shù)字系統(tǒng)中應用離散傅立葉變換,有了巨大的進步,F(xiàn)FT使得傅氏變換應用于實際硬件系統(tǒng)成為可能。自20世紀FFT問世以來,人們對它的探索就沒有停止,其在通信、工程控制、空間

2、探索、軍事各個方面都有著巨大的應用,因此FTT被稱為信號處理的領袖。近年來隨著科技的進步,在通信領域,在消費類電子領域,無論是3G網絡,數(shù)字電視、電話,還是手持設備如手機、PDA、GPS、MP4,對數(shù)據(jù)尤其是語音圖像的處理的要求越來越高,因此就需要人們對信號處理系統(tǒng)進行進一步的研究與提高,這就對現(xiàn)有系統(tǒng)提出了三點要求:1. 快速處理數(shù)據(jù)的能力2. 便于攜帶,成本低3. 兼容性無論通信還是語音視頻圖像處理,都需要快速、同步,因此需要對信號數(shù)據(jù)的處理快速的完成;同時系統(tǒng)需要便攜,消費類電子的發(fā)展使得人們需要在手上看電視,而不是背著電視或電腦;同時系統(tǒng)需要與現(xiàn)有的系統(tǒng)兼容,包括軟硬件兩個方面。綜合以

3、上考慮,F(xiàn)FT和嵌入式系統(tǒng)如ARM的結合無疑是一種滿意的方案。FFT本身的快速處理數(shù)據(jù)的能力與小巧而資源豐富的嵌入式結合無疑能滿足這些要求,同時現(xiàn)有嵌入式系統(tǒng)的發(fā)展使得我們可以容易的與現(xiàn)有其他系統(tǒng)兼容,如可以采用嵌入式Linux系統(tǒng),這樣可以很方便的實現(xiàn)與現(xiàn)有環(huán)境的結合與升級??傊?,F(xiàn)FT在嵌入式系統(tǒng)上的實現(xiàn),實現(xiàn)了信號處理快速算法與便攜硬件、內核、嵌入式系統(tǒng)的緊密結合,對其進行研究與實現(xiàn)無疑有著重大的意義。2 FFT算法的C語言實現(xiàn)我們知道N點FFT運算可以分成LOGN2 級,每一級都有N/2個碟形。DIT FFT的基本思想是用3層循環(huán)完成全部運算(N點FFT)。第一層循環(huán):由于N=2m需要

4、m級計算,第一層循環(huán)對運算的級數(shù)進行控制。第二層循環(huán):由于第L級有2L-1個蝶形因子(乘數(shù)),第二層循環(huán)根據(jù)乘數(shù)進行控制,保證對于每一個蝶形因子第三層循環(huán)要執(zhí)行一次,這樣,第三層循環(huán)在第二層循環(huán)控制下,每一級要進行2L-1次循環(huán)計算。第三層循環(huán):由于第L級共有N/2L個群,并且同一級內不同群的乘數(shù)分布相同,當?shù)诙友h(huán)確定某一乘數(shù)后,第三層循環(huán)要將本級中每個群中具有這一乘數(shù)的蝶形計算一次,即第三層循環(huán)每執(zhí)行完一次要進行N/2L個碟形計算??梢缘贸鼋Y論:在每一級中,第三層循環(huán)完成N/2L個碟形計算;第二層循環(huán)使第三層循環(huán)進行 2L-1次,因此,第二層循環(huán)完成時,共進行2L-1 *N/2L=N/2

5、個碟形計算。實質是:第二、第三層循環(huán)完成了第L級的計算。幾個要注意的數(shù)據(jù): 在第L級中,每個碟形的兩個輸入端相距b=2L-1個點。 同一乘數(shù)對應著相鄰間隔為2L個點的N/2L個碟形。 第L級的2L-1個碟形因子WPN 中的P,可表示為p = j*2m-L,其中j = 0,1,2,.,(2L-1-1)。用C語言實現(xiàn)如下:void fft() int i=0,j=0,k=0,l=0; complex up,down; bitrev(); for(i=0;i< log2_of(size_x);i+)/i為階數(shù)i=log2_of(N)=0,1,2,3,.,(v-1) /*一級蝶形運算*/ l=(

6、 1<<i ); /l=1,2,4,8,.,2(v-1) 蝶形運算兩點間距離 for(j=0;j<size_x;j+= (1<<l) ) /*一組蝶形運算*/ for(k=0;k<l;k+) /*一個蝶形運算*/ mul(xj+k+l,Wsize_x*k/2/l,&up); add(xj+k,up,&up); mul(xj+k+l,Wsize_x*k/2/l,&down); sub(xj+k,down,&down); xj+k=up; xj+k+l=down;3 MATLAB實現(xiàn)FFT算法的仿真通過測試用例結果的對比可以看出一

7、般情況下FFT對于信號的影響。3.1 輸入信號及過程定義x=pi/(N_STEP/2)*0:N_STEP-1;% x=0.<2pi in N_FFT pointsy=sin(5*x)+2*cos(10*x);% SignalY=fft(y,N_FFT);% FFTP=Y .* conj(Y);%abs(Y).2;3.2 測試用例對比 圖1 正弦信號和一個余弦信號的 圖2 增加fft的點數(shù)正弦信號和一個余弦信號的疊加圖1中第1個圖是原始時域信號。第2個圖(右上)就是fft變化后的頻譜的圖。圖3(左下)是實際的頻譜。圖4是圖3的半對數(shù)坐標。圖1中的步長(step)即數(shù)據(jù)點數(shù)和fft點數(shù)是一致

8、的。如果增加fft的點數(shù)(分辨率 resolution)那就相當于把原始數(shù)列加補足的0項 (因為實際處理的數(shù)據(jù)很可能不是正好fft的點數(shù)),圖2中增加了fft的點數(shù)。圖2中第1個圖(左上)是原始信號,第2個圖(右上)就是fft變化后的頻譜的圖,由于增加了fft的點數(shù),這樣一來,由采樣引起了毛刺似的東西。第3、4圖是對這種效應的處理-加窗,類似于一種濾波器,它的作用是減少因采樣引起的誤差。第6個圖就是加了窗后的最終效果 雖然還是又噪聲 但是相對第2個圖已經好很多了。第1個圖的信號其實就是兩個頻率信號的疊加,所以最后在頻域上就應該得到兩個峰。圖2這個例子是知道了輸入信號的特征才可以得出的模擬。如果

9、不知道輸入信號的情況,那處理的結果就不知道是否有問題。所以圖2相當于考慮兼容性,是信號處理的一般流程。當然我們可以把圖2中的輸入信號換成聲音或者視頻,例如我們加入了噪音,實驗結果見圖3。圖3 這個時候第1個圖(左上)里面就是噪音了,如果是視頻信號,則就是雪花??梢约訛V波器來處理,顯然在頻域處理才是方便的、直觀的。比如圖2中 輸入信號疊加函數(shù)為:y=sin(5*x)+2*cos(10*x);假設其中的2*cos(10*x)是噪聲項。在圖2的第6個圖中得到的頻域就是右面的那個峰,那只要把右面的這個峰給去掉,再ifft回去,原來的信號就好多了.4 FFT算法的移植算法移植在Code Composer

10、 Studio中完成,基于TMS320調試成功,完成后工程中包含的所有文件如圖4所示:圖4工程中主要文件的作用如下:庫文件:RTS.LIB,作用:提供主文件的函數(shù)。頭文件:board.h, type.h作用:提供主文件中的宏定義部分。匯編文件:Bit_rev.asm、Fft.asm、Initcfft.asm、Power.asm、Rfft.asm、Unpack.asm、Vectors.asm 。 Bit_rev.asm:第一步,對最原始的輸入數(shù)據(jù)進行位翻轉后的從新排序。 Initcfft.asm:設置變量、緩存和平臺。 Rfft.asm:進行函數(shù)調用,把FFT計算按步驟組合起來。 Vectors

11、.asm:設置中斷向量。Fft.asm:第二步,對翻轉后的數(shù)據(jù)進行FFT計算。Unpack.asm:第三、四步,把輸入數(shù)據(jù)分成實數(shù)的偶數(shù)部分RPk,實數(shù)的奇數(shù)部分RMk,虛數(shù)的偶數(shù)部分IPk和虛數(shù)的奇數(shù)部分IMk,計算出RFFT。Power.asm:第五步,用來做計算結果的輸出。輸入如圖5的正弦信號,輸出的波形如圖6所示。圖5正弦輸入1.dat 圖6 輸出波形 對照3.2中的測試用例,可以看出,試驗結果和Matlab模擬結果基本一致。我們進行與DSK相連接的實驗,我們可以通過A/D,D/A 的轉換把輸入信號進行FFT變換。 圖7 輸入波形 a 圖8 輸入波形b 圖9 輸出波形c計算一下系統(tǒng)的采

12、樣率:f(s)/N = 采樣頻率即為2048Hz/1024)=2Hz, 可以說明在輸出時橫坐標軸上的每兩點之間的數(shù)值為2 ,我們看到輸出波形c的的橫坐標為8,8與采樣頻率相乘應為輸入波形b中的橫坐標值,這可以判斷出我們計算的FFT結果是正確的。5應用效果分析把信號生產的數(shù)據(jù)輸入到MS320里面的fft處理輸出的數(shù)據(jù)和MATLAB的數(shù)據(jù)比較看,F(xiàn)FT算法調試成功。FFT運算結果的精度與輸入數(shù)據(jù)的位數(shù)及運算過程中的位數(shù)有關, 同時和數(shù)據(jù)的表示形式也有很大關系。一般來說,浮點方式比定點方式精度高。而在定點計算中,存儲器數(shù)據(jù)的位數(shù)越大,運算精度越高, 使用的存儲單元和邏輯單元也越多。在實際應用中, 應根據(jù)實際情況折衷選擇精度和資源。本設計通過MATLAB 進行仿真證明:其實現(xiàn)的變換結果與MATLAB 工具箱中的FFT函數(shù)相比, 信噪比可以達到65d

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論