BiQuad Filter(双2次フィルタ)の設計
デジタルフィルタでよく使われているBiQuadフィルタ(双2次フィルタ)の設計手法とか色々のまとめ。
BiQuadフィルタとは
そもそもBiQuadフィルタとはなんぞ?ってことですが
率直に言うと下図のフィルタをそう言います。*1
フィルタということで、入力x(n)に対してy(n)が出力されます。
その際に、遅延器(図中で\(Z^{-1}\)と表記)によって信号が最大2回遅延されます。
で、\(a_0,a_1\)といった係数によって入力信号が変化し、加算されて出力されます。
これを差分方程式で表現すると
$$
a_0y(n)=b_0x(n)+b_1x(n-1)+b_2x(n-2)-a_1y(n-1)-a_2y(n-2)
$$
と書き表せます。
これを伝達関数に変換すると
これをになるようにすべての項をで割ります(ノーマライズ)
これを更に差分方程式で書き直すと
これがBiQuadフィルタの基本形です。
係数の導出
BiQuadフィルタの入力と出力の関係はわかったとして、だとかだとかの係数ってどうなっとるんじゃい?
ということで、BiQuadの係数を導きます。
BiQuadフィルタは2次の伝達関数が既知であれば、そのフィルタをこれ一つで作れることです。
つまりハイパスもローパスもこれ一本。
係数導出の前の準備
まずは、あらかじめ自分で設定しておくべきパラメータがあります。
- :サンプリング周波数
- :フィルタの中心周波数(カットオフ周波数)
- :Quality Factor、共振周波数における信号の鋭さを表します。よく使われるのは
その他、よく使うもの
- :
- :
- :
- :
まず係数を求めるには双一次変換をします。
双一次変換については長くなりすぎるので省略
双一次変換 – Wikipedia
簡単に言うと、双一次変換を使うとs平面関数とz平面関数を変換することができます。
そんでもって、双一次変換したはz平面上では
となります。
さらに。
離散時間周波数と連続時間周波数では誤差が生じます。
例えば離散時間周波数で1[kHz]の中心周波数を得たい場合、連続時間周波数では中心周波数が異なります。
この歪を解消するためにプリワーピングが必要となります。
連続時間での角速度を離散時間の角速度で表すと
となります。この誤差を修正するためにこれで割ります。
わかりやすい形になおすと
となり、周波数ワーピング済みの双一次変換式ができました。
この求めたを使って
ここで半角の公式
を利用して
共通因数を作るためにをベースにの項を変形する。
こうすると共通因数で分解できる。因数は
分解すると
さらにすべての項にをかけて
これらを用いて各フィルタの係数を導出します。
*1:2021/10/21追記:図に誤りがあったため修正
ディスカッション
コメント一覧
分かりやすい説明で大変参考になりますが、数式がうまく表示されていない様です。
数式が表示されるようになると嬉しいです。
はてなブログからの自動移行時に変換できていなかったようです。
修正を進めますのでしばしお待ち下さい。