数字表示:整数和定点
在嵌入式系统中,计算时间和内存是至关重要的资源。浮点计算需要特殊的浮点单元来实现高效的计算,这意味着处理器更昂贵。由于这个原因,嵌入式系统的设计者经常使用定点数。在这篇文章中,我想介绍定点数表示的基本概念。我还想和大家分享一篇来自MATLAB文摘的文章,关于生产代码生成中从浮点到定点的模型转换。
整数
整数是用二进制存储数字的最基本方法。对于整数,每一位代表一个不同的2的幂数。为了使它形象化,我想看一个玩具3位数字系统。这个玩具系统中的位的值是22(4) 21(2), 20这个三位系统可以用以下的位模式表示0到7之间的所有整数值:
22 |
21 |
20 |
价值 |
0 |
0 |
0 |
= 0 |
0 |
0 |
1 |
= 1 |
0 |
1 |
0 |
= 2 |
0 |
1 |
1 |
= 3 |
1 |
0 |
0 |
= 4 |
1 |
0 |
1 |
= 5 |
1 |
1 |
0 |
= 6 |
1 |
1 |
1 |
= 7 |
加上一个符号位来跟踪正数或负数,我们的三位无符号整数变成了四位有符号整数。仅仅在数字的开头放一个符号位就会产生一个有趣的+0和-0表示的问题。有不同的处理方法有符号数表示.使用二进制补码方法中,每个负数都是正数的位NOT。因此,如果1是0001,则- 1是1110。对于2的补数,负0是最大的负数,1000 = -8。带符号的四位模式如下所示:
标志 |
22 |
21 |
20 |
价值 |
0 |
1 |
1 |
1 |
= 7 |
0 |
1 |
1 |
0 |
= 6 |
0 |
1 |
0 |
1 |
= 5 |
0 |
1 |
0 |
0 |
= 4 |
0 |
0 |
1 |
1 |
= 3 |
0 |
0 |
1 |
0 |
= 2 |
0 |
0 |
0 |
1 |
= 1 |
0 |
0 |
0 |
0 |
= 0 |
1 |
1 |
1 |
1 |
= 1 |
1 |
1 |
1 |
0 |
= 2 |
1 |
1 |
0 |
1 |
= 3 |
1 |
1 |
0 |
0 |
= 4 |
1 |
0 |
1 |
1 |
= 5 |
1 |
0 |
1 |
0 |
= 6 |
1 |
0 |
0 |
1 |
= 7 |
1 |
0 |
0 |
0 |
= 8 |
这将范围从-8扩展到+7,并且数字在该范围内均匀间隔。整数表示实际上只是定点数的一种特殊情况。
定点数字:二进制点
定点数使用相同的整数表示,但它们赋予位不同的含义。我们可以介绍小数位和二进制点的概念。对于整数,数字之间的最小间距是1。如果我们决定用一个位来表示1 / 2,那么我们现在在系统中有了更近的间距。二进制点右侧的比特数是分数长度。使用我们的三比特系统,我们可以在第一个比特之后分配一个固定的二进制点。这就是一个分数长度为2的3位系统。位的值现在是1、1 / 2和¼。数字0.10等于1 / 2。这个三位不动点系统可以表示以下数字范围:
20 |
2-1 |
2-2 |
价值 |
0 |
0 |
0 |
= 0 |
0 |
0 |
1 |
=¼ |
0 |
1 |
0 |
=½ |
0 |
1 |
1 |
=¾ |
1 |
0 |
0 |
= 1 |
1 |
0 |
1 |
= 1¼ |
1 |
1 |
0 |
= 1½ |
1 |
1 |
1 |
= 1¾ |
这允许在更小的数字范围内获得更高的精度。二进制点的位置决定了数字的范围和它们之间的间距。
如果我们想把二进制点移到5之后呢th在我们的三比特系统中?在这种情况下,分数的长度是-2。而不是小数位,最低有效位等于4。在这样的系统中,位是16、8和4。
24 |
23. |
22 |
价值 |
0 |
0 |
0 |
= 0 |
0 |
0 |
1 |
= 4 |
0 |
1 |
0 |
= 8 |
0 |
1 |
1 |
= 12 |
1 |
0 |
0 |
= 16 |
1 |
0 |
1 |
= 20 |
1 |
1 |
0 |
= 24 |
1 |
1 |
1 |
= 28 |
这种表示给了我们更大的范围,但更大的位之间的间距。想象一个引擎控制器必须表示0到10,000 rpm之间的值。无符号8位整数的最大值为255。16位无符号整数可以保存0到65535范围内的值。如果我们选择一个8位的数字,其分数长度为-6,我们可以只用8位存储这些数字。这种系统的范围是0到16320,间距为64。
定点数:斜率和偏差
定点数字系统也可以使用任意的斜率和偏差对真实值进行编码。正则整数的斜率为1,偏差为0。当使用斜率和偏差时,二进制表示存储一个用于计算实际值的整数。计算方法是我们熟悉的直线方程,Y = m∙x + b.这种表示方式改变了所表示数字的范围和比例。使用我们的三位整数,我们可以定义斜率为1.25,偏差为20。比特仍然表示4、2和1,但计算值为1.25∙x + 20。
22 |
21 |
20 |
整数 |
现实世界的价值 |
0 |
0 |
0 |
= 0 |
1.25∙0 + 20 = 20 |
0 |
0 |
1 |
= 1 |
1.25∙1 + 20 = 21.25 |
0 |
1 |
0 |
= 2 |
1.25∙2 + 20 = 22.50 |
0 |
1 |
1 |
= 3 |
1.25∙3 + 20 = 23.75 |
1 |
0 |
0 |
= 4 |
1.25∙4 + 20 = 25.00 |
1 |
0 |
1 |
= 5 |
1.25∙5 + 20 = 26.25 |
1 |
1 |
0 |
= 6 |
1.25∙6 + 20 = 27.50 |
1 |
1 |
1 |
= 7 |
1.25∙7 + 20 = 27.75 |
定点表示法更复杂,而且万博1manbetx仿真软件定点文档给出了一个很好的概述。
定点工作的挑战
使用定点的挑战增加了嵌入式系统开发的复杂性。您必须确保您的应用程序具有正确的伸缩性和偏倚,以避免溢出或下溢。如果你有万博1manbetx仿真软件定点你可以在你的Simulink模型中使用定点数据类型,得到你设计的真实模拟。万博1manbetxMATLAB文摘文章将模型从浮点转换为生产代码生成的定点解释了帮助您在您的Simulink设计中正确实现这一点的工作流程。万博1manbetx
现在轮到你了
您开发定点代码吗?从定点数表示的概述中,您学到了什么?留下一个这里的评论分享你的定点故事。
评论
如欲留言,请点击在这里登录到您的MathWorks帐户或创建一个新帐户。