Model biquadratic IIR (SOS) filters
DSP System Toolbox / Filtering / Filter Implementations
DSP System Toolbox HDL Support / Filtering
The Biquad Filter block independently filters each channel of the input signal with the specified biquadratic infinite impulse response (IIR) filter. When you specify the filter coefficients in the dialog box, the block implements static filters with fixed coefficients. When you provide the filter coefficients through an input port, you can tune the coefficients during simulation.
The Biquad Filter block supports the Simulink® state logging feature. See State (Simulink) for more information.
In
— Data inputData input to the block, specified as a vector or a matrix. This block supports variable-size input signals, enabling you to change the input frame size (number of rows) during simulation. However, the number of channels (number of columns) must remain constant.
If the input is fixed-point, it must be signed fixed-point with binary point scaling.
This port is unnamed unless you set the Coefficient source to
Input port(s)
.
Data Types: single
| double
| int8
| int16
| int32
| int64
| fixed point
Complex Number Support: Yes
Num
— Numerator coefficientsNumerator coefficients of the biquad filter, specified as a 3-by-N matrix, where N is the number of biquad filter sections.
If Num is fixed-point, it must be signed fixed-point with binary point scaling.
This port appears only when you set the Coefficient source to
Input port(s)
.
Data Types: single
| double
| int8
| int16
| int32
| int64
| fixed point
Den
— Denominator coefficientsDenominator coefficients of the biquad filter, specified as a 2-by-N matrix, where N is the number of biquad filter sections.
If Den is fixed-point, it must be signed fixed-point with binary point scaling.
This port appears only when you set the Coefficient source to
Input port(s)
.
Data Types: single
| double
| int8
| int16
| int32
| int64
| fixed point
g
— Scale valuesScale values of the biquad filter, specified as a 1-by-(N+1) vector, where N is the number of biquad filter sections.
If g is fixed-point, it must be signed fixed-point with binary point scaling.
This port appears only when you set the Coefficient source to
Input port(s)
.
Data Types: single
| double
| int8
| int16
| int32
| int64
| fixed point
Out
— Filtered outputFiltered output, returned as a vector or a matrix.
The output dimensions always equal the dimensions of the input signal. The output of
this block numerically matches the outputs of the dsp.BiquadFilter
System object™.
If Out is fixed-point, it must be signed fixed-point with binary point scaling.
This port is unnamed unless you set the Coefficient source to
Input port(s)
.
Data Types: single
| double
| int8
| int16
| int32
| int64
| fixed point
Complex Number Support: Yes
Coefficient source
— Mode of operationDialog parameters
(default) | Input port(s)
| Filter object
The Biquad Filter block can operate in three different modes:
Dialog parameters
— Enter information about the
filter, such as structure and coefficients, in the block mask.
Input port(s)
— Enter information about the filter
structure in the block mask using the Filter structure parameter. The
filter coefficients come into the block through additional input ports that appear on the
block icon:
Num
— Specify numerator coefficients.
Den
— Specify denominator coefficients.
g
— Specify scale values.
The block assumes the first denominator coefficients and of each section to be 1.
This configuration is applicable when the SOSMatrixSource
property is
'Input port'
and the ScaleValuesInputPort
property is true
. The reason you would need to specify Num and Den
instead of the SOSMatrix, is that in Fixed-Point operation, the numerators, and
denominators can have different fraction lengths. Therefore, there is a need to be able to
pass the data of the numerator with a fixed-point type different from that of the
denominator.
Filter object
— Specify the filter using a dsp.BiquadFilter
System
object.
Filter
— Name of filter objectBQF
(default) | dsp.BiquadFilter
System object
nameSpecify the name of the discrete-time filter that you want the block to implement. You
must specify the filter as a dsp.BiquadFilter
System object.
You can define the System object in the block mask or in a MATLAB® workspace variable.
For information on creating System objects, see Define Basic System Objects.
This parameter is visible only when Coefficient source is set to
Filter object
.
Filter structure
— Filter structureDirect form II transposed
(default) | Direct form I
| Direct form I transposed
| Direct form II
Specify the filter structure.
This parameter is visible only when Coefficient source is set to
Dialog parameters
or Input
port(s)
.
SOS Matrix (Mx6)
— SOS matrix[1 0.3 0.4 1 0.1 0.2]
(default) | M-by-6 matrixSpecify an M-by-6 matrix, where M is the number of sections in the second-order section filter. Each row of the SOS matrix contains the numerator and denominator coefficients (bik and aik) of the corresponding section in the filter.
The leading denominator coefficients [a01 a02 ... a0N] are treated as 1s, regardless of their actual values. No scaling is applied to the SOS matrix when a0 is not 1.
The ss2sos
and tf2sos
functions convert a state-space or transfer function description of your
filter into the second-order section description used by this block.
This parameter is visible only when Coefficient source is set to
Dialog parameters
.
Scale values
— Scale values1
(default) | scalar | vectorSpecify scale values to be used between SOS sections. You can specify a real-valued scalar or a vector of length M+1:
When you enter a scalar, the value specifies the gain value before the first section of the second-order filter. The rest of the gain values default to 1.
When you enter a vector of M+1 values, each value specifies a separate section of the filter. For example, the first element is the first gain value, the second element is the second gain value, and so on.
Select the Optimize unity scale values check box to optimize your simulation when one or more scale values equal 1. Selecting this option removes the unity gains so that the values are treated like Simulink lines or wires. In some fixed-point cases when there are unity scale values, selecting this parameter also omits certain casts. Refer to the Fixed-Point Conversion section under Extended Capabilities for more information.
This parameter is visible only when Coefficient source is set to
Dialog parameters
.
Initial conditions
— Initial conditions0
(default) | scalar | vectorSpecify the initial conditions of the filter states.
The Biquad Filter block initializes the internal filter states to zero by default. Optionally, use the Initial conditions parameter to specify nonzero initial states for the filter delays.
To determine the number of initial conditions you must specify and how to specify them, see the following table on valid initial conditions.
Valid Initial Conditions
Initial Condition | Description |
---|---|
Scalar | The block initializes all delay elements in the filter to the scalar value. |
Vector or matrix | Each vector or matrix element specifies a unique initial condition for a corresponding delay element in a corresponding channel. M is the number of sections, and N is the number of input channels:
|
This parameter is only visible when Coefficient source is set to
Dialog parameters
or Input port(s)
and the Filter structure is set to Direct form
II
or Direct form II transposed
.
Initial conditions on zeros side
— Initial conditions on zeros side0
(default) | scalar | vectorSpecify the initial conditions for the filter states on the side of the filter structure with the zeros (b0, b1,b2, ...).
The Biquad Filter block initializes the internal filter states to zero by default. Optionally, use the Initial conditions on zeros side parameter to specify nonzero initial states for the filter delays. For an example, see ex_biquad_filter_ref.
To determine the number of initial conditions you must specify and how to specify them, see the following table on valid initial conditions.
Valid Initial Conditions
Initial Condition | Description |
---|---|
Scalar | The block initializes all delay elements in the filter to the scalar value. |
Vector or matrix | Each vector or matrix element specifies a unique initial condition for a corresponding delay element in a corresponding channel. Where M is the number of sections and N is the number of input channels:
|
This parameter is visible only when Coefficient source is set to
Dialog parameters
or Input port(s)
and the Filter structure is set to Direct form
I
or Direct form I transposed
.
Initial conditions on poles side
— Initial conditions on poles side0
(default) | scalar | vectorSpecify the initial conditions for the filter states on the side of the filter structure with the poles (a0, a1, a2, ...).
The Biquad Filter block initializes the internal filter states to zero by default. Optionally, use the Initial conditions on poles side parameter to specify nonzero initial states for the filter delays. For an example, see ex_biquad_filter_ref.
To determine the number of initial conditions you must specify and how to specify them, see the following table on valid initial conditions.
Valid Initial Conditions
Initial Condition | Description |
---|---|
Scalar | The block initializes all delay elements in the filter to the scalar value. |
Vector or matrix | Each vector or matrix element specifies a unique initial condition for a corresponding delay element in a corresponding channel. Where M is the number of sections and N is the number of input channels:
|
This parameter is visible only when Coefficient source is set to
Dialog parameters
or Input port(s)
and the Filter structure is set to Direct form
I
or Direct form I transposed
.
Scale values mode
— Mode to specify scale valuesSpecify via input port (g)
(default) | Assume all are unity and optimize
Choose how to specify the scale values to use between filter sections. When you select
Specify via input port (g)
, you enter the scale values as a 2-D
vector at port g. When you select Assume all are unity and
optimize
, all scale values are removed and treated like Simulink lines or
wires.
This parameter is visible only when Coefficient source is set to
Input port(s)
.
Action when the a0 values of the SOS matrix are not one
— Action when a0 values of SOS matrix are not oneWarning
(default) | None
| Error
Specify the action the block should perform when the SOS matrix
a0j values do not equal one. The action can be
Warning
, Error
, or
None
.
When you choose None
, the leading coefficients
a0j are treated as 1's, regardless of their
actual values. No scaling is applied on the SOS matrix when a0 is not
1.
This parameter is visible only when Coefficient source is set to
Dialog parameters
.
Optimize unity scale values
— Optimize unity scale valueson
(default) | off
Select this check box to optimize your simulation when one or more scale values equal 1. Selecting this option removes the unity gains so that the values are treated like Simulink lines or wires. In some fixed-point cases when there are unity scale values, selecting this parameter also omits certain casts. See the Fixed Point section under Extended Capabilities for more information.
This parameter is visible only when Coefficient source is set to
Dialog parameters
.
Input processing
— Input processingColumns as channels (frame based)
(default) | Elements as channels (sample based)
Specify how the block should process the input. If the input is an M-by-N matrix, you can set this parameter to:
Columns as channels (frame based)
(default) — The
block treats each column as a separate channel. In this mode, the block creates
M instances of the same filter, each with its own independent state
buffer. Each of the M filters process N input samples
at every Simulink time step.
Elements as channels (sample based)
— The block
treats each element as a separate channel. In this mode, the block creates
MN instances of the same filter, each with its own
independent state buffer. Each filter processes one input sample at every Simulink time step.
View Filter Response
— View filter responseThis button opens the Filter Visualization Tool (fvtool
) and displays the filter response of the filter specified in the
dialog.
Note
When you make changes to the filter parameters on the block dialog, you must click the Apply button before using the View Filter Response button.
Note
This tab appears only when you set Coefficient source to either
Dialog parameters
or Input port(s)
. When
the Coefficient source is set to Filter object
,
the data types specified in the filter object properties are used by the block.
Rounding mode
— Rounding modeFloor
(default) | Ceiling
| Convergent
| Nearest
| Round
| Simplest
| Zero
Specify the rounding mode for fixed-point operations.
For more details, see rounding mode. The filter
coefficients do not obey this parameter; instead, they always round to
Nearest
.
Saturate on integer overflow
— Method of overflow actionoff
(default) | on
When you select this parameter, the block saturates the result of its fixed-point
operation. When you clear this parameter, the block wraps the result of its fixed-point
operation. For details on saturate
and wrap
, see overflow mode for fixed-point operations.
The filter coefficients are always saturated and do not obey this parameter.
Section input
— Section input data typeSame as input
(default) | Binary point scaling
Choose how you specify the word and fraction lengths of the fixed-point data type going into each section of a biquadratic filter. See the Fixed-Point Conversion section under Extended Capabilities for illustrations depicting the use of the section input data type in this block. When you select:
Same as input
— Word length and fraction length
characteristics of the Section input data type match those of the
input to the block.
Binary point scaling
— Enter the word and fraction
lengths of the section input, in bits.
Section output
— Section output data typeSame as section input
(default) | Binary point scaling
Choose how you specify the word and fraction lengths of the fixed-point data type coming out of each section of a biquadratic filter. See the Fixed-Point Conversion section under Extended Capabilities for illustrations depicting the use of the section output data type in this block. When you select:
Same as section input
— Word length and fraction
length characteristics of the Section output data type match with
those of the input to the block.
Binary point scaling
— Enter the word and fraction
lengths of the section output, in bits.
Multiplicand
— Multiplicand data typeSame as output
(default) | Binary point scaling
Choose how you specify the word and fraction lengths of the multiplicand data type of a
Direct form I transposed
filter structure. See the
Fixed-Point Conversion section under Extended
Capabilities for illustrations depicting the use of the multiplicand data type in
this block.
When you select:
Same as output
— Word length and fraction length
characteristics of the Multiplicand data type match with those of the
output of the block.
Binary point scaling
— Enter the word length and the
fraction length of the multiplicand, in bits.
This parameter is visible only when the Filter structure parameter
is set to Direct form I transposed
.
Coefficients
— Coefficients data typeSame word length as input
(default) | Specify word length
| Binary point scaling
Choose how you specify the word and fraction lengths of the filter coefficients
(numerator, denominator, and scale value) when Coefficient source is set
to Dialog parameters
. See the Fixed-Point
Conversion section under Extended Capabilities for
illustrations depicting the use of the coefficient data types in this block. When you select:
Same word length as input
— Word length of the
filter coefficients matches that of the input to the block. In this mode, the block
automatically sets the fraction length of the coefficients to the binary point-only scaling
that provides the best precision possible given the value and word length of the
coefficients.
Specify word length
— Enter the word length of the
coefficients, in bits. In this mode, the block automatically sets the fraction length of
the coefficients to the binary point-only scaling that provides the best precision possible
given the value and word length of the coefficients.
Binary point scaling
— Enter the word length and the
fraction length of the coefficients, in bits. If applicable, enter separate fraction
lengths for the numerator and denominator coefficients.
The filter coefficients do not obey the Rounding mode and the
Overflow mode parameters; instead, they are always saturated and
rounded to Nearest
.
This parameter is visible only when Coefficient source is set to
Dialog parameters
.
Product output
— Product output data typeSame as input
(default) | Inherit via internal rule
| Binary point scaling
Specify how to designate the product output word and fraction lengths. See Multiplication Data Types and the Fixed-Point Conversion section under Extended Capabilities for illustrations depicting the use of the product output data type in this block. When you select:
Same as input
— Product output word length and
fraction length characteristics match those of the input to the block.
Inherit via internal rule
— Product output word
length and fraction lengths are computed based on full-precision rules. These rules prevent
quantization from occurring within the block. Bits are added, as needed, so that no
roundoff or overflow occurs. For more details, see Inherit via Internal Rule.
Binary point scaling
— Enter the word length and the
fraction length of the product output, in bits. If applicable, enter separate fraction
lengths for the numerator and denominator product output data type.
Accumulator
— Accumulator data typeSame as product output
(default) | Same as input
| Binary point scaling
Specify how to designate the accumulator word and fraction lengths. See Multiplication Data Types and the Fixed-Point Conversion section under Extended Capabilities for illustrations depicting the use of the accumulator data type in this block. When you select:
Same as input
— Accumulator word and fraction length
characteristics match those of the input to the block.
Same as product output
— Accumulator word and
fraction length characteristics match those of the product output.
Binary point scaling
— Enter the word length and the
fraction length of the accumulator, in bits. If applicable, enter separate fraction lengths
for the numerator and denominator accumulator data type.
States
— States data typeSame as accumulator
(default) | Same as input
| Binary point scaling
Specify how to designate the state word and fraction lengths when Coefficient
source is set to Dialog parameters
. See the
Fixed-Point Conversion section under Extended
Capabilities for illustrations depicting the use of the state data type in this
block.
When you select:
Same as input
— State word and fraction length
characteristics match those of the input to the block.
Same as accumulator
— State word and fraction length
characteristics match those of the accumulator.
Binary point scaling
— Enter the word length and the
fraction length of the state, in bits. If applicable, enter separate fraction lengths for
the numerator and denominator state data type.
This parameter is visible only when Filter structure is set to
Direct form II
or Direct form II
transposed
.
Output
— Output data typeSame as accumulator
(default) | Same as input
| Binary point scaling
Choose how you specify the output word length and fraction length. See the Fixed-Point Conversion section under Extended Capabilities for illustrations depicting the use of the output data type in this block. When you select:
Same as input
— Output word and fraction length
characteristics match those of the input to the block.
Same as accumulator
— Output word and fraction
length characteristics match those of the accumulator.
Binary point scaling
— Enter the word length and the
fraction length of the output, in bits.
Lock data type settings against changes by the fixed-point tools
— Lock data type settingsoff
(default) | on
Select this parameter to prevent the fixed-point tools from overriding the data types you specify on the block mask.
Data Types |
|
Direct Feedthrough |
|
Multidimensional Signals |
|
Variable-Size Signals |
|
Zero-Crossing Detection |
|
HDL Coder™ provides additional configuration options that affect HDL implementation and synthesized logic.
HDL Coder supports programmable filters for Biquad Filter blocks.
On the filter block mask, set Coefficient source to Input port(s).
Connect vector signals to the Num
and Den
coefficient ports.
The following limitations apply to the HDL optimizations for a programmable Biquad Filter block:
Fully serial and partly serial architectures are not supported.
Architecture must be set to Fully
parallel
.
Canonical signed digit (CSD) multiplier optimization is not supported.
CoeffMultipliers
must be set to
multiplier
.
HDL Coder supports the use of vector inputs to Biquad Filter blocks.
Connect a vector signal to the Biquad Filter block input port.
Specify Input processing as Elements as channels
(sample based)
.
To reduce area by sharing the filter kernel between channels, set the StreamingFactor parameter of the subsystem to the number of channels. See the Streaming section of Subsystem Optimizations for Filters (HDL Coder).
To use block-level optimizations to reduce hardware resources, select a serial
Architecture. Then set either NumMultipliers
or
Folding Factor
. See HDL Filter Properties.
When you select a serial architecture, set Filter structure to
Direct form I
or Direct form II
. The
direct form transposed structures are not supported with serial architectures.
When you use AddPipelineRegisters, registers are placed based on the filter structure. The pipeline register placement determines the latency.
Filter Structure | Pipeline Register Placement | Latency (Clock Cycles) |
---|---|---|
Any | Pipeline registers are added between the filter sections. | NS-1 , where NS is number of sections. |
This block can participate in subsystem-level optimizations such as sharing, streaming,
and pipelining. For the block to participate in subsystem-level optimizations, set
Architecture to Fully parallel
. See Subsystem Optimizations for Filters (HDL Coder).
AddPipelineRegisters | Insert a pipeline register between stages of computation in a filter. See also AddPipelineRegisters (HDL Coder). |
CoeffMultipliers | Specify the use of canonical signed digit (CSD) optimization to decrease filter area
by replacing coefficient multipliers with shift-and-add logic. When you choose a fully
parallel filter implementation, you can set CoeffMultipliers to
|
FoldingFactor | Specify a serial implementation of an IIR SOS filter by the number of cycles it takes to generate the result. See also FoldingFactor (HDL Coder). |
NumMultipliers | Specify a serial implementation of an IIR SOS filter by the number of hardware multipliers that are generated. See also NumMultipliers (HDL Coder). |
For more details about HDL filter properties, see HDL Filter Block Properties (HDL Coder).
ConstrainedOutputPipeline | Number of registers to place at
the outputs by moving existing delays within your design. Distributed
pipelining does not redistribute these registers. The default is
|
InputPipeline | Number of input pipeline stages
to insert in the generated code. Distributed pipelining and constrained
output pipelining can move these registers. The default is
|
OutputPipeline | Number of output pipeline stages
to insert in the generated code. Distributed pipelining and constrained
output pipelining can move these registers. The default is
|
Frame input is not supported for HDL code generation.
You must set Initial conditions to 0
. HDL code
generation is not supported for nonzero initial states.
You must select Optimize unity scale values.
You cannot generate HDL for this block inside a Resettable Synchronous Subsystem (HDL Coder).
If the input is fixed point, it must be signed integer or signed fixed point with power-of-two slope and zero bias.
The diagrams in the following sections show the filter structures supported by the Biquad Filter block. They also show the data types used in the filter structures for fixed-point signals. You can set the data types shown in these diagrams in the block dialog box.
The following diagram shows the data types for one section of the filter for fixed-point signals.
The following diagrams show the fixed-point data types between filter sections.
When the data is not optimized:
When you select Optimize unity scale values and scale values equal 1:
The following diagram shows the data types for one section of the filter for fixed-point signals.
The dashed casts are omitted when Optimize unity scale values is selected and scale values equal one.
The following diagrams show the fixed-point data types between filter sections.
When the data is not optimized:
When you select Optimize unity scale values and scale values equal 1:
The following diagram shows the data types for one section of the filter for fixed-point signals.
The dashed casts are omitted when Optimize unity scale values is selected and scale values equal one.
The following diagrams show the fixed-point data types between filter sections.
When the data is not optimized:
When you select Optimize unity scale values and scale values equal 1:
The following diagram shows the data types for one section of the filter for fixed-point signals.
The following diagrams show the fixed-point data types between filter sections.
When the data is not optimized:
When you select Optimize unity scale values and scale values equal 1: