欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    离散余弦变换(DCT)的DSP程序设计与实现(11页).doc

    • 资源ID:37309373       资源大小:261KB        全文页数:11页
    • 资源格式: DOC        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    离散余弦变换(DCT)的DSP程序设计与实现(11页).doc

    -离散余弦变换(DCT)的DSP程序设计与实现-第 9 页DSP课程设计论文题 目 离散余弦变换(DCT)的DSP实现 专 业 电气工程及其自动化 姓 名 陈梦泽 班 级 11东电气 学 号 11811527 执行学期 2014-2015 离散余弦变换(DCT)的DSP实现一、实验目的 1. 掌握离散余弦变换的概念和实现方法; 2. 掌握用 C 语言或汇编语言编写 DSP 程序的方法; 3. 熟悉DCT原理;二、实验设备 1. 一台装有 CCS 软件的计算机; 2. DSP 实验箱的TMS320C5410 主控板; 3. DSP 硬件仿真器;三、实验原理论述 1、原理 离散余弦变换(Discrete Cosine Transform,简称DCT变换)是一种与傅立叶变换紧密相关的数学运算。在傅立叶级数展开式中,如果被展开的函数是实偶函数,那么其傅立叶级数中只包含余弦项,再将其离散化可导出余弦变换,因此称之为离散余弦变换。对于给定的实际数据序列x(0),X(1) ,x(2). X( N-1 )的DCT(FDCT)算法如下:(1)其中:(2)二维离散余弦变换(FDCT):(3)其逆运算是:(4)其中 N= 8 为 8x8 DCT. 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 .def entry .sect "INIT"* Initialiseentry NOP NOP SSBX SXM ; set sign extension mode SSBX OVM ; enable saturation LD #0, DP ; set data page STM 0FFE0h, PMST ; Init PMST reg. RSBX FRCT .include "fdct_dat.inc" ; FDCT data storage declarationMODE .SET 1 ; MODE=1 TEST ON SIMULATORPAGE0 .SET 0PAGE4 .SET 4PAGE24 .SET 24dPAGE25 .SET 25dB0 .SET 0200hB1 .SET 0300hB2 .SET 060hPA1BIS .SET 1PA2BIS .SET 2PA3BIS .SET 3PA4BIS .SET 4PA5BIS .SET 5PA6BIS .SET 6* Initialization of the registers .sect"FDCT"INIT LD #PAGE24, DP ST #21407, E_P6 ST #8867, F_P6 ST #2000H, ROUND1TBL: LD #PAGE25, DP ST #21407, E_P7 ST #8867, F_P7 ST #4000H, ROUND2 ST #40H, ROUND3START* IF MODE = SIMULATOR.IF MODE=1 STM #63, AR0 ; AR0= # of inputs to be taken - 1 STM #X, AR1 ; AR1= address of first inputBEG PORTR #PA1BIS, *AR1+ ; Read and store to addr(AR1) BANZ BEG, *AR0- ; Repeat above code 64 times ; till all 64 pixels are read.ENDIF STM #3, AR0 STM #X, AR1 ; Reset AR1 to first input STM #Y00, AR2 ; Set AR2 to first Y blockDCT1 NOP NOP LD #PAGE24, DP LD *AR1+, 4, A ; + (16)*(X0) ADD *AR1+, 4, A ; + (16)*(X1) ADD *AR1+, 4, A ; + (16)*(X2) ADD *AR1+, 4, A ; + (16)*(X3) ADD *AR1+, 4, A ; + (16)*(X4) ADD *AR1+, 4, A ; + (16)*(X5) ADD *AR1+, 4, A ; + (16)*(X6) ADD *AR1, 4,A ; + (16)*(X7) STL A, Y00 ; = Y00 RPTZ A, #7 MACP *AR1-, COEF_F1, A SFTA A, 4 MAR *AR1+ ; (64)A*X0+B*X1+C*X2-D*X3-D*X4 ADD ROUND1, A ; -C*X5-B*X6-A*X7 + 4*ROUND1 STH A, 2, Y01 ; = Y01 LD ROUND1, -4, A ; (ROUND1)/16 LD E_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 LD F_P6, TMAC *AR1-, A ; + X6*F_P6 MAS *AR1-0, A ; - X5*F_P6 MAS *AR1-, A ; - X2*F_P6 MAC *AR1-, A ; + X1*F_P6 STH A, 6, Y02 ; Multiply prev summation by 16 ; = Y02 RPTZ A, #7 MACP *AR1+, COEFF2, A ; 64(B*X0-D*X1-A*X2-C*X3+C*X4+A*X5 SFTA A, 4 MAR *AR1- ADD ROUND1, A ; +D*X6-B*X7) + 4*ROUND1 STH A, 2, Y03 ; = Y03 LD *AR1-, 4, A ; X7*16 SUB *AR1-, 4, A ; - X6*16 SUB *AR1-, 4, A ; - X5*16 ADD *AR1-, 4, A ; + X4*16 ADD *AR1-, 4, A ; + X3*16 SUB *AR1-, 4, A ; - X2*16 SUB *AR1-, 4, A ; - X1*16 ADD *AR1, 4, A ; + X0*16 STL A, Y04 ; = Y04 RPTZ A, #7 MACP *AR1+, COEFF3, A ; 8(D*X0-C*X1+B*X2-A*X3+A*X4-B*X5 SFTA A, 4 ; +C*X6-D*X7) MAR *AR1- ADD ROUND1, A ; + 4*ROUND1 STH A, 2, Y05 ; = Y05 LD ROUND1, -4, A ; (ROUND1)/16 LD F_P6, T MAC *AR1-0, A ; + F_P6*X7 MAS *AR1-, A ; - F_P6*X4 MAS *AR1-0, A ; - F_P6*X3 MAC *AR1+, A ; + F_P6*X0 LD E_P6, T MAS *AR1+, A ; - E_P6*X1 MAC *AR1+0, A ; + E_P6*X2 MAC *AR1+, A ; + E_P6*X5 MAS *AR1+, A ; - E_P6*X6 STH A, 6, Y06 ; Multiply prev summation by 16 ; = Y06 RPTZ A, #7 MACP *AR1-, COEF_F4, A ; 64(D*X0-C*X1+B*X2-A*X3+A*X4-B*X5 SFTA A, 4 ; +C*X6-D*X7) MAR *AR1+ ADD ROUND1, A ; + 4*ROUND1 STH A, 2, Y07 ; = Y07 MAR *+AR1(8) ; Set AR1 to point to the next set ; of 8 inputsDCT3 NOP NOP* PLACE FDCT COEFFICIENTS IN FILE POINTED BY PA2 .IF MODE=1 STM #63, AR0 ; AR0= # of outputs - 1 STM #Z00, AR1 ; AR1= addr of first outputBEG1 PORTW *AR1+, #PA2BIS ; Send output value BANZ BEG1, *AR0- ; Repeat above process (64x).ENDIFEXITNOP B START ; Go to start of program. ; Grab another 64 pixelsCOEF_F1 .WORD -22725,-19266,-12873,-4520,4520,12873,19266,22725COEFF2 .WORD 19266,-4520,-22725,-12873,12873,22725,4520,-19266COEFF3 .WORD 12873,-22725,4520,19266,-19266,-4520,22725,-12873COEF_F4 .WORD -4520,12873,-19266,22725,-22725,19266,-12873,4520* with: A = cos(?16)*?*16384 = 22725* B = cos(3?16)*?*16384 = 19266* C = cos(5?16)*?*16384 = 12873* D = cos(7?16)*?*16384 = 4520* E = cos(?8)*?*16384 = 21407* F = cos(3?8)*?*16384 = 8867.END链接文件:-e entryMEMORY PAGE 0: OCDARAM1: origin = 00080h length = 00880h /* on-chip DARAM */ OCDARAM2: origin = 00900h length = 00300h OCDARAM4: origin = 00C00h length = 00400h OCDARAM5: origin = 01000h length = 00400h EXTERNAL: origin = 01400h length = 0EB80h INTRVECS: origin = 0FF80h length = 00079h PAGE 1: MMREGS: origin = 00000h length = 00060h SPRAM: origin = 00060h length = 00020h OCDARAM1: origin = 00080h length = 00400h /* on-chip DARAM */ OCDARAM2: origin = 00480h length = 0077Fh OCDARAM4: origin = 00C00h length = 00400h OCDARAM5: origin = 01000h length = 00400h EXTERNAL: origin = 01400h length = 0EC00hSECTIONS INIT > OCDARAM1 PAGE 0 FDCT > OCDARAM1 PAGE 0 .bss > OCDARAM4 PAGE 1七、仿真调试及性能分析与实验1.开电,运行CCS软件,打开项目文件fdct.prj,编译运行并下载。2.设置断点,再点击“运行”按钮,如下图所示。这里的相关算法是在程序中编写的。3Build 程序 并 run 程序4、导入 .OUT 文件:5、点击View>Graph>Time/Frquence打开图形属性对话框,如下设置。1、 点击“OK”后,可以看到如下波形。八、心得体会: 在本次实验中,经过老师的悉心指导和认真教学,通过不断的查找资料和反复研究与课题有关的CCS软件,编写了一个实现离散余弦变换的程序。本次的实验是为培养我们的专业技术而开设的专业综合实验课,目的是让我们熟悉和掌握专业实验中常用的仪器设备和开发工具,通过为期几周的学习和实验实践培养我们综合利用所学知识进行信号处理的能力,为今后的工作学习打下坚实的基础。通过本次的实验,使我更加了解和认识DSP在实践当中的应用,意识到了它的重要性和可实用性。并且让我激发了学习好DSP技术的决心。通过这次的实验我们还复习了C语言和汇编语言相结合的应用技术。现在是高科技发展的时代,DSP的应用领域十分广泛,因此我们一定要学好DSP技术。对之后的发展很有帮助,让我倍感兴奋。

    注意事项

    本文(离散余弦变换(DCT)的DSP程序设计与实现(11页).doc)为本站会员(1595****071)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开