原创 Q格式(Q15)DSP上浮点数据定点化处理

2012-9-6 20:58 7040 6 7 分类: 处理器与DSP

 

许多DSP都是定点DSP,处理定点数据会相当快,但是处理浮点数据就会非常慢。可以利用Q格式进行浮点数据到定点的转化,节约CPU时间。实际应用中,浮点运算大都时候都是既有整数部分,也有小数部分的。所以要选择一个适当的定标格式才能更好的处理运算。

  Q格式表示为:Qm.n,表示数据用m比特表示整数部分,n比特表示小数部分,共需要m+n+1位来表示这个数据,多余的一位用作符合位。假设小数点在n位的左边(从右向左数),从而确定小数的精度

  例如Q15表示小数部分有15位,一个short型数据,占2个字节,最高位是符号位,后面15位是小数位,就假设小数点在第15位左边,表示的范围是:-1<X<0.9999695 。

  浮点数据转化为Q15,将数据乘以2^15;Q15数据转化为浮点数据,将数据除以2^15。

  例如:假设数据存储空间为2个字节,0.333×2^15=10911=0x2A9F,0.333的所有运算就可以用0x2A9F表示,同理10911×2^(-15)=0.332977294921875,可以看出浮点数据通过Q格式转化后是有误差的。

  例:两个小数相乘,0.333*0.414=0.137862

  0.333*2^15=10911=0x2A9F,0.414*2^15=13565=0x34FD

  short a = 0x2A9F;

  short b = 0x34FD;

  short c = a * b >> 15;  // 两个Q15格式的数据相乘后为Q30格式数据,因此为了得到Q15的数据结果需要右移15位

  这样c的结果是0x11A4=0001000110100100,这个数据同样是Q15格式的,它的小数点假设在第15位左边,即为0.001000110100100=0.1378173828125...和实际结果0.137862差距不大。或者0x11A4 / 2^15 = 0.1378173828125

 

 

Q格式的运算

  1> 定点加减法:须转换成相同的Q格式才能加减

 

  2> 定点乘法:不同Q格式的数据相乘,相当于Q值相加,即Q15数据乘以Q10数据后的结果是Q25格式的数据

 

  3> 定点除法:不同Q格式的数据相除,相当于Q值相减

 

  4> 定点左移:左移相当于Q值增加

 

  5> 定点右移:右移相当于Q减少

 

 

Q格式的应用格式

  实际应用中,浮点运算大都时候都是既有整数部分,也有小数部分的。所以要选择一个适当的定标格式才能更好的处理运算。一般用如下两种方法:

 

  1> 使用时使用适中的定标,既可以表示一定的整数复位也可以表示小数复位,如对于2812的32位系统,使用Q15格式,可表示-65536.0~65535.999969482区间内的数据。

 

  2> 全部采用小数,这样因为小数之间相乘永远是小数,永远不会溢出。取一个极限最大值(最好使用2的n次幂),转换成x/Max的小数(如果Max是取的2的 n次幂,就可以使用移位代替除法)。

 

 

dsp
PARTNER CONTENT

文章评论1条评论)

登录后参与讨论

用户377235 2015-11-11 16:08

相关推荐阅读
用户424600 2012-10-30 09:55
opencv1.0 SVM bug修复
VC6.0+opencv1.0 为了修复opencv1.0 关于 svm.save不能保存的问题: 打开D:\Program Files\OpenCV\ml\src\mlsvm.cpp ...
用户424600 2012-09-06 21:11
DSP运算的精华【转】
在应用DSP时,其实硬件一般都问题不 大,主要的是软件,是算法!下面的关于DSP运算的精华但愿有些价值! 一 DSP定点算数运算 1 数的定标 在定点DSP芯片中,采用定点数进行数值运算,其...
用户424600 2012-09-06 21:00
DSP定点小数
许多DSP芯片只支持整数运算,如果现在这些芯片上进行小数运算的话,定点小数运算应该是最佳选择了,此外即使芯片支持浮点数,定点小数运算也是最佳的速度选择。          在DSP世界中,由于...
我要评论
1
6
关闭 站长推荐上一条 /3 下一条