このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
フィルター設計ギャラリー
この例では、Signal Processing Toolbox® 製品の関数 designfilt
を使用する、さまざまな FIR および IIR デジタル フィルターの設計法を説明します。
ギャラリーは、対象となるフィルター応答を特定し、コードを表示して独自のプロジェクトで使用できるように設計されています。ここには designfilt
が提供する利用可能なフィルター応答のそれぞれについての例が含まれています。ただし、これらは、各応答タイプに対応するフィルターを設計する方法として可能なもののごく一部であることを留意してください。仕様セットを網羅したリストについては、Signal Processing Toolbox のドキュメンテーションを参照してください。
この例では、特に注意書きがなければ、周波数の単位はいずれも Hz で、すべてのリップルと減衰の値の単位はデシベルです。
ローパス 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")