在DSP的运算中多数为乘法和加法运算。通常采用全部以Q15格式(纯小数)或Q0格式(纯整数)表示。因为小数乘以小数得小数,整数乘以整数得整数。但有的情况下如动态范围和准确度需要,必须使用带有整数与小数的混合表示法,如Q10格式有10位小数、5位整数,表示的数值范围是-32~31.999,准确度为1/32=0.03。
(1)定点乘法
两个定点数相乘时,可以分为纯小数乘以纯小数、整数乘以整数及混合表示法三种情况。
1)纯小数乘以纯小数。Q15乘以Q15,结果为Q30格式,即有两个符号位。一般情况下相乘后得到的满准确度数不必全部保留,只需要保留16位准确度数。可以将乘积左移一位,去掉一位符号位,得到Q15格式的数。
例1-3 0.5×0.5=0.25。
0.100 0000 0000 0000 B×0.100 0000 0000 0000 B=
00.01 0000 0000 0000 0000 0000 0000 0000 B
乘积左移一位,可得到Q15格式的乘积0.010 0000 0000 0000 B。
2)整数乘以整数。Q0乘以Q0,结果仍为Q0格式。
例1-4 2×(-5)=-10。
0000 0000 0000 0010 B×1111 1111 1111 1011 B=
1111 1111 1111 1111 1111 1111 1111 0110 B(-10)
按照二进制补码进行的有符号整数的乘法无需关注其符号,得到的乘积仍然是Q0格式的补码即-10的补码。(www.daowen.com)
3)混合小数乘法。在定点乘法中,为了满足数值的动态范围并保证一定的准确度,需要采用混合小数乘法。有下面的关系式成立:
Qi×Qj=Qi+j
式中,0<i<15,0<j<15。
相乘的两个数中,一个数的小数位为i位,整数位为15-i位,另一个数的小数位为j位,整数位为15-j位,则两数乘积的小数位为(i+j)位,整数位为(30-i-j)位。乘积的高16位可表示的准确度为(30-i-j)整数位和(i+j-15)位小数位。
例1-5 3.25×1.5=4.875。
在Q13格式下:3.25=011.0 1000 0000 0000 B
在Q14格式下:1.5=01.10 0000 0000 0000 B
3.25×1.5=0010 0.111 0000 0000 0000 0000 0000 0000 B;Q27格式
将上式左移一位,若保留15位准确度,则得结果0100.1110 0000 0000 B=4E00H,为Q12格式。
(2)定点加法
对于定点加法,首先要注意小数点的位置要对齐,即需要相加的两个数的格式要一样,否则要通过移位操作使它们一致。另一个问题是运算结果可能溢出。一般通过CPU状态寄存器的溢出标志来检查溢出,还可以使用溢出保护功能使累加结果溢出时,累加器饱和为绝对值最大的正数或负数。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。