第1章 DSP概述 习题及思考题
1-1 和单片机相比,DSP主要优势有哪些?
解:速度快、有数字信号处理专用指令、运算精度高。
1-2 简述DSP在数字信号处理中所起的作用是什么。
解:实现数字信号处理中的常用算法,如FFT,FIR、IIR等。
1-3 DSP数字信号处理系统的主要组成部分有哪些?
解:低通滤波器、A/D转换器、DSP、D/A转换器、带通滤波器等组成。
1-4 请把0.3333分别用1字节纯二进制小数(Q8)和2字节纯二进制小数(Q16)表示,
然后,再把这1字节纯二进制小数和2字节纯二进制小数转换成十进制小数,计算转换精度(即计算相对误差)为多少?判断纯二进制小数位数长还是位数短表示的十进制数精度高。
解:Q8:55H。Q16:5553H
55H:55H/256=0.33203125,相对误差=|0.3333?0.33203125|/0.3333=0.38% 5553H:5553H /65536=0.3332977294921875 ,
相对误差=|0.3333?0.3332977294921875|/0.3333=0.00068%
可见,二进制小数位数长的转换精度高。
1-5 请将下列3字节浮点数转换成十进制数:
x(t)LPFADCDSPDACBPFy(t)
1 000 1111 1110 0000 0000 0000
数符位 | 阶码 尾数高8位 尾数低8位
解:(1)尾数E000H转换成十进数为0.875 (2)阶码7位转换为8位:0FH=15 (3)数符1
数符阶码15
十进制数=(?1)×尾数×2= ?0.875×2= ?28672
1-6 假设一种双字(即4个字节)定点数的小数点定标在这两个字的中间,请计算下列
二进制数对应的十进制数为多少?
(1)00014000H (2) FFFE8000H 解:(1)00014000H 整数0001转换成十进制整数为1,小数4000H转换成十进制小数为0.25,故为1.25
(2)FFFE8000H是负数,首先要求补变为正数00018000,整数0001转换成十进制整
1
数为1,小数8000H转换成十进制小数为0. 5,故为?0. 5 。
1-7 求下列二进制数的补码。 (1)-3 (1个字节Q0) (2)3(1个字节Q0) (3)-15 (1个字节Q0) (4)-16.625 (2个字节Q8,高字整数部分,低 字小数部分)
8
解:(1)FDH (2)03H (3)F1H (4)16.625×2=10A0H,对10A0H求补 为FFFF EF60H,即-16.625的单字Q8为FFFF EF60H
1-8 将下列十进制数转换成16位整数(高字)和16位小数(低字)的32位混合二进制数表 示形式。
(1)88.0 (2)-32767.75 解:(1)0058 0000H (2)32767.75的Q16为7FFF C000H,再对7FFFC000H求补:8000 4000H,即-32767.75的单字Q16为8000 4000H。
1-9 请用1个字的Q10表示下列十进制数:
(1)-0.049067 (2)0.049067 解:(1)0.049067×2=50.244608=>32H=>求补FFCEH (2)32H
1-10 请把1个字的Q10表示法转换成对应十进制数:
(1)400H (2) FC00H
解:(1)400H=>(把400H看成整数转换成十进制数)1024=>1024/2=1,即400H对应十进制数1。
(2)FC00H是负数,首先求补变为0400H,400H=>(把400H看成整数转换成十进制数)1024=>1024/2=1,再人为加一个负号,即FC00H对应十进制数-1。
1-11 定点DSP与浮点DSP在数据格式上有何区别?
解:定点DSP的数据格式是在定长二进制数中,小数点默认在某个位置。浮点DSP的数据格式是把定长二进制数分成尾数、阶码、数符位,小数点随阶码大小浮动。
1-12 定点数定标的含义是什么?定点数为何要定标? 解:定标的含义是把定点数小数点默认的位置用Q加后缀数字表示,数字代表小数点右边小数部分的位长。定点数只有定标才能确定运算结果的小数点位置。
1-13 请问单字Q12表示法有几位整数,有几位小数? 解:单字是16位,Q12表示有4位整数,12位小数。
1-14 假设下列16位二进制数是用Q12表示法表示的,请转换成十进制数: (1) 4000H (2)0DDBH
解:(1)4000H=>(把4000H看成整数转换成十进制数)16384=>16384/2=4,即4000H
2
12
10
10
10
对应十进制数4。
(2)0DDBH=>(把0DDBH看成整数转换成十进制数)3547 =>3547 /2=0.8659,即DDBH 对应十进制数0.8659。
1-15 假如有下列一组系数{0.1666,0.5,0.866}要用16位二进制数表示,请从表示精 度较高的角度考虑,采用Q多少表示较为合适?有几个选项供参考: (1)Q15 (2)Q14 (3)Q13 (4)Q12 解:(1)这种系数均小于1,故可用Q15表示,而Q15比Q14、Q13、Q12的小数位数均长,精度最高,因此,用Q15表示较合适。
1-16 假设两个16位定点数相乘,被乘数为Q0,乘数为Q14,请问32位乘积小数点定 标属于Q多少?
解:32位乘积为Q14 ,即整数部分占18位,小数部分占14位。
1-17 某个存储器单元中存放着一个字型数据为0203H,现在要把它拆成高字节和低字 节再存放到两个字单元中,请问存放到字单元后,高字节和低字节的数据形式是 什么?
解:0203H拆成高字节和低字节为02H、03H,再放到字单元中时,要进行符号扩展,02H扩展成字为0002H,03H扩展成字为0003H。
1-18 请将下列补码减法运算转换成加法算式:
(1)0001-0002H (2)0010H-0020H 解:(1)根据补码运算规则,[X?Y]补码=[X]补码+[?Y]补码,因此
[0001H]补码=0001H,[?0002H]补码=FFFEH
0001-0002H=0001H+[?0002H]补码=0001H+FFFEH=FFFFH
(2)0010H-0020H=0010H+[?0020H]补码=0010H+FFE0H=FFF0H
1-19 16位二进制整数补码能表示的十进制数范围是多少?指出下列二进制数运算是 否发生溢出。
(1) 0068H+7E78H (2) 7F00H+FFF0H (3)8001H左移1位
(4) 6000H右移一位 (5) 1234H-F000H (6)FFFFH?FFFFH(无符号乘 法)
解:16位二进制整数补码能表示的十进制数范围是?32786(8000H)~+32767(7FFFH)。 (1)0068H+7E78H=7EE0H? 7FFFH,未溢出
(2)7F00H+FFF0H =17EF0H,C=1是进位,自然丢失,取7EF0H? 7FFFH,未溢出 如何判断C=1是自然丢失,不是溢出呢?简易判断规则是,两个加数互为反号,和不会溢出。同理,两个减数互为同号,差不会溢出。
1-20 请分析下列算术运算指令影响进位标志C标志的结果(有进位或有借位时,则 C=1,否则C=0)。
(1) 0001H-0002H (2) 0002H-0001H 解:(1)有借位,则C=1。 (2)无借位,则C=0。
1-21 假设16位二进制数是Q14表示法,请回答下列问题:
(1)该数有多少位整数和多少位小数?
3
12
(2)Q14表示法表示的最小十进制负数为多少?16位二进制数表示形式是什么? (3)Q14表示法表示的最小十进制正数(用2 的幂次方表示即可)为多少?16位 二进制数表示形式是什么? 解:(1)Q14有2位整数和14位小数。 (2)Q14表示法表示的最小十进制负数为?2,16位二进制数表示形式是2000H
(3)Q14表示法表示的最小十进制正数是2?14,16位二进制数表示形式0001H
1-22 将16位二进制数Q15表示法8000H转换成对应的十进制数。 解:8000H是负数,求补8000H还是8000H,但结果要加负号。
8000H看成整数转换成十进制数为32768,再32768/215=1,再加负号为?1。 即Q15表示法8000H转换成对应的十进制数为?1
1-23 1字节补码FFH扩展成2字节补码的表示形式是多少?
解:FFH的符号位为1,故扩展符号位为FFH,即FFH扩展成2字节补码为FFFFH。
1-24 请把0.25和-0.25用3字节自定义浮点数形式表示(格式参见1-5题)。
?1
解:0.25转换成大于等于0.5的规格化尾数为0.5×2,即尾数为0.5,阶码为-1。
0.25的3字节自定义浮点数形式表示为:
0 111 1111 1000 0000 0000 0000
数符位 | 阶码 尾数高8位 尾数低8位
?0.25与0.25只差一个数符,其他转换方法相同。?0.25的3字节自定义浮点数形式表示为: 1 111 1111 1000 0000 0000 0000
数符位 | 阶码 尾数高8位 尾数低8位
1-25 0.625的单字Q15表示法数和0.75的单字Q14表示法数能否直接进行相加?运算 规则是什么?
解: 不同Q值定标数不能直接进行相加,必须先统一Q,对Q规则为大Q对小Q,即大Q的数通过右移对准小Q,统一Q后,被加数和加数才能相加。 0.625的Q15表示法为0.625×215=20480=>5000H
0.75的Q14表示法为0.75×214= 12288=>3000H
首先要将Q15表示5000H右移一位变为Q14:2800H,再与Q14的3000H相加: 2800H+3000H=5800H=>22528/214=1.375(=0.625+0.75)
1-26 0.5的单字Q13表示法数和单字Q12表示法数能否直接相乘?写出被乘数Q13与 Q12乘数相乘的结果,并回答乘积是双字的Q多少表示法。
解:不同Q值定标数可以直接进行相乘,乘积的Q值是被乘数Q值和乘数Q值Q值之和。被乘数0.5的Q13表示法为1000H,被乘数0.5的Q12表示法为800H,Q13与Q12乘数相乘的乘积结果为1000H×800H=800000H,定标值为Q25,转换成十进制数为
25
800000H=>8388608/2=0.25(=0.5×0.5,验证完毕)。 ,
4
1-27 两个阶码异同的浮点数能直接相加吗?两个阶码异同的浮点数相加的规则是什 么?请写出计算7FH(阶码) 40H 00H(16位尾数)+01H(阶码) 80H 00H (16位尾数)的3字节浮点数加法的结果。
解:两个不同阶码的浮点数不能直接相加,必须先统一阶码,对阶规则为小阶对大阶,即小阶每增1,尾数就右移1位。
被加数的阶码为7FH,真值为?1。加数的阶码为01H,真值为+1。所以被加数的阶码小,要向加数的阶码对齐。
1-28 请画出浮点数转换成二进制定点数的转换原理流程图。 解:
浮点数转换十进制数子程序负号正号判阶码是正还是负?对阶码求补一次变为正阶码尾数小数点左边扩展与尾数同样位长的零值寄存器尾数最低位右边扩展与尾数同样位长的零值寄存器尾数联合小数点左边扩展的零值寄存器一起左移正阶码规定的次数,将浮点数转换为二进制定点数尾数联合最低位右边扩展的零值寄存器一起右移正阶码规定的次数,将浮点数转换为二进制定点数调用二进制定点数转换成十进制实数子程序:小数点左边按整数转换,小数点右边按小数转换。
1-29 请用二?十进制实数转换公式计算十进制数转换成十六位二进制定点数: (1)0.5 (Q12) (2) 0.333 (Q12) (3)-0.333(Q12) 解:(1)0.5×212=2048=>0800H
(2)0.333×212=1363.968 (四舍五入为1364)=>554H
(3)0.333的Q12为554H,则?0.333为554H求补为FAACH。
1-30 请用二-十进制实数转换公式计算十六位二进制定点数转换成十进制数: (1)0400H(Q14) (3)0553H (Q14) (3)FAAD(Q14) 解:(1)0400H(把0400H看成整数转换成十进制数)1024=>1024/214=0.0625,即0400H对应十进制数为0.0625。 (2)0553H(把0553H看成整数转换成十进制数)1363=>1363/214=0.0832,即0553H对应十进制数为0.0832。
(3)FAADH为负数,首先求补一次变为正数:0553H,由(2)题知0553H的Q14对应十进制数为0.0832,因为求补一次,故FAADH对应的十进制数为?0.0832。
5