Main Content

本页翻译不是最新的。点击此处可查看最新英文版本。

Gain

将输入乘以常量

  • Gain block

库:
Simulink / Commonly Used Blocks
Simulink / Math Operations
HDL Coder / Commonly Used Blocks
HDL Coder / HDL Floating Point Operations
HDL Coder / Math Operations

描述

Gain 模块将输入乘以一个常量值(增益)。输入和增益可以是标量、向量或矩阵。

增益参数中指定增益的值。乘法参数用于指定按元素还是矩阵乘法。对于矩阵乘法,此参数还用于指示被乘数的阶。

通过舍入到最接近的值和饱和操作将增益从双精度型离线转换为模块封装中指定的数据类型。然后将输入和增益相乘,结果通过指定的舍入和溢出模式转换为输出数据类型。

端口

输入

全部展开

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

参数

全部展开

常设

指定要与输入相乘的值。增益可以是实数或复数值标量、向量或矩阵。

编程用法

模块参数Gain
类型:字符向量
值:'1' | real- or complex-valued scalar, vector, or matrix
默认值:'1'

指定下列乘法模式之一:

  • 按元素(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 矩阵。

编程用法

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

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

依存关系

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

编程用法

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

信号属性

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

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

注意

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

编程用法

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

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

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

注意

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

编程用法

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

为输出选择数据类型。该类型可以继承、直接指定或表示为数据类型对象,如 Simulink.NumericType

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

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

  • Inherit: Keep MSB” - Simulink 选择一种能够保持运算的完整范围的数据类型,然后将输出精度降低到适合嵌入式目标硬件的大小。

    提示

    要获得更高效的生成代码,请取消选择对整数溢出进行饱和处理参数。

    此规则从不产生溢出。

  • Inherit: Match scaling” - 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 input” - 使用输入信号的数据类型。

依存关系

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

编程用法

模块参数OutDataTypeStr
类型:字符向量
'Inherit: Inherit via internal rule' | 'Inherit: Keep MSB' | 'Inherit: Match scaling' | 'Inherit: Same as input' | 'Inherit: Inherit via back propagation' | '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>'
默认值'Inherit: Inherit via internal rule'

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

编程用法

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

指定定点运算的舍入模式。有关详细信息,请参阅舍入 (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'

参数属性

指定增益的最小值。默认值为 [](未指定)。Simulink 使用此值来执行:

编程用法

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

指定增益的最大值。默认值为 [](未指定)。Simulink 使用此值来执行:

编程用法

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

指定增益参数的数据类型。

当参数数据类型设置为“通过内部规则继承”时调节增益参数值

参数数据类型设置为“继承:通过内部规则继承”允许 Gain 模块基于内部启发式方法选择数据类型,该算法查看当前增益值,并提供全精度数据类型来表示当前增益值。当您更新图时,Simulink 会推断出一种适用于增益值 3 的高精度且无范围损失的数据类型。例如,使用这种启发式方法,如果指定的增益值是 3,则 Gain 模块推断出 sfix32_En29 的所选数据类型。因此,这种推断出的数据类型无法保留大于 4 的值。在仿真期间,如果将增益值调节为 6,则所选数据类型中会发生溢出,并且该行为是非预期行为。

使用此参数数据类型设置调节参数时,请指定参数最小值参数最大值参数。这些设置指定 Simulink 在仿真期间您需要的值的范围,并允许 Simulink 提供具有足够范围的全精度数据类型,以支持在指定范围内安全调节增益值。

编程用法

模块参数 ParamDataTypeStr
类型:字符向量
'Inherit: Inherit via internal rule | 'Inherit: Same as input' | 'Inherit: Inherit via back propagation' | '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>'
默认值'Inherit: Inherit via internal rule'

模块特性

数据类型

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

直接馈通

多维信号

可变大小信号

过零检测

扩展功能

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

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

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

版本历史记录

在 R2006a 之前推出