Main Content

本页的翻译已过时。点击此处可查看最新英文版本。

Trigonometric Function

指定应用于输入信号的三角函数

  • 库:
  • Simulink / Math Operations

    HDL Coder / Math Operations

  • Trigonometric Function block

说明

Trigonometric Function 模块执行常见的三角函数,并以 rad 或 rev 为单位输出结果。

支持的函数

可以从 Function 下拉列表中选择以下函数之一。

函数说明数学表达式 MATLAB® 等效函数
sin

输入信号的正弦

sin(u)

sin
cos

输入信号的余弦

cos(u)

cos
tan

输入信号的正切

tan(u)

tan
asin

输入信号的反正弦

asin(u)

asin
acos

输入信号的反余弦

acos(u)

acos
atan

输入信号的反正切

atan(u)

atan
atan2

输入信号的四象限反正切

atan2(u)

atan2
sinh

输入信号的双曲正弦

sinh(u)

sinh
cosh

输入信号的双曲余弦

cosh(u)

cosh
tanh

输入信号的双曲正切

tanh(u)

tanh
asinh

输入信号的反双曲正弦

asinh(u)

asinh
acosh

输入信号的反双曲余弦

acosh(u)

acosh
atanh

输入信号的反双曲正切

atanh(u)

atanh
sincos

输入信号的正弦;输入信号的余弦

cos + jsin

输入信号的复指数

CORDIC 逼近方法

如果您使用 CORDIC 逼近方法(请参阅详细信息),模块输入还有进一步要求。

当您将 Function 设置为 sincossincoscos + jsin 并将 Approximation method 设置为 “CORDIC” 时,模块具有以下限制:

  • 当您使用有符号定点类型时,输入角必须在 [–2π, 2π) 弧度范围内。

  • 当您使用无符号定点类型时,输入角必须在 [0, 2π) 弧度范围内。

当您将 Function 设置为 atan2Approximation method 设置为 “CORDIC” 时,模块具有以下限制:

  • 输入的大小必须相同,或者至少一个值必须是标量值。

  • 两个输入必须具有相同的数据类型。

  • 当您使用有符号定点类型时,字长必须等于或小于 126

  • 当您使用无符号定点类型时,字长必须等于或小于 125

下表概述了输入无效时发生的情况。

模块用法无效输入的影响
仿真模式出现错误。
生成的代码发生未定义的行为。对于生成的代码,避免依赖未定义的行为。

查找逼近方法

当您将 Function 设置为 sincossincoscos + jsin 并将 Approximation method 设置为 “Lookup” 时,模块具有以下限制:

  • 当您使用有符号定点类型时,输入角必须在 [-2ᴨ,2ᴨ] 弧度范围内。

  • 当您使用无符号定点类型时,输入角必须在 [0,2ᴨ) 弧度范围内。

  • 当您将 Function 设置为 atan2Approximation method 设置为 “Lookup” 时,模块具有以下限制:

    • 输入的大小必须相同,或者至少一个值必须是标量值。

    • 两个输入必须具有相同的数据类型。

    • 数据点的数量受限于:

      • smallEnoughNumDataPoints = 2(inputFractionLen-2)+1

      • bigEnoughFractionLen = log2(numberOfDataPoints - 1)+2

      其中:

      • smallEnoughNumDataPoints 是由指定的输入小数长度 inputFractionLen 表示的最大数据点数。

      • bigEnoughFractionLen 是表示指定的数据点数 numberOfDataPoints 所需的最小小数长度。

端口

输入

全部展开

指定为标量、向量或矩阵的输入。此模块接受以下数据类型的输入信号:

函数输入数据类型
  • sin

  • cos

  • sincos

  • cos + jsin

  • atan2

  • 浮点

  • 定点(仅当 Approximation method 为 “CORDIC” 时)

  • tan

  • asin

  • acos

  • atan

  • sinh

  • cosh

  • tanh

  • asinh

  • acosh

  • atanh

  • 浮点

依存关系

  • 当您将 Function 设置为 atan2 时,模块显示两个输入端口。第一个输入 (Port_1) 是函数参数的 y 轴坐标,即虚部。第二个输入 (Port_2) 是函数参数的 x 轴坐标,即实部。

  • 如果您将 Approximation method 设置为 “None”、“CORDIC” 或 “Lookup”,则可以使用浮点输入信号。但是,模块输出的数据类型取决于您选择的逼近方法选项。

    输入数据类型逼近方法输出数据类型

    浮点

    None

    取决于您选择的 Output signal type。选项为 auto(与输入的数据类型相同)、realcomplex

    浮点

    CORDIC

    与输入相同。当您使用 CORDIC 逼近方法计算模块输出时,Output signal type 不可用。

    浮点

    Lookup

    与输入相同。当您使用 Lookup 逼近方法计算模块输出时,Output signal type 不可用。

对于 CORDIC 和查找逼近:

  • sincossincoscos + jsinatan2 函数的输入必须是实数。

  • sincossincosatan2 函数的输出为实数。

  • cos + jsin 函数的输出为复数。

限制

atan2 之外,此模块中的所有函数都支持复数输入信号。

仅当 Approximation method 设置为 “CORDIC” 或 “Lookup” 时,才可以使用定点输入信号。CORDIC 和查找逼近可用于 sincossincoscos + jsinatan2 函数。

CORDIC 逼近定点类型传播:

输入数据类型函数输出数据类型

定点,有符号或无符号

sincossincoscos + jsin

fixdt(1, WL, WL - 2),其中 WL 是输入的字长

此定点类型为 CORDIC 算法提供最佳精度。

定点,有符号

atan2

fixdt(1, WL, WL – 3)

定点,无符号

atan2

fixdt(1, WL, WL – 2)

查找逼近定点类型传播:

输入数据类型函数输出数据类型

定点,有符号

sincossincoscos + jsinatan2

fixdt(1, WL, FL)

定点,无符号

sincossincoscos + jsinatan2

fixdt(1, WL - 1, FL)

当您将 Function 设置为 sincossincoscos + jsin 并将 Approximation method 设置为 “CORDIC” 时,模块具有以下限制:

  • 当您使用有符号定点类型时,输入角必须在 [–2π, 2π) 弧度范围内。

  • 当您使用无符号定点类型时,输入角必须在 [0, 2π) 弧度范围内。

当您将 Function 设置为 atan2Approximation method 设置为 “CORDIC” 时,模块具有以下限制:

  • 输入的大小必须相同,或者至少一个值必须是标量值。

  • 两个输入必须具有相同的数据类型。

  • 当您使用有符号定点类型时,字长必须等于或小于 126

  • 当您使用无符号定点类型时,字长必须等于或小于 125

当您将 Function 设置为 sincossincoscos + jsin 并将 Approximation method 设置为 “Lookup” 时,模块具有以下限制:

  • 当您使用有符号定点类型时,输入角必须在 [-2ᴨ,2ᴨ] 弧度范围内。

  • 当您使用无符号定点类型时,输入角必须在 [0,2ᴨ) 弧度范围内。

  • 当您将 Function 设置为 atan2Approximation method 设置为 “Lookup” 时,模块具有以下限制:

    • 输入的大小必须相同,或者至少一个值必须是标量值。

    • 两个输入必须具有相同的数据类型。

    • 数据点的数量受限于:

      • smallEnoughNumDataPoints = 2(inputFractionLen-2)+1

      • bigEnoughFractionLen = log2(numberOfDataPoints - 1)+2

      其中:

      • smallEnoughNumDataPoints 是由指定的输入小数长度 inputFractionLen 表示的最大数据点数。

      • bigEnoughFractionLen 是表示指定的数据点数 numberOfDataPoints 所需的最小小数长度。

数据类型: half | single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | fixed point

输入 atan2 的函数参数的 x 轴坐标,即实部。当您将 Function 设置为 atan2 时,模块显示两个输入端口。第一个输入 (Port_1) 是函数参数的 y 轴坐标,即虚部。第二个输入 (Port_2) 是函数参数的 x 轴坐标,即实部。(有关各种模块方向的端口顺序的说明,请参阅旋转或翻转后的端口位置。)

依存关系

要启用此端口,请将 Function 设置为 “atan2”。

限制

  • 仅当 Approximation method 设置为 “CORDIC” 或 “Lookup” 时才支持定点输入信号。

  • Function 设置为 “atan2” 且 Approximation method 设置为 “CORDIC” 时:

    • 输入的大小必须相同,或者至少一个值必须是标量值。

    • 两个输入必须具有相同的数据类型。

    • 当您使用有符号定点类型时,字长必须等于或小于 126

    • 当您使用无符号定点类型时,字长必须等于或小于 125

  • 当您将 Function 设置为 sincossincoscos + jsin 并将 Approximation method 设置为 “Lookup” 时,模块具有以下限制:

    • 当您使用有符号定点类型时,输入角必须在 [-2ᴨ,2ᴨ] 弧度范围内。

    • 当您使用无符号定点类型时,输入角必须在 [0,2ᴨ) 弧度范围内。

  • 当您将 Function 设置为 atan2Approximation method 设置为 “Lookup” 时,模块具有以下限制:

    • 输入的大小必须相同,或者至少一个值必须是标量值。

    • 两个输入必须具有相同的数据类型。

    • 数据点的数量受限于:

      • smallEnoughNumDataPoints = 2(inputFractionLen - 2)+1

      • bigEnoughFractinoLen = log2(numberOfDataPoints - 1)+2

      其中:

      • smallEnoughNumDataPoints 是由指定的输入小数长度 inputFractionLen 表示的最大数据点数。

      • bigEnoughFractinoLen 是表示指定的数据点数 numberOfDataPoints 所需的最小小数长度。

数据类型: half | single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | fixed point

输出

全部展开

将指定的三角函数应用于一个或多个输入(以 rad 为单位)的结果。每个函数支持:

  • 标量运算

  • 按元素的向量和矩阵运算

数据类型: half | single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | fixed point

输入信号的正弦,以 rad 和 rev 为单位。

依存关系

要启用此端口,请将 Function 设置为 “sincos”。

限制

仅当 Approximation method 设置为 “CORDIC” 或 “Lookup” 时才支持定点输入信号。

数据类型: half | single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | fixed point

输入信号的余弦,以 rad 和 rev 为单位。

依存关系

要启用此端口,请将 Function 设置为 “sincos”。

限制

仅当 Approximation method 设置为 “CORDIC” 或 “Lookup” 时才支持定点输入信号。

数据类型: half | single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | fixed point

参数

全部展开

指定三角函数。模块图标上的函数名称发生变化以反映您的选择。

限制

当您将 Function 设置为 sincossincoscos + jsin 并将 Approximation method 设置为 “CORDIC” 时,模块具有以下限制:

  • 当您使用有符号定点类型时,输入角必须在 [–2π, 2π) 弧度范围内。

  • 当您使用无符号定点类型时,输入角必须在 [0, 2π) 弧度范围内。

当您将 Function 设置为 atan2Approximation method 设置为 “CORDIC” 时,模块具有以下限制:

  • 输入的大小必须相同,或者至少一个值必须是标量值。

  • 两个输入必须具有相同的数据类型。

  • 当您使用有符号定点类型时,字长必须等于或小于 126

  • 当您使用无符号定点类型时,字长必须等于或小于 125

编程用法

模块参数:Operator
类型:字符向量
值:'sin' | 'cos' | 'tan' | 'asin' | 'acos' | 'atan' | 'atan2' | 'sinh' | 'cosh' | 'tanh' | 'asinh' | 'acosh' | 'atanh' | 'sincos' | 'cos + jsin'
默认值:'sin'

指定计算输出的逼近方法类型。

逼近方法支持的数据类型何时使用此方法
None”(默认值)

浮点

您想使用默认的泰勒级数算法。

CORDIC

浮点和定点

您需要快速的近似迭代计算。

Lookup

浮点和定点(双精度和单精度)

您需要快速的近似查找表实现。

依存关系

要启用此参数,请将 Function 设置为 “sin”、“cos”、“sincos”、“cos + jsin” 或 atan2

要使用定点输入信号,必须将 Approximation method 设置为 “CORDIC” 或 “Lookup”。

限制

当您将 Function 设置为 sincossincoscos + jsin 并将 Approximation method 设置为 “CORDIC” 时,模块具有以下限制:

  • 当您使用有符号定点类型时,输入角必须在 [–2π, 2π) 弧度范围内。

  • 当您使用无符号定点类型时,输入角必须在 [0, 2π) 弧度范围内。

当您将 Function 设置为 atan2Approximation method 设置为 “CORDIC” 时,模块具有以下限制:

  • 输入的大小必须相同,或者至少一个值必须是标量值。

  • 两个输入必须具有相同的数据类型。

  • 当您使用有符号定点类型时,字长必须等于或小于 126

  • 当您使用无符号定点类型时,字长必须等于或小于 125

编程用法

模块参数:ApproximationMethod
类型:字符向量
值:'None' | 'CORDIC' | 'Lookup'
默认值:'None'

指定要执行 CORDIC 算法的迭代次数。默认值为 11。

  • 当模块输入使用浮点数据类型时,迭代次数可以是正整数。

  • 当模块输入是定点数据类型时,迭代次数不能超过字长。

    例如,如果模块输入是 fixdt(1,16,15),字长为 16。在这种情况下,迭代次数不能超过 16。

依存关系

要启用此参数,必须按如下所示设置 FunctionApproximation method 参数:

  • Function 设置为 “sin”、“cos”、“sincos”、“cos + jsin” 或 atan2

  • Approximation method 设置为 “CORDIC”。

编程用法

模块参数:NumberOfIterations
类型:字符向量
值:正整数,小于等于定点输入的字长
默认值:'11'

将查找方法的角度单位指定为 “radian” 或 “revolution”。

依存关系

要启用此参数,请进行如下设置:

  • Function 设置为 “sin”、“cos”、“sincos”、“cos + jsin” 或 atan2

  • Approximation method 设置为 “Lookup”。

编程用法

模块参数AngleUnit
类型:字符向量
值:'radian' | 'revolution'
默认值:'radian'

将查找表的数据点数指定为标量实数。

依存关系

要启用此参数,请进行如下设置:

  • Function 设置为 “sin”、“cos”、“sincos”、“cos + jsin” 或 atan2

  • Approximation method 设置为 “Lookup”。

编程用法

模块参数NumberOfDataPoints
类型:字符向量
值:标量
默认值:'16'

Trigonometric Function 模块输出信号类型指定为 autorealcomplex

函数输入信号类型输出信号类型
AutoRealComplex
任意 Function 参数选择项 实数实数实数复数
复数复数错误复数

依存关系

Approximation method 设置为 “CORDIC” 将禁用此参数。

注意

Functionatan2 时,仿真或代码生成不支持复数输入信号。

编程用法

模块参数:OutputSignalType
类型:字符向量
值:'auto' | 'real' | 'complex'
默认值:'auto'

对于 “acos” 和 “asin”,选中此复选框将不会防范超出范围的输入,从而减少冗余。

  • 如果清除此复选框,则会启用防范。在执行任何操作之前,模块会将超出范围的输入饱和处理为 1-1。生成的代码包含用于检查超出范围输入的代码。

  • 如果选中此复选框,则会取消防范。模块将对输入值执行所有运算而不进行任何更改。生成的代码不包含用于检查超出范围输入的代码。

如果输入已在范围内,启用此复选框可以消除冗余。

依存关系

Function 设置为 “acos” 和 “asin” 会启用此参数。

编程用法

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

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

依存关系

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

编程用法

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

模块特性

数据类型

double | fixed point[a] | half | integer[a] | single

直接馈通

多维信号

可变大小信号

过零检测

[a] 当采用 CORDIC 逼近方法时,此模块支持定点和基整数数据类型。

详细信息

全部展开

参考

[1] Volder, Jack E., “The CORDIC Trigonometric Computing Technique.” IRE Transactions on Electronic Computers EC-8 (1959); 330–334.

[2] Andraka, Ray “A Survey of CORDIC Algorithm for FPGA Based Computers.” Proceedings of the 1998 ACM/SIGDA Sixth International Symposium on Field Programmable Gate Arrays. Feb. 22–24 (1998): 191–200.

[3] Walther, J.S., “A Unified Algorithm for Elementary Functions,” Proceedings of the Spring Joint Computer Conference, May 18-20, 1971: 379–386.

[4] Schelin, Charles W., “Calculator Function Approximation,” The American Mathematical Monthly 90, no. 5 (1983): 317–325.

扩展功能

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

另请参阅

模块

函数

在 R2006a 之前推出