DSP浮点转定点方法总结

合集下载

DSP中浮点转定点运算--举例及编程中的心得

DSP中浮点转定点运算--举例及编程中的心得

DSP中浮点转定点运算--举例及编程中的⼼得5.举例及编程中的⼼得5.1举例 “第3章 DSP芯⽚的定点运算.doc”这篇⽂章中给了⼀个很简单有能说明问题的例⼦,不想动⼤脑了,直接引⽤过来如下。

这是⼀个对语⾳信号(0.3kHz~3.4kHz)进⾏低通滤波的C语⾔程序,低通滤波的截⽌频率为800Hz,滤波器采⽤19点的有限冲击响应FIR滤波。

语⾳信号的采样频率为8kHz,每个语⾳样值按16位整型数存放在insp.dat⽂件中。

例3.7 语⾳信号800Hz 19点FIR低通滤波C语⾔浮点程序复制代码代码如下:#include <stdio.h>const int length = 180 /*语⾳帧长为180点=22.5ms@8kHz采样*/void filter(int xin[ ],int xout[ ],int n,float h[ ]); /*滤波⼦程序说明*//*19点滤波器系数*/static float h[19]={0.01218354,-0.009012882,-0.02881839,-0.04743239,-0.04584568,-0.008692503,0.06446265,0.1544655,0.2289794,0.257883,0.2289794,0.1544655,0.06446265,-0.008692503,-0.04584568,-0.04743239,-0.02881839,-0.009012882,0.01218354};static int x1[length+20];/*低通滤波浮点⼦程序*/void filter(int xin[ ],int xout[ ],int n,float h[ ]){int i,j;float sum;for(i=0;i<length;i++) x1[n+i-1]=xin[i];for (i=0;i<length;i++){sum=0.0;for(j=0;j<n;j++) sum+=h[j]*x1[i-j+n-1];xout[i]=(int)sum;}for(i=0;i<(n-1);i++) x1[n-i-2]=xin[length-1-i];}/*主程序*/void main( ){FILE *fp1,*fp2;int frame,indata[length],outdata[length];fp1=fopen(insp.dat,"rb"); /*输⼊语⾳⽂件*/fp2=fopen(outsp.dat,"wb"); /*滤波后语⾳⽂件*/frame=0;while(feof(fp1)==0){frame++;printf("frame=%d/n",frame);for(i=0;i<length;i++) indata[i]=getw(fp1); /*取⼀帧语⾳数据*/filter(indata,outdata,19,h); /*调⽤低通滤波⼦程序*/for(i=0;i<length;i++) putw(outdata[i],fp2); /*将滤波后的样值写⼊⽂件*/}fcloseall( ); /*关闭⽂件*/return(0);}例3.8 语⾳信号800Hz 19点FIR低通滤波C语⾔定点程序复制代码代码如下:#include <stdio.h>const int length=180;void filter(int xin[ ],int xout[ ],int n,int h[ ]);static int h[19]={399,-296,-945,-1555,-1503,-285,2112,5061,7503,8450,7503,5061,2112,-285,-1503,-1555,-945,-296,399}; /*Q15*/static int x1[length+20];/*低通滤波定点⼦程序*/void filter(int xin[ ],int xout[ ],int n,int h[ ]){int i,j;long sum;for(i=0;i<length;i++) x1[n+i-1]=xin[i];for (i=0;i<length;i++){sum=0;for(j=0;j<n;j++) sum+=(long)h[j]*x1[i-j+n-1];xout[i]=sum>>15;}for(i=0;i<(n-1);i++) x1[n-i-2]=xin[length-i-1];}主程序与浮点的完全⼀样。

浮点转定点方法总结

浮点转定点方法总结

浮点转定点方法总结—孔德琦目录定点运算方法................................................ 错误!未定义书签。

数的定标 ............................................... 错误!未定义书签。

C语言:从浮点到定点 ................................. 错误!未定义书签。

加法.................................................... 错误!未定义书签。

乘法..................................................... 错误!未定义书签。

除法..................................................... 错误!未定义书签。

三角函数运算............................................ 错误!未定义书签。

开方运算................................................ 错误!未定义书签。

附录...................................................... 错误!未定义书签。

附录1:定点函数库...................................... 错误!未定义书签。

附录2:正弦和余弦表..................................... 错误!未定义书签。

定点运算方法数的定标对某些处理器而言,参与数值运算的数就是16位的整型数。

但在许多情况下,数学运算过程中的数不一定都是整数。

那么,如何处理小数的呢?应该说,处理器本身无能为力。

那么是不是就不能处理各种小数呢?当然不是。

这其中的关键就是由程序员来确定一个数的小数点处于16位中的哪一位。

关于dsp中程序定点数和浮点数转换问题(Q15格式)

关于dsp中程序定点数和浮点数转换问题(Q15格式)

关于dsp中程序定点数和浮点数转换问题(Q15格式)看ti的逆变器程序,看到采集后的ADBUF数据全部都是《5,这就搞不明白了,为什么要左移5呀?然后看到上面说是兼容Q15,在QQ群里也问了高手,说是用于DSP小数运算,于是在网上找了下Q15的定义,下面把Q15整理下。

许多DSP都是定点DSP,处理定点数据会相当快,但是处理浮点数据就会非常慢。

可以利用Q格式进行浮点数据到定点的转化,节约CPU时间。

实际应用中,浮点运算大都时候都是既有整数部分,也有小数部分的。

所以要选择一个适当的定标格式才能更好的处理运算。

Q格式表示为:Qm.n,表示数据用m比特表示整数部分,n比特表示小数部分,共需要m+n+1位来表示这个数据,多余的一位用作符合位。

假设小数点在n位的左边(从右向左数),从而确定小数的精度例如Q15表示小数部分有15位,一个short型数据,占2个字节,最高位是符号位,后面15位是小数位,就假设小数点在第15位左边,表示的范围是:-1<X<0.9999695 。

浮点数据转化为Q15,将数据乘以2^15;Q15数据转化为浮点数据,将数据除以2^15。

例如:假设数据存储空间为2个字节,0.333×2^15=10911=0x2A9F,0.333的所有运算就可以用0x2A9F 表示,同理10911×2^(-15)=0.332977294921875,可以看出浮点数据通过Q格式转化后是有误差的。

例:两个小数相乘,0.333*0.414=0.1378620.333*2^15=10911=0x2A9F,0.414*2^15=13565=0x34FDshort a = 0x2A9F;short b = 0x34FD;short c = a * b >> 15; //两个Q15格式的数据相乘后为Q30格式数据,因此为了得到Q15的数据结果需要右移15位这样c的结果是0x11A4=0001000110100100,这个数据同样是Q15格式的,它的小数点假设在第15位左边,即为0.001000110100100=0.1378173828125...和实际结果0.137862差距不大。

第7章DSP定点数和浮点数(重要)

第7章DSP定点数和浮点数(重要)

第7章D S P定点数和浮点数(重要)本期教程主要跟大家讲解一下定点数和浮点数的基础知识,了解这些基础知识对于后面学习ARM官方的DSP库大有裨益。

特别是初学的一定要理解这些基础知识。

7.1 定点数和浮点数概念7.2 IEEE浮点数7.3 定点数运算7.4总结7.1定点数和浮点数概念如果小数点的位置事先已有约定,不再改变,此类数称为“定点数”。

相比之下,如果小数点的位置可变,则称为“浮点数”(定点数的本质是小数,整数只是其表现形式)。

7.1.1定点数常用的定点数有两种表示形式:如果小数点位置约定在最低数值位的后面,则该数只能是定点整数;如果小数点位置约定在最高数值位的前面,则该数只能是定点小数。

7.1.2浮点数在计算机系统的发展过程中,曾经提出过多种方法表达实数。

典型的比如相对于浮点数的定点数(Fixed Point Number)。

在这种表达方式中,小数点固定的位于实数所有数字中间的某个位置。

货币的表达就可以使用这种方式,比如 99.00 或者 00.99 可以用于表达具有四位精度(Precision),小数点后有两位的货币值。

由于小数点位置固定,所以可以直接用四位数值来表达相应的数值。

SQL 中的 NUMBER 数据类型就是利用定点数来定义的。

还有一种提议的表达方式为有理数表达方式,即用两个整数的比值来表达实数。

定点数表达法的缺点在于其形式过于僵硬,固定的小数点位置决定了固定位数的整数部分和小数部分,不利于同时表达特别大的数或者特别小的数。

最终,绝大多数现代的计算机系统采纳了所谓的浮点数表达方式。

这种表达方式利用科学计数法来表达实数,即用一个尾数(Mantissa ),一个基数(Base),一个指数(Exponent)以及一个表示正负的符号来表达实数。

比如 123.45 用十进制科学计数法可以表达为 1.2345 × 102,其中 1.2345 为尾数,10 为基数,2 为指数。

浮点数利用指数达到了浮动小数点的效果,从而可以灵活地表达更大范围的实数。

DSP编程技巧之22详解浮点运算的定点编程

DSP编程技巧之22详解浮点运算的定点编程

DSP编程技巧之22详解浮点运算的定点编程我们使用的处理器一般情况下,要么直接支持硬件的浮点运算,比如某些带有FPU的器件,要么就只支持定点运算,此时对浮点数的处理需要通过编译器来完成。

在支持硬件浮点处理的器件上,对浮点运算的编程最快捷的方法就是直接使用浮点类型,比如单精度的float来完成。

但是在很多情况下,限于成本、物料等因素,可供我们使用的只有一个定点处理器时,直接使用float类型进行浮点类型的运算会使得编译器产生大量的代码来完成一段看起来十分简单的浮点数学运算,造成的后果是程序的执行时间显著加长,且其占用的资源量也会成倍地增加,这就涉及到了如何在定点处理器上对浮点运算进行高效处理的问题。

本文引用地址:/article/263475.htm 既然是定点处理器,那么其对定点数,或者说字面意义上的“整数”进行处理的效率就会比它处理浮点类型的运算要高的多。

所以在定点处理器上,我们使用定点的整数来代表一个浮点数,并规定整数位数和小数位数,从而方便地对定点数和浮点数进行转换。

以一个32位的定点数为例,假设转换因子为Q,即32位中小数的位数为Q,整数位数则为31-Q(有符号数的情况),则定点数与浮点数的换算关系为:定点数=浮点数×2^Q例如,浮点数-2.0转换到Q为30的定点数时,结果为:定点数=-2×2^30=-2147483648 32位有符号数的表示范围是:-2147483648到2147483647。

如果我们把有符号定点数的最大值2147483647转换为Q为30对应的浮点数,则结果为:浮点数2147483647/2^30=1.999999999 从上面的两个计算例子中也可以看出,在Q30格式的情况下,最大的浮点数只能表示到1.999999999,如果我们想把浮点数2.0转换为Q30的定点数,则产生了溢出,即造成了1e-9的截断误差。

在此我们列出Q0到Q30对应的范围和分辨率如下表所示:如果你嫌自己计算麻烦的话,可以借助Matlab的命令来求取它们的转换,例如,在Matlab的命令窗口中输入:q = quantizer('fixed', 'ceil', 'saturate', [32 30]);FixedNum=bin2dec(num2bin(q,1.999999999)); 回车之后就可以看到1.999999999转成Q30之后的定点数了。

剖析DSP编程优化的7个方法

剖析DSP编程优化的7个方法

剖析DSP编程优化的7个方法方法一把浮点运算改成定点运算因为C6x DSP板并不支持浮点运算,但我们的原始程序代码是浮点运算的格式,所以必须改成定点运算,而其修改后的执行速度也会加快很多。

我们采用Q-format 规格来表示浮点运算。

以下将介绍其相关原理。

定点DSP使用固定的小数点来表示小数部份的数字,这也造成了使用上的限制,而为了要分类不同范围的小数点,我们必须使用Q-format的格式。

不同的Q-format表示不同的小数点位置,也就是整数的范围。

Q15数字的格式,要注意在小数点后的每一位,表示下一位为前一位的二分之一,而MSB (most-significant-bit ) 则被指定成有号数( Sign bit )。

当有号数被设成0而其余位设成1时,可得到最大的正数(7FFFH ) ;而当有号数被设成1而其余位设成0时,可得到最大的负数( 8000H ) 。

所以Q15格式的范围从-1到0.9999694 (@1) ,因此我们可以藉由把小数点向右移位,来增加整数部份的范围,Q14格式的范围增为-2.0到1.9999694 (@2) ,然而范围的增加却牺牲了精确度。

方法二建立表格( table )原来程序的设计是除了要读AAC的档案外,在译码时,还要再另外读取一些C语言程序代码的内容再做计算,如读取一些数值做sin、cos、exp的运算,但是为了加快程序的执行速度,故将这这些运算的结果建成表格,内建在程序中,可以不必再做额外的计算动做,以加速程序。

方法三减短程序的长度1.去除Debug的功能原本程序在Debug的阶段时,就加了许多用来侦测错误的部份,程序Debug完后,已经没有错误发生,所以就可以把这些部份给去除,以减少程序的长度,也可以减少程序执行时的时脉数,加快程序的速度。

2.去除计算时脉( clock ) 功能原本程序可以计算执行程序所需的时脉数,我们也可以把这些部份给去除,如果有需要计。

定点DSP实现浮点运算时的定标问题

定点DSP实现浮点运算时的定标问题

程序变量的Q值确定--定点DSP实现浮点运算时的定标问题2008-08-27 18:45在前面几节介绍的例子中,由于x,y,z的值都是已知的,因此从浮点变为定点时Q值很好确定。

在实际的DSP应用中,程序中参与运算的都是变量,那么如何确定浮点程序中变量的Q值呢?从前面的分析可以知道,确定变量的Q值实际上就是确定变量的动态范围,动态范围确定了,则Q值也就确定了。

设变量的绝对值的最大值为|max|,注意|max|必须小于或等于32767。

取一个整数n,使满足2n-1<|max|<2n则有2-Q=2-15*2n=2-(15-n)Q=15-n例如,某变量的值在-1至+1之间,即|max|<1,因此n=0,Q=15-n=15。

既然确定了变量的|max|就可以确定其Q值,那么变量的|max|又是如何确定的呢?一般来说,确定变量的|max|有两种方法。

一种是理论分析法,另一种是统计分析法。

1. 理论分析法有些变量的动态范围通过理论分析是可以确定的。

例如:(1)三角函数。

y=sin(x)或y=cos(x),由三角函数知识可知,|y|<=1。

(2)汉明窗。

y(n)=0.54一0.46cos[nπn/(N-1)],0<=n<=N-1。

因为-1<=cos[2πn/(N-1)]<=1,所以0.08<=y(n)<=1.0。

(3)FIR卷积。

y(n)=∑h(k)x(n-k),设∑|h(k)|=1.0,且x(n)是模拟信号12位量化值,即有|x(n)|<=2^11,则|y(n)|<=2^11。

(4)理论已经证明,在自相关线性预测编码(LPC)的程序设计中,反射系数ki满足下列不等式:|ki|<1.0,i=1,2,...,p,p为LPC的阶数。

2. 统计分析法对于理论上无法确定范围的变量,一般采用统计分析的方法来确定其动态范围。

所谓统计分析,就是用足够多的输入信号样值来确定程序中变量的动态范围,这里输入信号一方面要有一定的数量,另一方面必须尽可能地涉及各种情况。

DSP学习笔记(二)——DSP中浮点数与定点数格式与运算处理

DSP学习笔记(二)——DSP中浮点数与定点数格式与运算处理

DSP学习笔记(⼆)——DSP中浮点数与定点数格式与运算处理DSP学习笔记(⼆)——DSP中浮点数与定点数格式与处理1 DSP中的数据表述DSP中数据通常是有定点数与表⽰,其中可以对字长进⾏相关定义,可以选取字长为16位、24位、32位不同字长使⽤。

⽽格式与字长决定了数据的精度与动态范围,同时也⼀定程度上决定了DSP处理器的功耗、成本与编程难度。

定点数:⼩数点位置为确定的。

浮点数:⼩数点位置可以改变。

定点运算的硬件实现较为简单,功耗较⼩,主要注意的是数据的定标、溢出以及误差。

器减结构较为复杂,但是精度较⾼,⾼级语⾔容易⽀持。

2 定点数的格式与相关运算2.1 定点数格式定点数格式:Q n 格式,n为⼩数位数。

即Q15 ,⼩数点右边有15个⼩数位,如果我们定义了⼀个长度为32位的数字,那么⼩数位为15,1位符号位,16位为整数位。

整数⼩数点固定在最后,定点数⼩数位固定使⽤上⽂的Q n 格式表⽰,两者都使⽤⼆进制补码形式表⽰。

例: Q4格式:01010011b=1·22+1·20+1·2-3+1·2-4=83/24=5.1875对于负数(最⾼位MSB为1),要先把它转化为⽆符号⼆进制数,再进⾏计算,最后加上负号。

图2-1 ⼆进制Q格式表⽰定点数与浮点数转化时需要使⽤2n 的关系进⾏转化。

转化关系如下图:图2-2 定点数与浮点数转化关系浮点数转换为定点数时,由于⼩数点后的位数有限,会产⽣截断误差。

2.2 数值范围与精度Qn 格式,字长为N数值范围: -2N-12n~2N-1-12n精度:12n由于符号位占1位,所以数据位为N-1,n越⼤范围越⼩,但精度越⾼。

图2-3 数值范围与精度2.3 动态范围数据格式中最⼤值与最⼩值之⽐即为动态范围。

N位定点数动态范围:分贝表⽰:dsp⼤多采⽤16位定点数,动态范围为90.3db。

Dsp⼤多采⽤16为定点数,运算硬件实现较为简单,更⼤动态范围应⽤可以使⽤拓展字长⽅式。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

表 1.1
Q 表示、S 表示及数值范围
从表 1.1 可以看出,同样一个 16 位数,若小数点设定的位置不同,它所表示的数也就 不同。例如: 16 进制数 2000H=8192,用 Q0 表示 16 进制数 2000H=0.25,用 Q15 表示 从表 1.1 还可以看出, 不同的 Q 所表示的数不仅范围不同, 而且精度也不相同。 Q 越大, 数值范围越小,但精度越高;相反,Q 越小,数值范围越大,但精度就越低。例如,Q0 的 数值范围是-32768 到+32767,其精度为 1,而 Q15 的数值范围为-1 到 0.9999695,精度为
一般情况,我们取 x,y 和 z 的定标值相同,即 Qx = Qy = Qz = Qa 。 所以定点加法可以描述为: short x, y, z ; //Qa z = add (x,y); //Qa
CII Technologies, Inc.
浮点转定点方法总结
函数 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 < = 2^15-1) ,可 以直接写为 z = x - y . 2. 结果超过 16 位表示范围 设 x 的 Q 值为 Qx,y 的 Q 值为 Qy,且 Qx>Qy,加法结果 z 的定标值为 Qz,则定点加法 为: int x,y; long temp,z; temp=y<<(Qx-Qy); temp=x+temp; z=temp>>(Qx-Qz),若 Qx≥Qz z=temp<<(Qz-Qx),若 Qx≤Qz 一般情况,我们取 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 ; //Qa z = L_sub (x,y); //Qa 函数 L_sub ( ) 有防饱和机制,如果可以确信 x - y 不会溢出(-2^31 <= z < = 2^31-1) , 可以直接写为 z = x - y . 3. 结果超过 32 位表示范围 这种情况下位数超出了标准 c 语言的数的表示范围,只能用数组来保存变量。 定点加法可以描述为: #define NN_DIGIT unsigned int NN_DIGIT x [digits], y [digits], z [digits] ;//Qa NN_Add (z, x, y, digits) ; //, Inc.
浮点转定点方法总结
定点运算方法
1.1 数 的 定 标
对某些处理器而言,参与数值运算的数就是 16 位的整型数。但在许多情况下,数学运 算过程中的数不一定都是整数。那么,如何处理小数的呢?应该说,处理器本身无能为力。 那么是不是就不能处理各种小数呢?当然不是。 这其中的关键就是由程序员来确定一个数的 小数点处于 16 位中的哪一位。这就是数的定标。 通过设定小数点在 16 位数中的不同位置,就可以表示不同大小和不同精度的小数了。 数的定标用 Q 表示法。表 1.1 列出了一个 16 位数的 16 种 Q 表示能表示的十进制数值范围 和近似的精度。
Q 表示 Q15 Q14 Q13 Q12 Q11 Q10 Q9 Q8 Q7 Q6 Q5 Q4 Q3 Q2 Q1 Q0 精度(近似) 0.00002 0.00005 0.0001 0.0002 0.0005 0.001 0.002 0.005 0.01 0.02 0.04 0.08 0.1 0.25 0.5 1 十进制数表示范围 -1≤X≤0.9999695 -2≤X≤1.9999390 -4≤X≤3.9998779 -8≤X≤7.9997559 -16≤X≤15.9995117 -32≤X≤31.9990234 -64≤X≤63.9980469 -128≤X≤127.9960938 -256≤X≤255.9921875 -512≤X≤511.9804375 -1024≤X≤1023.96875 -2048≤X≤2047.9375 -4096≤X≤4095.875 -8192≤X≤8191.75 -16384≤X≤16383.5 -32768≤X≤32767
- 15
1.2 c 语言:从浮点到定点
下面所描述的几种基本运算是浮点到定点转换中经常遇到的, 从中可以体会到一些基本 的技巧和方法。
1.2.1 加法
设浮点加法运算的表达式为: float x,y,z; z=x+y; 将浮点加法 / 减法转化为定点加法 /减法时最重要的一点就是必须保证两个操作数的定 标值一样。若两者不一样,则在做加法/减法运算前先进行小数点的调整。为保证运算精度, 需使 Q 值小的数调整为与另一个数的 Q 值一样大。此外,在做加法/减法运算时,必须注意 结果可能会超过 16 位表示,即数的动态范围。如果加法/减法的结果超出 16 位的表示范围, 则必须保留 32 位结果,以保证运算的精度。 1. 结果不超过 16 位表示范围 设 x 的 Q 值为 Qx,y 的 Q 值为 Qy,且 Qx>Qy,加法/减法结果 z 的定标值为 Qz,则 z=x+y
CII Technologies, Inc.
浮点转定点方法总结
1/32768 = 0.00003051。因此,对定点数而言,数值范围与精度是一对矛盾,一个变量要想 能够表示比较大的数值范围,必须以牺牲精度为代价;而想提高精度,则数的表示范围就相 应地减小。在实际的定点算法中,为了达到最佳的性能,必须充分考虑到这一点。 浮点数与定点数的转换关系可表示为:
z q 2 Qz = x q y q 2 z q = ( x q y q )2
( Q x Q y )

Q z ( Q x Q y )
所以定点表示的乘法为: short x; //Qx short y; //Qy int z ; //Qz z = L_mult(x, y) >> (Qx+Qy+1-Qz); 上式中 x 乘 y 的定标本来应该是 Qx + Qy, 但为了处理方便, 函数 L_mult( ) 多乘了一次 2,因此要再加 1。函数 L_mult ( ) 有防饱和机制,如果可以确信 z = x y 不会溢出(-2^31 <= z < = 2^31-1) ,可以直接写为 z = (xy) >>(Qx+Qy-Qz)。 2. 结果超过 32 位表示范围 这种情况下位数超出了标准 c 语言的数的表示范围,只能用数组来保存变量。 定点乘法可表示为: #define NN_DIGIT unsigned int NN_DIGIT x [digits]; NN_DIGIT y [digits]; NN_DIGIT z [2* digits]; NN_Mult (z, x, y, digits); 应注意的是以上 32 位乘法都是无符号数操作,如果需要做有符号数乘法,则需要根据 乘数的符号来判断。 例1 设 x = 18.4,y = 36.8,则浮点运算值为 z =18.4×36.8 = 677.12; 设 Qx = 10,Qy = 9,Qz = 5,所以 int x = 18841;//Q10 int y = 18841;//Q9 z = L_mult(18841, 18841)>>(10+9+1-5) = 354983281L>>14 = 21666; 因为 z 的定标值为 5,故定点 z = 21666 即为浮点的 z = 21666/32 = 677.08。 例2
Q 浮点数(x)转换为定点数( x q ): x q (int) x 2
定点数( x q )转换为浮点数(x): x (float ) x q 2
Q
例如,浮点数 x=0.5 ,定标 Q = 15 ,则定点数 x q = 0.5 32768 16384 ,式中 表示 下取整。反之,一个用 Q = 15 表示的定点数 16384 ,其浮点数为 16384 × 2 =16384/32768=0.5。
z q 2 Qz x q 2 Q x y q 2
Q y
= xq 2
Q x
yq 2
( Q x Q y )
2 Q x
= [ xq yq 2
zq [ xq yq 2
( Qx Q y )
( Qx Q y )
] 2 Qx

] 2 (Qz Qx )
CII Technologies, Inc.
目录
目录
定点运算方法.....................................................................................................................................2 1.1 数 的 定 标............................................................................................................................2 1.2 C 语言:从浮点到定点......................................................................................................3 1.2.1 加法...................................................................................................................................3 1.2.2 乘法....................................................................................................................................5 1.2.3 除法....................................................................................................................................6 1.2.4 三角函数运算...................................................................................................................7 1.2.5 开方运算...........................................................................................................................8 1.3 附录..........................................................................................................................................9 1.3.1 附录 1:定点函数库........................................................................................................9 1.3.2 附录 2:正弦和余弦表.................................................................................................. 18
相关文档
最新文档