Main Content

滤波器设计库

此示例说明如何使用 Signal Processing Toolbox® 产品中的 designfilt 函数设计各种 FIR 和 IIR 数字滤波器。

该库旨在帮助您识别感兴趣的滤波器响应,查看代码,并在您自己的工程中使用它。它包含 designfilt 提供的每个可用滤波器响应的示例。但请注意,这些只是为每种响应类型设计滤波器的几种可能方式。有关设定集的详尽列表,请参阅 Signal Processing Toolbox 文档。

除非另有说明,否则在此示例中,所有频率均以赫兹为单位,所有波纹和衰减值均以分贝为单位。

低通 FIR 滤波器

等波纹设计

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)

低通 IIR 滤波器

最平坦设计

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)

通带和阻带中的波纹

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)

高通 FIR 滤波器

等波纹设计

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)

高通 IIR 滤波器

最平坦设计

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)

通带和阻带中的波纹

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)

带通 FIR 滤波器

等波纹设计

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)

不对称频带衰减

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)

带通 IIR 滤波器

最平坦设计

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)

通带和阻带中的波纹

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)

带阻 FIR 滤波器

等波纹设计

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)

不对称通带波纹

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)

带阻 IIR 滤波器

最平坦设计

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)

通带和阻带中的波纹

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)

任意幅值 FIR 滤波器

单频带任意幅值设计

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

多频带低通设计,阻带具有阶梯式衰减电平

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)

FIR 微分滤波器

全频带设计

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

部分频带设计

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

希尔伯特 FIR 滤波器

等波纹设计

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

另请参阅

|