Contenuto principale

Biquad Filter

R2026b

Biquadratic IIR (SOS) filter

Since R2022a

  • Biquad Filter block

Libraries:
DSP HDL Toolbox / Filtering

Description

A biquad filter is a form of infinite-impulse response (IIR) filter that separates the numerator and denominator and implements each part as a series of second-order sections connected by scaling operations. This type of filter can replace a large FIR filter that uses an impractical amount of hardware resources. Designs often use biquad filters as DC blocking filters or to meet a specification originally implemented with an analog filter, such as a pre-emphasis filter.

The Biquad Filter block provides transposed architectures, a pipelined architecture to optimize throughput, or a serial minimum resource architecture that also supports multichannel input.

Note

You can also generate HDL code for this hardware-optimized algorithm, without creating a Simulink® model, by using the DSP HDL IP Designer app. The app provides the same interface and configuration options as the Simulink block.

Examples

Ports

Input

expand all

Input data, specified as a scalar or vector of real values. When you provide a column vector, N-by-1, the filter interprets it as N data samples over time. When you provide a row vector, 1-by-K, the filter interprets it as K independent channels. When the input has an integer or fixed-point data type, the block uses fixed-point arithmetic for internal calculations.

Column vector, or frame-based, input is supported only when you set Filter structure to Pipelined feedback form. The block accepts vectors of powers of two up to 64 samples, but large vector sizes can make the calculation of internal data types challenging. Vector sizes of up to 16 samples are practical for hardware implementation.

Row vector, or multichannel, input is supported only when you set Filter structure to Direct form I fully serial.

When you set Filter structure to Direct form I fully serial, the signal at the ready output port indicates when the block can accept new input data. Your upstream design can provide input samples in reaction to the ready signal, or you can space your input data with enough cycles in between to process each sample. For more information, see Backpressure Signal. The block icon displays the cycles required to process one sample.

The software supports double and single data types for simulation, but not for HDL code generation.

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

Control signal that indicates if the input data is valid. When valid is 1 (true), the block captures the values from the input data port. When valid is 0 (false), the block ignores the values from the input data port.

Data Types: Boolean

Output

expand all

Filtered output data, returned as a scalar or vector of real values. For vector input, representing either frame-based (column vector) or multichannel (row vector) data, the output dimensions match the input dimensions.

When the input data type is a floating-point type, the output data inherits the data type of the input data. When the input data type is an integer type or a fixed-point type, the Output parameter on the Data Types tab controls the output data type.

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

Control signal that indicates if the data from the output data port is valid. When valid is 1 (true), the block returns valid data from the output data port. When valid is 0 (false), the values from the output data port are not valid.

Data Types: Boolean

Control signal that indicates the block can accept new input data. The block sets this output to 1 (true) when it can accept data, and to 0 (false) when it is processing and cannot accept more data. For more information, see Backpressure Signal.

Dependencies

To enable this port, set Filter structure to Direct form I fully serial.

Data Types: Boolean

Parameters

expand all

Note

These parameters apply when configuring a block in Simulink or an algorithm in the DSP HDL IP Designer app.

Limitation: You cannot specify three-dimensional coefficient values or scale values in the DSP HDL IP Designer app. In the app, you can design a multichannel biquad filter with the same coefficients for all channels, or you can export a multichannel biquad filter design to Simulink and then modify the coefficients parameters.

Main

Both the Direct form II and Direct form II transposed architectures are pipelined and quantized to fit well into FPGA DSP blocks. The output of these filters matches the output of the DSP System Toolbox™ System objects dsp.SOSFilter and dsp.FourthOrderSectionFilter. These architectures minimize the number of multipliers used by the filter but have a critical path through the feedback loop and sometimes cannot achieve higher clock rates. These architectures do not support vector input.

Pipelined feedback form implements a pipelined architecture that uses more multipliers than either direct-form II structure, but achieves higher clock rates after synthesis. This architecture supports scalar or column vector (frame-based) input and does not support row vector (multichannel) input. The output of the pipelined filter is slightly different than the DSP System Toolbox functions dsp.SOSFilter and dsp.FourthOrderSectionFilter because of the timing of data samples applied in the pipelined filter stages.

Direct form I fully serial implements a fully serial architecture that uses only one multiplier. This architecture supports scalar or row vector (multichannel) input and does not support column vector (frame-based) input. When you select this option, the block stores the numerator, denominator, and scale values in the same ROM. You can control the data type of the ROM by using the Coefficients data type parameter. When you select this architecture, the output ready port appears on the block.

Specify the numerator coefficients as a matrix of NumSections-by-3 values, or for a multichannel filter as a NumSections-by-3-by NumChannels matrix. NumSections is the number of second-order filter sections. The block infers the number of filter sections from the size of the numerator and denominator coefficients. The numerator coefficient and denominator coefficient matrices must be the same size. The default filter has one section.

Dependencies

To specify multichannel coefficients, you must set Filter structure to Direct form I fully serial.

Specify the denominator coefficients as a matrix of NumSections-by-3 values, or for a multichannel filter as a NumSections-by-3-by NumChannels matrix. The block assumes the first denominator coefficient of each section is 1.0. NumSections is the number of second-order filter sections. The block infers the number of sections from the size of the numerator and denominator coefficients. The numerator coefficient and denominator coefficient matrices must be the same size. The default filter has one section.

Dependencies

To specify multichannel coefficients, you must set Filter structure to Direct form I fully serial.

Specify the gain values as a vector of up to NumSections+1 values or a matrix of up to (NumSections+1)-by-NumChannels values. NumSections is the number of second-order filter sections. The block infers the number of sections from the size of the numerator and denominator coefficients. If the vector has only one value, the block applies that gain before the first section. If you specify fewer values than there are filter sections, the block sets the remaining section gain values to one. The diagram shows a three-section filter and the locations of the four scale values before and after the sections.

Applying these gain factors outside the filter sections reduces the multipliers needed to implement the numerator of the filter.

Dependencies

To use this parameter when you set Filter structure to Direct form I fully serial, select Specify scale values.

To specify multichannel scale values, you must set Filter structure to Direct form I fully serial.

Since R2026b

When you clear this parameter, the filter assumes the scale values are all equal to 1 and reduces latency by omitting the scaling calculation.

When you select this parameter, the serial filter applies the specified Scale values between each filter section. This selection matches the filter implementation and latency before R2026b.

For more information about the latency of the serial filter, see the Algorithms > Serial section on this page.

Dependencies

To enable this parameter, set Filter structure to Direct form I fully serial.

Data Types

Rounding mode for type-casting the output and accumulator values to the data types specified by the Output and Accumulator parameters. When the input data type is floating point, the block ignores this parameter. For more details, see Rounding Modes.

Overflow handling for type-casting the output and accumulator values to the data types specified by the Output and Accumulator parameters. When the input data type is floating point, the block ignores this parameter. For more details, see Overflow Handling.

The block casts the numerator coefficients to this data type. The quantization rounds to the nearest representable value and saturates on overflow. When the input data type is floating point, the block ignores this parameter.

The block returns a warning if the data type of the coefficients does not have enough fractional length to represent the coefficients accurately.

If you specify an unsigned data type for this parameter, the filter uses the unsigned values and converts them to a signed data type. The signed data type is required to map the design onto DSP slices on an FPGA.

Dependencies

To enable this parameter, set Filter structure to Direct form II transposed, Direct form II, or Pipelined feedback form. When you use the serial architecture, use the Coefficients data type parameter.

The block casts the denominator coefficients to this data type. The quantization rounds to the nearest representable value and saturates on overflow. When the input data type is floating point, the block ignores this parameter.

The block returns a warning if the data type of the coefficients does not have enough fractional length to represent the coefficients accurately.

If you specify an unsigned data type for this parameter, the filter uses the unsigned values and converts them to a signed data type. The signed data type is required to map the design onto DSP slices on an FPGA.

Dependencies

To enable this parameter, set Filter structure to Direct form II transposed, Direct form II, or Pipelined feedback form. When you use the serial architecture, use the Coefficients data type parameter.

The block casts the scale values to this data type. The quantization rounds to the nearest representable value and saturates on overflow. When the input data type is floating point, the block ignores this parameter.

Dependencies

To enable this parameter, set Filter structure to Direct form II transposed, Direct form II, or Pipelined feedback form. When you use the serial architecture, use the Coefficients data type parameter.

The block casts the numerator, denominator, and scale values to this data type and stores them in an eight-element memory of this word length. The quantization rounds to the nearest representable value and saturates on overflow. When the input data type is floating point, the block ignores this parameter.

If you specify an unsigned data type for this parameter, the filter uses the unsigned values and converts them to a signed data type. The signed data type is required to map the design onto DSP slices on an FPGA.

Dependencies

To enable this parameter, set Filter structure to Direct form I fully serial.

The block casts the internal accumulator signals (as indicated in the diagrams in the Algorithms section) to this data type. The quantization uses the settings of the Rounding mode and Saturate on integer overflow parameters. When the input data type is floating point, the block ignores this parameter.

The block casts the output of the filter to this data type. The quantization uses the settings of the Rounding mode and Saturate on integer overflow parameters. When the input data type is floating point, the block ignores this parameter.

Algorithms

expand all

References

[1] Chung, Jin-Gyun, and Keshab K. Parhi. Pipelined Lattice and Wave Digital Recursive Filters. Boston: Springer US, 1996. https://doi.org/10.1007/978-1-4613-1307-6.

Extended Capabilities

expand all

Version History

Introduced in R2022a

expand all