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

库:
Simulink /
Math Operations
HDL Coder /
HDL Floating Point Operations
HDL Coder /
Math Operations
描述
示例
端口
输入
要进行乘法或除法运算的第一个输入,作为标量、向量、矩阵或 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 端口,请为输入数目参数指定一个或多个 *
字符。
数据类型: 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
输出
通过对输入进行乘法、除法或逆运算来计算得出输出。
数据类型: 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
将函数应用于每列,2
将函数应用于每行。
例如,在此模型中,将乘法设置为按元素方式(.*),将应用于设置为指定的维度,将维度设置为 2
。该模块返回每行中所有值的乘积。
依赖关系
要启用此参数,请进行如下设置:
将输入数目设置为
*
将乘法设置为按元素(.*)
将应用于设置为指定的维度
编程用法
模块参数:CollapseDim |
类型:字符向量 |
值:'1' | '2' | ... |
默认值:'1' |
指定采样时间间隔。要继承采样时间,请将此参数设置为 -1
。有关详细信息,请参阅指定采样时间。
依赖关系
仅当您将此参数设置为 -1
以外的值时才可见。要了解详细信息,请参阅不建议设置采样时间的模块。
编程用法
要以编程方式设置模块参数值,请使用 set_param
函数。
参数: | SampleTime |
值: | "-1" (默认) | scalar or vector in quotes |
信号属性
指定输入信号是否必须全部具有相同的数据类型。如果启用此参数,则在输入信号类型不同时,仿真过程中会发生错误。
编程用法
模块参数:InputSameDT |
类型:字符向量 |
值:'off' | 'on' |
默认值:'off' |
软件检查的输出范围的下限值。
软件使用最小值执行下列操作:
某些模块的参数范围检查(请参阅指定模块参数的最小值和最大值)。
定点数据类型的自动定标。
从模型生成的代码的优化。此优化可删除算法代码,并影响某些仿真模式(如 SIL 或外部模式)的结果。有关详细信息,请参阅Optimize using the specified minimum and maximum values (Embedded Coder)。
提示
输出最小值不会对实际输出信号进行饱和处理或截断。请改用 Saturation 模块。
编程用法
要以编程方式设置模块参数值,请使用 set_param
函数。
参数: | OutMin |
值: | '[]' (默认) | scalar in quotes |
软件检查的输出范围的上限值。
软件使用最大值执行下列操作:
某些模块的参数范围检查(请参阅指定模块参数的最小值和最大值)。
定点数据类型的自动定标。
从模型生成的代码的优化。此优化可删除算法代码,并影响某些仿真模式(如 SIL 或外部模式)的结果。有关详细信息,请参阅Optimize using the specified minimum and maximum values (Embedded Coder)。
提示
输出最大值不会对实际输出信号进行饱和处理或截断。请改用 Saturation 模块。
编程用法
要以编程方式设置模块参数值,请使用 set_param
函数。
参数: | OutMax |
值: | '[]' (默认) | scalar in quotes |
为输出选择数据类型。该类型可以继承、直接指定或表示为数据类型对象,如 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' |
选择此参数可防止定点工具覆盖您在模块上指定的输出数据类型。有关详细信息,请参阅Use Lock Output Data Type Setting (Fixed-Point Designer)。
编程用法
要以编程方式设置模块参数值,请使用 set_param
函数。
参数: | LockScale |
值: | 'off' (默认) | 'on' |
选择定点运算的舍入模式。您可以选择:
- 向上
朝正无穷方向舍入正数和负数。等同于 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' |
指定对溢出是进行饱和处理还是绕回处理。
on
- 将溢出饱和处理为数据类型能够表示的最小值或最大值。off
- 溢出将绕回到数据类型可以表示的合适值。
例如,有符号 8 位整数 int8
可以表示的最大值是 127。任何大于此最大值的模块运算结果都会导致 8 位整数溢出。
选择此参数后,模块输出将在达到 127 时饱和。类似地,模块输出将在达到最小输出值 -128 时饱和。
清除此参数后,软件会将导致溢出的值解释为
int8
,这可能产生意外结果。例如,以int8
表示的模块结果 130(二进制 1000 0010)为 -126。
提示
如果您的模型存在可能的溢出,而您希望在生成的代码中进行显式饱和保护,请考虑选中此参数。
如果您希望优化生成的代码的效率,请考虑清除此参数。清除此参数还可以帮助您避免过度地指定信号超出范围时模块的处理方式。有关详细信息,请参阅信号范围错误故障排除。
如果选中此参数,饱和将应用于模块中的每个内部操作,而不仅仅应用于输出或结果。
一般情况下,代码生成进程可以检测到何时不可能发生溢出。在这种情况下,代码生成器不会生成饱和代码。
编程用法
要以编程方式设置模块参数值,请使用 set_param
函数。
参数: | SaturateOnIntegerOverflow |
值: | 'off' (默认) | 'on' |
选择要指定的数据类别。
继承 - 数据类型的继承规则。选择
Inherit
将在右侧启用另一个菜单/文本框,您可以在其中选择继承模式。内置 - 内置数据类型。选择
Built in
将在右侧启用另一个菜单/文本框,您可以在其中选择内置数据类型。定点 - 定点数据类型。选择定点将启用可用于指定定点数据类型的其他参数。
表达式 - 计算结果为数据类型的表达式。选择
Expression
将在右侧启用另一个菜单/文本框,您可以在其中输入表达式。
有关详细信息,请参阅使用数据类型助手指定数据类型。
依赖关系
要启用此参数,请点击显示数据类型助手按钮。
为此信号选择数据类型覆盖模式。
当您选择 inherit 时,Simulink 从信号的上下文(即:从 Simulink 中使用该信号的模块、
Simulink.Signal
对象或 Stateflow® 图)中继承数据类型覆盖设置。当您选择 off 时,Simulink 忽略信号上下文的数据类型覆盖设置,并使用为信号指定的定点数据类型。
有关详细信息,请参阅 Simulink 文档中的使用数据类型助手指定数据类型。
依赖关系
要启用此参数,请将模式设置为内置或定点。
提示
由于能够关闭单个数据类型的数据类型覆盖,您可以在应用数据类型覆盖时更好地控制模型中的数据类型。例如,您可以使用此选项确保数据类型满足下游模块的要求,而忽略数据类型覆盖设置。
指定定点数据是有符号还是无符号。有符号数据可以表示正值和负值,无符号数据只表示正值。
有符号,将定点数据指定为有符号数据。
无符号,将定点数据指定为无符号数据。
有关详细信息,请参阅使用数据类型助手指定数据类型。
依赖关系
要启用此参数,请将模式设置为 Fixed point
。
模块特性
数据类型 |
|
直接馈通 |
|
多维信号 |
|
可变大小信号 |
|
过零检测 |
|
算法
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 Coder™ 提供影响 HDL 实现和综合逻辑的额外配置选项。
对于具有包含多个元素的单个向量输入的 Product 或 Product of Elements 模块,HDL Coder 支持树架构。
架构 | 描述 |
---|---|
线性(默认值) | 生成线性加法器链来计算乘积之和。 |
树 | 生成加法器树形结构来计算乘积之和。 |
如果在矩阵乘法模式下使用该模块,可以指定 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 Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
选择网站
选择网站以获取翻译的可用内容,以及查看当地活动和优惠。根据您的位置,我们建议您选择:。
您也可以从以下列表中选择网站:
如何获得最佳网站性能
选择中国网站(中文或英文)以获得最佳网站性能。其他 MathWorks 国家/地区网站并未针对您所在位置的访问进行优化。
美洲
- América Latina (Español)
- Canada (English)
- United States (English)
欧洲
- 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)