基于DSP的FFT实现设计报告(完整资料).doc
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《基于DSP的FFT实现设计报告(完整资料).doc》由会员分享,可在线阅读,更多相关《基于DSP的FFT实现设计报告(完整资料).doc(52页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、基于DSP的FFT实现设计报告(完整资料)(可以直接使用,可编辑 优秀版资料,欢迎下载)DP课程设计 姓名: 学号: 日期:一、实验目的1. 加深对DF算法原理和基本性质的理解;2. 熟悉FFT的算法原理和FT子程序的算法流程和应用;3. 学习用FT对连续信号和时域信号进行频谱分析的方法;4. 学习D中FFT的设计和编程思想;5. 学习使用CCS的波形观察器观察波形和频谱情况;二、实验内容用SP汇编语言及C语言进行编程,实现FFT运算、对输入信号进行频谱分析。三、实验原理快速傅里叶变换T旋转因子WN 有如下的特性。对称性:WN+N2=-W(2)周期性:WNn(Nk)WNk(n)=WNnk(3)
2、利用这些特性,既可以使DF中有些项合并,减少了乘法积项,又可以将长序列的DF分解成几个短序列的DF。FFT就是利用了旋转因子的对称性和周期性来减少运算量的。FT的算法是将长序列的DT分解成短序列的DF.例如:为偶数时,先将N点的FT分解为两个N/点的DFT,使复数乘法减少一半:再将每个N/2点的D分解成N/4点的DFT,使复数乘又减少一半,继续进行分解可以大大减少计算量。最小变换的点数称为基数,对于基数为2的FT算法,它的最小变换是点DT。一般而言,F算法分为按时间抽取的FFT(D FT)和按频率抽取的FT(DIF FFT)两大类。IF FFT算法是在时域内将每一级输入序列依次按奇/偶分成2个
3、短序列进行计算.而IFFFT算法是在频域内将每一级输入序列依次奇/偶分成2个短序列进行计算。两者的区别是旋转因子出现的位置不同,得算法是一样的。在DIFF算法中,旋转因子WN出现在输入端,而在DIFFT算法中它出现在输入端。假定序列x(n)的点数N是2的幂,按照DIF FT算法可将其分为偶序列和奇序列。偶序列:x()=x(r)奇序列:(r+1)=x(r)其中:=0,1,2,,N/21,则x(n)的DFT表示为式中,X1 ()和2(k)分别为X1()和X2(r)的N/2的FT. 由于对称性,WNk+N/=k.因此,N点DFT可分为两部分:前半部分:(k)=x(k)kNx2(k)()后半部分:x(
4、N2+k)1()-kNx(k)k=0,1, (5)从式()和式()可以看出,只要求出0N21区间x1(k)和x2()的值,就可求出N1区间x(k)的点值。以同样的方式进行抽取,可以求得N/4点的FT,重复抽取过程,就可以使N点的F用上组2点的DFT来计算,这样就可以大减少运算量。基2 DI FT的蝶形运算如图.所示。设蝶形输入为x1()和x2(k),输出为x(k)和x(N/2+),则有 x(k)(k)+WkNx2() (6)(+)=x1()-WkN2() (7)在基数为的FFT中,设N=2M,共有M级运算,每级有N/个点FT蝶形运算,因此,点FT总共有N/2个蝶形运算。图31 基2 IFFT的
5、蝶形运算例如:基数为2的FF,当=8时,共需要级,12个基2 IT FFT的蝶形运算。其信号流程如图.所示。x(0) x(0)N0(4) x(1) -1 WN0x(2) x(2)-1WNWN2x() x(3) -1 1 N0x(1) (4) 1 0 WN1() x(5) -1 -1 WNWN2x(3) x() -1 -10WN2 WN3x() x(7) 1 1 图3。28点基2 DF T蝶形运算从图(b)可以看出,输入是经过比特反转的倒位序列,称为位码倒置,其排列顺序为(0),(),x(),x(),x(1),x(),x(3),x(7),输出是按自然顺序排列,其顺序为x(0),x(),x(),x
6、(3),x(4),(5),x(6),x(7).程序设计顺序DSP初始化串口设置AD设置功率谱计算观看转换结果,保存数据串口发送转换结果FFT运算位码倒置串口接收,AD采样设置信号源类型、频率幅值、和采样点数四、FFT算法的D实现过程:DP芯片的出现使FFT的实现方法变得更为方便。由于大多数DSP芯片都具有在单指令周期内完成乘法累加操作,并且提供了专门的FT指令,使得FFT算法在DS芯片实现的速度更快.FFT算法可以分为按时间抽取FFT和按频率抽取FT两大类,输入也有实数和复数之分,一般情况下,都假定输入序列为复数。(一)运算序列的存储分配FFT运算时间是衡量SP芯片性能的一个重要指标,因此提高
7、FFT的运算速度是非常重要的。在用DS芯片实现T算法时,应允许利用DSP芯片所提供的各种软、硬件资源。如何利用DSP芯片的有限资源,合理地安排好所使用的存储空间是十分重要的。(二)FF运算的实现用S32C54x的汇编程序实现F算法主要分为四步:1。实现输入数据的比特反转输入数据的比特反转实际上就是将输入数据进行码位倒置,以便在整个运算后的输出序列是一个自然序列。在用汇编指令进行码位倒置时,使用码位倒置可以大大提高程序执行速度和使用存储器的效率。在这种寻址方式下,AR0存放的整数N是FF点的一半,一个辅助寄存器指向一个数据存放的单元。当使用位码倒置寻址将AR加到辅助寄存器时,地址将以位码倒置的方
8、式产生。2实现点复数FFTN点复数F算法的实现可分为三个功能块,即第一级蝶形运算、第二级蝶形运算、第三级至级蝶形运算。对于任何一个的整数幂,总可以通过次分解最后成为2点的DT计算。通过这样的M次分解,可构成M(即)级迭代计算,每级由N/2个蝶形运算组成。3。功率谱的计算用FF计算想(n)的频谱,即计算(k)=X()一般是由实部(k)和虚部(k)组成的复数,即()(k)+j(k)因此,计算功率谱时只需将F变换好的数据,按照实部实部()和虚部()求它们的平方和,然后对平方和进行开平方运算.但是考虑到编程的难度,对于求F变换后数据的最大值,不开平方也可以找到最大值,并对功率谱的结果没有影响,所以在实
9、际的D编程中省去了开方运算.4输出FFT结果(三)汇编语言程序程序主体由rfttask、bi、fft和powr四个子程序组成。ftta:主调用子程序,用来调用其他子程序,实现统一的接口.t-rev:位码倒置子程序,用来实现输入数据的比特反转.fft:FFT算法子程序,用来完成N点FFT运算。在运算过程中,为避免运算结果的溢出,对每个蝶形的运算结果右移一位。f子程序分为三个功能块:第一级蝶形运算、第二级蝶形运算、第三级至至级蝶形运算。(四)正弦系数表和余弦系数表:正弦系数表和余弦系数表可以由数据文件coeff。ic给出,主程序通过.cpy汇编命令将正弦和余弦系数表与程序代码汇编在一起。在本例中,
10、数据文件coef.n给出104复数点FF的正弦、余弦系数各2个。利用此系数表可完成8102点FT的运算。(五)FFT算法的模拟信号输入:FT算法的模拟信号输入可以采用语言编程来生成一个文本文件sindaa,然后在rff-ask汇编程序中,通过。cp汇编命令将生成的数据文件复制到数据存储器中,作为FT算法的输入数据参与FFT运算。这种方法的优点是程序的可读性强,缺点是当输入数据修改后,必须重新编译、汇编和链接。五、设计步骤:1启动CCS,在C中建立一个C源文件和一个命令文件,并将这两个文件添加到工程,再编译并装载程序:阅读原理及应用中ft 用sp实现的有关程序。2双击,启动CCS的仿真平台的配着
11、选项。选择550 Simulator。3.启动cs2后建立工程文件FFT.pjt4建立源文件FF.c与链接文件FT。d5。将这两个文件加到F.pt这个工程中。6创建ut文件.加载ot文件六、编译程序nt NPUSMPLENUMBE,ATSAPLENUMBER;flot WaeRSAMLENBER,fWavISMPLNBER,wSAMPLENUMBE;float in_tabMPLNMBER,os_tabAPLEUM;voi nitForFT()int i;for ( i=0;iSMLEMB;+ )sin_tbi=sn(i/SPENUMBER);cos_tabis(PSAMPNUMBER);vd
12、 MaeWave()int i; ( i=0;iSAMPLEUMBER;+ )IPU=sin(PI*/SALENUMBER*3)*1024;min()int i;tFoFFT();MakeWave();or( i=;iMPENUMBER;i )fWaei=INPUTi;WaveI=0。0f;wi。0;FFT(favR,fWaeI);for ( i0;SAMPEMER;i+)DATi=wi;hil(1 );/ beak pintd FFT(floatdataRSMPLENUMBER,float dtISAMPLENUMBER)int 0,1,,x3,x,x,x,xx;n ,j,,b,p,L;fl
13、o TR,TI,mp;/* following co nv equence */f ( i=;SMPLENUMBER;i+ )x0=x=x2x=x4=x5=0;i0x1;x1=(i/2)x01; x2=(i/)01; x3=(8)01;x4=(i/16)0x01; x5(i2)0x0; x6=(i/6)&0x01;xx064+x122*16+x38+x*+x52+x6;atIxdatR;for (i;SMNUMBER;i+ )dtaRii; dataIi=0; fr ( L=1;=7;L+ )* fr() /b=; i=L1;hile( i0 ) =b*2; i-; /* b= 2() */f
14、or ( 0;j ) /*ppw(2,7L); */p=2; i;*j;for ( =j;28;k=k+2*b ) for () */T=dataRk; I=daI; tem=datRk+b;datRk=dataRk+dtakb*cos_tbp+datak+*sitabp;dataI=dtaIkdat+*sin_tabpdatI+s_tab;dtaR+bRdatRk+b*cos_tabpdaIk+i_tbp;dtaIItemp*si_tabdatIkb*cs_b; /* END for (3)/ ND for() / / END for (1) /for ( i0;iSAMPLENUMBR2;
15、+ ) wisqr(dataRi*dataR+ataIataIi); /* EN FFT */七、实验过程1。编译并下载程序。2。打开观察窗口:选择菜单iew-Gaph-Tie/Fequnc进行如下图所示设置.图1图2图清除显示:在以上打开的窗口中单击鼠标右键,选择弹出式菜单中“Cea Dispay”功能.4设置断点:在程序FFTc中有注释“brakpoint”的语句上设置软件断点。图45运行并观察结果.选择“Deu菜单的“Anate”项,或按Alt+F5 键运行程序.观察“et ve窗口中时域图形;图5在“Te Wve”窗口中点击右键,选择属性,更改图形显示为T。观察频域图形。图6观察“FT
16、”窗口中的由CCS计算出的正弦波的FFT.图(5)改变输入函数IPTi=(sin(PI2i/SAMPLEBER)i(PI*2*/AMPLENUMBER4+sin(PI2i/SMPLENUMBE*)14;图(5)改变输入函数INPUT=(i(I2*i/SMLNUBR*3)+si(PI2i/SAPLEUMBER10)+si(PI*2i/AMLNUMBER*0))4;图9八、实验结果通过观察频域和时域图,程序计算出了测试波形的功率谱,与C 计算的T 结果相近。九、问题与思考()观察图6和图7,可以看到二者波形相似,但横纵坐标均不相同,纵坐标大约是二倍的关系,横坐标大约为14倍。 ()观察图8,因为两
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 DSP FFT 实现 设计 报告 完整 资料
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内