对速度,错误和内存使用间距的影响。

标准比较断点间距类型

下面是使用断点且间距不均匀,甚至,和两个功率查找表的比较实现的部分。比较的重点是:

  • 指令的执行速度

  • 插补时舍入误差

  • 用于数据只读存储器(ROM)的量

  • ROM用于命令的量

只有当断点不可调的这种比较是有效的。如果断点是在生成的代码可调,三种情况下产生相同的代码。为了执行速度,错误和存储器使用断点间距的效果的总结,参见断点间距的影响摘要

模型说明了断点间距的影响。

这种比较使用模型fxpdemo_approx_sin。三个固定点的查找表出现在这一模式。所有三个表逼近函数SIN(2 * PI * u)的在第一象限和实现小于的最坏情况下的误差2 ^ -8。然而,他们对他们的断点间距不同的限制。

您可以使用模型fxpdemo_approx, 哪一个fxpdemo_approx_sin打开,产生万博1manbetx®编码器™代码(万博1manbetxSimulink的编码器所需的软件许可证)。遵循本几个的生成的代码段部分以强调主要区别。

要打开模型,请在MATLAB®提示:

fxpdemo_approx_sin

数据ROM需要对每一个查找表

本节着眼于数据ROM要求每三个间距选项。

案例不均

不均匀的间距要求两个Y数据点和断点:

int16_T yuneven; [8]uint16_T xuneven; [8]

所使用的总字节是32。

即使案例

即使间距仅需要Y数据点:

int16_T yeven [10];

所使用的总字节20.断点没有明确要求。该代码使用断点之间的间距,以及可能使用的最小和最大的断点。至多,涉及到断点三个值是必要的。

两个案例的权力

两个限位功率只需要Y数据点:

int16_T ypow2 [17];

所使用的总字节34.断点没有明确要求。该代码使用断点之间的间距,以及可能使用的最小和最大的断点。至多,涉及到断点三个值是必要的。

超出范围的输入的测定

在这三种情况下,你必须提防的机会,投入比最大的断点小于最小的断点或更大。可以有怎样的这些可能性出现的处理方式不同。然而,差异通常是轻微的,通常不决定用一个间隔方法比另一个关键因素。随后的部分假定超出范围的输入不可能或已经被处理。

如何查找表确定输入位置

本节描述了三个固定点的查找表确定如何在当前输入是相对于所述断点。

案例不均

不均匀地间隔开的断点需要的通用算法,例如二进制搜索,以确定其中输入在于相对于所述断点。下面的代码提供了一个示例:

iLeft = 0;iRght = 7;/ *断点的数目减1 * /,而((iRght  -  iLeft)> 1){I =(iLeft + iRght)>> 1;如果(uAngle 
             

while循环执行到LOG2(N)倍,其中N是断点的数目。

即使案例

均匀间隔的断点只需要一个步骤来确定在输入位于相对于断点:

iLeft = uAngle / 455U;

除数455U表示断点之间的间距。一般情况下,分红会(uAngle - SmallestBreakPoint)。在这个例子中,最小的断点是零,所以代码优化了减法。

两个案例的权力

两个间隔开的断点功率只需要一个步骤来确定在输入位于相对于断点:

iLeft = uAngle >> 8;

移位的数量是8,因为断点已间距2 ^ 8。最小的断点为零,因此uAngle取代一般情况下,(uAngle - SmallestBreakPoint)

对照

为了确定其中输入位于相对于所述断点,不均匀隔开的情况下,需要比其它两种情况得多的代码。此代码需要额外的指令ROM。如果许多查找表共享二进制搜索算法的功能,你可以减少这种ROM处罚。即使代码是共享的,时钟周期的数目需要确定输入的位置是为不均匀间隔的情况下比其它两种情况高得多。如果代码是共享的,函数调用开销降低执行速度多一点。

在均匀间隔的情况下,和两个隔开的情况下的功率,可以用一个单一的代码线确定输入的位置。的均匀间隔开的情况下,采用的是一般的整数除法。2壳体的功率使用的移位,而不是一般的除法,因为除数是2的精确功率。如果不知道具体的处理器,你无法确定换挡是不是分歧更好。

许多处理器可以实现司与单汇编语言指令,所以代码会很小。然而,该指令通常需要多少个时钟周期来完成。许多处理器不提供除法指令。这些处理器事业部经过反复增减发生。这个过程是缓慢的,需要大量的机器代码,但是这个代码可以共享。

大多数处理器提供了一种方法做左,右的逻辑和算术移位。一个关键的区别是处理器是否能够在一个指令(桶形移位)做ñ移位或需要N个指令,在时移一个比特。桶形移位需要更少的代码。无论是桶形移位也增加速度取决于支持该操作的硬件。万博1manbetx

编译器也可以复杂化的比较。在前面的例子中,命令uAngle >> 8基本上发生在一个16位字的高8位。编译器可以检测到这种情况,并与直接将位的指令替换比特移位。如果移位的数量是一些其它的值,如7,就不会发生这种优化。

插值每个查找表

从理论上讲,你可以计算出用下面的代码中插入:

Y =(YDATA [iRght]  -  YDATA [iLeft])*(U  -  XDATA [iLeft])... /(XDATA [iRght]  -  XDATA [iLeft])+ YDATA [iLeft]

期限(XDATA [iRght] - XDATA [iLeft])是相邻断点之间的间距。如果这个值是恒定的,由于相等间距,一些简化是可能的。如果间距不只是甚至还要二的幂,显著简化是可能的定点实现。

案例不均

对于不均匀的情况下,一个可能的实现中的固定点处的理想插值的是:

XNUM = uAngle  -  xuneven [iLeft];xDen = xuneven [iRght]  -  xuneven [iLeft];yDiff = yuneven [iRght]  -  yuneven [iLeft];MUL_S32_S16_U16(bigProd,yDiff,XNUM);DIV_NZP_S16_S32_U16_FLOOR(yDiff,bigProd,xDen);yUneven = yuneven [iLeft] + yDiff;

乘法和除法例程这里没有显示。这些例程可以是复杂的,并且取决于在目标处理器上。例如,这些例程查找一个16位处理器比对于32位处理器不同。

即使案例

均匀间隔的断点实现内插使用稍微不同的计算比不均的情况。关键的区别是,计算没有直接使用断点。当在ROM中不需要的断点,可以节省大量的内存。

XNUM = uAngle  - (iLeft * 455U);yDiff = yeven [iLeft + 1]  -  yeven [iLeft];MUL_S32_S16_U16(bigProd,yDiff,XNUM);DIV_NZP_S16_S32_U16_FLOOR(yDiff,bigProd,455U);yEven = yeven [iLeft] + yDiff;

两个案例的权力

两个间隔断点的电源实现插值使用非常不同的计算比其他两种情况。由于在偶数的情况下,断点未在生成的代码使用,因此在ROM不是必需的。

拉姆达= uAngle&0x00FFU;yPow2 = ypow2 [iLeft)+1]  -  ypow2 [iLeft];MUL_S16_U16_S16_SR8(yPow2,λ,yPow2);yPow2 + = ypow2 [iLeft];

这实现了在不平坦,甚至实现显著的优势:

  • 的位与正好在乘法的端部的移位组合取代了减法和除法。

  • 期限(U - XDATA [iLeft])/(XDATA [iRght] - XDATA [iLeft])导致没有精度损失,这是因为间隔是二的幂。

    与此相反,不平坦甚至病例通常引入在此计算舍入误差。

断点间距的影响摘要

下表总结了断点的间距上的执行速度,错误和存储器使用的影响。

参数

即使2隔开的数据的权力

均匀分布的数据

均匀地间隔数据

执行速度

执行速度是最快的。位置搜索和内插是一样的均匀间隔的数据。然而,增加的速度多,位移位取代位置搜索,和位掩码替换插值。

执行速度比为不均匀间隔数据更快,因为位置搜索是更快和内插需要一个简单的除法。

执行速度是最慢的不同间隔的,因为位置搜索较慢,和内插需要多个操作。

错误

因为近似具有不均匀曲率的函数需要更多的点,以达到同样的精度误差可以比用于不均匀间隔的数据大。

因为近似具有不均匀曲率的函数需要更多的点,以达到同样的精度误差可以比用于不均匀间隔的数据大。

因为近似具有不均匀曲率的功能需要更少的点来达到同样的精度误差可以更小。

ROM的使用

使用命令ROM少,但更多的数据ROM。

使用命令ROM少,但更多的数据ROM。

使用更多的命令ROM,但较少的数据ROM。

RAM使用

不重要。

不重要。

不重要。

的Y数据点的数量遵循预期的模式。出于相同的最坏情况下的误差,不受限间距(凹凸)需要最少的数据点,和幂的两间隔开的断点需要最多的。然而,对于均匀间隔的执行情况和两种情况下的功率并不需要在生成的代码中的断点。这减少了一半他们的数据ROM的要求。其结果是,均匀间隔的情况下,实际上使用更少的数据ROM相比,不均匀地间隔开的情况。此外,两个案件的权力只需要略高于不均的情况下更ROM。更改最坏情况下的误差可以更改这些排名。然而,当你比较数据ROM的使用,你应该总是考虑到均匀间隔和功率的两个隔开的情况下并不需要他们的断点ROM的事实。

确定的努力,其中电流输入是相对于断点强烈支持的两个间隔的情况下的均匀间隔和功率。不均匀间距,则使用该循环达到log2(N)倍的二进制搜索方法。与连和两个间隔的功率,则可以确定与一行C代码的执行的位置。但对没有硬件的详细知识和C编译器均匀分布的,你不能决定的两个电源的相对优势。

计算内插的努力有利于两个案例,它使用按位与运算和移位来代替减法和除法的功率。这种行为的优势依赖于特定的硬件,但你可以预期的代码大小,速度,以及在精度的优势。的均匀间隔开的情况下,计算与在所述不均匀地间隔开的情况下效率的轻微改进的内插。