您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > DSP原理与应用练习题+参考答案-通信-广工
《DSP原理与应用》练习题参考答案24学时版本用于通信方向注意:红色字体文字为解题注解与说明,万万不可作为答题内容1.Q.15表示是16位数据中第15位为符号位,第14~0位为小数位。试写出下面问题的答案:⑴分别写出十进制正数0.68和十进制负数-0.245的Q.15表示。0.68*32768=570AH-0.245*32768=-1F5CH=E0A4H⑵分别写出Q.15表示的A200H和5A00H的十进制数值。A200H/32768=-5E00H/32768=-0.7343755A00H/32768=0.703125上面两小题使用教材P7两条公式,公式中Q为数据中的小数位数,digits-data。取补码的正规方法是按位取反得到的反码加上1。16进制下快速算法是找出互补的数,即加上该互补数得10000H。例如求1F5CH补码,1F5CH+E0A4H=10000H。故E0A4H为所求。⑶已知两个Q.15数相乘的乘积存放于累加器A中。FRCT=0时A为16进制0xFFEA000000,该乘积的十进制数是多少?FRCT=1时A为16进制0x007D000000,该乘积的十进制数又是多少?FRCT=0时累加器A低30位为小数位乘积既非Q.31,也非Q.30解法一,写出小数点后二进制位数值,乘积为-16000000H,小数点后的二进制为01011B,得2-2+2-4+2-5=-11/25=-0.34375解法二,运用教材P7公式,EA000000/230=-16000000//230=-11/25=-0.34375FRCT=1时累加器A低31位为小数位乘积为Q.31,其中高16位为Q.15解法一,写出小数点后二进制位数值,乘积7D000000H小数点后的二进制为1111101B,得2-1+2-2+2-3+2-4+2-5+2-7=125/27=0.9765625解法二,运用教材P7公式,7D000000H/231=125/27=0.9765625解法三,取乘积Q.15形式,乘积Q.15形式为7D00H=32000/32768=0.97656252.解决图像编码中常见的8x8离散余弦变换在VC5402DSP上定点运算问题。⑴用VC5402指令写出定点运算实现83cos163cos192的代码。其中定点乘法精度16位。最后结果保留整数部分。可以利用首地址1000H的128字长数据缓存区存放数据。(10分)数据页1000H的地址存放的数据是32768163cos=27246数据页1001H的地址存放的数据是3276883cos=125401000H存放27246,1001H存放12540,结果存放1002HSSBXFRCTMPY*(1000H),#192,AMPYA*(1001H)STHB,*(1002H)以上有符号数乘法中小数点位置:15位数字S15位数字S*=S高15位数字低15位数字0第一次乘法高15位数字S15位数字S*=S高15位数字低15位数字0第二次乘法⑵写出用上面(1)的指令段计算出83cos163cos192的数值。(6分)192*27246乘积取1位符号和高15位得159,159*12540乘积取1位符号和高15位得60。用计算器,分两步,第一步算163cos192取整数得159;第二步算83cos159取整数得6061.0924得0分61得1分60得2分159和60得3分3.现在需要对16位整型音频信号数据执行512点FFT,待处理数据放在数据页首地址为0A00H,长度为512的缓冲区内。在按时间抽取基2FFT碟形运算中输入数据倒序,输出数据顺序。写出在一个512次循环中以降序ARx-0B读入数据页0BFFH~0A00H的512个输入数据的汇编指令代码。STM#0BFFH,AR1STM#256,AR0STM#511,AR2loop:LD*AR1-0B,ABANZloop,*AR2-或者STM#0BFFH,AR1STM#256,AR0STM#511,BRCRPTBend_loop–1LD*AR1-0B,Aend_loop:或者STM#0BFFH,AR1STM256,AR0RPT#511LD*AR1-0B,AFFT基2碟形运算,时间抽取时输入乱序、输出顺序;频域抽取时输入顺序、输出乱序AR0数值设为FFT点数一半。循环计数器初值设为循环次数-1也就是FFT点数-1。升序时,AR1数值设为缓冲区首地址,乱序读LD*AR1+0B,A,乱序写STLA,*AR1+0B降序时,AR1数值设为缓冲区尾地址,乱序读LD*AR1-0B,A,乱序写STLA,*AR1-0B4.在VC5402芯片上对无限长16位整型音频信号执行分段实时采集、滤波、输出至功放。其中滤波使用51阶Hamming窗低通滤波以及循环缓冲区方法。汇编指令代码段如下:LOOP_FILTERING:STM#DATA_BUF_PTR+50,①AR3或者AR4STM#COEF_BUF_PTR,②AR4或者AR5STM#LEN-1,AR7STM#IN_BUF_PTR,AR2STM#OUT_BUF_PTR,AR1STM③#1,AR0SSBX④FRCTloop2:STM⑤#51,BKMVDD*AR2+,⑥AR3+0%或者AR4+0%LD#0,ASTM⑦#50,AR6loop1:MAC⑧AR3+0%或者AR4+0%,⑨AR4+0%或者AR5+0%,ABANZloop1,*AR6-STHA,*AR1+BANZloop2,*AR7-其中COEF_PTR指向滤波系数缓冲区,DATA_PTR指向输入缓冲区,IN_BUF指向音频采集缓冲区,OUT_BUF指向音频功放输出缓冲区。试写出下面问题的答案:(1)在上面汇编指令代码段中9个标有序号的空中填空,使程序完整并且正确运行。①AR3或者AR4,②AR4或者AR5,③#1,④#FRCT,⑤#51,⑥AR3+0%或者AR4+0%,⑦#50,⑧AR3+0%或者AR4+0%,⑨AR4+0%或者AR5+0%(2)在上面代码段跟踪过程中,读出指向滤波系数缓冲区的辅助寄存器内容为10AFH,随后连续执行4次MAC指令所访问的4个内存地址分别是多少?又读出指向输入缓冲区的辅助寄存器内容为10F1H,随后同一辅助寄存器对同一缓冲区访问102次后读数是多少?循环寻址运算是*ARx+%BK,在BK个地址的集合内循环递增。缓冲区尾地址+1=首地址的条件是首地址低N位全零,N为BK2N的最小整数。任意给出一个循环寻址的缓冲区内地址,可唯一确定该缓冲区(首、尾地址)。本题BK=51,N=6。第1问,10B0,10B1,10B2,1080地址10AFH二进制展开后,低6位全零时得首地址1080H,尾地址=1080H+51-1=10B2H第2问,10F1H循环寻址的缓冲区内任一地址a+51n=a5.在题7标示为LOOP_FILTERING的使用循环缓冲区法完成FIR滤波的汇编指令代码段中存在两重循环嵌套。现有代码采用根据辅助寄存器进行条件跳转的方法实现循环。C54xDSP还提供另外一种执行效率更高的实现循环的方法,即重复和块重复。试写出下面问题的答案:⑴重复指令RPT和RPTZ使用C54xDSP内核什么专门的寄存器或者标志位?把他们全部列举出来。重复指令RPT和RPTZ使用C54xDSP内核RC寄存器⑵块重复指令RPTB使用C54xDSP内核什么专门的寄存器或者标志位?把他们全部列举出来。块重复指令RPTB使用C54xDSP内核BRC、RSA、REA寄存器和ST1寄存器的BRAF位⑶对题7标示为LOOP_FILTERING的使用循环缓冲区法完成FIR滤波的汇编指令代码段进行优化,用重复指令和块重复指令完全消除根据辅助寄存器进行条件跳转的指令。LOOP_FILTERING:STM#DATA_BUF_PTR+50,AR3STM#COEF_BUF_PTR,AR4STM#LEN-1,BRCSTM#IN_BUF_PTR,AR2STM#OUT_BUF_PTR,AR1STM#1,AR0SSBXFRCTSTM#51,BKRPTBend_loop-1MVDD*AR2+,AR3+0%RTPZA,#50MAC*AR3+0%,*AR4+0%,ASTHA,*AR1+end_loop:6.上题4标号为LOOP_FILTERING的滤波代码段必须封装成为如下形式的函数方能被C语言主程序调用。voidfir(int*in_buf,int*data_buf,int*coeff_buf,intlen,int*out_buf)其中第一形参为指向音频采集缓冲区的指针in_buf,第二形参为指向输入缓冲区的指针data_buf,第三形参为指向滤波系数缓冲区的指针coeff_buf,第四形参为滤波长度(不等于信号分段长度)len,第五形参为指向音频功放输出缓冲区的指针out_buf。从C主程序跳入汇编子函数时ST1状态寄存器的CPL位自动为1。试写出下面问题的答案:⑴在跳入汇编子程序fir并且执行如下现场保护后,写出把上述fir函数五个形参传递至累加器B的指令。PSHMAR0PSHMAR1PSHMAR2PSHMAR3PSHMAR4PSHMAR5PSHMAR6PSHMAR7FRAME#-12LDMAL,B或者STLMA,BLLD@21,BLD@22,BLD@23,BLD@24,BC语言调用汇编子程序时C编译器规则:从C主程序一进入汇编子程序,SP指向返回地址,累加器A存放第一个形参,SP+1指向第二个形参,SP+2指向第三个形参,。。。。。。由此类推在汇编子程序开头,用PSHM保护现场,每条PSHM指令使SP递减1。接着使用FRAME指令为子程序内局部变量分配内存空间。子程序返回时通过累加器A向主程序输出返回值。本题中,8条PSHM指令使SP-8,FRAME指令使SP-12,总共减去20,新SP=旧SP-20,第一形参在累加器A,第二形参在SP+21(旧SP=新SP+20,旧SP+1=新SP+20+1),第三形参在SP+22,第四形参在SP+23,第五形参在SP+24⑵写出返回C语言主函数前执行现场恢复的汇编指令代码。FRAME#12POPMAR7POPMAR6POPMAR5POPMAR4POPMAR3POPMAR2POPMAR1POPMAR0堆栈后进先出。7.由美国国家科学奖章获得者、美国高通公司创始人之一兼首席科学家、被誉为CDMA之父的AndrewJ.Viterbi发明的Viterbi译码是卷积码的译码方法之一,因运算复杂度最低而广泛用于3G移动通信系统和卫星通信系统的信道纠错与检错。其运算核心为循环执行的加比选ACS碟形运算,VC5402汇编代码如下:LD*AR2,B;本地码间汉明距离→BLADD*AR5,B,A;AL=Old_Met(2*j)+BLSUB*AR5(1),B,B;BL=Old_Met(2*j+1)-BLMAXA;A=max(A,B)STLA,*AR4+LD*AR2,BSUB*AR5+,B,A;AL=Old_Met(2*j)-BLADD*AR5+,B,B;BL=Old_Met(2*j+1)+BLMAXA;A=max(A,B)STLA,*AR3+以下优化过程必须用SSBXC16指令设置C16LD*AR2,TDADST*AR5,ADSADT*AR5+,BCMPSA,*AR4+CMPSB,*AR3+以上代码源自文献[SPRA071A,ViterbiDecodingTechniquesfortheTMS320C54xDSPGeneration,P13]。相关汇编指令注释如下:DADST*ARx,A或者B累加器高16位=ARx指向的32位数据的高16位+T暂存器,同时累加器低16位=ARx指向的32位数据的低16位-T暂存器DSADT*ARx,A或者B累加器高16位=ARx指向的32位数据的高16位-T暂存器,同时累加器低16位=ARx指向的32位数据的低16位+T暂存器CMPSA或者B,*ARxARx指向的16位数据=max(累加器低16位,累加器高16位
本文标题:DSP原理与应用练习题+参考答案-通信-广工
链接地址:https://www.777doc.com/doc-2910471 .html