DSP 定点乘法运算
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
除法
加法 定点运算
乘法
减法
定点乘法的现实及原理
设浮点乘法运算的表达式为: float x,y,z; z = xy; 假设经过统计后x的定标值为Qx,y的定标值为Qy,乘积z的定标值为 Qz,则
故定点乘法表示为: int x , y , z ; long temp; temp=(long)x z=(temp×y)>>(Qx+Qy-Qz)
Q越大,数值范围越小,但精度 越高;相反,Q越小,数值范围 越大,但精度就越低。
浮点数X与定点数Xq的转换
xq (int)x 2Q
x (float)xq 2Q
例子:
浮点数X=0.5,定标 Q=15, 则定点数 Xq=[0.5×32768]=16384,[] 中表示下取整。反之,一个用 Q=15 表示的定点数16384, 其浮点数为16384×2^(-15) =16384/32768=0.5
数的标定及Q值确定
数的标定即由程序员来确定1个数的小数点处于16位数的哪一位。 S表示法
数标定的方法 Q表示法
Q值得确定(Q0-Q15)
从表3.1可以看出,同样一个16位数, 若小数点设定的位置不同,它所表示 的数也就不同。 例如: 16进制数2000H=8192,用Q0表 示 1示6进制注范意围数:不20不同0同,0H的而=且Q0所精.2表度5示,也的不用数相Q不同15仅.8,则浮点运算值 为 z =18.4×36.8 = 677.12; 根据上节,得Qx = 10,Qy = 9,Qz = 5,所以 x = 18841;y = 18841; temp = 18841L; z = (18841L*18841)>>(10+9-5) = 354983281L>>14 = 21666; 因为z的定标值为5,故定点 z = 21666 即为浮点的 z = 21666/32 = 677.08
定点CPU计算中的小数乘法 实现及基本原理
讲解人:吴益芬
流程
为何需要定点计算? 数的定标及Q值确定? 定点乘法的实现及原理? 会出现的问题及办法?
定点小数的概念
所谓定点小数,实际上就是用整数来进行小数的运算。 在定点DSP芯片中,采用定点数进行数值运算,其操作 数一般采用整型数来表示。 DSP芯片的数以2的补码形式 表示。每个16位数用一个符号位来表示数的正负,0表示 数值为正,1则表示数值为负。其余15位表示数值的大小。 因此 二进制数0010000000000011b=8195 二进制数1111111111111100b=-4
可能出现的问题及处理
当加法或加法的结果超过16位表示范围时,也就是出现了溢出。
例如:
a=32765=0111111111111101B
b=4=0000000000000100B
c=a+b=0111111111111101B+0000000000000100B
=1000000000000001B
对于有符号整数,c实际等于-32767,而希望得到的结果是32769, 出现上溢。数据溢出会导致运算精度的严重恶化。一般的定点DSP 芯片都设有溢出保护功能,当溢出保护功能有效时,一旦出现溢出, 则累加器ACC的结果为最大的饱和值(上溢为7FFFH,下溢为 8001H),从而达到防止溢出引起精度严重恶化的目的。