Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

IIR フィルター設計での特別トピック

標準的 IIR フィルター設計

標準的な IIRフィルター設計法は、以下のステップにしたがいます。

  1. カットオフ周波数 1 のアナログ ローパス フィルターを求め、このプロトタイプ フィルターを指定した帯域構成に変換します。

  2. フィルターをデジタル領域に変換します。

  3. フィルターを離散化します。

このツールボックスでは、上記の各ステップに対して関数を用意しています。

設計作業

使用可能な関数

アナログ ローパス プロトタイプ

buttap, cheb1ap, besselap, ellipap, cheb2ap

周波数変換

lp2lp, lp2hp, lp2bp, lp2bs

離散化

bilinear, impinvar

関数 buttercheby1cheb2ordellip、および besself では、フィルター設計のすべてのステップが実行されるのに対して、関数 buttordcheb1ordcheb2ord、および ellipord では、IIR フィルターに対する最小次数が計算されます。これらの関数は、多くの設計条件に対して十分なものであり、低水準関数は通常必要ありません。ただし、アナログ フィルターの帯域エッジを変換したり、有理伝達関数を離散する必要があるアプリケーションの場合のために、本節ではこれらを行うツールについて説明します。

アナログ プロトタイプの設計

このツールボックスでは、IIR フィルター設計への標準的なアプローチの第 1 段階である、カットオフ周波数 1 をもつローパス アナログ プロトタイプ フィルターの作成のためにいくつかの関数を用意しています。

以下の表に、サポートされているフィルター タイプごとのアナログ プロトタイプ設計関数をまとめます。各フィルター タイプのプロットについては、IIR フィルターの設計を参照してください。

フィルター タイプ

アナログ プロトタイプ関数

ベッセル

[z,p,k] = besselap(n)

バタワース

[z,p,k] = buttap(n)

チェビシェフ I 型

[z,p,k] = cheb1ap(n,Rp)

チェビシェフ II 型

[z,p,k] = cheb2ap(n,Rs)

楕円

[z,p,k] = ellipap(n,Rp,Rs)

周波数変換

アナログ プロトタイプ設計法の第 2 段階は、ローパス プロトタイプの周波数変換です。このツールボックスには、1 rad/s のカットオフ周波数をもつアナログ ローパス プロトタイプを、指定したカットオフ周波数のバンドパス フィルター、ハイパス フィルター、バンドストップ フィルター、およびローパス フィルターに変換する関数が用意されています。

周波数変換

変換関数

ローパスからローパス

s=s/ω0

[numt,dent] = lp2lp (num,den,Wo)

[At,Bt,Ct,Dt] = lp2lp (A,B,C,D,Wo)

ローパスからハイパス

s=ω0s

[numt,dent] = lp2hp (num,den,Wo)

[At,Bt,Ct,Dt] = lp2hp (A,B,C,D,Wo)

ローパスからバンドパス

s=ω0Bω(s/ω0)2+1s/ω0

[numt,dent] = lp2bp (num,den,Wo,Bw)

[At,Bt,Ct,Dt] = lp2bp (A,B,C,D,Wo,Bw)

ローパスからバンドストップ

s=Bωω0s/ω0(s/ω0)2+1

[numt,dent] = lp2bs (num,den,Wo,Bw)

[At,Bt,Ct,Dt] = lp2bs( A,B,C,D,Wo,Bw)

表からわかるように、すべての周波数変換関数では 2 つの線形システム モデル、すなわち、伝達関数形式および状態空間形式を使用することができます。バンドパスおよびバンドストップの場合は、次のようになります。

ω0=ω1ω2

Bω=ω2ω1

ここで、ω1 は下側の帯域エッジ、ω2 は上側の帯域エッジです。

周波数変換関数では、周波数変数の代入が行われます。lp2bp および lp2bs では、これは 2 次の代入であり、出力されるフィルターは入力のフィルターの次数の 2 倍になります。lp2lp および lp2hp では、出力されるフィルターは入力と同じ次数になります。

通過帯域に 3dB のリップルをもつ 10 次のチェビシェフ I 型帯域フィルターの設計を開始するには、以下のようにします。

[z,p,k] = cheb1ap(10,3);

zp、および k には、カットオフ周波数 Ωc が 1 rad/s に等しいローパス アナログ フィルターの零点、極、およびゲインが出力されます。この関数を使用し、このローパス プロトタイプを帯域エッジ Ω1 = π/5 および Ω2 = π をもつアナログ バンドパス フィルターに変換します。まず、関数 lp2bp がこのフィルターを受け取ることができるように、フィルターを状態空間形式に変換します。

[A,B,C,D] = zp2ss(z,p,k);   % Convert to state-space form.

次に、帯域幅および中心周波数を求め、lp2bp を呼び出します。

u1 = 0.1*2*pi;
u2 = 0.5*2*pi;   % In radians per second
Bw = u2-u1;
Wo = sqrt(u1*u2);
[At,Bt,Ct,Dt] = lp2bp(A,B,C,D,Wo,Bw);

最後に、周波数応答を計算し、振幅をプロットします。

[b,a] = ss2tf(At,Bt,Ct,Dt);        % Convert to TF form
w = linspace(0.01,1,500)*2*pi;     % Generate frequency vector
h = freqs(b,a,w);                  % Compute frequency response
semilogy(w/2/pi,abs(h))            % Plot log magnitude vs. freq
xlabel('Frequency (Hz)')
grid

フィルターの離散化

アナログ プロトタイプ設計法の第 3 段階は、フィルターを離散時間領域に変換することです。このツールボックスでは、このために 2 つの方法を用意しています。すなわち、インパルス不変法と双 1 次変換です。フィルター設計関数 buttercheby1cheby2、および ellip では、このステップでの離散化に双一次変換を使用しています。

アナログからデジタルへの変換

変換関数

インパルス不変法

[numd,dend] = impinvar (num,den,fs)

双 1 次変換

[zd,pd,kd] = bilinear (z,p,k,fs,Fp)

[numd,dend] = bilinear (num,den,fs,Fp)

[Ad,Bd,Cd,Dd] = bilinear (At,Bt,Ct,Dt,fs,Fp)

インパルス不変法

このツールボックスの関数 impinvar では、インパルス応答がアナログ フィルターの連続インパルス応答のサンプルであるデジタル フィルターが作成されます。この関数は、伝達関数形式のフィルターのみに使用できます。最良の結果を得るには、サンプリング周波数の半分より高い部分でのアナログ フィルターの周波数成分はごくわずかでなければなりません。このような高い周波数成分がサンプリング時に低帯域にエイリアシングされるためです。インパルス不変法は、一部のローパス フィルターやバンドパス フィルターに使用できますが、ハイパス フィルターやバンドストップ フィルターには適していません。

チェビシェフ I 型フィルターを設計し、FVTool を使用して周波数応答と位相応答をプロットします。

[bz,az] = impinvar(b,a,2);
fvtool(bz,az)

ツール バーで [振幅応答と位相応答] ボタンをクリックします。

インパルス不変法では、0.1 Hz および 0.5 Hz のカットオフ周波数が維持されます。

双 1 次変換

双一次変換とは、連続領域を離散領域に非線形マッピングするものです。以下の式により、s 平面が z 平面にマッピングされます。

H(z)=H(s)|s=kz1z+1

双一次変換では、以下の式に基づいて、連続領域の jΩ 軸が離散領域の単位円にマッピングされます。

ω=2tan1(Ωk)

ツールボックスの関数 bilinear では、この処理が実装されます。ここで、周波数歪み定数 k は、既定ではサンプリング周波数の 2 倍 (2*fs) になり、bilinear に入力引数の最後の項目として「一致」周波数 Fp を指定した場合は 2πfp/tan(πfp/fs) になります。一致周波数 Fp (Hz) が存在する場合、bilinear は周波数 Ω = 2πfp (rad/s) を、サンプリング レート ω = 2πfp/fs (rad/s) に正規化された、離散領域の同じ周波数にマッピングします。

関数 bilinear では、この変換を 3 つの異なる線形システム表現で実行できます。すなわち、零点-極-ゲイン、伝達関数、および状態空間形式です。以下のようにして、2 Hz のサンプリング周波数を使用し、下側の帯域エッジを 0.1Hz に維持する、前節のチェビシェフ I 型フィルターを表現する状態空間行列を使用して、bilinear を呼び出します。

[Ad,Bd,Cd,Dd] = bilinear(At,Bt,Ct,Dt,2,0.1);

この結果として得られるデジタル フィルターの周波数応答は、次のように表現されます。

[bz,az] = ss2tf(Ad,Bd,Cd,Dd);       % Convert to TF
fvtool(bz,az)

ツール バーで [振幅応答と位相応答] ボタンをクリックします。

下側の帯域エッジは、予測どおり 0.1 Hz になります。ただし上側の帯域エッジは、アナログ領域では正確に 0.5Hz ですが、0.5Hz よりわずかに低くなっています。これは、双 1 次変換の非線形性特性を示しています。この非線形性を抑えるには、双一次変換の際に正しい位置へのマッピングを行う「プリワープ」した帯域エッジをもつアナログ領域フィルターを作成しなければなりません。ここで、プリワープした周波数 u1 および u2 では、関数 lp2bp のための Bw および Wo が生成されます。

fs = 2;                           % Sampling frequency (hertz)
u1 = 2*fs*tan(0.1*(2*pi/fs)/2);   % Lower band edge (rad/s)
u2 = 2*fs*tan(0.5*(2*pi/fs)/2);   % Upper band edge (rad/s)
Bw = u2 - u1;                     % Bandwidth
Wo = sqrt(u1*u2);                 % Center frequency
[At,Bt,Ct,Dt] = lp2bp(A,B,C,D,Wo,Bw);

ナイキスト周波数の 0.1 倍および 0.5 倍の位置に正しい帯域エッジをもつデジタル帯域フィルターは、次のように表現されます。

[Ad,Bd,Cd,Dd] = bilinear(At,Bt,Ct,Dt,fs);

前の 2 つの節で示した例のバンドパス フィルターも、完全 IIR 設計関数 cheby1 を使用して、1 つのステートメントで作成できます。たとえば、例にあげたチェビシェフ フィルターのアナログ バージョンは、以下のように表現されます。

[b,a] = cheby1(5,3,[0.1 0.5]*2*pi,'s');

帯域エッジはアナログ フィルターの場合 rad/s ですが、デジタル フィルターの場合は周波数が正規化されていることに注意してください。

[bz,az] = cheby1(5,3,[0.1 0.5]);

完全設計関数はすべて、内部的に bilinear を呼び出します。これらの関数では、正確なデジタル フィルターを得るために、必要に応じて帯域エッジがプリワープされます。