您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > DSP原理课练习题参考答案-应电
《DSP原理与应用》练习题参考答案32学时版本用于应用电子方向注意:红色字体文字为解题注解与说明,万万不可作为答题内容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.15形式,乘积Q.15形式为D400H=-2C00H/32768=-11264/32768=-0.34375解法二,运用教材P7公式,EA000000/230=-16000000//230=-11/25=-0.34375解法三,写出小数点后二进制位数值,乘积为-16000000H,小数点后的二进制为01011B,得2-2+2-4+2-5=-11/25=-0.34375FRCT=1时累加器A低31位为小数位解法一,取乘积Q.15形式,乘积Q.15形式为7D00H=32000/32768=0.9765625解法二,运用教材P7公式,7D000000H/231=125/27=0.9765625解法三,写出小数点后二进制位数值,乘积7D000000H小数点后的二进制为1111101B,得2-1+2-2+2-3+2-4+2-5+2-7=125/27=0.97656252.在C54xDSP的C语言开发环境中,数据类型与通常的C语言开发环境的数据类型不同,主要数据类型如下表所示:数据类型位长char,unsignedchar16short,unsignedshort,signedshort16int,unsignedint,signedint16long,unsignedlong,signedlong32float32double32现在利用一个15阶Hamming低通滤波器对16位音频信号进行FIR滤波。在C54xDSP和CCS2.2上的C语言程序如下:constdoublecoef[15]={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=0;j15;j++){accumulator+=x[i-j]*coef[j];}y[i]=(int)accumulator;}}以上表达式中,x,y分别是低通滤波输入、输出的16位整型数组变量。现在要求把以上过程优化为在C54x平台上运行的精度最高、执行效率最高的16位定点运算形式。试写出在C54xDSP和CCS2.2环境下完成16位相乘和32位累加的定点运算的C程序。第一步:把全部滤波器系数转化为Q.15定点数第二步:把乘累加转化为整数乘法,Q.15乘以整数的小数点位置在第14位和第15位之间,累加结果为32位整数,其中最高两位为符号位,接着15位为整数,低15位为小数第三步:舍去低15位小数,取一位符号位和15位整数位作为滤波输出结果在下面有符号数乘法中小数点位置:15位数字S15位数字S*=SS高15位数字低15位数字constintcoef[15]={158,264,-290,-1406,-951,3187,9287,12272,9287,3187,-951,-1406,-290,264158};voidfir(int*x,int*y){inti,j;for(i=0;i1024;i++){longaccumulator=0;for(j=0;j15;j++){accumulator+=x[i-j]*coef[j];}y[i]=(int)(accumulator15);}}3.解决图像编码中常见的8x8离散余弦变换在VC5402DSP上定点运算问题。⑴用C语言写出定点运算实现8cos2214cos153的程序,并且把最后结果存放到16位整型变量r中。数据类型见前面题3的表格。4cos的Q15定点数是231708cos的Q15定点数是30274constintx[2]={153,221};constinty[2]={23170,30274};longa;intr;a=x[0]*y[0]+x[1]*y[1];r=(int)(a15);或者C程序也可写成:longa;intr;a=153*23170+221*30274;r=(int)(a15);在下面有符号数乘法中小数点位置:15位数字S15位数字S*=SS高15位数字低15位数字⑵用C54x汇编指令写出定点运算实现8cos2214cos153的代码,并且把最后结果转换为16位整数存放到1102H的地址中。1000H存放153,1001H存放2211002H存放23170,1003H存放30274SSBXFRCTSTM#1000H,AR2STM#1002H,AR3STM#1102H,AR1RPTZA,#1MAC*AR2+,*AR3+,ASTHA,*AR1在下面有符号数乘法中小数点位置:15位数字S15位数字S*=S0高15位数字低15位数字⑶现有一个8位无符号字符数118,对其执行浮点运算8cos4cos118,VC5402汇编指令代码段如下:SSBXFRCTMPY*(1000H),#118,AMPYA*(1001H)STHB,*(1002H)运算前数据页1000H和1001H的地址存放的数据是多少?运算后数据页1002H的地址存放的结果是多少?运算前数据页1000H的地址存放的数据是327684cos=23170运算前数据页1001H的地址存放的数据是327688cos=30274运算后数据页1002H的地址存放的结果是76,得出过程见于(4)在下面有符号数乘法中小数点位置:15位数字S15位数字S*=S高15位数字低15位数字0第一次乘法高15位数字S15位数字S*=S高15位数字低15位数字0第二次乘法⑷上面⑶的代码段求出8cos4cos118的结果是多少?118*23170,乘积取1位符号和高15位得83,再乘以30274,乘积取1位符号和高15位得76写出83和76,得3分写出76,得2分写出77,得1分用计算器,分两步,第一步算4πcos×118取整数得83;第二步算8πcos×83取整数得76用计算器一步算出77,得1分连77都算不出,便不如中学生4.在VC5402汇编语言程序中需要连续读取散布于数据页地址0A06H,0A27H,0A3AH,0A53H,0A65H,0A92H,0ACAH,0AE0H中的8个数据。要求以最少指令和最快速度读入这8个地址的数据。写出执行指令。注意读入8个地址数据的次序不能改变。如全写成16位地址的直接寻址形式,得一半分LD*(0A06H),ALD*(0A27H),ALD*(0A3AH),ALD*(0A53H),ALD*(0A65H),ALD*(0A92H),ALD*(0ACAH),ALD*(0AE0H),A注意,读用LD*(),A,写用STLA,*()满分答案:7位地址的直接寻址形式RSBXCPL或者CPL=0时LD#14H,DPLD@06H,ALD@27H,ALD@3AH,ALD@53H,ALD@65H,ALD#15H,DPLD@12H,ALD@4AH,ALD@60H,A5.现在需要对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-0B⑵在⑴中已经读取0A65H地址的数据后,随后连续8次读取的输入数据的地址是多少?要求写出详细计算过程,光写对答案不能得满分。第1次:0000,1010,0110,0101-1,0000,0000B=0000,1011,1010,0101=0BA5H第2次:0000,1011,1010,0101-1,0000,0000B=0000,1010,1010,0101=0AA5H第3次:0000,1010,1010,0101-1,0000,0000B=0000,1011,0010,0101=0B25H第4次:0000,1011,0010,0101-1,0000,0000B=0000,1010,0010,0101=0A25H第5次:0000,1010,0010,0101-1,0000,0000B=0000,1011,1100,0101=0BC5H第6次:0000,1011,1100,0101-1,0000,0000B=0000,1010,1100,0101=0AC5H第7次:0000,1010,1100,0101-1,0000,0000B=0000,1011,0100,0101=0B45H第8次:0000,1011,0100,0101-1,0000,0000B=0000,1010,0100,0101=0A45H位倒序加减法必须展开成二进制运算。正常加法,从最右开始,向左进位;正常减法,从最右开始,从左借位。位倒序加法,从最左开始,向右进位;位倒序减法,从最左开始,从右借位。6.使用VC5402DSP芯片对一无限长的16位整型音频信号序列执行103阶FIR带通滤波。需要分配滤波数据缓冲区FIR_DATA和滤波系数缓冲区FIR_COEF。现有的在C54xDSP和CCS2.2环境下的C语言程序fir.c和相应的链接命令文件fir.cmd如下:fir.c文件:intfir_data[103];intfir_coef[103];main(){fir(fir_data,fir_coef,signal_len,fp_in,fp_out);//执行FIR滤波的汇编函数}fir.cmd文件:MEMORY{PAGE0:/*programspace*/VECS:origin=0x0080,length=0x0080/*vector
本文标题:DSP原理课练习题参考答案-应电
链接地址:https://www.777doc.com/doc-2871052 .html