ドキュメンテーション センター

  • 評価版
  • 製品アップデート

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

標準的 IIR フィルター設計

この例では、標準的 IIR フィルターの設計法を示します。最初に、重要な設計パラメーターがカットオフ周波数である状況を考えます。フィルターのパワーは、カットオフ周波数においてノミナル通過帯域値の半分 (-3 dB) に減衰します。

この例では、バタワース設計を同じ次数のチェビシェフまたは楕円フィルターに簡単に置き換えて、フィルターの通過帯域や阻止帯域内のいくつかのリップルを代償に急峻なロールオフを得ることができることを示します。その後、最小次数設計についても検討します。

ローパス フィルター

0.4pi の正規化されたカットオフ周波数の 8 次フィルターを設計します。最初に、可能な限り平坦なバタワース フィルターを設計します (通過帯域や阻止帯域にリップルはありません)。

N = 8; F3dB = .4;
d = fdesign.lowpass('N,F3dB',N,F3dB);
Hbutter = design(d,'butter','SystemObject',true);

チェビシェフ タイプ I 設計では、通過帯域のリップルを制御できます。阻止帯域にはリップルはありません。リップルを大きくすると、急峻なロールオフが得られます。0.5dB のピーク ツー ピーク リップルを指定します。

Ap = .5;
setspecs(d,'N,F3dB,Ap',N,F3dB,Ap);
Hcheby1 = design(d,'cheby1','SystemObject',true);
hfvt = fvtool(Hbutter,Hcheby1,'Color','white');
axis([0 .44 -5 .1])
legend(hfvt,'Butterworth','Chebyshev Type I');

チェビシェフ タイプ II 設計では、阻止帯域の減衰を制御できます。通過帯域にはリップルはありません。阻止帯域の減衰を小さくすると、急峻なロールオフが得られます。この例では、80 dB の阻止帯域の減衰を指定します。

Ast = 80;
setspecs(d,'N,F3dB,Ast',N,F3dB,Ast);
Hcheby2 = design(d,'cheby2','SystemObject',true);
hfvt = fvtool(Hbutter,Hcheby2,'Color','white');
axis([0 1 -90 2])
legend(hfvt,'Butterworth','Chebyshev Type II');

最後に、楕円フィルターは、阻止帯域と通過帯域の両方でリップルを使用できるので、前の設計と比較して急峻なロールオフを提供できます。このことを示すために、上記と同じ通過帯域と阻止帯域の特性を再使用します。

setspecs(d,'N,F3dB,Ap,Ast',N,F3dB,Ap,Ast);
Hellip = design(d,'ellip','SystemObject',true);
hfvt = fvtool(Hbutter,Hcheby1,Hcheby2,Hellip,'Color','white');
axis([0 1 -90 2])
legend(hfvt, ...
    'Butterworth','Chebyshev Type I','Chebyshev Type II','Elliptic');

通過帯域をズームすると、すべてのフィルターに同じ -3dB 周波数点があること、およびバタワースおよびチェビシェフ タイプ II 設計が完全に平坦な通過帯域があることがわかります。

axis([0 .44 -5 .1])

位相の考慮事項

位相が問題の場合、バタワースおよびチェビシェフ タイプ II 設計の歪みも小さい (群遅延が平坦である) ことに注意してください。

set(hfvt,'Analysis', 'grpdelay')

最小次数設計

3dB のカットオフ周波数が重要ではなく、通過帯域と阻止帯域の両方が周波数と許容可能なリップルの量の観点から完全に指定されている場合、最小次数設計法を使用できます。

Fp = .1; Fst = .3; Ap = 1; Ast = 60;
setspecs(d,'Fp,Fst,Ap,Ast',Fp,Fst,Ap,Ast);
Hbutter = design(d,'butter','SystemObject',true);
Hcheby1 = design(d,'cheby1','SystemObject',true);
Hcheby2 = design(d,'cheby2','SystemObject',true);
Hellip = design(d,'ellip','SystemObject',true);
hfvt = fvtool(Hbutter,Hcheby1,Hcheby2,Hellip, 'DesignMask', 'on',...
    'Color','white');
axis([0 1 -70 2])
legend(hfvt, ...
    'Butterworth','Chebyshev Type I','Chebyshev Type II','Elliptic');

バタワース設計では 7 次のフィルターが仕様を満たす必要がありますが、チェビシェフ手法の場合は 5 次のフィルターで十分です。楕円設計の場合、フィルターの次数は 4 まで少なくすることができます。

order(Hbutter)
order(Hcheby1)
order(Hcheby2)
order(Hellip)
ans =

     7


ans =

     5


ans =

     5


ans =

     4

通過帯域または阻止帯域仕様への完全な準拠

最小次数設計では、理想的な次数を次の整数に丸めなければなりません。この追加の非整数次数により、アルゴリズムは実際に仕様を超えることになります。'MatchExactly' フラグを使用して、正確に 1 つの帯域に一致するよう設計アルゴリズムを制約できます。その他の帯域は、その仕様を超えます。既定の設定では、チェビシェフ タイプ I 設計はパスバンドに一致します。バタワースとチェビシェフ タイプ II は阻止帯域に一致し、楕円設計は両方の帯域の減衰に一致します (阻止帯域のエッジ周波数は超えます)。

Hellipmin1    = design(d, 'ellip', 'MatchExactly', 'passband',...
    'SystemObject',true);
Hellipmin2 = design(d, 'ellip', 'MatchExactly', 'stopband',...
    'SystemObject',true);
hfvt = fvtool(Hellip, Hellipmin1, Hellipmin2, 'DesignMask', 'on',...
    'Color','white');
axis([0 1 -80 2]);
legend(hfvt, 'Matched passband and stopband', ...
    'Matched passband', 'Matched stopband', ...
    'Location', 'Northeast')

通過帯域で通過帯域エッジを比較してください。一致する通過帯域と一致する両方の設計の減衰は、Fpass = 0.1 で正確に 1 dB です。

axis([0 .11 -1.1 0.1]);
legend(hfvt, 'Location', 'Southwest')

結果のフィルター次数が変化しないことを確認します。

order(Hellip)
order(Hellipmin1)
order(Hellipmin2)
ans =

     4


ans =

     4


ans =

     4

ハイパス、バンドパス、およびバンドストップ フィルター

上記の結果は、ハイパス、バンドパス、およびバンドストップ応答タイプに拡張できます。例として、最小次数のバンドパス フィルターを示します。

d = fdesign.bandpass('Fst1,Fp1,Fp2,Fst2,Ast1,Ap,Ast2', ...
    .35,.45,.55,.65,60,1,60);
Hbutter = design(d,'butter','SystemObject',true);
Hcheby1 = design(d,'cheby1','SystemObject',true);
Hcheby2 = design(d,'cheby2','SystemObject',true);
Hellip = design(d,'ellip','SystemObject',true);
hfvt = fvtool(Hbutter,Hcheby1,Hcheby2,Hellip, 'DesignMask', 'on',...
    'Color','white');
axis([0 1 -70 2])
legend(hfvt, ...
    'Butterworth','Chebyshev Type I','Chebyshev Type II','Elliptic',...
    'Location', 'Northwest')

この情報は役に立ちましたか?