Products & Services Solutions Academia Support User Community Company

Learn more about Signal Processing Blockset   

Digital Filter Block

Overview of the Digital Filter Block

You can use the Digital Filter block to implement digital FIR and IIR filters in your models. Use this block if you have already performed the design and analysis and know your desired filter coefficients. You can use this block to filter single-channel and multichannel signals, and to simulate floating-point and fixed-point filters. Then, you can use Real-Time Workshop to generate highly optimized C code from your filter block.

To implement a filter with the Digital Filter block, you must provide the following basic information about the filter:

Implementing a Lowpass Filter

You can use the Digital Filter block to implement a digital FIR or IIR filter. In this topic, you use it to implement an FIR lowpass filter:

  1. Define the lowpass filter coefficients in the MATLAB workspace by typing

    lopassNum = [-0.0021 -0.0108 -0.0274 -0.0409 -0.0266 0.0374 0.1435 0.2465 0.2896 0.2465 0.1435 0.0374 -0.0266 -0.0409 -0.0274 -0.0108 -0.0021];

  2. Open Simulink and create a new model file.

  3. From the Signal Processing Blockset Filtering library, and then from the Filter Designs library, click-and-drag a Digital Filter block into your model.

  4. Double-click the Digital Filter block. Set the block parameters as follows, and then click OK:

    • Transfer function type = FIR (all zeros)

    • Filter structure = Direct form transposed

    • Coefficient source = Specify via dialog

    • Numerator coefficients = lopassNum

    • Initial conditions = 0

    Note that you can provide the filter coefficients in several ways:

    • Type in a variable name from the MATLAB workspace, such as lopassNum.

    • Type in filter design commands from Signal Processing Toolbox™ software or Filter Design Toolbox™ software, such as fir1(5, 0.2, 'low').

    • Type in a vector of the filter coefficient values.

  5. Rename your block Digital Filter - Lowpass.

The Digital Filter block in your model now represents a lowpass filter. In the next topic, Implementing a Highpass Filter, you use a Digital Filter block to implement a highpass filter. For more information about the Digital Filter block, see the Digital Filter block reference page. For more information about designing and implementing a new filter, see Digital Filter Design Block.

Implementing a Highpass Filter

In this topic, you implement an FIR highpass filter using the Digital Filter block:

  1. If the model you created in Implementing a Lowpass Filter is not open on your desktop, you can open an equivalent model by typing

      doc_probe_tut1

    at the MATLAB command prompt.

  2. Define the highpass filter coefficients in the MATLAB workspace by typing

    hipassNum = [-0.0051 0.0181 -0.0069 -0.0283 -0.0061 ...
    0.0549 0.0579 -0.0826 -0.2992 0.5946 -0.2992 -0.0826 ...
    0.0579 0.0549 -0.0061 -0.0283 -0.0069 0.0181 -0.0051];
  3. From the Signal Processing Blockset Filtering library, and then from the Filter Designs library, click-and-drag a Digital Filter block into your model.

  4. Double-click the Digital Filter block. Set the block parameters as follows, and then click OK:

    • Transfer function type = FIR (all zeros)

    • Filter structure = Direct form transposed

    • Coefficient source = Specify via dialog

    • Numerator coefficients = hipassNum

    • Initial conditions = 0

    You can provide the filter coefficients in several ways:

    • Type in a variable name from the MATLAB workspace, such as hipassNum.

    • Type in filter design commands from Signal Processing Toolbox software or Filter Design Toolbox software, such as fir1(5, 0.2, 'low').

    • Type in a vector of the filter coefficient values.

  5. Rename your block Digital Filter - Highpass.

You have now successfully implemented a highpass filter. In the next topic, Filtering High-Frequency Noise, you use these Digital Filter blocks to create a model capable of removing high frequency noise from a signal. For more information about designing and implementing a new filter, see Digital Filter Design Block.

Filtering High-Frequency Noise

In the previous topics, you used Digital Filter blocks to implement FIR lowpass and highpass filters. In this topic, you use these blocks to build a model that removes high frequency noise from a signal. In this model, you use the highpass filter, which is excited using a uniform random signal, to create high-frequency noise. After you add this noise to a sine wave, you use the lowpass filter to filter out the high-frequency noise:

  1. If the model you created in Implementing a Highpass Filter is not open on your desktop, you can open an equivalent model by typing

    doc_filter_ex2 

    at the MATLAB command prompt.

  2. If you have not already done so, define the lowpass and highpass filter coefficients in the MATLAB workspace by typing

    lopassNum = [-0.0021 -0.0108 -0.0274 -0.0409 -0.0266 ...
    0.0374 0.1435 0.2465 0.2896 0.2465 0.1435 0.0374 ...
    -0.0266 -0.0409 -0.0274 -0.0108 -0.0021];
    hipassNum = [-0.0051 0.0181 -0.0069 -0.0283 -0.0061 ...
    0.0549 0.0579 -0.0826 -0.2992 0.5946 -0.2992 -0.0826 ...
    0.0579 0.0549 -0.0061 -0.0283 -0.0069 0.0181 -0.0051];
  3. Click-and-drag the following blocks into your model file.

    BlockLibraryQuantity

    Add

    Simulink / Math Operations library

    1

    Matrix Concatenate

    Math Functions / Matrices and Linear Algebra / Matrix Operations

    1

    Random Source

    Signal Processing Sources

    1

    Sine Wave

    Signal Processing Sources

    1

    Vector Scope

    Signal Processing Sinks

    1

  4. Set the parameters for the rest of the blocks as indicated in the following table. For any parameters not listed in the table, leave them at their default settings.

    BlockParameter Setting

    Add

    • Icon shape  = rectangular

    • List of signs = ++

    Matrix Concatenate

    • Number of inputs = 3

    • Mode = Multidimensional array

      Concatenate dimension = 2

    Random Source

    • Source type = Uniform

    • Minimum = 0

    • Maximum = 4

    • Sample mode = Discrete

    • Sample time = 1/1000

    • Samples per frame = 50

    Sine Wave

    • Frequency (Hz) = 75

    • Sample time = 1/1000

    • Samples per frame = 50

    Vector Scope

    Scope Properties:

    • Input domain = Time

    • Time display span (number of frames) = 1

  5. Connect the blocks and label your signals as shown in the following figure. You need to resize some of your blocks to accomplish this task.

  6. From the Simulation menu, select Configuration Parameters.

    The Configuration Parameters dialog box opens.

  7. In the Solver pane, set the parameters as follows, and then click OK:

    • Start time = 0

    • Stop time = 5

    • Type = Fixed-step

    • Solver = Discrete (no continuous states)

  8. In the model window, from the Simulation menu, choose Start.

    The model simulation begins and the Scope displays the three input signals.

  9. Double-click the Vector Scope block and click the Display Properties tab. Select the Channel legend check box and click OK. Next time you run the simulation, a legend appears in the Vector Scope window.

    You can also set the color, style, and marker of each channel.

  10. In the Vector Scope window, from the Channels menu, point to Ch 1 and set the Style to -, Marker to None, and Color to Black.

    Point to Ch 2 and set the Style to -, Marker to Diamond, and Color to Red.

    Point to Ch 3 and set the Style to None, Marker to *, and Color to Blue.

  11. Rerun the simulation and compare the original sine wave, noisy sine wave, and filtered noisy sine wave in the Vector Scope display.

    You can see that the lowpass filter filters out the high-frequency noise in the noisy sine wave.

You have now used Digital Filter blocks to build a model that removes high frequency noise from a signal. For more information about designing and implementing a new filter, see Digital Filter Design Block.

Specifying Static Filters

You can use the Digital Filter block to specify a static filter by setting the Coefficient source parameter to Specify via dialog. Depending on the filter structure, you need to enter your filter coefficients into one or more of the following parameters. The block disables all the irrelevant parameters. To see which of these parameters correspond to each filter structure, see Supported Filter Structures in Signal Processing Blockset Reference:

Tuning the Filter Coefficient Values During Simulation

To change the static filter coefficients during simulation, double-click the block, type in the new vector(s) of filter coefficients, and click OK. You cannot change the filter order, so you cannot change the number of elements in the vector(s) of filter coefficients.

Specifying Time-Varying Filters

Time-varying filters are filters whose coefficients change with time. You can specify a time-varying filter that changes once per frame or once per sample and you can filter multiple channels with each filter. However, you cannot apply different filters to each channel; all channels must be filtered with the same filter.

To specify a time-varying filter:

  1. Set the Coefficient source parameter to Input port(s), which enables extra block input ports for the time-varying filter coefficients.

  2. Set the Coefficient update rate parameter to One filter per frame or One filter per sample depending on how often you want to update the filter coefficients. To learn more, see Setting the Coefficient Update Rate.

  3. Provide vectors of numerator, denominator, or reflection coefficients to the block input ports for filter coefficients. The series of vectors must arrive at their ports at a specific rate, and must be of certain lengths. To learn more, see Providing Filter Coefficient Vectors at Block Input Ports.

  4. Select or clear the First denominator coefficient = 1, remove a0 term in the structure parameter depending on whether your first denominator coefficient is always 1. To learn more, see Removing the a0 Term in the Filter Structure.

Setting the Coefficient Update Rate

When the input is frame based, the block updates time-varying filters once every input frame, or once for every sample in an input frame, depending on the Coefficient update rate parameter:

The following figure shows the block filtering one channel; however, the block can filter multiple channels. Note that the block can apply a single filter to multiple channels, but cannot apply a different filter to each channel.

Providing Filter Coefficient Vectors at Block Input Ports

As illustrated in the previous figure, the filter coefficient vectors for filters that update once per frame are different from coefficient vectors for filters that update once per sample. See the following tables to meet the rate and length requirements of the filter coefficient vectors:

The output size, frame status, and dimension always match those of the input signal that is filtered, not the vector of filter coefficients.

Length Requirements for Time-Varying Filter Coefficient Vectors

Coefficient Update RateHow to Specify Filter Coefficient Vectors
(Also see the previous figure)
Length Requirements

Once per frame

Each coefficient vector corresponds to one input frame and represents one filter. Specify each vector as you would any static filter: [b0b1b2, ..., bn], [a0a1a2, ..., am], or [k1k2, ..., kn]

None

Once per sample

Each coefficient vector corresponds to one input frame. However, the vector represents multiple filters of the same length with one filter for each sample in the current frame. To create such a vector, concatenate all the filters for each sample within the input frame. For instance, the following vector specifies length-2 numerator coefficients for each sample in a three-sample frame

where  filters the first sample in the input frame,  filters the second sample, and so on.

All filters must be the same length, L.

The length of each filter coefficient vector must be L times the number of samples per frame in the input. (Each sample in the frame has one set of filter coefficients.)

The time-varying filter coefficient vectors can be sample- or frame-based row or column vectors. The vectors of filter coefficients must arrive at their input port at the same times that the frames of input data arrive at their input port, as indicated in the following table.

Rate Requirements for Time-Varying Filter Coefficient Vectors

Input SignalTime-Varying Filter Coefficient VectorsRate Requirements (Also see the previous figure)

Sample based

Sample based

Sample rates of input and filter coefficients must be equal.

Sample based

Frame based

Input sample rate must equal filter coefficient frame rate.

Frame based

Sample based

Input frame rate must equal filter coefficient sample rate.

Frame based

Frame based

Frame rates of input and filter coefficients must be equal.

Removing the a0 Term in the Filter Structure

When you know that the first denominator filter coefficient (a0) is always 1 for your time-varying filter, select the First denominator coefficient = 1, remove a0 term in the structure parameter. Selecting this parameter reduces the number of computations the block must make to produce the output (the block omits the 1 / a0 term in the filter structure, as illustrated in the following figure). The block output is invalid if you select this parameter when the first denominator filter coefficient is not always 1 for your time-varying filter. Note that the block ignores the First denominator coefficient = 1, remove a0 term in the structure parameter for fixed-point inputs, since this block does not support nonunity a0 coefficients for fixed-point inputs.

Specifying the SOS Matrix (Biquadratic Filter Coefficients)

The Digital Filter block does not support time-varying biquadratic filters. To specify a static biquadratic filter (also known as a second-order section or SOS filter) using the Digital Filter Block, you need to set the following parameters as indicated:

You can use the ss2sos and tf2sos functions from Signal Processing Toolbox software to convert a state-space or transfer function description of your filter into the second-order section description used by this block.

The block normalizes each row by a1i to ensure a value of 1 for the zero-delay denominator coefficients.

  


Related Products & Applications

Learn more about Simulink through this collection of videos, articles, technical literature and the Getting Started with Simulink Guide.

 © 1984-2009- The MathWorks, Inc.    -   Site Help   -   Patents   -   Trademarks   -   Privacy Policy   -   Preventing Piracy   -   RSS