調(diào)用DSP庫函數(shù)實(shí)現(xiàn)FFT的運(yùn)算_第1頁
調(diào)用DSP庫函數(shù)實(shí)現(xiàn)FFT的運(yùn)算_第2頁
調(diào)用DSP庫函數(shù)實(shí)現(xiàn)FFT的運(yùn)算_第3頁
調(diào)用DSP庫函數(shù)實(shí)現(xiàn)FFT的運(yùn)算_第4頁
調(diào)用DSP庫函數(shù)實(shí)現(xiàn)FFT的運(yùn)算_第5頁
已閱讀5頁,還剩4頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

..通信與信息工程學(xué)院2013/2014學(xué)年第二學(xué)期軟件設(shè)計(jì)實(shí)驗(yàn)報(bào)告模塊名稱調(diào)用DSP庫函數(shù)實(shí)現(xiàn)FFT的運(yùn)算專業(yè)通信工程學(xué)生班級(jí)B110107學(xué)生學(xué)號(hào)學(xué)生姓名指導(dǎo)教師王奇設(shè)計(jì)題目調(diào)用DSP庫函數(shù)實(shí)現(xiàn)FFT運(yùn)算任務(wù)要求利用CCS庫函數(shù)CFFT對(duì)sin<40*PI*t>進(jìn)行64點(diǎn)的FFT運(yùn)算,要求回顯結(jié)果圖形并對(duì)其進(jìn)行分析。實(shí)驗(yàn)設(shè)備及軟件硬件:計(jì)算機(jī)軟件:WINDOWS操作系統(tǒng)、CCS軟件和MATLAB<含SIMULINK工具包>軟件。同組人員學(xué)號(hào)及姓名顧源源B110108參考文獻(xiàn)[1]ICETEK–VC5509-A-USB-EDU教學(xué)實(shí)驗(yàn)系統(tǒng)軟件實(shí)驗(yàn)指導(dǎo)〔電子版[2]CodeComposerStudioProjectManagementandEditingTools〔電子版[3]TMS320C55xAssemblyLanguageToolsUser’sGuide〔電子版[4]TMS320C55xOptimizingC/C++CompilerUser’sGuide〔電子版[5]彭啟琮等.TMS320VC55x系列DSP的CPU與外設(shè).北京:清華大學(xué)出版社,2005[6]尹勇、歐光軍.DSP集成開發(fā)環(huán)境CCS開發(fā)指南.北京:北京航空航天大學(xué)出版社,2004[7]TMS320C55xDSPProgrammer’sGuide〔電子版[8]TMS320C55xDSPAlgebraicInstructionSetReferenceGuide〔電子版報(bào)告內(nèi)容一、實(shí)驗(yàn)?zāi)康摹?了解FFT的原理;〔2了解在DSP中FFT的設(shè)計(jì)及編程方法;〔3了解在DSP中CFFT的設(shè)計(jì)及編程方法;〔4熟悉對(duì)FFT的調(diào)試方法;〔5了解用窗函數(shù)法設(shè)計(jì)FFT快速傅里葉的原理和方法;〔6熟悉FFT快速傅里葉特性;〔7了解各種窗函數(shù)對(duì)快速傅里葉特性的影響。實(shí)驗(yàn)原理如果利用上式直接計(jì)算DFT,對(duì)于每一個(gè)固定的m,需要計(jì)算N次復(fù)數(shù)乘法,N-1次加法,對(duì)于N個(gè)不同的m,共需計(jì)算N的2次方復(fù)數(shù)乘法,N*<N-1>次復(fù)數(shù)加法.顯然,隨著N的增加,運(yùn)算量將急劇增加,快速傅里葉算法有效提高計(jì)算速度,利用FFT算法只需<N/2>logN次運(yùn)算。FFT并不是一種新的變換,它是離散傅立葉變換〔DFT的一種快速算法。由于我們?cè)谟?jì)算DFT時(shí)一次復(fù)數(shù)乘法需用四次實(shí)數(shù)乘法和二次實(shí)數(shù)加法;一次復(fù)數(shù)加法則需二次實(shí)數(shù)加法。每運(yùn)算一個(gè)X〔k需要4N次復(fù)數(shù)乘法及2N+2〔N-1=2〔2N-1次實(shí)數(shù)加法。所以整個(gè)DFT運(yùn)算總共需要4N^2次實(shí)數(shù)乘法和N*2<2N-1>=2N<2N-1>次實(shí)數(shù)加法。如此一來,計(jì)算時(shí)乘法次數(shù)和加法次數(shù)都是和N^2成正比的,當(dāng)N很大時(shí),運(yùn)算量是可觀的,因而需要改進(jìn)對(duì)DFT的算法減少運(yùn)算速度。根據(jù)傅立葉變換的對(duì)稱性和周期性,我們可以將DFT運(yùn)算中有些項(xiàng)合并。我們先設(shè)序列長(zhǎng)度為N=2^L,L為整數(shù)。將N=2^L的序列x<n><n=0,1,……,N-1>,按N的奇偶分成兩組,也就是說我們將一個(gè)N點(diǎn)的DFT分解成兩個(gè)N/2點(diǎn)的DFT,一般來說,輸入被假定為連續(xù)的。當(dāng)輸入為純粹的實(shí)數(shù)的時(shí)候,我們就可以利用左右對(duì)稱的特性更好的計(jì)算DFT。我們稱這樣的RFFT優(yōu)化算法是包裝算法:首先2N點(diǎn)實(shí)數(shù)的連續(xù)輸入稱為"進(jìn)包"。其次N點(diǎn)的FFT被連續(xù)運(yùn)行。最后作為結(jié)果產(chǎn)生的N點(diǎn)的合成輸出是"打開"成為最初的與DFT相符合的2N點(diǎn)輸入。使用這戰(zhàn)略,我們可以劃分FFT的大小,它有一半花費(fèi)在包裝輸入O〔N的操作和打開輸出上。這樣的RFFT算法和一般的FFT算法同樣迅速,計(jì)算速度幾乎都達(dá)到了兩次DFT的連續(xù)輸入。TMS320c5402有專門的FFT指令,使得FFT算法在DSP芯片上實(shí)現(xiàn)的速度更快,更簡(jiǎn)單。查庫函數(shù),使用rfft或cfft可快速實(shí)現(xiàn)FFT運(yùn)算。rfft函數(shù)原型為voidrfft<DATAx,nx,shortscale>其中DATAx為數(shù)據(jù)存放數(shù)組,nx為數(shù)組長(zhǎng)度,運(yùn)算完畢后DATAx中原先數(shù)據(jù)被沖掉,存進(jìn)運(yùn)算完FFT的數(shù)據(jù)。cfft與rfft不同之處在于cfft可對(duì)復(fù)數(shù)進(jìn)行FFT運(yùn)算。rifft和cifft分別為rfft和cfft進(jìn)行逆運(yùn)算。在這個(gè)實(shí)驗(yàn)中我們需要調(diào)用cfft庫函數(shù)對(duì)其進(jìn)行FFT運(yùn)算。CCS實(shí)現(xiàn)1、各個(gè)函數(shù)的說明〔1voidcbrev〔DATA*x,DATA*r,unshortn功能:為了FFT/IFFT得到一個(gè)正確順序的變換結(jié)果,對(duì)他們的輸入數(shù)據(jù)進(jìn)行倒序。入口參數(shù):x[2*n]x是一個(gè)2*n項(xiàng)的一維數(shù)組,數(shù)組中數(shù)據(jù)定義為短整型〔16位有符號(hào)整型。數(shù)組x是作為輸入數(shù)據(jù),函數(shù)對(duì)他的數(shù)據(jù)進(jìn)行倒序。r[2*n]r是一個(gè)2*n項(xiàng)的一維數(shù)組,數(shù)組中數(shù)據(jù)定義為短整型〔16位有符號(hào)整形。數(shù)組r是作為輸出數(shù)據(jù),函數(shù)對(duì)x倒序后的結(jié)果存到r中。n定義為數(shù)組中復(fù)數(shù)的個(gè)數(shù)〔兩個(gè)實(shí)數(shù)表示一個(gè)復(fù)數(shù),即為數(shù)組大小的1/2。函數(shù)的使用:函數(shù)是對(duì)復(fù)數(shù)進(jìn)行倒序的,即把數(shù)組x中的數(shù)據(jù)認(rèn)為是復(fù)數(shù)。有兩個(gè)相鄰的實(shí)數(shù)表示一個(gè)復(fù)數(shù),偶地址為復(fù)數(shù)的實(shí)部,奇地址為復(fù)數(shù)的虛部。如下式,函數(shù)對(duì)X[0]+j*X[1],X[2]+j*X[3],………X[2n]+j*X[2n+1]…………X[2*N-2]+j*X[2*N-1]這些數(shù)據(jù)進(jìn)行倒序。倒序后的結(jié)果也是按復(fù)數(shù)的實(shí)部、虛部依次存到r數(shù)組中的。注意:數(shù)組中的元素個(gè)數(shù)必須為偶數(shù)。倒序時(shí)采用間接尋址,所以數(shù)組的首地址的末log〔n+1必須為0?!?voidcfft<x,n,scale> 原理及源程序說明:功能:對(duì)復(fù)數(shù)進(jìn)行FFT變換。各項(xiàng)參數(shù):x[2*n]x是一個(gè)2*n項(xiàng)的一維數(shù)組,數(shù)組中數(shù)據(jù)定義為短整形〔16位有符號(hào)整形。數(shù)組x既作為輸入數(shù)據(jù),又存放變換后的輸出數(shù)據(jù)。n定義為數(shù)組中復(fù)數(shù)的個(gè)數(shù)〔兩個(gè)實(shí)數(shù)表示一個(gè)復(fù)數(shù),即為數(shù)組大小的1/2。Scale變換系數(shù),如果為0,變換后結(jié)果乘以1/nx;否則結(jié)果乘以1。函數(shù)的使用:函數(shù)cfft<x,n,scale>是經(jīng)過以下倆個(gè)宏定義而來的:#definedummy<x,n,scale> cfft##n<x,scale> #definecfft<x,n,scale> dummy<x,n,scale>原始函數(shù)為cfft##n<x,scale>,n可取值為16,32,64,128,256,512,1024。函數(shù)Cfft〔要求輸入數(shù)據(jù)為倒序,即經(jīng)過cbrev〔處理之后的數(shù)據(jù)。同cbrev〔一樣,cfft〔也是對(duì)X[0]+j*X[1],X[2]+j*X[3],………X[2n]+j*X[2n+1]…………X[2*N-2]+j*X[2*N-1]進(jìn)行的FFT變換,結(jié)果按實(shí)部/虛部存放。注意:數(shù)組中的元素個(gè)數(shù)必須為偶數(shù)。數(shù)組的首地址的末log〔n+1必須為0?!?cifft<x,n,scale> 功能:對(duì)復(fù)數(shù)進(jìn)行IFFT變換。各項(xiàng)參數(shù):x[2*n]x是一個(gè)2*n項(xiàng)的一維數(shù)組,數(shù)組中數(shù)據(jù)定義為短整型〔16位有符號(hào)整形。數(shù)組x既作為輸入數(shù)據(jù),又存放變換后的輸出數(shù)據(jù)。n定義為數(shù)組中復(fù)數(shù)的個(gè)數(shù)〔兩個(gè)實(shí)數(shù)表示一個(gè)復(fù)數(shù),,即為數(shù)組大小的1/2。Scale變換系數(shù),如果為0,變換后結(jié)果乘以1/nx;否則結(jié)果乘以1。函數(shù)的使用:函數(shù)cifft<x,n,scale> 與函數(shù)rifft<x,2*n,scale>其實(shí)是一個(gè)函數(shù),實(shí)現(xiàn)同樣的功能,使用同cfft〔一樣。如果要進(jìn)行實(shí)數(shù)fft變換〔變換結(jié)果實(shí)數(shù),則還需調(diào)用一個(gè)unpacki<x,n>函數(shù)?!?unpacki<x,n>函數(shù)功能:對(duì)rfft變換后的結(jié)果進(jìn)行變換,為了rifft〔得到原始實(shí)數(shù)的值。各項(xiàng)參數(shù):x[n]x是一個(gè)n〔n必須為偶數(shù)項(xiàng)的一維數(shù)組,數(shù)組中數(shù)據(jù)定義為短整型〔16位有符號(hào)整形。數(shù)組x既作為輸入數(shù)據(jù),又存放變換后的輸出數(shù)據(jù)。n定義為數(shù)組中實(shí)數(shù)的個(gè)數(shù),即等于數(shù)組大小。函數(shù)的使用:可以把這個(gè)函數(shù)看成unpack〔函數(shù)的逆變換,具體原理同上。2、庫函數(shù)的調(diào)用〔1DSPLIB庫函數(shù)功能TMS320C54X系列函數(shù)庫〔DSPLIB是對(duì)C語言編程可調(diào)用優(yōu)化的DSP函數(shù)庫,它含有50個(gè)通用目的的信號(hào)處理程序,全部由匯編語言編寫,并可由C語言調(diào)用,方便C語言與匯編語言混合編程。這些程序用在計(jì)算強(qiáng)度大、執(zhí)行速度重要的實(shí)時(shí)運(yùn)算中。通過使用這些程序,可以取得較用C語言編寫的相關(guān)程序快的多的運(yùn)行速度,另外通過使用現(xiàn)成的程序可以使開發(fā)速度大大加快。DSPLIB可進(jìn)行的運(yùn)算有:FFT運(yùn)算、濾波與卷積運(yùn)算、自適應(yīng)濾波運(yùn)算、相關(guān)運(yùn)算、數(shù)學(xué)函數(shù)運(yùn)算、三角函數(shù)運(yùn)算、矩陣運(yùn)算等?!?DSPLIB庫函數(shù)的FFT運(yùn)算DSPLIB庫函數(shù)提供的FFT運(yùn)算程序全部由匯編語言編寫,充分發(fā)揮DSP的硬件特性,運(yùn)算速度很快。下面以復(fù)數(shù)FFT運(yùn)算程序?yàn)槔M(jìn)行介紹。快速傅立葉變換在作N點(diǎn)傅立葉變換運(yùn)算時(shí),輸入數(shù)據(jù)常常是一連串的復(fù)數(shù)。不過在許多實(shí)際應(yīng)用上,這些需要被處理的數(shù)據(jù)都屬于實(shí)數(shù),即便如此,我們還是可以利用復(fù)數(shù)運(yùn)算的DFT。因?yàn)橐粋€(gè)簡(jiǎn)單的方法就可以將實(shí)數(shù)數(shù)據(jù)轉(zhuǎn)換成復(fù)數(shù)數(shù)據(jù),原本的實(shí)數(shù)數(shù)據(jù)成為復(fù)數(shù)的實(shí)部,而屬于復(fù)數(shù)虛部的部分則全部填上零,如此一來我們就可以直接應(yīng)用復(fù)數(shù)FFT了。DSPLIB庫函數(shù)提供的FFT運(yùn)算程序可進(jìn)行8~1024點(diǎn)的FFT運(yùn)算。輸入數(shù)據(jù)的存放以自然順序依次排放,實(shí)部在前虛部在后。數(shù)進(jìn)行碼位倒序運(yùn)算形式為:cbrev<X,X,256>,即可將采樣數(shù)據(jù)轉(zhuǎn)換成碼位倒序形式,并放入X[2N]數(shù)組實(shí)數(shù)部分。為進(jìn)行實(shí)數(shù)FFT運(yùn)算輸入數(shù)據(jù)虛部需置零。〔3FFT運(yùn)算的歸一化除非輸入信號(hào)幅度非常小,否則FFT運(yùn)算結(jié)果可能導(dǎo)致溢出,為防止溢出的發(fā)生,FFT運(yùn)算提供了歸一化功能〔可選擇,就是輸出結(jié)果被運(yùn)算長(zhǎng)度N所除。在FFT運(yùn)算進(jìn)行歸一化后,進(jìn)行FFT逆運(yùn)算就不需要?dú)w一化了。3、采樣波形的產(chǎn)生voidInputWave<>{inti; floatsample_step=1.0/SAMPLEF; floatj=0.0; for<i=0;i<SAMPLENUMBER;i++> { fInput[i]=sin<PI*2*j*SIGNAL1F>*128+sin<PI*2*j*SIGNAL2F>*32; j=j+sample_step; } }四、主程序#include<math.h>//數(shù)學(xué)函數(shù)的頭文件,如sqrt.#include<tms320.h>//定義數(shù)據(jù)類型的頭文件#include<dsplib.h>//DSPLIB庫文件#include"t4_SCALE.h"http://#include"t6_NOSCALE.h"#defineSIGNAL1F20#defineSAMPLEF64#definePI3.1415926#defineSAMPLENUMBER128shortINPUT[SAMPLENUMBER],x[SAMPLENUMBER];floatOUTPUT[SAMPLENUMBER];voidMakeWave<>;voidMakeWave<>{inti; floatsample_step=1.0/SAMPLEF; floatj=0.0; for<i=0;i<SAMPLENUMBER/2;i++> { INPUT[i]=sin<PI*2*j*SIGNAL1F>*1024; j=j+sample_step; } }voidmain<>{inti;MakeWave<>;for<i=0;i<SAMPLENUMBER;i=i+2>{x[i]=INPUT[i/2];}for<i=1;i<SAMPLENUMBER;i=i+2>x[i]=0.0;}cbrev<x,x,SAMPLENUMBER/2>;cfft<x,SAMPLENUMBER/2,SCALE>;//unpacki<x,SAMPLENUMBER/2>;//cbrev<x,x,SAMPLENUMBER/2>;//cifft<x,SAMPLENUMBER/2,SCALE>;for<i=0;i<SAMPLENUMBER;i++>{OUTPUT[i]=x[i];} while<1>; //breakpoint}五、實(shí)驗(yàn)步驟1.實(shí)驗(yàn)準(zhǔn)備設(shè)置軟件仿真模式2.啟動(dòng)CCS,打開工程,瀏覽程序3.編譯程序4.導(dǎo)入.out文件并運(yùn)行5.分別設(shè)置窗口,并出圖六、實(shí)驗(yàn)結(jié)果1、正弦輸入波形〔時(shí)域分析:由于采樣頻率為64HZ,相對(duì)于正弦函數(shù)頻率他的采樣頻率較小,所以產(chǎn)生的時(shí)域圖片會(huì)有失真。輸入波形〔頻域分析:有圖可得峰值所在點(diǎn)為20π符合題目要求經(jīng)過FFT處理后的波分析:出現(xiàn)峰值和谷值的地方為20和44且相對(duì)稱,出現(xiàn)負(fù)值的原因是沒有取模。另外在出圖時(shí)設(shè)置grath的采樣頻率為2HZ,因?yàn)閤[i]中有實(shí)數(shù)和虛數(shù)。三個(gè)圖放在一起比較六、調(diào)試過程中遇到的問題和解決辦法1.在程序運(yùn)行的過程中會(huì)出現(xiàn)dsplib.h和tms320.h文件不存在的現(xiàn)象,這是由于DSPLIB安裝在固定的子目錄上,而應(yīng)用程序在桌面上,程序編譯連接時(shí),找不到DSPLIB中相應(yīng)的程序。所以需要對(duì)工程的bulidoptions選項(xiàng)中的兩個(gè)地方經(jīng)行設(shè)置。首先是找不到dsplib.h、tms320.h文件時(shí),在compiler標(biāo)簽下選中preprocessor選項(xiàng),在IncludeSearchPath欄中填入dsplib.h、tms320.h所在子目錄,此處為下圖所示:當(dāng)出現(xiàn)連接時(shí)找不到FFT運(yùn)算相應(yīng)的匯編程序,此時(shí)可在linker標(biāo)簽下選中basic選項(xiàng),在LibrarySearchPath欄中填入55xds

溫馨提示

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

評(píng)論

0/150

提交評(píng)論