DSP原理及应用课程设计 —FFT基于DSP的实现.doc_第1页
DSP原理及应用课程设计 —FFT基于DSP的实现.doc_第2页
DSP原理及应用课程设计 —FFT基于DSP的实现.doc_第3页
DSP原理及应用课程设计 —FFT基于DSP的实现.doc_第4页
DSP原理及应用课程设计 —FFT基于DSP的实现.doc_第5页
免费预览已结束,剩余7页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

DSP原理及应用课程设计FFT基于DSP的实现班级:姓名; 学号:FFT的DSP实现一 实验目的1了解FFT的TMS320C54x实现的编程方法2掌握8-1024复数点FFT的TMS320C54x程序的使用方法.3 用FFT的TMS320C54x程序分析方波和正弦波的功率谱.4 加深对DFT算法原理和基本性质的理解;5 熟悉FFT的算法原理和FFT子程序的算法流程和应用;6 学习用FFT对连续信号和时域信号进行频谱分析的方法;7 学习DSP中FFT的设计和编程思想;8 学习使用CCS的波形观察器观察波形和频谱情况二 实验条件1 8-1024复数点TMS320C54x源程序fft.asm.2 8-1024复数点TMS320C54x链接命令文件fft.cmd.3正弦、余弦系数表coeff.inc.4产生正弦波信号数据文件的高级语言程序,程序名为sin_fft.exe ,5向量文件vectors.asm.三 设计内容 用DSP汇编语言及C语言进行编程,实现FFT运算、对输入信号进行频谱分析。四 设计原理快速傅里叶变换FFT快速傅里叶变换(FFT)是一种高效实现离散傅里叶变换(DFT)的快速算法,是数字信号处理中最为重要的工具之一,它在声学,语音,电信和信号处理等领域有着广泛的应用。1 离散傅里叶变换DFT对于长度为N的有限长序列x(n),它的离散傅里叶变换(DFT)为 (1) 式中, ,称为旋转因子或蝶形因子。 从DFT的定义可以看出,在x(n)为复数序列的情况下,对某个k值,直接按(1)式计算X(k) 只需要N次复数乘法和(N-1)次复数加法。因此,对所有N个k值,共需要N2次复数乘法和N(N-1)次复数加法。对于一些相当大有N值(如1024点)来说,直接计算它的DFT所需要的计算量是很大的,因此DFT运算的应用受到了很大的限制。2快速傅里叶变换FFT旋转因子WN 有如下的特性。对称性: 。周期性:利用这些特性,既可以使DFT中有些项合并,减少了乘法积项,又可以将长序列的DFT分解成几个短序列的DFT。FFT就是利用了旋转因子的对称性和周期性来减少运算量的。FFT的算法是将长序列的DFT分解成短序列的DFT。例如:N为偶数时,先将N点的DFT分解为两个N/2点的DFT,使复数乘法减少一半:再将每个N/2点的DFT分解成N/4点的DFT,使复数乘又减少一半,继续进行分解可以大大减少计算量。最小变换的点数称为基数,对于基数为2的FFT算法,它的最小变换是2点DFT。一般而言,FFT算法分为按时间抽取的FFT(DIT)和按频率抽取的(DIF FFT)两大类。IF FFT算法是在时域内将每一级输入序列依次按奇偶分成个短序列进行计算。而DIF FFT算法是在频域内将每一级输入序列依次奇偶分成个短序列进行计算。两者的区别是旋转因子出现的位置不同,得算法是一样的。在DIF FFT算法中,旋转因子出现在输入端,而在DIF FFT算法中它出现在输入端。假定序列x(n)的点数N是2的幂,按照DIF FFT算法可将其分为偶序列和奇序列。偶序列: 奇序列:则x(n)的DFT表示为 由于 ,则(3)式可表示为 式中, 和分别为和的N/2的DFT。 由于对称性,则。因此,N点可分为两部分:前半部分: (4) 后半部分: (5) 从式(4)和式(5)可以看出,只要求出0N/2-1区间和的值,就可求出0N-1区间的N点值。以同样的方式进行抽取,可以求得N/4点的DFT,重复抽取过程,就可以使N点的DFT用上组2点的 DFT来计算,这样就可以大减少运算量。基2 DIF FFT的蝶形运算如图(a)所示。设蝶形输入为和,输出为和,则有 (6) (7) 在基数为2的FFT中,设N=2M,共有M级运算,每级有N/2个2点FFT蝶形运算,因此,N点FFT总共有个蝶形运算。 -1 图(a) 基2 DIF FFT的蝶形运算例如:基数为2的FFT,当N=8时,共需要3级,12个基2 DIT FFT的蝶形运算。其信号流程如图(b)所示。 图(b) 8点基2 DIF FFT蝶形运算从图(b)可以看出,输入是经过比特反转的倒位序列,称为位码倒置,其排列顺序为。输出是按自然顺序排列,其顺序为。五 总体方案设计:(1) 在CCS中建立一个工程文件projectnewFFT,往工程文件里添加程序filenewsourcefile.建立C源文件和一个命令文件,并将这两个文件添加到工程,再编译并装载程序:阅读Dsp原理及应用中fft 用dsp实现的有关程序。双击,启动CCS的仿真平台的配着选项。选择C5402 Simulator。Add加到my system ,按下save(2)点击project菜单栏的new选项,新建一个fft64的工程注意存储的路径。1. 把下图中用到的文件拷到工程文件目录的文件路径下。2. 在ccs平台中将用到的程序导入到平台中,点击projectadd file to project。选择多个文件时,可以按住ctrl键。3将所有的程序段中的start改为_main,将fft.Asm中的K_FFT_SIZE .set 32 ;NK_LOGN .set 5 ;LOG(N)改为K_FFT_SIZE .set 64 ;NK_LOGN .set 6 ;LOG(N)4,对源文件进行编译(注意先对每个.asm文件先进行编译,以防止程序有错误),没有错误时进行链接。5点击菜单fileload program。装载.out文件6在FFT.ASM文件的PORTR指令处加载探针。7.在PORTW指令下加入断点,(在调试程序时我们可以加入断点进行调试)。8. 生成FFT用的正弦波输入数据文件in.dat. 程序名sin_fft.exe,执行此程序,键盘输入: N-fft的点数 64 f-正弦波信号频率 100-200之间,选择150 fs-采样频率 大于5倍以上1000 结果形成in.dat(64个复数数据)9将in。dat数据文件用记事本打开,在数据文件第一行添加1651 2 8000 1 80注:1651固定数据格式,2 数据类型(1十六进制、2整型、3长整型、4 浮点型),2000 起始地址,1 数据页面(0 程序; 1 数据; 3 I/O),80 长度(16进制)。因为64个数据中包含实部和虚部故有128个数据,16进制的话就是80。10.点击菜单filefile I/O。点击Add File,添加in。dat。地址和数据长度见下图,记住将Wrap Around选上。点击Add Probe point。选择,probe point下的探针点,点击connect下拉菜单,然后点击replace,使相关联然后选择确定11.打开寄存器和内存观察窗口。点击运行到断点处观察寄存器和内存的变化。注意,不停得点击,使运行到here的断点处,使AR4=9040.12. 点击菜单filedata loda,将in.dat输入数据文件加载进去。13观察输入数据文件的fft变换,点击菜单view-graph-time/frequency14.观察输出文件,同样的方法,将地址修改。15将输入与输出比较,在波峰处都能体现出频谱。17改变信号的频率可以再做次实验。也可作128点或更多点的FFT六源程序:Cmd源文件代码:-f 0-w-stack 500-sysstack 500-l rts55.libMEMORY DARAM: o=0x100, l=0x7f00 VECT:o=0x8000, l=0x100 DARAM2:o=0x8100,l=0x7f00 SARAM: o=0x10000,l=0x30000 SDRAM:o=0x40000,l=0x3e0000 SECTIONS .text: DARAM .vectors: VECT .trcinit:DARAM .gblinit:DARAM .frt:DARAM .cinit:DARAM .pinit:DARAM .sysinit:DARAM2 .far:DARAM2 .const:DARAM2 .switch:DARAM2 .sysmem:DARAM2 .cio:DARAM2 .MEM$obj:DARAM2 .sysheap:DARAM2 .sysstack:DARAM2 .stack:DARAM2 .input:DARAM2 .fftcode:DARAM2 C文件源码:#include math.h#define sample_1 256#define signal_1_f 60#define signal_2_f 200#define signal_sample_f 512#define pi 3.1415926int inputsample_1;float fwaversample_1,fwaveisample_1,wsample_1;float sin_tabsample_1;float cos_tabsample_1;void init_fft_tab();void input_data();void fft(float datarsample_1,float dataisample_1);void main() int i; init_fft_tab(); input_data(); for (i=0;isample_1;i+) fwaveri=inputi; fwaveii=0.0f; wi=0.0f;fft(fwaver,fwavei);while(1); void init_fft_tab() float wt1; float wt2; int i; for (i=0;isample_1;i+) wt1=2*pi*i*signal_1_f; wt1=wt1/signal_sample_f; wt2=2*pi*i*signal_2_f; wt2=wt2/signal_sample_f; inputi=(cos(wt1)+cos(wt2)/2*32768; void input_data() int i;for(i=0;isample_1;i+) sin_tabi=sin(2*pi*i/sample_1); cos_tabi=cos(2*pi*i/sample_1); void fft(float datarsample_1,float dataisample_1) int x0,x1,x2,x3,x4,x5,x6,x7,xx; int i,j,k,b,p,L; float TR,TI,temp; for(i=0;isample_1;i+) x0=x1=x2=x3=x4=x5=x6=0; x0=i&0x01;x1=(i/2)&0x01;x2=(i/4)&0x01;x3=(i/8)&0x01; x4=(i/16)&0x01;x5=(i/32)&0x01;x6=(i/64)&0x01;x7=(i/128)&0x01; xx=x0*128+x1*64+x2*32+x3*16+x4*8+x5*4+x6*2+x7; dataixx=datari; for(i=0;isample_1;i+) datari=dataii;dataii=0; for(L=1;L0) b=b*2;i-; for(j=0;j0) p=p*2;i-; p=p*j; for(k=j;k256;k=k+2*b) TR=datark;TI=dataik;temp=datark+b; datark=datark+datark+b*cos_tabp+dataik+b*sin_tabp; dataik=dataik-datark+b*sin_tabp+dataik+b*cos_tabp; datark+b=TR-datark+b*cos_tabp-dataik+b*sin_tabp; dataik+b=TI+temp*sin_tabp-dataik+b*cos_tabp; for(i=0;isample_1/2;i+)wi=sqrt(datari*datari+dataii*dataii);七设计总结: 课程设计结束了,我感觉到自己收获很多。说说自己对于DSP的理解吧!DSP(digital singnal processor)是一种独特的微处理器,是以数字信号来处理大量信息的器件。其工作原理是接收模拟信号,转换为0或1的数字信号,再对数字信号进行修改、删除、强化,并在其他系统芯片中把数字数据解译回模拟数据或实际环境格式。CCS是用于开发DSP芯片的集成开发环境。通过这次课设,我了解了

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论