1、对任意一个数,都可以表示成二进制的形式。如十进制数11.625,的二进制数为1011△101。
2、定点数是指小数点在数中的位置是固定保持不变的二进制数。定点数通常把数限制在-1~1之间,把小数点规定在符号位和数据位之间。N bit表示正小数ɑ,则小数ɑ的范围是
3、定点数的三种表示方式:原码,反码,补码。
(1)原码
Matlab中dec2bin将十进制数转换成二进制数,而得到的二进制数的小数点在最后面,转换成十进制后是整数。为了将绝对值小于1的数也转换成二进制,需乘以2^(N-1),并取四舍五入的操作(归一化是将数据全部限制在-1~1之间;此处操作类似于归一化的逆向)。量化为Nbit,最高位符号位,小数点,N-1个数据位。
dec2bin(round(abs(x)*2^(N-1)) + (x<0)*2^(N-1),N);
(2) 反码:整数的原码,反码,补码都是同一个。负数的反码为除符号位以为,其余数据位取反。
(3) 补码:负数的补码为反码加1;补码最重要的性质是将减法用加法形式实现。
dec2bin(round(x*2^(N-1)) + (x<0)*2^(N),N);
Eg:0.75 和 -0.75 原码 补码 N=16
0.75:0110000000000000 0110000000000000
-0.75:1110000000000000 1010000000000000
4、数的定点化方式举例:
比如,将十进制数2.918量化为16位的(3位整数位宽,12位小数位宽,1个符号位)
(1)整数部分有3位,最大为111,表示7;
(2)小数部分12位,表示范围;
(3)即,整数+小数最大能表示7+1 =8;而15位二进制数最大能表示32768;所以此种量化方式的精度为t=(7+1)/32768.
(4)2.918定点化为:2.918/t=11952.128≈11952,定点化为有0.128的误差。误差百分比为0.128/11952=1.0710e-05。近似可以忽略不计。
(5)LSB = 1/2^12 = 2.4414e-04
同样,将十进制数0.918量化为16位的(0位整数位宽,15位小数位宽,1个符号位)
(1)整数部分有0位,只能表示为0;
(2)小数部分15位,表示范围
(3)即,整数+小数最大能表示0+1=1;而15位二进制数最大能表示32768;所以此种量化方式的精度为t=(0+1)/32768.
(4)0.918定点化为:0.918/t=30081.024≈30081,定点化有0.024的误差,误差百分比为0.024/30081=7.9785e-07;忽略不计
(5)LSB = 1/2^15 =3.0518e-05
5、数在定点化时,小数点位置可以随意定。最常用的还是定点化为-1~1之间,即最高位是符号位,小数点,后面全是数据位。在FPGA中,要心中明确小数点的位置。
2018年4月1日星期天