主要内容

算术运算

请注意

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

模运算

二进制数学是基于模运算。模运算只使用有限的一组数字,将超出给定集合的任何计算结果包装回集合中。

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

类似地,二进制数学只能使用数字0和1,超出此范围的任何算术结果都被“绕圈”包装为0或1。

二进制补码

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

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

要用2的补数来计算一个二进制数的负数,

  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 System Toolbox™块在执行加法之前将加法器输入转换为累加器数据类型。因此,在加法过程中不需要进一步的移位来对齐二进制点。看到数据类型转换了解更多信息。

乘法

两个补位定点数的乘法直接类似于常规的十进制乘法,不同之处在于中间结果必须进行符号扩展,以便在将它们相加之前将它们的左侧对齐。

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

乘法数据类型

下面的图表显示了System Toolbox软件中用于定点乘法的数据类型。图表说明了实-实、复-实和复-复乘法所使用的数据类型之间的差异。请参阅个别参考页,以确定特定块是否接受复杂的定点输入。

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

请注意

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

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

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

纷繁复杂的乘法。下图显示了系统工具箱软件中两个复数不动数值的乘法。注意,软件以累加器输出数据类型返回该操作的输出,如下图所示。

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

acc =交流;acc - =双相障碍;

对于减法器,和

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

对于加法器,其中acc是累加器。

数据类型转换

许多执行算术运算的定点System Toolbox块允许您指定累加器、中间产品和产品输出数据类型(如适用),以及块的输出数据类型。本节概述对这些数据类型的强制转换,以便您可以判断所选择的数据类型是否会调用符号扩展、零填充、四舍五入和/或溢出。符号扩展是将具有最高有效位值的位加到两位补码数的高端。符号扩展不会改变二进制数的值。填充是用一个或多个零扩展二进制字的最低有效位。

强制转换为累加器数据类型

对于大多数执行加法或减法的定点系统工具箱块,首先将操作数强制转换为累加器数据类型。大多数情况下,您可以在块掩码上指定累加器数据类型。详细信息请参见蓄电池中的数据类型参数为块指定定点属性(DSP系统工具箱).由于加数在相加之前都被强制转换为相同的累加器数据类型,因此不需要额外的移位来确保它们的二进制点对齐。加法的结果保留在累加器数据类型中,有溢出的可能。

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

对于执行乘法的System Toolbox块,乘数的输出被放置到一个乘积输出数据类型中。然后将产品输出馈送回乘数的块可能首先将其转换为中间产品数据类型。大多数情况下,您可以在块掩码上指定这些数据类型。详细信息请参见中间产品产品输出中的数据类型参数为块指定定点属性(DSP系统工具箱)

强制转换为输出数据类型

许多定点系统工具箱块允许您指定掩码上块输出的数据类型和缩放。请记住,该软件不允许在其块的输入和输出端口上使用混合类型。因此,如果您希望为支持定点数据类型的System Toolbox块指定定点输出数据类型和缩放,则必须为该块的输入端口提供定点信号。万博1manbetx定点系统工具箱块的最后强制转换是对块的输出数据类型。

请注意,虽然不能在块的输入和输出端口上混合使用定点和浮点信号,但是可以在支持定点信号的块的端口上使用具有不同单词和分数长度的定点信号。万博1manbetx

铸造的例子

在选择这些中间数据类型以及特定块允许的任何其他中间定点数据类型时,记住每种强制转换的分支是很重要的。根据所选择的数据类型,可能会发生溢出和/或舍入。下面两个示例演示了可能发生溢出和舍入的情况。

从较短数据类型强制转换为较长数据类型。考虑将一个非零数字(由带有两个小数位的4位数据类型表示)强制转换为带有7个小数位的8位数据类型:

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

  • 如果没有溢出,空位就用0填充。

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

  • 如果发生饱和,

    • 正数的空位用1填充。

    • 负数的空位用0填充。

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

从较长数据类型强制转换为较短数据类型。考虑将一个非零数字(由具有七个小数位的8位数据类型表示)强制转换为具有两个小数位的4位数据类型:

如图所示,源位向下移动,以便二进制点与目标二进制点位置匹配。源数据的最高位没有值,因此结果是符号扩展,以填充目标数据类型的整数部分。源的底部五位不适合目标的分数长度。因此,当结果被舍入时,精度可能会丢失。

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

最糟糕的情况是,目标数据类型的整数长度和分数长度都短于源数据类型和缩放的长度。在这种情况下,可能会发生溢出和精度损失。