离散余弦变换DCT的DSP程序设计与实现Word文档格式.docx
- 文档编号:17633502
- 上传时间:2022-12-07
- 格式:DOCX
- 页数:13
- 大小:164.56KB
离散余弦变换DCT的DSP程序设计与实现Word文档格式.docx
《离散余弦变换DCT的DSP程序设计与实现Word文档格式.docx》由会员分享,可在线阅读,更多相关《离散余弦变换DCT的DSP程序设计与实现Word文档格式.docx(13页珍藏版)》请在冰豆网上搜索。
行、列变换具有相似性,如果对行变换的结果矩阵转置,则列变换程序跟行变换一样。
对于汇编而言,初始化部分主要初始化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
.ENDIF
STM#3,AR0
ResetAR1tofirstinput
STM#Y00,AR2;
SetAR2tofirstYblock
DCT1NOP
LD#PAGE24,DP
LD*AR1+,4,A;
+(16)*(X0)
ADD*AR1+,4,A;
+(16)*(X1)
+(16)*(X2)
+(16)*(X3)
+(16)*(X4)
+(16)*(X5)
+(16)*(X6)
ADD*AR1,4,A;
+(16)*(X7)
STLA,Y00;
=Y00
RPTZA,#7
MACP*AR1-,COEF_F1,A
SFTAA,4
MAR*AR1+;
(64)[A*X0+B*X1+C*X2-D*X3-D*X4
ADDROUND1,A;
-C*X5-B*X6-A*X7]+4*ROUND1
STHA,2,Y01;
=Y01
LDROUND1,-4,A;
(ROUND1)/16
LDE_P6,T
MAC*AR1+0,A;
+X0*E_P6
MAS*AR1+,A;
-X3*E_P6
MAS*AR1+0,A;
-X4*E_P6
MAC*AR1-,A;
+X7*E_P6
LDF_P6,T
+X6*F_P6
MAS*AR1-0,A;
-X5*F_P6
MAS*AR1-,A;
-X2*F_P6
+X1*F_P6
STHA,6,Y02;
Multiplyprevsummationby16
=Y02
MACP*AR1+,COEFF2,A;
64(B*X0-D*X1-A*X2-C*X3+C*X4+A*X5
MAR*AR1-
+D*X6-B*X7)+4*ROUND1
STHA,2,Y03;
=Y03
LD*AR1-,4,A;
X7*16
SUB*AR1-,4,A;
-X6*16
-X5*16
ADD*AR1-,4,A;
+X4*16
+X3*16
-X2*16
-X1*16
ADD*AR1,4,A;
+X0*16
STLA,Y04;
=Y04
MACP*AR1+,COEFF3,A;
8(D*X0-C*X1+B*X2-A*X3+A*X4-B*X5
SFTAA,4;
+C*X6-D*X7)
+4*ROUND1
STHA,2,Y05;
=Y05
(ROUND1)/16
MAC*AR1-0,A;
+F_P6*X7
-F_P6*X4
-F_P6*X3
MAC*AR1+,A;
+F_P6*X0
-E_P6*X1
+E_P6*X2
+E_P6*X5
-E_P6*X6
STHA,6,Y06;
=Y06
RPTZA,#7
MACP*AR1-,COEF_F4,A;
64(D*X0-C*X1+B*X2-A*X3+A*X4-B*X5
+C*X6-D*X7)
MAR*AR1+
STHA,2,Y07;
=Y07
MAR*+AR1(8);
SetAR1topointtothenextset
of8inputs
以下省略7段......
DCT3NOP
**PLACEFDCTCOEFFICIENTSINFILEPOINTEDBYPA2
.IFMODE=1
AR0=#ofoutputs-1
STM#Z00,AR1;
AR1=addroffirstoutput
BEG1PORTW*AR1+,#PA2BIS;
Sendoutputvalue
BANZBEG1,*AR0-;
Repeataboveprocess(64x)
.ENDIF
EXITNOP
BSTART;
Gotostartofprogram.
Grabanother64pixels
COEF_F1.WORD-22725,-19266,-12873,-4520,4520,12873,19266,22725
COEFF2.WORD19266,-4520,-22725,-12873,12873,22725,4520,-19266
COEFF3.WORD12873,-22725,4520,19266,-19266,-4520,22725,-12873
COEF_F4.WORD-4520,12873,-19266,22725,-22725,19266,-12873,4520
*with:
A=cos(?
16)*?
*16384=22725
*B=cos(3?
*16384=19266
*C=cos(5?
*16384=12873
*D=cos(7?
*16384=4520
*E=cos(?
8)*?
*16384=21407
*F=cos(3?
*16384=8867
.END
链接文件:
-mfdct.map
-ofdct.out
-eentry
fdct.obj
MEMORY
{
PAGE0:
OCDARAM1:
origin=00080hlength=00880h/*on-chipDARAM*/
OCDARAM2:
origin=00900hlength=00300h
OCDARAM4:
origin=00C00hlength=00400h
OCDARAM5:
origin=01000hlength=00400h
EXTERNAL:
origin=01400hlength=0EB80h
INTRVECS:
origin=0FF80hlength=00079h
PAGE1:
MMREGS:
origin=00000hlength=00060h
SPRAM:
origin=00060hlength=00020h
origin=00080hlength=00400h/*on-chipDARAM*/
origin=00480hlength=0077Fh
origin=01400hlength=0EC00h
}
SECTIONS
{
INIT>
OCDARAM1PAGE0
FDCT>
.bss>
OCDARAM4PAGE1
八、仿真调试及性能分析与实验
1、开电,运行CCS软件,打开项目文件fdct.prj,编译运行并下载。
2、设置断点,再点击“运行”按钮,如下图所示。
这里的相关算法是在程序中编写的。
3.Build程序并run程序
4、导入.OUT文件:
5、点击View->
Graph->
Time/Frquence打开图形属性对话框,如下设置。
7、点击“OK”后,可以看到如下波形。
九、实习结论
本次实验通过编制DSP程序实现离散余弦变换,仿真出了输入和输出特性曲线。
很好的实现了DCT,以及FDCT。
十、实习总结
心得体会
在本周的实习中,我们通过不断的查找资料和反复研究运行CCS软件,编了一个实现离散余弦变换的程序。
本周的实习是为培养我们的专业技术而开设的专业综合实习课,目的是让我们熟悉和掌握近代信号处理的基本专业知识及实验方法,验证信号处理的基本理论及应用技术,掌握专业实验中常用的仪器设备和开发工具,通过一周的设计实践培养我们综合利用所学知识进行信号处理的能力,为今后的工作学习打下坚实的基础。
通过本周的实习,使我更加了解和认识DSP在实践当中的应用,意识到了它的重要性和可实用性。
并且同过这次的实习我们还复习了C语言和汇编语言相结合的应用技术。
现在是高科技发展的时代,DSP的应用领域十分广泛,因此我们一定要学好DSP技术。
十一、参考文献:
1.算法设计与系统方案.国防工业出版社.李枫潘娜编著2004.7
2.DSP实用技术.西安电子科技大学出版社.苏涛.卢光跃等编著2002.6
3.TMS320C54XDSP实验指导书邹彦董胜等编著2006.8
4.DSP控制工程实践技术付家才编著2005.6
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 离散 余弦 变换 DCT DSP 程序设计 实现
![提示](https://static.bdocx.com/images/bang_tan.gif)