预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共15页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

DSP课程设计论文 题目离散余弦变换(DCT)的DSP实现 专业电气工程及其自动化 姓名陈梦泽班级11东电气 学号11811527 执行学期2014-2015 离散余弦变换(DCT)的DSP实现 一、实验目的 1.掌握离散余弦变换的概念和实现方法; 2.掌握用C语言或汇编语言编写DSP程序的方法; 3.熟悉DCT原理; 二、实验设备 1.一台装有CCS软件的计算机; 2.DSP实验箱的TMS320C5410主控板; 3.DSP硬件仿真器; 三、实验原理论述 1、原理 离散余弦变换(DiscreteCosineTransform,简称DCT变换)是一种与傅立叶变换紧密相关的数学运算。在傅立叶级数展开式中,如果被展开的函数是实偶函数,那么其傅立叶级数中只包含余弦项,再将其离散化可导出余弦变换,因此称之为离散余弦变换。对于给定的实际数据序列x(0),X(1),x(2)....X(N-1)的DCT(FDCT)算法如下: (1) 其中: (2) 二维离散余弦变换(FDCT): (3) 其逆运算是: (4) 其中N=8为8x8DCT. 2、DCT的DSP程序设计 无论是C语言还是汇编语言,程序流程均分为初始化、行变换、列变换和移位输出四个步骤。行、列变换具有相似性,如果对行变换的结果矩阵转置,则列变换程序跟行变换一样。对于汇编而言,初始化部分主要初始化FP指针以指向前一函数地址,初始化数据和指针寄存器以保存返回数据等。由于DCT行变和列变换过程相似,且列变换是在行变换操作的基础上进行的。则可利用多种索引寻址寄存器的灵活组合,把行变换结果直接以转置方式存储而不增加实际的存储时间,这样行列变换可使用同一代码循环两次实现,减小了实际代码大小。本程序实现的是FDCT,可以使用2次一维DCT变换来实现二维DCT变换。 3、DCT的DSP实现 二维DCT变换时结果为两次无理数sqrt(8)相乘,产生了有理项,因此,在程序里首先多乘一次sqrt(8),然后在两次DCT变换结束以后,使用右移3位以达到正常输出。 四、方案论证及系统设计 本次实习有两种方案,C语言和汇编语言实现,由于考虑到DSP程序的特点,我采用汇编语言实现。 1.打开CCS软件,编制程序简化行列变换的代码如下: 2.B0=R0; B3=R1; B2=R2;… LSETUP(DCT_START,DCT_END)LC0=P0; DCT_START:… LSETUP(ROW_START,ROW_END)LC1=P2; ROW_START:… ROW_END:… B1=B0; B0=B2; DCT_END:B2=B1; 五、一维DCT变换流程图 六、程序模块源程序 DSP程序: .mmregs .defentry .sect"INIT" * *Initialise * entryNOP NOP SSBXSXM;setsignextensionmode SSBXOVM;enablesaturation LD#0,DP;setdatapage STM0FFE0h,PMST;InitPMSTreg. RSBXFRCT .include"fdct_dat.inc";FDCTdatastoragedeclaration MODE.SET1;MODE=1TESTONSIMULATOR PAGE0.SET0 PAGE4.SET4 PAGE24.SET24d PAGE25.SET25d B0.SET0200h B1.SET0300h B2.SET060h PA1BIS.SET1 PA2BIS.SET2 PA3BIS.SET3 PA4BIS.SET4 PA5BIS.SET5 PA6BIS.SET6 *Initializationoftheregisters .sect "FDCT" INITLD#PAGE24,DP ST#21407,E_P6 ST#8867,F_P6 ST#2000H,ROUND1 TBL:LD#PAGE25,DP ST#21407,E_P7 ST#8867,F_P7 ST#4000H,ROUND2 ST#40H,ROUND3 START *IFMODE=SIMULATOR .IFMODE=1 STM#63,AR0;AR0=#ofinputstobetaken-1 STM#X,AR1 ;AR1=addressoffirstinput BEGPORTR#PA1BIS,*AR1+;Readandstoretoaddr(AR1) BANZBEG,*AR0-;Repeatabovecode64times ;tillall64pixelsareread .ENDI