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;
d1 = designfilt("lowpassfir", ...
    PassbandFrequency=Fpass, ...
    StopbandFrequency=Fstop, ...
    PassbandRipple=Apass, ...
    StopbandAttenuation=Astop, ...
    DesignMethod="equiripple", ...
    SampleRate=Fs);
filterAnalyzer(d1)

Lowpass IIR Filters

Maximally Flat Design

Fpass = 100;
Fstop = 150;
Apass = 0.5;
Astop = 65;
Fs = 1e3;
d2 = designfilt("lowpassiir", ...
    PassbandFrequency=Fpass, ...
    StopbandFrequency=Fstop, ...
    PassbandRipple=Apass, ...
    StopbandAttenuation=Astop, ...
    DesignMethod="butter", ...
    SampleRate=Fs);
filterAnalyzer(d2)

Ripple in Passband and Stopband

N = 8;
Fpass = 100;
Apass = 0.5;
Astop = 65;
Fs = 1e3;
d3 = designfilt("lowpassiir", ...
    FilterOrder=N, ...
    PassbandFrequency=Fpass, ...
    PassbandRipple=Apass, ...
    StopbandAttenuation=Astop, ...
    SampleRate=Fs);
filterAnalyzer(d3)

Highpass FIR Filters

Equiripple Design

Fstop = 350;
Fpass = 400;
Astop = 65;
Apass = 0.5;
Fs = 1e3;
d4 = designfilt("highpassfir", ...
    StopbandFrequency=Fstop, ...
    PassbandFrequency=Fpass, ...
    StopbandAttenuation=Astop, ...
    PassbandRipple=Apass, ...
    DesignMethod="equiripple", ...
    SampleRate=Fs);
filterAnalyzer(d4)

Highpass IIR Filters

Maximally Flat Design

Fstop = 350;
Fpass = 400;
Astop = 65;
Apass = 0.5;
Fs = 1e3;
d5 = designfilt("highpassiir", ...
    StopbandFrequency=Fstop ,...
    PassbandFrequency=Fpass, ...
    StopbandAttenuation=Astop, ...
    PassbandRipple=Apass, ...
    DesignMethod="butter", ...
    SampleRate=Fs);
filterAnalyzer(d5)

Ripple in Passband and Stopband

N = 8;
Fpass = 400;
Astop = 65;
Apass = 0.5;
Fs = 1e3;
d6 = designfilt("highpassiir", ...
    FilterOrder=N, ...
    PassbandFrequency=Fpass, ...
    StopbandAttenuation=Astop, ...
    PassbandRipple=Apass, ...
    SampleRate=Fs);
filterAnalyzer(d6)

Bandpass FIR Filters

Equiripple Design

Fstop1 = 150;
Fpass1 = 200;
Fpass2 = 300;
Fstop2 = 350;
Astop1 = 65;
Apass  = 0.5;
Astop2 = 65;
Fs = 1e3;
d7 = designfilt("bandpassfir", ...
    StopbandFrequency1=Fstop1, ...
    PassbandFrequency1=Fpass1, ...
    PassbandFrequency2=Fpass2, ...
    StopbandFrequency2=Fstop2, ...
    StopbandAttenuation1=Astop1, ...
    PassbandRipple=Apass, ...
    StopbandAttenuation2=Astop2, ...
    DesignMethod="equiripple", ...
    SampleRate=Fs);
filterAnalyzer(d7)

Asymmetric Band Attenuations

N = 50;
Fstop1 = 150;
Fpass1 = 200;
Fpass2 = 300;
Fstop2 = 350;
Wstop1 = 3;
Wstop2 = 100;
Fs = 1e3;
d8 = designfilt("bandpassfir", ...
    FilterOrder=N, ...
    StopbandFrequency1=Fstop1, ...
    PassbandFrequency1=Fpass1, ...
    PassbandFrequency2=Fpass2, ...
    StopbandFrequency2=Fstop2, ...
    StopbandWeight1=Wstop1,StopbandWeight2=Wstop2, ...
    DesignMethod="equiripple",SampleRate=Fs);
filterAnalyzer(d8)

Bandpass IIR Filters

Maximally Flat Design

Fstop1 = 150;
Fpass1 = 200;
Fpass2 = 300;
Fstop2 = 350;
Astop1 = 65;
Apass  = 0.5;
Astop2 = 65;
Fs = 1e3;
d9 = designfilt("bandpassiir", ...
    StopbandFrequency1=Fstop1, ...
    PassbandFrequency1=Fpass1, ...
    PassbandFrequency2=Fpass2, ...
    StopbandFrequency2=Fstop2, ...
    StopbandAttenuation1=Astop1, ...
    PassbandRipple=Apass, ...
    StopbandAttenuation2=Astop2, ...
    DesignMethod="butter", ...
    SampleRate=Fs);
filterAnalyzer(d9)

Ripple in Passband and Stopband

N = 8;
Fpass1 = 200;
Fpass2 = 300;
Astop1 = 65;
Apass  = 0.5;
Astop2 = 65;
Fs = 1e3;
d10 = designfilt("bandpassiir", ...
    FilterOrder=N, ...
    PassbandFrequency1=Fpass1, ...
    PassbandFrequency2=Fpass2, ...
    StopbandAttenuation1=Astop1, ...
    PassbandRipple=Apass, ...
    StopbandAttenuation2=Astop2, ...
    SampleRate=Fs);
filterAnalyzer(d10)

Bandstop FIR Filters

Equiripple Design

Fpass1 = 100;
Fstop1 = 150;
Fstop2 = 350;
Fpass2 = 400;
Apass1 = 0.5;
Astop  = 65;
Apass2 = 0.5;
Fs = 1e3;
d11 = designfilt("bandstopfir", ...
    PassbandFrequency1=Fpass1, ...
    StopbandFrequency1=Fstop1, ...
    StopbandFrequency2=Fstop2, ...
    PassbandFrequency2=Fpass2, ...
    PassbandRipple1=Apass1, ...
    StopbandAttenuation=Astop, ...
    PassbandRipple2=Apass2, ...
    DesignMethod="equiripple", ...
    SampleRate=Fs);
filterAnalyzer(d11)

Asymmetric Passband Ripples

N = 30;
Fpass1 = 100;
Fstop1 = 150;
Fstop2 = 350;
Fpass2 = 400;
Wpass1 = 1;
Wpass2  = 10;
Fs = 1e3;
d12 = designfilt("bandstopfir", ...
    FilterOrder=N, ...
    PassbandFrequency1=Fpass1, ...
    StopbandFrequency1=Fstop1, ...
    StopbandFrequency2=Fstop2, ...
    PassbandFrequency2=Fpass2, ...
    PassbandWeight1=Wpass1, ...
    PassbandWeight2=Wpass2, ...
    DesignMethod="equiripple", ...
    SampleRate=Fs);
filterAnalyzer(d12)

Bandstop IIR Filters

Maximally Flat Design

Fpass1 = 100;
Fstop1 = 150;
Fstop2 = 350;
Fpass2 = 400;
Apass1 = 0.5;
Astop  = 65;
Apass2 = 0.5;
Fs = 1e3;
d13 = designfilt("bandstopiir", ...
    PassbandFrequency1=Fpass1, ...
    StopbandFrequency1=Fstop1, ...
    StopbandFrequency2=Fstop2, ...
    PassbandFrequency2=Fpass2, ...
    PassbandRipple1=Apass1, ...
    StopbandAttenuation=Astop, ...
    PassbandRipple2=Apass2, ...
    DesignMethod="butter", ...
    SampleRate=Fs);
filterAnalyzer(d13)

Ripple in Passband and Stopband

N = 8;
Fpass1 = 125;
Fpass2 = 375;
Apass = 0.5;
Astop  = 65;
Fs = 1e3;
d14 = designfilt("bandstopiir", ...
    FilterOrder=N, ...
    PassbandFrequency1=Fpass1, ...
    PassbandFrequency2=Fpass2, ...
    PassbandRipple=Apass, ...
    StopbandAttenuation=Astop, ...
    SampleRate=Fs);
filterAnalyzer(d14)

Arbitrary Magnitude FIR Filters

Single-Band Arbitrary Magnitude Design

N = 300;
% Frequencies are in normalized units
F1 = 0:0.01:0.18;
F2 = [0.2 0.38 0.4 0.55 0.562 0.585 0.6 0.78];
F3 = 0.79:0.01:1;
FreqVect = [F1 F2 F3]; % vector of frequencies
% Define desired response using linear units
A1 = 0.5+sin(2*pi*7.5*F1)/4;    % Sinusoidal section
A2 = [0.5 2.3 1 1 -0.2 -0.2 1 1]; % Piece-wise linear section
A3 = 0.2+18*(1-F3).^2;          % Quadratic section
AmpVect = [A1 A2 A3];
d15 = designfilt("arbmagfir",...
    FilterOrder=N, ...
    Amplitudes=AmpVect, ...
    Frequencies=FreqVect,...
    DesignMethod="freqsamp");
filterAnalyzer(d15,MagnitudeMode="zerophase")

Multiband Lowpass Design with Stepped Attenuation Levels on Stopband

N = 150;
B = 2; % Number of bands
% Frequencies are in normalized units
F1 = [0 0.25]; % Passband
F2 = [0.3 0.4 0.401 0.5 0.501 0.6 0.601 0.7 0.701 0.8 0.801 0.9 0.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
d16 = designfilt("arbmagfir", ...
    FilterOrder=N, ...
    NumBands=B, ...
    BandFrequencies1=F1, ...
    BandAmplitudes1=A1, ...
    BandFrequencies2=F2, ...
    BandAmplitudes2=A2, ...
    BandWeights1=W1, ...
    BandWeights2=W2);
filterAnalyzer(d16)

Differentiator FIR Filters

Full Band Design

N = 41;
Fs = 1e3;
d17 = designfilt("differentiatorfir", ...
    FilterOrder=N, ...
    DesignMethod="equiripple", ...
    SampleRate=Fs);
filterAnalyzer(d17,MagnitudeMode="zerophase",OverlayAnalysis="phase")

Partial Band Design

N = 40;
Fpass = 100;
Fstop = 150;
Fs = 1e3;
d18 = designfilt("differentiatorfir", ...
    FilterOrder=N, ...
    PassbandFrequency=Fpass, ...
    StopbandFrequency=Fstop, ...
    DesignMethod="equiripple", ...
    SampleRate=Fs);
filterAnalyzer(d18,MagnitudeMode="zerophase",OverlayAnalysis="phase")

Hilbert FIR Filters

Equiripple Design

N = 40;
Tw = 50;
Fs = 1e3;
d19 = designfilt("hilbertfir", ...
    FilterOrder=N, ...
    TransitionWidth=Tw, ...
    DesignMethod="equiripple", ...
    SampleRate=Fs);
filterAnalyzer(d19,MagnitudeMode="zerophase",OverlayAnalysis="phase")

See Also

|