Product of Elements
复制或求一个标量输入的倒数,或者缩减一个非标量输入
库:
Simulink /
Math Operations
HDL Coder /
HDL Floating Point Operations
HDL Coder /
Math Operations
描述
Product of Elements 模块输入一个标量、向量或矩阵。您可以使用此模块:
原样复制标量输入
求标量输入的倒数(用 1 除以它)
通过将所有元素相乘或者对元素进行连续逆变,将向量或矩阵缩减为标量
使用以下选项之一将矩阵缩减为向量:
将每一行或每一列的元素相乘
对每一行或每一列的元素进行连续逆变
Product of Elements 模块在功能上相当于预设了两个模块参数值的 Product 模块:
乘法:按元素(.*)
输入的数目:*
将这两个参数之一设置为非默认值即可将 Product of Elements 模块更改为在功能上等效于 Product 模块或 Divide 模块。
示例
使用 Product of Elements 模块的按元素乘法和除法
此示例说明如何使用 Product of Elements 模块来执行输入的按元素乘法和除法。
使用 Product of Elements 模块的复数除法
此示例说明如何使用 Product of Elements 模块执行按元素复数除法。
上面的 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)
端口
输入
Port_1 — 要进行乘法或除法运算的第一个输入
标量 | 向量 | 矩阵 | N 维数组
要进行乘法或除法运算的第一个输入,作为标量、向量、矩阵或 N 维数组提供。
数据类型: half
| single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| Boolean
| fixed point
Port_N — 要进行乘法或除法运算的第 N 个输入
标量 | 向量 | 矩阵 | N 维数组
要进行乘法或除法运算的第 N 个输入,作为标量、向量、矩阵或 N 维数组提供。
数据类型: half
| single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| Boolean
| fixed point
X — 要相乘的输入信号
标量 | 向量 | 矩阵 | N 维数组
要与其他输入相乘的输入信号。
依存关系
要启用一个或多个 X 端口,请为输入的数目参数指定一个或多个 *
字符。
数据类型: half
| single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| Boolean
| fixed point
÷ — 要进行除法或逆运算的输入信号
标量 | 向量 | 矩阵 | N 维数组
要进行除法或逆运算的输入信号。
依存关系
要启用一个或多个 ÷ 端口,请为输入的数目参数指定一个或多个 /
字符。
数据类型: half
| single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| Boolean
| fixed point
输出
Port_1 — 通过对输入进行乘法、除法或逆运算来计算得出输出
标量 | 向量 | 矩阵 | N 维数组
通过对输入进行乘法、除法或逆运算来计算得出输出。
数据类型: half
| single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| Boolean
| fixed point
参数
常设
输入的数目 — 控制输入的数量和运算的类型
*
(默认) | 正整数标量 | 对每个输入端口应用 *
或 /
控制模块的两个属性:
模块上的输入端口数
是乘以还是除以每个输入来得到输出
如果您指定:
1
或*
或/
模块有一个输入端口。在按元素模式下,模块按照 Product of Elements 模块说明处理输入。在矩阵模式下,如果参数值为
1
或*
,则模块将输出输入值。如果值为/
,则输入必须为方阵(包括作为简并情况的标量),模块将输出逆矩阵。有关详细信息,请参阅按元素模式和矩阵模式。大于 1 的整数值
不带引号的含有两个或更多
*
和/
字符的字符串模块的输入的数量由字符向量长度指定。乘以与
*
字符相对应的每个输入来得到输出。除以与/
字符相对应的每个输入来得到输出。依乘法参数指定的按元素模式或矩阵模式进行运算。有关详细信息,请参阅按元素模式和矩阵模式。
编程用法
模块参数:Inputs |
类型:字符向量 |
值:'2' | '*' | '**' | '*/' | '*/*' | ... |
默认值:'*' |
乘法 — 按元素 (.*) 或矩阵 (*) 乘法
按元素(.*) (默认) | 矩阵(*)
指定模块是执行按元素(.*) 还是矩阵(*) 乘法。
编程用法
模块参数:Multiplication |
类型:字符向量 |
值:'Element-wise(.*)' | 'Matrix(*)' |
默认值:'Element-wise(.*)' |
应用于 — 如何沿指定维度应用函数
所有维度 (默认) | 指定的维度
指定如何沿指定维度应用函数。
所有维度 - 对所有维度的所有输入值应用函数。
例如,在此模型中,将乘法设置为按元素方式(.*),将应用于设置为所有维度。该模块返回所有维度的所有值的乘积。
选择所有维度并选择配置参数 使用针对行优先数组布局优化的算法 时,Simulink® 为仿真启用行优先算法。要生成行优先代码,请将配置参数数组布局 (Simulink Coder)设置为行优先,并选择使用针对行优先数组布局优化的算法。列优先和行优先算法仅在乘法顺序上不同。在某些情况下,由于对同一数据集的运算函数顺序不同,列优先算法和行优先算法的输出可能存在微小的数值差异。
指定维度 - 对指定维度的所有输入值应用函数。
依存关系
要启用此参数,请将输入的数目设置为 *
并将乘法设置为按元素(.*)。
编程用法
模块参数:CollapseMode |
类型:字符向量 |
值:'All dimensions' | 'Specified dimension' |
默认值:'All dimensions' |
维度 — 要沿其相乘的维度
1
(默认) | 正整数
指定要沿其相乘的维度,值为正整数。例如,对于二维矩阵,1
将函数应用于每列,2
将函数应用于每行。
例如,在此模型中,将乘法设置为按元素方式(.*),将应用于设置为指定的维度,将维度设置为 2
。该模块返回每行中所有值的乘积。
依存关系
要启用此参数,请进行如下设置:
将输入的数目设置为
*
将乘法设置为按元素(.*)
将应用于设置为指定的维度
编程用法
模块参数:CollapseDim |
类型:字符向量 |
值:'1' | '2' | ... |
默认值:'1' |
采样时间(-1 表示继承) — 采样之间的时间间隔
-1
(默认) | 标量 | 向量
指定采样时间间隔。要继承采样时间,请将此参数设置为 -1
。有关详细信息,请参阅指定采样时间。
依存关系
仅当您将此参数设置为 -1
以外的值时才可见。要了解详细信息,请参阅不建议设置采样时间的模块。
编程用法
模块参数:SampleTime |
类型:字符串标量或字符向量 |
默认值:"-1" |
信号属性
要求所有输入具有相同的数据类型 — 要求所有输入具有相同的数据类型
off
(默认) | on
指定输入信号是否必须全部具有相同的数据类型。如果启用此参数,则在输入信号类型不同时,仿真过程中会发生错误。
编程用法
模块参数:InputSameDT |
类型:字符向量 |
值:'off' | 'on' |
默认值:'off' |
输出最小值 — 范围检查的最小输出值
[]
(默认) | 标量
Simulink 检查的输出范围的下限值。
Simulink 使用最小值执行下列操作:
某些模块的参数范围检查(请参阅指定模块参数的最小值和最大值)。
定点数据类型的自动定标。
从模型生成的代码的优化。此优化可删除算法代码,并影响某些仿真模式(如 SIL 或外部模式)的结果。有关详细信息,请参阅Optimize using the specified minimum and maximum values (Embedded Coder)。
注意
输出最小值不会对实际输出信号进行饱和处理或截断。请改用 Saturation 模块。
编程用法
模块参数:OutMin |
类型:字符向量 |
值:'[ ]' | 标量 |
默认值:'[ ]' |
输出最大值 — 范围检查的最大输出值
[]
(默认) | 标量
Simulink 检查的输出范围的上限值。
Simulink 使用最大值执行下列操作:
某些模块的参数范围检查(请参阅指定模块参数的最小值和最大值)。
定点数据类型的自动定标。
从模型生成的代码的优化。此优化可删除算法代码,并影响某些仿真模式(如 SIL 或外部模式)的结果。有关详细信息,请参阅Optimize using the specified minimum and maximum values (Embedded Coder)。
注意
输出最大值不会对实际输出信号进行饱和处理或截断。请改用 Saturation 模块。
编程用法
模块参数:OutMax |
类型:字符向量 |
值:'[ ]' | 标量 |
默认值:'[ ]' |
输出数据类型 — 指定输出数据类型
继承: 从内部规则继承 (默认) | 继承: 通过反向传播继承 | 继承: 与第一个输入相同 | double | single | int8 | uint8 | int16 | uint16 | int32 | uint32 | int64 | uint64 | fixdt(1,16) | fixdt(1,16,0) | fixdt(1,16,2^0,0) | <数据类型表达式>
为输出选择数据类型。该类型可以继承、直接指定或表示为数据类型对象,如 Simulink.NumericType
。有关详细信息,请参阅 控制信号的数据类型。
当您选择继承的选项时,模块的行为如下所示:
继承: 从内部规则继承 - Simulink 在考虑嵌入式目标硬件的属性的同时,会选择相应的数据类型来平衡数值准确性、性能和生成的代码大小。如果更改了嵌入式目标的设置,则依内部规则选择的数据类型可能会发生变化。例如,如果该模块将
int8
类型的输入乘以int16
的增益,并且将 ASIC/FPGA 指定为目标硬件类型,则输出数据类型为sfix24
。如果指定未指定(假定通用 32 位)(即通用 32 位微处理器)为目标硬件,则输出数据类型为int32
。如果目标微处理器不能提供适应输出范围的字长,Simulink 软件将在诊断查看器中显示错误。有时软件不能同时满足优化代码效率和保证数值准确性这两个需求。如果内部规则不能满足您对数值准确性或性能的特定需求,请使用下列选项之一:
显式指定输出数据类型。
使用简单的选项继承: 与输入相同。
显式指定默认数据类型(例如
fixdt(1,32,16)
),然后使用定点工具为您的模型提供数据类型建议。有关详细信息,请参阅fxptdlg
(Fixed-Point Designer)。要指定您自己的继承规则,请使用继承: 通过反向传播继承,然后使用 Data Type Propagation 模块。有关如何使用此模块的示例说明,请参阅 Signal Attributes 模块库中的 Data Type Propagation Examples 模块。
继承: 通过反向传播继承 - 使用驱动模块的数据类型。
继承: 与第一个输入相同 - 使用第一个输入信号的数据类型。
依存关系
当输入是小于单精度的浮点数据类型时,继承: 从内部规则继承输出数据类型取决于 Inherit floating-point output type smaller than single precision 配置参数的设置。当对数据类型进行编码所需的位数小于对单精度数据类型编码所需的 32 位时,数据类型小于单精度。例如,half
和 int16
小于单精度。
编程用法
模块参数: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' |
锁定输出数据类型设置以防止被定点工具更改 — 用于防止定点工具覆盖输出数据类型的选项
off
(默认) | on
选择此参数可防止定点工具覆盖您在模块上指定的输出数据类型。有关详细信息,请参阅Use Lock Output Data Type Setting (Fixed-Point Designer)。
编程用法
模块参数:LockScale |
类型:字符向量 |
值:'off' | 'on' |
默认值:'off' |
整数舍入模式 — 定点运算的舍入模式
向下 (默认) | 向上 | 收敛 | 最邻近值 | 舍入 | 最简 | 零
选择定点运算的舍入模式。您可以选择:
- 向上
朝正无穷方向舍入正数和负数。等同于 MATLAB®
ceil
函数。- 收敛
将数值舍入到最邻近的可表示值。如果出现结值,则舍入到最邻近的偶数整数。等同于 Fixed-Point Designer™
convergent
函数。- 向下
朝负无穷方向舍入正数和负数。等同于 MATLAB
floor
函数。- 最邻近值
将数值舍入到最邻近的可表示值。如果出现结值,则朝正无穷方向舍入。等同于 Fixed-Point Designer
nearest
函数。- 舍入
将数值舍入到最邻近的可表示值。如果出现结值,则将正数朝正无穷方向舍入,将负数朝负无穷方向舍入。等同于 Fixed-Point Designer
round
函数。- 最简
在向负无穷大方向舍入和向零舍入之间选择,以生成尽可能有效的舍入代码。
- 零
将数值向零舍入。等同于 MATLAB
fix
函数。
有关详细信息,请参阅舍入 (Fixed-Point Designer)。
模块参数始终舍入到最邻近的可表示值。要控制模块参数的舍入方法,请在封装字段中使用 MATLAB 舍入函数输入表达式。
编程用法
模块参数:RndMeth |
类型:字符向量 |
值:'Ceiling' | 'Convergent' | 'Floor' | 'Nearest' | 'Round' | 'Simplest' | 'Zero' |
默认值:'Floor' |
对整数溢出进行饱和处理 — 溢出操作的方法
off
(默认) | on
指定对溢出是进行饱和处理还是绕回处理。
操作 | 原理说明 | 对溢出的影响 | 示例 |
---|---|---|---|
选中此复选框 ( | 您的模型可能有溢出,并且您希望在生成的代码中具有显式饱和保护。 | 将溢出饱和处理为数据类型能够表示的最小值或最大值。 |
|
不选中此复选框 ( | 您需要优化所生成代码的效率。 您希望避免过度地指定信号超出范围时的处理方式。有关详细信息,请参阅信号范围错误故障排除。 | 溢出会绕回到由数据类型表示的适当值。 |
|
如果选中此复选框,饱和将应用于模块中的每个内部操作,而不仅仅应用于输出或结果。通常,代码生成过程可以检测何时不会发生溢出。在这种情况下,代码生成器不会生成饱和代码。
编程用法
模块参数:SaturateOnIntegerOverflow |
类型:字符向量 |
值:'off' | 'on' |
默认值:'off' |
模式 — 选择数据类型模式
Inherit
(默认) | Built in
| Fixed Point
选择要指定的数据类别。
继承 - 数据类型的继承规则。选择
Inherit
将在右侧启用另一个菜单/文本框,您可以在其中选择继承模式。内置 - 内置数据类型。选择
Built in
将在右侧启用另一个菜单/文本框,您可以在其中选择内置数据类型。定点 - 定点数据类型。选择定点将启用可用于指定定点数据类型的其他参数。
表达式 - 计算结果为数据类型的表达式。选择
Expression
将在右侧启用另一个菜单/文本框,您可以在其中输入表达式。
有关详细信息,请参阅使用数据类型助手指定数据类型。
依存关系
要启用此参数,请点击显示数据类型助手按钮。
数据类型覆盖 — 为此信号指定数据类型覆盖模式
Inherit
| Off
为此信号选择数据类型覆盖模式。
当您选择 inherit 时,Simulink 从信号的上下文(即:从 Simulink 中使用该信号的模块、
Simulink.Signal
对象或 Stateflow® 图)中继承数据类型覆盖设置。当您选择 off 时,Simulink 忽略信号上下文的数据类型覆盖设置,并使用为信号指定的定点数据类型。
有关详细信息,请参阅 Simulink 文档中的使用数据类型助手指定数据类型。
依存关系
要启用此参数,请将模式设置为内置或定点。
提示
由于能够关闭单个数据类型的数据类型覆盖,您可以在应用数据类型覆盖时更好地控制模型中的数据类型。例如,您可以使用此选项确保数据类型满足下游模块的要求,而忽略数据类型覆盖设置。
符号性 — 指定有符号或无符号
Signed
(默认) | Unsigned
指定定点数据是有符号还是无符号。有符号数据可以表示正值和负值,无符号数据只表示正值。
有符号,将定点数据指定为有符号数据。
无符号,将定点数据指定为无符号数据。
有关详细信息,请参阅使用数据类型助手指定数据类型。
依存关系
要启用此参数,请将模式设置为 Fixed point
。
字长 — 存储量化整数的字的位大小
16
(默认) | 从 0 到 32 的整数
小数长度 — 指定定点数据类型的小数长度
0
(默认) | 标量整数
定标 — 定标定点数据的方法
最佳精度 (默认) | 二进制小数点 | 斜率和偏置
斜率 — 指定定点数据类型的斜率。
2^0
(默认) | 正实数值标量
偏置 — 指定定点数据类型的偏置。
0
(默认) | 实数值标量
模块特性
数据类型 |
|
直接馈通 |
|
多维信号 |
|
可变大小信号 |
|
过零检测 |
|
算法
Product of Elements 模块使用以下算法对浮点、内置整数和定点类型的输入执行按元素运算。
输入 | 按元素运算 | 算法 |
---|---|---|
实数标量, | 乘法 | y = u |
除法 | y = 1/u | |
实数向量或矩阵,包含元素 | 乘法 | y = u1*u2*u3*...*uN |
除法 | y = ((((1/u1)/u2)/u3).../uN) | |
复数标量, | 乘法 | y = u |
除法 | y = 1/u | |
复数向量或矩阵,包含元素 | 乘法 | y = u1*u2*u3*...*uN |
除法 | y = ((((1/u1)/u2)/u3).../uN) |
如果为按元素乘法或除法指定的维度是矩阵的一行或一列,算法将应用于该行或该列。请考虑 使用 Product of Elements 模块的复数除法 示例。
上面的 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++ 代码。
HDL 代码生成
使用 HDL Coder™ 为 FPGA 和 ASIC 设计生成 VHDL、Verilog 和 SystemVerilog 代码。
HDL Coder™ 提供影响 HDL 实现和综合逻辑的额外配置选项。
对于具有包含多个元素的单个向量输入的 Product 或 Product of Elements 模块,HDL Coder 支持树架构。
此模块具有多周期实现,这会在生成的代码中引入额外的延迟。要查看增加的延迟,请查看生成的模型或验证模型。请参阅Generated Model and Validation Model (HDL Coder)。
架构 | 额外的延迟周期 | 描述 |
---|---|---|
线性(默认值) | 0 | 生成线性加法器链来计算乘积之和。 |
树 | 0 | 生成加法器树形结构来计算乘积之和。 |
注意
在 Native Floating Point
模式下,Product of Element 模块不支持使用 double
数据类型的 HDL 代码生成。
如果在矩阵乘法模式下使用该模块,可以指定 DotProductStrategy。此设置决定您是要通过使用加法器和乘法器树来实现矩阵乘法,还是使用 Multiply-Accumulate 模块实现。默认值为 Fully Parallel
。
注意
使用 Native Floating Point
模式时,DotProductStrategy 必须设置为 Fully Parallel
。
有关详细信息,请参阅 DotProductStrategy (HDL Coder)。
另请参阅Design Considerations for Matrices and Vectors (HDL Coder)。
通用 | |
---|---|
ConstrainedOutputPipeline | 通过移动设计中现有延迟的方式来放置在输出端的寄存器的数量。分布式流水线不会重新分发这些寄存器。默认值为 |
DSPStyle | 乘法器映射的综合属性。默认值为无。另请参阅DSPStyle (HDL Coder)。 |
InputPipeline | 要在生成的代码中插入的输入流水线阶段数。分布式流水线和受限输出流水线可以移动这些寄存器。默认值为 |
OutputPipeline | 要在生成的代码中插入的输出流水线阶段数。分布式流水线和受限输出流水线可以移动这些寄存器。默认值为 |
本机浮点 | |
---|---|
HandleDenormals | 指定是否希望 HDL Coder 在设计中插入额外的逻辑来处理非正规数字。非正规数是量级非常小、必须使用包含前导零的尾数才能表示的浮点数。默认值为 inherit。另请参阅HandleDenormals (HDL Coder)。 |
LatencyStrategy | 指定对于浮点运算符是否将设计中的模块映射到 |
NFPCustomLatency | 要指定值,请将 LatencyStrategy 设置为 |
MantissaMultiplyStrategy | 指定在代码生成期间如何实现尾数乘法运算。通过使用不同设置,您可以控制目标 FPGA 设备上 DSP 的使用。默认值为 inherit。另请参阅MantissaMultiplyStrategy (HDL Coder)。 |
默认(线性)实现支持复数数据。
不支持复数除法。关于在除法模式或倒数模式下 Product 模块的模块实现,请参阅 Divide 模块参考页上的 HDL 代码生成。
PLC 代码生成
使用 Simulink® PLC Coder™ 生成结构化文本代码。
定点转换
使用 Fixed-Point Designer™ 设计和仿真定点系统。
版本历史记录
在 R2006a 之前推出
另请参阅
Product | Divide | Dot Product
MATLAB 命令
您点击的链接对应于以下 MATLAB 命令:
请在 MATLAB 命令行窗口中直接输入以执行命令。Web 浏览器不支持 MATLAB 命令。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)