DSP实验报告.docx
- 文档编号:5465836
- 上传时间:2022-12-16
- 格式:DOCX
- 页数:25
- 大小:944.30KB
DSP实验报告.docx
《DSP实验报告.docx》由会员分享,可在线阅读,更多相关《DSP实验报告.docx(25页珍藏版)》请在冰豆网上搜索。
DSP实验报告
DSP课程设计实验报告
学院
班级
姓 名
学 号
指导教师
2010年6月
课程设计第一部分:
学习程序实例
[实验4.1]卷积运算
一、实验目的
1.掌握卷积运算的基本原理;
2.掌握用C语言编写DSP程序的方法。
二、实验设备
1.一台装有CCS软件的计算机;
2.DSP实验箱的TMS320C5410主控板;
3.DSP硬件仿真器。
三、实验原理
卷积是数字信号处理中经常用到的运算。
其基本的表达式为:
写实现程序时需要注意两点:
(1)序列数组长度的分配,尤其是输出数组y(n)要有足够的长度;
(2)循环体中变量的位置,即n和m的关系。
四、实验结果
打开工程Ex5_1.pjt修改程序:
将输入序列x的长度改为N1=15,h的长度改为N2=20,将输入序列x的函数改为x[i]=i+1,Run之后出现问题,发现可能是由于x长度15,h长度20,卷积运算之后y的长度为34,超出了之前程序定义好的三个都是20,存储长度没有改导致出错,于是将原来的floaty[20]改为floaty[100];改之后发现程序运行无误。
绘制波形图的方式:
波形图如下:
H图:
X图:
Y图:
该CCS程序用C语言编写,实现得功能较为简单,在源程序的基础上可以很快地实现数据的修改从而得到新的结果,通过运行该程序,对于CCS的操作和使用方法有了初步的认识,同时也熟悉了利用C语言开发DSP程序的过程和所需要的条件。
§4.2[实验4.2]相关运算
一、实验目的
1. 掌握相关系数的估计方法;
2. 掌握用C语言编写DSP程序的方法。
二、实验设备
1.一台装有CCS软件的计算机;
2.DSP实验箱的TMS320C5410主控板;
3.DSP硬件仿真器。
三、实验结果
打开工程Ex5_2.pjt修改程序:
修改了m和n的长度:
m=15;//10
n=45;//40
修改了for循环:
for(i=0;i { x[i]=2;//1 y[i]=i+1;//i 绘制出更改之后r的波形图: [实验4.3]快速傅里叶变换(FFT)实现 一、实验目的 1.掌握FFT算法的基本原理; 2.掌握用C语言编写DSP程序的方法。 二、实验设备 1.一台装有CCS软件的计算机; 2.DSP实验箱的TMS320C5410主控板; 3.DSP硬件仿真器。 三、实验原理 傅里叶变换是一种将信号从时域变换到频域的变换形式,是信号处理的重要分析工具。 离散傅里叶变换(DFT)是傅里叶变换在离散系统中的表示形式。 但是DFT的计算量非常大,FFT就是DFT的一种快速算法,FFT将DFT的N2步运算减少至(N/2)log2N步。 离散信号x(n)的傅里叶变换可以表示为 , 式中的WN称为蝶形因子,利用它的对称性和周期性可以减少运算量。 一般而言,FFT算法分为时间抽取(DIT)和频率抽取(DIF)两大类。 两者的区别是蝶形因子出现的位置不同,前者中蝶形因子出现在输入端,后者中出现在输出端。 本实验中采用了一种比较常用有效的方法完成这一步工作__雷德算法。 四、实验结果 打开工程Ex5_3.pjt修改程序: 修改原代码,从外部文件Sine输入x_re,在源代码中进行必要的修改,添加新代码用于外部文件的输入。 然后在主程序中写入dataIO();并2.在该行设置上探测点作为外部文件输入点。 由于在原代码中x_re为float形式,而外部文件格式为int形式,类型不匹配,必须做相应的修改。 新代码: staticvoiddataIO(); staticvoiddataIO() { /*dodataI/O*/ return; } Sine波形图: Y_re波形图: 通过运行该程序又掌握了CCS中如何实现外部文件输入的方法以及探测点的使用。 操作顺序为先在主程序dataIO();一行前设置探测点,编译运行程序,loadout文件,执行fileI/O进入文件输入输出对话框,载入外部文件,设置好相应的载入长度,数据赋值对象等操作完成后运行程序就可实现文件的输入。 对于该程序我们也可以对x_re修改为其他形式如sin(i)。 运行结果 X_re: Y_re: §4.4[实验4.4]离散余弦变换(DCT)实现 一、实验目的 1. 掌握离散余弦变换的概念和实现方法; 2. 掌握用C语言编写DSP程序的方法。 二、实验设备 1. 一台装有CCS软件的计算机; 2.DSP实验箱的TMS320C5410主控板; 3.DSP硬件仿真器。 三、实验步骤 1.在N=8时,输出Ck的取值图形: CK的波形: 四、实验心得 1.掌握了离散余弦变换的基本原理以及蝶形运算的运算过程。 2.熟练掌握了ccs的使用方法。 3.通过在ccs中跟踪FFT的运算过程,更好的掌握了FFT的运算方法,初步了解到ccs数据存储的路径和方法。 [实验4.5]有限冲击响应滤波器(FIR)实现 一、实验目的 1. 掌握FIR滤波器的原理和窗函数设计法; 2. 掌握用C语言编写DSP程序的方法。 二、实验设备 1. 一台装有CCS软件的计算机; 2.DSP实验箱的TMS320C5410主控板; 3.DSP硬件仿真器。 三、实验原理 数字滤波是DSP的最基本的应用领域之一。 对于许多应用来说,数字滤波一般具有如下的差分方程形式: 式中,X(n)为输入序列,Y(n)为输出序列,Ak和Bk为滤波器系数,N是滤波器的阶数。 若式中所有的Bk均为零,且通常把系数Ak记为hk, 则有: 上式就是FIR滤波器的差分方程了。 FIR滤波器的最主要的特点是没有反馈回路,因此它是无条件稳定系统。 它的单位脉冲响应h(n)是一个有限长序列。 由上面的方程可见,FIR滤波算法实际上是一种乘法累加运算,它不断地输入样本x(n),经延时(z–1),做乘法累加,再输出滤波结果y(n)。 四、实验结果 打开工程Ex5_5.pjt观察波形: 理想的冲击响应系数序列hd M=1时: 矩形窗函数(w) 加窗后序列(h) 加窗后的幅频响应db M=2时 三角窗函数(w) 加窗后序列(h) 加窗后的幅频响应db M=3 汉宁窗函数w 加窗后序列h 加窗后的幅频响应db M=4 汉明窗函数w 加窗后序列h 加窗后的幅频响应db M=5时: 布莱克曼窗函数w 加窗后序列h 加窗后的幅频响应db 通过程序熟悉了利用文件的输入和输出的使用,当m从1~5依次取值时,5种窗函数的滤波特性依次上升,这样一来,序列通过滤波器后的幅频特性主瓣宽度依次增加,旁瓣依次减小。 对于fir滤波器的C语言实现有所了解。 通过实验指导书中matlab仿真,同时学会使用fdatool的使用,通过该工具可以很方便的设计不同的滤波器。 §5.1[实验5.1]McBSP配置GPIO实验 一、实验目的 1.熟悉5410的指令系统; 2.熟悉配置GPIO的方法。 二、实验设备 1.一台装有CCS5000软件的计算机; 2.DSP实验箱; 3.DSP硬件仿真器。 三、实验步骤及结果 编译本次实验工程GPIOTEST.pjt,并且装载.out文件: 实验结果如图所示: [实验5.2]数码管控制实验 1)调入(.\shuzi\shuzi.pjt) ,生成输出文件,通过仿真器把执行代码(.out的文件)下载到DSP芯片; 2)运行程序 ;数码管会显示1~8的数字 3)运行结果: 图2-数码管控制实验结果 2.[实验5.3]液晶显示屏(LCD)实验 1)调入(.\LCDtest\LCD.pjt) ,生成输出文件,通过仿真器把执行代码(.out的文件)下载到DSP芯片; 2)运行程序 。 3)运行结果: 液晶会循环显示百科融创-科融创-融创-创-百科融创 图3-液晶显示屏(LCD)实验结果 3.[实验5.4]键盘扫描实验 1)调入(.\key\zkey.pjt) ,生成输出文件,通过仿真器把执行代码(.out的文件)下载到DSP芯片; 2)运行程序 ;按下键盘按键,液晶会显示所按键的号码。 3)运行结果 图4-键盘扫描实验结果 4.[实验5.7]普通语音A/D与D/A转换实验 1)调入(.\ad50ad_da\ad50.pjt) ,生成输出文件,通过仿真器把执行代码(.out的文件)下载到DSP芯片,连接好DSP开发系统,音频线连接计算机和AD50模块的输入,另一条音频线连接AD50模块输出和扬声器输入; 2)打开CPU寄存器观察窗口,把OVLY位设置为0,运行程序 ;调节RPC02和音量,使得声音大小恰当,能够播放歌曲。 3)运行结果: 按照实验步骤,正确连线,调用程序后编译链接下载,实验箱能处理电脑放的音乐。 当声音不清晰时可调节RPC02(VOCALOUTPUT旁边那个),调节音量,使音量大小恰当。 打开电脑上的音频文件,可从DSP硬件系统上的扬声器听到音乐,声音还原度较好。 课程设计第二部分: DSP程序设计开发 基于CCS的FIR数字滤波器的设计和DSP实现 前言: 随着信息时代和数字世界的到来,数字信号处理已成为今一门极其重要的学科和技术领域。 数字信号处理在通信、语音、图像、自动控制、雷达、军事、航空航天、医疗和家用电器等众多领域得到了广泛的应用。 在数字信号处理应用中,数字滤波器十分重要并已获得广泛应用。 目前常用的滤波器设计方法普遍采用Matlab仿真,DSP实现。 一个实际的应用系统中,总存在各种干扰。 使用DSP进行数字信号处理时,可以从噪声中提取信号,即对一个具有噪声和信号的混合源进行采样,然后经过一个数字滤波器,滤除噪声,提取有用信号;数字滤波器是DSP最基本的应用领域,也是熟悉DSP应用的重要环节。 在系统设计中,滤波器的好坏将直接影响系统的性能。 一、设计原理 数字滤波器根据其冲激响应函数的时域特性,可分为两种,即无限长冲激响应(IIR)滤波器和有限长冲激响应(FIR)滤波器。 IIR滤波器的特征是,具有无限持续时间冲激响应。 种滤波器一般需要用递归模型来实现,因而有时也称之为递归滤波器。 FIR滤波器的冲激响应只能延续一定时间,在工程实际中可以采用递归的方式实现,也可以采用非递归的方式实现。 数字滤波器的设计方法有多种,如双线性变换法、窗函数设计法、插值逼近法和Chebyshev逼近法等等。 本次实验我采用的是窗函数法设计一个有限长冲激响应(FIR)滤波器。 数字滤波是DSP的最基本的应用领域之一。 对于许多应用来说,数字滤波一般具有如下的差分方程形式: 式中,X(n)为输入序列,Y(n)为输出序列,Ak和Bk为滤波器系数,N是滤波器的阶数。 若式中所有的Bk均为零,且通常把系数Ak记为hk, 则有: 上式就是FIR滤波器的差分方程了。 FIR滤波器的最主要的特点是没有反馈回路,因此它是无条件稳定系统。 它的单位脉冲响应h(n)是一个有限长序列。 由上面的方程可见,FIR滤波算法实际上是一种乘法累加运算,它不断地输入样本x(n),经延时(z–1),做乘法累加,再输出滤波结果y(n)。 在这里使用FIR滤波器,它有以下几个特点: 1、系统的单位冲激响应h(n)在有限个n值处不为零; 2、系统函数H(z)在|z|>0处收敛,在|z|>0处只有零点,有限z平面只有零点,而全部极点都在z=0处; 3、结构主要是非递归结构,没有输出到输入的反馈。 要设计一个FIR滤波器就是要求出它的冲击响应系数h(n),设计方法主要有窗函数法和频率抽样法,本实验要求掌握窗函数法,这也是最基本的方法。 理想的低通滤波器的频率响应Hd(w)是一个矩形,这意味着它在时域上是无限长的序列,这在实际上是不可能实现的。 因此我们要采取某种方法截断Hd(n),可以用一个有限长度的窗函数序列w(n)与之相乘。 这个窗函数序列的形状和长度都会对最后系统的频率响应特性产生影响,因此对窗函数的分析和选择是设计FIR滤波器的关键问题所在。 本实验举了两种常用的窗函数为例,通过设置参数可以得到加上不同窗后的冲击响应序列h(n),并且可以观察到其幅频响应图。 二、程序开发步骤: 第一步: 理解程序原理,进行资料收集 第二步: 编写C语言源代码 在CCS集成开发环境下,使用C语言编写程序源代码。 第三步: 设置相应的头文件 第四步: 参考有关程序,添加必要的文件 设定cmd文件,该文件用于对程序存储空间的设置,其中包括数据存储空间和I/O存储空间的设置。 同时也需要添加一些asm文件等。 第五步: 程序调试 对程序进行调试,观察程序运行效果,根据结果不断修正程序中的相关参数。 三、程序代码 主程序代码: #include"math.h" floathd[51]; floath[51]; floatw[51]; floatdb[300]; floatpi; floatwc; intn; intm; intl;/*l>>n*/ floatim,re; floata,b,p,wf,d; intk,i; main() { /*参数初始化*/ for(i=0;i<51;i++) { hd[i]=0; h[i]=0; w[i]=0; } for(i=0;i<300;i++) { db[i]=0; } m=1; n=25;/*n<=51,为奇数*/ wc=0.2; l=300; a=(n-1)/2; pi=4.0*atan(1.0); for(i=0;i {if(i==a) hd[i]=wc; else {b=i-a; hd[i]=sin(pi*b*wc)/(pi*b); } } switch(m)/*根据m的值选择不同的窗函数*/ { /*m=1时用矩形窗*/ case1: for(i=7;i<18;i++) w[i]=1.0; break; /*m=2时用三角窗(巴特莱特窗)*/ case2: for(i=0;i { if(i>=a) w[i]=2.0-2.0*i/(n-1); else w[i]=2.0*i/(n-1); } break; } for(i=0;i h[i]=hd[i]*w[i];/*对理想冲击响应加窗(时域相乘)*/ p=pi/l; /*对加窗后的响应序列进行傅里叶变换,观察其幅频响应*/ for(k=0;k<=l-1;k++) { wf=(pi*k)/l; re=0.0; im=0.0; for(i=0;i { re=re+h[i]*cos((float)i*wf); im=im+h[i]*sin((float)i*wf); } d=sqrt(pow(re,2)+pow(im,2));/*求模(幅度)*/ db[k]=20.0*log10(d);/*转换为对数表示形式*/ } } Cmd文件代码: -c -mlzt.map -olzt.out lzt.obj -lrts.lib -stack0x100 MEMORY { PAGE0: PROG: origin=1a00h,length=2600h PAGE1: DATA: origin=0200h,length=1800h } SECTIONS { .text>PROGPAGE0 .cinit>PROGPAGE0 .switch>PROGPAGE0 vect>3f80hPAGE0 .data>DATAPAGE1 .bss>DATAPAGE1 .const>DATAPAGE1 .sysmem>DATAPAGE1 .stack>DATAPAGE1 } 在编写程序的过程中我通过参考一些程序实例,将里面有用的代码添加过来,有时也要进行必要的修改例如窗函数文件与cmd文件,都参考了其他程序进行的设计,在cmd中可以直接参考在实验学习过程中使用过的程序,并在调试过程中不断进行修改得到最后需要的结果。 主程序的编写过程并不是十分复杂,关键在于对于一些程序结构的理解,例如如何使用滤波器,实现信号Hd的产生等,这些内容通过查看资料,上网搜索等都进行了解决。 五、程序调试及运行结果: Simulator仿真结果分析与硬件调试 仿真在系统调试中起着重要作用,TI公司也提供了软件仿真器(Simulator)来调试程序。 其中提供的探测点(Probe Point)功能非常强大,也可以通过CCS提供的图形窗口观察输入输出数据情况。 1. 复习有关FIR滤波器的原理; 2. 在CCS环境中新建本实验的工程lizetao.pjt,并且编写程序代码lzt.c以及lzt.cmd文件代码; 3.编译 并重建.out输出文件,然后通过仿真器把执行代码(.out的文件)下载到DSP芯片中; 4. 运行程序 (执行需要一定时间); 5. 选择view->graph->time/frequency… 。 设置对话框中的参数: 其中“StartAddress”设为“hd”,“Acquisitionbuffersize”和“DisplayDatasize”都设为“25”(因为源程序中n=25),并且把“DSPDataType”设为“32-bitfloatingpoint”,设置好后观察理想冲击响应序列的波形示意图,可与公式对照分析; 6.观察其它序列的波形示意图,包括所用窗函数w,加窗后响应序列h和输出对数幅频响应db的图形,这时的“StartAddress”应分别设为“w”和“h”和“db”,其中观察前两者时数据块大小设为“25”(同n值),观察“db”时数据块大小设为“300”(同l值),所观察到的图形应大致如下面两组图所示; m=1时: m=2时: 五、实验中遇到的问题: 1.卷积运算实验中,在绘制图形的时候,应根据定义的数据类型,选择DSPDataType。 在此实验中,由于我将输入序列x,h,输出序列y数组的数据类型修改为了int,但在绘图时,未注意到此时的DSPDataType为32位带符号的整型,因此绘出的图形有误,将此参数修改为16位带符号的整形,得到正确的图形。 错误的图形修改参数后得到正确的图形 2.在做实验4.6时我遇到了两个问题。 1).我想在CCS中创建工程,我从图书馆借来了几本参考书,但不知如何才能生成.cmd文件,经过和老师的讨论,找到的解决方法是将其他工程中的.cmd文件拷到自己创建的工程的文件夹下,然后在CCS中将其打开,把文件的开头的名称都改为自己程序的名称。 这个方法只适用于这两个工程使用同一种芯片的情况。 2).在做实验4.6时,由于IIR滤波器的滤波不能用卷积计算,所以我选用了直接利用系统函数的表达式进行迭代的方法,我是用教科书上的公式代入编程的,本来没有发现什么问题,后来经过同学的提醒我发现,在此例中系统函数的分母pr_a[0]不为1,因此不用直接套用书上的公式,应先对系数进行归一化处理。 3.在用CCS仿真时: 首先我发现即使只输入很简单的函数,得到的图形也不对,通过询问老师,我发现自己忽略了一个问题,就是在使用数学函数的时候,在程序的开始应先声明库函数: #include"math.h",加上这条语句之后,程序得以正常运行。 六、心得体会: 通过对原理的分析,首先掌握程序开发的实现方法,在编写程序时才有明确的方向。 设计DSP程序的过程中,我通过自己的亲身体会到了许多实际开发程序中可能会遇到的问题,而在我们每解决一个问题的同时我们就会收获到许多宝贵的经验,虽然在编写的过程中我们主要是参考其他相关程序,模仿它们的编写,但通过将其中的设计开发过程自己完成了一遍感觉仍收获不小,不足之处还在于程序最终实现的功能还不够完善,实现条件比较特殊,不能普遍使用。 在此次实验中我不仅熟悉和巩固了数字信号处理的基本知识,并且学习使用CCS软件来进行DSP芯片的软件模拟及配合硬件的仿真实验。 由于之前没有接触过这类软件,因此在开始使用它时,连如何在CCS中创建工程都遇到了困难,我从图书馆借来了几本参考书,但仍旧不知道如何才能生成.cmd文件,经过和老师的讨论,找到的解决方法是将其他工程中的.cmd文件拷到自己创建的工程的文件夹下,然后在CCS中将其打开,把文件的开头的名称都改为自己程序的名称。 这个方法只适用于这两个工程使用同一种芯片的情况。 解决了创建工程的问题之后,我便开始对老师布置的题目逐一进行试验,CCS的编译语言为C语言,虽然我之前系统的学习过,但由于平时没有经常使用,导致在实验中出现像数组越界,库函数没有导入而导致数学计算式出错等错误,这都是对这门语言没有熟练掌握的表现。 但通过几天的实验,使我巩固了之前学习的知识。 在此之前,我们解决数字信号处理的问题都是使用Matlab软件,这次实习使我又掌握了一种新的处理问题的方法,更加贴合实际。 同时,在实验过程中,我深深领会到认真二字的重要性,很多时候就因为我的一点马虎,程序就会编译出错,在这个时候也需要极大的耐心与毅力,细致的查找错误,一遍遍修改,发现问题后也并不觉得可怕,而是将可能的情况一个一个的试,直到程序正确为止。 同时,我也非常感谢老师和同学帮助。 在关键时刻,老师的指点总能帮助我马上发现问题所在。 对于同一个问题,每个人思考的角度都不一样,因此在和同学的讨论中,我从他们那里学到了解决问题的思考方法,明确了思路。 我学到了一个很宝贵的精神,那就是对每一个现象都要问一句为什么,不能只停留在表面,只有这样才能自主地学到更多的知识。 总之,在这次实习过程中,我不仅学到了丰富的知识,更学到了面对困难时应采取的主动积极的态度。 这都将成为我今后学习生活中宝贵的财富。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- DSP 实验 报告