Main Content

Filter Design Gallery

This example shows how to design a variety of FIR and IIR digital filters with the designfilt function in the Signal Processing Toolbox® product.

The gallery is designed for you to identify a filter response of interest, view the code, and use it in your own project. It contains examples for each of the available filter responses offered by designfilt. Note, however, that these are only a few of the possible ways in which you can design filters for each response type. For an exhaustive list of specification sets, see the Signal Processing Toolbox documentation.

Except when noted otherwise, in this example all frequency units are in hertz, and all ripple and attenuation values are in decibels.

Lowpass FIR Filters

Equiripple Design

Fpass = 100;
Fstop = 150;
Apass = 1;
Astop = 65;
Fs = 1e3;

d = designfilt('lowpassfir', ...
  'PassbandFrequency',Fpass,'StopbandFrequency',Fstop, ...
  'PassbandRipple',Apass,'StopbandAttenuation',Astop, ...
  'DesignMethod','equiripple','SampleRate',Fs);

fvtool(d)

{"String":"Figure Figure 1: Magnitude Response (dB) contains an axes object. The axes object with title Magnitude Response (dB) contains 2 objects of type line.","Tex":"Magnitude Response (dB)","LaTex":[]}

Lowpass IIR Filters

Maximally Flat Design

Fpass = 100;
Fstop = 150;
Apass = 0.5;
Astop = 65;
Fs = 1e3;

d = designfilt('lowpassiir', ...
  'PassbandFrequency',Fpass,'StopbandFrequency',Fstop, ...
  'PassbandRipple',Apass,'StopbandAttenuation',Astop, ...
  'DesignMethod','butter','SampleRate',Fs);

fvtool(d)

{"String":"Figure Figure 2: Magnitude Response (dB) contains an axes object. The axes object with title Magnitude Response (dB) contains 2 objects of type line.","Tex":"Magnitude Response (dB)","LaTex":[]}

Ripple in Passband and Stopband

N = 8;
Fpass = 100;
Apass = 0.5;
Astop = 65;
Fs = 1e3;

d = designfilt('lowpassiir', ...
  'FilterOrder',N, ...  
  'PassbandFrequency',Fpass, ...
  'PassbandRipple',Apass,'StopbandAttenuation',Astop, ...
  'SampleRate',Fs);

fvtool(d)

{"String":"Figure Figure 3: Magnitude Response (dB) contains an axes object. The axes object with title Magnitude Response (dB) contains 2 objects of type line.","Tex":"Magnitude Response (dB)","LaTex":[]}

Highpass FIR Filters

Equiripple Design

Fstop = 350;
Fpass = 400;
Astop = 65;
Apass = 0.5;
Fs = 1e3;

d = designfilt('highpassfir','StopbandFrequency',Fstop, ...
  'PassbandFrequency',Fpass,'StopbandAttenuation',Astop, ...
  'PassbandRipple',Apass,'SampleRate',Fs,'DesignMethod','equiripple');

fvtool(d)

{"String":"Figure Figure 4: Magnitude Response (dB) contains an axes object. The axes object with title Magnitude Response (dB) contains 2 objects of type line.","Tex":"Magnitude Response (dB)","LaTex":[]}

Highpass IIR Filters

Maximally Flat Design

Fstop = 350;
Fpass = 400;
Astop = 65;
Apass = 0.5;
Fs = 1e3;

d = designfilt('highpassiir','StopbandFrequency',Fstop ,...
  'PassbandFrequency',Fpass,'StopbandAttenuation',Astop, ...
  'PassbandRipple',Apass,'SampleRate',Fs,'DesignMethod','butter');

fvtool(d)

{"String":"Figure Figure 5: Magnitude Response (dB) contains an axes object. The axes object with title Magnitude Response (dB) contains 2 objects of type line.","Tex":"Magnitude Response (dB)","LaTex":[]}

Ripple in Passband and Stopband

N = 8;
Fpass = 400;
Astop = 65;
Apass = 0.5;
Fs = 1e3;

d = designfilt('highpassiir', ...
  'FilterOrder',N, ...  
  'PassbandFrequency',Fpass, ...
  'StopbandAttenuation',Astop,'PassbandRipple',Apass, ...
  'SampleRate',Fs);

fvtool(d)

{"String":"Figure Figure 6: Magnitude Response (dB) contains an axes object. The axes object with title Magnitude Response (dB) contains 2 objects of type line.","Tex":"Magnitude Response (dB)","LaTex":[]}

Bandpass FIR Filters

Equiripple Design

Fstop1 = 150;
Fpass1 = 200;
Fpass2 = 300;
Fstop2 = 350;
Astop1 = 65;
Apass  = 0.5;
Astop2 = 65;
Fs = 1e3;

d = designfilt('bandpassfir', ...
  'StopbandFrequency1',Fstop1,'PassbandFrequency1', Fpass1, ...
  'PassbandFrequency2',Fpass2,'StopbandFrequency2', Fstop2, ...
  'StopbandAttenuation1',Astop1,'PassbandRipple', Apass, ...
  'StopbandAttenuation2',Astop2, ...
  'DesignMethod','equiripple','SampleRate',Fs);

fvtool(d)

{"String":"Figure Figure 7: Magnitude Response (dB) contains an axes object. The axes object with title Magnitude Response (dB) contains 2 objects of type line.","Tex":"Magnitude Response (dB)","LaTex":[]}

Asymmetric Band Attenuations

N = 50;
Fstop1 = 150;
Fpass1 = 200;
Fpass2 = 300;
Fstop2 = 350;
Wstop1 = 3;
Wstop2 = 100;
Fs = 1e3;

d = designfilt('bandpassfir', ...
  'FilterOrder',N, ...
  'StopbandFrequency1',Fstop1,'PassbandFrequency1', Fpass1, ...
  'PassbandFrequency2',Fpass2,'StopbandFrequency2', Fstop2, ...
  'StopbandWeight1',Wstop1,'StopbandWeight2',Wstop2, ...
   'DesignMethod','equiripple','SampleRate',Fs);
  
fvtool(d)

{"String":"Figure Figure 8: Magnitude Response (dB) contains an axes object. The axes object with title Magnitude Response (dB) contains 2 objects of type line.","Tex":"Magnitude Response (dB)","LaTex":[]}

Bandpass IIR Filters

Maximally Flat Design

Fstop1 = 150;
Fpass1 = 200;
Fpass2 = 300;
Fstop2 = 350;
Astop1 = 65;
Apass  = 0.5;
Astop2 = 65;
Fs = 1e3;

d = designfilt('bandpassiir', ...
  'StopbandFrequency1',Fstop1,'PassbandFrequency1', Fpass1, ...
  'PassbandFrequency2',Fpass2,'StopbandFrequency2', Fstop2, ...
  'StopbandAttenuation1',Astop1,'PassbandRipple', Apass, ...
  'StopbandAttenuation2',Astop2, ...
  'DesignMethod','butter','SampleRate', Fs);

fvtool(d)

{"String":"Figure Figure 9: Magnitude Response (dB) contains an axes object. The axes object with title Magnitude Response (dB) contains 2 objects of type line.","Tex":"Magnitude Response (dB)","LaTex":[]}

Ripple in Passband and Stopband

N = 8;
Fpass1 = 200;
Fpass2 = 300;
Astop1 = 65;
Apass  = 0.5;
Astop2 = 65;
Fs = 1e3;

d = designfilt('bandpassiir', ...
  'FilterOrder',N, ...
  'PassbandFrequency1', Fpass1,'PassbandFrequency2', Fpass2, ...
  'StopbandAttenuation1', Astop1, 'PassbandRipple', Apass, ...
  'StopbandAttenuation2', Astop2, ...
  'SampleRate', Fs);

fvtool(d)

{"String":"Figure Figure 10: Magnitude Response (dB) contains an axes object. The axes object with title Magnitude Response (dB) contains 2 objects of type line.","Tex":"Magnitude Response (dB)","LaTex":[]}

Bandstop FIR Filters

Equiripple Design

Fpass1 = 100;
Fstop1 = 150;
Fstop2 = 350;
Fpass2 = 400;
Apass1 = 0.5;
Astop  = 65;
Apass2 = 0.5;
Fs = 1e3;

d = designfilt('bandstopfir', ...
  'PassbandFrequency1',Fpass1,'StopbandFrequency1',Fstop1, ...
  'StopbandFrequency2',Fstop2,'PassbandFrequency2',Fpass2, ...
  'PassbandRipple1',Apass1,'StopbandAttenuation',Astop, ...
  'PassbandRipple2', Apass2, ...
  'DesignMethod','equiripple','SampleRate', Fs);

fvtool(d)

{"String":"Figure Figure 11: Magnitude Response (dB) contains an axes object. The axes object with title Magnitude Response (dB) contains 2 objects of type line.","Tex":"Magnitude Response (dB)","LaTex":[]}

Asymmetric Passband Ripples

N = 30;
Fpass1 = 100;
Fstop1 = 150;
Fstop2 = 350;
Fpass2 = 400;
Wpass1 = 1;
Wpass2  = 10;
Fs = 1e3;

d = designfilt('bandstopfir', ...
  'FilterOrder',N, ...
  'PassbandFrequency1',Fpass1,'StopbandFrequency1',Fstop1, ...
  'StopbandFrequency2',Fstop2,'PassbandFrequency2',Fpass2, ...
  'PassbandWeight1',Wpass1,'PassbandWeight2',Wpass2, ...
  'DesignMethod','equiripple','SampleRate', Fs);

fvtool(d)

{"String":"Figure Figure 12: Magnitude Response (dB) contains an axes object. The axes object with title Magnitude Response (dB) contains 2 objects of type line.","Tex":"Magnitude Response (dB)","LaTex":[]}

Bandstop IIR Filters

Maximally Flat Design

Fpass1 = 100;
Fstop1 = 150;
Fstop2 = 350;
Fpass2 = 400;
Apass1 = 0.5;
Astop  = 65;
Apass2 = 0.5;
Fs = 1e3;

d = designfilt('bandstopiir', ...
  'PassbandFrequency1',Fpass1,'StopbandFrequency1',Fstop1, ...
  'StopbandFrequency2',Fstop2,'PassbandFrequency2',Fpass2, ...
  'PassbandRipple1',Apass1,'StopbandAttenuation',Astop, ...
  'PassbandRipple2', Apass2, ...
  'DesignMethod','butter','SampleRate', Fs);

fvtool(d)

{"String":"Figure Figure 13: Magnitude Response (dB) contains an axes object. The axes object with title Magnitude Response (dB) contains 2 objects of type line.","Tex":"Magnitude Response (dB)","LaTex":[]}

Ripple in Passband and Stopband

N = 8;
Fpass1 = 125;
Fpass2 = 375;
Apass = 0.5;
Astop  = 65;
Fs = 1e3;

d = designfilt('bandstopiir', ...
  'FilterOrder',N, ...
  'PassbandFrequency1',Fpass1,'PassbandFrequency2',Fpass2, ...
  'PassbandRipple',Apass,'StopbandAttenuation', Astop, ...
  'SampleRate',Fs);

fvtool(d)

{"String":"Figure Figure 14: Magnitude Response (dB) contains an axes object. The axes object with title Magnitude Response (dB) contains 2 objects of type line.","Tex":"Magnitude Response (dB)","LaTex":[]}

Arbitrary Magnitude FIR Filters

Single-Band Arbitrary Magnitude Design

N = 300;

% Frequencies are in normalized units
F1 = 0:0.01:0.18;
F2 = [.2 .38 .4 .55 .562 .585 .6 .78];
F3 = 0.79:0.01:1;
FreqVect = [F1 F2 F3]; % vector of frequencies

% Define desired response using linear units
A1 = .5+sin(2*pi*7.5*F1)/4;    % Sinusoidal section
A2 = [.5 2.3 1 1 -.2 -.2 1 1]; % Piecewise linear section
A3 = .2+18*(1-F3).^2;          % Quadratic section

AmpVect = [A1 A2 A3];

d = designfilt('arbmagfir',...
  'FilterOrder',N,'Amplitudes',AmpVect,'Frequencies',FreqVect,...
  'DesignMethod','freqsamp');

fvtool(d,'MagnitudeDisplay','Zero-phase')

{"String":"Figure Figure 15: Zero-phase Response contains an axes object. The axes object with title Zero-phase Response contains 2 objects of type line.","Tex":"Zero-phase Response","LaTex":[]}

Multiband Lowpass Design with Stepped Attenuation Levels on Stopband

N = 150;
B = 2; % Number of bands
% Frequencies are in normalized units
F1 = [0 .25]; % Passband
F2 = [.3 .4 .401 .5 .501 .6 .601 .7 .701 .8 .801 .9 .901 1]; % Stopband
A1 = ones(size(F1));  % Desired amplitudes for band 1 in linear units
A2 = zeros(size(F2)); % Desired amplitudes for band 2 in linear units
% Vector of weights
W = 10.^([0 0 5 5 10 10 15 15 20 20 25 25 30 30 35 35]/20);
W1 = W(1:2);   % Weights for band 1
W2 = W(3:end); % Weights for band 2

d = designfilt('arbmagfir', ...
  'FilterOrder',N,'NumBands',B, ...
  'BandFrequencies1',F1,'BandAmplitudes1',A1, ...
  'BandFrequencies2',F2,'BandAmplitudes2',A2, ...
  'BandWeights1',W1,'BandWeights2', W2);

fvtool(d)

{"String":"Figure Figure 16: Magnitude Response (dB) contains an axes object. The axes object with title Magnitude Response (dB) contains 2 objects of type line.","Tex":"Magnitude Response (dB)","LaTex":[]}

Differentiator FIR Filters

Full Band Design

N = 41;
Fs = 1e3;

d = designfilt('differentiatorfir', ...
'FilterOrder',N, 'DesignMethod','equiripple','SampleRate',Fs);

fvtool(d,'MagnitudeDisplay','zero-phase','OverlayedAnalysis','phase')

{"String":"Figure Figure 17: Zero-phase Response and Phase Response contains an axes object. The axes object with title Zero-phase Response and Phase Response contains an object of type line.","Tex":"Zero-phase Response and Phase Response","LaTex":[]}

Partial Band Design

N = 40;
Fpass = 100;
Fstop = 150;
Fs = 1e3;

d = designfilt('differentiatorfir', ...
'FilterOrder',N, ...
'PassbandFrequency',Fpass,'StopbandFrequency',Fstop, ...
'DesignMethod','equiripple','SampleRate',Fs);

fvtool(d,'MagnitudeDisplay','zero-phase','OverlayedAnalysis','phase')

{"String":"Figure Figure 18: Zero-phase Response and Phase Response contains an axes object. The axes object with title Zero-phase Response and Phase Response contains an object of type line.","Tex":"Zero-phase Response and Phase Response","LaTex":[]}

Hilbert FIR Filters

Equiripple Design

N = 40;
Tw = 50;
Fs = 1e3;

d = designfilt('hilbertfir', ...
'FilterOrder',N,'TransitionWidth',Tw, ...
'DesignMethod','equiripple','SampleRate',Fs);

fvtool(d,'MagnitudeDisplay','Zero-phase','OverlayedAnalysis','phase')

{"String":"Figure Figure 19: Zero-phase Response and Phase Response contains an axes object. The axes object with title Zero-phase Response and Phase Response contains an object of type line.","Tex":"Zero-phase Response and Phase Response","LaTex":[]}

See Also

|