定点转浮点的Qn定义及计算公式方法
002 定点计算
确定变量的Q值实际上就是确定变量的动态范围 设变量的绝对值的最大值为|max|,注意|max|必须小于 或等于32767。取一个整数n,使它满足2n-1 <|max|<2n,则 有2-Q=2-15× 2n =2-(15-n),Q = 15-n。 确定变量的|max|有两种方法:一种是理论分析法,另 一种是统计分析法。
z = (temp*y) >> (Qx+Qy-Qz); z = (temp*y) << (Qz-Qx+Qy);
练习题
将下列数据表示为Q1~Q15的定点数 2.35647 15.3633 0.02698 4.39865 72.965912 0.29516 0.00395
例1:浮点加法,z=x+y,x,y,z为浮点数 先由x,y,z的数据范围算出其Q值,Qx,Qy,Qz zq*2-Qz=xq*2-Qx+yq*2-Qy=[xq+yq*2(Qx-Qy) ]*2-Qx zq=[xq+yq*2(Qx-Qy) ]*2Qz-Qx
int xq,yq,zq; long temp; /*临时变量*/ if(Qx≥Qy) temp=y<<(Qx-Qy); if(Qx<Qy) temp=y>>(Qy-Qx); zq=(xq << (Qz-Qx)) +(temp << (Qz-Qx));
例1:x=0.5,16bit定点化,取Q15, xq=0.5*215=16384 例2:x=4,16bit定点化,取Q12, xq=4*212=16384
特别地,整数可看作为Q0的小数。
浮点运算的定点化
对浮点运算进行定点化的方法是根据算法原理分析运 算公式左右两侧每一个数据的取值范围,为每一个数据确定 相应的Q值,再进行运算,运算规则为: 1. 定点加减法,需转换成相同的Q值才能加减 2. 定点乘法,不同Q值的数据相乘,相当于Q值相加,即 Q15数据乘以Q10数据结果为Q25数据 3. 定点除法,不同Q值数据相除,相当于Q值相减 4. 定点左移,相当于Q值增大 5. 定点右移,相当于Q值减小
计算机中数据有定点数和浮点数两种表达方式
计算机中数据有定点数和浮点数两种表达⽅式⼀、我们先来了解⼀下概念:(1)定点数:⼩数点固定在某个位置上的数据。
就好像 0.0000001 ,0.0001111;(2)浮点数:⼩数点位置可以浮动的数据。
就像数学中的 1222.2*10^3也可以表⽰为1.2222*10^6;浮点数表达式:N=M*R^E;N为浮点数,M为尾数(mantissa),E也阶码(exponent),R为阶的基数,也就是底数啦,就像上⾯的10,不过咱们计算机⾥的底数不会是10的。
R通常是⼀个常数,⼀般是2、8、16。
在⼀台计算机⾥,所有数据中的R是确定,且相同的。
⼆、定点数表达式:⼗进制 130.8125 = 10000010.1101 ⼆进制三、定义:⼩数点符号“.”不再表⽰出来,⽽是约定在默认的固定位置;定点数分为有符号数和⽆符号数;⽆符号数:没有符号位,字中所有的位均表⽰量值,范围0~2-1;有符号数:最左边⼀位为符号位(0 正,1 负),其余位数代表它的量值;m.n=1.23 符号位⼀位为0,量值位 23-bit=4-bit*5+3bit=ox*5+111=fffff+4+2+1=fffff+7=ox7fffff;有符号定点数: 纯⼩数纯整数m.n表⽰范围0<=|x|<=1-2^(-n)0<=|x|<=2^n-10<=|x|<=2^n-2^(-n)有效精度位数n-1位n-1位n-1位最⼩变化量2^(-n)12^(-n)四、数值的补码表⽰也分两种情况:(1)正数的补码:与原码相同。
例如,+9的补码是00001001。
(2)负数的补码:符号位为1,其余位为该数绝对值的原码按位取反;然后整个数加1。
例如,-7的补码:因为是负数,则符号位为“1”,整个为10000111;其余7位为-7的绝对值+7的原码0000111按位取反为1111000;再加1,所以-7的补码是11111001。
已知⼀个数的补码,求原码的操作分两种情况:(1)如果补码的符号位为“0”,表⽰是⼀个正数,所以补码就是该数的原码。
定点和浮点数表示
带符号整数:
n+1位
S
|N|≤2n-1
符号位
不带符号整数: n+1
小数点
0≤|N|≤2n+1-1
小数点
(3) 浮点数
浮点数表示法对应于科学(指数)计数法,在计算机中一个浮点数 由两部分构成:阶码和尾数,阶码是指数,尾数是纯小数.
存储格式:
阶符 阶码 数符 尾数
•阶码只能是一个带符号的整数,用来指示尾数中的小数点应当向左 或向右移动的位数,阶码本身的小数点约定在阶码最右面. •尾数表示数值的有效数字,其本身的小数点约定在数符和尾数之间
. •浮点数的正.负是由尾数的数符确定,而阶码的正.负只决定小数点 的位置,即决定浮点数的绝对值大小. •尾数的位数决定数的精度,阶码的位数决定数的范围.
设尾数为4位,阶码为2位,则二进制数N = 101.1(B)的浮点数表示 形式为:
0
11
0 1011ຫໍສະໝຸດ 阶符 阶码 数符 尾数 该数二进制数科学表示法为:N = 0.1011 × 211
四.二进制数在计算机中的表示
1.数的定点和浮点表示
(1)定点小数 指小数点准确固定在数据某一位置上的小数. 一般固定在最高数据位的左边,小数点前边再设一位符号位.
表示方法 N=NsN-1N-2…N-m其中Ns为符号位
S 符号位
小数点
m + 1位 |N|≤1-2-m
(2)定点整数 整数分带符号和不带符号两类,分别表示如下:
关于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章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 为指数。
浮点数利用指数达到了浮动小数点的效果,从而可以灵活地表达更大范围的实数。
第3讲 定点运算及浮点运算
定点数转换为浮点数
x float xq 2Q
浮点数 x=0.5,定标 Q=15, 则定点数=0.5*32768=16384
Q表示 Q15
S表示 S0.15
十进制数表示范围 -1≤X≤0.9999695
Q14
. . . . . . Q1 Q0
S1.14
. . . . . . S14.1 S15.0
定点加法
被加数 加数
0 0 X X X X X X X X X X X X X X
0 0 X X X X X X X X X X X X X X
无溢出 被加数 加数
0 1 X X X X X X X X X X X X X X
0 1 X X X X X X X X X X X X X X
有溢出
定点加法
Q表示法16进制数2000H
Q0表示为8192
0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0
符 号 位
Q15表示为0.25
小数点的位置
0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0
小数点的位置
浮点数与定点数的转换关系
浮点数转换为定点数
xq int x 2Q
提高查表法的精度 扩大自变量范围
混合法
提高查表法的精度
扩大查表法的范围
设:表的范围为0.5 ~ 1 ,X为大于0.5的数 则:X m 2e 式中, 0.5 m 1 ,e为整数 log 2 ( X ) log 2 (m 2e ) log 2 (m ) log 2 (2e ) log 2 (m ) e 例如: log 2 (10000) log 2 (0.61035 214 ) log 2 (0.61035) 14 13.2877
c语言定点数转浮点数函数
c语言定点数转浮点数函数
在C语言中,我们可以使用以下函数将定点数转换为浮点数:
c.
float fixedToFloat(int fixedNum, int fracBits) {。
return fixedNum / (float)(1 << fracBits);
}。
在这个函数中,`fixedNum`是定点数,`fracBits`是小数部分
的位数。
我们首先将`fixedNum`除以2的`fracBits`次方,然后将
结果转换为浮点数并返回。
另外,还有一些其他方法可以实现定点数到浮点数的转换,比
如直接使用移位操作或者乘以适当的倍数来实现。
但是上面的方法
是一种简单且常用的实现方式。
需要注意的是,定点数和浮点数在表示方式和精度上有所不同,
因此在进行转换时需要特别小心,以确保精度不会丢失。
另外,还
需要考虑溢出和舍入误差等问题,以保证转换的准确性。
总的来说,定点数到浮点数的转换需要根据具体的需求和应用
场景来选择合适的方法,并且在实现时需要注意精度和溢出等问题。
一文了解FPGA浮点小数与定点小数的换算及应用
一文了解FPGA浮点小数与定点小数的换算及应用定点小数运算有些FPGA中是不能直接对浮点数进行操作的,只能采用定点数进行数值运算。
所谓定点小数就是把小数点的位置固定,我们要用整数来表示小数。
先以10进制为例。
如果我们能够计算12+34=46的话,当然也就能够计算1.2+3.4 或者0.12+0.34了。
所以定点小数的加减法和整数的相同,并且和小数点的位置无关。
乘法就不同了。
12*34=408,而1.2*3.4=4.08。
这里1.2的小数点在第1位之前,而4.08的小数点在第2位之前,小数点发生了移动。
所以在做乘法的时候,需要对小数点的位置进行调整?!可是既然我们是做定点小数运算,那就说小数点的位置不能动!!怎么解决这个矛盾呢,那就是舍弃最低位。
也就说1.2*3.4=4.1,这样我们就得到正确的定点运算的结果了。
所以在做定点小数运算的时候不仅需要牢记小数点的位置,还需要记住表达定点小数的有效位数。
上面这个例子中,有效位数为2,小数点之后有一位。
现在进入二进制。
我们的定点小数用16位二进制表达,最高位是符号位,那么有效位就是15位。
小数点之后可以有0 - 15位。
我们把小数点之后有n位叫做Qn,例如小数点之后有12位叫做Q12格式的定点小数,而Q0就是我们所说的整数。
Q12的正数的最大值是0 111 。
111111111111,第一个0是符号位,后面的数都是1,那么这个数是十进制的多少呢,很好运算,就是0x7fff / 2= 7.999755859375。
对于Qn格式的定点小数的表达的数值就它的整数值除以2。
在计算机中还是以整数来运算,我们把它想象成实际所表达的值的时候,进行这个运算。
反过来把一个实际所要表达的值x转换Qn型的定点小数的时候,就是x*2了。
例如0.2的Q12型定点小数为:0.2*2= 819.2,由于这个数要用整数储存,所以是819 即0x0333。
因为舍弃了小数部分,所以0x0333不是精确的0.2,实际上它是819/2=0.199951171875。
Q格式数据运算
Q格式数据运算1、浮点数与定点数的转换关系可表示为浮点数(x)转换为定点数(xq):=(int)*2Q xq x定点数(xq)转换为浮点数(x):=(float)2Qxq x2 加法/减法运算的C语言定点摸拟设浮点加法运算的表达式为:float x,y,z;z=x+y;将浮点加法/减法转化为定点加法/减法时最重要的一点就是必须保证两个操作数的定标temp=x+temp;z=temp>>(Qx-Qz),若Qx>=Qzz=temp<<(Qz-Qx),若Qx<=Qz例1.4结果超过16位的定点加法设x=l5000,y=20000,则浮点运算值为z=x+y=35000,显然z>32767,因此Qx=1,Qy=0,Qz=0,则定点加法为:x=30000;y=20000;temp=20000<<1=40000;temp=temp+x=40000+30000=70000;z=70000L>>1=35000;3 定点乘法设浮点乘法运算的表达式为:float x,y,z;z = xy;假设经过统计后x的定标值为Qx(比如Q10),y的定标值为Qy,乘积z的定标值为Qz,则定点表示的乘法为:int x,y,z;long temp;temp = (long)x;z = (temp×y) >> (Qx+Qy-Qz);例1.9 Q15*Q15=Q300.5*0.5=0.250.100000000000000;Q15* 0.100000000000000;Q15--------------------------------------------00.010000000000000000000000000000=0.25;Q30两个Q15的小数相乘后得到一个Q30的小数,即有两个符号位。
一般情况下相乘后得到的满精度数不必全部保留,而只需保留16位单精度数。
DSP-定点和浮点数格式解析
① 小数乘小数(n、m≠0,m≤ n) ② 整数乘小数(n≠0、m=0) ③ 整数乘整数(n=m=0)
① 小数乘小数(n、m≠0,m≤ n)
例:两个8位数相加,有溢出 进位位与最高位(MSB)不同 运算结果发生溢出,8位字长已不能正确地表示结果
10110000b( -80) + 10111111b( -65) 非饱和模式:101101111bቤተ መጻሕፍቲ ባይዱ-145)
00101001b( 41) + 01110011b(115) 非饱和模式:010011100b(156)
2)数值范围与精度
给定字长N,采用Qn格式表示小数
2 N 1 2 N 1 1 数值范围: n ~ 2 2n
精
度:
1
2n
16位字长Qn格式的数值范围与精度
Qn格式 Q15 数值范围 -1~0.999969482421875 精度 0.000030517578125
Q14
饱和模式:110000000b(-128)
饱和模式:001111111b(127)
溢出是由于字长有限,运算结果超出数值的表示范围引 起的
饱和模式
定点数减法运算的原理与加法运算相同
2)定点数的乘法运算
DSP处理器都有硬件乘法器和乘法指令,可实现单周期乘 法运算 二进制乘法运算包含一系列的移位和加法运算 定点数乘法运算不要求相乘数有相同的Qn格式 两个相乘数分别为Qn和Qm格式,字长为N,结果为 Q(n+m)格式,字长为2N 根据n和m的不同取值,定点数乘法运算可以分成三种情况
DSP 运算基础
• 1、 DSP的数据表示
• 2、定点数的格式与运算 • 3、浮点数的格式与运算
第3讲 定点运算及浮点运算汇总
结果超过16位的定点加法
例子: 设x=15000,y=20000,则浮点运算结果为z
=x+y=15000+20000=35000,显然z>32767; Qx=1,Qy=0,Qz=0,则定点加法为: x=30000;y=20000; temp=20000<<1=40000; temp=temp+x=40000+30000=70000; z=70000L>>1=35000;
除法运算的C语言定点模拟
z = x/y
zq 2Qz=
xq 2Qx yq 2Qy
zq
xq
2(Qz Qx Qy ) yq
float x,y,z; z = x/y;
int x,y,z;
long temp;
temp = (long)x;
z = (temp<<(Qz-Qx+Qy))/y;
定点除法
0010000000000000
小数点的位置
浮点数与定点数的转换关系
浮点数转换为定点数
xq int x 2Q
定点数转换为浮点数
x floatxq 2Q
浮点数 x=0.5,定标 Q=15, 则定点数=0.5*32768=16384
Q表示 Q15 Q14
. . . . . .
Q1 Q0
DSP芯片的数以2的补码形式表示 数的定标:“小数点” 的位置 Q表示法和S表示法 对定点数而言,数值范围与精度是一对矛盾,一 个变量要想能够表示比较大的数值范围,必须以 牺牲精度为代价。
Q表示法16进制数2000H
Q0表示为8192
0010000000000000
符
号 位 Q15表示为0.25
定点运算 浮点运算 嵌入式
定点运算浮点运算嵌入式浮点运算与定点运算是嵌入式系统中两种常见的数值表示与计算方式。
本文将重点讨论定点运算在嵌入式系统中的应用。
1. 定点运算概述定点运算是指使用整数来表示和计算数据的一种方法。
在嵌入式系统中,由于资源有限,使用定点运算可以减少计算量,提高系统性能。
定点运算适用于一些不需要高精度计算的场景。
2. 定点数表示在定点运算中,我们需要选择合适的定点数表示形式。
常见的定点数表示形式有Q格式和补码格式。
Q格式是一种带有小数点位数的定点数表示方法,可以通过设置小数位数来控制数值的精度。
补码格式是一种常见的整数表示方法,可以表示正数和负数。
3. 定点运算原理定点运算的核心原理是将浮点数转换为定点数,并通过定点数之间的运算来实现数值计算。
在定点运算中,我们需要注意数据溢出和精度损失的问题。
同时,还需要考虑定点数之间的位移操作、溢出处理以及舍入策略的选择。
4. 定点运算的优势与应用相比于浮点运算,定点运算具有计算速度快、占用存储空间少的优势。
因此,在一些嵌入式系统中,特别是对计算速度要求较高的系统中,定点运算被广泛应用。
例如,在信号处理、图像处理和音频处理等领域,定点运算可以有效地提升系统的性能和效率。
5. 定点运算的局限性与克服方法尽管定点运算在嵌入式系统中具有广泛的应用,但也存在一些局限性。
定点运算对数值精度要求较高,容易出现溢出和精度损失的问题。
为了克服这些问题,我们可以采用增加定点数位数、使用更高精度的算法以及优化定点数表示等方法。
本文简要介绍了定点运算在嵌入式系统中的应用。
定点运算作为一种有效的数值计算方法,具有计算速度快、资源占用少的优势。
在实际应用中,我们需要根据具体的系统需求选择合适的定点数表示方法,并结合定点运算的原理和优化技巧,来提高嵌入式系统的性能和效率。
以上为本文对定点运算浮点运算嵌入式的简要介绍,希望能够对读者理解和应用定点运算提供一定的指导和帮助。
定点转浮点的Qn定义及计算公式方法
定点转浮点的Qn定义及计算公式方法
以16位的有符号数字为例,我们常见的整数形式就是这里说的Q0(小数点在最右边)格式,范围是:-32768~32767。
这里的n表示小数点的位置,习惯认为16位有符号数有1-16的位置,那么Qn这里的n就是指第n+1个数位右下面,如Q0就是指第1个数位右下面。
下表是不同Qn的表示精度和范围,并给出了计算公式。
假设一个浮点数由C*(Sx+Sy)组成,其中C表示符号,取1(正)或者-1(负),Sx指整数部分,Sy指小数部分,将该浮点数转换成定点数Qn。
则:Q n=0x8000+(S x≪n)H+2n∗S y
H
C=−1
(S x≪n)H+2n∗S y
H
C=1
举例1:
十进制小数8.36用Q11如何表示:
∵
Sx<<11 = 8*(2^11)= 16384 = 0x4000
(2^n)*Sy = (2^11)*0.36 = 737 = 0x2E1
∴
Q11(8.36)= 0x42E1
举例2:
十进制小数-0.27用Q15如何表示:
∵
0x8000+Sx<<15 = 0x8000+0*(2^11)= 0x8000
(2^n)*Sy = (2^15)*0.27 = 8847 = 0x228F
∴
Q15(-0.27)= 0xA28F
Nike27@。
DSP定点运算
一DSP定点算数运算1 数的定标在定点DSP芯片中,采用定点数进行数值运算,其操作数一般采用整型数来表示。
一个整型数的最大表示范围取决于DSP芯片所给定的字长,一般为16位或24位。
显然,字长越长,所能表示的数的范围越大,精度也越高。
如无特别说明,本书均以16位字长为例。
DSP芯片的数以2的补码形式表示。
每个16位数用一个符号位来表示数的正负,0表示数值为正,l则表示数值为负。
其余15位表示数值的大小。
因此,二进制数0010000000000011b=8195二进制数1111111111111100b= -4对DSP芯片而言,参与数值运算的数就是16位的整型数。
但在许多情况下,数学运算过程中的数不一定都是整数。
那么,DSP芯片是如何处理小数的呢?应该说,DSP芯片本身无能为力。
那么是不是说DSP芯片就不能处理各种小数呢?当然不是。
这其中的关键就是由程序员来确定一个数的小数点处于16位中的哪一位。
这就是数的定标。
通过设定小数点在16位数中的不同位置,就可以表示不同大小和不同精度的小数了。
数的定标有Q表示法和S表示法两种。
表1.1列出了一个16位数的16种Q表示、S表示及它们所能表示的十进制数值范围。
从表1.1可以看出,同样一个16位数,若小数点设定的位置不同,它所表示的数也就不同。
例如,16进制数2000H=8192,用Q0表示16进制数2000H=0.25,用Q15表示但对于DSP芯片来说,处理方法是完全相同的。
从表1.1还可以看出,不同的Q所表示的数不仅范围不同,而且精度也不相同。
Q越大,数值范围越小,但精度越高;相反,Q越小,数值范围越大,但精度就越低。
例如,Q0 的数值范围是一32768到+32767,其精度为1,而Q15的数值范围为-1到0.9999695,精度为1/32768=0.00003051。
因此,对定点数而言,数值范围与精度是一对矛盾,一个变量要想能够表示比较大的数值范围,必须以牺牲精度为代价;而想精度提高,则数的表示范围就相应地减小。
Q格式数据运算
Q格式数据运算1、浮点数与定点数的转换关系可表示为浮点数(x)转换为定点数(xq):=(int)*2Q xq x定点数(xq)转换为浮点数(x):=(float)2Qxq x2 加法/减法运算的C语言定点摸拟设浮点加法运算的表达式为:float x,y,z;z=x+y;将浮点加法/减法转化为定点加法/减法时最重要的一点就是必须保证两个操作数的定标temp=x+temp;z=temp>>(Qx-Qz),若Qx>=Qzz=temp<<(Qz-Qx),若Qx<=Qz例1.4结果超过16位的定点加法设x=l5000,y=20000,则浮点运算值为z=x+y=35000,显然z>32767,因此Qx=1,Qy=0,Qz=0,则定点加法为:x=30000;y=20000;temp=20000<<1=40000;temp=temp+x=40000+30000=70000;z=70000L>>1=35000;3 定点乘法设浮点乘法运算的表达式为:float x,y,z;z = xy;假设经过统计后x的定标值为Qx(比如Q10),y的定标值为Qy,乘积z的定标值为Qz,则定点表示的乘法为:int x,y,z;long temp;temp = (long)x;z = (temp×y) >> (Qx+Qy-Qz);例1.9 Q15*Q15=Q300.5*0.5=0.250.100000000000000;Q15* 0.100000000000000;Q15--------------------------------------------00.010000000000000000000000000000=0.25;Q30两个Q15的小数相乘后得到一个Q30的小数,即有两个符号位。
一般情况下相乘后得到的满精度数不必全部保留,而只需保留16位单精度数。
FPGA浮点数定点化
FPGA浮点数定点化 因为在普通的fpga芯⽚⾥⾯,寄存器只可以表⽰⽆符号型,不可以表⽰⼩数,所以在计算⽐较精确的数值时,就需要做⼀些处理,不过在altera在Arria 10中增加了硬核浮点DSP模块,这样更加适合硬件加速和做⼀些⽐较精确的计算。
浮点数和定点数的区别:定点数的⼩数点是固定的,⽽浮点数的⼩数点的位置不确定,举个例⼦,定点数 1.1*1.1 = 1.2(定点⼀位⼩数),浮点数1.1*1.1=1.21,浮点数的⼩数点发⽣了移动,⽽定点数舍弃了⼀位,⼩数点的位置没有变。
在verilog⾥⾯,如果⽤⽤16位⼆进制表达定点⼩数,最⾼位就是符号位。
我们把⼩数点之后的N位叫做Qn,例如⼩数点之后有12位叫做Q12格式的定点⼩数⽽Q0就是我们所说的整数。
Q12的最⼤正数是0111.1111_1111_1111,第⼀个0是符号位,后⾯的数都是1,那么这个数的⼗进制就是0x7fff/2^12=7.99999......,为啥是除2^12呢,因为是⼗⼆位⼩数,0.1111_1111_1111接近与整数1,这样看有多少个1. 反过来,⼀个实际的数转换成Qn型的定点⼩数就是就是乘上2^n 举个例⼦: 2.1*2.2 = 4.62 先转换成定点数 2.1 * 2^!2 = 8601.6 = 8602 2.1 * 2^12 = 9011.2 = 9011 定点数相乘 8602*9011 = 77512622 定点数转实际的数 因为是两个定点数相乘,所以,⼩数位变成24位。
整数位变成6位 77512622/2^24=4.62011.....和i结果差距很⼩ 最后记录有符号数的计算 正数原码 = 反码 = 补码 负数反码 = 原码的符号位不变,其他位取反 补码 = 反码 + 1 举个例⼦: 00110010 + 10000011(负数补码)=10110101,因为结果是负数的补码,换算成原码是11001011,和的绝对值是1001011。
Q格式_dsp定点和浮点数学运算规则
Q格式有符号数的表示法,机器数(出现在电脑的二进位数值)有3个特点,无符号或符号转换成数值来表示,没有+10101这样的资料,而是以010101来表示,只表示单纯的整数或小数,小数点的位置预设在一定的位置而较少变动,它的长度受到电脑硬体的限制,而不能无限增长。
Q格式,就是将一个小数放大若干倍后,用整数来表示小数。
Q格式前提无符号数:当参与运算的数值没有负数且运算的结果也没有负数时,则所有字元都可以表示数值,这种没有符号的数,称为无符号数(如记忆体储存位址),有符号数:数值中有某位数值代表符号,通常最高位作为符号位,0代表正,1代表负。
真值:有符号数所代表的数值,例如:110所代表的值是-2 而非6,有符号数只要去除符号位就可以获得该数的大小,在运算时,它的符号位可参与运算。
但在加减运算时,必须将它分离出来,才能进行运算。
有时,还要确定哪个有符号数的真值比较大,才能确定结果的符号。
为了达到这些功能,电路的设计就相当复杂。
所以很多电脑系统不直接使用有符号数,而使用有符号数的1’s补数或2’s补数表示法作为编码系统正弦脉波宽度调变(SPWM)之控制方法经Q 格式乘法器转换成振幅与频率可变V/F 控制,当成其单相感应马达的输入信号,藉由控制责任周期的大小,以达到变电压相对改变频率的效果。
DSP1.实现数位系统的第一步在自然世界中,所有的物理量包括时间、电压、质量、位移等等,都是类比的、连续的。
可是在数位系统中,讯号是在不连续的时间点取样,物理量或讯号的大小也不再是连续,而是被量化(Quantized)。
在数位系统中,只能用有限字元长度的数字去表示数量的大小,而不能以无限精确的数值(实数)去表示。
为了实现数位系统;使用了定数数与浮点数的表示法。
a)定点数(Fixed Point Number):指一个数字的表示,其小数点是在固定的位置(位元)。
b)浮点数(Floating Point Number):使用假数以及指数两部分来表示数值。
c54x定点运算Q格式
x=24576;y=25295;
temp=25395; temp=x-temp=24576-25395=-819; 因为Qx<Qz,故 z=(int)(-819<<2)=-3276。由于z的Q值 为15,所以定点值z=-3276即为浮点值z=-3276/327680.1。
2.结果超过16位表示范围
temp=x+temp=16384+101580=117964;
z=(int)(117964L>>2)=29491;
因为z的Q值为13,所以定点值z=29491即为浮点值z= 29491/8192=3.6。
设x=3.0,y=3.1,则浮点运算结果为z=x-y=3.0-3.1=0.1;
Qx=13,Qy=13,Qz=15,则定点减法为:
=
xq 2
Q x
yq 2
(Q x Q y )
2
Q x
=
[xq yq 2
(Q x Q y )
]2
Qx
zq [xq yq 2
(Q x Q
y
)
]2
(Q z Q x )
所以定点加法可以描述为:
int x,y,z; long temp;/*临时变量*/
temp=y<<(Qx-Qy);
小数乘法与冗余符号位
上述乘积是7位,当将其送到8位累加器时,为保持 乘积的符号,必须进行符号位扩展,这样,累加器中 的值为11110100(-0.09375=-12/27 ),出现了冗余符 号位。原因是: S x x x (Q3) × S y y y (Q3) S S z z z z z z (Q6格式) 即两个带符号数相乘,得到的乘积带有2个符号位, 造成错误的结果。 同样,对于两个十六位数相乘,乘积只有30位,在 最高的两位也是符号位,同样会造成错误的结果。
DSP中浮点转定点运算--浮点与定点概述
DSP中浮点转定点运算--浮点与定点概述⼀:浮点与定点概述1.1相关定义说明 定点数:通俗的说,⼩数点固定的数。
以⼈民币为例,我们⽇常经常说到的如123.45¥,789.34¥等等,默认的情况下,⼩数点后⾯有两位⼩数,即⾓,分。
如果⼩数点在最⾼有效位的前⾯,则这样的数称为纯⼩数的定点数,如0.12345,0.78934等。
如果⼩数点在最低有效位的后⾯,则这样的数称为纯整数的定点数,如12345,78934等。
浮点数:⼀般说来,⼩数点不固定的数。
⽐较容易的理解⽅式是,考虑以下我们⽇常见到的科学记数法,拿我们上⾯的数字举例,如123.45,可以写成以下⼏种形式:12.345x1011.2345 x1020.12345 x103……为了表⽰⼀个数,⼩数点的位置可以变化,即⼩数点不固定。
1.2定点数与浮点数的对⽐为了简单的把问题描述清楚,这⾥都是⼗进制数字举例,详细的分析,⼤家可以在后⾯的⽂章中看到。
(1)表⽰的精度与范围不同例如,我们⽤4个⼗进制数来表达⼀个数字。
对于定点数(这⾥以定点整数为例),我们表⽰区间[0000,9999]中的任何⼀个数字,但是如果我们要想表⽰类似1234.3的数值就⽆能为⼒了,因为此时的表⽰精度为1/100=1;如果采⽤浮点数来表⽰(以归整的科学记数法,即⼩数点前有⼀位有效位,为例),则可以表⽰[0.000,9.999]之间的任何⼀个数字,表⽰的精度为1/103=0.001,精度⽐上⼀种⽅式提⾼了很多,但是表⽰的范围却⼩了很多。
也就是说,⼀般的,定点数表⽰的精度较低,但表⽰的数值范围较⼤;⽽浮点数恰恰相反。
(2)计算机中运算的效率不同⼀般说来,定点数的运算在计算机中实现起来⽐较简单,效率较⾼;⽽浮点数的运算在计算机中实现起来⽐较复杂,效率相对较低。
(3)硬件依赖性⼀般说来,只要有硬件提供运算部件,就会提供定点数运算的⽀持(不知道说的确切否,没有听说过不⽀持定点数运算的硬件),但不⼀定⽀持浮点数运算,如有的很多嵌⼊式开发板就不提供浮点运算的⽀持。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
定点转浮点的Qn定义及计算公式方法
以16位的有符号数字为例,我们常见的整数形式就是这里说的Q0(小数点在最右边)格式,范围是:-32768~32767。
这里的n表示小数点的位置,习惯认为16位有符号数有1-16的位置,那么Qn这里的n就是指第n+1个数位右下面,如Q0就是指第1个数位右下面。
下表是不同Qn的表示精度和范围,并给出了计算公式。
假设一个浮点数由C*(Sx+Sy)组成,其中C表示符号,取1(正)或者-1(负),Sx指整数部分,Sy指小数部分,将该浮点数转换成定点数Qn。
则:Q n=0x8000+(S x≪n)H+2n∗S y
H
C=−1
(S x≪n)H+2n∗S y
H
C=1
举例1:
十进制小数8.36用Q11如何表示:
∵
Sx<<11 = 8*(2^11)= 16384 = 0x4000
(2^n)*Sy = (2^11)*0.36 = 737 = 0x2E1
∴
Q11(8.36)= 0x42E1
举例2:
十进制小数-0.27用Q15如何表示:
∵
0x8000+Sx<<15 = 0x8000+0*(2^11)= 0x8000
(2^n)*Sy = (2^15)*0.27 = 8847 = 0x228F
∴
Q15(-0.27)= 0xA28F
Nike27@。