1、DSP实习报告DSP实习报告 离散余弦变换(DCT)算法设计姓名:张慧 班级:信息10-1 学号:201016050136指导老师:刘柏生 董胜 刘岩引言 在信息世界快速发展的今天,人们对计算机实时处理图像信息的要求越来越高。如何在保证图像质量的前提下,同时兼顾实时性和高效性成了一个值得关注的问题。于是对图像信息进行一定的压缩处理成了一个不可或缺的环节。图像压缩是关于用最少的数据量来表示尽可能多的原图像的信息的一个过程。 在有关图像压缩的众多正交变换中,离散余弦变换(DCT)是十分有效的一种,其性能极为接近最佳的K-L变换。通过采用行列分解方法,人们只需使用少量的乘法就能完成二维离散余弦变换。
2、正因为如此,DCT就被众多标准广泛使用。离散余弦变换(Discrete Cosine Transform,简称DCT)常被认为是对语音和图像信号进行变换的最佳方法。为了工程上实现的需要,国内外许多学者花费了很大精力去寻找或改进DCT的快速算法。由于近年来DSP的发展,加上专用集成电路设计上的优势,这就牢固地确立DCT在目前图像编码中的重要地位,成为H.261、JPEG、MPEG等国际上公用的编码标准的重要环节。MATLAB是由美国Math-Works公司推出的用于数值计算和图形处理的科学计算软件,它集数值分析、矩阵计算、信号处理和图形显示多种功能于一体,构成了一个方便的界面友好的用户环境。MA
3、TLAB中的图像处理工具箱是许多基于MATLAB技术计算环境的函数包的集合,图形功能完备。本文主要讨论了DCT变换方法,并讨论了应用MATLAB中的图像处理工具箱中的相关函数和命令来实现离散余弦变换的图像压缩算法的仿真。一、 实习题目。4二、 实习目的。4三、 实习任务与要求。4四、 软件介绍。44.1、CCS软件介绍。4 4.2、TMS320VC5509A开发板介绍:。4五、DCT算法原理及设计思路。4 5.1、DCT算法原理。4 5.2、设计思路:。5六、离散余弦变换的具体步骤和实现。5七、源程序代码。11八、硬件电路设计。 35九、实习心得。37十、参考文献。38一、实验题目:离散余弦变
4、换(DCT)算法设计二、实验目的:1、熟练掌握数字信号处理的典型设计方法与技术手段;2、熟悉电子CAD制图与PCB板的制作方法;3、掌握常用电子仪器设备的使用方法;4、亲自动手完成一个DSP系统的设计与实现。 5、学习DCT算法的实现方法。三、实习任务与要求:(1) 利用C语言或汇编语言编写一个实现DCT的DSP程序(2) 在CCS上仿真运行(3) 查看分析结果,记录必要参数四、软件介绍:4.1、CCS软件介绍:Code Composer Studio(CCS或CCStudio)是一种针对TI的DSP、微控制器和应用处理器的集成开发环境。CCS包括一套用于开发和调试嵌入式应用程序CCS包括套用
5、于开发和调试嵌入式应用程序的工具。它包括用于各种TI设备系列的编译器、源代码编辑器项目生成环境调试程序探源代码编辑器、项目生成环境、调试程序、探查器、模拟器和其他许多功能。CCS提供一个单一用户界面,指导用户完成应用程序开发流程的每一步骤。CCS提供了基本的代码生成工具,它们具有一系列的调试、分析能力。CCS集成的软件工具:(1)代码生成工具(包括C6000的C编译器、汇编优化编和连接化器、汇编器和连接器)(2)软件模拟器(Simulator)。(3)实时基础软件DSP/BIOS。(4)主机与目标机之间的实时数据交换软件RTDX机与目标机间的实时数据交换软件RealTimeDataExchan
6、ge提供了实时的和连续的途径,以观察目标应用程序的真实运行情况。它允许系统开发者在主机和目标设备间传输数据而不对目标应开发者在主机和目标设备间传输数据而不对目标应用造成影响。实时分析与数据可视化4.2、TMS320VC5509A开发板介绍:DSP5509开发板是一套功能齐全的基于TMS320VC5509A DSP的学习开发平台,DSP5509开发板既可作为开发板供用户学习使用,也可作为系统板嵌入到用户的产品供用户进行二次开发以便缩短产品开发周期。能进行声音的处理。图像的压缩等。是迄今为止市面上性价比最高的5509开发板。五、DCT算法原理及设计思路:5.1、DCT算法原理离散余弦变换(Disc
7、rete Cosine Transform,简称DCT变换)是一种与傅立叶变换紧密相关的数学运算,属于正弦类正交变换,由于其优良的去冗余性能及高效快速算法的可实现性,被广泛用于语音及图象的有损和无损压缩。在傅立叶级数展开式中,如果被展开的函数是实偶函数,那么其傅立叶级数中只包含余弦项,再将其离散化可导出余弦变换,因此称之为离散余弦变换。对于给定的实际数据序列x(0),X(1) ,x(2). X( N-1 )的DCT(FDCT)算法如下:正变换:其中:二维离散余弦变换(FDCT): 其逆运算是:本实习中,我们只进行一维变换。5.2、设计思路: 对于这个题目,首先得弄明白三个问题:1、什么是离散余
8、弦变换?离散余弦变换(Discrete Cosine Transform,简称DCT变换)是一种与傅立叶变换紧密相关的数学运算,属于正弦类正交变换。2、要进行离散余弦变换,途径是什么?离散余弦变换可通过公式来进行算法实现。3、怎么去实现?通过程序的编写,进行软件和硬件的结合来实现离散余弦变换的仿真的观察。弄清楚这三个问题,就可以去具体实现的设计了,余弦变换的前提是得有信号输入,所以,首先通过5509硬件的搭接,通过5509的音频输入从外界输入一个音频信号,通过5509键盘选择好通道,将音频信号进行A/D转换,然后将所编写的程序下载到5509开发板上,最后将A/D转换后的输入信号进行DCT变换,
9、仿真出波形。而在程序的编写上,关键是DCT变换公式的编写,首先定义好长度,要进行正变换和逆变换需要设置三个变量,一个用于信号的输入,一个用于表示对输入信号的正变换,一个用于对变换后的信号进行重构,也就是DCT逆变换,然后对输入的语音信号进行采集,将采集的语音信号进行累加求和、取平均值等一系列处理,最后通过对公式进行程序编写,让其实现离散余弦的正变换和逆变换。六、离散余弦变换的具体步骤和实现:1、CCS的设置 打开CCS软件,选择C55XX系列,选择C5509 TDS510USB 2.0 Emulate,右键单击CPU_1,value栏选择C5509.gel打开oksave&quite是2、新建
10、工程新建一个文件夹,名为DCT,新建一个项目projectNewexample,所建项目保存到新建文件夹下3、建立源程序FileNewsource file,然后进行程序编写,并且保存在工程文件夹下4、导入源程序:ProjectAdd File to Project将程序导入到当前工程下,在example的source下能看到程序5、编译构建:Project工具栏下的Rebuild All,将在构建窗口显示结果6、链接5509Debugconnecte7、加载:FileLoad Program工程下的Debugexample.out 8、设置断点:在m=0处设置断点9、回到主函数DebugGo
11、 main10、观察仿真波形用View / Graph / Time/Frequency打开两个图形观察窗口;采用双踪观察在启始地址分别为x和y,长度为128的单元中数值的变化,数值类型为32位浮点型,这两个数组分别存放的是经A/D转换的输入信号和对该信号进行DCT变换的结果再打开一个图形观察窗口,设置观察变量为y和z;变量z为输入信号的DCT变换及逆DCT变换的结果,长度128,32位浮点型,即输入信号的重构信号单击“Animate”运行程序,调整各图形观察窗口,动态观察变换结果;改变输入信号的波形、频率、幅值,动态观察变换结果正变换波形逆变换波形七、源程序代码1主程序/*#include
12、reg5509a.h#include /*#define pi 3.1415927#define Len 128/-void dct1c2 (double xLen, double yLen);void idct1c2 (double yLen, double zLen);/-double xLen,yLen,zLen,tempLen;int in_xLen;int m = 0;int intnum = 0;double xmean=0;int i=0;int flag = 0;/*/void main() unsigned int ii;/- initial_sys(); mcbsp2_cl
13、ose(); asm( bit(st1, #11) = 1); initial_aic23(); delayMs_SYS(1); mcbsp2_init(); mcbsp2_open(); /- while(1) for(ii=0;ii!=Len;ii+) mcbsp2_read_rdy(); /read_data2 = DRR2_2; in_xii = DRR1_2; xmean = 0.0; for (i=0; iLen; i+) xmean = in_xi + xmean; xmean = 1.0*xmean/Len; for (i=0; iLen; i+) xi = (double)(
14、in_xi - xmean); dct1c2 (x,y); idct1c2 (y,z); m=0; /设置断点 m=0; /- void dct1c2 (double xLen, double yLen) double s,t; int i,j; s=0.0; for (i=0; iLen; i+) s=s+xi; for (i=1; iLen; i+) t=0.0; for (j=0; jLen; j+) t=t+xj*cos(2.0*j+1)*i*pi/(2.0*Len); yi=sqrt(2.0/Len)*t; y0=s/(sqrt(Len/1.0); void idct1c2(doub
15、le yLen, double zLen) double t; int i,j; for (i=0; iLen; i+) t=0.0; for (j=0; j=1) send_aic23_bit(flag & temp_dat); SCLK_DIN23(0,0,0); delayMs_SYS(2); AIC23_CLK(1); delayMs_SYS(2); /ack AIC23_CLK(0); /是否需要同时输出 SDIN /SEND HIGNT BYTE temp_dat = (dat 8); flag = 0x80; SCLK_DIN23(0,(flag & temp_dat),1); delayMs_SYS(2); AIC23_CLK(1); for(flag = 0x40;flag != 0;flag =1) send_aic23_bit(flag & temp_dat); SCLK_DIN23(0,0,0); delayMs_SYS(2); AIC23_CLK(1); delayMs_SYS(2); /ack AIC23_CLK(0); /是否需要同时输出 SDIN /SEND LOW BYTE temp_dat = dat; flag = 0x80; SCLK_DIN23(0,(flag & temp_da
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1