主要内容

算术运算

请注意

这些部分将帮助您理解哪些数据类型和缩放选择会导致溢出或精度损失。

Modulo算术

二进制数学是以模运算为基础的。模算术只使用一个有限的数字集,将位于给定集之外的任何计算结果包装回给定集。

例如,常见的日常时钟使用Modulo 12算法。该系统中的数字只能是1到12.因此,在“时钟”系统中,9加9等于6.这可以更容易可视化为数字圆:

类似地,二进制数学只能使用数字0和1,并且落在该范围之外的任何算术结果都被包裹为“圆圈”到0或1。

二进制补码

二的补码是有符号定点数的常见表示。在2的补码中,正数总是以0开头,负数总是以1开头。如果一个2的补数的前导位为0,则通过计算该数的标准二进制值来获得该值。如果一个2的补数的前导位是1,则通过假设最左边的位是负数来获得该值,然后计算该数的二进制值。例如,

01 0 + 2 0 1 11 2 1 + 2 0 2 + 1 1

用二的补数计算二进制数的负数,

  1. 取一个的余数。也就是说,所有的0都被翻转为1所有的1都被翻转为0。

  2. 用二进制加1。

  3. 丢弃超出原始单词长度的任何位。

例如,考虑取负数11010(-6)。首先,取数字的1的补数,或者翻转位:

11010 00101

接下来,添加一个1,将所有数字包装为0或1:

00101 + 1 00110 6

加减

定点数的加法要求加数的二进制点对齐。然后使用二进制算术执行加法,这样除了0或1之外就不会使用其他数字。

例如,考虑将010010.1(18.5)与0110.110(6.75)相加:

010010.1. + 0110.110 011001.010 18.5 6.75 25.25

当对任何负数使用两个的补值时,定点减法等价于加法。在减法中,加数必须扩展符号以匹配彼此的长度。例如,考虑用010010.1(18.5)减去0110.110 (6.75):

大多数固定点DSP系统Toolbox™块,在执行添加之前执行添加添加到累加器数据类型。因此,在添加二进制点之前不需要进一步转换。看施工为更多的信息。

乘法

2的补定点数的乘法直接类似于普通的小数乘法,除了中间结果必须进行符号扩展,以便在将它们相加之前它们的左边对齐。

例如,考虑10.11(-1.25)与011(3)相乘:

乘法的数据类型

下图显示了系统工具箱软件中用于固定点乘法的数据类型。该图说明了用于实际,复杂真实和复杂复杂乘法的数据类型之间的差异。请参阅单个参考网页以确定特定块是否接受复杂的定点输入。

在大多数情况下,您可以在块掩码中设置乘法期间使用的数据类型。有关详细信息,请参阅施工

请注意

下图显示在系统工具箱软件中乘法中的固定点数据类型的使用。它们不代表软件使用的实际子系统来执行乘法。

实际的乘法。下图显示了在“系统工具箱”软件中两个实数相乘时使用的数据类型。软件在产品输出数据类型中返回此操作的输出,如下图所示。

更复杂的乘法。下图显示了系统工具箱软件中的Real和复杂的固定点号的乘法中使用的数据类型。实际复杂和复杂的实际乘法是等效的。软件在产品输出数据类型中返回此操作的输出,如下图所示。

纷繁复杂的乘法。下图显示了“系统工具箱”软件中两个复杂定点数的乘法。请注意,软件在累加器输出数据类型中返回此操作的输出,如下图所示。

在执行加或减操作之前,系统工具箱块转换为累加器数据类型。在前面的图表中,这相当于C代码

ACC = AC;ACC- = BD;

对于减法,和

acc =广告;公元前acc + =;

对于加法器,在哪里acc是蓄电池。

施工

许多固定点系统工具箱块执行算术运算允许您指定累加器,中间产品和产品输出数据类型,如适用的,以及块的输出数据类型。本节概述了对这些数据类型的演员概述,因此您可以判断您选择的数据类型是否会调用符号扩展,使用零,舍入和/或溢出填充。符号扩展名是添加具有两个补码号的高端最高位值的位。标志扩展不会更改二进制数的值。填充是用一个或多个零扩展二进制单词的最低有效位。

施加到蓄能器数据类型

对于大多数执行加法或减法的定点System Toolbox块,操作数首先被强制转换为累加器数据类型。大多数情况下,您可以在块掩码上指定累加器数据类型。具体操作请参见蓄电池中的数据类型参数为块指定定点属性.由于在将添加剂兼向相同的累加器数据类型之前,因此不需要额外的换档,以确保其二进制点对齐。添加的结果保留在累加器数据类型中,具有溢出的可能性。

强制转换为中间产品或产品输出数据类型

对于执行乘法的System Toolbox块,将把乘数的输出放在产品输出数据类型中。然后将产品输出提供给乘数的块可能首先将其转换为中间产品数据类型。大多数情况下,您可以在块掩码上指定这些数据类型。具体操作请参见中间产品产品输出中的数据类型参数为块指定定点属性

强制转换为输出数据类型

许多固定点系统工具箱块允许您指定掩码上块输出的数据类型和缩放。请记住,软件不允许其块的输入和输出端口上的混合类型。因此,如果您想指定支持固定点数据类型的系统工具箱块的固定点输出数据类型和缩放,则必须使用固定点信号馈送该块的输入端口。金宝app由固定点系统工具箱块制作的最终演员是块的输出数据类型。

请注意,尽管您无法在块的输入和输出端口上混合固定点和浮点信号,但您可以在支持固定点信号的块端口上具有不同的单词和分数长度的固定点信号。金宝app

铸造的例子

It is important to keep in mind the ramifications of each cast when selecting these intermediate data types, as well as any other intermediate fixed-point data types that are allowed by a particular block.根据您选择的数据类型,可能会发生溢出和/或舍入。以下两个示例展示了可能发生溢出和舍入的情况。

将短数据类型转换为长数据类型。考虑一个非零数的转换,由一个带有两个小数位的4位数据类型表示为一个带有七个小数位的8位数据类型:

如图所示,源位向上移动,以便二进制点与目标二进制点位置相匹配。最高源位不匹配,因此可能发生溢出,结果可能饱和或绕包。目标数据类型末尾的空位用0或1填充:

  • 如果不会发生溢出,则空位填充为0'。

  • 如果发生换行,空位将用0填充。

  • 如果发生饱和,

    • 正数的空位用1填充。

    • 负数的空位用0填充。

您可以看到,即使将较短的数据类型强制转换为较长的数据类型,仍可能发生溢出。当源数据类型的整数长度(在本例中为2)大于目标数据类型的整数长度(在本例中为1)时,就会发生这种情况。类似地,如果目标数据类型和缩放比源的小数位更少,即使在将较短的数据类型转换为较长的数据类型时,也可能需要舍入。

从更长的数据类型投入到更短的数据类型。考虑一个非零数的转换,由一个带有七个小数位的八位数据类型表示为一个带有两个小数位的四位数据类型:

如图所示,源位向下移动,以使二进制点与目标二进制点位置匹配。没有来自源的最高位的值,因此结果被符号扩展以填充目标数据类型的整数部分。源的底部5位不符合目的地的分数长度。因此,当结果四舍五入时,精度就会降低。

在这种情况下,即使强制转换是从较长的数据类型转换为较短的数据类型,所有的整数位仍然被保留。相反,即使转换为较短的数据类型,也可以保持完全精度,只要目标数据类型的分数长度与源数据类型的分数长度相同或更长。但是,在这种情况下,从结果的高端丢失位,并可能发生溢出。

最坏的情况是,目标数据类型的整数长度和分数长度都小于源数据类型的整数长度和分数长度。在这种情况下,可能会出现溢出和精度损失。