Main Content

Trigonometric Function

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

  • Trigonometric Function block

库:
Simulink / Math Operations
HDL Coder / Math Operations
HDL Coder / HDL Floating Point Operations

描述

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

支持的函数

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

函数描述数学表达式 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 是 COordinate Rotation DIgital Computer(坐标旋转数字计算方法)的缩写。基于吉文斯旋转的 CORDIC 算法是最节省硬件资源的可用算法之一,因为它只需进行迭代移位相加运算。有关详细信息,请参阅详细信息。模块输入有进一步的要求。

有关何时将函数设置为 sincossincoscos + jsin,并将逼近方法设置为 CORDIC 的详细信息,请参阅 Port_1

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

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

查找逼近方法

有关何时将函数设置为 sincossincoscos + jsin,并将逼近方法设置为查找的详细信息,请参阅 Port_1

示例

全部展开

此示例说明如何使用 Trigonometric Function 模块来计算浮点输入的正弦值。Trigonometric Function 模块的输出的数据类型与输入的数据类型相同,因为输入数据类型为浮点类型,逼近方法none

此示例说明如何使用 Trigonometric Function 模块计算定点输入信号的 sincos 的 CORDIC 逼近。

Trigonometric Function 模块参数如下:

  • 函数sincos

  • 逼近方法CORDIC

  • 迭代次数11

使用 CORDIC 逼近方法时,Trigonometric Function 模块的输入必须在范围 [-2pi,2pi) 内。Trigonometric Function 模块的输出类型为 fixdt(1,13,11),因为输入是定点信号且逼近方法设置为 CORDIC。输出小数长度等于输入字长减二。

此示例比较 Trigonometric Function 模块的两种不同配置的复指数输出。

逼近方法CORDIC 时,输入数据类型可以是定点,在本例中为 fixdt(1,16,2)。输出数据类型为 fixdt(1,16,14),因为输出小数长度等于输入字长减二。

逼近方法None 时,输入数据类型必须为浮点类型。输出数据类型与输入数据类型相同。

端口

输入

全部展开

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

函数输入数据类型
  • sin

  • cos

  • sincos

  • cos + jsin

  • atan2

  • 浮点

  • 定点(仅当逼近方法CORDIC 时)

  • tan

  • asin

  • acos

  • atan

  • sinh

  • cosh

  • tanh

  • asinh

  • acosh

  • atanh

  • 浮点

CORDIC 逼近定点类型传播:

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

定点,有符号或无符号

sincossincoscos + jsin

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

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

定点,有符号

atan2

fixdt(1, WL, WL – 3)

定点,无符号

atan2

fixdt(1, WL, WL – 2)

查找逼近定点类型传播:

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

定点,有符号

sin, cos, sincos, cos + jsin, atan2

fixdt(1, WL, FL)

定点,无符号

sin, cos, sincos, cos + jsin, atan2

fixdt(1, WL - 1, FL)

依存关系

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

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

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

    浮点

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

    浮点

    CORDIC

    与输入相同。当您使用 CORDIC 逼近方法计算模块输出时,输出信号类型不可用。

    浮点

    查找

    与输入相同。当您使用 Lookup 逼近方法计算模块输出时,输出信号类型不可用。

对于 CORDIC 和查找逼近:

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

  • sincossincosatan2 函数的输出为实数。

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

限制

  • 仅当逼近方法设置为 CORDIC查找时,才可以使用定点输入信号。CORDIC 和查找逼近可用于 sincossincoscos + jsinatan2 函数。

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

  • 当您将逼近方法设置为查找时,数据点的数量受到以下因素的限制:

    • smallEnoughNumDataPoints = 2(inputFractionLen-2)+1

    • bigEnoughFractionLen = log2(numberOfDataPoints - 1)+2

    其中:

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

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

  • 当您将函数设置为 sincossincoscos + jsin 并将逼近方法设置为 CORDIC 时,模块具有以下限制:

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

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

    当您将函数设置为 atan2逼近方法设置为 CORDIC 时,模块具有以下限制:

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

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

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

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

  • 当您将函数设置为 sincossincoscos + jsin 并将逼近方法设置为查找时,模块具有以下限制。

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

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

    • 当您将函数设置为 atan2逼近方法设置为查找时,模块具有以下限制:

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

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

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

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

依存关系

要启用此端口,请将函数设置为 atan2

限制

  • 仅当逼近方法设置为 CORDIC查找时才支持定点输入信号。

数据类型: 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 为单位。

依存关系

要启用此端口,请将函数设置为 sincos

限制

仅当逼近方法设置为 CORDIC查找时才支持定点输入信号。

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

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

依存关系

要启用此端口,请将函数设置为 sincos

限制

仅当逼近方法设置为 CORDIC查找时才支持定点输入信号。

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

参数

全部展开

算法

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

有关何时将函数设置为 sincossincoscos + jsin,并将逼近方法设置为 CORDIC 的详细信息,请参阅 限制

编程用法

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

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

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

浮点

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

CORDIC

浮点和定点

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

查找

浮点和定点(双精度和单精度),其偏置值为 0斜率值为 2 的幂

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

有关何时将函数设置为 sincossincoscos + jsin,并将逼近方法设置为 CORDIC 的详细信息,请参阅 限制

依存关系

  • 要启用此参数,请将函数设置为 sincossincoscos + jsinatan2

  • 要使用定点输入信号,必须将逼近方法设置为 CORDIC查找

  • 要启用表数据类型参数,请将此方法设置为查找

编程用法

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

当输入位于两个断点值之间时,模块将根据相邻断点内插输出值。有关插值方法的详细信息,请参阅内插方法

编程用法

模块参数InterpMethod
类型:字符向量
值:'Linear point-slope' | 'Flat'
默认值:'Linear point-slope'

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

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

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

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

依存关系

要启用此参数,必须按如下所示设置函数逼近方法参数:

  • 函数设置为 sincossincoscos + jsinatan2

  • 逼近方法设置为 CORDIC

编程用法

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

将查找方法的角度单位指定为 radianrevolution

依存关系

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

  • 函数设置为 sincossincoscos + jsinatan2

  • 逼近方法设置为查找

编程用法

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

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

依存关系

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

  • 函数设置为 sincossincoscos + jsinatan2

  • 逼近方法设置为查找

编程用法

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

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

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

依存关系

逼近方法设置为 CORDIC 将禁用此参数。

注意

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

编程用法

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

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

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

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

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

依存关系

函数设置为 acosasin 会启用此参数。

编程用法

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

指定采样时间间隔。要继承采样时间,请将此参数设置为 -1。有关详细信息,请参阅指定采样时间

依存关系

仅当您将此参数设置为 -1 以外的值时才可见。要了解详细信息,请参阅不建议设置采样时间的模块

编程用法

要以编程方式设置模块参数值,请使用 set_param 函数。

参数: SampleTime
值: "-1" (默认) | scalar or vector in quotes

数据类型

查找表的数据类型,指定为:

  • 继承: 从输入继承

  • double

  • single

  • fixdt(1,16,0)

  • <数据类型表达式>

有关设置数据类型的详细信息,请参阅控制信号的数据类型

编程用法

模块参数TableDataTypeStr
类型:字符串标量或字符向量
值: Inherit: Inherit via input | single | double | fixdt(1,16,0) | 数据类型表达式
默认值:Inherit: Inherit via input

选择您要如何指定输出数据类型的数据类型属性。您可以选择:

  • 继承 - 用于指定继承数据类型的规则,例如继承: 从内部规则继承

  • 内置 - 用于指定内置数据类型。

  • 定点 - 用于指定数据类型的定点属性。

  • 表达式 - 用于指定计算结果为有效数据类型的表达式,例如 fixdt([],16,0)

依存关系

要启用此参数,请在输出数据类型参数处点击 >>

输出数据类型指定符号性

依存关系

要启用此参数,请将模式设置为定点

输出数据类型指定定标

依存关系

要启用此参数,请将模式设置为定点

为此信号选择数据类型覆盖模式。

  • 继承 - 继承为模型指定的数据类型覆盖设置。

  • 关闭 - 忽略为模型指定的数据类型覆盖设置,并使用您指定的定点数据类型

有关详细信息,请参阅 Simulink® 文档中的使用数据类型助手指定数据类型

提示

由于能够关闭单个数据类型的数据类型覆盖,您可以在应用数据类型覆盖时更好地控制模型中的数据类型。例如,您可以使用此选项确保数据类型满足下游模块的要求,而忽略数据类型覆盖设置。

依存关系

要启用此参数,请点击显示数据类型助手按钮,并将模式设置为内置定点

指定存储量化整数的字的位大小。有关详细信息,请参阅指定定点数据类型

依存关系

要启用此参数,请将模式设置为定点

将定点数据类型的小数长度指定为正整数或负整数。有关详细信息,请参阅指定定点数据类型

依存关系

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

  • 模式设置为定点

  • 定标设置为二进制小数点

模块特性

数据类型

double | fixed pointa | half | integera | 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 之前推出

另请参阅

模块

函数