Sqrt
计算平方根、带符号的平方根或平方根的倒数
库:
Simulink /
Math Operations
HDL Coder /
HDL Floating Point Operations
HDL Coder /
Math Operations
描述
Sqrt 模块计算输入信号的平方根、有符号平方根或平方根的倒数。从函数下拉列表中选择以下函数之一。
函数 | 描述 | 数学表达式 | MATLAB® 等效函数 |
---|---|---|---|
sqrt | 输入信号的平方根 |
| sqrt |
signedSqrt | 输入信号绝对值的平方根乘以输入信号的符号 |
| — |
rSqrt | 输入信号的平方根的倒数 |
| — |
模块图标将发生变化以匹配函数。
示例
负值的平方根
此示例说明如何将负值输入信号的平方根计算为复数值输出。
通过将函数设置为 sqrt
并将输出信号类型设置为 complex
,该模块将对输入值 -100
生成正确的结果 0 + 10i
。如果您将输出信号类型更改为 auto
或 real
,模块将输出 NaN
。
负值的有符号平方根
此示例说明如何计算负值输入信号的有符号平方根。
当模块输入为负值且您将函数设置为 signedSqrt
时,无论输出信号类型参数的设置如何,Sqrt 模块输出都相同。通过将第一个 Display 模块的数值显示格式设置为 decimal (Stored Integer)
,您可以看到复数输出的虚部值。
浮点输入的 rSqrt
此示例说明如何计算浮点输入信号的 rSqrt。Sqrt 模块具有以下设置:
方法 =
Newton-Raphson
迭代次数 =
1
中间结果数据类型 =
Inherit: Inherit from input
在牛顿-拉夫逊算法经过一次迭代后,模块输出与最终值 (0.4834) 的误差在 0.0004 内。
定点输入的 rSqrt
此示例说明如何计算定点输入信号的 rSqrt。Sqrt 模块具有以下设置:
方法 =
Newton-Raphson
迭代次数 =
1
中间结果数据类型 =
Inherit: Inherit from input
在牛顿-拉夫逊算法经过一次迭代后,模块输出与最终值 (0.4834) 的误差在 0.0459 内。
端口
输入
Port_1 — 输入信号
标量 | 向量 | 矩阵
模块的输入信号,用于计算平方根、有符号平方根或平方根的倒数。sqrt
函数接受实数或复数输入,但复数定点信号除外。signedSqrt
和 rSqrt
不接受复数输入。输入信号必须为浮点数。
下表总结了 sqrt
、rSqrt
和 signedSqrt
函数的浮点、整数和定点数据类型对复数类型和负值的支持。
函数 | 数据类型 | 复数 | 负值 | |
---|---|---|---|---|
输入 | 输出 | |||
sqrt | 浮点 | 是 | 是 | 是 |
整数和定点 | 否 | 否 | 否 | |
| 浮点 | 否 | 否 | 是 |
整数和定点 | 否 | 否 | 否 | |
signedSqrt | 浮点 | 否 | 是 | 是 |
整数和定点 | 否 | 否 | 否 |
如果输入为负数,请将除 signedSqrt
之外的所有函数的输出信号设置为复数。
数据类型: single
| double
| half
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| fixed point
输出
Port_1 — 输出信号
标量 | 向量 | 矩阵
输出信号,是输入信号的平方根、有符号平方根或平方根的倒数。当输入信号的类型为整数或定点时,输出必须为浮点。
数据类型: single
| double
| half
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| fixed point
参数
常设
函数 — 模块执行的函数
sqrt (默认) | signedSqrt | rSqrt
指定模块计算的数学函数。模块图标将发生变化以匹配您选择的函数。
函数 | 模块图标 |
---|---|
sqrt | |
signedSqrt | |
rSqrt |
依存关系
当此参数设置为 signedSqrt 时,中间结果数据类型参数被禁用。
编程用法
模块参数:Operator |
类型:字符向量 |
值:'sqrt' | 'signedSqrt' | 'rSqrt' |
默认值:'sqrt' |
输出信号类型 — 输出信号类型
自动 (默认) | 实数 | 复
指定模块的输出信号类型。
函数 | 输入信号类型 | 输出信号类型 | ||
---|---|---|---|---|
自动 | 实数 | 复数 | ||
|
| 对于非负输入为 对于负输入为 | 对于非负输入为 对于负输入为 |
|
|
|
|
| |
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
编程用法
模块参数:OutputSignalType |
类型:字符向量 |
值:'auto' | 'real' | 'complex' |
默认值:'auto' |
采样时间(-1 表示继承) — 采样之间的时间间隔
-1
(默认) | 标量 | 向量
指定采样时间间隔。要继承采样时间,请将此参数设置为 -1
。有关详细信息,请参阅指定采样时间。
依存关系
仅当您将此参数设置为 -1
以外的值时才可见。要了解详细信息,请参阅不建议设置采样时间的模块。
编程用法
模块参数:SampleTime |
类型:字符串标量或字符向量 |
默认值:"-1" |
算法
方法 — 计算平方根倒数的方法
完全 (默认) | 牛顿-拉夫逊
指定用于计算平方根倒数的方法。此参数仅对 rSqrt 函数有效。
方法 | 支持的数据类型 | 何时使用此方法 |
---|---|---|
完全 | 浮点 | 您不需要逼近值时。 注意 输入或输出必须为浮点类型。 |
牛顿-拉夫逊 | 浮点、定点和内置的整数类型 | 您需要快速的近似计算时。 |
完全方法提供了与 MATLAB 计算一致的结果。
注意
不管模块对话框中显示了哪些选项,sqrt
和 signedSqrt
的算法始终是完全。
编程用法
模块参数:AlgorithmType |
类型:字符向量 |
值:'Exact' | 'Newton-Raphson' |
默认值:'Exact' |
迭代次数 — 牛顿-拉夫逊算法的迭代次数
3
(默认) | 整数
指定执行牛顿-拉夫逊算法的迭代次数。在使用 rSqrt
函数且方法的值为牛顿-拉夫逊时,此参数有效。
注意
如果您输入 0,模块输出则是牛顿-拉夫逊算法的初始估计值。
编程用法
模块参数:Iterations |
类型:字符向量 |
值:整数 |
默认值:'3' |
数据类型
数据类型助手可帮助您设置数据属性。要使用数据类型助手,请点击 。有关详细信息,请参阅使用数据类型助手指定数据类型。
中间结果数据类型 — 中间结果的数据类型
继承: 通过内部规则继承 (默认) | 继承: 从输入继承 | 继承: 从输出继承 | double | single | int8 | uint8 | int16 | uint16 | int32 | uint32 | int64 | uint64 | fixdt(1,16,,0) | fixdt(1,16,2^0,0) | <数据类型表达式>
指定当您在常设窗格上将函数设置为 sqrt
或 rSqrt
时中间结果的数据类型。
该类型可以继承、直接指定或表示为数据类型对象,如 Simulink.NumericType
。
注意
为了避免溢出,中间数据类型必须大于或等于可以包含输出数据类型平方的数据类型。
为平方根函数 sqrt
显式设置中间数据类型时,请遵循以下规范:
输入和输出数据类型 | 中间数据类型 |
---|---|
输入或输出为双精度。 | 使用双精度。 |
输入或输出是单精度,而且有任何非单精度数据类型不是双精度。 | 使用单精度或双精度。 |
输入和输出是定点。 | 使用定点。 |
为平方根倒数函数 rSqrt
显式设置中间数据类型时,请遵循以下规范:
输入和输出数据类型 | 中间数据类型 |
---|---|
输入是双精度,输出不是单精度。 | 使用双精度。 |
输入不是单精度,输出是双精度。 | 使用双精度。 |
输入和输出是定点。 | 使用定点。 |
小心
在下列情况下,不要将中间结果数据类型设置为继承: 从输出继承:
您选择了牛顿-拉夫逊方法来计算平方根的倒数。
输入数据类型为浮点。
输出数据类型为定点。
在这些情况下,选择继承: 从输出继承 将会使性能受到影响并产生错误。
要避免此错误,请将浮点类型的输入信号转换成定点数据类型。例如,在 Sqrt 模块之前插入一个 Data Type Conversion 模块以执行转换。
依存关系
当函数参数设置为 signedSqrt 时,此参数被禁用。
编程用法
模块参数:IntermediateResultsDataTypeStr |
类型:字符向量 |
值:'Inherit: Inherit via internal rule' | 'Inherit: Inherit from input' | 'Inherit: Inherit from output' | 'double' | 'single' 、'int8' 、'uint8' 、int16 、'uint16' 、'int32' 、'uint32' 、'int64' 、'uint64' 、fixdt(1,16,0) 、fixdt(1,16,2^0,0) 。'<data type expression>' |
默认值:'Inherit: Inherit via internal rule' |
输出 — 输出数据类型
继承: 与第一个输入相同 (默认) | 继承: 从内部规则继承 | 继承: 通过反向传播继承 | double | single | half | int8 | int32 | uint32 | int64 | uint64 | fixdt(1,16,2^0,0) | <数据类型表达式> | ...
指定输出数据类型。该类型可以继承、直接指定或表示为数据类型对象,如 Simulink.NumericType
。
依存关系
当输入是小于单精度的浮点数据类型时,继承: 从内部规则继承输出数据类型取决于 Inherit floating-point output type smaller than single precision 配置参数的设置。当对数据类型进行编码所需的位数小于对单精度数据类型编码所需的 32 位时,数据类型小于单精度。例如,half
和 int16
小于单精度。
编程用法
模块参数:OutDataTypeStr |
类型:字符向量 |
值:'Inherit: Inherit via internal rule' | 'Inherit: Inherit via back propagation' | 'Inherit: Same as first input' | 'double' | 'single' | 'half' | 'int8' | 'uint8' | int16 | 'uint16' | 'int32' | 'uint32' | 'int64' | 'uint64' | fixdt(1,16,0) | fixdt(1,16,2^0,0) | fixdt(1,16,2^0,0) | '<data type expression>' |
默认值:'Inherit: Same as first input' |
最小值 — 范围检查的最小输出值
[]
(默认) | 标量
将 Simulink® 检查的输出范围的下限值指定为有限的双精度实数标量值。
注意
如果您指定总线对象作为此模块的数据类型,请不要为模块上的总线数据设置最小值。因为 Simulink 会忽略此设置。但请为指定作为数据类型的总线对象的总线元素设置最小值。有关总线元素的“最小值”参数的信息,请参阅 Simulink.BusElement
。
Simulink 使用最小值执行下列操作:
某些模块的参数范围检查(请参阅指定模块参数的最小值和最大值)。
定点数据类型的自动定标。
从模型生成的代码的优化。此优化可删除算法代码,并影响某些仿真模式(如 SIL 或外部模式)的结果。有关详细信息,请参阅Optimize using the specified minimum and maximum values (Embedded Coder)。
注意
输出最小值不会对实际输出信号进行饱和处理或截断。请改用 Saturation 模块。
编程用法
模块参数:OutMin |
类型:字符向量 |
值:标量 |
默认值:'[ ]' |
最大值 — 范围检查的最大输出值
[]
(默认) | 标量
将 Simulink 检查的输出范围的上限值指定为有限的双精度实数标量值。
注意
如果您指定总线对象作为此模块的数据类型,请不要为模块的总线数据设置最大值。因为 Simulink 会忽略此设置。但请为指定作为数据类型的总线对象的总线元素设置最大值。有关总线元素的“最大值”参数的信息,请参阅 Simulink.BusElement
。
Simulink 使用最大值执行下列操作:
某些模块的参数范围检查(请参阅指定模块参数的最小值和最大值)。
定点数据类型的自动定标。
从模型生成的代码的优化。此优化可删除算法代码,并影响某些仿真模式(如 SIL 或外部模式)的结果。有关详细信息,请参阅Optimize using the specified minimum and maximum values (Embedded Coder)。
注意
输出最大值不会对实际输出信号进行饱和处理或截断。请改用 Saturation 模块。
编程用法
模块参数:OutMax |
类型:字符向量 |
值:标量 |
默认值:'[ ]' |
整数舍入模式 — 定点运算的舍入模式
向下 (默认) | 向上 | 收敛 | 最邻近值 | 舍入 | 最简 | 零
指定定点运算的舍入模式。有关详细信息,请参阅舍入 (Fixed-Point Designer)。
编程用法
模块参数:RndMeth |
类型:字符向量 |
值:'Ceiling' | 'Convergent' | 'Floor' | 'Nearest' | 'Round' | 'Simplest' | 'Zero' |
默认值:'Floor' |
锁定输出数据类型设置以防止被定点工具更改 — 防止定点工具覆盖数据类型
off
(默认) | on
选中此选项将锁定此模块的输出数据类型设置,从而防止通过定点工具和定点顾问进行更改。有关详细信息,请参阅Use Lock Output Data Type Setting (Fixed-Point Designer)。
编程用法
模块参数:LockScale |
类型:字符向量 |
值:'off' | 'on' |
默认值:'off' |
对整数溢出进行饱和处理 — 选择发生整数溢出时的行为
off (默认) | on
操作 | 执行此操作的原因 | 溢出时会发生的情况 | 示例 |
---|---|---|---|
选中此复选框。 | 您的模型可能有溢出,并且您希望在生成的代码中具有显式饱和保护。 | 将溢出饱和处理为数据类型能够表示的最小值或最大值。 |
|
不选中此复选框。 | 您需要优化所生成代码的效率。 您希望避免过度地指定信号超出范围时的处理方式。有关详细信息,请参阅信号范围错误故障排除。 | 溢出会绕回到由数据类型表示的适当值。 |
|
如果选中此复选框,饱和将应用于模块中的每个内部操作,而不仅仅应用于输出或结果。通常,代码生成过程可以检测何时不会发生溢出。在这种情况下,代码生成器不会生成饱和代码。
编程用法
模块参数:DoSatur |
类型:字符向量 |
值:'off' | 'on' |
默认值:'off' |
模块特性
数据类型 |
|
直接馈通 |
|
多维信号 |
|
可变大小信号 |
|
过零检测 |
|
扩展功能
C/C++ 代码生成
使用 Simulink® Coder™ 生成 C 代码和 C++ 代码。
HDL 代码生成
使用 HDL Coder™ 为 FPGA 和 ASIC 设计生成 VHDL、Verilog 和 SystemVerilog 代码。
HDL Coder™ 提供影响 HDL 实现和综合逻辑的额外配置选项。
对于函数设置为 sqrt 的 Sqrt 模块,代码生成器支持各种架构和数据类型。
sqrtfunction 架构支持定点类型和浮点类型的代码生成。使用浮点类型时,请将浮点 IP 库参数设置为本机浮点。您可以指定 HDL 属性 LatencyStrategy 和 CustomLatency,以便在硬件平台上设计时从一系列频率值中进行选择。
将 HDL 模块属性 UseMultiplier 与 LatencyStrategy 和 CustomLatency 属性结合使用,以指定是使用流水线移位相加算法还是使用乘法算法来计算平方根
对于此架构,您可以在“HDL 模块属性”对话框的本机浮点选项卡中指定 HandleDenormals 和 LatencyStrategy 设置。
架构 | 定点 | 本机浮点 | HandleDenormals | LatencyStrategy |
---|---|---|---|---|
sqrtfunction | ✓ | ✓ | ✓ | ✓ |
sqrtnewton | ✓ | — | — | — |
sqrtnewtonsinglerate | ✓ | — | — | — |
recipsqrtnewton | ✓ | — | — | — |
recipsqrtnewtonsinglerate | ✓ | — | — | — |
此模块具有多周期实现,这会在生成的代码中引入额外的延迟。要查看增加的延迟,请查看生成的模型或验证模型。请参阅Generated Model and Validation Model (HDL Coder)。
架构 | 参数 | 额外的延迟周期 | 描述 |
---|---|---|---|
SqrtFunction(默认值) |
| 取决于参数选择项、输出字长以及输入和输出小数长度。 | 要指定此架构,请将函数设置为 sqrt 或 rSqrt。 使用流水线移位相加算法或基于乘法的算法计算平方根。 SqrtFunction 架构的最大延迟由输出字长以及定点数据的输入和输出小数长度确定。例如,如输出字长 要查看延迟计算,请参阅 HDLMathLib Sqrt (HDL Coder)。 通过将 UseMultiplier 设置为 |
SqrtNewton | Iterations | Iterations + 3 | 要指定此架构,请将函数设置为 sqrt。 使用牛顿迭代法。选择此选项以优化面积。
|
SqrtNewtonSingleRate | Iterations | (Iterations * 4) + 6 | 要指定此架构,请将函数设置为 sqrt。 使用单频率流水线牛顿法。要优化速度或需要单速率实现,请选择此选项。
|
RecipSqrtNewton | Iterations | Iterations + 2 | 要指定此架构,请将函数设置为 rSqrt。 使用牛顿迭代法。选择此选项以优化面积。 |
RecipSqrtNewtonSingleRate | Iterations | (Iterations * 4) + 5 | 要指定此架构,请将函数设置为 rSqrt。 使用单频率流水线牛顿法。要优化速度或需要单速率实现,请选择此选项。 |
牛顿-拉夫逊迭代方法:
ReciprocalRsqrtBasedNewton 和 ReciprocalRsqrtBasedNewtonSingleRate 一起实现牛顿-拉夫逊方法,方式如下:
通用 | |
---|---|
ConstrainedOutputPipeline | 通过移动设计中现有延迟的方式来放置在输出端的寄存器的数量。分布式流水线不会重新分发这些寄存器。默认值为 |
迭代数 | SqrtNewton 或 SqrtNewtonSingleRate 实现的迭代次数。 |
InputPipeline | 要在生成的代码中插入的输入流水线阶段数。分布式流水线和受限输出流水线可以移动这些寄存器。默认值为 |
OutputPipeline | 要在生成的代码中插入的输出流水线阶段数。分布式流水线和受限输出流水线可以移动这些寄存器。默认值为 |
UseMultiplier | 为 SqrtFunction 实现选择算法。默认情况下,此属性设置为 通过将 UseMultiplier 设置为 |
LatencyStrategy | 对于定点和浮点类型,指定是将设计中的模块映射到 通过将 UseMultiplier 设置为 |
CustomLatency | 当 LatencyStrategy 设置为 |
本机浮点 | |
---|---|
HandleDenormals | 指定是否希望 HDL Coder 在设计中插入额外的逻辑来处理非正规数字。非正规数是量级非常小、必须使用包含前导零的尾数才能表示的浮点数。默认值为 inherit。另请参阅HandleDenormals (HDL Coder)。 |
输入必须为无符号标量值。
输出为定点标量值。
PLC 代码生成
使用 Simulink® PLC Coder™ 生成结构化文本代码。
定点转换
使用 Fixed-Point Designer™ 设计和仿真定点系统。
版本历史记录
在 R2010a 中推出
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)