Documentation

Data Type Conversion

Convert input signal to specified data type

Library

Signal Attributes

Description

The Data Type Conversion block converts an input signal of any Simulink® data type to the data type that you specify for the Output data type parameter. The input can be any real- or complex-valued signal. If the input is real, the output is real. If the input is complex, the output is complex.

    Note   This block requires that you specify the data type and scaling for the conversion. If you want to inherit the data type or scaling from an input signal, use the Data Type Conversion Inherited block.

Converting Fixed-Point Signals

When you convert between fixed-point data types, the Input and output to have equal parameter controls block behavior. If neither input nor output use fixed-point scaling, because they are not of a fixed-point data type or have trivial fixed-point scaling, this parameter does not change the behavior of the block. For more information about fixed-point numbers, see Fixed-Point Numbers in the Fixed-Point Designer™ documentation.

Select Real World Value (RWV), the default setting, to convert a signal from one data type to another by attempting to preserve the real-world value of the input signal. The block accounts for the scaling of the input and output and, within the limits of the specified data types, attempts to generate an output of equal real-world value.

Select Stored Integer (SI) to change the real-world value of the input signal by performing a scaling reinterpretation of the stored integer value. Within the limits of the specified data types, the block attempts to preserve the stored integer value of the signal during conversion. A best practice is to specify input and output data types using the same word length so that the block changes only the scaling of the signal. For an example, see Reinterpret Signal Using a Fixed-Point Data Type

If you select Stored Integer (SI), the block does not perform a lower-level bit reinterpretation of a floating-point input signal. For example, if the input is of the data type single and has value 5, the bits that store the input in memory are given in hexadecimal by the following command.

num2hex(single(5))
40a00000

However, the Data Type Conversion block does not treat the stored integer value as 40a00000, but as 5, the real-world value. After conversion, the stored integer value of the output is 5.

Casting Enumerated Signals

Use a Data Type Conversion block to cast enumerated signals as follows:

  1. To cast a signal of enumerated type to a signal of any numeric type.

    The underlying integers of all enumerated values input to the Data Type Conversion block must be within the range of the numeric type. Otherwise, an error occurs during simulation.

  2. To cast a signal of any integer type to a signal of enumerated type.

    The value input to the Data Type Conversion block must match the underlying value of an enumerated value. Otherwise, an error occurs during simulation.

    You can enable the block's Saturate on integer overflow parameter so that Simulink uses the default value of the enumerated type when the value input to the block does not match the underlying value of an enumerated value. See Type Casting for Enumerations.

You cannot use a Data Type Conversion block in the following cases:

  • To cast a non-integer numeric signal to an enumerated signal.

  • To cast a complex signal to an enumerated signal, regardless of the data types of the complex signal's real and imaginary parts.

See About Simulink Enumerations for information on working with enumerated types.

Data Type Support

The Data Type Conversion block handles any data type that Simulink supports, including fixed-point and enumerated data types.

For more information, see Data Types Supported by Simulink in the Simulink documentation.

Parameters and Dialog Box

Show data type assistant

Display the Data Type Assistant.

Settings

The Data Type Assistant helps you set the Output data type parameter.

For more information, see Specify Block Output Data Types.

Lock output data type setting against changes by the fixed-point tools

Select to lock the output data type setting of this block against changes by the Fixed-Point Tool and the Fixed-Point Advisor.

Settings

Default: Off

On

Locks the output data type setting for this block.

Off

Allows the Fixed-Point Tool and the Fixed-Point Advisor to change the output data type setting for this block.

Command-Line Information

Parameter: LockScale
Type: string
Value: 'off' | 'on'
Default: 'off'

See Also

For more information, see Use Lock Output Data Type Setting.

Input and output to have equal

Specify which type of input and output must be equal, in the context of fixed point data representation.

Settings

Default: Real World Value (RWV)

Real World Value (RWV)

Specifies the goal of making the Real World Value (RWV) of the input equal to the Real World Value (RWV) of the output.

Stored Integer (SI)

Specifies the goal of making the Stored Integer (SI) value of the input equal to the Stored Integer (SI) value of the output.

Command-Line Information

For the command-line information, see Block-Specific Parameters.

Integer rounding mode

Specify the rounding mode for fixed-point operations.

Settings

Default: Floor

Ceiling

Rounds both positive and negative numbers toward positive infinity. Equivalent to the MATLAB® ceil function.

Convergent

Rounds number to the nearest representable value. If a tie occurs, rounds to the nearest even integer. Equivalent to the Fixed-Point Designer convergent function.

Floor

Rounds both positive and negative numbers toward negative infinity. Equivalent to the MATLAB floor function.

Nearest

Rounds number to the nearest representable value. If a tie occurs, rounds toward positive infinity. Equivalent to the Fixed-Point Designer nearest function.

Round

Rounds number to the nearest representable value. If a tie occurs, rounds positive numbers toward positive infinity and rounds negative numbers toward negative infinity. Equivalent to the Fixed-Point Designer round function.

Simplest

Automatically chooses between round toward floor and round toward zero to generate rounding code that is as efficient as possible.

Zero

Rounds number toward zero. Equivalent to the MATLAB fix function.

Command-Line Information

Parameter: RndMeth
Type: string
Value: 'Ceiling' | 'Convergent' | 'Floor' | 'Nearest' | 'Round' | 'Simplest' | 'Zero'
Default: 'Floor'

See Also

For more information, see Rounding in the Fixed-Point Designer documentation.

Saturate on integer overflow

Specify whether overflows saturate.

Settings

Default: Off

On

Overflows saturate to either the minimum or maximum value that the data type can represent.

For example, an overflow associated with a signed 8-bit integer can saturate to -128 or 127.

Off

Overflows wrap to the appropriate value that is representable by the data type.

For example, the number 130 does not fit in a signed 8-bit integer and wraps to -126.

Tips

  • Consider selecting this check box when your model has possible overflow and you want explicit saturation protection in the generated code.

  • Consider clearing this check box when you want to optimize efficiency of your generated code.

    Clearing this check box also helps you avoid overspecifying how a block handles out-of-range signals. For more information, see Checking for Signal Range Errors.

  • When you select this check box, saturation applies to every internal operation on the block, not just the output or result.

  • In general, the code generation process can detect when overflow is not possible. In this case, the code generator does not produce saturation code.

Command-Line Information

Parameter: SaturateOnIntegerOverflow
Type: string
Value: 'off' | 'on'
Default: 'off'

Sample time

Output minimum

Lower value of the output range that Simulink checks.

Settings

Default: [] (unspecified)

Specify this number as a finite, real, double, scalar value.

    Note:   If you specify a bus object as the data type for this block, do not set the minimum value for bus data on the block. Simulink ignores this setting. Instead, set the minimum values for bus elements of the bus object specified as the data type. For information on the Minimum parameter for a bus element, see Simulink.BusElement.

Simulink uses the minimum to perform:

    Note:   Output minimum does not saturate or clip the actual output signal. Use the Saturation block instead.

Command-Line Information

Parameter: OutMin
Type: string
Value: '[ ]'
Default: '[ ]'

Output maximum

Upper value of the output range that Simulink checks.

Settings

Default: [] (unspecified)

Specify this number as a finite, real, double, scalar value.

    Note:   If you specify a bus object as the data type for this block, do not set the maximum value for bus data on the block. Simulink ignores this setting. Instead, set the maximum values for bus elements of the bus object specified as the data type. For information on the Maximum parameter for a bus element, see Simulink.BusElement.

Simulink uses the maximum value to perform:

    Note:   Output maximum does not saturate or clip the actual output signal. Use the Saturation block instead.

Command-Line Information

Parameter: OutMax
Type: string
Value: '[ ]'
Default: '[ ]'

Output data type

Specify the output data type.

Settings

Default: Inherit: Inherit via back propagation

Inherit: Inherit via back propagation

Use data type of the driving block.

double

Output data type is double.

single

Output data type is single.

int8

Output data type is int8.

uint8

Output data type is uint8.

int16

Output data type is int16.

uint16

Output data type is uint16.

int32

Output data type is int32.

uint32

Output data type is uint32.

boolean

Output data type is boolean. The Data Type Conversion block converts real, nonzero numeric values (including NaN and Inf) to boolean true (1).

fixdt(1,16,0)

Output data type is fixed point fixdt(1,16,0).

fixdt(1,16,2^0,0)

Output data type is fixed point fixdt(1,16,2^0,0).

Enum: <class name>

Use an enumerated data type, for example, Enum: BasicColors.

<data type expression>

Use a data type object, for example, Simulink.NumericType.

Command-Line Information

See Block-Specific Parameters for the command-line information.

See Also

For more information, see Specify Block Output Data Types.

Mode

Select the category of data to specify.

Settings

Default: Inherit

Inherit

Inheritance rules for data types. Selecting Inherit enables Inherit via back propagation.

Built in

Built-in data types. Selecting Built in enables a second menu/text box to the right. Select one of the following choices:

  • double (default)

  • single

  • int8

  • uint8

  • int16

  • uint16

  • int32

  • uint32

  • boolean

Fixed point

Fixed-point data types.

Enumerated

Enumerated data types. Selecting Enumerated enables a second menu/text box to the right, where you can enter the class name.

Expression

Expressions that evaluate to data types. Selecting Expression enables a second menu/text box to the right, where you can enter the expression.

Dependency

Clicking the Show data type assistant button enables this parameter.

Command-Line Information

See Block-Specific Parameters for the command-line information.

See Also

See Specify Data Types Using Data Type Assistant.

Data type override

Specify data type override mode for this signal.

Settings

Default: Inherit

Inherit

Inherits the data type override setting from its context, that is, from the block, Simulink.Signal object or Stateflow® chart in Simulink that is using the signal.

Off

Ignores the data type override setting of its context and uses the fixed-point data type specified for the signal.

Tip

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.

Dependency

This parameter appears only when the Mode is Built in or Fixed point.

Signedness

Specify whether you want the fixed-point data as signed or unsigned.

Settings

Default: Signed

Signed

Specify the fixed-point data as signed.

Unsigned

Specify the fixed-point data as unsigned.

Dependencies

Selecting Mode > Fixed point enables this parameter.

See Also

For more information, see Specifying a Fixed-Point Data Type.

Word length

Specify the bit size of the word that holds the quantized integer.

Settings

Default: 16

Minimum: 0

Maximum: 32

Dependencies

Selecting Mode > Fixed point enables this parameter.

See Also

For more information, see Specifying a Fixed-Point Data Type.

Scaling

Specify the method for scaling your fixed-point data to avoid overflow conditions and minimize quantization errors.

Settings

Default: Best precision

Binary point

Specify binary point location.

Slope and bias

Enter slope and bias.

Best precision

Specify best-precision values.

Dependencies

Selecting Mode > Fixed point enables this parameter.

Selecting Binary point enables:

  • Fraction length

  • Calculate Best-Precision Scaling

Selecting Slope and bias enables:

  • Slope

  • Bias

  • Calculate Best-Precision Scaling

See Also

For more information, see Specifying a Fixed-Point Data Type.

Fraction length

Specify fraction length for fixed-point data type.

Settings

Default: 0

Binary points can be positive or negative integers.

Dependencies

Selecting Scaling > Binary point enables this parameter.

See Also

For more information, see Specifying a Fixed-Point Data Type.

Slope

Specify slope for the fixed-point data type.

Settings

Default: 2^0

Specify any positive real number.

Dependencies

Selecting Scaling > Slope and bias enables this parameter.

See Also

For more information, see Specifying a Fixed-Point Data Type.

Bias

Specify bias for the fixed-point data type.

Settings

Default: 0

Specify any real number.

Dependencies

Selecting Scaling > Slope and bias enables this parameter.

See Also

For more information, see Specifying a Fixed-Point Data Type.

Examples

Real World Values Versus Stored Integers

The following modelmodel uses the Data Type Conversion block to describe the difference between a real-world value and a stored integer. Consider these two fixed-point block diagrams:

In the top block diagram, the Data Type Conversion block treats the input as a real-world value. The block maps that value to an 8-bit signed generalized fixed-point data type with a scaling of 2-2 (in other words, binary point scaling with slope = 2-2 and bias = 0). When the value is then output from the Data Type Conversion1 block as a real-world value, the scaling and data type information is retained and the output value is 001111.00, or 15. When the value is output from the Data Type Conversion2 block as a stored integer, the scaling and data type information is not retained and the stored integer is interpreted as 00111100, or 60.

In the bottom block diagram, the Data Type Conversion3 block treats the input as a stored integer, and the block does not apply the data type and scaling. When the value is then output from the Data Type Conversion4 block as a real-world value, the block applies scaling and data type information to the stored integer (Slope = 2-2 and Bias = 0), and the output value is 000011.11, or 3.75. When the value is output from the Data Type Conversion5 block as a stored integer, you get back the original input value of 15.

Reinterpret Signal Using a Fixed-Point Data Type

Suppose your hardware uses the data type uint8 to store data from a temperature sensor. Also suppose that the minimum stored integer value 0 represents –20 degrees Celsius while the maximum 255 represents 60 degrees. The following model uses a Data Type Conversion block to convert the stored integer value of the sensor data to degrees Celsius.

The Data Type Conversion block parameter Input and output to have equal is set to Stored Integer (SI). The block output signal is of a fixed-point data type with word length 8, slope 80/255, and bias -20.

The Data Type Conversion block reinterprets the integer input, 127, as a Celsius output, 19.84 degrees. The block output uses the specified slope and bias to scale the stored integer of the input.

Real World Values and Stored Integers in Summations

The following modelmodel shows how a summation operation applies to real-world values and stored integers, and how the generated code handles scaling information.

When the Data Type Conversion (2 or 5) block outputs a real-world value, the summation operation produces the correct result . The correct result is because the specified scaling information is applied to the stored integer value. However, when the Data Type Conversion4 block outputs a stored integer value, then the summation operation produces an unexpected result due to the absence of scaling information.

If you generate code for the model, then the code captures the appropriate scaling information. The code for the Sum block is shown here. The inputs to this block are tagged with the specified scaling information so that the necessary shifts are performed for the summation operation.

/* Sum Block: <Root>/Sum
   *
   *  y =  u0 + u1
   *
   * Input0  Data Type:  Fixed Point    S16  2^-2
   * Input1  Data Type:  Fixed Point    S16  2^-4
   * Output0 Data Type:  Fixed Point    S16  2^-5
   *
   * Round Mode: Floor
   * Saturation Mode: Wrap
   *
   */
  sum = ((in1) << 3);
  sum += ((in2) << 1);

Characteristics

Direct Feedthrough

Yes

Sample Time

Inherited from driving block

Scalar Expansion

N/A

Dimensionalized

Yes

Multidimensionalized

Yes

Zero-Crossing Detection

No

Was this topic helpful?