DSP原理课练习题通信参考答案.docx

上传人:夺命阿水 文档编号:990313 上传时间:2024-02-22 格式:DOCX 页数:17 大小:55.63KB
返回 下载 相关 举报
DSP原理课练习题通信参考答案.docx_第1页
第1页 / 共17页
DSP原理课练习题通信参考答案.docx_第2页
第2页 / 共17页
DSP原理课练习题通信参考答案.docx_第3页
第3页 / 共17页
DSP原理课练习题通信参考答案.docx_第4页
第4页 / 共17页
DSP原理课练习题通信参考答案.docx_第5页
第5页 / 共17页
点击查看更多>>
资源描述

《DSP原理课练习题通信参考答案.docx》由会员分享,可在线阅读,更多相关《DSP原理课练习题通信参考答案.docx(17页珍藏版)》请在课桌文档上搜索。

1、DSP原理与应用练习题参考答案24学时版本用于2010级通信工程1.在16位定点DSP中,一个16位二进制数在Q15表示法下的含义是第15位为符号位,第140位为小数位;在Q12表示法下的含义是第15位为符号位,第1412位为整数位,第110位为小数位:在Qll表示法下的含义是第15位为符号位,第1413位为整数位,第100位为小数位。由此类推。试写出下面问题的答案:根据教材P7的公式(1)16位二进制数IOAAH在Q15表示法下的十进制数值是多少?在Qll表示法下的十进制数值是多少?Q15表示法下的十进制数值是4266/32768=0.13018798828125Qll表示法下的十进制数值是

2、4266/2048=2.083007812516位二进制数C650H在Q15表示法下的十进制数值是多少?在Q12表示法下的十进制数值是多少?QI5表示法下的十进制数值是-14768/32768=-0.45068359375Q12表示法下的十进制数值是-14768/4096=-3.60546875十进制正数0.625在Q15表示法下的二进制数是多少?在QIl表示方法下的二进制数是多少?Q15表示法下的二进制数是0.625x32768=500OHQll表示法下的二进制数是0.625x2048=050OH(4)十进制负数-6.375在Q12表示法下的二进制数是多少?在QIl表示方法下的二进制数是多少

3、?-6.375x4096=-6600H=9A00H6375x2048=-3300H=CDooH2.在C54xDSP的C语言开发环境中,数据类型与通常的C语言开发环境的数据类型不同,主要数据类型如下表所示:数据类型位长char,unsignedchar16short,unsignedshort,signedshort16int,unsignedint,signedint16long,unsignedlong,signedlong32float32double32现在利用一个15阶Hamming低通滤波器对16位音频信号进行FlR滤波。在C54xDSP和CCS2.2上的C语言程序如下:constd

4、oublecoef15=0,00482584,0.00804504,-0.00885584,-0.04291741,-0.02903702,0.09725365,0.28342322,0.37452503,0.28342322,0.09725365,-0.02903702,-0.04291741,-0.00885584,0.00804504,0.00482584);voidfir(int*x,int*y)(inti,j;for(i=0;i1024;i+)(doubleaccumulator=0.0;for(j=OJ15;j+)(accumulator+=xi-j*coefj;)yi=(int)

5、accumulator;)以上表达式中,x,y分别是低通滤波输入、输出的16位整型数组变量。现在要求把以上过程优化为在C54x平台上运行的精度最高、执行效率最高的16位定点运算形式。试写出在C54xDSP和CCS2.2环境下完成16位相乘和32位累加的定点运算的C程序。第一步:把滤波器系数转化为Q15定点数第二步:把乘累加转化为整数乘法,Q15乘以整数的小数点位置在第14位和第15位之间,累加结果为32位整数,其中最高两位为符号位,接着15位为整数,低15位为小数第三步:舍去低15位小数,取一位符号位和15位整数位作为滤波输出结果constintcoef15=158,264,-290,-140

6、6,-951,3187,9287,12272,9287,3187,-951,-1406,-290,264158;voidfir(int*x,int*y)(inti,j;for(i=0;i1024;i+)(longaccumulator=0;ford=0J15);)3.解决图像编码中常见的8x8离散余弦变换在VC5402DSP上定点运算问题。JT用C语言编写VC5402上用定点运算实现153xcos-+221xcos的程序,并且把最后结果存放48到16位整型变量i中。数据类型见前面题3的表格。COSq的Q15定点数是23170,5A82HCOS(的QI5定点数是30274,7642Hconsti

7、ntx2=153,221);constinty2=23170,30274);longa;intr;a=x0*y0+xl*y1;r=(int)(a15);或者C程序也可写成:longa;intr;a=153*23170221*30274;r=(int)(a15);用C54x汇编指令写出用定点运算实现153XCoSX+221XCoSX的代码,并且把最后结果转换为4816位整数存放到1102H的地址中。IoOOH存放153,IoolH存放2211002H存放23170,1003H存放30274SSBXFRCTSTM#1000H,AR2STM#1002H,AR3STM#11O2H,AR1RPTZA,#

8、1MAC*AR2+,*AR3+,ASTHA,*AR1现有一个8位无符号字符数216,对其执行浮点运算216XCOSXCOS。在VC5402上的汇编指48令代码段如下:SSBXFRCTMPY*(1000H),#216,AMPYA*(1001H)STHB,*(1002H)运算前数据页IOooH和IOolH的地址存放的数据是多少?运算后数据页1002H的地址存放的结果是多少?用CCS可以算出140,与笔算一致笔算方法:216*23170=5004720,取1位符号和15位得152,乘以30274后再取1位符号和15位得140运算前数据页IoOoH的地址存放的数据是CoSXX32768=23170=5

9、A82H4运算前数据页100IH的地址存放的数据是CoSxX32768=30274=7642H8运算后数据页1002H的地址存放的结果是8CH=140(4)上面的运算精度偏低。如何在中插入移位指令提高运算精度?写出完整的指令代码。在第一次乘法后果把A左移8位,接着在第二次乘法后右移8位SSBXFRCTMPY*(1000H),#216,ASFTAA,#8MPYA*(1001H)SFTAB,#-8STHB,*(1002H)这样可得141在以上的基础上简述如何在VC5402上使用MAC指令通过双重循环嵌套的16位定点乘累加运算求出一个图像数据的8x8离散余弦变换系数?忽略常数项的8x8离散余弦变换为

10、:F(u,v)=ZZf(x,y)cosVECSPAGE0*interruptvectortable*/.text:()PROGPAGE0*programcode*/.data:)PROGPAGE0*initializeddata*/.coeffs:PROGPAGE0*initializedparameters*/.stack:()DAT1PAGE1*softwarestacksection*/.variable:)DAT2PAGEI*uninitializedvarsforDSP&AIC10*/.bss:DA2PAGE1*uninitializedvarsforapplications*/)于

11、是流波数据缓冲区FIR_DATA和滤波系数缓冲区FIR_COEF都在片外SRAM中。现在为了提高执行效率尤其在汇编函数中使用双操作数寻址,需要令滤波数据缓冲区FIR_DATA和滤波系数缓冲区FIR_COEF在片内DARAM中。在上面的C语言程序fir.c和相应的链接命令文件fir.cmd中需要做出哪些改动?写出所有改动的地方。fir.cmd文件:SECTIONS(.internal:DATlPAGE1fir.c文件:#pragmaDATA_SECTION(fir_data,.internal);#pragmaDATA_SECTION(fir_coef5.internal);9.使用VC5402

12、芯片对一无限长的16位整型音频信号序列执行43阶Hamming低通滤波。每生成一个输出值,线性缓冲区法需要执行43次移动,而循环缓冲区法不需要这样的43次移动,省略43次数据搬移操作,执行效率更高。汇编代码如下:FIR_FILTERING:STM#FIRDATAPTR+FILTERLEN-1.STM#FlRCoEFPTR,STM#SIGNAL_LEN-1,AR2STM#TEMPBUFEARlSTM#1,AROloop2:STM.BKPORTRPA1,*AR4+%;PA1为输入端口号1.D#0,ASTM,AR3Ioopl:MAC.ABANZloopl,*AR3-STH,*AR1PORTW*ARI

13、.PA2;PA2为输出端口号BANZloop2,*AR2-其中FIR_DATA_PTR指向输入缓冲区FIR_DATA,FIR_COEF_PTR指向滤波系数缓冲区FIR.COEFo试写出下面问题的答案:对上面汇编指令代码段中的7个空填入正确答案,使得程序完善并且正确运行。AR4,AR5,#43,#42,*AR4+0%,*AR5+0%,A为获得正确的滤波结果,对滤波数据缓冲区FIR-DATA和流波系数缓冲区FIR_COEF有何要求?要求滤波数据缓冲区fir.data和流波系数缓冲区fir_coef的首地址能被64整除,即首地址的低6位为0。C程序在VC5402片内DARAM中定义了一段连续内存空间

14、。其它任务分配完后整型指针变量LoopBuiHead指向这段内存空间的未分配空间的顶部,具体数值不详。现使用LoopBufHead分配滤波数据缓冲区FIR_DATA和滤波系数缓冲区FIR_COEF。要求在循环缓冲区法的FIR滤波中取得正确滤波结果。写出设置FIR_DATA_PTR和FIR_COEF_PTR的C程序代码。fir_data_ptr=(LoopBufHead+63)&(-63);fir_coef_ptr=(LoopBufHead+63)&(-63)+64;注:对于任意地址AddreSS,(AddreSS+63)&(63)求得一个大于等于Address且满足低6位全零的地址(4)在上面

15、的汇编指令代码段执行过程中,读出指向输入缓冲区的辅助寄存器在Ioopl标号前为I2A3H,执行完43次MAC指令后是多少?读出指向滤波系数缓冲区的辅助寄存器为12E8H,然后连续执行8次MAC指令所访问的8个内存地址分别是多少?执行完43次MAC指令后仍然是12A3H在模43的环内,任意数加上43仍然为原数连续执行8次MAC指令所访问的8个内存地址分别是12E9H,12EAH,12C0H.12CIH,12C2H,12C3H,12C4H,12C5H首地址是12E8H的最低6位全零的地址,即12COH10 .在上面题9标示为FIR_F1LTERING的使用循环缓冲区法完成FIR滤波的汇编指令代码段

16、中存在两重循环嵌套。现有代码采用根据辅助寄存器进行条件跳转的方法实现循环。C54xDSP还提供另外一种执行效率更高的实现循环的方法,即重复和块重复。试写出下面问题的答案:重复指令RPT和RPTZ使用C54xDSP内核什么专门的寄存器或者标志位?把他们全部列举出来。重复指令RPT和RPTZ使用C54xDSP内核RC寄存器块重复指令RPTB使用C54xDSP内核什么专门的寄存器或者标志位?把他们全部列举出来。块重复指令RPTB使用C54xDSP内核BRC、RSA、REA寄存器和STl寄存器的BRAF位对上面题10标示为FIR-FIErERING的使用循环缓冲区法完成FlR流波的汇编指令代码段进行优

17、化,用重复指令和块重复指令完全消除根据辅助寄存器进行条件跳转的指令。写出完整的FIR滤波的汇编指令代码段。FIR-FILTERING:STM#FIR_DATA_PTR+FILTER_LEN-1,AR4STM#HR_COEF_PTR,AR5STM#SIGNAL_LEN-1,BRCSTM#TEMPBUFEARlSTM#1,ARoSTM#43,BKRPTBend_loop-1PORTRPAI,*AR4+%;PAl为输入端口号RPTZA,#42MAC*AR4+0%,*AR5+0%,ASTHA,*AR1PORTW*AR1,PA2;PA2为输出端口号end_loop11 .上面10题由C语言主函数调用汇编

18、子函数fir,形式如下:voidfir(int*fir_ptr,int*coefCptr,longlen,FILE*fp_in,FILE*fp_out)其中第一形参为指向输入缓冲区的16位整型指针变量fir_data,第二形参为指向滤波系数缓冲区的16位整型指针变量fijcoef,第三形参为32位的信号长度,第四、第五形参分别为16位的输入、输出磁盘文件指针。从C语言主函数进入汇编子函数时STl状态寄存器的CPL位为1。试写出下面问题的答案:C语言调用汇编子程序时C编译器规则:从C主程序一进入汇编子程序,SP指向返回地址,累加器A存放第一个形参,SP+1指向第二个形参,SP+2指向第三个形参由

19、此类推在汇编子程序开头,用PShm保护现场,每条pshm指令使SP递减1。还使用frame指令为子程序内局部变量分配内存空间。子程序返同时通过累加器A向主程序输出返同值在跳入汇编子函数fir并且执行如下现场保护后,写出把这五个形参数值传输至累加器B的指令。其中16位形参传输至B的低16位,32位形参(在堆栈中已经偶地址对齐)传输至B的32位。PSHMARlPSHMAR6PSHMAR7PSHMAROPSHMSTlFRAME#-13注意FRAME#-13的操作数是负13。1.DMAL,B或者STLMA,B1.D19,BDLD20,B1.D22,B1.D23,B或者1.DMAL,B或者STLMA,B

20、1.D*SP(19),BDLD*SP(20),B1.D*SP(22),B1.D*SP(23),B写出返回C语言主函数前执行现场恢复的汇编指令代码。FRAME#13POPMSTlPOPMAROPOPMAR7POPMAR6POPMARl12 .已知AR2和AR3分别指向内存的两个32位数a和b,试写出下面问题的答案:a=FFE3FF9AH,b=003D018CH,当STl状态寄存器第7位C16=0时依次执行DLD*AR2,A和DADD*AR3,A,A后,累加器A的数值是多少?当C16=l时完成同样的加法运算,累加器A的数值又是多少?C16=0时累加器A的数值是0x0000210126;C16=l时

21、累加器A的数值是OXooOo200126a=0072FF6AH,b=FFB201B8H,当STl状态寄存器第1位C16=0时依次执行DLD*AR2,A和DSUB*AR3,A,A后,累加器A的数值是多少?当C16=l时完成同样的加减运算,累加器A的数值又是多少?C16=0时累加器A的数值是OxOOOOR)FDB2;C16=l时累加器A的数值是OxOOOOR)FDB213 .现在需要对信号缓冲区的256个16位有符号整数的音频信号数据减去其均值(直流分量),成为交流信号。信号缓冲区在数据页,首地址2C00H。均值存放于数据页2D00H地址中。去直流分量的汇编指令代码如下:STM#2C00H,ARl

22、1.D*(2D00H),BSTM#255,AROloop:1.D*AR1,ASUBB,ASTLA,*ARl+BANZloop,*ARO-现在要求对上述代码进行优化以提高执行效率,措施包括双16位读写和减法运算、重复或者块重复等。其中仅改写为双16位操作便可使循环次数减半。写出在上述代码基础上经过优化达到最高执行效率的汇编指令代码。STM#2C00H,ARl1.D*(2D00H),TSTM#127,BRCSSBXC16RPTBLl-IDSUBT*ARI,ADSTA,*ARl1.I:14 .现在需要在q,xj(i=0J,27)共8个乘积中取最小值并且存放到数据页K)20H的内存中去。和无分别存放于

23、首地址为100OH和IOlOH的长度为8的内存区中,十进制数值如下所示:aiXiaixi1000H-481010H12-576I001H57IOllH158551002H321012H-17-5441003H-941013HS-7521004H661014H3321781005H771015H-25-19251006H2701016H1437801007H-4510I7H23-1035在下面所出现的C54xDSP汇编指令中,LD*ar2+,T指令,MPY*AR3+,A/B指令,MlNA指令,STLA,*ARI+指令均是单字指令,MINA指令的操作是比较两个累加器A和B的数值然后取其中最小值送至

24、累加器A。试写出下面问题的答案:(1)写出执行完以下汇编指令后,ARl-I(即ARI所指向的上一个地址)的地址是多少?其中十进制数值是多少?STM#1000H,AR2STM#1010H,AR3STM#1020H,ARlSTM#6,ARO1.D*AR2,TMPY*AR3+,Aloop:1.D*AR2+,TMPY*AR3+,BMINABANZloop,*AR0-STLA,*ARI+地址是1020H,其中十进制数值是-1925写出执行完以下汇编指令后,ARl-I(即ARl所指向的上一个地址)的地址是多少?其中十进制数值是多少?STM#1OOOH,AR2STM#1010H,AR3STM#1020H,A

25、RlSTM#6,ARO1.D*AR2,TMPY*AR3+,Aloop:1.D*AR2+,TBANZDloop,*AR0-MPY*AR3+,BMINASTLA,*ARI+地址是1020H,其中十进制数值是-1925(3)写出执行完以下汇编指令后,ARI-I(即ARI所指向的上一个地址)的地址是多少?其中十进制数值是多少?STM#1000H,AR2STM#1010H,AR3STM#1020H,ARlSTM#6,ARO1.D*AR2,TMPY*AR3+,Aloop:1.D*AR2+,TBANZloop,*AR0-MPY*AR3+,BMINASTLA,*ARI+地址是1020H,其中十进制数值是-67

26、5(4)写出执行完以下汇编指令后,ARI-I(即ARI所指向的上一个地址)的地址是多少?其中十进制数值是多少?STM#1000H,AR2STM#1010H,AR3STM#1020H,ARlSTM#6,ARO1.D*AR2,TMPY*AR3+,Aloop:BANZDloop,*AR0-1.D*AR2,TMPY*AR3+,BMINASTLA,*ARI地址是1020H,其中十进制数值是-1035最后,上面哪段代码正确(与本题第一句话的要求一致)?哪段代码的执行效率最高?第和第(2)段代码正确。第(2)段代码执行效率最高。15 .延迟跳转指令利用跳转的2个时钟周期空隙执行指令,从而提高执行效率。试用延

27、迟跳转指令改写以下代码,使其达到最高执行效率同时结果保持不变。在每条指令右侧已经注明指令周期数。把长度40、首地址为300OH的信号接收缓冲区的数据输出至MCBSP#1,同时将信号的最低有效位屏蔽。STM#39,AR3(2)STM3000H,AR2(2)1.D#0FFFEH,A(2)loop:CALLIfTxRDYl(4)1.DU*AR2+,BANDA,B(I)STLMB,MCBSPLDXRIBANZloop,*AR3-(4)改写为:STM#39,AR3(2)STM3000H,AR21.D#0FFFEH,A(2)loop:CALLIfTxRDYl(4)1.DU*AR2+,B(I)BANZDlo

28、op,*AR3-(4)ANDA,B(I)STLMB,McBSPl-DXRl(1)对长度为40、首地址为3000H的信号接收缓冲区内信号进行限幅处理,使其落在-28000,+28000的范围内。STM#39,BRC(2)STM#3000H,AR2(2)RPTBL3-1(2)1.D*AR2,B(I)SUB#28000,B,A(2)BCLI,AGT(4,AGT为累加器A大于0)SUB#-28000,B,A(2)BCL2,AGEQ(4,AGEQ为累加器A大于等于0)1.D#-28000,B(2)BL2(4)1.l:1.D#28000,B(2)1.2:STLB,*AR2+(1)1.3:改写为:STM#3

29、9,BRC(2)STM#3000H,AR2(2)RPTBL3-1(2)1.D*AR2,B(I)SUB#28000,B,A(2)BCLI,AGT(4,AGT为累加器A大于0)SUB#-28000,B,A(2)BCL2,AGEQ(4,AGEQ为累加器A大于等于O)BDL2(4)1.D#-28000,B(2)1.l:1.D#28000,B(2)1.2:STLB,*AR2+(1)1.3:16 .下面的汇编代码段实现视频编码的16x16方块运动估计。用VC5402的ABDST指令计算当前16x16图像块与参考帧带运动补偿的16x16图像块之间的绝对值和差。其中省略了计算出当前块与参考块指针的部分代码。每

30、行汇编指令后面都标出了指令周期数。试用重复、块重复、跳转延迟等优化措施改写这段代码,使得运算结果相同的情况下执行效率最高。SSBXSXM(1)LD*(pos_size),A(1)STLMA,AR3(1)Ll:(省略)LD*(width),A(1)STLMA,ARO(1)LD#0,B(1)STM#15,AR2(OL2:MVMMAR6,AR4(1)MVMMAR7,AR5(1)LD#0,A(1)STM#16,ARI(1)L3:ABDST*AR4+,*AR5+(1)BANZL3,*ARI-(4)MAR*AR6+0(OMAR*AR7+0(1)BANZL2,*AR2-(4)LD*(BL),A(1)SUB*

31、(min_sad),A(1)BCL4,AGEQ(5)STLB,*(min_sad)(1)1.D*(current_pos),A(1)STLA,*(best_pos)(1)1.4:ADDM#l,*(current_pos)(2)BANZL1,*AR3-(4)对此三重循环嵌套改写如下:SSBXSXM(1)1.D*(pos_size),A(1)STLMA,AR3(1)1.I:(省略)1.D*(width),A(1)STLMA,ARO(1)1.D#O,B(1)STM#15,BRC(1)RPTBL2-1MVMMAR6,AR4(1)MVMMAR7,AR5(1)RPTZA,#16ABDST*AR4+,*AR

32、5+(1)MAR*AR6+0(1)MAR*AR7+O(1)1.2:1.D*(BL),A(1)SUB*(min_sad),A(1)BCL4,AGEQ(5)STLB,*(min_sad)(1)1.D*(current_pos),A(1)STLA,*(best_pos)(1)1.4:BANZDLl,*AR3-(4)ADDM#l,*(current_pos)(2)17 .对于用线性缓冲区法实现的15阶Hamming低通滤波的C函数fir,CCS2.2内置C编译器生成的汇编语言代码段如下。其中返回主函数前的现场恢复的代码缺漏。为进一步提高执行效率,要求用重复指令、块重复指令、双操作数寻址、MAC乘加指令

33、等C54xDSP特性改写下面的汇编语言代码段,使得标号L2L3之间的运算密集的卷积过程包含最少指令码,达到最高执行效率,同时运算正确,输出信号不变。fir:LI:PSHMARlPSHMAR6PSHMAR7FRAME#-12SSBXSXM1.D*SP(21),BSTLB,*SP(5)MVDK*SP(16)AR1)DLD*SP(18),BMVDK*SP(20),*(AR7)BCDL4,BLEQNOPDSTB,*SP(6);branchoccurs;ADD#14,A,BSTLMA,AR61.D#0,ASTLB,*SP(8)DSTA,*SP(10)ST#4,*SP(O)ST#1,*SP(1)MVKD*

34、(AR7),*SP(2)1.D*SP(8),ACALL#_fread;calloccurs#_freadSTM#14,AR2LD#0,AMAR*AR6-;loopstartsL2:LD*+AR6(l),BSTLMB,TNOPMAC*AR1+,ASTLB,*AR6(-1)BANZL2,*AR2-;loopends;L3:SFTAA,#-15STLMARSTSTA,*SP(4)*+AR6(#-l4)#4,*SP(O)#1,*SP(1)LD*SP(5),ASTLA,*SP1.DMSP,ACALLD#_fwriteADD#4,A;calloccurs#_fwriteMAR*+ARl(#-15)SSBXSXMDLD*SP(10),AADD#1,ADLD*SP(6),BSUBA,BBCDLI,BGTNOPDSTA,*

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 在线阅读 > 生活休闲


备案号:宁ICP备20000045号-1

经营许可证:宁B2-20210002

宁公网安备 64010402000986号