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

下載本文檔

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

文檔簡(jiǎn)介

1、通信與信息工程學(xué)院2013 /2014 學(xué)年 第 二 學(xué)期軟件設(shè)計(jì) 實(shí)驗(yàn)報(bào)告模 塊 名 稱 調(diào)用DSP庫(kù)函數(shù)實(shí)現(xiàn)FFT的運(yùn)算 專 業(yè) 通信工程 學(xué) 生 班 級(jí) B110107 學(xué) 生 學(xué) 號(hào) 學(xué) 生 姓 名 指 導(dǎo) 教 師 王 奇 設(shè)計(jì)題目調(diào)用DSP庫(kù)函數(shù)實(shí)現(xiàn)FFT運(yùn)算任務(wù)要求利用CCS庫(kù)函數(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 ICETEKVC5509-A-USB-EDU教學(xué)

2、實(shí)驗(yàn)系統(tǒng)軟件實(shí)驗(yàn)指導(dǎo)(電子版)2 Code Composer StudioProject Management and Editing Tools(電子版)3 TMS320C55xAssembly Language Tools Users Guide(電子版)4 TMS320C55x Optimizing C/C+ CompilerUsers Guide(電子版) 5 彭啟琮等TMS320VC55x系列DSP的CPU與外設(shè)北京:清華大學(xué)出版社,20056 尹勇、歐光軍DSP集成開(kāi)發(fā)環(huán)境CCS開(kāi)發(fā)指南北京:北京航空航天大學(xué)出版社,2004 7 TMS320C55x DSP Programmers

3、 Guide(電子版)8 TMS320C55x DSP Algebraic Instruction Set Reference Guide(電子版)報(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ì)快速傅里葉特性的影響。2、 實(shí)驗(yàn)原理 如果利用上式直接計(jì)算DFT,對(duì)于每一個(gè)固定的m,需要計(jì)算N次復(fù)數(shù)乘法,N-1次加法,對(duì)于N個(gè)不同的m,共需計(jì)算N的2次方復(fù)數(shù)乘

4、法,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)算總共需要4N2 次實(shí)數(shù)乘法和N*2(2N-1)=2N(2N-1)次實(shí)數(shù)加法。如此一來(lái),計(jì)算時(shí)乘法次數(shù)和加法次數(shù)都是和N2 成正比的,當(dāng)N 很大時(shí),運(yùn)算量是可觀的,因而需要改進(jìn)對(duì)DF

5、T 的算法減少運(yùn)算速度。根據(jù)傅立葉變換的對(duì)稱性和周期性,我們可以將DFT 運(yùn)算中有些項(xiàng)合并。我們先設(shè)序列長(zhǎng)度為N=2L,L 為整數(shù)。將N=2L 的序列x(n)(n=0,1,,N-1),按N 的奇偶分成兩組,也就是說(shuō)我們將一個(gè)N 點(diǎn)的DFT 分解成兩個(gè)N/2 點(diǎn)的DFT,一般來(lái)說(shuō),輸入被假定為連續(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)的合成輸出是“打開(kāi)”成為最初的與DFT 相符合的2N 點(diǎn)輸入。使用這戰(zhàn)略,我們可以劃分FFT

6、 的大小,它有一半花費(fèi)在包裝輸入O(N)的操作和打開(kāi)輸出上。這樣的RFFT 算法和一般的FFT 算法同樣迅速,計(jì)算速度幾乎都達(dá)到了兩次DFT 的連續(xù)輸入。 TMS320c5402 有專門(mén)的FFT 指令,使得FFT 算法在DSP 芯片上實(shí)現(xiàn)的速度更快,更簡(jiǎn)單。查庫(kù)函數(shù),使用rfft 或cfft 可快速實(shí)現(xiàn)FFT 運(yùn)算。rfft 函數(shù)原型為void rfft (DATA x, nx, short scale)其中DATA x 為數(shù)據(jù)存放數(shù)組,nx 為數(shù)組長(zhǎng)度,運(yùn)算完畢后DATA x 中原先數(shù)據(jù)被沖掉,存進(jìn)運(yùn)算完FFT 的數(shù)據(jù)。cfft 與rfft 不同之處在于cfft 可對(duì)復(fù)數(shù)進(jìn)行FFT 運(yùn)算。r

7、ifft 和cifft 分別為rfft 和cfft 進(jìn)行逆運(yùn)算。在這個(gè)實(shí)驗(yàn)中我們需要調(diào)用cfft庫(kù)函數(shù)對(duì)其進(jìn)行FFT運(yùn)算。3、 CCS實(shí)現(xiàn) 1、各個(gè)函數(shù)的說(shuō)明(1)void cbrev(DATA *x,DATA*r,unshort n) 功能: 為了FFT/IFFT得到一個(gè)正確順序的變換結(jié)果,對(duì)他們的輸入數(shù)據(jù)進(jìn)行倒序。入口參數(shù):x2*n x是一個(gè)2*n項(xiàng)的一維數(shù)組,數(shù)組中數(shù)據(jù)定義為短整型(16位有符號(hào)整型)。數(shù)組x是作為輸入數(shù)據(jù),函數(shù)對(duì)他的數(shù)據(jù)進(jìn)行倒序。r2*n r是一個(gè)2*n項(xiàng)的一維數(shù)組,數(shù)組中數(shù)據(jù)定義為短整型(16位有符號(hào)整形)。數(shù)組r是作為輸出數(shù)據(jù),函數(shù)對(duì)x倒序后的結(jié)果存到r中。 n 定

8、義為數(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ì)X0+j*X1,X2+j*X3,X2n+j*X2n+1X2*N-2+j*X2*N-1 這些數(shù)據(jù)進(jìn)行倒序。倒序后的結(jié)果也是按復(fù)數(shù)的實(shí)部、虛部依次存到r數(shù)組中的。注意:數(shù)組中的元素個(gè)數(shù)必須為偶數(shù)。倒序時(shí)采用間接尋址,所以數(shù)組的首地址的末log(n)+1必須為0。(2)void cfft(x,n,scale) 原理及源程序說(shuō)明: 功能:對(duì)復(fù)數(shù)進(jìn)行FFT變換。各項(xiàng)參數(shù):x2*n x是一

9、個(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)過(guò)以下倆個(gè)宏定義而來(lái)的: #define dummy(x,n,scale)cfft#n(x,scale)#define cfft(x,n,scale)dummy(x,n,scale)原始函數(shù)為cfft#n(x,scale),n可取值為16,32,64,128,256,512,1024。函

10、數(shù)Cfft()要求輸入數(shù)據(jù)為倒序,即經(jīng)過(guò)cbrev()處理之后的數(shù)據(jù)。同cbrev()一樣,cfft()也是對(duì)X0+j*X1,X2+j*X3,X2n+j*X2n+1X2*N-2+j*X2*N-1 進(jìn)行的FFT變換,結(jié)果按實(shí)部/虛部存放。注意:數(shù)組中的元素個(gè)數(shù)必須為偶數(shù)。數(shù)組的首地址的末log(n)+1必須為0。(3)cifft(x,n,scale)功能:對(duì)復(fù)數(shù)進(jìn)行IFFT變換。各項(xiàng)參數(shù):x2*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。 Sca

11、le 變換系數(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ù)。(4)unpacki(x,n)函數(shù)功能:對(duì)rfft變換后的結(jié)果進(jìn)行變換,為了rifft()得到原始實(shí)數(shù)的值。各項(xiàng)參數(shù):xn 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ù)組大

12、小。函數(shù)的使用: 可以把這個(gè)函數(shù)看成unpack()函數(shù)的逆變換,具體原理同上。2、庫(kù)函數(shù)的調(diào)用(1)DSPLIB庫(kù)函數(shù)功能 TMS320C54X系列函數(shù)庫(kù)(DSPLIB)是對(duì)C語(yǔ)言編程可調(diào)用優(yōu)化的DSP函數(shù)庫(kù),它含有50個(gè)通用目的的信號(hào)處理程序,全部由匯編語(yǔ)言編寫(xiě),并可由C語(yǔ)言調(diào)用,方便C語(yǔ)言與匯編語(yǔ)言混合編程。這些程序用在計(jì)算強(qiáng)度大、執(zhí)行速度重要的實(shí)時(shí)運(yùn)算中。通過(guò)使用這些程序,可以取得較用C語(yǔ)言編寫(xiě)的相關(guān)程序快的多的運(yùn)行速度,另外通過(guò)使用現(xiàn)成的程序可以使開(kāi)發(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)算等

13、。(2)DSPLIB庫(kù)函數(shù)的FFT運(yùn)算 DSPLIB庫(kù)函數(shù)提供的FFT運(yùn)算程序全部由匯編語(yǔ)言編寫(xiě),充分發(fā)揮DSP的硬件特性,運(yùn)算速度很快。下面以復(fù)數(shù)FFT運(yùn)算程序?yàn)槔M(jìn)行介紹??焖俑盗⑷~變換在作N點(diǎn)傅立葉變換運(yùn)算時(shí),輸入數(shù)據(jù)常常是一連串的復(fù)數(shù)。 不過(guò)在許多實(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ù)虛部的部分則全部填上零,如此一來(lái)我們就可以直接應(yīng)用復(fù)數(shù)FFT了。DSPLIB庫(kù)函數(shù)提供的FFT運(yùn)算程序可進(jìn)行81024點(diǎn)的FFT運(yùn)算。輸入數(shù)據(jù)的存放以自然順序依次排

14、放,實(shí)部在前虛部在后。數(shù)進(jìn)行碼位倒序運(yùn)算形式為:cbrev(X,X,256),即可將采樣數(shù)據(jù)轉(zhuǎn)換成碼位倒序形式,并放入X2N數(shù)組實(shí)數(shù)部分。為進(jìn)行實(shí)數(shù)FFT運(yùn)算輸入數(shù)據(jù)虛部需置零。(3) FFT運(yùn)算的歸一化 除非輸入信號(hào)幅度非常小,否則FFT運(yùn)算結(jié)果可能導(dǎo)致溢出,為防止溢出的發(fā)生,F(xiàn)FT運(yùn)算提供了歸一化功能(可選擇),就是輸出結(jié)果被運(yùn)算長(zhǎng)度N所除。在FFT運(yùn)算進(jìn)行歸一化后,進(jìn)行FFT逆運(yùn)算就不需要?dú)w一化了。3、采樣波形的產(chǎn)生void InputWave() int i;float sample_step=1.0/SAMPLEF;float j=0.0;for ( i=0;i<SAMPLEN

15、UMBER;i+ )fInputi=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庫(kù)文件#include "t4_SCALE.h"/#include "t6_NOSCALE.h"#define SIGNAL1F 20#define SAMPLEF

16、64#define PI 3.1415926#define SAMPLENUMBER 128short INPUTSAMPLENUMBER,xSAMPLENUMBER;float OUTPUTSAMPLENUMBER;void MakeWave();void MakeWave() int i;float sample_step=1.0/SAMPLEF;float j=0.0;for ( i=0;i<SAMPLENUMBER/2;i+ )INPUTi=sin(PI*2*j*SIGNAL1F)*1024;j=j+sample_step;void main() int i; MakeWave(

17、); for(i=0;i<SAMPLENUMBER;i=i+2) xi=INPUTi/2; for(i=1;i<SAMPLENUMBER;i=i+2) xi=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+ ) OUTPUTi=xi; while ( 1 );/ break

18、 point 五、實(shí)驗(yàn)步驟1.實(shí)驗(yàn)準(zhǔn)備 設(shè)置軟件仿真模式 2.啟動(dòng)CCS,打開(kāi)工程,瀏覽程序 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)過(guò)FFT處理后的波分析:出現(xiàn)峰值和谷值的地方為20和44且相對(duì)稱,出現(xiàn)負(fù)值的原因是沒(méi)有取模。另外在出圖時(shí)設(shè)置grath的采樣頻率為2HZ,因?yàn)閤i中有實(shí)數(shù)和虛數(shù)。三個(gè)圖放在一起比較六、調(diào)試過(guò)程中遇到的問(wèn)題和解決辦法 1. 在程序運(yùn)行的過(guò)程中會(huì)出現(xiàn)d

19、splib.h和tms320.h文件不存在的現(xiàn)象,這是由于DSPLIB安裝在固定的子目錄上,而應(yīng)用程序在桌面上,程序編譯連接時(shí),找不到DSPLIB中相應(yīng)的程序。所以需要對(duì)工程的bulid options選項(xiàng)中的兩個(gè)地方經(jīng)行設(shè)置。首先是找不到dsplib.h、tms320.h文件時(shí),在compiler標(biāo)簽下選中preprocessor選項(xiàng),在Include Search Path欄中填入dsplib.h、tms320.h所在子目錄,此處為下圖所示: 當(dāng)出現(xiàn)連接時(shí)找不到FFT運(yùn)算相應(yīng)的匯編程序,此時(shí)可在linker標(biāo)簽下選中basic選項(xiàng),在Library Search Path欄中填入55xdsp.lib

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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)論