Main Content

Trigonometric Function

Specified trigonometric function on input

  • Trigonometric Function block

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

Description

The Trigonometric Function block performs common trigonometric functions and outputs the result in rad or rev.

Supported Functions

You can select one of these functions from the Function parameter list.

FunctionDescriptionMathematical Expression MATLAB® Equivalent
sin

Sine of the input

sin(u)

sin
cos

Cosine of the input

cos(u)

cos
tan

Tangent of the input

tan(u)

tan
asin

Inverse sine of the input

asin(u)

asin
acos

Inverse cosine of the input

acos(u)

acos
atan

Inverse tangent of the input

atan(u)

atan
atan2

Four-quadrant inverse tangent of the input

atan2(u)

atan2
sinh

Hyperbolic sine of the input

sinh(u)

sinh
cosh

Hyperbolic cosine of the input

cosh(u)

cosh
tanh

Hyperbolic tangent of the input

tanh(u)

tanh
asinh

Inverse hyperbolic sine of the input

asinh(u)

asinh
acosh

Inverse hyperbolic cosine of the input

acosh(u)

acosh
atanh

Inverse hyperbolic tangent of the input

atanh(u)

atanh
sincos

Sine of the input; cosine of the input

cos + jsin

Complex exponential of the input

CORDIC Approximation Method

CORDIC is an acronym for COordinate Rotation DIgital Computer. The Givens rotation-based CORDIC algorithm is one of the most hardware-efficient algorithms available because it requires only iterative shift-add operations. For more information, see More About. The block input has further requirements.

For more information on when you set Function to sin, cos, sincos, or cos + jsin and set the Approximation method to CORDIC, see Port_1.

This table summarizes what happens for an invalid input.

Block UsageEffect of Invalid Input
Simulation modesAn error appears.
Generated codeUndefined behavior occurs. Avoid relying on undefined behavior for generated code.

Lookup Approximation Method

For more information on when you set Function to sin, cos, sincos, or cos + jsin and set the Approximation method to Lookup, see Port_1.

Examples

expand all

This example shows how to use the Trigonometric Function block to compute the sine of a floating-point input. The output of the Trigonometric Function block has the same data type as the input because the input data type is floating-point and the Approximation method is none.

This example shows how to use the Trigonometric Function block to compute the CORDIC approximation of sincos for a fixed-point input signal.

The Trigonometric Function block parameters are:

  • Function: sincos

  • Approximation method: CORDIC

  • Number of iterations: 11

When using the CORDIC approximation method, the input to the Trigonometric Function block must be in the range [-2pi,2pi). The output type of the Trigonometric Function block is fixdt(1,13,11) because the input is a fixed-point signal and the Approximation method is set to CORDIC. The output fraction length equals the input word length minus two.

This example compares the complex exponential output for two different configurations of the Trigonometric Function block.

When the Approximation method is CORDIC, the input data type can be fixed point, in this case: fixdt(1,16,2). The output data type is fixdt(1,16,14) because the output fraction length equals the input word length minus two.

When the Approximation method is None, the input data type must be floating point. The output data type is the same as the input data type.

Ports

Input

expand all

Input specified as a scalar, vector, or matrix. The block accepts input signals of the following data types:

FunctionsInput Data Types
  • sin

  • cos

  • sincos

  • cos + jsin

  • atan2

  • Floating point

  • Fixed point (only when Approximation method is CORDIC)

  • tan

  • asin

  • acos

  • atan

  • sinh

  • cosh

  • tanh

  • asinh

  • acosh

  • atanh

  • Floating point

CORDIC approximation fixed-point type propagations:

Input Data TypeFunctionOutput Data Type

Fixed point, signed or unsigned

sin, cos, sincos, and cos + jsin

fixdt(1, WL, WL - 2) where WL is the input word length

This fixed-point type provides the best precision for the CORDIC algorithm.

Fixed point, signed

atan2

fixdt(1, WL, WL – 3)

Fixed point, unsigned

atan2

fixdt(1, WL, WL – 2)

Lookup approximation fixed-point type propagations:

Input Data TypeFunctionOutput Data Type

Fixed point, signed

sin, cos, sincos, cos + jsin, atan2

fixdt(1, WL, FL)

Fixed point, unsigned

sin, cos, sincos, cos + jsin, atan2

fixdt(1, WL - 1, FL)

Dependencies

  • When you set Function to atan2, the block shows two input ports. The first input (Port_1) is the y-axis or imaginary part of the function argument. The second input (Port_2) is the x-axis or real part of the function argument.

  • You can use floating-point input signals when you set Approximation method to None, CORDIC, or Lookup. However, the block output data type depends on which of these approximation method options you choose.

    Input Data TypeApproximation MethodOutput Data Type

    Floating point

    None

    Depends on your selection for Output signal type. Options are auto (same data type as input), real, or complex.

    Floating point

    CORDIC

    Same as input. Output signal type is not available when you use the CORDIC approximation method to compute the block output.

    Floating point

    Lookup

    Same as input. Output signal type is not available when you use the Lookup approximation method to compute the block output.

For CORDIC and Lookup approximations:

  • Input must be real for the sin, cos, sincos, cos + jsin, and atan2 functions.

  • Output is real for the sin, cos, sincos, and atan2 functions.

  • Output is complex for the cos + jsin function.

Limitations

  • You can use fixed-point input signals only when Approximation method is set to CORDIC or Lookup. The CORDIC and Lookup approximations are available for the sin, cos, sincos, cos + jsin, and atan2 functions.

  • Complex input signals are supported for all functions in this block except atan2.

  • When you set Approximation method to Lookup, the number of data points are limited by:

    • smallEnoughNumDataPoints = 2(inputFractionLen-2)+1

    • bigEnoughFractionLen = log2(numberOfDataPoints - 1)+2

    where:

    • smallEnoughNumDataPoints is the maximum number of data points represented by specified input fraction length, inputFractionLen.

    • bigEnoughFractionLen is the minimum fraction length needed to represent specified number of data points, numberOfDataPoints.

  • When you set Function to sin, cos, sincos, or cos + jsin and set the Approximation method to CORDIC, the block has these limitations:

    • When you use signed fixed-point types, the input angle must fall within the range [–2π, 2π) rad.

    • When you use unsigned fixed-point types, the input angle must fall within the range [0, 2π) rad.

    When you set Function to atan2 and the Approximation method to CORDIC, the block has these limitations:

    • Inputs must be the same size, or at least one value must be a scalar value.

    • Both inputs must have the same data type.

    • When you use signed fixed-point types, the word length must be 126 or less.

    • When you use unsigned fixed-point types, the word length must be 125 or less.

  • When you set Function to sin, cos, sincos, or cos + jsin and set the Approximation method to Lookup, the block has these limitations.

    • When you use signed fixed-point types, the input angle must fall within the range [-2π,2π] rad.

    • When you use unsigned fixed-point types, the input angle must fall within the range [0,2π) rad.

    • When you set Function to atan2 and the Approximation method to Lookup, the block has these limitations:

      • Inputs must be the same size, or at least one value must be a scalar value.

      • Both inputs must have the same data type.

Data Types: half | single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | fixed point

Input the x-axis or real part of the function argument for atan2. When you set Function to atan2, the block shows two input ports. The first input (Port_1) is the y-axis or imaginary part of the function argument. The second input (Port_2) is the x-axis or real part of the function argument. (See Identify Port Location on Rotated or Flipped Block for a description of the port order for various block orientations.)

Dependencies

To enable this port, set Function to atan2.

Limitations

  • Fixed-point input signals are supported only when you set Approximation method to CORDIC or Lookup.

Data Types: half | single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | fixed point

Output

expand all

Result of applying the specified trigonometric function to one or more inputs in rad. Each function supports:

  • Scalar operations

  • Element-wise vector and matrix operations

Data Types: half | single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | fixed point

Sine of the input signal, in rad and rev.

Dependencies

To enable this port, set Function to sincos.

Limitations

Fixed-point input signals are supported only when you set Approximation method to CORDIC or Lookup.

Data Types: half | single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | fixed point

Cosine of the input signal, in rad and rev.

Dependencies

To enable this port, set Function to sincos.

Limitations

Fixed-point input signals are supported only when you set Approximation method to CORDIC or Lookup.

Data Types: half | single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | fixed point

Parameters

expand all

Algorithm

Specify the trigonometric function. The name of the function on the block icon changes to match your selection.

For more information on when you set Function to sin, cos, sincos, or cos + jsin and set the Approximation method to CORDIC, see Limitations.

Programmatic Use

Block Parameter: Operator
Type: character vector
Values: 'sin' | 'cos' | 'tan' | 'asin' | 'acos' | 'atan' | 'atan2' | 'sinh' | 'cosh' | 'tanh' | 'asinh' | 'acosh' | 'atanh' | 'sincos' | 'cos + jsin'
Default: 'sin'

Specify the type of approximation for computing output.

Approximation MethodData Types SupportedWhen to Use This Method
None (default)

Floating point

You want to use the default Taylor series algorithm.

CORDIC

Floating point and fixed point

You want a fast, approximate iterative calculation.

Lookup

Floating point and fixed point (double and single) with a Bias value of 0 and a Slope value of the power of 2

You want a fast, approximate lookup table implementation.

For more information on when you set Function to sin, cos, sincos, or cos + jsin and set the Approximation method to CORDIC, see Limitations.

Dependencies

  • To enable this parameter, set Function to sin, cos, sincos, cos + jsin, or atan2.

  • To use fixed-point input signals, you must set Approximation method to CORDIC or Lookup.

  • To enable the Table data type parameter, set this method to Lookup.

Programmatic Use

Block Parameter: ApproximationMethod
Type: character vector
Values: 'None' | 'CORDIC' | 'Lookup'
Default: 'None'

When an input falls between breakpoint values, the block interpolates the output value using neighboring breakpoints. For more information on interpolation methods, see Interpolation Methods.

Programmatic Use

Block Parameter: InterpMethod
Type: character vector
Values: 'Linear point-slope' | 'Flat'
Default: 'Linear point-slope'

Specify the number of iterations to perform the CORDIC algorithm. The default value is 11.

  • When the block input uses a floating-point data type, the number of iterations can be a positive integer.

  • When the block input is a fixed-point data type, the number of iterations cannot exceed the word length.

    For example, if the block input is fixdt(1,16,15), the word length is 16. In this case, the number of iterations cannot exceed 16.

Dependencies

To enable this parameter, you must set the Function and Approximation method parameters as follows:

  • Set Function to sin, cos, sincos, cos + jsin, or atan2.

  • Set Approximation method to CORDIC.

Programmatic Use

Block Parameter: NumberOfIterations
Type: character vector
Values: positive integer, less than or equal to word length of fixed-point input
Default: '11'

Specify the angle unit for lookup method as radian or revolution.

Dependencies

To enable this parameter:

  • Set Function to sin, cos, sincos, cos + jsin, or atan2.

  • Set Approximation method to Lookup.

Programmatic Use

Block Parameter: AngleUnit
Type: character vector
Values: 'radian' | 'revolution'
Default: 'radian'

Specify the number of data points for lookup table as a scalar real number.

Dependencies

To enable this parameter:

  • Set Function to sin, cos, sincos, cos + jsin, or atan2.

  • Set Approximation method to Lookup.

Programmatic Use

Block Parameter: NumberOfDataPoints
Type: character vector
Values: scalar
Default: '16'

Specify the output signal type of the Trigonometric Function block as auto, real, or complex.

FunctionInput Signal TypeOutput Signal Type
AutoRealComplex
Any selection for the Function parameter realrealrealcomplex
complexcomplexerrorcomplex

Dependencies

Setting Approximation method to CORDIC disables this parameter.

Note

When Function is atan2, complex input signals are not supported for simulation or code generation.

Programmatic Use

Block Parameter: OutputSignalType
Type: character vector
Values: 'auto' | 'real' | 'complex'
Default: 'auto'

For acos and asin, select this check box to remove the protection against out-of-range inputs, which reduces redundancy.

  • When you clear this check box, the protection is enabled. The block saturates out-of-range inputs to 1 or -1 before any operation is performed. Generated code contains code to check for out-of-range input.

  • When you select this check box, the protection is removed. The block performs all operations on the input value without any changes. Generated code does not contain code to check for the out-of-range input.

Enabling this check box can eliminate redundancy if the input is already in range.

Dependencies

Setting Function to acos and asin enables this parameter.

Programmatic Use

Block Parameter: RemoveProtectionAgainstOutOfRangeInput
Type: character vector
Values: 'off' | 'on'
Default: 'off'

Specify the time interval between samples. To inherit the sample time, set this parameter to -1. For more information, see Specify Sample Time.

Dependencies

This parameter is visible only if you set it to a value other than -1. To learn more, see Blocks for Which Sample Time Is Not Recommended.

Programmatic Use

To set the block parameter value programmatically, use the set_param function.

Parameter: SampleTime
Values: "-1" (default) | scalar or vector in quotes

Data Types

Data type for the lookup table, specified as:

  • Inherit: Inherit via input

  • double

  • single

  • fixdt(1,16,0)

  • <data type expression>

For more information on setting data types, see Control Data Types of Signals.

Programmatic Use

Block Parameter: TableDataTypeStr
Type: string scalar or character vector
Values: Inherit: Inherit via input | single | double | fixdt(1,16,0) | data type expression
Default: Inherit: Inherit via input

Select how you would like to specify the data type properties of the Output data type. You can choose:

  • Inherit — Lets you specify a rule for inheriting a data type, for example, Inherit: Inherit via internal rule

  • Built in— Lets you specify a built-in data type.

  • Fixed point — Lets you specify the fixed-point attributes of the data type.

  • Expression — Lets you specify an expression that evaluates to a valid data type, for example, fixdt([],16,0)

Dependencies

To enable this parameter, click >> at the Output data type parameter.

Specify the Signedness for the Output data type.

Dependencies

To enable this parameter, set Mode to Fixed point.

Specify the Scaling for the Output data type.

Dependencies

To enable this parameter, set Mode to Fixed point.

Select the data type override mode for this signal.

  • Inherit — Inherits the data type override setting specified for the model.

  • Off — Ignores the data type override setting specified for the model and uses the fixed-point data type you specify

For more information, see Specify Data Types Using Data Type Assistant in the Simulink® documentation.

Tips

The ability to turn off data type override for an individual data type provides greater control over the data types in your model when you apply data type override. For example, you can use this option to ensure that data types meet the requirements of downstream blocks regardless of the data type override setting.

Dependencies

To enable this parameter, click the Show data type assistant button, and set Mode to Built in or Fixed point.

Specify the bit size of the word that holds the quantized integer. For more information, see Specifying a Fixed-Point Data Type.

Dependencies

To enable this parameter, set Mode to Fixed point.

Specify fraction length for fixed-point data type as a positive or negative integer. For more information, see Specifying a Fixed-Point Data Type.

Dependencies

To enable this parameter, set:

  • Mode to Fixed point

  • Scaling to Binary point

Block Characteristics

Data Types

double | fixed pointa | half | integera | single

Direct Feedthrough

yes

Multidimensional Signals

yes

Variable-Size Signals

yes

Zero-Crossing Detection

no

a This block supports fixed-point and base integer data types for 'Approximation method' CORDIC.

More About

expand all

References

[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.

Extended Capabilities

PLC Code Generation
Generate Structured Text code using Simulink® PLC Coder™.

Version History

Introduced before R2006a

See Also

Blocks

Functions