Main Content

本页的翻译已过时。点击此处可查看最新英文版本。

Product of Elements

复制或求一个标量输入的倒数,或者缩减一个非标量输入

  • 库:
  • Simulink / Math Operations

    HDL Coder / HDL Floating Point Operations

    HDL Coder / Math Operations

  • Product of Elements block

说明

Product of Elements 模块输入一个标量、向量或矩阵。您可以使用此模块:

  • 原样复制标量输入

  • 求标量输入的倒数(用 1 除以它)

  • 通过将所有元素相乘或者对元素进行连续逆变,将向量或矩阵缩减为标量

  • 使用以下选项之一将矩阵缩减为向量:

    • 将每一行或每一列的元素相乘

    • 对每一行或每一列的元素进行连续逆变

Product of Elements 模块在功能上相当于预设了两个模块参数值的 Product 模块:

  • Multiplication:“Element-wise(.*)

  • Number of inputs:“*

将这两个参数之一设置为非默认值即可将 Product of Elements 模块更改为在功能上等效于 Product 模块或 Divide 模块。

端口

输入

全部展开

要进行乘法或除法运算的第一个输入,作为标量、向量、矩阵或 N 维数组提供。

数据类型: half | single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | Boolean | fixed point

要进行乘法或除法运算的第 N 个输入,作为标量、向量、矩阵或 N 维数组提供。

数据类型: half | single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | Boolean | fixed point

要与其他输入相乘的输入信号。

依存关系

要启用一个或多个 X 端口,请为 Number of inputs 参数指定一个或多个 * 字符。

数据类型: half | single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | Boolean | fixed point

要进行除法或逆运算的输入信号。

依存关系

要启用一个或多个 ÷ 端口,请为 Number of inputs 参数指定一个或多个 / 字符。

数据类型: half | single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | Boolean | fixed point

输出

全部展开

通过对输入进行乘法、除法或逆运算来计算得出输出。

数据类型: half | single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | Boolean | fixed point

参数

全部展开

Main

控制模块的两个属性:

  • 模块上的输入端口数

  • 是乘以还是除以每个输入来得到输出

如果您指定:

  • 1*/

    模块有一个输入端口。在按元素模式下,模块按照 Product of Elements 模块说明处理输入。在矩阵模式下,如果参数值为 1*,则模块将输出输入值。如果值为 /,则输入必须为方阵(包括作为简并情况的标量),模块将输出逆矩阵。有关详细信息,请参阅按元素模式Matrix Mode

  • 大于 1 的整数值

    模块的输入的数量由整数值指定。输入依 Multiplication 参数指定的按元素模式或矩阵模式相乘。有关详细信息,请参阅按元素模式Matrix Mode

  • 不带引号的含有两个或更多 */ 字符的字符串

    模块的输入的数量由字符向量长度指定。乘以与 * 字符相对应的每个输入来得到输出。除以与 / 字符相对应的每个输入来得到输出。依 Multiplication 参数指定的按元素模式或矩阵模式进行运算。有关详细信息,请参阅按元素模式Matrix Mode

编程用法

模块参数:Inputs
类型:字符向量
值:'2' | '*' | '**' | '*/' | '*/*' | ...
默认值:'*'

指定模块是执行 “Element-wise(.*)” 还是 “Matrix(*)” 乘法。

编程用法

模块参数:Multiplication
类型:字符向量
值:'Element-wise(.*)' | 'Matrix(*)'
默认值:'Element-wise(.*)'

指定要乘以的维度是 “All dimensions” 还是 “Specified dimension”。

选择 “All dimensions” 并选择配置参数 Use algorithms optimized for row-major array layout 时,Simulink® 为仿真启用行优先算法。要生成行优先代码,除选择 Use algorithms optimized for row-major array layout 外,还要将配置参数 Array layout (Simulink Coder) 设置为 “Row-major”。列优先和行优先算法仅在乘法顺序上不同。在某些情况下,由于对同一数据集的运算顺序不同,列优先算法和行优先算法的输出可能存在微小的数值差异。

当选择 “Specified dimension” 时,您可以将 Dimension 指定为 12

依存关系

要启用此参数,请将 Number of inputs 设置为 * 并将 Multiplication 设置为 “Element-wise (.*)”。

编程用法

模块参数:CollapseMode
类型:字符向量
值:'All dimensions' | 'Specified dimension'
默认值:'All dimensions'

要进行乘法运算的维度需指定为小于或等于输入信号的维度数量的整数。

依存关系

要启用此参数,请进行如下设置:

  • Number of inputs 设置为 *

  • Multiplication 设置为 “Element-wise (.*)

  • Multiply over 设置为 “Specified dimension

编程用法

模块参数:CollapseDim
类型:字符向量
值:'1' | '2' | ...
默认值:'1'

将采样时间指定为 -1 以外的值。有关详细信息,请参阅指定采样时间

依存关系

此参数不可见,除非将其显式设置为 -1 以外的值。要了解详细信息,请参阅不建议设置采样时间的模块

编程用法

模块参数:SampleTime
类型:字符向量
值:标量或向量
默认值:'-1'

Signal Attributes

指定输入信号是否必须全部具有相同的数据类型。如果启用此参数,则在输入信号类型不同时,仿真过程中会发生错误。

编程用法

模块参数:InputSameDT
类型:字符向量
值:'off' | 'on'
默认值:'off'

Simulink 检查的输出范围的下限值。

Simulink 使用最小值执行下列操作:

注意

Output minimum 不会饱和或剪切实际输出信号。请改用 Saturation 模块。

编程用法

模块参数OutMin
类型:字符向量
'[ ]'| 标量
默认值'[ ]'

Simulink 检查的输出范围的上限值。

Simulink 使用最大值执行下列操作:

注意

Output maximum 不会饱和或剪切实际输出信号。请改用 Saturation 模块。

编程用法

模块参数OutMax
类型:字符向量
'[ ]'| 标量
默认值'[ ]'

为输出选择数据类型。该类型可以继承、直接指定或表示为数据类型对象,如 Simulink.NumericType。有关详细信息,请参阅 控制信号数据类型

当您选择继承的选项时,模块的行为如下所示:

  • Inherit:Inherit via internal rule” - Simulink 在考虑嵌入式目标硬件的属性的同时,会选择相应的数据类型来平衡数值准确性、性能和生成的代码大小。如果更改了嵌入式目标的设置,则依内部规则选择的数据类型可能会发生变化。例如,如果该模块将 int8 类型的输入乘以 int16 的增益,并且将 “ASIC/FPGA” 指定为目标硬件类型,则输出数据类型为 sfix24。如果指定 “Unspecified (assume 32-bit Generic)”(即通用 32 位微处理器)为目标硬件,则输出数据类型为 int32。如果目标微处理器不能提供适应输出范围的字长,Simulink 软件将在诊断查看器中显示错误。

    有时软件不能同时满足优化代码效率和保证数值准确性这两个需求。如果内部规则不能满足您对数值准确性或性能的特定需求,请使用下列选项之一:

    • 显式指定输出数据类型。

    • 使用简单的选项 “Inherit:Same as input”。

    • 显式指定默认数据类型(例如 fixdt(1,32,16)),然后使用定点工具为您的模型提供数据类型建议。有关详细信息,请参阅 fxptdlg (Fixed-Point Designer)

    • 要指定您自己的继承规则,请使用 “Inherit:Inherit via back propagation”,然后使用 Data Type Propagation 模块。有关如何使用此模块的示例说明,请参阅 Signal Attributes 模块库中的 Data Type Propagation Examples 模块。

  • Inherit:Inherit via back propagation” - 使用驱动模块的数据类型。

  • Inherit:Same as first input” - 使用第一个输入信号的数据类型。

依存关系

当输入是小于单精度的浮点数据类型时,“Inherit:Inherit via internal rule” 输出数据类型取决于 Inherit floating-point output type smaller than single precision 配置参数的设置。当对数据类型进行编码所需的位数小于对单精度数据类型进行编码所需的 32 位时,数据类型小于单精度。例如,halfint16 小于单精度。

编程用法

模块参数OutDataTypeStr
类型:字符向量
'Inherit: Inherit via internal rule | 'Inherit: Same as first input' | 'Inherit: Inherit via back propagation' | 'double' | 'single' | 'int8' | 'uint8' | 'int16' | 'uint16' | 'int32' | 'uint32' | 'int64' | 'uint64' | 'fixdt(1,16)' | 'fixdt(1,16,0)' | 'fixdt(1,16,2^0,0)' | '<data type expression>'
默认值'Inherit: Inherit via internal rule'

选择此参数可防止定点工具覆盖您在模块上指定的 Output 数据类型。有关详细信息,请参阅Use Lock Output Data Type Setting (Fixed-Point Designer)

编程用法

模块参数:LockScale
类型:字符向量
值:'off' | 'on'
默认值:'off'

选择定点运算的舍入模式。您可以选择:

Ceiling

朝正无穷方向舍入正数和负数。等同于 MATLAB® ceil 函数。

Convergent

将数值舍入到最接近的可表示值。如果出现对等情况,则舍入到最接近的偶数整数。等同于 Fixed-Point Designer™ convergent 函数。

Floor

朝负无穷方向舍入正数和负数。等同于 MATLAB floor 函数。

Nearest

将数值舍入到最接近的可表示值。如果出现对等情况,则朝正无穷方向舍入。等同于 Fixed-Point Designer nearest 函数。

Round

将数值舍入到最接近的可表示值。如果出现对等情况,则将正数朝正无穷方向舍入,将负数朝负无穷方向舍入。等同于 Fixed-Point Designer round 函数。

Simplest

在向负无穷大方向舍入和向零舍入之间选择,以生成尽可能有效的舍入代码。

Zero

将数值向零舍入。等同于 MATLAB fix 函数。

有关详细信息,请参阅Rounding (Fixed-Point Designer)

模块参数始终舍入到最接近的可表示值。要控制模块参数的舍入方法,请在封装字段中使用 MATLAB 舍入函数输入表达式。

编程用法

模块参数:RndMeth
类型:字符向量
值:'Ceiling' | 'Convergent' | 'Floor' | 'Nearest' | 'Round' | 'Simplest' | 'Zero'
默认值:'Floor'

指定对溢出是进行饱和处理还是绕回处理。

操作原理说明对溢出的影响示例

选中此复选框 (on)。

您的模型可能有溢出,并且您希望在生成的代码中具有显式饱和保护。

将溢出饱和处理为数据类型能够表示的最小值或最大值。

int8(有符号 8 位整数)数据类型可以表示的最大值为 127。任何大于此最大值的模块运算结果都会导致 8 位整数溢出。如果选中此复选框,模块输出将在达到 127 时饱和。类似地,模块输出将在达到最小输出值 -128 时饱和。

不选中此复选框 (off)。

您需要优化所生成代码的效率。

您希望避免过度地指定信号超出范围时的处理方式。有关详细信息,请参阅信号范围错误故障排除

溢出会绕回到由数据类型表示的适当值。

int8(有符号 8 位整数)数据类型可以表示的最大值为 127。任何大于此最大值的模块运算结果都会导致 8 位整数溢出。清除该复选框时,软件会将导致溢出的值解释为 int8,这可能产生意外结果。例如,以 int8 表示的模块结果 130(二进制 1000 0010)为 -126。

如果选中此复选框,饱和将应用于模块中的每个内部操作,而不仅仅应用于输出或结果。通常,代码生成过程可以检测何时不会发生溢出。在这种情况下,代码生成器不会生成饱和代码。

编程用法

模块参数:SaturateOnIntegerOverflow
类型:字符向量
值:'off' | 'on'
默认值:'off'

模块特性

数据类型

Boolean | double | fixed point | half | integer | single

直接馈通

多维信号

可变大小信号

过零检测

算法

Product of Elements 模块使用以下算法对浮点、内置整数和定点类型的输入执行按元素运算。

输入按元素运算算法

实数标量,u

Multiplicationy = u
除法y = 1/u

实数向量或矩阵,包含元素 u1, u2, u3, ..., uN

乘法y = u1*u2*u3*...*uN
除法y = ((((1/u1)/u2)/u3).../uN)

复数标量,u

Multiplicationy = u
除法y = 1/u

复数向量或矩阵,包含元素 u1, u2, u3, ..., uN

Multiplicationy = u1*u2*u3*...*uN
除法y = ((((1/u1)/u2)/u3).../uN)

如果为按元素乘法或除法指定的维度是矩阵的一行或一列,算法将应用于该行或该列。请参考以下模型

上面的 Product of Elements 模块连续对四个元素求逆,将矩阵输入缩减为标量:

  • y = ((((1/2+i)/3)/4-i)/5)

下面的 Product of Elements 模块通过沿第二个维度连续求逆,将矩阵输入缩减为向量:

  • y(1) = ((1/2+i)/3)

  • y(2) = ((1/4-i)/5)

扩展功能

C/C++ 代码生成
使用 Simulink® Coder™ 生成 C 代码和 C++ 代码。

PLC 代码生成
使用 Simulink® PLC Coder™ 生成结构化文本代码。

定点转换
使用 Fixed-Point Designer™ 设计和仿真定点系统。

另请参阅

| |

在 R2006a 之前推出