主要内容

算术运算

笔记

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

模运算

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

例如,普通的日常时钟使用模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.

要使用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 11001.010 ( 18.5 ) ( 6.75 ) ( 25.25 )

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

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

乘法

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

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

乘法数据类型

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

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

笔记

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

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

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

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

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

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

对于减法,和

acc=ad;acc+=bc;

对于加法器,在哪里行政协调会是蓄电池。

数据类型转换

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

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

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

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

对于执行乘法的系统工具箱块,乘法器的输出被放入产品输出数据类型中。然后将产品输出反馈回乘数的块可能首先将其转换为中间产品数据类型。大多数情况下,可以在块遮罩上指定这些数据类型。有关详细信息,请参阅的说明中间产品产品产量中的数据类型参数为块指定定点属性

强制转换为输出数据类型

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

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

铸造的例子

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

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

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

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

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

  • 如果发生饱和,

    • 正数的空位用1填充。

    • 负数的空位用0填充。

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

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

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

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

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