関数 > 信号処理 > デジタルフィルタ > 例: IIR フィルタ設計
  
例: IIR フィルタ設計
関数 besselbuttercheby1cheby2iirlowiirhighiirpass、および iirstop を使用して、指定したタイプのアナログローパスフィルタの係数を生成します。係数を iir 関数の 1 つの引数として使用します。この関数は尺度化し、双 1 次変換を実行して必要な周波数応答を生成します。
* 
次数 N が偶数のローパスフィルタとハイパスフィルタでは、すべてのセクションが 2 次となり、各列に 3 つの係数が含まれます。この次数が奇数の場合、最後のセクションが 1 次になります。帯域通過フィルタと帯域消去フィルタの場合、デジタルフィルタへの変換によって各セクションの次数が 2 倍になります。
関数 gainresponse は、上記の関数によって生成された形式の係数配列を引数としてとります。セクションのゲインを乗算することで複素ゲインを求め、各セクションの応答を次のセクションに渡すことで応答を求めます。
Samuel Stearns/Ruth David 著「Signal Processing Algorithms」(Prentice-Hall, Inc.) の第 7 章に、これらの関数の実装アルゴリズムがあります。
第 1 種チェビシェフローパスフィルタ
1. 次数、リップルパラメータ、カットオフ周波数を定義します。
クリックしてこの式をコピー
クリックしてこの式をコピー
クリックしてこの式をコピー
2. 関数 iirlowcheby1 を使用して、フィルタ係数を生成します。
クリックしてこの式をコピー
クリックしてこの式をコピー
* 
フィルタ A には 4 つの 2 次セクションがあります。
3. ゲインのマグニチュードをプロットして、水平マーカーを使用してリップルのレベルをマーク付けします。
クリックしてこの式をコピー
クリックしてこの式をコピー
クリックしてこの式をコピー
クリックしてこの式をコピー
変換関数は 2 次因子の積として求められるので、複素平面上への極のプロットは簡単になります。
4. 分母の各因子の複素根を求めます。
クリックしてこの式をコピー
* 
フィルタ A の変換関数の極は、係数が A の奇数列 (2 次項の係数から順に格納) によって与えられる 2 次方程式の根です。
5. 分母の因子ごとに 1 つの根を求めます。
クリックしてこの式をコピー
クリックしてこの式をコピー
6. 共役根を入力します。
クリックしてこの式をコピー
7. 変換関数の極を確認してこれらを複素平面上にプロットします。参考のために単位円トレースを追加します。
クリックしてこの式をコピー
クリックしてこの式をコピー
クリックしてこの式をコピー
クリックしてこの式をコピー
プロットでは、8 つの極すべてが単位円の内側にあるので、このフィルタは十分に安定しています。
8. 関数 max を使用して、8 つの極すべてが単位円の内側にあることを数値的に検証します。
クリックしてこの式をコピー
9. response 関数を適用し、フィルタ A のインパルス応答をプロットします。この関数の 1 つ目の引数として、単位インパルスを表す長さ 1 のベクトルを渡します。
クリックしてこの式をコピー
クリックしてこの式をコピー
クリックしてこの式をコピー
クリックしてこの式をコピー
クリックしてこの式をコピー
応答の長さは無限ですが、最初の 80 項以降はほぼ 0 に低下します。安定性の条件から、応答の絶対値の和は有界であることが保証されています。
第 2 種チェビシェフローパスフィルタ
1. 第 2 種チェビシェフフィルタのパラメータを設定します。
クリックしてこの式をコピー
クリックしてこの式をコピー
クリックしてこの式をコピー
2. tan 関数を使用して尺度を計算します。
クリックしてこの式をコピー
* 
この計算の背景にある理論については、『Signal Processing Algorithms』を参照してください。この値は常に 1 より大きくなります。
3. 関数 iirlowcheby2 を使用して、カットオフ周波数 f=pass の 5 次ローパス IIR フィルタの係数を計算します。
クリックしてこの式をコピー
クリックしてこの式をコピー
クリックしてこの式をコピー
* 
係数行列は 2 つの 2 次セクションと 1 つの 1 次セクションから成ります。
4. 関数 gain を使用して各周波数におけるゲインを計算して、周波数応答をプロットします。マーカーを使用して passstop の周波数および減衰レベルの逆数を表示します。
クリックしてこの式をコピー
クリックしてこの式をコピー
応答のプロットから、設計基準がどの程度満たされているのかがわかります。マーカーにより、阻止域が必要となる場所 (直線 stop1/atten の交点) から始まり、通過帯域がカットオフ周波数の右で終ることを確認しやすくなります。
5. iirlow 関数と cheby2 関数を使用して、減衰を上げて前述の設計を繰り返します。
クリックしてこの式をコピー
クリックしてこの式をコピー
クリックしてこの式をコピー
クリックしてこの式をコピー
クリックしてこの式をコピー
* 
減衰を上げた場合、遷移帯域を必要な幅にするためには、フィルタの次数を上げる必要があります。5 次と 8 次のフィルタを設計して結果を比較します。
6. 5 次フィルタのゲインを dB でプロットします。マーカーを使用してパス周波数と望ましい 30 dB の減衰にマーク付けします。
クリックしてこの式をコピー
クリックしてこの式をコピー
7. 8 次フィルタのゲインを dB でプロットします。マーカーを使用してパス周波数と望ましい 30 dB の減衰にマーク付けします。
クリックしてこの式をコピー
クリックしてこの式をコピー
どちらのフィルタでも周波数 stop 付近の -30 db の直線より下のゲインはほぼ同じですが、8 次フィルタのゲインはカットオフ周波数 pass を超えてもフラットなままとなります。つまり、減衰を目標値 1000 にするには、8 次フィルタを使用する必要があります。
スケール係数の計算
次の方程式はハイパスフィルタ、帯域通過フィルタ、帯域消去フィルタのスケール係数の定義を示しています。
ハイパスフィルタ:
クリックしてこの式をコピー
帯域通過フィルタ:
クリックしてこの式をコピー
パラメータ pass1pass2 はそれぞれ通過帯域の下限と上限であり、パラメータ stop1stop2 は 2 つの阻止域の境界です。
帯域消去フィルタ:
クリックしてこの式をコピー
パラメータ pass1pass2 は 2 つの通過帯域の境界であり、パラメータ stop1stop2 は阻止域のそれぞれ下限と上限です。
1. 帯域通過フィルタのパラメータを次のように定義します。
クリックしてこの式をコピー
クリックしてこの式をコピー
クリックしてこの式をコピー
クリックしてこの式をコピー
クリックしてこの式をコピー
2. 前述のパラメータを使用して帯域通過フィルタの尺度を計算します。
クリックしてこの式をコピー
クリックしてこの式をコピー
3. 上記の帯域通過フィルタの係数を計算します。
クリックしてこの式をコピー
クリックしてこの式をコピー
クリックしてこの式をコピー
4. 応答 (単位: dB) をプロットし、stop と pass のマーカーを表示します。
クリックしてこの式をコピー
阻止域の右側境界はちょうど正しい位置にありますが、阻止域の左側境界は目標の周波数値より少し上にあります。つまり、この遷移帯域は必要な幅より狭くなっています。
ローパスベッセルフィルタ
ベッセルフィルタは単一のセクションとして返ります。
1. ベッセルフィルタのパラメータを設定します。
クリックしてこの式をコピー
クリックしてこの式をコピー
クリックしてこの式をコピー
* 
尺度パラメータを使用して、カットオフ周波数におけるゲインを制御できます。
2. bessel 関数を使用して、ベッセルフィルタ係数を計算します。
クリックしてこの式をコピー
クリックしてこの式をコピー
クリックしてこの式をコピー
3. ゲインをプロットし、カットオフ周波数におけるゲインを表示します。
クリックしてこの式をコピー
クリックしてこの式をコピー
クリックしてこの式をコピー
4. スケール係数を使用して、カットオフ周波数におけるゲインを低くし、阻止域での減衰を大きくします。
クリックしてこの式をコピー
クリックしてこの式をコピー
R は、アナログ係数 B1 に対応するアナログ変換関数です。
5. 開始推定値 w = 1 で root 関数を使用して、カットオフ周波数におけるアナログ変換関数 R が 0.8 になる点を求めます。
クリックしてこの式をコピー
クリックしてこの式をコピー
クリックしてこの式をコピー
クリックしてこの式をコピー
クリックしてこの式をコピー
クリックしてこの式をコピー
尺度マーカーはゲインのカーブと 0.8 で交わります。
* 
尺度の値が正になるように、推定値は正の数値でなければなりません。
6. 計算されたスケール係数を使用して、デジタルフィルタの係数を再計算します。
クリックしてこの式をコピー
クリックしてこの式をコピー
7. 新しい周波数応答をプロットし、カットオフ周波数におけるゲインを表示します。
クリックしてこの式をコピー
クリックしてこの式をコピー
プロットにより、カットオフ周波数を過ぎてからの新しい周波数応答の 0 への遷移がより鋭くなっていることがわかります。スケール係数を使用した結果、阻止域での減衰が大きくなりました。
帯域通過、帯域消去、ハイパス Butterworth フィルタ
iirpass 関数と iirstop 関数では入力係数の次数が 2 倍になるので、4 次アナログ係数は 8 次フィルタになります。
帯域通過 Butterworth フィルタ
1. フィルタのパラメータを設定します。
クリックしてこの式をコピー
クリックしてこの式をコピー
クリックしてこの式をコピー
2. 係数を計算します。
クリックしてこの式をコピー
3. 応答をプロットします。垂直マーカーを使用して、低周波と高周波を示します。
クリックしてこの式をコピー
クリックしてこの式をコピー
応答により、f_lof_hi の間の周波数が通過を許されていることがわかります。その他はすべてフィルタによって除去されています。
帯域消去 Butterworth フィルタ
1. フィルタの次数を設定します。
クリックしてこの式をコピー
2. 関数 iirstopbutter を使用して、係数を計算します。
クリックしてこの式をコピー
3. 応答をプロットします。垂直マーカーを使用して、低周波と高周波を示します。
クリックしてこの式をコピー
クリックしてこの式をコピー
応答により、f_lof_hi の間の周波数が通過を阻止されていることがわかります。その他はすべて通過を許されています。
ハイパス Butterworth フィルタ
1. フィルタの次数を設定します。
クリックしてこの式をコピー
2. 関数 iirhighbutter を使用して、係数を計算します。
クリックしてこの式をコピー
* 
iirpass 関数や iirstop 関数とは異なり、iirhigh 関数では入力係数の次数は 2 倍になりません。したがって、次数はそのままの値で butter 関数に渡されています。
3. 応答をプロットします。垂直マーカーを使用して高周波を表示します。
クリックしてこの式をコピー
クリックしてこの式をコピー
応答により、f_hi よりも高い周波数が通過を許されていることがわかります。その他はすべてフィルタによって除去されています。