DSP学习笔记(二)——DSP中浮点数与定点数格式与运算处理

DSP****学习笔记(二)——DSP中浮点数与定点数格式与处理

1 DSP中的数据表述

DSP中数据通常是有定点数与浮点数表示,其中可以对字长进行相关定义,可以选取字长为16位、24位、32位不同字长使用。而格式与字长决定了数据的精度与动态范围,同时也一定程度上决定了DSP处理器的功耗、成本与编程难度。

定点数:小数点位置为确定的。

浮点数:小数点位置可以改变。

定点运算的硬件实现较为简单,功耗较小,主要注意的是数据的定标、溢出以及误差。

浮点器减结构较为复杂,但是精度较高,高级语言容易支持。

2 定点数的格式与相关运算

2.1 定点数格式

定点数格式:Qn 格式,n为小数位数。即Q15 ,小数点右边有15个小数位,如果我们定义了一个长度为32位的数字,那么小数位为15,1位符号位,16位为整数位。

整数小数点固定在最后,定点数小数位固定使用上文的Qn 格式表示,两者都使用二进制补码形式表示。

例: Q4格式:01010011b=1•22+1•20+1•2-3+1•2-4=83/24=5.1875

对于负数(最高位MSB为1),要先把它转化为无符号二进制数,再进行计算,最后加上负号。

图2-1 二进制Q格式表示

定点数与浮点数转化时需要使用2n 的关系进行转化。

转化关系如下图:

图2-2 定点数与浮点数转化关系

浮点数转换为定点数时,由于小数点后的位数有限,会产生截断误差。

2.2 数值范围与精度

Qn 格式,字长为N数值范围: -2N-12n~2N-1*-12n*  

精度:1**2n

由于符号位占1位,所以数据位为N-1,n越大范围越小,但精度越高。

图2-3 数值范围与精度

2.3 动态范围

数据格式中最大值与最小值之比即为动态范围。

N位定点数动态范围:

分贝表示:dsp大多采用16位定点数,动态范围为90.3db。

Dsp大多采用16为定点数,运算硬件实现较为简单,更大动态范围应用可以使用拓展字长方式。

3 定点数算术运算

3.1 定点数加减法运算

首先需要保证小数点对齐,但是运算结果可能会溢出。如果进位位与最高位(MSB)相同无溢出,不同则有溢出。

处理溢出通常有饱和模式与非饱和模式,饱和模式溢出时会对溢出进行限幅,如图。非饱和模式不会处理。

图3-1 饱和模式与非饱和模式

3.2 定点数乘法

DSP处理器都有硬件乘法器和乘法指令,可实现单周期乘法运算。二进制乘法运算包含了移位与加法运算。

定点数乘法不要求小数点位统一,两个相乘数分别为Qn和Qm格式,字长为N,结果为Q(n+m)格式,字长为2N。

在进行运算时,需要字长保持不变,则两个定点小数作乘法运算,结果左移一位,保存高位得到运算结果,结果为Qm(m≤ n)格式。

若整数乘小数,则输出结果为整数,丢弃后8位为截尾误差。误差小于等于Qn格式精度的一半,即小于等于12n+1 。单次计算误差不大,但连续计算,尤其是递归算法中,误差影响较大。

整数相乘,结果为Q0格式,需查询标志位确定保存的位数,结果不需要左移一位。若结果没有超出8位数的表示范围时,结果在低8位,保存低8位。若结果超出8位数的表示范围时,则高8位也包含乘积结果,应保存整个16位结果。

代码交流 2021