前回、デジタルフィルタの一般的伝達関数もブロック図も示さずいきなり式を書いてしまいました。こちらの記事に興味を持って訪問される方にとってはそういった予備知識があるとは思いますが、今回はそういった情報があるサイトも紹介しながら説明していきたいと思います。

IIR フィルタの一般的なブロック図はこんな感じです。

イメージ 1
電子情報通信学会『知識の森』の中から引用してきています。デジタルフィルタでググってヒットしたのがこの書類(pdf)だったので、学会誌としての全貌はよく分かりません。でも興味を持って勉強される方は読んでおくことをお勧めします。ここでは使う立場でとりあえず知っておきたいところだけかいつまんで登場させます。

ブロック図ですが、そのままの引用になってしまったので信号名が今までと異なってしまっています。整理しておきます。

u(k):入力信号を差分方程式で扱っているもの。
y(k):出力信号を差分方程式で扱っているもの。
v(k):途中の信号 ← 単に計算する上で出てきているだけだと思います。

これらを z 変換して一般式として整理すると次のようになります。

イメージ 2
以下、さきほどの資料には色々書いてあります。安定性のところだけは押さえておいた方がいいと思いますが、それ以外はそんなものかと見ておくだけでも良さそうです。

どう使うかというと、もし前回の scilab スクリプトを実行した方はコンソール画面に次のような式が出ていたかと思います。

                                              2 
    0.9126686 - 1.8253371z + 0.9126686z  
    -----------------------------------  
                                       2      
        0.8357197 - 1.8149546z + z       

この式と上述の一般式を比較しながら、係数を決めればいいわけです。
それ自体はそんなに難しくなくて、scilab の結果の式の分母分子をこの場合は z^(-2) で割ればよく、


                -2                -1             
    0.9126686z    - 1.8253371z   + 0.9126686  
    ---------------------------------------  
                    -2               -1         
        0.8357197z    - 1.8149546z    + 1       

分母分子の多項式の順序が入れ替わっていますが、あわてず騒がず比較していくと、

b0 = 0.9126686
b1 = -1.8253371
b2 = 0.9126686
a1 = -1.8149546
a2 = 0.8357197


となります。この後は DSP にせよ、ハードウェア演算にせよ所望のビット数を持ったデジタル値に変換して係数レジスタに設定すれば良いと云うことになります。蛇足ながら z-1 というのは1サンプリング周期分のディレイです。

いかがでしょうか。なんとなく流れが分かりましたでしょうか。

参考サイトをご紹介しておきます。

こちらのサイトではツールを用いたデジタルフィルタの研究を行っています。

デジタルフィルタ研究室

http://digitalfilter.com/jpindex.html


こちらも見ておくといいと思います。サイト上で色々試せます。

ディジタルフィルタとz変換

http://laputa.cs.shinshu-u.ac.jp/~yizawa/InfSys1/basic/chap10/index.htm


読み物的ですが、結構深いところまでやっているようです。

ディジタルフィルタの設計
http://www.ic.is.tohoku.ac.jp/~swk/lecture/yaruodsp/dfdesign.html