Main Content

This example shows how to design classic lowpass IIR filters in Simulink^{®}.

The example first presents filter design using `filterBuilder`

. The
critical parameter in this design is the cutoff frequency, the frequency at which filter
power decays to half (`-3`

dB) the nominal passband value. The example
shows how to replace a Butterworth design with either a Chebyshev or elliptic filter of
the same order and obtain a steeper roll-off at the expense of some ripple in the
passband and/or stopband of the filter. The example also explores minimum-order
designs.

The example then shows how to design and use lowpass filters in Simulink using the interface available from the Lowpass Filter block..

Finally, the example showcases the Variable Bandwidth IIR Filter, which enables you to change the filter cutoff frequency at run time.

`filterBuilder`

`filterBuilder`

starts user
interface for building filters. `filterBuilder`

uses a
specification-centered approach to find the best algorithm for the desired response.
It also enables you to create a Simulink block from the specified design.

To start designing IIR lowpass filter blocks using
`filterBuilder`

, execute the command
`filterBuilder('lp')`

. A Lowpass Design dialog box
opens.

Design an eighth order Butterworth lowpass filter with a cutoff frequency of
`5`

kHz, assuming a sample rate of `44.1`

KHz.

Set the **Impulse response** to `IIR`

,
the **Order mode** to `Specify`

, and the
**Order** to `8`

. To specify the
cutoff frequency, set **Frequency constraints** to
`Half power (3 dB) frequency`

. To specify the
frequencies in Hz, set **Frequency units** to
`Hz`

, **Input sample rate** to
`44100`

, and **Half power (3 dB)
frequency** to `5000`

. Set the
**Design method** to
`Butterworth`

.

Click **Apply**. To visualize the filter's
frequency response, click **View Filter Response**. The filter is
maximally flat. There is no ripple in the passband or in the stopband. The filter
response is within the specification mask (the red dotted line).

Generate a block from this design and use it in a model. Open the model
`ex_iir_design`

. In **Filter Builder**, on the **Code Generation** tab, click
**Generate Model**. In the Export to Simulink window, specify
the **Block name** as `Butter`

and
**Destination** as `Current`

. You can
also choose to build the block using basic elements such as delays and gains, or use
one of the DSP System Toolbox™ filter blocks. This example uses the filter block.

Click **Realize model** to generate the Simulink block. You can now connect the block's input and output ports to the
source and sink blocks in the `ex_iir_design`

model.

In the model, a noisy sine wave sampled at `44.1`

kHz passes
through the filter. The sine wave is corrupted by Gaussian noise with zero mean and
a variance of `10`

. Run the model. The
view in the Spectrum Analyzer shows the original and filtered signals.^{–5}

Now design a Chebyshev Type I filter. A Chebyshev type I design allows you to control the passband. There are still no ripples in the stopband. Larger ripples enable a steeper roll-off. In this model, the peak-to-peak ripple is specified as 0.5 dB.

In the **Main** tab of **Filter Builder**, set the

**Magnitude Constraints**to`Passband ripple`

.**Passband ripple**to`0.5`

.**Design method**to`Chebyshev type I`

.

Click **Apply** and then click **View
Filter Response**.

Zooming in on the passband, you can see that the ripples are contained in the range [-0.5, 0] dB.

Similar to the Butterworth filter, you can generate a block from this design by
clicking **Generate Model** on the **Code
Generation** tab, and then clicking **Realize
model**.

A Chebyshev type II design allows you to control the stopband attenuation. There
are no ripples in the passband. A smaller stopband attenuation enables a steeper
roll-off. In this example, the stopband attenuation is `80`

dB. Set
the **Filter Builder**
**Main** tab as shown, and click
**Apply**.

Click **View Filter Response**.

To generate a block from this design, on the **Code Generation**
tab, click **Generate Model**, and then click **Realize
model**.

An elliptic filter can provide steeper roll-off compared to previous designs by
allowing ripples in both the stopband and passband. To illustrate this behavior, use
the same passband and stopband characteristics specified in the Chebyshev designs.
Set the **Filter Builder**
**Main** tab as shown, and click
**Apply**.

To generate a block from this design, on the **Code Generation**
tab, click **Generate Model**, and then click **Realize
model**.

To specify the passband and stopband in terms of frequencies and the amount of
tolerable ripple, use a minimum-order design. As an example, verify that the
**Order mode** of the Butterworth filter is set to
`Minimum`

, and set **Design method**
to `Butterworth`

. Set the passband and stopband frequencies
to `0.1*22050`

Hz and `0.3*22050`

Hz, and the
passband ripple and the stopband attenuation to `1`

dB and
`60`

dB, respectively. A seventh-order filter is necessary to
meet the specifications with a Butterworth design. By following the same approach
for other design methods, you can verify that a fifth-order filter is required for
Chebyshev type I and type II designs. A fourth-order filter is sufficient for the
elliptic design.

This figure shows the magnitude response for the seventh-order Butterworth design.

The pole-zero plot for the seventh-order Butterworth design shows the expected clustering of 7 poles around an angle of zero radians on the unit circle and the corresponding 7 zeros at an angle of π radians.

As an alternative to **Filter Builder**, you can use the Lowpass Filter block in your Simulink model. The Lowpass Filter block combines the design and
implementation stages into one step. The filter designs its coefficients using the
elliptical method, and allows minimum order and custom order designs.

The Lowpass Filter block is used in the model
`ex_lowpass`

to filter a noisy sine wave signal sampled at
`44.1`

kHz. The original and filtered signals are displayed in
a spectrum analyzer.

model = 'ex_lowpass'; open_system(model); set_param(model,'StopTime','1024/44100 * 1000') sim(model);

The Lowpass Filter block allows you to design filters that
approximate arbitrarily close to Butterworth and Chebyshev filters. To approximate a
Chebyshev Type I filter, make the stopband attenuation arbitrarily large, for
example, `180`

dB. To approximate a Chebyshev Type II filter, make
the passband ripple arbitrarily small, for example, `1e-4`

. To
approximate a Butterworth filter, make the stopband attenuation arbitrarily large
and the passband ripple arbitrarily small.

You can also design filters that allow you to change the cutoff frequency at run time. The Variable Bandwidth IIR Filter block can be used for such cases. Refer to the Tunable Lowpass Filtering of Noisy Input in Simulink example for a model that uses this block.