北邮信号与信息处理DSP实验二.doc_第1页
北邮信号与信息处理DSP实验二.doc_第2页
北邮信号与信息处理DSP实验二.doc_第3页
免费预览已结束,剩余12页可下载查看

下载本文档

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

文档简介

信号与信息综合处理实 验 报 告学院: 班级: 姓名: 学号:实验二 FFT实现1. 实验目的进一步熟悉CCS v5的开发环境,掌握调试的要素,并理解FFT的过程。2. 实验原理2.1 FFT变换(1) FFT算法:Xk=n=0N2-1x1(n)WN2kn+WNkn=0N2-1x2nWN2kn,(k=0,1,N-1),(2) 蝶形运算图:(3) 实现函数:DSP_fft(w, N, x, y)。2.2 IFFT变换(1) 算法实现:xn*n=1NDFTX*k,(n=0,1,N-1)(2) 实现流程:2.3 SDRAM(1) EMIFA_Config:在csl_emifa.h中声明了一个结构体EMIFA_Config,用来配置EMIFA。结构体中声明的12个32位无符号整形变量为EMIFA总线的12个接口寄存器;(2) 指定SDRAM数据空间:#pragma DATA_SECTION(sdram_data,.off_ram);unsigned int sdram_data0x10000;上述代码含义为定义一个全局变量sdram_data0x10000,将它指定到自定义的数据空间段off_ram中,其中函数具体用法为 #pragma DATA_SECTION(函数名或全局变量名,用户自定义在数据空间的段名;(3) CMD文件:DSP系统中存在大量的存储器,CMD文件描述物理存储器的管理、分配和使用情况,用于DSP 代码的定位。3. 程序功能233.1 FFT变换通过给定的旋转因子,利用DSP_fft (w, N, x, y ) 函数,对给定64点序列进行FFT变换,其中N为变换点数,具体说明如下:(1) w64为64点FFT的旋转因子,由tw_fft16x16.exe生成;(2) x128内存放原序列,即输入时域信号的实部虚部按顺序排列;(3) y128内存放FFT变换后的序列,实部虚部按顺序排列;(4) m64内存放FFT变换后64点模值的平方。3.2 IFFT变换利用FFT变换的相关性质,对FFT变换后的序列进行IFFT反变换,并将IFFT后结果存入x2128序列中。3.3 SDRAM内数据读写实现指定序列的读写功能,具体说明如下:(1) x128,y128写入SDRAM,以备后续使用;(2) 从SDRAM内读取x128,与x2128进行比较;(3) 通过DIP按键控制LED灯实现不同灯型的变化。3.4 变换前后数据验证比对x128和x2128序列内各数据,若满足误差在允许范围内,则说明原序列与经历FFT和IFFT后得到的序列一致,点亮LED02,证明此次实验的正确性。4. 程序基本信息44.1 程序模块(1) FFT模块:功能:对给定序列进行64点FFT变换,并将原序列及变换后序列写入SDRAM中;输入接口:无;输出接口:SDRAM,将原序列及变换后序列内各数据写入SDRAM中,以备后续使用。(2) IFFT模块:功能:通过FFT变换相关性质,对变换后的序列进行IFFT反变换;输入接口:无;输出接口:无。(3) SDRAM模块:功能:通过从SDRAM内读出原序列,并与IFFT变换后的是序列进行逐个比较,若误差在一定范围内,则点亮三个LED灯以示正确,否则只有一个LED灯亮;输入接口:SDRAM,读出原始序列,以供后续比较使用;输出接口:LED灯,判断IFFT后结果是否与原序列一致,如果误差在允许范围内,则LED02被点亮,否则LED0被点亮。4.2 代码1 #include dsp_fft.h2 /#include dsp_fft16x32.h3 #include math.h4 #define N 6456 /64点FFT的旋转因子,由tw_fft16x16.exe生成7 const short w2 * N =8 9 0x0000, 0x7FFF, 0x0C8B, 0x7F61, 0x0000, 0x7FFF, 0x18F8, 0x7D89,10 0x0000, 0x7FFF, 0x2527, 0x7A7C, 0x18F8, 0x7D89, 0x2527, 0x7A7C,11 0x30FB, 0x7641, 0x471C, 0x6A6D, 0x471C, 0x6A6D, 0x62F1, 0x5133,12 0x30FB, 0x7641, 0x3C56, 0x70E2, 0x5A82, 0x5A82, 0x6A6D, 0x471C,13 0x7641, 0x30FB, 0x7F61, 0x0C8B, 0x471C, 0x6A6D, 0x5133, 0x62F1,14 0x7641, 0x30FB, 0x7D89, 0x18F8, 0x7D89, -0x18F8, 0x70E2, -0x3C56,15 0x5A82, 0x5A82, 0x62F1, 0x5133, 0x7FFF, 0x0000, 0x7D89, -0x18F8,16 0x5A82, -0x5A82, 0x3C56, -0x70E2, 0x6A6D, 0x471C, 0x70E2, 0x3C56,17 0x7641, -0x30FB, 0x6A6D, -0x471C, 0x18F8, -0x7D89, -0x0C8B, -0x7F61,18 0x7641, 0x30FB, 0x7A7C, 0x2527, 0x5A82, -0x5A82, 0x471C, -0x6A6D,19 -0x30FB, -0x7641, -0x5133, -0x62F1, 0x7D89, 0x18F8, 0x7F61, 0x0C8B,20 0x30FB, -0x7641, 0x18F8, -0x7D89, -0x6A6D, -0x471C, -0x7A7C, -0x2527,21 0x0000, 0x7FFF, 0x30FB, 0x7641, 0x0000, 0x7FFF, 0x5A82, 0x5A82,22 0x0000, 0x7FFF, 0x7641, 0x30FB, 0x5A82, 0x5A82, 0x7641, 0x30FB,23 0x7FFF, 0x0000, 0x5A82, -0x5A82, 0x5A82, -0x5A82, -0x30FB, -0x7641,24 0x0000, 0x0000, 0x0000, 0x7FFF, 0x0000, 0x7FFF, 0x0000, 0x7FFF2526 ;2728 /输入时域信号,i=0:63, x=1000*cos(i*pi/32)+1000*cos(i*pi/16)29 /实部虚部顺序排列30 short x2*N =31 32 2000, 0, 1975, 0, 1904, 0, 1788, 0, 1631, 0, 1437, 0, 1214, 0, 968, 0, 707, 0, 439, 0, 173, 0,33 -84, 0, -324, 0, -541, 0, -729, 0, -883, 0, -1000, 0, -1079,0,-1119,0,-1122,0,-1090,0,-1027,0,34 -938, 0, -829, 0, -707, 0, -578, 0, -449, 0, -326, 0, -217, 0,-125, 0, -57, 0, -14, 0, 0, 0,35 -14, 0, -57, 0, -125, 0, -217, 0, -326, 0, -449, 0, -578, 0, -707, 0, -829, 0, -938, 0, -1027, 0,36 -1090, 0, -1122, 0, -1119, 0, -1079, 0, -1000, 0, -883, 0, -729, 0, -541, 0, -324, 0, -84, 0,37 173, 0, 439, 0, 707, 0, 968, 0, 1214, 0, 1437, 0, 1631, 0, 1788, 0, 1904, 0, 1976, 038 ;3940 short x12*N = 0;41 short x22*N = 0;4243 /存储FFT之后的结果44 short y2*N =45 46 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,47 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,48 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,49 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, 050 ;5152 #include 53 #include 54 #include 55 #include 56 #include 57 #include dsk6416.h58 #include dsk6416_led.h5960 static EMIFA_Config MyEmifaConfig =61 62 EMIFA_GBLCTL_RMK63 (64 EMIFA_GBLCTL_EK2RATE_FULLCLK,/1 X EMIF input clock65 EMIFA_GBLCTL_EK2HZ_CLK,/eclkout2 continue output during hold66 EMIFA_GBLCTL_EK2EN_ENABLE,/eclkout2 enable output67 EMIFA_GBLCTL_BRMODE_MRSTATUS,/bus request is memory access or refresh pending/in progress68 EMIFA_GBLCTL_NOHOLD_DISABLE,69 EMIFA_GBLCTL_EK1HZ_CLK,/eclkout1 continue output during hold70 EMIFA_GBLCTL_EK1EN_ENABLE,/eclkout1 enable output71 EMIFA_GBLCTL_CLK4EN_ENABLE,/clkout4 output enable72 EMIFA_GBLCTL_CLK6EN_ENABLE/clkout6 output enable73 ),74 0xffffffd3,/64BIT SDRAM75 /0xffffff33,/32BIT SDRAM76 /0xffffff93,/16bit SDRAM77 /0xffffff83,/8bit SDRAM78 0xffffffe3,79 0x22a28a22,80 0x22a28a22,81 EMIFA_SDCTL_RMK82 (83 EMIFA_SDCTL_SDBSZ_4BANKS,/SDRAM bank size 4 banks84 EMIFA_SDCTL_SDRSZ_11ROW,/row number = 1185 EMIFA_SDCTL_SDCSZ_8COL,/column number = 886 EMIFA_SDCTL_RFEN_ENABLE,/SDRAM refresh enable87 /EMIFA_SDCTL_INIT_NO,/SDRAM 配置完每个CE空间后,不初始化88 EMIFA_SDCTL_INIT_YES,/SDRAM 配置完每个CE空间后,初始化89 EMIFA_SDCTL_TRCD_OF(2),/TRCD = (Trcd / Tcyc) - 190 EMIFA_SDCTL_TRP_OF(2),/TRP = (Trp / Tcyc) - 1,3个91 EMIFA_SDCTL_TRC_OF(8),92 EMIFA_SDCTL_SLFRFR_DISABLE/self refresh mode disable93 ),94 EMIFA_SDTIM_RMK95 (96 EMIFA_SDTIM_XRFR_DEFAULT,/EXT TIMER default97 EMIFA_SDTIM_PERIOD_OF(2083)/refresh period,clockout1 = 10ns98 ),99 EMIFA_SDEXT_RMK100 (101 EMIFA_SDEXT_WR2RD_OF(0),/cycles between write to read command = 1,subtract 1 is 0102 EMIFA_SDEXT_WR2DEAC_OF(1),/cycles between write to precharge = 2103 EMIFA_SDEXT_WR2WR_OF(1),/cycles between write to write = 2104 EMIFA_SDEXT_R2WDQM_OF(1),/cycles between read to bex = 2105 EMIFA_SDEXT_RD2WR_OF(0),/cycles between read to write = 1106 EMIFA_SDEXT_RD2DEAC_OF(1),/107 EMIFA_SDEXT_RD2RD_OF(0),/108 EMIFA_SDEXT_THZP_OF(2),/Troh = 3 cycle109 EMIFA_SDEXT_TWR_OF(1),/Twr = 1 clock +6 ns110 EMIFA_SDEXT_TRRD_OF(0),/Trrd = 12ns111 EMIFA_SDEXT_TRAS_OF(5),/Tras = 42ns112 EMIFA_SDEXT_TCL_OF(1)/cas latency = 3 clock113 ),114 0x00000002,115 0x00000002,116 0x00000002,117 0x00000002118 ;119120 #pragma DATA_SECTION(sdram_data,.off_ram);121 unsigned int sdram_data0x400000;122123 void main()124 125 int i, mN;126 Uint32 good_flag;127 good_flag = 0;128129 DSK6416_init();130 DSK6416_LED_init();131132 /初始化CSL133 CSL_init();134135 /配置EMIFA136 EMIFA_config(&MyEmifaConfig);137138 for(i = 0; i 0x400000; i+)139 140 sdram_datai = 0;141 142143 /FFT 会改变xi的值,故先将其存入SDRAM144 printf(xi:);145 for(i = 0; i 2*N; i+)146 147 sdram_datai = xi;148 printf(%d ,xi);149 150 printf(n);151152 /FFT153 DSP_fft(w, N, x, y);154155 /FFT 结果yi的值,存入SDRAM156 printf(yi:);157 for(i = 0; i 2*N; i+)158 159 sdram_datai + 2*N = yi;160 printf(%d ,yi);161 162 printf(n);163164 /FFT 结果yi的模值平方165 printf(mi:);166 for(i = 0; i N; i+)167 168 mi = y2*i*y2*i + y2*i + 1*y2*i + 1;169 printf(%d ,mi);170 171 printf(n);172173 /IFFT 将yi共轭 除以增益系数N (即FFT点数)174 for(i = 0; i 2*N; i+)175 176177 if(i%2=1) yi = -yi;178 yi = yi/N;179 180181 /IFFT 利用FFT进行IFFT182 DSP_fft(w, N, y, x2);183184 /IFFT FFT会修改yi 重新把yi从SDRAM中读出185 printf(yi from SDRAM:);186 for(i = 0; i 2*N; i+)187 188 yi = sdram_datai + 2*N;189 printf(%d ,yi);190 191 printf(n);192193 /IFFT 将FFT的结果共轭即为IFFT结果194 printf(x2i:);195 for(i = 0; i 2*N; i+)196 197 if(i%2=1) x2i = -x2i;198 printf(%d ,x2i);199 200 printf(n);201202 /FFT 将xi的值从SDRAM中读出 赋给x1i203 printf(x1i:);204 for(i = 0; i 2*N; i+)205 206 x1i = sdram_datai;207 printf(%d ,x1i);208 209 printf(n);210211 /将IFFT的结果x2i 与 FFT前的数据x1i 进行比较212 for(i = 0; i 10)215 216 good_flag = 0;217 break;218 219 good_flag = 1;220 221222 if(good_flag = 1)223 224 DSK6416_LED_on(0);225 DSK6416_LED_on(1);226 DSK6416_LED_on(2);227 DSK6416_LED_off(3);228 printf(IFFT RESULT IS OK!n);229 230 else231 232 DSK6416_LED_on(0);233 DSK6416_LED_off(1);234 DSK6416_LED_off(2);235 DSK6416_LED_off(3);236 printf(IFFT RESULT IS FAILED!n);237 2384.3 流程图(1) SDRAM配置流程图(2) SDRAM配置流程图5. 组内分工6. 功能测试239240234566.1 软件平台(1) 查看变量:通过View-Variables可以查看各个变量的值。(2) 图形显示工具:CCSv5中提供了一个高级图形和图像可视化工具。它可通过图形形式显示数组,并且可采用多种格式。查看m序列中的数值,即观测FFT变换后各点模值的平方。(3) Console控制台显示:xi:初始序列,即需要进行FFT变换的64点的实部、虚部按序排列;yi:FFT的结果,即变换后64点的实部、虚部按序排列;mi:FFT变换所得各点模值平方;x2i:IFFT变换结果,即反变换后64点实部、虚部按序排列;x1i:从SDRAM读出的xi原始序列;结论:“IFFT RESULT IS OK!”代表变换前后数据一致,否则显示“IFFT RESULT IS FAILED!”。(4) 代码优化:如果没有进行软件流水,程序运行结束时,clock显示为:17736121,即程序共需要17736121 个时钟周

温馨提示

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

评论

0/150

提交评论