Documentation

# Discrete Transfer Fcn

Implement discrete transfer function

• Library:
• Simulink / Discrete

HDL Coder / Discrete

HDL Coder / HDL Floating Point Operations ## Description

The Discrete Transfer Fcn block implements the z-transform transfer function as follows:

`$H\left(z\right)=\frac{num\left(z\right)}{den\left(z\right)}=\frac{nu{m}_{0}{z}^{m}+nu{m}_{1}{z}^{m-1}+...+nu{m}_{m}}{de{n}_{0}{z}^{n}+de{n}_{1}{z}^{n-1}+...+de{n}_{n}}$`

where m+1 and n+1 are the number of numerator and denominator coefficients, respectively. num and den contain the coefficients of the numerator and denominator in descending powers of z. num can be a vector or matrix, while den must be a vector. The order of the denominator must be greater than or equal to the order of the numerator.

Specify the coefficients of the numerator and denominator polynomials in descending powers of z. This block lets you use polynomials in z to represent a discrete system, a method that control engineers typically use. Conversely, the Discrete Filter block lets you use polynomials in z-1 (the delay operator) to represent a discrete system, a method that signal processing engineers typically use. The two methods are identical when the numerator and denominator polynomials have the same length.

The Discrete Transfer Fcn block applies the z-transform transfer function to each independent channel of the input. The Input processing parameter allows you to specify whether the block treats each column of the input as an individual channel (frame-based processing) or each element of the input as an individual channel (sample-based processing). To perform frame-based processing, you must have a DSP System Toolbox™ license.

### Specifying Initial States

Use the Initial states parameter to specify initial filter states. To determine the number of initial states you must specify and how to specify them, use the following tables.

Frame-Based Processing

Input Number of ChannelsValid Initial States (Dialog Box)Valid Initial States (Input Port)
• Column vector (K-by-1)

• Unoriented vector (K)

1
• Scalar

• Column vector (M-by-1)

• Row vector (1-by-M)

• Scalar

• Column vector (M-by-1)

• Row vector (1-by-N)

• Matrix (K-by-N)

N
• Scalar

• Column vector (M-by-1)

• Row vector (1-by-M)

• Matrix (M-by-N)

• Scalar

• Matrix (M-by-N)

Sample-Based Processing

InputNumber of ChannelsValid Initial States (Dialog Box)Valid Initial States (Input Port)
• Scalar

1
• Scalar

• Column vector (M-by-1)

• Row vector (1-by-M)

• Scalar

• Column vector (M-by-1)

• Row vector (1-by-M)

• Row vector (1-by-N)

• Column vector (N-by-1)

• Unoriented vector (N)

N
• Scalar

• Column vector (M-by-1)

• Row vector (1-by-M)

• Matrix (M-by-N)

• Scalar

• Matrix (K-by-N)

K × N
• Scalar

• Column vector (M-by-1)

• Row vector (1-by-M)

• Matrix (M-by-(K×N))

• Scalar

When the Initial states is a scalar, the block initializes all filter states to the same scalar value. To initialize all states to zero, enter `0`. When the Initial states is a vector or a matrix, each vector or matrix element specifies a unique initial state for a corresponding delay element in a corresponding channel:

• The vector length must equal the number of delay elements in the filter, ```M = max(number of zeros, number of poles)```.

• The matrix must have the same number of rows as the number of delay elements in the filter, ```M = max(number of zeros, number of poles)```. The matrix must also have one column for each channel of the input signal.

The following example shows the relationship between the initial filter output and the initial input and state. Given an initial input u1, the first output y1 is related to the initial state [x1, x2] and initial input by as follows:

`$\begin{array}{l}y1=4x1\\ x2=1/2\left(u1-3x1\right)\end{array}$` ## Ports

### Input

expand all

Input signal, specified as a scalar, vector, or matrix.

Data Types: `single` | `double` | `int8` | `int16` | `int32` | `fixed point`

Coefficients of the numerator polynomial specified as a vector or matrix in descending powers of z. Use a row vector to specify the coefficients for a single numerator polynomial. Use a matrix to specify coefficients for multiple filters to be applied to the same input. Each matrix row represents a set of filter taps. The order of the denominator must be greater than or equal to the order of the numerator.

#### Dependencies

To enable this port, set Numerator Source to `Input port`.

Numerator and denominator coefficients must have the same complexity. They can have different word lengths and fraction lengths.

Data Types: `single` | `double` | `int8` | `int16` | `int32` | `fixed point`

Coefficients of the denominator polynomial specified as a vector in descending powers of z. Use a row vector to specify the coefficients for a single denominator polynomial. Use a matrix to specify coefficients for multiple filters to be applied to the same input. Each matrix row represents a set of filter taps. The order of the denominator must be greater than or equal to the order of the numerator.

#### Dependencies

To enable this port, set Denominator Source to `Input port`.

Numerator and denominator coefficients must have the same complexity. They can have different word lengths and fraction lengths.

Data Types: `single` | `double` | `int8` | `int16` | `int32` | `fixed point`

External reset signal, specified as a scalar. When the specified trigger event occurs, the block resets the states to their initial conditions.

### Tip

The icon for this port changes based on the value of the External reset parameter.

#### Dependencies

To enable this port, set External reset to `Rising`, `Falling`, `Either`, `Level`, or ```Level hold```.

#### Limitations

The reset signal must be a scalar of type single, double, Boolean, or integer. Fixed-point data types, except for `ufix1`, are not supported.

Data Types: `single` | `double` | `Boolean` | `int8` | `int16` | `int32` | `fixed point`

Initial states, specified as a scalar, vector, or matrix. For more information about specifying states, see Specifying Initial States. States are complex when either the input or the coefficients are complex.

#### Dependencies

To enable this port, set Initial states Source to ```Input port```.

Data Types: `single` | `double` | `int8` | `int16` | `int32` | `fixed point`

### Output

expand all

Output signal specified as a scalar, vector, or matrix.

Data Types: `single` | `double` | `int8` | `int16` | `int32` | `fixed point`

## Parameters

expand all

### Main

Specify the source of the numerator coefficients as `Dialog` or ```Input port```.

#### Programmatic Use

 Block Parameter: `NumeratorSource` Type: character vector Values: `'Dialog' | 'Input port'` Default: `'Dialog'`

Numerator coefficients of the discrete transfer function. To specify the coefficients, set the Source to `Dialog`. Then, enter the coefficients in Value as descending powers of z. Use a row vector to specify the coefficients for a single numerator polynomial. Use a matrix to specify coefficients for multiple filters to be applied to the same input. Each matrix row represents a set of filter taps.

#### Dependencies

To enable this parameter, set the Numerator Source to `Dialog`.

#### Programmatic Use

 Block Parameter: `Numerator` Type: character vector Values: scalar | vector | matrix Default: `''`

Specify the source of the denominator coefficients as `Dialog` or ```Input port```.

#### Programmatic Use

 Block Parameter: `DenominatorSource` Type: character vector Values: `'Dialog' | 'Input port'` Default: `'Dialog'`

Denominator coefficients of the discrete transfer function. To specify the coefficients, set the Source to `Dialog`. Then, enter the coefficients in Value as descending powers of z. Use a row vector to specify the coefficients for a single denominator polynomial. Use a matrix to specify coefficients for multiple filters to be applied to the same input. Each matrix row represents a set of filter taps.

#### Dependencies

To enable this parameter, set the Denominator Source to `Dialog`.

#### Programmatic Use

 Block Parameter: `Denominator` Type: character vector Values: scalar | vector | matrix Default: `'[1 0.5]'`

Specify the source of the initial states as `Dialog` or ```Input port```.

#### Programmatic Use

 Block Parameter: `InitialStatesSource` Type: character vector Values: `'Dialog' | 'Input port'` Default: `'Dialog'`

Specify the initial filter states as a scalar, vector, or matrix. To learn how to specify initial states, see Specifying Initial States.

#### Dependencies

To enable this parameter, set Initial states Source to `Dialog`.

#### Programmatic Use

 Block Parameter: `InitialStates` Type: character vector Values: scalar | vector | matrix Default: `'0'`

Specify the trigger event to use to reset the states to the initial conditions.

Reset ModeBehavior
`None`No reset
`Rising`Reset on a rising edge
`Falling`Reset on a falling edge
`Either`Reset on either a rising or falling edge
`Level`

Reset in either of these cases:

• When the reset signal is nonzero at the current time step

• When the reset signal value changes from nonzero at the previous time step to zero at the current time step

`Level hold`Reset when the reset signal is nonzero at the current time step

#### Programmatic Use

 Block Parameter: `ExternalReset` Type: character vector Values: `'None'` | `'Rising'` | `'Falling'` | `'Either'` | `'Level'` | ```'Level hold'``` Default: `'None'`

Specify whether the block performs sample- or frame-based processing.

• `Elements as channels (sample based)` — Process each element of the input as an independent channel.

• `Columns as channels (frame based)` — Process each column of the input as an independent channel.

### Note

Frame-based processing requires a DSP System Toolbox license.

For more information, see Sample- and Frame-Based Concepts (DSP System Toolbox).

#### Programmatic Use

 Block Parameter: `InputProcessing` Type: character vector Values: ```'Elements as channels (sample based)' | 'Columns as channels (frame based)'``` Default: ```'Elements as channels (sample based)'```

Select when the leading denominator coefficient, a0, equals 1. This parameter optimizes your code.

When you select this check box, the block does not perform a divide-by-a0 either in simulation or in the generated code. An error occurs if a0 is not equal to one.

When you clear this check box, the block is fully tunable during simulation, and performs a divide-by-a0 in both simulation and code generation.

#### Programmatic Use

 Block Parameter: `a0EqualsOne` 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.

#### Programmatic Use

 Block Parameter: `SampleTime` Type: character vector Values: scalar | vector Default: `'-1'`

### Data Types

Specify the state data type. You can set it to:

• A rule that inherits a data type, for example, `Inherit: Same as input`

• A built-in integer, for example, `int8`

• A data type object, for example, a `Simulink.NumericType` object

• An expression that evaluates to a data type, for example, `fixdt(1,16,0)`

Click the button to display the Data Type Assistant, which helps you set the data type attributes. For more information, see Specify Data Types Using Data Type Assistant.

Specify the numerator coefficient data type. You can set it to:

• A rule that inherits a data type, for example, ```Inherit: Inherit via internal rule```

• A built-in integer, for example, `int8`

• A data type object, for example, a `Simulink.NumericType` object

• An expression that evaluates to a data type, for example, `fixdt(1,16,0)`

Click the button to display the Data Type Assistant, which helps you set the data type attributes. For more information, see Specify Data Types Using Data Type Assistant.

#### Programmatic Use

 Block Parameter: ` NumCoeffDataTypeStr` Type: character vector Values: ```'Inherit: Inherit via internal rule' | 'int8' | 'int16' | 'int32' | 'int64' | 'fixdt(1,16)' | 'fixdt(1,16,0)' | ''``` Default: `'Inherit: Inherit via internal rule'`

Specify the minimum value that a numerator coefficient can have. The default value is `[]` (unspecified). Simulink® software uses this value to perform:

#### Programmatic Use

 Block Parameter: `NumCoeffMin` Type: character vector Values: scalar Default: `'[]'`

Specify the maximum value that a numerator coefficient can have. The default value is `[]` (unspecified). Simulink software uses this value to perform:

#### Programmatic Use

 Block Parameter: `NumCoeffMax` Type: character vector Values: scalar Default: `'[]'`

Specify the product output data type for the numerator coefficients. You can set it to:

• A rule that inherits a data type, for example, ```Inherit: Inherit via internal rule```

• A built-in data type, for example, `int8`

• A data type object, for example, a `Simulink.NumericType` object

• An expression that evaluates to a data type, for example, `fixdt(1,16,0)`

Click the button to display the Data Type Assistant, which helps you set the data type attributes. For more information, see Specify Data Types Using Data Type Assistant.

#### Programmatic Use

 Block Parameter: `NumProductDataTypeStr` Type: character vector Values: ```'Inherit: Inherit via internal rule' | 'Inherit: Same as input' | 'int8' | 'int16' | 'int32' | 'int64' | 'fixdt(1,16,0)' | ''``` Default: `'Inherit: Inherit via interal rule'`

Specify the accumulator data type for the numerator coefficients. You can set it to:

• A rule that inherits a data type, for example, ```Inherit: Inherit via internal rule```

• A built-in data type, for example, `int8`

• A data type object, for example, a `Simulink.NumericType` object

• An expression that evaluates to a data type, for example, `fixdt(1,16,0)`

Click the button to display the Data Type Assistant, which helps you set the data type attributes. For more information, see Specify Data Types Using Data Type Assistant.

#### Programmatic Use

 Block Parameter: `NumAccumDataTypeStr` Type: character vector Values: ```'Inherit: Inherit via internal rule' | 'Inherit: Same as input' | 'Inherit: Same as product output' | 'int8' | 'int16' | 'int32' | 'int64' | 'fixdt(1,16,0)' | ''``` Default: `'Inherit: Inherit via interal rule'`

Specify the denominator coefficient data type. You can set it to:

• A rule that inherits a data type, for example, ```Inherit: Inherit via internal rule```

• A built-in integer, for example, `int8`

• A data type object, for example, a `Simulink.NumericType` object

• An expression that evaluates to a data type, for example, `fixdt(1,16,0)`

Click the button to display the Data Type Assistant, which helps you set the data type attributes. For more information, see Specify Data Types Using Data Type Assistant.

#### Programmatic Use

 Block Parameter: `DenCoeffDataTypeStr` Type: character vector Values: ```'Inherit: Inherit via internal rule' | 'int8' | 'int16' | 'int32' | 'int64' | 'fixdt(1,16)' | 'fixdt(1,16,0)' | ''``` Default: `'Inherit: Same wordlength as input'`

Specify the minimum value that a denominator coefficient can have. The default value is `[]` (unspecified). Simulink software uses this value to perform:

#### Programmatic Use

 Block Parameter: `DenCoeffMin` Type: character vector Values: scalar Default: `'[]'`

Specify the maximum value that a denominator coefficient can have. The default value is `[]` (unspecified). Simulink software uses this value to perform:

#### Programmatic Use

 Block Parameter: `DenCoeffMax` Type: character vector Values: scalar Default: `'[]'`

Specify the product output data type for the denominator coefficients. You can set it to:

• A rule that inherits a data type, for example, ```Inherit: Inherit via internal rule```

• A built-in data type, for example, `int8`

• A data type object, for example, a `Simulink.NumericType` object

• An expression that evaluates to a data type, for example, `fixdt(1,16,0)`

Click the button to display the Data Type Assistant, which helps you set the data type attributes. For more information, see Specify Data Types Using Data Type Assistant.

#### Programmatic Use

 Block Parameter: `DenProductDataTypeStr` Type: character vector Values: ```'Inherit: Inherit via internal rule' | 'Inherit: Same as input' | 'int8' | 'int16' | 'int32' | 'int64' | 'fixdt(1,16,0)' | ''``` Default: `'Inherit: Inherit via interal rule'`

Specify the accumulator data type for the denominator coefficients. You can set it to:

• A rule that inherits a data type, for example, ```Inherit: Inherit via internal rule```

• A built-in data type, for example, `int8`

• A data type object, for example, a `Simulink.NumericType` object

• An expression that evaluates to a data type, for example, `fixdt(1,16,0)`

Click the button to display the Data Type Assistant, which helps you set the data type attributes. For more information, see Specify Data Types Using Data Type Assistant.

#### Programmatic Use

 Block Parameter: `DenAccumDataTypeStr` Type: character vector Values: ```'Inherit: Inherit via internal rule' | 'Inherit: Same as input' | 'Inherit: Same as product output' | 'int8' | 'int16' | 'int32' | 'int64' | 'fixdt(1,16,0)' | ''``` Default: `'Inherit: Inherit via interal rule'`

Specify the output data type. You can set it to:

• A rule that inherits a data type, for example, ```Inherit: Inherit via internal rule```

• A built-in data type, for example, `int8`

• A data type object, for example, a `Simulink.NumericType` object

• An expression that evaluates to a data type, for example, `fixdt(1,16,0)`

Click the button to display the Data Type Assistant, which helps you set the data type attributes. For more information, see Specify Data Types Using Data Type Assistant.

#### Programmatic Use

 Block Parameter: `OutDataTypeStr` Type: character vector Values: ```'Inherit: Inherit via internal rule' | 'Inherit: Same as input' | 'int8' | 'int16' | 'int32' | 'int64' | 'fixdt(1,16)' | 'fixdt(1,16,0)' | ''``` Default: `'Inherit: Inherit via interal rule'`

Specify the minimum value that the block can output. The default value is `[]` (unspecified). Simulink uses this value to perform:

• Simulation range checking (see Signal Ranges)

• Automatic scaling of fixed-point data types

#### Programmatic Use

 Block Parameter: `OutMin` Type: character vector Values: scalar Default: `'[]'`

Specify the maximum value that the block can output. The default value is `[]` (unspecified). Simulink uses this value to perform:

• Simulation range checking (see Signal Ranges)

• Automatic scaling of fixed-point data types

#### Programmatic Use

 Block Parameter: `OutMax` Type: character vector Values: scalar Default: `'[]'`

Select this parameter to prevent the fixed-point tools from overriding the data types you specify on this block. For more information, see Lock the Output Data Type Setting (Fixed-Point Designer).

#### Programmatic Use

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

Specify the rounding mode for fixed-point operations. For more information, see Rounding (Fixed-Point Designer).

Block parameters always round to the nearest representable value. To control the rounding of a block parameter, enter an expression using a MATLAB® rounding function into the mask field.

#### Programmatic Use

 Block Parameter: `RndMeth` Type: character vector Values: ```'Ceiling' | 'Convergent' | 'Floor' | 'Nearest' | 'Round' | 'Simplest' | 'Zero'``` Default: `'Floor'`

Specify whether overflows saturate or wrap.

ActionRationaleImpact on OverflowsExample

Select this check box (`on`).

Your model has possible overflow, and you want explicit saturation protection in the generated code.

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

The maximum value that the `int8` (signed, 8-bit integer) data type can represent is 127. Any block operation result greater than this maximum value causes overflow of the 8-bit integer. With the check box selected, the block output saturates at 127. Similarly, the block output saturates at a minimum output value of -128.

Do not select this check box (`off`).

You want to optimize efficiency of your generated code.

You want to avoid overspecifying how a block handles out-of-range signals. For more information, see Check for Signal Range Errors.

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

The maximum value that the `int8` (signed, 8-bit integer) data type can represent is 127. Any block operation result greater than this maximum value causes overflow of the 8-bit integer. With the check box cleared, the software interprets the overflow-causing value as `int8`, which can produce an unintended result. For example, a block result of 130 (binary 1000 0010) expressed as `int8`, is -126.

When you select this check box, saturation applies to every internal operation on the block, not just the output, or result. Usually, the code generation process can detect when overflow is not possible. In this case, the code generator does not produce saturation code.

#### Programmatic Use

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

### State Attributes

Use this parameter to assign a unique name to the block state. The default is `' '`. When this field is blank, no name is assigned. When using this parameter, remember these considerations:

• A valid identifier starts with an alphabetic or underscore character, followed by alphanumeric or underscore characters.

• The state name applies only to the selected block.

This parameter enables State name must resolve to Simulink signal object when you click Apply.

For more information, see Apply Storage Classes to Individual Signal, State, and Parameter Data Elements (Simulink Coder).

#### Programmatic Use

 Block Parameter: `StateName` Type: character vector Values: unique name Default: `''`

Select this check box to require that the state name resolves to a Simulink signal object.

#### Dependencies

To enable this parameter, specify a value for State name. This parameter appears only if you set the model configuration parameter Signal resolution to a value other than `None`.

Selecting this check box disables Code generation storage class.

#### Programmatic Use

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

Choose a custom storage class package by selecting a signal object class that the target package defines. For example, to apply custom storage classes from the built-in package `mpt`, select `mpt.Signal`. Unless you use an ERT-based code generation target with Embedded Coder®, custom storage classes do not affect the generated code.

If the class that you want does not appear in the list, select `Customize class lists`. For instructions, see Target Class Does Not Appear in List of Signal Object Classes (Embedded Coder).

For information about storage classes, see Apply Storage Classes to Individual Signal, State, and Parameter Data Elements (Simulink Coder). For information about custom storage classes, see Apply Built-In and Customized Storage Classes to Data Elements (Embedded Coder).

#### Programmatic Use

 Block Parameter: `StateSignalObject` Type: character vector Values: ```'Simulink.Signal' | ''``` Default: `'Simulink.Signal'`

Select state storage class for code generation.

Use Signal object class to select custom storage classes from a package other than `Simulink`.

#### Dependencies

To enable this parameter, specify a value for State name.

#### Programmatic Use

 Block Parameter: `StateStorageClass` Type: character vector Values: ```'Auto' | 'Model default' | 'ExportedGlobal' | 'ImportedExtern' | 'ImportedExternPointer' | 'Custom' | ...``` Default: `'Auto'`

Specify a storage type qualifier such as `const` or `volatile`.

### Note

TypeQualifier will be removed in a future release. To apply storage type qualifiers to data, use custom storage classes and memory sections. Unless you use an ERT-based code generation target with Embedded Coder, custom storage classes and memory sections do not affect the generated code.

During simulation, the block uses the following values:

• The initial value of the signal object to which the state name is resolved

• Minimum and Maximum values of the signal object

#### Dependencies

To enable this parameter, set Code generation storage class to `ExportedGlobal`, `ImportedExtern`, `ImportedExternPointer`, or `Model default`. This parameter is hidden unless you previously set its value.

#### Programmatic Use

 Block Parameter: `RTWStateStorageTypeQualifier` Type: character vector Values: ```'' | 'const' | 'volatile' | ...``` Default: `''`

## Block Characteristics

 Data Types `double` | `fixed point[a]` | `integer[a]` | `single` Direct Feedthrough `no` Multidimensional Signals `no` Variable-Size Signals `no` Zero-Crossing Detection `no` [a] This block only supports signed fixed-point data types.