Sqrt
计算平方根、带符号的平方根或平方根的倒数
库:
Simulink /
Math Operations
HDL Coder /
HDL Floating Point Operations
HDL Coder /
Math Operations
Sqrt 模块的替代配置:
Signed Sqrt | Reciprocal Sqrt | Square Root | Signed Square Root | Reciprocal Square Root
描述
Sqrt 模块计算输入信号的平方根、有符号平方根或平方根的倒数。从函数下拉列表中选择以下函数之一。
| 函数 | 描述 | 数学表达式 | MATLAB® 等效函数 |
|---|---|---|---|
sqrt | 输入信号的平方根 |
| sqrt |
signedSqrt | 输入信号绝对值的平方根乘以输入信号的符号 |
| — |
rSqrt | 输入信号的平方根的倒数 |
| — |
模块图标将发生变化以匹配函数。
示例
此示例说明如何将负值输入信号的平方根计算为复数值输出。

通过将函数设置为 sqrt 并将输出信号类型设置为 complex,该模块将对输入值 -100 生成正确的结果 0 + 10i。如果您将输出信号类型更改为 auto 或 real,模块将输出 NaN。
此示例说明如何计算负值输入信号的有符号平方根。

当模块输入为负值且您将函数设置为 signedSqrt 时,无论输出信号类型参数的设置如何,Sqrt 模块输出都相同。通过将第一个 Display 模块的数值显示格式设置为 decimal (Stored Integer),您可以看到复数输出的虚部值。
此示例说明如何计算浮点输入信号的 rSqrt。Sqrt 模块具有以下设置:
方法 =
Newton-Raphson迭代次数 =
1中间结果数据类型 =
Inherit: Inherit from input
在牛顿-拉夫逊算法经过一次迭代后,模块输出与最终值 (0.4834) 的误差在 0.0004 内。

此示例说明如何计算定点输入信号的 rSqrt。Sqrt 模块具有以下设置:
方法 =
Newton-Raphson迭代次数 =
1中间结果数据类型 =
Inherit: Inherit from input
在牛顿-拉夫逊算法经过一次迭代后,模块输出与最终值 (0.4834) 的误差在 0.0459 内。

端口
输入
模块的输入信号,用于计算平方根、有符号平方根或平方根的倒数。sqrt 函数接受实数或复数输入,但复数定点信号除外。signedSqrt 和 rSqrt 不接受复数输入。输入信号必须为浮点数。
下表总结了 sqrt、rSqrt 和 signedSqrt 函数的浮点、整数和定点数据类型对复数类型和负值的支持。
| 函数 | 数据类型 | 复数 | 负值 | |
|---|---|---|---|---|
| 输入 | 输出 | |||
sqrt | 浮点 | 是 | 是 | 是 |
| 整数和定点 | 否 | 否 | 否 | |
| 浮点 | 否 | 否 | 是 |
| 整数和定点 | 否 | 否 | 否 | |
signedSqrt | 浮点 | 否 | 是 | 是 |
| 整数和定点 | 否 | 否 | 否 | |
如果输入为负数,请将除 signedSqrt 之外的所有函数的输出信号设置为复数。
数据类型: single | double | half | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | fixed point
输出
输出信号,是输入信号的平方根、有符号平方根或平方根的倒数。当输入信号的类型为整数或定点时,输出必须为浮点。
数据类型: single | double | half | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | fixed point
参数
常设
指定模块计算的数学函数。模块图标将发生变化以匹配您选择的函数。
| 函数 | 模块图标 |
|---|---|
sqrt | |
signedSqrt | |
rSqrt | |
默认值取决于模块配置。
sqrt 默认值 - Sqrt 和 Square Root 模块
signedSqrt 默认值 - Signed Sqrt 和 Signed Square Root 模块
rSqrt 默认值 - Reciprocal Sqrt 和 Reciprocal Square Root 模块
编程用法
模块参数:Operator |
| 类型:字符向量 |
值:'sqrt' | 'signedSqrt' | 'rSqrt' |
指定模块的输出信号类型。
| 函数 | 输入信号类型 | 输出信号类型 | ||
|---|---|---|---|---|
| 自动 | 实数 | 复数 | ||
|
| 对于非负输入为 对于负输入为 | 对于非负输入为 对于负输入为 |
|
|
|
|
| |
|
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
| |
编程用法
模块参数:OutputSignalType |
| 类型:字符向量 |
值:'auto' | 'real' | 'complex' |
默认值:'auto' |
指定采样时间间隔。要继承采样时间,请将此参数设置为 -1。有关详细信息,请参阅指定采样时间。
依赖关系
仅当您将此参数设置为 -1 以外的值时才可见。要了解详细信息,请参阅不建议设置采样时间的模块。
编程用法
要以编程方式设置模块参数值,请使用 set_param 函数。
| 参数: | SampleTime |
| 值: | "-1" (默认) | scalar or vector in quotes |
算法
指定用于计算平方根倒数的方法。
| 方法 | 支持的数据类型 | 何时使用此方法 |
|---|---|---|
| 完全 | 浮点 | 您不需要逼近值时。 输入或输出必须为浮点类型。 |
| 牛顿-拉夫逊 | 浮点、定点和内置的整数类型 | 您需要快速的近似计算时。 |
完全方法提供了与 MATLAB 计算一致的结果。
依赖关系
要启用此参数,请将函数设置为 rSqrt。
当函数设置为 sqrt 或 signedSqrt 时,此参数设置为完全。
编程用法
模块参数:AlgorithmType |
| 类型:字符向量 |
值:'Exact' | 'Newton-Raphson' |
默认值:'Exact' |
指定执行牛顿-拉夫逊算法的迭代次数。在使用 rSqrt 函数且方法的值为牛顿-拉夫逊时,此参数有效。
如果您输入 0,则模块输出是牛顿-拉夫逊算法的初始估计值。
编程用法
模块参数:Iterations |
| 类型:字符向量 |
| 值:整数 |
默认值:'3' |
数据类型
数据类型助手可帮助您设置数据属性。要使用数据类型助手,请点击
。有关详细信息,请参阅使用数据类型助手指定数据类型。
当您将函数设置为 sqrt 或 rSqrt 时,请指定中间结果的数据类型。
该类型可以继承、直接指定或表示为数据类型对象,如 Simulink.NumericType 对象。
为了避免溢出,中间数据类型必须大于或等于可以包含输出数据类型平方的数据类型。
为平方根函数 sqrt 显式设置中间数据类型时,请遵循以下规范:
| 输入和输出数据类型 | 中间数据类型 |
|---|---|
| 输入或输出为双精度。 | 使用双精度。 |
| 输入或输出是单精度,而且有任何非单精度数据类型不是双精度。 | 使用单精度或双精度。 |
| 输入和输出是定点。 | 使用定点。 |
为平方根倒数函数 rSqrt 显式设置中间数据类型时,请遵循以下规范:
| 输入和输出数据类型 | 中间数据类型 |
|---|---|
| 输入是双精度,输出不是单精度。 | 使用双精度。 |
| 输入不是单精度,输出是双精度。 | 使用双精度。 |
| 输入和输出是定点。 | 使用定点。 |
小心
在下列情况下,不要将中间结果数据类型设置为继承:从输出继承:
您选择了牛顿-拉夫逊方法来计算平方根的倒数。
输入数据类型为浮点。
输出数据类型为定点。
在这些情况下,选择继承:从输出继承会使性能受到影响并产生错误。
要避免此错误,请将浮点类型的输入信号转换成定点数据类型。例如,在 Sqrt 模块之前插入一个 Data Type Conversion 模块以执行转换。
依赖关系
要启用此参数,请将函数设置为 sqrt 或 rSqrt。
编程用法
模块参数: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' |
指定输出数据类型。该类型可以继承、直接指定或表示为数据类型对象,如 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.BusElement。
软件使用最小值执行下列操作:
某些模块的参数范围检查(请参阅指定模块参数的最小值和最大值)。
定点数据类型的自动定标。
从模型生成的代码的优化。此优化可删除算法代码,并影响某些仿真模式(如 SIL 或外部模式)的结果。有关详细信息,请参阅使用指定的最小值和值进行优化 (Embedded Coder)。
提示
输出最小值不会对实际输出信号进行饱和处理或截断。请改用 Saturation 模块。
编程用法
模块参数:OutMin |
| 类型:字符向量 |
| 值:标量 |
默认值:'[]' |
将软件检查的输出范围的上限值指定为有限的双精度实数标量值。
如果您指定总线对象作为此模块的数据类型,请不要为模块的总线数据设置最大值。软件会忽略此设置。但请为指定作为数据类型的总线对象的总线元素设置最大值。有关详细信息,请参阅 Simulink.BusElement。
软件使用最大值执行下列操作:
某些模块的参数范围检查(请参阅指定模块参数的最小值和最大值)。
定点数据类型的自动定标。
从模型生成的代码的优化。此优化可删除算法代码,并影响某些仿真模式(如 SIL 或外部模式)的结果。有关详细信息,请参阅使用指定的最小值和值进行优化 (Embedded Coder)。
提示
输出最大值不会对实际输出信号进行饱和处理或截断。请改用 Saturation 模块。
编程用法
模块参数:OutMax |
| 类型:字符向量 |
| 值:标量 |
默认值:'[]' |
指定定点运算的舍入模式。有关详细信息,请参阅舍入模式 (Fixed-Point Designer)。
编程用法
模块参数:RndMeth |
| 类型:字符向量 |
值:'Ceiling' | 'Convergent' | 'Floor' | 'Nearest' | 'Round' | 'Simplest' | 'Zero' |
默认值:'Floor' |
选中此选项将锁定此模块的输出数据类型设置,从而防止通过定点工具和定点顾问进行更改。有关详细信息,请参阅Use Lock Output Data Type Setting (Fixed-Point Designer)。
编程用法
模块参数:LockScale |
| 类型:字符向量 |
值:'off' | 'on' |
默认值:'off' |
指定对溢出是进行饱和处理还是绕回处理。
on- 将溢出饱和处理为数据类型能够表示的最小值或最大值。off- 溢出将绕回到数据类型可以表示的合适值。
例如,有符号 8 位整数 int8 可以表示的最大值是 127。任何大于此最大值的模块运算结果都会导致 8 位整数溢出。
选择此参数后,模块输出将在达到 127 时饱和。类似地,模块输出将在达到最小输出值 -128 时饱和。
清除此参数后,软件会将导致溢出的值解释为
int8,这可能产生意外结果。例如,以int8表示的模块结果 130(二进制 1000 0010)为 -126。
提示
如果您的模型存在可能的溢出,而您希望在生成的代码中进行显式饱和保护,请考虑选中此参数。
如果您希望优化生成的代码的效率,请考虑清除此参数。清除此参数还可以帮助您避免过度地指定信号超出范围时模块的处理方式。有关详细信息,请参阅信号范围错误故障排除。
如果选中此参数,饱和将应用于模块中的每个内部操作,而不仅仅应用于输出或结果。
一般情况下,代码生成进程可以检测到何时不可能发生溢出。在这种情况下,代码生成器不会生成饱和代码。
编程用法
要以编程方式设置模块参数值,请使用 set_param 函数。
| 参数: | SaturateOnIntegerOverflow |
| 值: | 'on' (默认) | 'off' |
模块特性
数据类型 |
|
直接馈通 |
|
多维信号 |
|
可变大小信号 |
|
过零检测 |
|
替代配置
Signed Sqrt 模块将函数设置为 signedSqrt。
库:
Simulink /
Math Operations
Reciprocal Sqrt 模块将函数设置为 rSqrt。
库:
Simulink /
Math Operations
HDL Coder /
HDL Floating Point Operations
HDL Coder /
Math Operations
Square Root 模块与 Sqrt 模块只有名称不同。
库:
Simulink /
Quick Insert /
Math Operations
Signed Square Root 模块将函数设置为 signedSqrt。
Signed Square Root 模块与 Signed Sqrt 模块只有名称不同。
库:
Simulink /
Quick Insert /
Math Operations
Reciprocal Square Root 模块将函数设置为 rSqrt。
Reciprocal Square Root 模块与 Reciprocal Sqrt 模块只有名称不同。
库:
Simulink /
Quick Insert /
Math Operations
扩展功能
C/C++ 代码生成
使用 Simulink® Coder™ 生成 C 代码和 C++ 代码。
HDL Coder™ 提供影响 HDL 实现和综合逻辑的额外配置选项。
| 函数 | 架构 | 描述 |
|---|---|---|
sqrt signedSqrt rSqrt | SqrtFunction(默认值) | 使用流水线移位相加算法或基于乘法的算法计算平方根。sqrtfunction 架构支持定点类型和浮点类型的代码生成。当您使用浮点类型时,选择使用浮点配置参数。您可以指定 HDL 属性 LatencyStrategy 和 CustomLatency,以便在硬件平台上设计时从一系列频率值中进行选择。 将 HDL 模块属性 UseMultiplier 与 LatencyStrategy 和 CustomLatency 属性结合使用,以指定是使用流水线移位相加算法还是使用乘法算法来计算平方根。通过将 UseMultiplier 设置为 |
| sqrt | SqrtNewton | 使用牛顿迭代法优化面积。 |
| sqrt | SqrtNewtonSingleRate | 使用单频率流水线牛顿法。要优化速度或需要单速率实现,请选择此选项。 |
| rSqrt | RecipSqrtNewton | 使用牛顿迭代法优化面积。 要指定此架构,请将方法设置为牛顿-拉夫逊。 |
| rSqrt | RecipSqrtNewtonSingleRate | 使用单频率流水线牛顿法。要优化速度或需要单速率实现,请选择此选项。 要指定此架构,请将方法设置为牛顿-拉夫逊。 |
| 通用 | |
|---|---|
| ConstrainedOutputPipeline | 通过移动设计中现有延迟的方式来放置在输出端的寄存器的数量。分布式流水线不会重新分发这些寄存器。默认值为 |
| 迭代数 | SqrtNewton 或 SqrtNewtonSingleRate 实现的迭代次数。 |
| InputPipeline | 要在生成的代码中插入的输入流水线阶段数。分布式流水线和受限输出流水线可以移动这些寄存器。默认值为 |
| OutputPipeline | 要在生成的代码中插入的输出流水线阶段数。分布式流水线和受限输出流水线可以移动这些寄存器。默认值为 |
| UseMultiplier | 为 SqrtFunction 实现选择算法。默认情况下,此属性设置为 通过将 UseMultiplier 设置为 |
| LatencyStrategy | 对于定点和浮点类型,指定是将设计中的模块映射到 通过将 UseMultiplier 设置为 您可以通过将 LatencyStrategy 设置为 |
| CustomLatency | 当 LatencyStrategy 设置为 |
| IterationsPerPipeline | 当 LatencyStrategy 设置为 有关详细信息,请参阅Sqrt (HDL Coder)。 |
| 原生浮点 | |
|---|---|
| HandleDenormals | 指定是否希望 HDL Coder 在设计中插入额外的逻辑来处理非正规数字。非正规数是大小非常小、必须使用包含前导零的尾数才能表示的浮点数。默认值为 inherit。另请参阅HandleDenormals (HDL Coder)。 |
该模块支持使用以下数据类型进行 HDL 代码生成:
| 输入端口 | 维度 | 定点 | 浮点 | 内置整数 | 总线 | 布尔 | 复信号 |
|---|---|---|---|---|---|---|---|
| Port_1 | 标量 向量 矩阵(最高二维) | 是 | 单精度 双精度 | 是 | 是 | 否 | 否 |
此模块具有多周期实现,这会在生成的代码中引入额外的延迟。要查看增加的延迟,请查看生成的模型或验证模型。请参阅Generated Model and Validation Model (HDL Coder)。
浮点延迟
| 架构 | 浮点类型 | 延迟策略 | 延迟(周期数) | 自定义延迟支持 |
|---|---|---|---|---|
| SqrtFunction | 单精度 | 最小值 | 16 | 是 |
| 最大值 | 28 | |||
| 双精度 | 最小值 | 33 | ||
| 最大值 | 58 |
定点延迟
| 架构 | 最大延迟(周期数) | 描述 | 延迟策略支持 | 自定义延迟支持 |
|---|---|---|---|---|
| SqrtFunction | 要计算定点数据类型的延迟,请参阅 Sqrt (HDL Coder) 中的算法。 | 最大延迟由输出字长以及定点数据的输入和输出小数长度确定。 | 是 | 是 |
| SqrtNewton | 迭代数 + 3 | 迭代数 HDL 模块属性的默认值为 3。 迭代数的推荐值为 2 到 10。如果迭代数超出推荐范围,HDL Coder 会生成一条消息。 | 否 | 否 |
| SqrtNewtonSingleRate | (迭代数* 4) + 6 | |||
| RecipSqrtNewton | 迭代次数 + 2 | 迭代次数模块参数的默认值为 3。 迭代次数的推荐值是从 2 到 10。如果迭代次数超出推荐范围,HDL Coder 将生成一条消息。 | ||
| RecipSqrtNewtonSingleRate | (迭代次数* 4) + 5 |
以下模块参数配置与 HDL 代码生成不兼容。
| 模块参数 | 限制和注意事项 |
|---|---|
| 输出信号类型 | 不支持参数值复数。 |
| 方法 | 当您将函数参数设置为 rSqrt 时,请对浮点数据类型使用完全,对定点数据类型使用牛顿-拉夫逊。 |
| 中间结果数据类型 | 不支持继承:通过内部规则继承以外的参数值 |
| 输出 | 选择与输入相同的输出端口数据类型。 |
| 整数舍入模式 | 定点类型不支持参数值收敛、舍入。 |
您可以使用以下 HDL Coder 优化来优化速度、面积和 I/O。
面积优化
| 优化 | 描述 |
|---|---|
| Resource Sharing (HDL Coder) | 资源复用是一种面积优化,其中 HDL Coder 确定多个在功能上等效的资源,并用单个资源替换它们。 |
| Streaming (HDL Coder) | 流式处理是一种面积优化,其中 HDL Coder 将向量数据路径变换为标量数据路径(或多个较小的向量数据路径)。 |
速度优化
| 优化 | 描述 |
|---|---|
| Distributed Pipelining (HDL Coder) | 分布式流水线或寄存器重定时是一种速度优化,它可以移动设计中的现有延迟,以在缩减关键路径的同时保留功能性行为。 对于 Sqrt 模块,HDL Coder 在模块周围(而不是在模块内)分布流水线寄存器。 |
| Clock-Rate Pipelining (HDL Coder) | 时钟频率流水线是 HDL Coder 中的一个优化框架,它允许其他速度优化和面积优化在时钟频率下引入延迟。 |
| 关键路径估计 (HDL Coder) | 要快速确定设计中最可能的关键路径,请使用关键路径估计。关键路径估计加速寻找关键路径的迭代过程。要了解在关键路径估计中表征的模块,请参阅Characterized Blocks (HDL Coder)。 |
I/O 优化
| 优化 | 描述 |
|---|---|
| 帧到采样的转换 (HDL Coder) | 要优化您的设计所需的 I/O,请使用帧到采样的转换。这种优化将基于帧的向量或矩阵输入转换为更小的采样或像素,以便 HDL 代码生成到基于流的目标硬件,并减小处理大输入和输出信号所需的 FPGA I/O。 |
HDL Coder 通过使用牛顿-拉夫逊迭代法在 ReciprocalRsqrtBasedNewton 和 ReciprocalRsqrtBasedNewtonSingleRate 架构中实现倒数平方根运算,方程如下:
基于牛顿-拉夫逊的实现与在原生浮点模式下的 HDL 代码生成不兼容。要在原生浮点模式下生成 HDL 代码,请在 HDL 模块属性中选择 SqrtFunction 架构。
Use SqrtFunction Architecture for Square Root Block (HDL Coder)
PLC 代码生成
使用 Simulink® PLC Coder™ 生成结构化文本代码。
定点转换
使用 Fixed-Point Designer™ 设计和仿真定点系统。
版本历史记录
在 R2010a 中推出
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)