5 c54x定点运算Q格式

上传人:仙*** 文档编号:172235136 上传时间:2022-12-02 格式:PPT 页数:29 大小:284KB
收藏 版权申诉 举报 下载
5 c54x定点运算Q格式_第1页
第1页 / 共29页
5 c54x定点运算Q格式_第2页
第2页 / 共29页
5 c54x定点运算Q格式_第3页
第3页 / 共29页
资源描述:

《5 c54x定点运算Q格式》由会员分享,可在线阅读,更多相关《5 c54x定点运算Q格式(29页珍藏版)》请在装配图网上搜索。

1、 DSP DSP 芯片的定点数的表示及运算芯片的定点数的表示及运算不会运用不会运用Q Q格式的格式的DSPDSP程序员不是优秀的程序员!程序员不是优秀的程序员!定点处理器不能直接处理小数定点处理器不能直接处理小数举例:举例:表达精度为表达精度为0.01Hz的频率变量的频率变量f,处理小数的方法有三种:,处理小数的方法有三种:1)定义为)定义为float型。型。C语言的语言的抹平抹平作用,编程工作量小,作用,编程工作量小,编译后的代码长,运算速度慢,但精度高编译后的代码长,运算速度慢,但精度高。2)仍定义为整型()仍定义为整型(int或或long),采用放大若干倍数来表),采用放大若干倍数来表示

2、小数。比如示小数。比如100倍,若改为倍,若改为0.001Hz呢?呢?3)仍定义为整型()仍定义为整型(int或或long),采用定标法来确定小数。),采用定标法来确定小数。1、数的定标数的定标 由程序员来确定一个数的小数点处于由程序员来确定一个数的小数点处于16位或位或32位中的哪一位。位中的哪一位。常用常用Q格式来表示数的定标。格式来表示数的定标。0109876543211514 13 12 11Q00109876543211514 13 12 11Q15浮点数和定点数之间的转换公式:浮点数和定点数之间的转换公式:浮点数转换为定点数浮点数转换为定点数:xq=(int)(xf*2Q)定点数转

3、换为浮点数定点数转换为浮点数:xf=(float)(xq*2-Q)浮点数浮点数1.1转换成转换成16位定点数位定点数Q13格式格式 xq=(int)(1.1*213)=(int)9011.2=9011=2333h2、16位数的定标位数的定标1)16位有符号数的定标位有符号数的定标 计算机采用计算机采用2的补码存储有符号数。每个的补码存储有符号数。每个16位数用一个位数用一个符号位表示数的正负,其余符号位表示数的正负,其余15位表示数值的大小。最高位表示数值的大小。最高位是符号位,位是符号位,Q0-Q152)16位无符号数的定标位无符号数的定标 没有符号位,都是正数,没有符号位,都是正数,Q0-

4、Q16,理论上可以用理论上可以用Q16表示表示精度更高的小数,但常用精度更高的小数,但常用Q15,原因:,原因:简化,既可表示有符号又可表示无符号,简化,既可表示有符号又可表示无符号,Q15Q15精度已精度已足够;足够;防止变量以后变为有符号,留有余地。防止变量以后变为有符号,留有余地。表1 Q表示、S表示及数值范围从上表可以得知:从上表可以得知:1 1)Q Q值越大,数值范围越小,但精度越高,值越大,数值范围越小,但精度越高,范围与精度是一对矛盾;范围与精度是一对矛盾;2 2)同样一个)同样一个1616位数,若小数点设定的位置不位数,若小数点设定的位置不同,它所表示的数也不同。同,它所表示的

5、数也不同。2000H =8192;Q0 而而 2000H =0.25 ;Q15 以上是对以上是对16位来讲的,对于位来讲的,对于32位,定标表示位,定标表示的小数精度是一样的,但其整数范围不一样。的小数精度是一样的,但其整数范围不一样。有符号有符号 32位的位的Q15格式表示的范围为格式表示的范围为 -65536X 65535.99996953、Q15格式格式程序中最常用的是程序中最常用的是Q0和和Q15格式,小数之间相互做乘格式,小数之间相互做乘法仍是小数,永远不会溢出。法仍是小数,永远不会溢出。int a,b;/Q15int c;/Q15 c=(long)a*b)15;/一定要有一定要有“

6、(long)”TI公司的例程中的变量都使用了公司的例程中的变量都使用了Q格式,甚至还给出了格式,甚至还给出了一个一个Q 格式数据库格式数据库qmath.lib,包含倒数,正弦运算,包含倒数,正弦运算,可以免费下载。可以免费下载。C54xC54x采用采用2 2的补码表示小数,其最高位为符号位,数值范围的补码表示小数,其最高位为符号位,数值范围从从-1-11 1。一个。一个1616位位2 2的补码小数(的补码小数(Q15Q15格式)的每一位的权值格式)的每一位的权值为:为:MSBMSB(最高位)最高位)LSB LSB(最低位)最低位)-1.1/2 1/4 1/8 -1.1/2 1/4 1/8 2

7、2-15-15一个十进制小数乘以一个十进制小数乘以3276832768之后再将其十进制整数部分转换之后再将其十进制整数部分转换成十六进制数,就能得到这个十进制小数的成十六进制数,就能得到这个十进制小数的2 2的补码表示了。的补码表示了。1 1 7FFFh7FFFh0.50.5正数:乘以正数:乘以32768 32768 4000h4000h0 0 0000h0000h-0.5-0.5 负数:其绝对值部分乘以负数:其绝对值部分乘以3276832768,再取反加,再取反加1 C000h1 C000h-1-1 8000h8000h通过合适的通过合适的Q Q格式,可以把数值根据所需的精确度做格式,可以把

8、数值根据所需的精确度做适当地转换,以便定点数的适当地转换,以便定点数的DSPDSP也可以处理高精度的也可以处理高精度的浮点数。下面以浮点数。下面以Q15Q15为例,说明转换的过程。为例,说明转换的过程。1 1)先确定准备转换的十进制数值先确定准备转换的十进制数值N N,是在是在Q15Q15格式格式的数值范围之间,即的数值范围之间,即-1.000000N+0.999997-1.000000N+0.999997。2 2)数值数值N N乘以乘以2 21515,即,即N=NN=N2 21515=N=N32768327683 3)把步骤把步骤2 2)的结果加)的结果加2 21616,即,即N=N+2N=

9、N+21616=N+65536=N+65536。4 4)步骤步骤3 3)的结果转换成十六进制,并把第)的结果转换成十六进制,并把第1717位舍位舍弃掉,得到的结果就是弃掉,得到的结果就是N N的的Q15Q15转换值。转换值。下面通过把下面通过把-0.2345-0.2345及及+0.2345+0.2345转换成转换成Q15Q15格式来说格式来说明转换方法。明转换方法。-0.2345-0.2345的转换为:的转换为:-0.2345-0.234532768=-7684.1-768432768=-7684.1-7684-7684+65536=57852-7684+65536=5785257852578

10、52转换成十六进制数值为转换成十六进制数值为0E1FCh0E1FCh,所以结果为所以结果为E1FChE1FCh。+0.2345+0.2345的转换为:的转换为:0.23450.234532768=7684.1768432768=7684.176847684+65536=733207684+65536=733207332073320转换成十六进制数值为转换成十六进制数值为11E04h11E04h,并把第并把第1717位位舍弃掉,结果为舍弃掉,结果为1E04h1E04h。Q15定点小数乘法运算定点小数乘法运算n两个两个16位整数相乘,乘积总是位整数相乘,乘积总是“向左增长向左增长”,这,这就意味着

11、多次相乘后乘积将会很快超出定点器件就意味着多次相乘后乘积将会很快超出定点器件的数据范围。而且要将的数据范围。而且要将32位乘积保存到数据存储位乘积保存到数据存储器,就要耗费两个机器周期以及两个字的程序和器,就要耗费两个机器周期以及两个字的程序和RAM单元。然而,两个单元。然而,两个Q15的小数相乘,乘积总的小数相乘,乘积总是是“向右增长向右增长”,这就意味着超出定点器件数据,这就意味着超出定点器件数据范围的将是不太感兴趣的部分。范围的将是不太感兴趣的部分。以字长为以字长为4 4位和位和8 8位累加器为例,先看一个小数乘法的例子。位累加器为例,先看一个小数乘法的例子。0 1 0 00 1 0 0

12、(0.520.523 30.5=0.5=(4 4)1010=(01000100)2 2)1 1 0 1 1 1 0 1(-0.3752-0.37523 3(-0.375-0.375)=(-3-3)1010 0 1 0 00 1 0 0 =(11011101)补补)0 0 0 00 0 0 0 0 1 0 0 0 1 0 01 1 0 0 1 1 0 0 (-0100-0100)1 1 1 0 1 0 0 1 1 1 0 1 0 0(-0.1875=-12/2-0.1875=-12/26 6-12=-12=(11101001110100)补补)上述乘积是上述乘积是7 7位,当将其送到位,当将其送

13、到8 8位累加器时,为保持位累加器时,为保持乘积的符号,必须进行符号位扩展,这样,累加器中乘积的符号,必须进行符号位扩展,这样,累加器中的值为的值为1111010011110100(-0.09375=-12/2-0.09375=-12/27 7),出现了冗余符),出现了冗余符号位。原因是:号位。原因是:S x x x S x x x (Q3Q3)S y y y S y y y (Q3Q3)S S z z z z z z S S z z z z z z (Q6Q6格式)格式)即两个带符号数相乘,得到的乘积带有即两个带符号数相乘,得到的乘积带有2 2个符号位,个符号位,造成错误的结果。造成错误的结

14、果。同样,对于两个十六位数相乘,乘积只有同样,对于两个十六位数相乘,乘积只有3030位,在位,在最高的两位也是符号位,同样会造成错误的结果。最高的两位也是符号位,同样会造成错误的结果。小数乘法与冗余符号位小数乘法与冗余符号位解决冗余符号的办法是:在程序中设定状态寄存器解决冗余符号的办法是:在程序中设定状态寄存器ST1ST1中的中的FRCTFRCT(小数方式)位小数方式)位1 1,在乘法器将结果传送,在乘法器将结果传送至累加器时就能自动地左移至累加器时就能自动地左移1 1位,累加器中的结果为:位,累加器中的结果为:zzzzzz0zzzzzz0(Q7Q7格式),即格式),即111010001110

15、1000(-0.1875=-0.1875=-24/224/27 7-24=-24=(1110100011101000)补补),自动地消去了两个带),自动地消去了两个带符号数相乘时产生的冗余符号位。所以在小数乘法编符号数相乘时产生的冗余符号位。所以在小数乘法编程时,应当事先设置程时,应当事先设置FRCTFRCT位:位:SSBX FRCTSSBX FRCT MPY MPY *AR2,AR2,*AR3,AAR3,ASTH A,ZSTH A,Z这样,这样,C54xC54x就完成了就完成了Q15Q15*Q15=Q15Q15=Q15的小数乘法。的小数乘法。2 基于基于C语言的定点运算的基本原理语言的定点运

16、算的基本原理2.1加法加法/减法运算减法运算 必须保证两个操作数的定标值一样;必须保证两个操作数的定标值一样;小数点的调整,小数点的调整,Q 值小的调整;值小的调整;1结果不超过结果不超过16位表示范围位表示范围 设设x的的Q值为值为Qx,y的的Q值为值为Qy,且,且QxQy,加,加法法/减法结果减法结果z的定标值为的定标值为Qz,则,则 zx+y yxzQqQqQqyxz222xyxxQQQqQqyx222)(xyxQQQqqyx22)()()(22xzyxQQQQqqqyxz所以定点加法可以描述为:所以定点加法可以描述为:int x,y,z;long temp;/*临时变量临时变量*/te

17、mpy(QxQz),若若QxQzz(int)(temp(QzQx),若若Qx Qz设设x0.5,y3.1,则浮点运算结果为,则浮点运算结果为zx+y0.5+3.13.6;Qx15,Qy13,Qz13,则定点加法为:,则定点加法为:x16384;y25395;temp253952)29491;因为因为z的的Q值为值为13,所以定点值,所以定点值z29491即为浮点值即为浮点值z29491/81923.6。设设x3.0,y3.1,则浮点运算结果为,则浮点运算结果为zx-y3.0-3.1-0.1;Qx13,Qy13,Qz15,则定点减法为:,则定点减法为:x24576;y25295;temp2539

18、5;tempx-temp24576-25395-819;因为因为QxQz,故,故 z(int)(-819Qy,加法结果,加法结果z的定标值为的定标值为Qz,则定点加法为:则定点加法为:int x,y;long temp,z;tempy(Qx-Qz),若,若QxQzztemp32767,因此,因此Qx1,Qy0,Qz0,则定点加法为:,则定点加法为:x30000;y20000;temp20000135000;因为因为z的的Q值为值为0,所以定点值,所以定点值z=35000就是浮点值,这里就是浮点值,这里z是一个长整型数。是一个长整型数。2.2 乘法运算乘法运算设浮点乘法运算的表达式为:设浮点乘法

19、运算的表达式为:float x,y,z;z=xy;假设经过统计后假设经过统计后x的定标值为的定标值为Qx,y的定标值为的定标值为Qy,乘,乘积积z的定标值为的定标值为Qz,则,则z=xy =zQqz2)(2yxQQqqyxqz)(2)(yxzQQQqqyx=所以定点表示的乘法为:所以定点表示的乘法为:int x,y,z;long temp;temp=(long)x;z=(tempy)(Qx+Qy-Qz);定点乘法定点乘法设设x=18.4,y=36.8,则浮点运算值为,则浮点运算值为z=18.436.8=677.12;根据上节,得根据上节,得Qx=10,Qy=9,Qz=5,所以,所以x=1884

20、1;y=18841;temp=18841L;z=(18841L*18841)(10+9-5)=354983281L14=21666;因为因为z的定标值为的定标值为5,故定点,故定点 z=21666即为浮点的即为浮点的 z=21666/32=677.08。2.3除法运算除法运算 设浮点除法运算的表达式为:设浮点除法运算的表达式为:float x,y,z;z=x/y;假设经过统计后被除数假设经过统计后被除数x的定标值为的定标值为Qx,除数,除数y的定的定标值为标值为Qy,商,商z的定标值为的定标值为Qz,则,则z=x/y =zQqz2yxQqQqyx22qQQQqqyxzyxz)(2所以定点表示的

21、除法为:所以定点表示的除法为:int x,y,z;long temp;temp=(long)x;z=(temp(Qz-Qx+Qy)/y;定点除法定点除法设设x=18.4,y=36.8,浮点运算值为,浮点运算值为z=x/y=18.4/36.8=0.5;根据上节,得根据上节,得Qx=10,Qy=9,Qz=15;所以有;所以有x=18841,y=18841;temp=(long)18841;z=(18841L(15-10+9)/18841=308690944L/18841=16384;因为商因为商z的定标值为的定标值为15,所以定点,所以定点z=16384即为浮点即为浮点 z=16384/215=0.5。

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!