




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 “DSP原理与应用”实验报告“DSP原理与应用”实验报告学院:电气与新能源学院学号:2009111222姓名:梅亚敏实验一CCS集成开发环境的熟悉11运行程序,查看并记录相关结果。点击菜单Debug-Run或按功能键F5运行程序。查看数据的保存情况。点击菜单View-Memory,会出现图1-6 (a)所示的“Memory Window Options”对话框,按图1-6 (a)设置Address=0x1000(为什么要设置成Address=0x1000?),Page=Data。点击OK按钮,观察出现的如图1-6 (b)所示的“Memory ”对话框,这个对话框显示的是变量在数据存储器中的地
2、址与值。请思考:为什么.bss的地址是0x1000,变量y的地址是0x1005,变量x的地址又是多少呢? 图1-6 (a) ( b) 答:将地址设置为0x1000是由于在编译命令文件中SPRAM:org=1000H len=1000H /*定义SPRAM区,起始地址1000H,长度1000H*/和.bss :SPRAM PAGE 1/*将.text段映射或定位到PAGE1的SPRAM区*/将.bss定位到PAGE1的SPRAM区,因为SPRAM区的起始地址是Ox1000,所以.bss的地址是0x1000因为x数组的长度为5,所以y的地址为Ox1000+Ox0005=Ox1005.变量x的地址为
3、Ox1000到Ox1004查看程序的保存情况。点击菜单ViewMemory,按图1-7 (a)设置Address=0x0090(为什么要设置成Address=0x0090?),Page=Program。点击OK按钮,观察出现的如图1-7 (b)所示的“Memory ”对话框,这个对话框显示的是可执行程序在程序存储器中的地址与指令代码。请思考:为什么.text段的地址是0x0090?标号end的地址是0x009C?标号SUM的地址是0x009E?标号loop的地址是0x00A2?.data段的地址是0x00A8? 图1-7 (a) (b)答:因为在example2.cmd中,将程序存储区的起始地
4、址设置为Ox0090,所以Address要设置成Address=Ox0090EPROM:org=0090H len=0F70H/*定义EPROM区,起始地址0090H,长度0F70H*/.text :EPROM PAGE 0/*将.text段映射或定位到PAGE0的EPROM区*由于程序占程序存储器空间,所以,.end的位置在0x009C,后面的位置依次类推。vectors.obj/*声明要链接的文件-中断向量表文件的目标文件*/ example1.obj/*声明要链接的文件-主程序文件的目标文件*/ -o example1.out/*声明链接产生的可执行文件名称,默认为a.out */ -m
5、 example1.map/*声明链接产生的存储器映射文件*/ -estart/*声明主程序入口*/MEMORY /*关键字加一对,存储器配置*/PAGE 0: /*程序存储区*/ EPROM:org=00A0H len=0F70H/*定义EPROM区,起始地址0090H,长度0F70H*/ VECS: org=0080H len=0010H/*定义VECS区,起始地址0080H,长度0010H*/PAGE 1: /*数据存储区*/ SPRAM:org=1010H len=1000H /*定义SPRAM区,起始地址1000H,长度1000H*/ DARAM:org=2010H len=2000
6、H /*定义DARAM区,起始地址2000H,长度2000H*/SECTIONS /*关键字加一对,定位段*/.text :EPROM PAGE 0/*将.text段映射或定位到PAGE0的EPROM区*/.data :EPROM PAGE 0/*将.text段映射或定位到PAGE0的EPROM区*/.bss :SPRAM PAGE 1/*将.text段映射或定位到PAGE1的SPRAM区*/STACK :DARAM PAGE 1/*将.text段映射或定位到PAGE1的DARAM区*/.vectors :VECS PAGE 0 /*将.vectors段映射或定位到PAGE0的VECS区*/1
7、2改变主程序example2.asm中x1x5的值(自定),重新执行911。记录x1x5、y的值并验算。答: .title example1.asm ;伪指令。用于格式化输出清单文件,声明在每页的顶部打印文件标题 .mmregs ;伪指令。声明CPU寄存器名称STACK .usect STACK,10H ;伪指令。自定义未初始化段STACK及大小(10H个字),最左边的STACK是标号.bss x,5 ;伪指令。声明数组x,5个字.bss y,1 ;伪指令。声明变量y,1个字.def start ;伪指令。声明本文件中的标号start能被别的文件(程序)引用.data ;伪指令,指示下面的代码
8、为数据段,通常包含初始化的数据(常数)。 table: .word 1,2,3,4,5 ;伪指令。声明5个16位整数类型的常数。table是标号。.text ;伪指令,指示下面的代码为文本段,通常包含可执行的代码。 start:STM #0,SWWSR ; SWWSR=0,插入0个等待状态。start是标号。STM #STACK+10H,sp ;sp=#STACK+10H,设置堆栈指针指向堆栈段的底部STM #x,AR1 ;AR1=#x或AR1指向数组xRPT #4 ;下一条指令重复执行4+1=5次MVPD table,*AR1+ ;数据传送。程序存储器中的table数据表AR1+指向的数据存
9、储器LD #0,A;累加器A清零CALL SUM;调用求和子程序SUMend: B end ;无条件转移到标号end所在地方执行程序SUM: ;标号,指示求和子程序SUM从这里开始 STM #x,AR3;AR3指向数组xSTM #4,AR2;AR2=4loop: ADD *AR3+,A ;*AR3+AA,然后AR3= AR3+1。 loop是标号。BANZ loop,*AR2-;如果AR2的值不为0, AR2= AR2-1,跳转到loop处执行;否则执行下一条指令STL A,*(y) ; y=ALRET ;子程序返回.end ;伪指令。指示汇编结束实验二 算术运算与数据操作的汇编语言程序设计实
10、验6、编制程序,计算y= a1x1 + a2x2 + a10x10,其中数据均为小数(aixi的值自己定义 )。.titletest.asm.mmregsSTACK.usect STACK,10H.bssa,10.bssx,10.bssy,1.defstart.datatable: .word1*32768/10 ;0.1 .word2*32768/10 ;0.2 .word-3*32768/10 ;-0.3 .word4*32768/10 ;0.4 .word8*32768/10 ;0.8 .word6*32768/10 ;0.6 .word-4*32768/10 ;-0.4 .word-2
11、*32768/10 ;-0.2 .word1*32768/10 ;0.1 .word2*32768/10 ;0.2 .word-3*32768/10 ;-0.3 .word4*32768/10 ;0.4 .word8*32768/10 ;0.8 .word6*32768/10 ;0.6 .word-4*32768/10 ;-0.4 .word-2*32768/10 ;-0.2 .word1*32768/10 ;0.1 .word2*32768/10 ;0.2 .word-3*32768/10 ;-0.3 .word4*32768/10 ;0.4.textstart:SSBXFRCTSTM #a
12、,AR1RPT#19MVPDtable,*AR1+STM #x,AR2STM #a,AR3RPTZA,#9MAC *AR2+,*AR3+,ASTHA,*(y)end:Bend.end8、编写浮点乘法程序,计算x1x2x3 =0.2(-0.4) 0.25。注:(1)x1:被乘数, m1:被乘数的尾数 m2:乘数的尾数, x2:乘数, m3:乘数的尾数, x3:乘数 ep:乘积的指数, e1:被乘数的指数(2)mp:乘积的尾数, m1:被乘数的尾数, product:乘积, e2:乘数的指数,temp:暂存单元 .titlesy27.asm.mmregs.defstartSTACK .usectS
13、TACK,100.bssx1,1.bssx2,1.bss x3,1.bsse1,1.bssm1,1.bsse2,1.bssm2,1.bss e3,1.bss m3,1.bssep,1.bssmp,1.bssproduct,1.bsstemp,1.datatable: .word2*32768/10;0.2 .word-4*32768/10;-0.4 .word25*32768/100;0.25.textstart:STM #STACK+100,SP;设置堆栈指针 LD #x1, DP ;设置DP指针为x1所在页MVPD table,x1 ;将x1和x2和x3传送到数据存储器MVPDtable+
14、1,x2MVPDtable+2,x3LDx1,16,A ;将x1规格化为浮点数EXPASTT,e1;保存x1的指数NORMASTH A,m1;保存x1的尾数LDx2,16,A ;将x2规格化为浮点数EXPASTT,e2;保存x2的指数NORMASTHA,m2 ;保存x2的尾数 LDx3,16,A ;将x3规格化为浮点数EXPASTT,e3;保存x3的指数NORMASTHA,m3 ;保存x3的尾数CALLMULT;调用浮点乘法子程序end:BendMULT:SSBXFRCTSSBXSXMLDe1,A;指数相加ADD e2,AADD e3,ASTLA,ep;乘积指数-epLDm1,T;尾数相乘MP
15、Y m2,ASTL A,m1LD m1,TMPY m3,A;乘积尾数在累加器A中EXPA ;对尾数乘积规格化STT,temp ;规格化时产生的指数-tempNORMASTHA,mp;保存乘积尾数在mp中LDtemp,A;修正乘积指数ADD ep,A ;(ep)+(temp)-epSTLA,ep;保存乘积指数在ep中NEG A ;将浮点乘积转换成定点数STLA,temp ;乘积指数反号,并且加载到T寄存器LDtemp,T;再将尾数按T移位LDmp,16,ANORMASTHA,product;保存定点乘积RET.end实验三 信号发生器设计1设DSP的CPU主时钟频率为100MHz,指令周期为10
16、ns,请说明产生频率为100KHz的周期三角波信号时,应该如何修改主程序。答:2如果在查找表中放置正弦波一个周期内的360个离散值(在MATLAB中产生),请重写产生正弦波的主程序并仿真。main.asm .mmregs.def _c_int00.include c54.inc.ref c54initDA_ADDR .set 0x0002 ; 定义符号DA_ADDR表示D/A 端口地址.datasin_table: ;在这里放置一个周期的正弦波的360个离散值 .word 0,4,9,13,18,22,27,31 .word 35,40,44,49,53,57,62,66 .word 70,7
17、5,79,83,87,91,96,100 .word 104,108,112,116,120,124,128,131 .word 135,139,143,146,150,153,157,160 .word 164,167,171,174,177,180,183,186 .word 190,192,195,198,201,204,206,209 .word 211,214,216,219,221,223,225,227 .word 229,231,233,235,236,238,240,241 .word 243,244,245,246,247,248,249,250 .word 251,252
18、,253,253,254,254,254,255 .word 255,255,255,255,255,255,254,254 .word 254,253,253,252,251,250,249,248 .word 247,246,245,244,243,241,240,238 .word 236,235,233,231,229,227,225,223 .word 221,219,216,214,211,209,206,204 .word 201,198,195,192,190,186,183,180 .word 177,174,171,167,164,160,157,153 .word 150
19、,146,143,139,135,131,127,124 .word 120,116,112,108,104,100,96,91 .word 87,83,79,75,70,66,62,57 .word 53,49,44,40,35,31,27,22 .word 18,13,9,4,0,-4,-9,-13 .word -18,-22,-27,-31,-35,-40,-44,-49 .word -53,-57,-62,-66,-70,-75,-79,-83 .word -87,-91,-96,-100,-104,-108,-112,-116 .word -120,-124,-127,-131,-1
20、35,-139,-143,-146 .word -150,-153,-157,-160,-164,-167,-171,-174 .word -177,-180,-183,-186,-190,-192,-195,-198 .word -201,-204,-206,-209,-211,-214,-216,-219 .word -221,-223,-225,-227,-229,-231,-233,-235 .word -236,-238,-240,-241,-243,-244,-245,-246 .word -247,-248,-249,-250,-251,-252,-253,-253 .word
21、-254,-254,-254,-255,-255,-255,-255,-255 .word -255,-255,-254,-254,-254,-253,-253,-252 .word -251,-250,-249,-248,-247,-246,-245,-244 .word -243,-241,-240,-238,-236,-235,-233,-231 .word -229,-227,-225,-223,-221,-219,-216,-214 .word -211,-209,-206,-204,-201,-198,-195,-192 .word -190,-186,-183,-180,-177
22、,-174,-171,-167 .word -164,-160,-157,-153,-150,-146,-143,-139 .word -135,-131,-128,-124,-120,-116,-112,-108 .word -104,-100,-96,-91,-87,-83,-79,-75 .word -70,-66,-62,-57,-53,-49,-44,-40 .word -35,-31,-27,-22,-18,-13,-9,-4 .word -0,0,0,0,0,0,0,0 .bss DA_DATA,1 ;声明变量DA_DATA作D/A缓冲区 .bss DA_NUM,1 ; 声明变量
23、DA_NUM作D/A计数器 .sect progsys ;自定义初始化段progsys .align 0x10 ;调整SPC,下面的程序代码放置在存储器中时,起始地址对准16字的边界_c_int00: STM #0x0f80,SP ;设置堆栈指针 CALLc54init ;调整DSP初始化程序,硬件仿真时必须的部分LD #sin_table ,DP ;设置数据页指针,DP指向sin_table所在的数据存储器页LOOP: ;周期循环标号ST #0,DA_NUM ;计数变量清零STM #sin_table,AR1 ; AR1指向查找表首地址SINLOOP: ;一个周期内的D/A循环标号MVDK
24、*AR1+,DA_DATA ;读查找表中的值放入到数据缓冲区DA_DATA中,软件仿真时在此处设置断点PORTWDA_DATA,DA_ADDR ; 数据缓冲区DA_DATA中的值写到D/A端口,软件仿真时不起作用RPT#1000 ;下面的一条指令执行1001次NOP ;空操作,在这里起延时作用ADDM #1,DA_NUM ; DA_NUM循环计数CMPMDA_NUM,#359; DA_NUM与359比较 BC SINLOOP,NTC ;一个周期内的360个点还没D/A完继续 B LOOP ;一个周期内的360个点已经D/A完,进入周期循环 .end Memory.cmd/*-e _c_int0
25、0*/ -m sensor.map MEMORY PAGE 0: PROG: origin = 0x2000, len = 0x0f80 VECT: origin = 0x2f80, len = 0x80/*128word*/ PAGE 1: DRAM: origin = 0x3000, len = 0x200SECTIONS .progsys: load = PROG PAGE 0 .vectors: load = VECT PAGE 0 .data : load = DRAMPAGE 1align 16 .bss : load = DRAMPAGE 1实验四 IIR滤波器的DSP实现思考题
26、:对参考程序,编写实现四阶或更高阶数的低通、高通、带通、带阻IIR数字滤波器的DSP程序并仿真。提示:滤波器系数一般通过MATLAB仿真得到。4阶低通:.titleIIR.asm.mmregs.defstartx4 .usect x,1x3 .usect x,1x2.usectx,1x1.usectx,1x0.usectx,1COEF.usectCOEF,9indata.usectbuffer,1outdata.usectbuffer,1*PA0.set10*PA1.set1.datatable .word0 ;x(n-1).word 0 ;x(n-2).word 0;x(n-3).word
27、0;x(n-4).word 0 ;分子系数B3=0.word 15*32768/10000;B3=0.0015.word 78*32768/10000;分子系数B2=0.0078.word 25*32768/10000 ;分子系数B1=0.0025.word 0;分子系数B0=0.word 3783*32768/10000;分母系数A4=0.3783.word -6258*32768/10000 ;分母系数A3=-1.8776/3.word 88705*32768/100000 ;分母系数A2=3.5482/4.word -826775*32768/1000000;分母系数A1=-3.0372
28、/4.textstart:SSBXFRCTSTM#x4,AR1RPT#3MVPD #table,*AR1+STM#indata,AR5STM#outdata,AR2STM#COEF,AR1RPT#8MVPD #table+2,*AR1+STM#x2,AR3STM#COEF+9,AR4;AR4-A1MVMMAR4,AR1;保存地址值在AR1中STM#5,BK;设置循环缓冲区长度STM#-1,AR0;设置变址寻址步长IIR2:;PORTRPA1,*AR3;从PA1口输入数据x(n)MVDD*AR5,*AR3 ;在这里设置断点与探针LD*AR3+0%,16,A;计算反馈通道,A=x(n)MAC*AR
29、3,*AR4,A;A=x(n)+A1*x1MAC*AR3,*AR4,A;A=x(n)+2A1*x1MAC*AR3,*AR4,A;A=x(n)+3A1*x1 MAC*AR3+0%,*AR4-,A;A=x(n)+3*A1*x1+A1*x1MAC*AR3+0%,*AR4-,A ;A=x(n)+4*A1*x1+A2*x2MAC*AR3,*AR4,A;A=x(n)+4*A1*x1 +2*A2*x2MAC*AR3,*AR4,A;A=x(n)+4*A1*x1 +3*A2*x2 MAC*AR3+0%,*AR4-,A ;A=x(n)+4*A1*x1+4*A2*x2 MAC*AR3+0%,*AR4-,A;A=x(
30、n)+4*A1*x1+4*A2*x2+A3*x3 MAC*AR3,*AR4,A;A=x(n)+4*A1*x1+4*A2*x2+2*A3*x3 MAC*AR3+0%,*AR4-,A ;A=x(n)+4*A1*x1+4*A2*x2+3*A3*x3 MAC*AR3+0%,*AR4-,A ;A=x(n)+4*A1*x1+4*A2*x2+2*A3*x3+A4*x4STHA,*AR3;保存x0MPY*AR3+0%,*AR4-,A;计算前向通道,A=B0*x0MAC*AR3+0%,*AR4-,A;A=B0*x0+B1*x1MAC*AR3+0%,*AR4-,A;A=B0*x0+B1*x1+B2*x2MAC*A
31、R3,*AR4-,A;B=B0*x0+B1*x1+B2*x2+B3*x3=y(n)STHA,*AR3;保存y(n)MVMMAR1,AR4;AR4重新指向A1BDIIR2 ;循环;PORTW*AR3,PA0;向PA0口输出数据MVDD *AR3,*AR2 ;在这里设置断点与探针nop.end 5阶高通:.titleIIR.asm.mmregs.defstartx5 .usect x,1x4 .usect x,1x3 .usect x,1x2.usectx,1x1.usectx,1x0.usectx,1COEF.usectCOEF,11indata.usectbuffer,1outdata.use
32、ctbuffer,1*PA0.set10*PA1.set1.datatable .word0 ;x(n-1).word 0 ;x(n-2).word 0;x(n-3).word 0;x(n-4).word 0;x(n-5).word 0;分子系数B5=0.word 51*32768/10000 ;分子系数B4=0.0051.word 2057*32768/10000;B3=0.2057.word 9150*32768/10000;分子系数B2=0.9150.word 6305*32768/10000 ;分子系数B1=0.6305.word 0;分子系数B0=0.word 3*32768/100
33、00;分母系数A5=-0.0003.word 31*32768/10000;分母系数A4=0.0031.word -107*32768/10000 ;分母系数A3=-0.0107.word 1596*32768/10000 ;分母系数A2=0.1596.word 5694*32768/10000;分母系数A1=0.5694start:SSBXFRCTSTM#x5,AR1RPT#4MVPD #table,*AR1+STM#indata,AR5STM#outdata,AR2STM#COEF,AR1RPT#10MVPD #table+2,*AR1+STM#x2,AR3STM#COEF+11,AR4;
34、AR4-A1MVMMAR4,AR1;保存地址值在AR1中STM#6,BK;设置循环缓冲区长度STM#-1,AR0;设置变址寻址步长IIR2:;PORTRPA1,*AR3;从PA1口输入数据x(n)MVDD*AR5,*AR3 ;在这里设置断点与探针LD*AR3+0%,16,A;计算反馈通道,A=x(n) MAC*AR3+0%,*AR4-,A;A=x(n)+A1*x1MAC*AR3+0%,*AR4-,A ;A=x(n)+A1*x1+A2*x2 MAC*AR3+0%,*AR4-,A;A=x(n)+A1*x1+A2*x2+A3*x3 MAC*AR3+0%,*AR4-,A ;A=x(n)+4*A1*x+
35、2*x2+A3*x3+A4*x4 MAC*AR3+0%,*AR4-,A ;A=x(n)+4*A1*x+2*x2+A3*x3+A4*x4+A5*x5STHA,*AR3;保存x0MPY*AR3+0%,*AR4-,A;计算前向通道,A=B0*x0MAC*AR3+0%,*AR4-,A;A=B0*x0+B1*x1MAC*AR3+0%,*AR4-,A;A=B0*x0+B1*x1+B2*x2MAC*AR3+0%,*AR4-,A;A=B0*x0+B1*x1+B2*x2+B3*x3MAC*AR3+0%,*AR4-,A;A=B0*x0+B1*x1+B2*x2+B3*x3+B4*x4MAC*AR3,*AR4-,A;
36、B=B0*x0+B1*x1+B2*x2+B3*x3+B4*x4+B5*x5=y(n)STHA,*AR3;保存y(n)MVMMAR1,AR4;AR4重新指向A1BDIIR2 ;循环;PORTW*AR3,PA0;向PA0口输出数据MVDD *AR3,*AR2 ;在这里设置断点与探针nop.end 带阻:.titleIIR2.asm.mmregs.defstartx4.usectx,1x3.usectx,1x2.usectx,1x1.usectx,1x0.usectx,1COEF.usectCOEF,9indata.usectbuffer,1outdata.usectbuffer,1*PA0.set
37、10*PA1.set1.datatable .word0 .word 0 .word0 .word0 .word0 .word 8004*32768/10000 ;分子系数B4=0.8004.word -6475*32768/10000;分子系数B3/4=-0.6475.word 924*32768/1000 ;分子系数B2/4=0.924.word -6475*32768/10000;分子系数B1/4=-0.6475.word 8004*32768/10000 ;分子系数B0=0.8004.word -6411*32768/10000;分母系数A4=-0.6411.word 575*3276
38、8/1000 ;分母系数A3/4=0.575.word -914*32768/1000;分母系数A2/4=-0.914.word 7202*32768/10000 ;分母系数A1/4=0.7202.textstart:SSBXFRCTSTM#x4,AR1RPT#4MVPD#table,*AR1+STM#indata,AR5STM#outdata,AR2STM#COEF,AR1RPT#8MVPD#table+5,*AR1+STM#COEF+8,AR4;AR4-A1MVMMAR4,AR1;保存地址值在AR1中STM#5,BK;设置循环缓冲区长度STM#-1,AR0;设置变址寻址步长STM#x4,A
39、R3IIR2:;PORTRPA1,*AR3;从PA1口输入数据x(n)MVDD*AR5,*AR3 ;在这里设置断点与探针LD*AR3+0%,16,A;计算反馈通道,A=x(n)RPT #2MAC*AR3,*AR4,A;3*A1*x1 ?MAC*AR3+0%,*AR4-,A;A=x(n)+4*A1*x1RPT #2MAC*AR3,*AR4,A;3*A2*x2 ?MAC*AR3+0%,*AR4-,A;A=x(n)+4*A1*x1+4*A2*x2RPT #2MAC*AR3,*AR4,A;3*A3*x3 ?MAC*AR3+0%,*AR4-,A;A=x(n)+A1*x1+4*A2*x2+4*A3*x3M
40、AC*AR3+0%,*AR4-,A;A=x(n)+A1*x1+4*A2*x2+4*A3*x3+A4*x4STHA,*AR3;保存x0MPY*AR3+0%,*AR4-,A;计算前向通道,A=B0*x0RPT #2MAC*AR3,*AR4,A;3*B1*x1 ?MAC*AR3+0%,*AR4-,A;A=B0*x0+4*B1*x1RPT #2MAC*AR3,*AR4,A;3*B2*x2 ?MAC*AR3+0%,*AR4-,A;A=B0*x0+4*B1*x1+4*B2*x2RPT #2MAC*AR3,*AR4,A;3*B3*x3 ?MAC*AR3+0%,*AR4-,A;A=B0*x0+4*B1*x1+
41、4*B2*x2+4*B3*x3MAC*AR3,*AR4,A;B=A=B0*x0+B1*x1+B2*x2+B3*x3+B4*x4=y(n)STHA,*AR3;保存y(n)MVMMAR1,AR4;AR4重新指向A1BDIIR2 ;循环;PORTW*AR3,PA0;向PA0口输出数据MVDD *AR3,*AR2 ;在这里设置断点与探针nop.end 带通:.titleIIR2.asm.mmregs.defstartx4.usectx,1x3.usectx,1x2.usectx,1x1.usectx,1x0.usectx,1COEF.usectCOEF,9indata.usectbuffer,1out
42、data.usectbuffer,1*PA0.set10*PA1.set1.datatable .word0 .word 0 .word0 .word0 .word0 .word 201*32768/10000 ;分子系数B4=0.0201.word 0*32768/10000;分子系数B3=0.word -402*32768/10000 ;分子系数B2=-0.0402.word 0*32768/10000;分子系数B1=0.word 201*32768/10000 ;分子系数B0=0.0201.word -6411*32768/10000;分母系数A4=-0.6411.word 575*32
43、768/10000 ;分母系数A3/4=0.575.word -914*32768/1000;分母系数A2/4=-0.914.word 7202*32768/10000 ;分母系数A1=0.7202.textstart:SSBXFRCTSTM#x4,AR1RPT#4MVPD#table,*AR1+STM#indata,AR5STM#outdata,AR2STM#COEF,AR1RPT#8MVPD#table+5,*AR1+STM#COEF+8,AR4;AR4-A1MVMMAR4,AR1;保存地址值在AR1中STM#5,BK;设置循环缓冲区长度STM#-1,AR0;设置变址寻址步长STM#x4,
44、AR3IIR2:;PORTRPA1,*AR3;从PA1口输入数据x(n)MVDD*AR5,*AR3 ;在这里设置断点与探针LD*AR3+0%,16,A;计算反馈通道,A=x(n)MAC*AR3+0%,*AR4-,A;A=x(n)+A1*x1RPT #2MAC*AR3,*AR4,A;3*A2*x2 ?MAC*AR3+0%,*AR4-,A;A=x(n)+4*A1*x1+4*A2*x2RPT #2MAC*AR3,*AR4,A;3*A3*x3 ?MAC*AR3+0%,*AR4-,A;A=x(n)+A1*x1+4*A2*x2+4*A3*x3MAC*AR3+0%,*AR4-,A;A=x(n)+A1*x1+
45、4*A2*x2+4*A3*x3+A4*x4STHA,*AR3;保存x0MPY*AR3+0%,*AR4-,A;计算前向通道,A=B0*x0MAC*AR3+0%,*AR4-,A;A=B0*x0+B1*x1MAC*AR3+0%,*AR4-,A;A=B0*x0+B1*x1+B2*x2MAC*AR3+0%,*AR4-,A;A=B0*x0+B1*x1+B2*x2+B3*x3MAC*AR3,*AR4,A;B=A=B0*x0+B1*x1+B2*x2+B3*x3+B4*x4=y(n)STHA,*AR3;保存y(n)MVMMAR1,AR4;AR4重新指向A1BDIIR2 ;循环;PORTW*AR3,PA0;向PA
46、0口输出数据MVDD *AR3,*AR2 ;在这里设置断点与探针nop.end实验五 FIR滤波器的DSP实现三、思考题-对照参考程序,编写实现39阶低通、高通、带通、带阻FIR数字滤波器的DSP程序,并仿真。提示:滤波器系数一般通过MATLAB仿真得到。低通:.titlefir.asm .mmregs .defstart .bss y,1;保存滤波结果.bss indata,1 ;输入信号缓冲区(变量).bss outdata,1 ;输出信号缓冲区(变量)xn.usectxn,40 ;xnh .usecth,40 ;h;PA0.set0002H;D/A端口地址;PA1.set0008H;A/D端口地址 .datatable:.word -7,-22,-44,-74,-114,-157,-191,-202.word -169,-75,96,351,689,1097,1551,2017.word 2457,2831,3103,3247,3247,3103,2831,2457.word 2017,1551,1097,689,351,96,-75,-1
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 建筑工程劳务大清包合同
- 户外广告牌施工合同
- 影视制作公司与演员拍摄合同
- 乳胶漆工程施工合同
- 武汉纺织大学外经贸学院《西方舞蹈史与名作赏析》2023-2024学年第二学期期末试卷
- 西安科技大学高新学院《Vue应用开发》2023-2024学年第二学期期末试卷
- 烟台黄金职业学院《交通运输安全》2023-2024学年第二学期期末试卷
- 浙大宁波理工学院《汇编语言A》2023-2024学年第二学期期末试卷
- 鄂州职业大学《计算机辅助设计二维》2023-2024学年第二学期期末试卷
- 沪科版 信息技术 必修 3.2.2 信息作品的制作 教学设计
- 食品检验员聘用合同样本
- 六年级信息技术下册教学计划
- 2025年九年级数学中考复习计划
- 2023年长沙自贸投资发展集团有限公司招聘笔试真题
- 《物料摆放规范》课件
- 2024年资助政策主题班会课件
- 《烟花效果及制作》课件
- 2024江苏太仓市城市建设投资集团限公司招聘易考易错模拟试题(共500题)试卷后附参考答案
- 2024年全新统计法培训课件:普法教育新方向
- 保育教育评估指南
- 现代康复治疗腕管综合症
评论
0/150
提交评论