北邮信息工程信号与信息处理综合实验DSP实验二报告(FFT实现).docVIP

  • 64
  • 0
  • 约2.91千字
  • 约 9页
  • 2017-08-22 发布于陕西
  • 举报

北邮信息工程信号与信息处理综合实验DSP实验二报告(FFT实现).doc

信息与通信工程学院 信号与信息处理综合实验报告 (DSP部分) 班 级: 姓 名: 学 号: 序 号: 日 期: 实验二 FFT实现 一、实验目的 进一步熟悉CCS 程序功能 本程序的基本要求是: (1)其他点数的FFTFFT后再进行IFFT,验证是否与原数据一致 三、程序基本信息 (一)、程序模块描述: 1、FFT程序(实现基本功能): (1)FFT部分: 主函数(main):初始化输入序列、旋转因子、FFT点数,负责其它功能函数的调用,并完成一些基本操作。 void DSP_radix2(int n, short *restrict xy, const short *restrict w):完成FFT运算(基2频域抽选)。 参数说明: n是输入序列的长度,short xy是输入序列(复数),const short w为旋转因子。 void bitrev_index(short *index, int n):计算得到重新排序表,n 为序列长度。 void DSP_bitrev_cplx(int *x, short *index, int nx):根据bitrev_index计算的排序表,把FFT输出的复数序列x重新排序为自然顺序。 DSP_bitrev_cplx: (2)SDRAM配置与写入部分: 主函数(main):负责其它功能的调用,执行SDRAM写入、读取和检测,并点亮对应的LED。 EMIFA_config(MyEmifaConfig):实现对EMIFA总线的12个接口寄存器的配置。具体配置信息在MyEmifaConfig结构体中。 #pragma DATA_SECTION(sdram_data,.off_ram);数据段定义,定义要写入的数据位置,需要在CMD文件中建立对应的section。 C641x_SDRAM.cmd文件;描述物理存储器的管理、分配和使用情况,用于DSP 代码的定位。 2、拓展功能: 拓展功能包括任意点数FFT和IFFT,它们都是基于FFT程序(FFT部分)修改的,以下只列出拓展(修改)的部分。 任意点数FFT: 要实现任意点数FFT,则输入序列和旋转因子都要根据点数N自动生成。下面就是实现这一功能的代码段: for (i=0;iN/2;i++) { w1[2*i] = 32767*(-cos((double)i*delta)); w1[2*i+1] = 32767*(-sin((double)i*delta)); } for (i=0;iN;i++) { x1[2*i] = (short)((cos(PI*i/20.0)+cos(PI*i/10.0)+cos(PI*i/5.0))*0x80); x1[2*i+1] = 0; } 接下来调用DSP_radix2函数进行FFT即可。 IFFT: IFFT的实现基于如下算法: 流程: 对应代码段: for(i=0;i16;i++) { x[i*2+1]=(-x[i*2+1]); } DSP_radix2(nx,x,w); for(i=0;i32;i++) { x[i]=x[i]/nx; } DSP_bitrev_cplx(x,index,nx); 注:输入序列均为实数,为了节省执行时间,该程序没有进行第二次共轭。另外输出为乱序,需要第二次重排。 2、程序流程: (1)FFT(任意点数FFT、IFFT): 某些流程只会在拓展功能中出现,会加以标注,另IFFT具体流程上面已给出,这里不再重复。 (2)SDRAM配置、写入与检测 四、功能测试记录 1、FFT: 任意点数的FFT由于变化较多,这里无法给出执行结果。 输入序列:0, 0, 10, 0, 20, 0, 10, 0, 0, 0, -10, 0, -20, 0, -10, 0, 0, 0, 10, 0, 20, 0, 10, 0, 0, 0, -10, 0, -20, 0, -10, 0 FFT结果(序列): FFT结果(图象): IFFT结果: 由上图可见,和原始输入序列相比,IFFT的结果略有误差。 2、SDRAM: 正确执行的结果: 检测错误时的结果(如把写入的结果与全0数组比较): 五、调试过程中的主要问题及难点 1、FFT无法得到正确结果。 解决:原先的输入数据可能产生溢出,更换新数据后解决。 2、编译SDRAM程序时出错。 为了实

文档评论(0)

1亿VIP精品文档

相关文档