目录一、题目名称........................................................1二、内容摘要........................................................1三、设计任务和要求.................................................13.1设计任务.......................................................13.2设计要求.......................................................13.2.1课程设计基本要求........................................13.2.2成果要求.................................................1四、设计基本原理...................................................14.1DCT原理.......................................................14.2DCT的DSP程序设计原理........................................24.3DCT的MATLAB程序设计原理....................................2五、设计方法——软件设计,画出程序流程图...................25.1DSP程序设计..................................................25.2MATLAB程序设计...............................................3六、系统调试.........................................................46.1使用的主要仪器................................................46.2调试程序的方法和技巧.........................................46.3结果分析.......................................................46.4调试中出现的故障、原因及排除方法............................4七、设计成果.........................................................57.1DSP设计结果...................................................57.2MATLAB设计结果...............................................8八、设计结论.........................................................8九、收获和体会......................................................8参考文献..............................................................9附件(源程序).....................................................101一、题目名称离散余弦变换(DCT)的DSP仿真实现二、内容摘要离散余弦变换(DCTforDiscreteCosineTransform)是与傅里叶变换相关的一种变换,它类似于离散傅里叶变换(DFTforDiscreteFourierTransform),但是只使用实数。离散余弦变换相当于一个长度大概是它两倍的离散傅里叶变换,这个离散傅里叶变换是对一个实偶函数进行的(因为一个实偶函数的傅里叶变换仍然是一个实偶函数),在有些变形里面需要将输入或者输出的位置移动半个单位(DCT有8种标准类型,其中4种是常见的)。MATLAB验证波形关键字:离散余弦变化、CCS仿真、MATLAB验证波形。三、设计任务和要求3.1设计任务(1)掌握DCT算法的基本原理。(2)通过CCS仿真实现正弦序列的DCT变换及逆DCT变换。(3)观察DCT变换波形,通过MATLAB验证波形的正确性。(4)分析逆变换信号与原始信号的误差,并通过波形观察误差结果。3.2设计要求3.2.1课程设计基本要求课题分析、查阅资料、方案论证、方案实现、系统联调、撰写课程设计报告3.2.2成果要求(1)软件设计(包括主要模块的流程图,源程序清单和注释);(2)调试过程(包括实验过程中的实验步骤,出现的问题,解决问题的方法,使用的实验数据等);(3)设计说明书(课程设计报告)。四、设计基本原理4.1DCT原理离散余弦变换(DiscreteCosineTransform,简称DCT变换)是一种与傅立叶变换紧密相关的数学运算。在傅立叶级数展开式中,如果被展开的函数是实偶函数,那么其傅立2叶级数中只包含余弦项,再将其离散化可导出余弦变换,因此称之为离散余弦变换。对于给定的实际数据序列x(0),X(1),x(2)....X(N-1)的DCT(FDCT)算法如下:z(k)N()()cos()221201kxnnkNnN(1)其中:()()kk12fork=01fork0(2)二维离散余弦变换(FDCT):z(k,)()()(,)cos()cos()lNklxmnmkNnlNmNnN22122120101(3)其逆运算是:xmnNklzklmkNnlNlNkN(,)()()(,)cos()cos()22122120101(4)其中N=8为8x8DCT。4.2DCT的DSP程序设计原理CCS提供很多方法将程序产生的数据画图显示,包括时域/频域波形显示,星座图、眼图及图像显示。我们使用频域/时域波形显示功能观察DCT变换前后的时域波形。在程序的编写上,关键是DCT变换公式的编写,首先定义好长度,要进行正变换和逆变换需要设置三个变量,一个用于信号的输入,一个用于表示对输入信号的正变换,一个用于对变换后的信号进行重构,也就是DCT逆变换。最后通过对公式进行程序编写,让其实现离散余弦的正变换和逆变换。4.3DCT的MATLAB程序设计原理MATLAB是提供了多种二维图形的绘制指令,但其中最重要的指令是plot。利用二维曲线绘制的基本指令plot,我们可以验证波形的正确性以及对误差进行分析比较。五、设计方法——软件设计,画出程序流程图5.1DSP程序设计CCS软件可以对C语言、汇编语言或混合语言编程的DSP源程序进行编译汇编,并链接成可执行的DSP程序。我们选择用C语来言实现程序的编写。首先定义变量,数据长度size为64个单位,数据类型datatype为32位浮点型。然后在主函数main()中对正弦函数抽样,调用功能函数dct()、idct()进行3DCT变换及IDCT变换。最后,调用误差函数error()对变换前后的图像进行比较,分析误差原因。开始定义变量输入正弦函数调用函数进行DCT变换调用函数进行IDCT变换输出比较结束图5-1DSP程序流程图5.2MATLAB程序设计MATLAB绘制连续曲线时,会根据用户指定的离散采样点,自动地进行计算,进而绘制出连续的曲线。在区间(0,10*pi)中对正弦函数进行100个采样点,然后利用MATLAB自带的指令集对其进行DCT变换和IDCT变换,并用subplot(x,y,z)将波形显示在同一张图形上。4开始对正弦函数采样调用指令进行DCT变换调用指令进行IDCT变换进行波形比较输出波形结束图5-2MATLAB程序流程图六、系统调试6.1使用的主要仪器微机主机一台(已安装CCSC5000和MATLAB软件包)6.2调试程序的方法和技巧程序调试时需要看懂任务的要求,以及要实现的功能,然后分解成一个个小问题去解决。在这个程序中首先是调试好DCT变换的程序,以及链接程序,这两个程序是这个实验的关键;调试好着两个程序以后只要分别设置四个波形的起始地址,即可按照要求显示相应的图形。MATLAB中相对较为简单,只需调用相关指令即可。6.3结果分析调试的结果符合实验的基本要求,用View/Graph/Time/Frequency打开两个图形观察窗口;采用双踪观察在启始地址分别为x、y、z和e长度为64的单元中数值的变化,数值类型为32位浮点型,这四个数组分别存放的是经A/D转换的输入信号、对该信号进行DCT变换的结果以及误差比较。6.4调试中出现的故障、原因及排除方法在编写及调试的过程中主要遇到了以下的问题:5(1)在编写程序的过程中要对涉及的存储单元进行初始化,这样在数据或是代码段进行汇编时才不会出现问题。(2)编写程序需要对数据段,代码段,堆栈段进行设置,要编写相应的*.cmd文件,使程序对其进行合理化的分配空间。(3)在打开图形属性窗口时,要对起始地址、采集缓冲区的大小、显示数据大小、DSP数据类型进行更改,才会使显示正确、合理的波形。七、设计成果7.1DSP设计结果执行菜单命令Project-RebuildAll或在Project工具栏上双击RebuildAll图标,对工程重新编译、汇编和链接,Output窗口将显示进行汇编、编译和链接的相关信息。执行菜单命令File-LoadProgram,选择dct.out并打开,将Build生成的程序加载到DSP中。如图7-1所示。图7-1在监视窗口显示程序运行结果执行菜单命令View-Graph-Time/Frequency,弹出GraphProperty对话框。如图8-13-6所示,在GraphProperty对话框中,更改图形的标题、起始地址、采集缓冲区的大小、显示数据大小、DSP数据类型、自动伸缩属性及最大Y值。如图7-2所示。单击OK按钮,将出现显示波形的图形窗口。6图7-2GraphProperty对话框图7-3输入图形显示图7-4DCT变换图形显示7图7-5IDCT变换图形显示图7-5误差比较图形显示误差分析:最大负误差:-1.1640;最大正误差:1.6399。对于正变换之前的波形和逆变换之后的波形,并不完全一致,这主要归咎于对正弦函数采样频率的大小。若输入信号是频带宽度有限的限号,要想抽样后的信号能够不失真地还原出原信号,则必须抽样频率Fs大于等于信号最高频率分量Fh的两倍。这一点是我们要着重注意的。87.2MATLAB设计结果图7-6MATLAB验证波形误差分析:最大负误差:-5.1348*e^(-16);最大正误差:3.8858*e^(-16)。八、设计结论离散余弦变换,经常被信号处理和图像处理使用,用于对信号和图像(包括静止图像和运动图像)进行有损数据压缩。这是由于离散余弦变换具有很强的能量集中特性:大多数的自然信号(包括声音和图像)的能量都集中在离散余弦变换后的低频部分。九、收获和体会通过这次DSP课程设计实验,加深了我对DSP算法原理和基本性质的理解。这次课程设计是做离散余弦变换(DCT)的DSP仿真实现,实验过程中基本每天都有新的疑难点出现,这样对我们来说,每天都能学到新的知识。一开始的程序出现了诸多错误,*.c文件功能不完整,*.cmd文件无法自行编写,虽困难重重但小组成员仍不放弃。最后,查找大量资料以及向老师寻求帮助,得意解决苦难得到正确实验结果。我们每一个人都学到了新知识并学会了很多检查错误、处理问题的方法。同时通过这次实验,我也发现自己的不足之处,比如说,