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 필터

최대 평탄(Maximally flat) 설계

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 필터

최대 평탄(Maximally flat) 설계

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 필터

최대 평탄(Maximally flat) 설계

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 필터

최대 평탄(Maximally flat) 설계

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

참고 항목

|