DSP浮点转定点方法总结

上传人:工**** 文档编号:489321228 上传时间:2022-10-23 格式:DOCX 页数:16 大小:44.04KB
返回 下载 相关 举报
DSP浮点转定点方法总结_第1页
第1页 / 共16页
DSP浮点转定点方法总结_第2页
第2页 / 共16页
DSP浮点转定点方法总结_第3页
第3页 / 共16页
DSP浮点转定点方法总结_第4页
第4页 / 共16页
DSP浮点转定点方法总结_第5页
第5页 / 共16页
点击查看更多>>
资源描述

《DSP浮点转定点方法总结》由会员分享,可在线阅读,更多相关《DSP浮点转定点方法总结(16页珍藏版)》请在金锄头文库上搜索。

1、目录定点运算方法 21.1 数 的 定 标 21.2 C 语言:从浮点到定点31.2.1 加法31.2.2 乘法51.2.3 除法61.2.4 三角函数运算71.2.5 开方运算81.3 附录 91.3.1 附录 1:定点函数库91.3.2 附录 2:正弦和余弦表18定点运算方法1.1 数 的 定 标对某些处理器而言,参与数值运算的数就是16 位的整型数。但在许多情况下,数学运 算过程中的数不一定都是整数。那么,如何处理小数的呢?应该说,处理器本身无能为力 那么是不是就不能处理各种小数呢?当然不是。这其中的关键就是由程序员来确定一个数的 小数点处于 16 位中的哪一位。这就是数的定标。通过设定

2、小数点在16 位数中的不同位置,就可以表示不同大小和不同精度的小数了。 数的定标用Q表示法。表1.1列出了一个16位数的16种Q表示能表示的十进制数值范围 和近似的精度。Q表示精度(近似)十进制数表示范围Q150.00002-1WXW0.9999695Q140.00005-2WXW 1.9999390Q130.0001-4WXW3.9998779Q120.0002-8WXW7.9997559Q110.0005-16WXW15.9995117Q100.001-32WXW31.9990234Q90.002-64WXW63.9980469Q80.005-128 WXW 127.9960938Q70.

3、01-256WXW255.9921875Q60.02-512WXW511.9804375Q50.04-1024WXW 1023.96875Q40.08-2048WXW2047.9375Q30.1-4096WXW4095.875Q20.25-8192WXW8191.75Q10.5-16384WXW16383.5Q01-32768WXW32767表1.1 Q表示、S表示及数值范围从表1.1 可以看出,同样一个16位数,若小数点设定的位置不同,它所表示的数也就 不同。例如:16进制数2000H=8192,用Q0表示16进制数2000H=0.25,用Q15表示从表1.1还可以看出,不同的Q所表示的数不

4、仅范围不同,而且精度也不相同。Q越大, 数值范围越小,但精度越高;相反,Q越小,数值范围越大,但精度就越低。例如,Q0的 数值范围是-32768至到+32767,其精度为1,而Q15的数值范围为-1到0.9999695,精度为1/32768 = 0.00003051。因此,对定点数而言,数值范围与精度是一对矛盾,一个变量要想 能够表示比较大的数值范围,必须以牺牲精度为代价;而想提高精度,则数的表示范围就相 应地减小。在实际的定点算法中,为了达到最佳的性能,必须充分考虑到这一点。 浮点数与定点数的转换关系可表示为:浮点数(X)转换为定点数(x ): x = (int)x*2qq q定点数(xq)

5、转换为浮点数(x): X = (float)x *2-Qqq例如,浮点数x=0.5,定标Q = 15,则定点数xq = Lo.5x32768J= 16384,式中L表示 q下取整。反之,一个用 Q = 15表示的定点数16384,其浮点数为16384 X 2T5= 16384/32768=0.5。1.2 c 语言:从浮点到定点下面所描述的几种基本运算是浮点到定点转换中经常遇到的,从中可以体会到一些基本 的技巧和方法。1.2.1 加法设浮点加法运算的表达式为:float x,y,z;z=x+y;将浮点加法/减法转化为定点加法/减法时最重要的一点就是必须保证两个操作数的定 标值一样。若两者不一样,

6、则在做加法/减法运算前先进行小数点的调整。为保证运算精度 需使Q值小的数调整为与另一个数的Q值一样大。此外,在做加法/减法运算时,必须注意 结果可能会超过16位表示,即数的动态范围。如果加法/减法的结果超出16位的表示范围, 则必须保留32位结果,以保证运算的精度。1 结果不超过 16 位表示范围设x的Q值为Qx, y的Q值为Qy,且QxQy,加法/减法结果z的定标值为Qz,则 z=x+y nz - 2-Qz 二 x - 2-Qx + y - 2-Qy qqq=x - 2-Qx + y - 2(Qx -Qy) - 2-Qxqq=x + y - 2(Qx-Qy) - 2-Qx nqqz = x

7、+ y - 2(Qx-Qy) - 2(-)q q q一般情况,我们取x,y和z的定标值相同,即Qx = Qy = Qz = Qa。所以定点加法可以描述为:short x, y, z ; /Qaz = add (x,y); /Qa函数add ()有防饱和机制,如果可以确信x + y不会溢出(-2人15 = z = 2人15-1),可 以直接写为 z = x + y .定点减法:short x, y, z ; /Qa z = sub (x,y); /Qa函数sub ()有防饱和机制,如果可以确信x - y不会溢出(-2人15 = z Qy,加法结果z的定标值为Qz,则定点加法 为:int x, y

8、; long temp, z;temp=y(Qx-Qy); temp=x+temp;z=temp(Qx-Qz),若 Qx 三 Qz z=tempvv(Qz-Qx),若 QxWQz一般情况,我们取x,y和z的定标值相同,即Qx = Qy = Qz = Qa。所以定点加法可以描述为:int x, y, z ; /Qa z = L_add (x,y); /Qa函数L_add ()有防饱和机制,如果可以确信x + y不会溢出(-2人31 = z = 2人31-1), 可以直接写为 z = x + y .定点减法:int x, y, z ; /Qaz = L_sub (x,y); /Qa函数L_sub

9、()有防饱和机制,如果可以确信x - y不会溢出(-2人31 = z (Qx+Qy+1-Qz);上式中x乘y的定标本来应该是Qx + Qy,但为了处理方便,函数L_mult()多乘了一 次2,因此要再加1。函数L_mult ()有防饱和机制,如果可以确信z = x y不会溢出(-2人31 =z (Qx+Qy-Qz)。2. 结果超过32位表示范围这种情况下位数超出了标准c语言的数的表示范围,只能用数组来保存变量。定点乘法可表示为:#define NN_DIGIT unsigned intNN_DIGIT x digits;NN_DIGIT y digits;NN_DIGIT z 2* digit

10、s;NN_Mult (z, x, y, digits);应注意的是以上32位乘法都是无符号数操作,如果需要做有符号数乘法,则需要根据 乘数的符号来判断。例1设 x = 18.4,y = 36.8,则浮点运算值为 z =18.4X36.8 = 677.12;设 Qx = 10, Qy = 9, Qz = 5,所以int x = 18841;/Q10int y = 18841;/Q9z = L_mult(18841, 18841)(10+9+1-5) = 354983281L14 = 21666;因为z的定标值为5,故定点z = 21666即为浮点的z = 21666/32 = 677.08。例2

11、设 x = 18.4, y = 36.8,则浮点运算值为 z =18.4X36.8 = 677.12;#define NN_DIGIT unsigned int设 Qx = 20, Qy = 20, Qy = 20, 所以NN_DIGIT x = 18.4 * (120); /Q20NN_DIGIT y = 36.8 * (120); /Q20NN_DIGIT z2; /Q20NN_Mult(z, &x, &y, 1); /Q40 NN_Rshift(z, z, 20, 1); /Q(40-20)1.2.3 除法1. 32位除法设浮点除法运算的表达式为:float x,y,z;z = x/y;

12、假设经过统计后被除数x的定标值为Qx,除数y的定标值为Qy,商z的定标值为Qz, 则z = x/y nx - 2-Qx z - 2-Qz = qnqy - 2 -QyqX - 2(Qz-Qx +QJz qy q所以定点表示的除法为:int x,y,z;z = L_shl(x, (Qz-Qx+Qy) )/y; /Qz2. 32 位以上的除法这种情况下位数超出了标准c语言的数的表示范围,只能用数组来保存变量。#define NN_DIGIT unsigned intNN_DIGIT x 2*digits; /QxNN_DIGIT y digits; /QyNN_DIGIT z digits; /Q

13、z NN_Lshift(x, x, (Qz-Qx+Qy), 2);NN_Div(z, x, 2*digits, y, digits);做以上运算是要保证Qz-Qx+Qy 32,否则要多次移位来实现;应注意的是以上除法都是无符号数操作,如果需要做有符号数除法,需要根据被除数和除数的符号来判断。例 1:设 x = 18.4, y = 36.8,浮点运算值为 z = x/y = 18.4/36.8 = 0.5;根据上节,得Qx = 10, Qy = 9, Qz = 15;所以有int x = 18841, y = 18841;z = L_shl(x, (15- 10+9) )/18841; / 3086

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 学术论文 > 其它学术论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号