ImageVerifierCode 换一换
格式:DOCX , 页数:23 ,大小:1.47MB ,
资源ID:4713092      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/4713092.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(北邮 DSP 实验二.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

北邮 DSP 实验二.docx

1、北邮 DSP 实验二2015-2016学年第二学期信号与信息处理综合实验(DSP)实验二学院:信息与通信工程学院班级: 学号: 姓名: 班内序号: 一. 实验目的进一步熟悉CCS v5的开发环境,掌握调试的要素,并理解FFT的过程。二. 实验环境Code Composer Studio v5,Windows XP,DSP开发板三. 实验要求3.1基本要求将FFT结果写入SDRAM后,并读取出来。3.2提高要求1)有创意的设计;2)采用改进程序性能的其他方法(如执行效率、内存占用量、灵活性、可移植性等);3)功能扩展:如其他点数的FFT等;如FFT后再进行IFFT,验证是否与原数据一致等。四.

2、实验原理4.1DFT简介对于N点序列,它的离散傅里叶变换(DFT)为通常以符号表示这一变换,即4.2FFT简介1)DFT(离散傅里叶变换)是信号处理中的一种变换,可以将一个时域信号变换到频域。2)有些信号在时域上是很难看出什么特征的,但是如果变换到频域之后,就很容易看出特征了,而且更容易处理。3)直接计算DFT的计算量与变换区间长度N的平方成正比,当N较大时,计算量太大,直接用DFT算法进行谱分析和信号的实时处理是不切实际的。4)FFT(快速傅里叶变换)是DFT的快速算法,FFT的发现使得信号实时的谱分析和处理成为了可能。4.3基2FFT算法直接计算DFT:长度为N的有限长序列的DFT为:考虑

3、为复数序列的一般情况,对某一个值,直接按上式计算值,需要次复数乘法以及次复数加法。FFT算法是不断地把长序列的DFT分解成几个短序列的DFT,并利用旋转因子的周期性和对称性来减少DFT的运算次数。在基2快速算法中,频域抽取法FFT是一种常用的快速算法。设序列长度为,将序列前后对半分为以及两组序列,用2个点DFT来完成一个点DFT的计算。令: 根据下图有即可将一个点DFT分解为两个点DFT来计算,反复迭代可降低运算复杂度。蝶形运算单元:4.4IDFT原理离散傅里叶变换的逆变换(IDFT)为:通常以符号表示这一变换,即4.5IFFT原理利用FFT计算IFFT原理如下:即:4.6寄存器及配置1)GB

4、LCTL寄存器图 GBLCTL寄存器配置EMIFA_GBLCTL_RMK(EMIFA_GBLCTL_EK2RATE_FULLCLK, /1 X EMIF input clockEMIFA_GBLCTL_EK2HZ_CLK, /eclkout2 continue output during holdEMIFA_GBLCTL_EK2EN_ENABLE, /eclkout2 enable outputEMIFA_GBLCTL_BRMODE_MRSTATUS, /bus request is memory access or refresh pending/in progressEMIFA_GBLCT

5、L_NOHOLD_DISABLE,EMIFA_GBLCTL_EK1HZ_CLK, /eclkout1 continue output during holdEMIFA_GBLCTL_EK1EN_ENABLE, /eclkout1 enable outputEMIFA_GBLCTL_CLK4EN_ENABLE, /clkout4 output enableEMIFA_GBLCTL_CLK6EN_ENABLE /clkout6 output enable)2)CECTL0-3寄存器配置图 CECTL寄存器配置0xffffffd3为64BIT SDRAM的配置,32BIT SDRAM的相应配置为0x

6、ffffff33,16BIT SDRAM的相应配置为0xffffff93,8BIT SDRAM的相应配置为0xffffff83。其余位为对CE空间对外设的读写建立时间、选通和保持时间参数等等的配置,可以参照TMS320C6000 DSP External Memory Interface (EMIF)中的“CECTL Register Field Descriptions”来确定各个位置的值。/CECTL0配置0xffffffd3, /CECTL1配置0xffffffe3, /CECTL2配置0x22a28a22, /CECTL3配置0x22a28a22, 3)SDCTL寄存器配置图 SDCT

7、L寄存器配置EMIFA_SDCTL_RMK ( EMIFA_SDCTL_SDBSZ_4BANKS, /SDRAM bank size 4 banks EMIFA_SDCTL_SDRSZ_11ROW, /row number = 11 EMIFA_SDCTL_SDCSZ_8COL, /column number = 8 EMIFA_SDCTL_RFEN_ENABLE, /SDRAM refresh enable EMIFA_SDCTL_INIT_YES, /SDRAM 配置完每个CE空间后,初始化 EMIFA_SDCTL_TRCD_OF(2), /TRCD = (Trcd / Tcyc) - 1

8、 EMIFA_SDCTL_TRP_OF(2), /TRP = (Trp / Tcyc) - 1,3个 EMIFA_SDCTL_TRC_OF(8), EMIFA_SDCTL_SLFRFR_DISABLE /self refresh mode disable ) 4)SDTIM寄存器图 SDTIM寄存器值EMIFA_SDTIM_RMK(EMIFA_SDTIM_XRFR_DEFAULT, /EXT TIMER defaultEMIFA_SDTIM_PERIOD_OF(2083) /refresh period,clockout1 = 10ns) 5)SDEXT寄存器配置图 SDEXT寄存器配置EMI

9、FA_SDEXT_RMK(EMIFA_SDEXT_WR2RD_OF(0), /cycles between write to read command = 1,subtract 1 is 0EMIFA_SDEXT_WR2DEAC_OF(1), /cycles between write to precharge = 2EMIFA_SDEXT_WR2WR_OF(1), /cycles between write to write = 2EMIFA_SDEXT_R2WDQM_OF(1), /cycles between read to bex = 2EMIFA_SDEXT_RD2WR_OF(0),

10、 /cycles between read to write = 1EMIFA_SDEXT_RD2DEAC_OF(1), /EMIFA_SDEXT_RD2RD_OF(0), /EMIFA_SDEXT_THZP_OF(2), /Troh = 3 cycleEMIFA_SDEXT_TWR_OF(1), /Twr = 1 clock +6 nsEMIFA_SDEXT_TRRD_OF(0), /Trrd = 12nsEMIFA_SDEXT_TRAS_OF(5), /Tras = 42nsEMIFA_SDEXT_TCL_OF(1) /cas latency = 3 clock) 6)CE0SECCE3S

11、EC寄存器配置图 CE0SECCE3SEC寄存器配置 设置同步接口数据读延时,可以设置03个时钟周期的延时。0x00000002, 0x00000002, 0x00000002, 0x00000002 五. 功能描述1)对时域信号进行64点的FFT,绘图观测频域结果;2)对频域信号进行64点的IFFT并查看结果;3)进行FFT之前先把时域信号写入SDRAM,之后再从SDRAM中读出,并将IFFT的结果与之进行比较,根据对错情况点亮LED;4)使用软件流水技术对代码进行优化。六. 程序模块描述6.1 FFT模块对时域信号进行64点的FFT,其中参数以及关键函数说明如下:1)short w2*N:

12、N点FFT的旋转因子,由tw_fft16x16.exe生成;2)short x2*N:输入的N点时域信号,其中实部和虚部按顺序排列;3)short y2*N:用来存储FFT计算之后的结果;4)DSP_fft(w,N,x,y):对输入信号x进行N点Radix-4 FFT,并将结果存放在y中,其中w为N点FFT旋转因子。6.2 SDRAM模块使用SDRAM写入以及读取数据,其中参数、关键函数以及文件说明如下:1)static EMIFA_Config MyEmifaConfig:在csl_emifa.h中声明一个结构体EMIFA_Config,用来配置EMIFA,实现对EMIFA总线的12个接口寄

13、存器的配置,具体配置信息在MyEmifaConfig结构体中;2)#pragma DATA_SECTION(sdram_data,.off_ram):数据段定义,定义要写入的数据位置,需要在CMD文件中建立对应的section;3)C641x_SDRAM.cmd:描述物理寄存器的管理,分配和使用情况,用于DSP代码的定位。6.3IFFT模块对频域信号进行64点的IFFT,其中参数以及关键函数说明如下:1)short w2*N:N点FFT的旋转因子,由tw_fft16x16.exe生成;2)short x12*N:存储输入的N点时域信号,其中实部和虚部按顺序排列;3)short x22*N:存储

14、IFFT计算之后的结果;4)DSP_fft(w,N,x,y):对输入信号x进行N点Radix-4 FFT,并将结果存放在y中,其中w为N点FFT旋转因子(在本程序中我们使用FFT函数实现IFFT)。七. 程序流程图八. 各种功能的测试记录、结果及说明8.1 功能分析本实验所设计的功能都顺利实现:1)对时域信号进行64点的FFT,绘图观测频域结果;2)对频域信号进行64点的IFFT并查看结果;3)进行FFT之前先把时域信号写入SDRAM,之后再从SDRAM中读出,并将IFFT的结果与之进行比较,根据对错情况点亮LED;4)使用软件流水技术对代码进行优化。8.2 截图分析1) FFT部分FFT的结

15、果储存在y序列中(64个点按实部虚部的顺序依次存储),通过View-Variable,可以查看y序列的值,如下图所示:为了更形象地表示出FFT的结果,我们使用绘图工具绘制FFT的输出结果即m序列(m序列为64点FFT的复数结果)如下图所示,可以看出FFT的输出图像在点处出现峰值。2) IFFT 部分FFT的结果储存在x2序列中(64个点按实部虚部的顺序依次存储),通过View-Variable,可以查看x2序列的值,如下图所示:3) SDRAM 读写部分将初始序列x从SDRAM中读出并赋值给x1序列,如下图所示:将IFFT的结果x2序列与进行FFT之前的x1序列进行比较,控制台输出信息表明SD

16、RAM的读写以及FFT、IFFT是正确的,如下图所示:在板子上观测到0,1,2的LED灯被点亮,说明结果正确,如下图所示:改变x2序列并再次x1序列进行比较,此时在板子上观测到只有0的LED灯被点亮,如下图所示:4) 优化部分在优化前,运行程序所需时间为177219576个时钟周期,进行流水线优化之后,运行程序所需时间为72377859个时钟周期,如下图所示:九. 调试过程中的主要问题及难点这次实验在操作部分比较简单,没有遇到太大的问题,因此只花了一节课的时间就顺利完成实验,所遇到的问题主要是一些理论性的问题,如下:1)FFT结果图为什么会在这些位置出现峰值,它满足奈奎斯特抽样定律吗?答:输入

17、信号为与下式比较得到因此输出图像在 以及处有峰值,又因为以进行周期延拓,所以在以及处有峰值,满足奈奎斯特抽样定律。2)旋转因子是怎么计算得到的?答:旋转因子为FFT公式中的矩阵,具体的形式如下:十. 心得体会本次实验操作难度不是很大,有了第一次实验的经验,我们对CC5开发环境已经比较熟悉了,所以,我们在教师资源中给出的例程的基础上,逐步按照实验指导书来操作,就很容易地完成基本的实验要求。但在实现IFFT以及整合代码的过程中,由于对相关的理论知识掌握不牢固、对开发板理解不足等原因,我们遇到了一些阻碍。在重新认真复习DSP课本之后,我们进一步加深了对FFT和IFFT算法的理解,查找资料并反复对代码

18、进行修改和完善,最终顺利实现了IFFT功能。另外还有一些问题,是我们在与周围同学一起讨论之后商量出解决办法的。比如,在查看变量的过程中,我们发现按照实验指导书中步骤给出的View -Variables步骤,并不能查看所有变量,后来发现通过Expressions窗口可以添加并观察所有变量结果。这个过程让我们对FFT、IFFT原理以及SDRAM读写操作等知识有了系统的了解和掌握,因为花费了较长时间,因此收获比仅完成基本实验要求要大得多。在验收过程中,助教学长提问我的问题比较简单,提问同组另一个同学的问题则有一些难度,而他完美回答了学长提出的问题,并得到了学长的表扬和赞许,让我意识到自己需要再加强理

19、论知识的理解和学习。通过这次实验,我把以前学过的理论知识又复习了一遍,同时初步学会将它应用于实践,但这是远远不够的,我仍需要在接下来的实验以认真的态度对待,以便能在今后所剩不多的实验里学到更多东西。十一. 程序源代码#include dsp_fft.h#include math.h#define N 64/64点FFT的旋转因子,由tw_fft16x16.exe生成const short w2 * N = 0x0000, 0x7FFF, 0x0C8B, 0x7F61, 0x0000, 0x7FFF, 0x18F8, 0x7D89, 0x0000, 0x7FFF, 0x2527, 0x7A7C,

20、 0x18F8, 0x7D89, 0x2527, 0x7A7C, 0x30FB, 0x7641, 0x471C, 0x6A6D, 0x471C, 0x6A6D, 0x62F1, 0x5133, 0x30FB, 0x7641, 0x3C56, 0x70E2, 0x5A82, 0x5A82, 0x6A6D, 0x471C, 0x7641, 0x30FB, 0x7F61, 0x0C8B, 0x471C, 0x6A6D, 0x5133, 0x62F1, 0x7641, 0x30FB, 0x7D89, 0x18F8, 0x7D89, -0x18F8, 0x70E2, -0x3C56, 0x5A82, 0

21、x5A82, 0x62F1, 0x5133, 0x7FFF, 0x0000, 0x7D89, -0x18F8, 0x5A82, -0x5A82, 0x3C56, -0x70E2, 0x6A6D, 0x471C, 0x70E2, 0x3C56, 0x7641, -0x30FB, 0x6A6D, -0x471C, 0x18F8, -0x7D89, -0x0C8B, -0x7F61, 0x7641, 0x30FB, 0x7A7C, 0x2527, 0x5A82, -0x5A82, 0x471C, -0x6A6D, -0x30FB, -0x7641, -0x5133, -0x62F1, 0x7D89,

22、 0x18F8, 0x7F61, 0x0C8B, 0x30FB, -0x7641, 0x18F8, -0x7D89, -0x6A6D, -0x471C, -0x7A7C, -0x2527, 0x0000, 0x7FFF, 0x30FB, 0x7641, 0x0000, 0x7FFF, 0x5A82, 0x5A82, 0x0000, 0x7FFF, 0x7641, 0x30FB, 0x5A82, 0x5A82, 0x7641, 0x30FB, 0x7FFF, 0x0000, 0x5A82, -0x5A82, 0x5A82, -0x5A82, -0x30FB, -0x7641, 0x0000, 0

23、x0000, 0x0000, 0x7FFF, 0x0000, 0x7FFF, 0x0000, 0x7FFF;/输入时域信号,i=0:63, x=1000*cos(i*pi/32)+1000*cos(i*pi/16)/实部虚部顺序排列short x2*N = 2000, 0, 1975, 0, 1904, 0, 1788, 0, 1631, 0, 1437, 0, 1214, 0, 968, 0, 707, 0, 439, 0, 173, 0, -84, 0, -324, 0, -541, 0, -729, 0, -883, 0, -1000, 0, -1079,0, -1119,0,-1122

24、,0,-1090,0,-1027,0, -938, 0, -829, 0, -707, 0, -578, 0, -449, 0, -326, 0, -217, 0, -125, 0, -57, 0, -14, 0, 0, 0, -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, -8

25、4, 0, 173, 0, 439, 0, 707, 0, 968, 0, 1214, 0, 1437, 0, 1631, 0, 1788, 0, 1904, 0, 1976, 0 ;short x12*N = 0;short x22*N = 0;/存储FFT之后的结果short y2*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,

26、 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 ;int mN = 0;#include #include #include #include #include #include dsk

27、6416.h#include dsk6416_led.hstatic EMIFA_Config MyEmifaConfig = EMIFA_GBLCTL_RMK ( EMIFA_GBLCTL_EK2RATE_FULLCLK, /1 X EMIF input clock EMIFA_GBLCTL_EK2HZ_CLK, /eclkout2 continue output during hold EMIFA_GBLCTL_EK2EN_ENABLE, /eclkout2 enable output EMIFA_GBLCTL_BRMODE_MRSTATUS, /bus request is memory

28、 access or refresh pending/in progress EMIFA_GBLCTL_NOHOLD_DISABLE, EMIFA_GBLCTL_EK1HZ_CLK, /eclkout1 continue output during hold EMIFA_GBLCTL_EK1EN_ENABLE, /eclkout1 enable output EMIFA_GBLCTL_CLK4EN_ENABLE, /clkout4 output enable EMIFA_GBLCTL_CLK6EN_ENABLE /clkout6 output enable ), 0xffffffd3, /64

29、BIT SDRAM/ 0xffffff33, /32BIT SDRAM/ 0xffffff93, /16bit SDRAM/ 0xffffff83, /8bit SDRAM 0xffffffe3, 0x22a28a22, 0x22a28a22, EMIFA_SDCTL_RMK ( EMIFA_SDCTL_SDBSZ_4BANKS, /SDRAM bank size 4 banks EMIFA_SDCTL_SDRSZ_11ROW, /row number = 11 EMIFA_SDCTL_SDCSZ_8COL, /column number = 8 EMIFA_SDCTL_RFEN_ENABLE

30、, /SDRAM refresh enable /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 /self refresh mode disable ), EMIFA_SDTIM_RMK ( EMIFA_SDTIM_XRFR_DEFAULT, /EXT TIMER default EMIFA_SDTIM_PERIOD_OF(2083) /ref

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1