在定点DSP系统中可否实现浮点运算?

  • shuxian
  • LV3工程师
  • |      2015-07-07 15:27:53
  • 浏览量 679
  • 回复:3
在定点DSP系统中可否实现浮点运算?
  • 0
  • 收藏
  • 举报
  • 分享
我来回复

登录后可评论,请 登录注册

所有回答 数量:3
youzizhile 2015-07-11
这个是必须的,要不就不叫数字信号处理器了,
0   回复
举报
发布
格古落 2015-07-07
在定点DSP上实现浮点运算 可以考虑用Q格式
举个例子说明定点算法本质:
首先明确:CPU计算整数比浮点方便迅速。
例如:两个小数相乘0.123*0.456,可以先将二者各乘以1000倍,变成123*456,方便CPU计算。算完之后,再将结果除以1000000,就是真实的结果了。
假设Q16定点算法,就是0.123*2^16*0.456*2^16,将两个数同时扩大2^16倍,算完之后,再除回去。为什么要2^16而不是乘以1000呢?因为以2为基数的乘除法在CPU里通过移位完成,相当迅速。
基本原理就是这样,不过实际应用的时候还要考虑溢出,余数效应等影响。

这个Q格式我在AD的采样数据这一次块用过了,主要是你要先确定你现在程序处理中所需要的数据范围,然后选择一种Q格式,而不是你现在想到用什么Q格式就是什么格式,虽然Q格式中提供了格式转换函数,但是这些函数不能随意乱用,否着会编译出错,一般都是整体确定了数据范围,然后在这个范围内确定相同的Q格式,然后就可以开始利用Q格式提供的函数进行体会平常的函数,这个工程需要注意的是Q格式函数中的形参需要的类型一定要和你所给的实参类型一致,如果不一样的话,一样要利用Q格式的格式转换函数转换成一样的。然后在进行计算。其中Q格式库德添加以及函数的利用方法可以本论坛很多好心人的杰作。
 
 
我这里用加法进行样例说明:

浮点到定点Xq=X*2^q
定点到浮点X=Xq/2^q

设x=0.5 y=3.1 则浮点运算的结果为z=x+y=0.5+3.1=3.6
Qx=15//为什么x=0.5要定标为Q15呢?因为Q15能表示的范围为-1<=X<=1-1/32768,精度为1/32768,目的是为了提高精度
Qy=13//原因同上
Qz=13//原因同上
x=0.5*2^15=16384//Q15定标
y=3.1*2^13≈25395//Q13定标

temp=25395<<2=101580//为什么要左移两位呢?把y扩大到相同的标尺上进行运行,说白了就是统一单位进行运算。呵呵
temp=x+temp=16384+101580=117964
z=(int)(117964L>>2)=29491//结果用Q13表示

因为z的Q为13,所以定点值z=29491即为z=29491/2^13≈3.59998≈3.6//精度高

同样是上面的运算,我用Q4定标计算
Qx=4 //Q4表示的范围-2048<=X<=2048-1/16,精度为1/16
Qy=4
Qz=4

x=0.5*2^4=8
y=3.1*16≈50
temp=8+50=58
z=58/16=3.625≈3.6//精度度低
转自:http://blog.sina.com.cn/s/blog_6d0b133f0100quhx.html
0   回复
举报
发布
冰山一角 2015-07-07
浮点数据Q化处理,运算完成后再还原为浮点数
我看STM32的DSP库中是这么处理浮点运算的,比如FFT和滤波算法。但实际测试时发现Q化处理的数据精度不高,误差有点大。
0   回复
举报
发布
x
收藏成功!点击 我的收藏 查看收藏的全部帖子