Implement discrete transfer function
Discrete
The Discrete Transfer Fcn block implements the ztransform transfer function:
$$H(z)=\frac{num(z)}{den(z)}=\frac{nu{m}_{0}{z}^{m}+nu{m}_{1}{z}^{m1}+\mathrm{...}+nu{m}_{m}}{de{n}_{0}{z}^{n}+de{n}_{1}{z}^{n1}+\mathrm{...}+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, den must be a vector, and you specify both as parameters on the block dialog box. 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 ztransform transfer function to each independent channel of the input. The Input processing parameter allows you to specify whether the block treats each element of the input as an individual channel (samplebased processing), or each column of the input as an individual channel (framebased processing). To perform framebased processing, you must have a DSP System Toolbox™ license.
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, see the following tables.
FrameBased Processing
Input  Number of Channels  Valid Initial States (Dialog Box)  Valid Initial States (Input Port) 

 1 


 N 


SampleBased Processing
Input  Number of Channels  Valid Initial States (Dialog Box)  Valid Initial States (Input Port) 

 1 


 N 


 K×N 


When the Initial states is a scalar, the
block initializes all filter states to the same scalar value. Enter 0
to
initialize all states to zero. 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 u_{1}, the first output y_{1} is related to the initial state [x_{1}, x_{2}] and initial input by:
$$\begin{array}{l}y1=4x1\\ x2=1/2(u13x1)\end{array}$$
The Discrete Transfer Function block accepts and outputs real and complex signals of any signed numeric data type that Simulink^{®} supports. The block supports the same types for the numerator and denominator coefficients.
Numerator and denominator coefficients must have the same complexity. They can have different word lengths and fraction lengths.
States are complex when either the input or the coefficients are complex.
The following diagrams show the filter structure and the data types that the block uses for floatingpoint and fixedpoint signals.
The block omits the dashed divide when you select the Optimize by skipping divide by leading denominator coefficient (a0) parameter.
The Main pane of the Discrete Transfer Fcn block dialog box appears as follows.
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.
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.
If the Source is Dialog
,
then, in Value, specify the initial states of
the filter states. To learn how to specify initial states, see Specifying Initial States.
If the Source is Input port
,
then there is nothing to be specified for Value.
Specify the trigger event to use to reset the states to the initial conditions.
Reset Mode  Behavior 

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:

Level hold  Reset when the reset signal is nonzero at the current time step 
The reset signal must be a scalar of type single
, double
, boolean
,
or integer
. Fixed point data types, except for ufix1
,
are not supported.
Specify whether the block performs sample or framebased 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: Framebased processing requires a DSP System Toolbox license. For more information, see Sample and FrameBased Concepts in the DSP System Toolbox documentation. 
Select when the leading denominator coefficient, a_{0}, equals one. This parameter optimizes your code.
When you select this check box, the block does not perform a dividebya_{0} either in simulation or in the generated code. An error occurs if a_{0} is not equal to one.
When you clear this check box, the block is fully tunable during simulation, and performs a dividebya_{0} in both simulation and code generation.
Specify the time interval between samples. To inherit the sample
time, set this parameter to 1
. See Specify Sample Time.
The Data Types pane of the Discrete Transfer Function block dialog box appears as follows.
Specify the state data type. You can set it to:
A rule that inherits a data type, for example, Inherit:
Same as input
A builtin 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 Show data type assistant button to display the Data Type Assistant, which helps you set the State parameter.
See Specify Data Types Using Data Type Assistant for more information.
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 builtin 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 Show data type assistant button to display the Data Type Assistant, which helps you set the Numerator coefficients parameter.
See Specify Data Types Using Data Type Assistant for more information.
Specify the minimum value that a numerator coefficient can have.
The default value is []
(unspecified). Simulink software
uses this value to perform:
Parameter range checking (see Control Block Parameter Value Ranges)
Automatic scaling of fixedpoint data types
Specify the maximum value that a numerator coefficient can have.
The default value is []
(unspecified). Simulink software
uses this value to perform:
Parameter range checking (see Control Block Parameter Value Ranges)
Automatic scaling of fixedpoint data types
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 builtin 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 Show data type assistant button to display the Data Type Assistant, which helps you set the Numerator product output parameter.
See Specify Data Types Using Data Type Assistant for more information.
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 builtin 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 Show data type assistant button to display the Data Type Assistant, which helps you set the Numerator accumulator parameter.
See Specify Data Types Using Data Type Assistant for more information.
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 builtin 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 Show data type assistant button to display the Data Type Assistant, which helps you set the Denominator coefficients parameter.
See Specify Data Types Using Data Type Assistant for more information.
Specify the minimum value that a denominator coefficient can
have. The default value is []
(unspecified). Simulink software
uses this value to perform:
Parameter range checking (see Control Block Parameter Value Ranges)
Automatic scaling of fixedpoint data types
Specify the maximum value that a denominator coefficient can
have. The default value is []
(unspecified). Simulink software
uses this value to perform:
Parameter range checking (see Control Block Parameter Value Ranges)
Automatic scaling of fixedpoint data types
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 builtin 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 Show data type assistant button to display the Data Type Assistant, which helps you set the Denominator product output parameter.
See Specify Data Types Using Data Type Assistant for more information.
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 builtin 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 Show data type assistant button to display the Data Type Assistant, which helps you set the Denominator accumulator parameter.
See Specify Data Types Using Data Type Assistant for more information.
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 builtin 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 Show data type assistant button to display the Data Type Assistant, which helps you set the Output parameter.
See Control Signal Data Types for more information.
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 fixedpoint data types
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 fixedpoint data types
Select to lock all data type settings of this block against changes by the FixedPoint Tool and the FixedPoint Advisor. For more information, see Lock the Output Data Type Setting in the FixedPoint Designer™ documentation.
Specify the rounding mode for fixedpoint operations. For more information, see Rounding. in the FixedPoint Designer documentation.
Action  Reasons for Taking This Action  What Happens for Overflows  Example 

Select this check box.  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 
Do not select this check box.  You want to optimize efficiency of your generated code. You want to avoid overspecifying how a block handles outofrange signals. For more information, see Checking for Signal Range Errors.  Overflows wrap to the appropriate value that is representable by the data type.  The maximum value that the 
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.
The State Attributes pane of the Discrete Filter block dialog box appears as follows.
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 Discrete Block State Naming in Generated Code in the Simulink Coder™ documentation.
Select this check box to require that the state name resolve to a Simulink signal object. This check box is cleared by default.
State name enables this parameter.
Selecting this check box disables Code generation storage class.
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 builtin package mpt
,
select mpt.Signal
. Unless you use an ERTbased
code generation target with Embedded Coder^{®} software, 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 Apply Custom Storage Classes Directly to Signal Lines and Block
States.
Select state storage class for code generation.
Default: Auto
Auto
Auto
is the appropriate storage class for
states that you do not need to interface to external code.
StorageClass
Applies the storage class or custom storage class that you select from the list. For information about storage classes, see Control Signals and States in Code by Applying Storage Classes. For information about custom storage classes, see Control Data Representation by Applying Custom Storage Classes.
Use Signal object class to select custom
storage classes from a package other than Simulink
.
State name enables this parameter.
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 ERTbased code generation target with Embedded Coder software, custom storage classes and memory sections do not affect the generated code. 
Specify a storage type qualifier such as const
or volatile
.
Setting Code generation storage class to ExportedGlobal
, ImportedExtern
, ImportedExternPointer
,
or SimulinkGlobal
enables this parameter.
This parameter is hidden unless you previously set its value.
During simulation, the block uses the following values:
The initial value of the signal object to which the state name resolves
Minimum and maximum values of the signal object
For more information, see Discrete Block State Naming in Generated Code in the Simulink Coder documentation.
Data Types  Double  Single  Base Integer  FixedPoint 
Sample Time  Specified in the Sample time parameter 
Direct Feedthrough  Only when the leading numerator coefficient is not equal to zero and the numerator order equals the denominator order 
Multidimensional Signals  No 
VariableSize Signals  No 
ZeroCrossing Detection  No 
Code Generation  Yes 