算术和缩放的建议
算术运算和定点缩放
接下来的章节描述了算术运算和定点缩放之间的关系,并提供了一些适合于定点设计的基本建议。对于每一个算术运算,
中描述的一般[斜率偏差]编码方案扩展使用。
根据两个输入的缩放,自动选择结果的缩放。换句话说,缩放是继承了.
缩放的选择是基于
最小化结果的算术运算次数
最大化结果的精度
此外,仅二值点缩放被作为一般编码方案的特例提出。
在嵌入式系统中,硬件接口(ADC或DAC)上变量的缩放是固定的。然而,对于大多数其他变量,你可以选择缩放来给出最好的设计。当缩放不动点变量时,记住这一点很重要
缩放选择取决于所模拟的特定设计。
没有最好的扩展方法。所有的选择都有相关的优点和缺点。本节的目的是向您展示这些优点和缺点。
除了
考虑两个现实世界值的相加:
这些值由中描述的一般[斜率偏差]编码方案表示扩展:
在不动点系统中,数值相加的结果是找到变量问一个:
这个公式表明
一般来说,问一个不是通过简单的加法计算的吗问b而且问c.
一般来说,有两个常数和一个变量的乘法,两个加法和一些额外的位移位。
继承缩放速度
在求和的比例的过程中,一个合理的目标是简化计算。简化计算应该减少操作的数量,从而提高执行速度。以下选择可以帮助最小化算术运算的数量:
集B一个=Bb+Bc.这就消除了一个附加项。
集F一个=Fb或F一个=Fc.任何一种选择都可以消去两个常数乘以变量乘法中的一个。
得到的公式为
或
这些方程似乎是等价的。然而,你对四舍五入和精度的选择可能会使其中一个选择脱颖而出。为了进一步简化问题,您可以选择E一个=Ec或E一个=Eb.这将消除一些位移位。
最大精度的继承缩放
在寻找和的比例的过程中,一个合理的目标是最大的精度。如果知道变量的范围,就可以确定最大精度缩放。最大化精度说明可以确定不动点运算的范围max (V一个)而且分钟(V一个).对于求和,可以确定范围
现在可以推导出最大精度斜率:
在大多数情况下,输入和输出字的大小都远大于1,斜率变为
这只取决于输入和输出单词的大小。相应的偏差为
偏置的值取决于输入和输出是有符号数还是无符号数。
如果输入和输出都是无符号的,那么这些变量的最小值都是零,偏差减少到一个特别简单的形式:
如果输入和输出都是有符号的,那么偏差就变成
Binary-Point-Only扩展
对于二进制点的缩放,求问一个结果在这个简单的表达式中:
这种缩放选择只导致一次添加和一些位移位。避免任何乘法是二进制点缩放的一大优势。
积累
价值的积累与加法密切相关:
发现问a_new包括一个常数和一个变量的一次乘法,两次加法,以及一些位移动:
定点实现的重要区别是输出的缩放与第一个输入的缩放是相同的。
Binary-Point-Only扩展
对于二进制点的缩放,求问a_new结果在这个简单的表达式中:
这个缩放选项只涉及一次添加和一些位移动。
请注意
负的价值积累所产生的结果与价值积累所产生的结果类似。
乘法
考虑两个现实世界值的乘法:
这些值由中描述的一般[斜率偏差]编码方案表示扩展:
在定点系统中,值的乘法结果是找到变量问一个:
这个公式表明
一般来说,问一个不是通过简单的乘法计算的吗问b而且问c.
一般来说,有一个常数和两个变量的乘法,两个常数和一个变量的乘法,三次加法,以及一些额外的位移位。
继承缩放速度
可以通过以下选项来减少算术运算的数量:
集B一个=BbBc.这就消除了一个加法操作。
集F一个=FbFc.这简化了三重乘法——这当然是方程中最难实现的部分。
集E一个=Eb+Ec.这消除了一些位移动。
得到的公式为
最大精度的继承缩放
如果知道变量的范围,就可以确定最大精度缩放。最大化精度说明可以确定不动点运算的范围
而且
对于乘法,可以确定从的范围
在哪里
Binary-Point-Only扩展
对于二进制点的缩放,求问一个结果在这个简单的表达式中:
获得
考虑一个常数和一个变量的乘法
在哪里K是一个叫做增益的常数。自V一个由一个常数和一个变量相乘的结果,发现问一个是一般定点乘法公式的简化版本:
注意括号中的项可以离线计算。因此,一个常数和一个变量只有一次乘法和一次加法。
为了实现上面的等式而不将其更改为更复杂的形式,常数需要使用二进制点格式进行编码。对于这些常量中的每一个,范围都是只有一个值的简单情况。尽管范围很小,但求最大精度的二值点公式仍然有效。最大精度表示是最有用的选择,除非有避免任何移动的压倒性需要。常数的编码是
由此得出公式
继承缩放速度
可以通过以下选项来减少算术运算的数量:
集B一个=KBb.这就消去了一个常数项。
集F一个=KFb而且E一个=Eb.这使得另一个常数项为单位。
得到的公式很简单
如果位的数量不同,那么处理潜在的溢出或执行符号扩展是唯一可能的操作。
最大精度的继承缩放
除非输出比输入的比特数少,否则最大精度的缩放不需要与速度的缩放不同。如果是这种情况,那么应该通过每丢失一个比特的斜率除以2来避免饱和。这可以防止饱和,但会导致舍入。
部门
值分割是在定点嵌入式系统中应该避免的操作,但它可能在某些地方发生。因此,考虑两个现实世界值的划分:
这些值由中描述的一般[斜率偏差]编码方案表示扩展:
在不动点系统中,对值的划分是为了找到变量问一个:
这个公式表明
一般来说,问一个不是通过简单的除法计算出来的吗问b通过问c.
一般来说,一个常数和一个变量有两次乘法,两次加法,一个变量除以一个变量,一个常数除以一个变量,还有一些额外的位移位。
继承缩放速度
可以通过以下选项来减少算术运算的数量:
集B一个= 0.这就消除了一个加法操作。
如果Bc= 0,然后设置分数斜率F一个=Fb/Fc.这就消去了一个常数乘以变量的乘法。
得到的公式为
如果Bc≠0,那么就无法给出明确的建议。
最大精度的继承缩放
如果知道变量的范围,就可以确定最大精度缩放。最大化精度说明可以确定不动点运算的范围
而且
对于除法,可以确定从的范围
非零分母在哪里
Binary-Point-Only扩展
对于二进制点的缩放,求问一个结果在这个简单的表达式中:
请注意
最后两个公式涉及到问一个,除以0和0除以0是可能的。在这些情况下,硬件将给出一些默认行为,但您必须确保这些默认响应为嵌入式系统提供有意义的结果。
总结
从之前对一般[斜率偏差]编码方案中缩放的定点变量的分析中,可以得出这样的结论
加法、减法、乘法和除法都非常复杂,除非对偏差和斜率做出一定的选择。
只使用二进制点的缩放可以保证更简单的数学计算,但通常会牺牲一些精度。
注意,前面的公式没有显示如下:
常量和变量用有限的位数表示。
变量要么是有符号的,要么是无符号的。
四舍五入和溢出处理方案。您必须在实现实际的定点实现之前做出这些决定。