1 实 验 报 告 实验课程: DSP原理及应用 学生姓名: 学 号: 专业班级:
2012年 5月 25日 2
目录 实验一 定点除法运算 实验二 FIR滤波器 实验三 FFT算法 实验四 卷积计算 实验五 数码管显示 实验六 语音录放 3
实验一 定点除法运算 一、实验目的 1、熟悉C54指令系统,掌握常用汇编指令,学会设计程序和算法的技巧。 2、学习用指令实现除法运算。
二、实验设备
计算机; DSP 硬件仿真器;DSP 实验开发平台。 三、实验原理 由内置的硬件模块支持,数字信号处理器可以高速的完成加法和乘法运算。但 TMS320 系列 DSP不提供除法指令,为实现除法运算,需要编写除法子程序来实现。二进制 除法是乘法的逆 运算。乘法包括一系列的移位和加法,而除法可分解为一系列的减法和移位。本 实验要求编写 一个16 位的定点除法子程序。 1.除法运算的过程 设累加器为 8 位,且除法运算为10 除以3,除的过程包括与除数有关的除数逐 步移位,然 后进行减法运算,若所得商为正,则在商中置1,否则该位商为0 例如:4 位除法示例: (1)数的最低有效位对齐被除数的最高有效位 00001010 - 00011000 11110010 (2)由于减法结果为负,丢弃减法结果,将被除数左移一位再减 00010100 - 00011000 11111000 (3)结果仍为负,丢弃减法结果,将被除数左移一位再减 00101000 - 00011000 00010000 (4)结果为正,将减法结果左移一位后把商置1,做最后一次减 00100001 - 00011000 00001001 (5)结果为正,将减法结果左移一位加1 得最后结果,高4 位是余数,低4 位商: 00010011 2.除法运算的实现 为了尽量提高除法运算的效率,’C54x 系列提供了条件减指令SUBC 来完成除法操作。
四、实验步骤 1.用Simulator 方式启动Code Composer。 2 . 执行Project New 建立新的项目, 输入chuf作为项目的名称, 将程序定 位在 D:\ti\myprojects\chuf目录。 3.执行File New Source File 建立新的程序文件,为创建新的程序文件命名为 chuf.asm 并 保存;执行Project Add Files to Project,把chuf.asm 加入项目中。 4. 执行File New Source File 建立新的文件并保存为chuf.cmd; 执行Project Add Files to Project,把chuf.cmd 加入项目中。 5.编辑chuf.asm 加入如下内容: ;*** 编制计算除法运算的程序段。其中|被除数|<|除数|,商为小数*** .title "chuf.asm" .mmregs .def start,_c_int00 4
.bss num,1 .bss den,1 .bss quot,1
.data table .word 4*32768/10 ;0.4 .word -8*32768/10 ;-0.8
.text _c_int00 b start nop nop start: STM #num,AR1 RPT #1 MVPD table,*AR1+ ;传送2个数据至分子、分母单元 STM #den,AR1 LD *AR1-,16,A ;将分母移到累加器A(31-16) MPYA *AR1+ ;(num)*(A(32-16))->B,获取商的符号 ;(在累加器B中) ABS A ;分母取绝对值 STH A,*AR1- ;分母绝对值存回原处 LD *AR1+,16,A ;分子->A(32-16) ABS A ;分子取绝对值 RPT #14 ;15次减法循环,完成除法 SUBC *AR1,A XC 1,BLT ;如果B〈0(商是负数)则需要变号 NEG A STL A,*(quot) ;保存商 .END 6、编译chuf.cmd加入如下内容: /*chuf.cmd*/ chuf.obj -m chuf.map -o chuf.out
MEMORY { PAGE 0: ROM :origin=0080h,length=1000h ROM :origin=0060h,length=10h PAGE 1: OTHER :origin=0400h,length=40h } 5
SECTIONS { .text: {}>ROM PAGE 0 .data : {}>ROM PAGE 0 .stack : {}>OTHER PAGE 1 .bss : {}>OTHER PAGE 1 } 7、实验结果:
五、实验小结 通过几次的课程实验,我学到了不少新的知识,只有自己真正做过才会知道和了解。结合课程中所学的理论知识,和参考资料做课程实验。达到学有所用的目的。学会查阅相关手册与资料,通过查阅手册和文献资料,并掌握合理选用 的原则,培养独立分析与解决问题的能力。 这次设计我们学到了很多东西,熟悉 CCS5000 软件的使用,还加深了对知识 的理解和掌握。作为一名大三的学生,我觉得能做类似的课程设计是十分有意义的。 6
实验二 FIR滤波器 一、 实验目的 1、熟悉数字滤波的基本原理和实现方法; 2、熟悉线性相位FIR 数字滤波器特性; 3、通过观察对实际信号的滤波作用,获得对数字滤波的感性认识。
二、 实验设备 计算机; DSP 硬件仿真器;DSP 实验开发平台。
三、 实验硬件设置 1、将实验箱右侧的船型开关往”I”方向打开电源; 2、将主板的开关S33(主板右上角)拨通+/-5V 电源; 3、实验开始前先按RST 硬件复位(实验中不要再按复位键)。
四、 实验步骤 1、启动CCS编写实验程序代码; 2、打开Projects ,选择MYprojects →fir→fir.pjt; 3、打开程序后.进行运行和编译;编辑fir.asm 加入如下内容: ;一个FIR滤波器源程序 fir.asm .mmregs .global start .def start,_c_int00
INDEX .set 1 KS .set 256 ;模拟输入数据缓冲区大小
N .set 17 COFF_FIR .sect "COFF_FIR" ;FIR滤波器系数 .word 0 .word 158 .word 264 .word -290 .word -1406 .word -951 .word 3187 .word 9287 .word 12272 .word 9287 .word 3187 .word -951 7
.word -1406 .word -290 .word 260 .word 158 .word 0 .data INPUT .copy "firin.inc" ;模拟输入在数据存储区0x2400 OUTPUT .space 1024 ;输出数据在数据区0x2500 ;FIR_DP .usect "FIR_VARS",0 ;D_FIN .usect "FIR_VARS",1 ;D_FOUT .usect "FIR_VARS",1 COFFTAB .usect "FIR_COFF",N DATABUF .usect "FIR_BFR",N BOS .usect "STACK",0Fh TOS .usect "STACK",1
.text .asg AR0,INDEX_P .asg AR4,DATA_P ;输入数据x(n)循环缓冲区指针 .asg AR5,COFF_P ;FIR系数表指针 .asg AR6,INBUF_P ;模拟输入数据指针 .asg AR7,OUTBUF_P;FIR滤波器输出数据指针 _c_int00 b start nop nop start: ssbx FRCT STM #COFFTAB,COFF_P RPT #N-1 ;将FIR系数从程序存储器移动 MVPD #COFF_FIR,*COFF_P+ ;到数据存储器
STM #INDEX,INDEX_P STM #DATABUF,DATA_P RPTZ A,#N-1 STL A,*DATA_P+ ;将数据循环缓冲区清零
STM #(DATABUF+N-1),DATA_P ;数据缓冲区指针指向x[n-(N-1)] STM #COFFTAB,COFF_P ; FIR_TASK: STM #INPUT,INBUF_P STM #OUTPUT,OUTBUF_P STM #KS-1,BRC RPTBD LOOP-1