DSP System Toolbox™ provides several blocks implementing digital filters, such as Discrete FIR Filter and Biquad Filter.
Use these blocks if you have already performed the design and analysis and know your desired filter coefficients. You can use these blocks to filter singlechannel and multichannel signals, and to simulate floatingpoint and fixedpoint filters. Then, you can use the Simulink^{®} Coder™ product to generate highly optimized C code from your filters.
To implement a filter, you must provide the following basic information about the filter:
The desired filter structure
The filter coefficients
Note: Use the Digital Filter Design block to design and implement a filter. Use the Discrete FIR Filter and Biquad Filter blocks to implement a predesigned filter. Both methods implement a filter in the same manner and have the same behavior during simulation and code generation. 
Use the Discrete FIR Filter block to implement a lowpass filter:
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];
Open Simulink and create a new model file.
From the DSP System Toolbox Filtering>Filter Implementations library, clickanddrag a Discrete FIR Filter block into your model.
Doubleclick the Discrete FIR Filter block. Set the block parameters as follows, and then click OK:
Coefficient source = Dialog
parameters
Filter structure = Direct
form transposed
Coefficients = lopassNum
Input processing = Columns
as channels (frame based)
Initial states = 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 DSP System Toolbox software, such as fir1(5, 0.2, 'low')
.
Type in a vector of the filter coefficient values.
Rename your block Digital Filter  Lowpass.
The Discrete FIR Filter block in your model now represents a lowpass filter. In the next topic, Implement a Highpass Filter in Simulink, you use a Discrete FIR Filter block to implement a highpass filter. For more information about the Discrete FIR Filter block, see the Discrete FIR Filter block reference page. For more information about designing and implementing a new filter, see Digital Filter Design Block.
In this topic, you implement a highpass filter using the Discrete FIR Filter block:
If the model you created in Implement a Lowpass Filter in Simulink is not open on your desktop, you can open an equivalent model by typing
ex_filter_ex1
at the MATLAB command prompt.
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];
From the DSP System Toolbox Filtering library, and then from the Filter Implementations library, clickanddrag a Discrete FIR Filter block into your model.
Doubleclick the Discrete FIR Filter block. Set the block parameters as follows, and then click OK:
Coefficient source = Dialog
parameters
Filter structure = Direct
form transposed
Coefficients = hipassNum
Input processing = Columns
as channels (frame based)
Initial states = 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 DSP System Toolbox software, such as fir1(5, 0.2, 'low')
.
Type in a vector of the filter coefficient values.
Rename your block Digital Filter  Highpass.
You have now successfully implemented a highpass filter. In the next topic, Filter HighFrequency Noise in Simulink, you use these Discrete FIR 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.
In the previous topics, you used Discrete FIR Filter blocks to implement 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 highfrequency noise. After you add this noise to a sine wave, you use the lowpass filter to filter out the highfrequency noise:
If the model you created in Implement a Highpass Filter in Simulink is not open on your desktop, you can open an equivalent model by typing
ex_filter_ex2
at the MATLAB command prompt.
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];
Clickanddrag the following blocks into your model file.
Block  Library  Quantity 

Add  Simulink / Math Operations library  1 
Random Source  Sources  1 
Sine Wave  Sources  1 
Time Scope  Sinks  1 
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.
Block  Parameter Setting 

Add 

Random Source 

Sine Wave 

Time Scope 

Connect the blocks as shown in the following figure. You may need to resize some of your blocks to accomplish this task.
From the Simulation menu, select Model Configuration Parameters.
The Configuration Parameters dialog box opens.
In the Solver pane, set the parameters as follows, and then click OK:
Start time = 0
Stop time = 5
Type = Fixedstep
Solver = discrete
(no continuous states)
In the model window, from the Simulation menu, choose Run.
The model simulation begins and the Scope displays the three input signals.
After simulation is complete, select View > Legend from the Time Scope menu. The legend appears in the Time Scope window. You can clickanddrag it anywhere on the scope display. To change the channel names, doubleclick inside the legend and replace the current numbered channel names with the following:
Add = Noisy Sine Wave
Digital Filter – Lowpass = Filtered
Noisy Sine Wave
Sine Wave = Original Sine Wave
In the next step, you will set the color, style, and marker of each channel.
In the Time Scope window, select View > Line Properties, and set the following:
Line  Style  Marker  Color 

Noisy Sine Wave    None  Black 
Filtered Noisy Sine Wave    diamond  Red 
Original Sine Wave  None  *  Blue 
The Time Scope display should now appear as follows:
You can see that the lowpass filter filters out the highfrequency noise in the noisy sine wave.
You have now used Discrete FIR 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.
You can specify a static filter using the Discrete
FIR Filter or Biquad Filter block.
To do so, set the Coefficient source parameter
to Dialog parameters
.
For the Discrete FIR Filter, set the Coefficients parameter
to a row vector of numerator coefficients. If you set Filter
structure to Lattice MA
, the Coefficients parameter
represents reflection coefficients.
For the Biquad Filter, set the SOS matrix (Mx6) to an Mby6 matrix, where M is the number of sections in the secondorder section filter. Each row of the SOS matrix contains the numerator and denominator coefficients of the corresponding section in the filter. Set Scale values to a scalar or vector of M+1 scale values used between SOS stages.
To change the static filter coefficients during simulation, doubleclick the block, type in the new filter coefficients, and click OK. You cannot change the filter order, so you cannot change the number of elements in the matrix of filter coefficients.
Timevarying filters are filters whose coefficients change with time. You can specify a timevarying filter that changes once per frame. You can filter multiple channels with each filter. However, you cannot apply different filters to each channel; all channels use the same filter.
To specify a timevarying filter using a Biquad Filter block or a Discrete FIR Filter block:
Set the Coefficient source parameter
to Input port(s)
, which enables extra block
input ports for the timevarying filter coefficients.
The Discrete FIR Filter block has a Num
port
for the numerator coefficients.
The Biquad Filter block has Num
and Den
ports
rather than a single port for the SOS matrix. Separate ports enable
you to use different fraction lengths for numerator and denominator
coefficients. The scale values port, g
, is optional.
You can disable the g
port by setting Scale
values mode to Assume all are unity and optimize
.
Provide matrices of filter coefficients to the block input ports.
For Discrete FIR Filter block, the number of filter taps, N, cannot vary over time. The input coefficients must be in a 1byN vector.
For Biquad Filter block, the number of filter sections, N,
cannot vary over time. The numerator coefficients input, Num
,
must be a 3byN matrix. The denominator input
coefficients, Den
, must be a 2byN matrix.
The scale values input, g
, must be a 1by(N+1)
vector.
Use the Biquad Filter block to specify a static biquadratic IIR filter (also known as a secondorder section or SOS filter). Set the following parameters:
Filter structure — Direct
form I
, or Direct form I transposed
,
or Direct form II
, or Direct
form II transposed
SOS matrix (Mx6) Mby6 SOS matrix
The SOS matrix is an Mby6 matrix, where M is the number of sections in the secondorder section filter. Each row of the SOS matrix contains the numerator and denominator coefficients (b_{ik} and a_{ik}) of the corresponding section in the filter.
Scale values Scalar or vector of M+1 scale values to be used between SOS stages
If you enter a scalar, the value is used as the gain value before the first section of the secondorder filter. The rest of the gain values are set to 1.
If you enter a vector of M+1 values, each value is used for 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.
You can use the ss2sos
and tf2sos
functions from Signal Processing Toolbox software
to convert a statespace or transfer function description of your
filter into the secondorder section description used by this block.
$$\left[\begin{array}{cccccc}{b}_{01}& {b}_{11}& {b}_{21}& {a}_{01}& {a}_{11}& {a}_{21}\\ {b}_{02}& {b}_{12}& {b}_{22}& {a}_{02}& {a}_{12}& {a}_{22}\\ \vdots & \vdots & \vdots & \vdots & \vdots & \vdots \\ {b}_{0M}& {b}_{1M}& {b}_{2M}& {a}_{0M}& {a}_{1M}& {a}_{2M}\end{array}\right]$$
The block normalizes each row by a_{1i} to ensure a value of 1 for the zerodelay denominator coefficients.