主要内容

算术运算

请注意

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

模运算

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

例如,普通的日常时钟使用模12算法。这个系统中的数字只能是1到12。因此,在“时钟”系统中,9加9等于6。这可以更容易地想象成一个数字圆:

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

二进制补码

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

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

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

  1. 取1的补码,也就是说,所有0都翻转到1,所有1都翻转到0。

  2. 用二进制加1。

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

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

11010 00101

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

00101 + 1 00110 6 )

加法和减法

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

例如,考虑添加10010.1(18.5)与110.110(6.75):

010010.1 + 110.110 011001.010 18.5 ) 6.75 ) 25.25 )

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

执行加法的大多数定点DSP System Toolbox™块在执行加法之前将加法器输入转换为累加器数据类型。因此,为了使二进制点对齐,在加法过程中不需要进一步的移位。看到数据类型转换为更多的信息。

乘法

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

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

乘法的数据类型

下面的图表显示了在系统工具箱软件中用于定点乘法的数据类型。这些图说明了用于实-实、复杂-实和复杂-复杂乘法的数据类型之间的差异。请参阅个别参考页以确定特定块是否接受复杂的定点输入。

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

请注意

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

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

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

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

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

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

对于减法器,以及

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

对于加法器,在哪里acc这是蓄能器。

数据类型转换

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

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

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

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

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

强制转换为输出数据类型

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

注意,尽管不能在块的输入和输出端口上混合使用定点和浮点信号,但是可以在支持定点信号的块的端口上使用不同字和分数长度的定点信号。金宝app

铸造的例子

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

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

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

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

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

  • 如果发生饱和,

    • 正数的空位用1填充。

    • 负数的空位用0填充。

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

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

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

在这种情况下,即使转换是从较长的数据类型转换为较短的数据类型,所有整数位都将保持不变。相反,即使转换为较短的数据类型,只要目标数据类型的小数长度与源数据类型的小数长度相同或更长,也可以保持完全精度。I然而,在这种情况下,结果高端的位丢失,可能发生溢出。

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