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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

江苏大学 dsp课程设计.docx

1、江苏大学 dsp课程设计 JIANGSU UNIVERSITY 本 科 生 课 程 设 计 DSP课程设计实验报告 基于ICETEK5509实验箱和基2FFT算法的频谱分析学院名称: 计算机科学与通信工程学院 专业班级: 通信工程 学生姓名: 指导教师姓名: 指导教师职称: 年 月1、设计目的与意义 1、本课程设计与理论课、实验课一起构成DSP芯片原理与应用完整课程 体系; 2、针对理论课、实验课中无时间和不方便提及内容和需强调重点进行补充与 完善; 3、以原理算法的实现与验证体会DSP技术的系统性,并加深基本原理的体会。2、设计要求 1、系统设计要求: .设计一个以ICETEK5509为硬件

2、主体,FFT为核心算法的频谱分析系统 方案; .用C语言编写系统软件的核心部分,熟悉CCS调试环境的使用方法, 在CCS IDE中仿真实现方案功能; .在实验箱上由硬件实现频谱分析。 2、具体要求: .FFT算法C语言实现与验证 1) 参考教材14.3节FFT核心算法在CCS软件仿真环境中建立FFT工 程:添加main()函数,更改教材中个别语法错误,添加相应的库文 件,建立正确的FFT工程; 2) 设计检测信号,验证FFT算法的正确性及FFT的部分性质; 3) 运用FFT完成IFFT的计算。 .单路、多路数模转换(A/D) 1) 回顾CCS的基本操作流程,尤其是开发环境的使用; 2) 参考实

3、验指导和示例工程掌握5509芯片A/D的C语言基本控制流 程; 3) 仔细阅读工程的源程序,做好注释,为后期开发做好系统采集前端 设计的准备。 .系统集成,实现硬件频谱分析 1) 整合前两个工程,实现连续信号的频谱分析工程的构建; 2) 参考A/D转换示例和DSP系统功能自检示例完成硬件连接,并测试 开发系统运行效果; 3) 基于现有系统,对于实时频谱分析给出进一步开发设计和系统改良 方案。三、课程设计原理1、DSP应用系统构成: 注:一般的输入信号首先进行带限滤波和抽样,然后进行模数(A/D)转换,将信号变成数字比特流。根据奈奎斯特抽样定理,对低通信号模拟,为保持信号的不丢失,抽样频率必须至

4、少是输入带限信号的最高频率的2倍,工程上为带限信号最高频率的3-5倍。2、快速离散傅里叶变换(FFT)的基本原理:频谱分析系统FFT是一种快速有效地计算离散傅里叶变换(DFT)的方法。它是根据离散傅里叶变换的奇、偶、虚、实等特性,对离散傅里叶变换的算法进行改进获得的。因为需要N次复数乘法和N-1次复数加法,所以计算全部X(k),共需要次复数乘法和N(N-1)次复数加法。实现一次复数乘法需要四次实数乘法和两次实数加法,一次复数加法需要两次实数加法,因此直接计算全部X(k)共需要4次实数乘法和2N(2N-1)次实数加法。为减少运算量,提高运算速度,就必须改进算法。FFT算法就是不断地把长序列的DF

5、T分解成几个短序列的DFT,并利用的周期性和对称性来减少DFT的运算次数。具有以下固有特性:(1)的周期性:(2)的对称性: (3)的可约性:另外,。利用的上述特性,将x(n)或X(k)序列按一定规律分解成短序列进行运算,这样可以避免大量的重复运算,提高计算DFT的运算速度。算法形式有很多种,但基本上可以分为两大类,即按时间抽取(Decimation In Time,DIT)FFT算法和按频率抽取(Decimation In Frequency,DIF)FFT算法。 N=8的按时间抽取FFT N=8的按频率抽取FFT 2.1实数序列的FFT:反FFT运算可以表示为: 式中,是时域信号的傅里叶变

6、换。比较和可以看出,通过下列修改,我们可以用FFT算法来实现反FFT: 增加一个归一化因子;将用其复共轭代替。由于第二点需要修改符号,因此FFT程序还不能不加修改的来计算反FFT。因为 可见,求的反FFT可以分为以下三个步骤:取的共轭,得; 求的FFT,得;取的共轭,并除以,即得。采用这种方法可以完全不用修改FFT程序就可以计算反FFT。3、单路、多路模数转换实验原理(AD) TMS320VC5509A模数转换模块特性: 带内置采样和保持的10位模数转换模块ADC,最小转换时间为500ns, 最大采样率为21.5KHz。 2个模拟输入通道(AIN0-AIN1)。 采样和保持获取时间窗口有单独的

7、预定标控制。 模数转换工作过程: 模数转换模块接到启动转换模块后,开始转换第一通道的数据。 经过一个采样时间的延迟后,将采样结果放入转换结果寄存器保存。 转换结束,设置标志。 等待下一个启动信号。 模数转换的程序控制: 模数转换相对于计算机来说是一个较为缓慢的过程。一般采用中断方式启动转换或保存结果,这样在CPU忙于其它工作时可以少占用处理时间。设计转换程序应首先考虑处理过程如何与模数转换的时间相匹配,根据实际需要选择适当的触发转换手段,也要能及时地保存结果。 由于TMS320VC5509A DSP芯片内的A/D转换精度是10位,转换结果的低10位为所需数值,所以在保留时应注意将结果的高6位去

8、除,取出低10位有效数字。 实验程序流程图: 开 始 初始化CPU时钟、 EMIF、AD采样时钟启动AD0通道采集(连续256次)存入缓冲区nADC0启动AD1通道采集(连续256次)存入缓冲区nADC1 实验程序流程图 四.实验程序和流程图: 1、FFT FFT程序:#include struct compx float real,imag; /定义一个复数结构 struct compx s257; /FFT输入和输出:均从s1开始存放 struct compx EE(struct compx ,struct compx ); /定义复数相乘结构 void FFT(struct compx

9、*, int ); /FFT函数预定义 #define pi 3.14159265 struct compx EE(struct compx b1,struct compx b2) /两个复数的相乘-b1*b2 struct compx b3; /定义相乘的结果b3 b3.real=b1.real*b2.real-b1.imag*b2.imag; b3.imag=b1.real*b2.imag+b1.imag*b2.real; return(b3); /返回相乘结果b3 /*输入:xin(实部,虚部), 输出:xin(实部,虚部), N:FFT点数*/void FFT(struct compx

10、 *xin, int N) int f,m,nv2,nm1,i,k,j=1,l; struct compx v,w,t; /v为蝶形因子,w为中间变量 nv2=N/2; f=N; for (m=1;(f=f/2)!=1;m+) ; /计算蝶形运算的级数m=3, nm1=N-1; /*变址运算*/ for (i=1;i=nm1;i+) /实现位反转 if(ij) t=xinj; xinj=xini;xini=t; k=nv2; while(kj) j=j-k;k=k/2; j=j+k; /*fft*/ int le,lei,ip; for (l=1;l=m;l+) le=pow(2,l); le

11、i=le/2; v.real=1.0;v.imag =0.0; /第一级蝶形运算的运算因子 w.real =cos(pi/lei);w.imag =-sin(pi/lei); /用于改变蝶形运算因子中间变量 for(j=1;j=lei;j+) / 改变第二,三蝶形运算的运算因子 for(i=j;i=N;i=i+le) /循环 N/le 次 ip=i+lei; t=EE(xinip,v); xinip.real=xini.real-t.real; xinip.imag =xini.imag-t.imag; xini.real=xini.real+t.real; xini.imag=xini.im

12、ag+t.imag; v=EE(v,w); return;/*main programe*/#include#include#include#includefloat result257;float input257;struct compx s257;int Num=256 ;const float pp=3.14159 ;main() int i=1 ; for(;i257;i+) /si.real=sin(pi*i/128); si.real=cos(2*pp*i/256); si.imag=0 ; inputi=sin(2*pp*i/256); FFT(s,Num); for(i=1;

13、i257;i+) resulti=sqrt(pow(si.real,2)+pow(si.imag,2); 开始输入xin,Nm=log2N变址运算l=1结束输出频谱图l+第l次蝶形运算l=mFFT流程图 3、AD AD程序 #include myapp.h #include ICETEK-VC5509-EDU.h #include scancode.h #include fft.h #include math.h struct compx s0257,s1257; float input0256,input1256,output0256,output1256; #define pi 3.141

14、59265 void InitADC(); void wait( unsigned int cycles ); void EnableAPLL( ); unsigned int nADC0256,nADC1256; main() int i; unsigned int uWork; EnableAPLL(); SDRAM_init(); InitADC(); PLL_Init(132); while ( 1 ) for ( i=0;i256;i+ ) ADCCTL=0x8000; / 启动AD转换,通道0 douWork=ADCDATA; /ADCDATA见ICETEK-VC5509-EDU.

15、h while ( uWork&0x8000 ); nADC0i=uWork&0x0fff; /0xfff0x3ff 取后十位,前两位一直为0 s0i+1.real=nADC0i; /实部为nADC0中的值 input0i= s0i+1.real; s0i+1.imag=0; /虚部为0 for ( i=0;i256;i+ ) ADCCTL=0x9000; / 启动AD转换,通道1 douWork=ADCDATA; /ADCDATA见ICETEK-VC5509-EDU.h while ( uWork&0x8000 ); nADC1i=uWork&0x0fff;/0xfff0x3ff 取后十位,

16、前两位一直为0 s1i+1.real=nADC1i; /实部为nADC1中的值 input1i= s1i+1.real; s1i+1.imag=0;/虚部为0 FFT(s0,256); /调用FFT函数对s0进行FFT变换 FFT(s1,256); /调用FFT函数对s1进行FFT变换 for(i=0;i256;i+) output0i=sqrt(pow(s0i+1.real,2)+pow(s0i+1.imag,2); /取模 output1i=sqrt(pow(s1i+1.real,2)+pow(s1i+1.imag,2); asm( nop); / break point void Ini

17、tADC() ADCCLKCTL=0x23; / 4MHz ADCLK 4*(35+1)=144MHz ADCCLKDIV=0x4f00;void wait( unsigned int cycles ) int i; for ( i = 0 ; i cycles ; i+ ) void EnableAPLL( ) /* Enusre DPLL is running */ *( ioport volatile unsigned short* )0x1f00 = 4; wait( 25 ); *( ioport volatile unsigned short* )0x1f00 = 0; / MUL

18、ITPLY *( ioport volatile unsigned short* )0x1f00 = 0x3000; / COUNT *( ioport volatile unsigned short* )0x1f00 |= 0x4F8; wait( 25 ); /*( ioport volatile unsigned short* )0x1f00 |= 0x800 / MODE *( ioport volatile unsigned short* )0x1f00 |= 2; wait( 30000 ); / APLL Select *( ioport volatile unsigned sh

19、ort* )0x1e80 = 1; / DELAY wait( 60000 ); AD流程图 开始初始化CPU时钟、EMIF、AD采样时钟启动AD0通道采集(连续256次)存入缓冲区nADC 0将nADC0数据赋值给s0结构体中的实部,虚部为0启动AD1通道采集(连续256次)存入缓冲区nADC 1将nADC1数据赋值给s1结构体中的实部,虚部为0FFT(s0,256)FFT(s1,256) 图5-2 AD流程图五、实验步骤及结果分析实验步骤及结果分析 1、FFT验证的步骤和分析:实验步骤: 参考教材中的FFT核心算法在CCS软件仿真中建立FFT工程:首先更改FFT算法中的个别语法错误,初步理

20、解程序,其次编写main()函数使系统能够找到程序入口地址,由于正余弦信号的频谱为脉冲信号,因此这里采用正余弦及其线性组合作为检测信号,编写检测信号程序时,应注意将采样点放入结构体数组s257中。然后添加rts55.lib库文件到工程中,编译、下载,用viewgraphTime/Frequency观察波形,设置观察窗口为: 实验结果截图:检测信号为inputi=sin(2*pp*(i-1)/256)检测信号inputi=cos(2*pp*(i-1/)256)检测信号为直流信号Inputi=1检测信号inputi=sin(10*2*pp*(i-1)/256)inputi=0.5+sin(10*2

21、*pp*i/256)+cos(50*2*pp*i/256)实验结果分析: 1) 信号中有直流分量,有正弦信号和余弦信号,但在时域波形中得 不出信号的组成如何; 2) 在0频时有直流分量; 3) 正余弦信号频谱实部大小相等关于中间值(129,0)对称,虚部大 小相等方向相反,关于中间值(129,0)对称,因此验证了FFT算 法的正确性; 4) 换个角度思考,可以利用此算法来验证奈奎斯特抽样定理,正余 弦时域中任意线性组合不影响频谱分布,以及验证FFT的栅栏效 应,只能看到整数倍频的点等。 2、IFFT验证的步骤和分析: 实验结果截图: 1) 输入信号为cos(2*pi*m/256)时 cos(2

22、*pi*m/256)输入信号和IFFT后时域图 2) 输入信号为sin(2*pi*m/256)时 sin(2*pi*m/256)输入信号和IFFT后时域图 3) 输入信号为1+sin(2*pi*m/256)+cos(2*pi*m/256)时 1+sin(2*pi*m/256)+cos(2*pi*m/256)输入信号和IFFT后时域图 3、两通道模数转换(A/D)在开发环境中的调试 通道波形的产生 根据实验指导书中的操作步骤调试出两通道相同的正弦波,使图像在CCS界面中动态变化,调节实验板上的频率、波形控制按钮,图形界面输出相应的波形,图6-3-1为0通道在10KHZ100KHZ、1通道在101

23、00HZ事的正弦波: 4.两个工程整合后:六、课程设计心得本次DSP课程设计针对理论课、实验课中无时间和不方便提及内容和需强调重点进行补充与完善,以原理算法的实现与验证体会DSP技术的系统性,并加深了我对基本原理的体会。在这几天中,我学到了如下几点: 通过对FFT算法进行分析研究,从基础深入研究和学习,掌握FFT 算法的关键; 通过对DSP芯片工作原理以及开发环境的回顾,在DSP芯片上实现对信 号的实时频谱分析; 这次课程设计,虽然不能做到完全理解掌握,但依然让我加深了对各门专 业课之间的联系; 通过与同组成员的互相沟通,不仅使各自的知识得到了扩充,而且从中得 到了很多的启示,增强了团队合作能力;

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

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