3.定点浮点

2019-04-17  本文已影响0人  wit_yuan

1.简介(几个公式)

在很多的dsp芯片上不含有浮点单元,所以,为了计算小数,就会必不可少的使用定点的概念。首先,要有一个概念,定点其实就是意淫一个小数点,来处理小数。

定点浮点的知识其实比较简单,其面对的问题主要是处理器芯片是否含有浮点处理单元区分,对于做嵌入式的人来说,大部分情况下用的定点就可以认为是整数,浮点就是小数。

但是,为了让没有浮点处理能力的芯片也能运算小数,一些人呢就找到了一个意淫的方法:在整数点里面找个小数的位置,也就称为定标。通俗点说,就是你认为哪个位置是小数点位置,哪个位置就是小数点。

有2种大家都认同的计小数点位置的方法,主要还是Q值法,所以只说Q值法。

比如一个16位的数,定标Q15,就表示小数位数为15,最高位为符号位。

举一个例子,一个16位数的最大最小值:
最大值是在Q0产生,值为:y=(2^{15}-1),故通用的最大值计算方法为:y=(2^{15}-1) * 2^{-Q},说通用是由于定标位置是可变的。

最小值也是在Q0中产生的,最小值为:y=-2^{15},所有通用的最小值公式为:y=-2^{15-Q}

这两个公式的精度可以用一个公式来表示:2^{-Q},其表达的意思就是小数点越多,精度越高。

下面考虑的就是定点浮点之间的转换了。

公式可以如下:
浮点转定点:y=x*2^{Q}
定点转浮点:y=x*2^{-Q}

估计,该公式对于做嵌入式的工程师来说,乍看确实如此,但是我们用一个实例做一下分析,例如一个小数0.6,使用Q15记法,转为定点值为:0.6*2^{15}=19660.8,使用向下取整,值为19660。接着反过来再算一下,使用19660*2^{-15}=0.5999755859,本来Q15的精度为2^{-15}=0.0000305175,而现在差值为:0.6-0.5999755859=0.000024414,对比向上取整,值则为19661,则浮点值为:19661*2^{-15}=0.600006103515625,差值为:
0.600006103515625-0.6=0.000006103515625,故而精度提高了很多。

因此,总结一点,浮点转定点的时候,需要修改公式:
浮点转定点:y=x*2^{Q}+0.5,然后再采取向下取整。

2.dsp处理定点的计算

在dsp中,有两个功能是必备的,一个是溢出保护,一个是乘累加在一个周期中完成。

3.参考资料

关于这节,其实有一本非常好的实用书籍:《语音信号处理及Blackfin DSP实现》。

上一篇 下一篇

猜你喜欢

热点阅读