Gain
将输入乘以常量
库:
Simulink /
Commonly Used Blocks
Simulink /
Math Operations
HDL Coder /
Commonly Used Blocks
HDL Coder /
HDL Floating Point Operations
HDL Coder /
Math Operations
描述
Gain 模块将输入乘以一个常量值,即增益。输入和增益可以是标量、向量或矩阵。
在增益参数中指定增益的值。乘法参数用于指定按元素还是矩阵乘法。对于矩阵乘法,此参数还用于指示被乘数的阶。
通过舍入到最邻近整数和饱和操作将增益从双精度型离线转换为模块封装中指定的数据类型。然后将输入和增益相乘,结果通过指定的舍入和溢出模式转换为输出数据类型。
示例
扩展示例
弹球的仿真
此示例使用一个弹球的两个模型来说明对具有 Zeno 行为的混合动态系统进行建模的不同方法。一般来说,Zeno 行为的特征可非正式地表示为某些混合系统在有限时间间隔内发生无限数量的事件。球在失去能量的同时,球与地面发生碰撞的时间间隔越来越短。
具有闭环控制的发动机定时模型
此示例说明如何为Model Engine Timing Using Triggered Subsystems中所述的开环发动机模型开发和实现闭环控制算法。在此示例中,模型 sldemo_enginewc 包含控制器,该控制器使用快速节气门作动器来调节发动机转速,以使负载转矩的变化产生的影响最小。该控制器是使用离散 PI 控制器实现的。
端口
输入
Gain 模块接受实数或复数值标量、向量或矩阵输入。Gain 模块支持定点数据类型。如果 Gain 模块的输入为实数,增益为复数,则输出为复数。
数据类型: half | single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | Boolean | fixed point
复数支持: 是
输出
Gain 模块的输出是输入乘以常量增益值的结果。当 Gain 模块的输入为实数且增益为复数时,输出为复数。
数据类型: half | single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | Boolean | fixed point
复数支持: 是
参数
要以交互方式编辑模块参数,请使用属性检查器。在 Simulink® 工具条中,在仿真选项卡的准备库中,选择属性检查器。
常设
指定要与输入相乘的值。增益可以是实数或复数值标量、向量或矩阵。
编程用法
要以编程方式设置模块参数值,请使用 set_param 函数。
| 参数: | Gain |
| 值: | '1' (默认) | real or complex-valued scalar, vector, or matrix in quotes |
指定下列乘法模式之一:
按元素(K.*u) - 输入的每个元素乘以增益的每个元素。如有必要,该模块会执行扩展,以使输入和增益具有相同的维度。
矩阵(K*u) - 输入和增益按矩阵乘法方式相乘,其中输入为第二个操作数。
矩阵(u*K) - 输入和增益按矩阵乘法方式相乘,其中输入为第一个操作数。
矩阵(K*u) (u 向量) - 输入和增益按矩阵乘法方式相乘,其中输入为第二个操作数。除了确定维度的方式,此模式与
Matrix(K*u)相同。假设
K是一个m-by-n矩阵。Matrix(K*u)(u vector)将输入设置为长度为n的向量,将输出设置为长度为m的向量。相比之下,Matrix(K*u)则是使用传播来确定输入和输出的维度。对于m-by-n增益矩阵,输入可以传播到n-by-q矩阵,并且输出变为m-by-q矩阵。
编程用法
要以编程方式设置模块参数值,请使用 set_param 函数。
| 参数: | Multiplication |
| 值: | 'Element-wise(K.*u)' (默认) | 'Matrix(K*u)' | 'Matrix(u*K)' | 'Matrix(K*u) (u vector)' |
指定采样时间间隔。要继承采样时间,请将此参数设置为 -1。有关详细信息,请参阅指定采样时间。
依赖关系
仅当您将此参数设置为 -1 以外的值时才可见。要了解详细信息,请参阅不建议设置采样时间的模块。
编程用法
要以编程方式设置模块参数值,请使用 set_param 函数。
| 参数: | SampleTime |
| 值: | "-1" (默认) | scalar or vector in quotes |
信号属性
软件检查的输出范围的下限值。
软件使用最小值执行下列操作:
某些模块的参数范围检查(请参阅指定模块参数的最小值和最大值)。
定点数据类型的自动定标。
从模型生成的代码的优化。此优化可删除算法代码,并影响某些仿真模式(如 SIL 或外部模式)的结果。有关详细信息,请参阅使用指定的最小值和值进行优化 (Embedded Coder)。
提示
输出最小值不会对实际输出信号进行饱和处理或截断。请改用 Saturation 模块。
编程用法
要以编程方式设置模块参数值,请使用 set_param 函数。
| 参数: | OutMin |
| 值: | '[]' (默认) | scalar in quotes |
软件检查的输出范围的上限值。
软件使用最大值执行下列操作:
某些模块的参数范围检查(请参阅指定模块参数的最小值和最大值)。
定点数据类型的自动定标。
从模型生成的代码的优化。此优化可删除算法代码,并影响某些仿真模式(如 SIL 或外部模式)的结果。有关详细信息,请参阅使用指定的最小值和值进行优化 (Embedded Coder)。
提示
输出最大值不会对实际输出信号进行饱和处理或截断。请改用 Saturation 模块。
编程用法
要以编程方式设置模块参数值,请使用 set_param 函数。
| 参数: | OutMax |
| 值: | '[]' (默认) | scalar in quotes |
为输出选择数据类型。该类型可以继承、直接指定或表示为数据类型对象,如 Simulink.NumericType。
当您选择继承的选项时,模块的行为如下所示:
继承: 从内部规则继承 - 软件在考虑嵌入式目标硬件的属性的同时,会选择相应的数据类型来平衡数值准确性、性能和生成的代码大小。如果更改了嵌入式目标的设置,则依内部规则选择的数据类型可能会发生变化。例如,如果该模块将
int8类型的输入乘以int16的增益,并且将 ASIC/FPGA 指定为目标硬件类型,则输出数据类型为sfix24。如果指定未指定(假定通用 32 位)(即通用 32 位微处理器)为目标硬件,则输出数据类型为int32。如果目标微处理器不能提供适应输出范围的字长,软件将在诊断查看器中显示错误。继承: 保留 MSB - 软件选择一种能够保持运算的完整范围的数据类型,然后将输出精度降低到适合嵌入式目标硬件的大小。
提示
要获得更高效的生成代码,请清除对整数溢出进行饱和处理。
此规则从不产生溢出。
继承: 匹配定标 - 软件选择一种数据类型,其定标与输入类型的定标相匹配。如果该类型的完整范围不适合嵌入式目标硬件,则该范围会缩小,从而生成适合嵌入式目标硬件的类型。此规则可能产生溢出。
有时软件不能同时满足优化代码效率和保证数值准确性这两个需求。如果这些内部规则不能满足您对数值准确性或性能的特定需求,请使用下列选项之一:
显式指定输出数据类型。
使用简单的选项继承: 与输入相同。
显式指定默认数据类型(例如
fixdt(1,32,16)),然后使用定点工具为您的模型提供数据类型建议。有关详细信息,请参阅fxptdlg(Fixed-Point Designer)。要指定您自己的继承规则,请使用继承: 通过反向传播继承并使用 Data Type Propagation 模块。有关如何使用此模块的示例说明,请参阅 Signal Attributes 模块库中的 Data Type Propagation Examples 模块。
继承: 通过反向传播继承 - 使用驱动模块的数据类型。
继承: 与输入相同 - 使用输入信号的数据类型。
依赖关系
当输入是小于单精度的浮点数据类型时,继承:通过内部规则继承输出数据类型取决于继承小于单精度的浮点输出类型配置参数的设置。当对数据类型进行编码所需的位数小于对单精度数据类型编码所需的 32 位时,数据类型小于单精度。例如,half 和 int16 小于单精度。
编程用法
要以编程方式设置模块参数值,请使用 set_param 函数。
| 参数: | OutDataTypeStr |
| 值: | 'Inherit: Inherit via internal rule' (默认) | 'Inherit: Keep MSB' | 'Inherit: Match scaling' | 'Inherit: Inherit via back propagation' | 'Inherit: Same as input' | 'double' | 'single' | 'half' | 'int8' | 'uint8' | 'int16' | 'uint16' | 'int32' | 'uint32' | 'int64' | 'uint64' | 'fixdt(1,16)' | 'fixdt(1,16,0)' | 'fixdt(1,16,2^0,0)' | '<data type expression>' |
选择此参数可防止定点工具覆盖您在模块上指定的输出数据类型。有关详细信息,请参阅Use Lock Output Data Type Setting (Fixed-Point Designer)。
编程用法
要以编程方式设置模块参数值,请使用 set_param 函数。
| 参数: | LockScale |
| 值: | 'off' (默认) | 'on' |
指定对溢出是进行饱和处理还是绕回处理。
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。
参数属性
指定增益的最小值。默认值为 [](未指定)。软件使用此值执行:
参数范围检查(请参阅指定模块参数的最小值和最大值)
定点数据类型的自动定标
编程用法
要以编程方式设置模块参数值,请使用 set_param 函数。
| 参数: | ParamMin |
| 值: | '[]' (默认) | scalar in quotes |
指定增益的最大值。默认值为 [](未指定)。软件使用此值执行:
参数范围检查(请参阅指定模块参数的最小值和最大值)
定点数据类型的自动定标
编程用法
要以编程方式设置模块参数值,请使用 set_param 函数。
| 参数: | ParamMax |
| 值: | '[]' (默认) | scalar in quotes |
指定增益参数的数据类型。
将参数数据类型设置为继承:通过内部规则继承允许 Gain 模块基于内部启发式方法选择数据类型,该算法查看当前增益值,并提供全精度数据类型来表示当前增益值。当您更新图时,软件会推断出一种适用于增益值 3 的高精度且无范围损失的数据类型。例如,使用这种启发式方法,如果指定的增益值是 3,则 Gain 模块推断出 sfix32_En29 的所选数据类型。因此,这种推断出的数据类型无法保留大于 4 的值。在仿真期间,如果将增益值调节为 6,则所选数据类型中会发生溢出,并且该行为是非预期行为。
使用此参数数据类型设置调节参数时,请指定参数最小值和参数最大值参数。这些设置指定软件在仿真期间您需要的值的范围,并允许软件提供具有足够范围的全精度数据类型,以支持在指定范围内安全调节增益值。
编程用法
要以编程方式设置模块参数值,请使用 set_param 函数。
| 参数: | ParamDataTypeStr |
| 值: | 'Inherit: Inherit via internal rule' (默认) | 'Inherit: Same as input' | 'Inherit: Inherit from 'Gain'' | 'double' | 'single' | 'half' | 'int8' | 'uint8' | 'int16' | 'uint16' | 'int32' | 'uint32' | 'int64' | 'uint64' | 'fixdt(1,16)' | 'fixdt(1,16,0)' | 'fixdt(1,16,2^0,0)' | '<data type expression>' |
模块特性
数据类型 |
|
直接馈通 |
|
多维信号 |
|
可变大小信号 |
|
过零检测 |
|
扩展功能
C/C++ 代码生成
使用 Simulink® Coder™ 生成 C 代码和 C++ 代码。
HDL Coder™ 提供影响 HDL 实现和综合逻辑的额外配置选项。
您可以在 Gain 模块中使用可调参数,用于 HDL 代码生成。有关详细信息,请参阅Generate DUT Ports for Tunable Parameters (HDL Coder)。
ConstMultiplierOptimization | 描述 |
|---|---|
none(默认值) | 默认情况下,HDL Coder 不执行 CSD 或 FCSD 优化。为 Gain 模块生成的代码会保留乘法器运算。 |
csd | 当您指定此选项时,生成的代码会使用正则有符号数 (CSD) 方法减少模型使用的面积,同时保持或提高时钟速度。CSD 用加减运算取代乘法器运算。 CSD 使用尽可能少的非零位来表示二进制数,从而最大程度地减少常量乘法所需的加法运算次数。 |
fcsd | 此选项使用分解的 CSD (FCSD) 方法,该方法使用对操作数的某些因子的移位相加/减运算来代替乘法器运算。这些因子通常是质数,但也可以是接近 2 的幂的数,这有利于面积缩减。您可以通过 FCSD 实现更大的面积缩减,但这会以降低时钟速度为代价。 |
auto | 当您指定此选项时,代码生成器会在 CSD 或 FCSD 优化之间进行选择。代码生成器根据所需加法器的数量选择可产生最大面积效率实现的优化。当您指定 |
| 通用 | |
|---|---|
| ConstMultiplierOptimization | 正则有符号数 (CSD) 或因子化 CSD 优化。默认值为无。另请参阅ConstMultiplierOptimization (HDL Coder)。 |
| ConstrainedOutputPipeline | 通过移动设计中现有延迟的方式来放置在输出端的寄存器的数量。分布式流水线不会重新分发这些寄存器。默认值为 |
| DSPStyle | 乘法器映射的综合属性。默认值为无。另请参阅DSPStyle (HDL Coder)。 |
| InputPipeline | 要在生成的代码中插入的输入流水线阶段数。分布式流水线和受限输出流水线可以移动这些寄存器。默认值为 |
| OutputPipeline | 要在生成的代码中插入的输出流水线阶段数。分布式流水线和受限输出流水线可以移动这些寄存器。默认值为 |
注意
对于增益参数的某些值,原生浮点以不同方式实现算法,而不是使用乘法器。例如,如果您将增益参数设置为 1,生成的模型使用一条线将输入传递给输出。如果您将增益参数设置为 -1,生成的模型会显示 Unary Minus 模块,该模块会反转输入信号的极性。此实现可减少目标平台上的延迟和资源使用量。
| 原生浮点 | |
|---|---|
| HandleDenormals | 指定是否希望 HDL Coder 在设计中插入额外的逻辑来处理非正规数字。非正规数是大小非常小、必须使用包含前导零的尾数才能表示的浮点数。默认值为 inherit。另请参阅HandleDenormals (HDL Coder)。 |
| LatencyStrategy | 指定对于浮点运算符是否将设计中的模块映射到 |
| NFPCustomLatency | 要指定值,请将 LatencyStrategy 设置为 |
| MantissaMultiplyStrategy | 指定在代码生成期间如何实现尾数乘法运算。通过使用不同设置,您可以控制目标 FPGA 设备上 DSP 的使用。默认值为 inherit。另请参阅MantissaMultiplyStrategy (HDL Coder)。 |
此模块支持复信号的代码生成。
PLC 代码生成
使用 Simulink® PLC Coder™ 生成结构化文本代码。
定点转换
使用 Fixed-Point Designer™ 设计和仿真定点系统。
版本历史记录
在 R2006a 之前推出
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)



