打印

DSP定点算数运算,请各位大虾给指教一下!

[复制链接]
1330|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ccjchen|  楼主 | 2008-4-15 14:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
http://hi.baidu.com/fishandbear/blog/item/80262f734abd3c1c8601b052.html  这是我在网上搜到的关于DSP定点算数运算,刚开始学习有些不懂,以下是我从中摘抄的一部分,有 ? 的地方请大家帮指导一下!

加法/减法运算的C语言定点摸拟
设浮点加法运算的表达式为:
float x,y,z;
z=x+y;
将浮点加法/减法转化为定点加法/减法时最重要的一点就是必须保证两个操作数的定标
temp=x+temp; 
z=temp>>(Qx-Qz),若Qx>=Qz
z=temp<<(Qz-Qx),若Qx<=Qz 例1.4结果超过16位的定点加法
设x=l5000,y=20000,则浮点运算值为z=x+y=35000,显然z>32767,因此
Qx=1,Qy=0,Qz=0,则定点加法为:(Qx=1,Qy=0,Qz=0???为什么)
x=30000;y=20000;
temp=20000<<1=40000; (????)
temp=temp+x=40000+30000=70000;
z=70000L>>1=35000;(???这样算出来的结果不还是35000吗?)
     因为z的Q值为0,所以定点值z=35000就是浮点值,这里z是一个长整型数。当加法或加法的结果超过16位表示范围时,如果程序员事先能够了解到这种情况,并且需要保持运算精度时,则必须保持32位结果。如果程序中是按照16位数进行运算的,则超过16位实际上就是出现了溢出。如果不采取适当的措施,则数据溢出会导致运算精度的严重恶化。一般的定点DSP芯片都没有溢出保护功能,当溢出保护功能有效时,一旦出现溢出,则累加器ACC的结果为最大的饱和值(上溢为7FFFH,下溢为8001H),从而达到防止溢出引起精度严重恶化的目的。

相关帖子

沙发
zook0k| | 2008-4-15 15:17 | 只看该作者

多看看定点计算

Qx=1,Qy=0,Qz=0,则定点加法为:(Qx=1,Qy=0,Qz=0???为什么)
//因为x=l5000,y=20000,不同大小的数据有不同的q
x=30000;y=20000;
temp=20000<<1=40000; (????)
//计算前必须将双方规范化,Qx>Qy  如如此变化
temp=temp+x=40000+30000=70000;
z=70000L>>1=35000;(???这样算出来的结果不还是35000吗?)
//是,但是这样是通过dsp定点计算得到的

使用特权

评论回复
板凳
ccjchen|  楼主 | 2008-4-16 09:38 | 只看该作者

非常感谢 zookOk ,但是我还有点不明白

Qx=1是因为x=1500在-16384≤x≤16383.5范围内吗?
temp=20000<<1=40000;???这是因为当加数左移一位后,被加数也要随着左移一位,这就是你说的“计算前必须将双方规范化”对吗?
temp=temp+x=40000+30000=70000;//这是不是因为定点运算结果到第17位了,所以结果没错啊?如果不用定点运算结果就会溢出就是这个原因吗?
再请您给回答一下,谢谢!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

175

主题

446

帖子

1

粉丝