北邮信号与信息处理DSP实验二_第1页
北邮信号与信息处理DSP实验二_第2页
北邮信号与信息处理DSP实验二_第3页
北邮信号与信息处理DSP实验二_第4页
北邮信号与信息处理DSP实验二_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

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

文档简介

信号与信息综合处理实验报告学院: 班级: 姓名: 学号:实验二FFT实现实验目的进一步熟悉CCSv5的开发环境,掌握调试的要素,并理解FFT的过程。实验原理FFT变换FFT算法:X,蝶形运算图:

实现函数:DSP_fft(w,N,x,y)。IFFT变换算法实现:x实现流程: -14,0,-57,0,-125,0,-217,0,-326,0,-449,0,-578,0,-707,0,-829,0,-938,0,-1027,0, -1090,0,-1122,0,-1119,0,-1079,0,-1000,0,-883,0,-729,0,-541,0,-324,0,-84,0, 173,0,439,0,707,0,968,0,1214,0,1437,0,1631,0,1788,0,1904,0,1976,0 };shortx1[2*N]={0};shortx2[2*N]={0};//存储FFT之后的结果shorty[2*N]= { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 };#include<stdio.h>#include<csl.h>#include<csl_irq.h>#include<csl_chip.h>#include<csl_emifa.h>#include"dsk6416.h"#include"dsk6416_led.h"staticEMIFA_ConfigMyEmifaConfig={ EMIFA_GBLCTL_RMK ( EMIFA_GBLCTL_EK2RATE_FULLCLK, //1XEMIFinputclock EMIFA_GBLCTL_EK2HZ_CLK, //eclkout2continueoutputduringhold EMIFA_GBLCTL_EK2EN_ENABLE, //eclkout2enableoutput EMIFA_GBLCTL_BRMODE_MRSTATUS, //busrequestismemoryaccessorrefreshpending/inprogress EMIFA_GBLCTL_NOHOLD_DISABLE, EMIFA_GBLCTL_EK1HZ_CLK, //eclkout1continueoutputduringhold EMIFA_GBLCTL_EK1EN_ENABLE, //eclkout1enableoutput EMIFA_GBLCTL_CLK4EN_ENABLE, //clkout4outputenable EMIFA_GBLCTL_CLK6EN_ENABLE //clkout6outputenable ), 0xffffffd3, //64BITSDRAM// 0xffffff33, //32BITSDRAM// 0xffffff93, //16bitSDRAM// 0xffffff83, //8bitSDRAM 0xffffffe3, 0x22a28a 0x22a28a EMIFA_SDCTL_RMK ( EMIFA_SDCTL_SDBSZ_4BANKS, //SDRAMbanksize4banks EMIFA_SDCTL_SDRSZ_11ROW, //rownumber=11 EMIFA_SDCTL_SDCSZ_8COL, //columnnumber=8 EMIFA_SDCTL_RFEN_ENABLE, //SDRAMrefreshenable //EMIFA_SDCTL_INIT_NO, //SDRAM配置完每个CE空间后,不初始化 EMIFA_SDCTL_INIT_YES, //SDRAM配置完每个CE空间后,初始化 EMIFA_SDCTL_TRCD_OF(2), //TRCD=(Trcd/Tcyc)-1 EMIFA_SDCTL_TRP_OF(2), //TRP=(Trp/Tcyc)-1,3个 EMIFA_SDCTL_TRC_OF(8), EMIFA_SDCTL_SLFRFR_DISABLE //selfrefreshmodedisable ), EMIFA_SDTIM_RMK ( EMIFA_SDTIM_XRFR_DEFAULT, //EXTTIMERdefault EMIFA_SDTIM_PERIOD_OF(2083) //refreshperiod,clockout1=10ns ), EMIFA_SDEXT_RMK ( EMIFA_SDEXT_WR2RD_OF(0), //cyclesbetweenwritetoreadcommand=1,subtract1is0 EMIFA_SDEXT_WR2DEAC_OF(1), //cyclesbetweenwritetoprecharge=2 EMIFA_SDEXT_WR2WR_OF(1), //cyclesbetweenwritetowrite=2 EMIFA_SDEXT_R2WDQM_OF(1), //cyclesbetweenreadtobex=2 EMIFA_SDEXT_RD2WR_OF(0), //cyclesbetweenreadtowrite=1 EMIFA_SDEXT_RD2DEAC_OF(1), // EMIFA_SDEXT_RD2RD_OF(0), // EMIFA_SDEXT_THZP_OF(2), //Troh=3cycle EMIFA_SDEXT_TWR_OF(1), //Twr=1clock+6ns EMIFA_SDEXT_TRRD_OF(0), //Trrd=12ns EMIFA_SDEXT_TRAS_OF(5), //Tras=42ns EMIFA_SDEXT_TCL_OF(1) //caslatency=3clock ), 0x00000002, 0x00000002, 0x00000002, 0x00000002};#pragmaDATA_SECTION(sdram_data,".off_ram");unsignedintsdram_data[0x400000];voidmain(){ inti,m[N]; Uint32good_flag; good_flag=0; DSK6416_init();DSK6416_LED_init();//初始化CSL CSL_init(); //配置EMIFA EMIFA_config(&MyEmifaConfig);for(i=0;i<0x400000;i++){ sdram_data[i]=0;}//FFT会改变x[i]的值,故先将其存入SDRAMprintf("x[i]:");for(i=0;i<2*N;i++){ sdram_data[i]=x[i]; printf("%d",x[i]);}printf("\n"); //FFT DSP_fft(w,N,x,y); //FFT结果y[i]的值,存入SDRAM printf("y[i]:");for(i=0;i<2*N;i++){ sdram_data[i+2*N]=y[i]; printf("%d",y[i]);}printf("\n");//FFT结果y[i]的模值平方printf("m[i]:"); for(i=0;i<N;i++) { m[i]=y[2*i]*y[2*i]+y[2*i+1]*y[2*i+1]; printf("%d",m[i]); } printf("\n"); //IFFT将y[i]共轭除以增益系数N(即FFT点数) for(i=0;i<2*N;i++) { if(i%2==1)y[i]=-y[i]; y[i]=y[i]/N; } //IFFT利用FFT进行IFFT DSP_fft(w,N,y,x2); //IFFTFFT会修改y[i]重新把y[i]从SDRAM中读出 printf("y[i]fromSDRAM:");for(i=0;i<2*N;i++){ y[i]=sdram_data[i+2*N]; printf("%d",y[i]);} printf("\n"); //IFFT将FFT的结果共轭即为IFFT结果printf("x2[i]:"); for(i=0;i<2*N;i++) { if(i%2==1)x2[i]=-x2[i]; printf("%d",x2[i]); } printf("\n"); //FFT将x[i]的值从SDRAM中读出赋给x1[i] printf("x1[i]:"); for(i=0;i<2*N;i++) { x1[i]=sdram_data[i]; printf("%d",x1[i]); } printf("\n"); //将IFFT的结果x2[i]与FFT前的数据x1[i]进行比较 for(i=0;i<2*N;i++) { if(abs(x2[i]-x1[i])>10) { good_flag=0; break; } good_flag=1; } if(good_flag==1) { DSK6416_LED_on(0); DSK6416_LED_on(1); DSK6416_LED_on(2); DSK6416_LED_off(3); printf("IFFTRESULTISOK!\n"); } else { DSK6416_LED_on(0); DSK6416_LED_off(1); DSK6416_LED_off(2); DSK6416_LED_off(3); printf("IFFTRESULTISFAILED!\n"); }流程图SDRAM配置流程图SDRAM配置流程图组内分工功能测试软件平台查看变量:通过View->Variables可以查看各个变量的值。图形显示工具:CCSv5中提供了一个高级图形和图像可视化工具。它可通过图形形式显示数组,并且可采用多种格式。查看m序列中的数值,即观测FFT变换后各点模值的平方。Console控制台显示:x[i]:初始序列,即需要进行FFT变换的64点的实部、虚部按序排列;y[i]:FFT的结果,即变换后64点的实部、虚部按序排列;m[i]:FFT变换所得各点模值平方;x2[i]:IFFT变换结果,即反变换后64点实部、虚部按序排列;x1[i]:从SDRAM读出的x[i]原始序列;结论:“IFFTRESULTISOK!”代表变换前后数据一致,否则显示“IFFTRESULTISFAILED!”。代码优化:如果没有进行软件流水,程序运行结束时,clock显示为:17736121,即程序共需要17736121个时钟周期。优化后,程序运行结束时,clock显示为:52753,即程序共需要52753个时钟周期。DSP执行程序后,LED测试效果为LED0~2均被点亮,即变换前后一致。重点、难点断点调试问题在不同行设置断点,运行结果不同。在本次实验的调试过程中,应注意将断点设置在最后一行以上,以免出现灰断点,保证单次运行的正常进行。此外,通过View->Variables查看各个变量的值,有时会出现原程序执行时不能显示出变量对应值的情况。经过尝试,发现在只需加入单次运行的断点即可解决这一问题。IFFT及其验证在进行IFFT拓展功能时,考虑使用现有函数实现

温馨提示

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

评论

0/150

提交评论