Main Content

Filter Design Gallery

This example shows how to design a variety of FIR and IIR digital filters with thedesignfiltfunction 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 bydesignfilt. 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,“停止bandFrequency',Fstop,...'PassbandRipple',Apass,“停止bandAttenuation',Astop,...'DesignMethod','equiripple','SampleRate',Fs); fvtool(d)

{

Lowpass IIR Filters

Maximally Flat Design

Fpass = 100; Fstop = 150; Apass = 0.5; Astop = 65; Fs = 1e3; d = designfilt('lowpassiir',...'PassbandFrequency',Fpass,“停止bandFrequency',Fstop,...'PassbandRipple',Apass,“停止bandAttenuation',Astop,...'DesignMethod','butter','SampleRate',Fs); fvtool(d)

{

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,“停止bandAttenuation',Astop,...'SampleRate',Fs); fvtool(d)

{

Highpass FIR Filters

Equiripple Design

Fstop = 350; Fpass = 400; Astop = 65; Apass = 0.5; Fs = 1e3; d = designfilt('highpassfir',“停止bandFrequency',Fstop,...'PassbandFrequency',Fpass,“停止bandAttenuation',Astop,...'PassbandRipple',Apass,'SampleRate',Fs,'DesignMethod','equiripple'); fvtool(d)

{

Highpass IIR Filters

Maximally Flat Design

Fstop = 350; Fpass = 400; Astop = 65; Apass = 0.5; Fs = 1e3; d = designfilt('highpassiir',“停止bandFrequency',Fstop ,...'PassbandFrequency',Fpass,“停止bandAttenuation',Astop,...'PassbandRipple',Apass,'SampleRate',Fs,'DesignMethod','butter'); fvtool(d)

{

Ripple in Passband and Stopband

N = 8; Fpass = 400; Astop = 65; Apass = 0.5; Fs = 1e3; d = designfilt('highpassiir',...'FilterOrder',N,...'PassbandFrequency',Fpass,...“停止bandAttenuation',Astop,'PassbandRipple',Apass,...'SampleRate',Fs); fvtool(d)

{

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',...“停止bandFrequency1',Fstop1,“PassbandFrequency1”, Fpass1,...'PassbandFrequency2',Fpass2,“停止bandFrequency2', Fstop2,...“停止bandAttenuation1',Astop1,'PassbandRipple', Apass,...“停止bandAttenuation2',Astop2,...'DesignMethod','equiripple','SampleRate',Fs); fvtool(d)

{

Asymmetric Band Attenuations

N = 50; Fstop1 = 150; Fpass1 = 200; Fpass2 = 300; Fstop2 = 350; Wstop1 = 3; Wstop2 = 100; Fs = 1e3; d = designfilt('bandpassfir',...'FilterOrder',N,...“停止bandFrequency1',Fstop1,“PassbandFrequency1”, Fpass1,...'PassbandFrequency2',Fpass2,“停止bandFrequency2', Fstop2,...“停止bandWeight1',Wstop1,“停止bandWeight2',Wstop2,...'DesignMethod','equiripple','SampleRate',Fs); fvtool(d)

{

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',...“停止bandFrequency1',Fstop1,“PassbandFrequency1”, Fpass1,...'PassbandFrequency2',Fpass2,“停止bandFrequency2', Fstop2,...“停止bandAttenuation1',Astop1,'PassbandRipple', Apass,...“停止bandAttenuation2',Astop2,...'DesignMethod','butter','SampleRate'Fs);fvtool (d)

{

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,...“停止bandAttenuation1', Astop1,'PassbandRipple', Apass,...“停止bandAttenuation2', Astop2,...'SampleRate'Fs);fvtool (d)

{

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,“停止bandFrequency1',Fstop1,...“停止bandFrequency2',Fstop2,'PassbandFrequency2',Fpass2,...'PassbandRipple1',Apass1,“停止bandAttenuation',Astop,...'PassbandRipple2', Apass2,...'DesignMethod','equiripple','SampleRate'Fs);fvtool (d)

{

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,“停止bandFrequency1',Fstop1,...“停止bandFrequency2',Fstop2,'PassbandFrequency2',Fpass2,...'PassbandWeight1',Wpass1,“PassbandWeight2”,Wpass2,...'DesignMethod','equiripple','SampleRate'Fs);fvtool (d)

{

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,“停止bandFrequency1',Fstop1,...“停止bandFrequency2',Fstop2,'PassbandFrequency2',Fpass2,...'PassbandRipple1',Apass1,“停止bandAttenuation',Astop,...'PassbandRipple2', Apass2,...'DesignMethod','butter','SampleRate'Fs);fvtool (d)

{

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,“停止bandAttenuation', Astop,...'SampleRate',Fs); fvtool(d)

{

Arbitrary Magnitude FIR Filters

Single-Band Arbitrary Magnitude Design

N = 300;% Frequencies are in normalized unitsF1 = 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 unitsA1 = .5+sin(2*pi*7.5*F1)/4;% Sinusoidal sectionA2 = [.5 2.3 1 1 -.2 -.2 1 1];% Piecewise linear sectionA3 = .2+18*(1-F3).^2;% Quadratic sectionAmpVect = [A1 A2 A3]; d = designfilt('arbmagfir',...'FilterOrder',N,'Amplitudes'AmpVect,'Frequencies',FreqVect,...'DesignMethod','freqsamp'); fvtool(d,'MagnitudeDisplay','Zero-phase')

{

Multiband Lowpass Design with Stepped Attenuation Levels on Stopband

N = 150; B = 2;% Number of bands% Frequencies are in normalized unitsF1 = [0 .25];% PassbandF2 = [.3 .4 .401 .5 .501 .6 .601 .7 .701 .8 .801 .9 .901 1];% StopbandA1 = ones(size(F1));% Desired amplitudes for band 1 in linear unitsA2 = zeros(size(F2));% Desired amplitudes for band 2 in linear units% Vector of weightsW = 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 1W2 = W(3:end);% Weights for band 2d = designfilt('arbmagfir',...'FilterOrder',N,'NumBands',B,...'BandFrequencies1',F1,'BandAmplitudes1',A1,...'BandFrequencies2',F2,'BandAmplitudes2',A2,...'BandWeights1',W1,'BandWeights2', W2); fvtool(d)

{

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')

{

Partial Band Design

N = 40; Fpass = 100; Fstop = 150; Fs = 1e3; d = designfilt('differentiatorfir',...'FilterOrder',N,...'PassbandFrequency',Fpass,“停止bandFrequency',Fstop,...'DesignMethod','equiripple','SampleRate',Fs); fvtool(d,'MagnitudeDisplay','zero-phase',“OverlayedAnalysis','phase')

{

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')

{

See Also

|