まるもの雑記

なにか作ったりとかゲームとか。

デジタルフィルタの備忘録

最近仕事と趣味をかねてフィルタの勉強中なので

まずはここから

 

■出展

ここに作り方が書いてある。

http://www.musicdsp.org/files/Audio-EQ-Cookbook.txt

2次のフィルタについてはここに書いてあることを実装すればそのままできる。

というか出来た。 出力とかを見る限り大丈夫そうだけど

あまり仕組みはわかっていない。

大学の教科書にも良く書いてある。

 

■2次の伝達関数

2次のフィルタの伝達関数は sを使って

H(S) = { b0 + b1 * s + b2 * s^2 } / { a0 + a1 * s + a2 * s^2 }

こう書ける。

s=jwを入れて絶対値を取ると2次のフィルタの周波数特性がわかる。

低周波ではsが無視できるので b0/a0

高周波ではs^2が支配的になって b2/a2

 

ものすごくざっくりとした理解。

 

■離散時間の伝達関数

なんだか良くわからないけどsをzに置き換えてz^2で割ると

同じような式になる。

H(z) ={ b0 + b1*z^(-1) + b2 *z^(-2) } / { a0 + a1 * z^(-1) + a2 * z^(-2) }

a0で割って

H(z) = B(z) / { 1 + A(z) } の形にすると足し算の形でフィルタが実現できるらしい。

なのでこれを↓みたいに置き換える

           ( b0 / a0 ) + ( b1 / a0 ) * z^(-1) + ( b2  / a0 ) * z^(-2) 

H(z) = -------------------------------------------------------------------

             1 + ( a1 / a0 ) * z^(-1) + ( a2 / a0 ) * z^(-2)

 

■足し算での伝達関数

そうすると 入力x(i) 出力y(i) として

y(n) = ( b0 / a0  ) * x(n) + ( b1 / a0 ) * x(n-1) + ( b2 / a0 ) * x(n-2) 

          - { ( a1 / a0 ) * y(n-1) + ( a2 / a0 ) * y(n-2) }

となる。これだとICで簡単に計算できる。

x(n-1)は1つ前の入力。

あるモジュールに x(1), x(2)...と順番に入れていくと y(1), y(2)... と順番に出てくる。

2個前のまで保存しておくと2次の関数が作れる。

 

■まとめ

ここまでがざっくりとした理解。

きっとどこかおかしい。

たぶん3つ前の数字を使うと3次のフィルタが作れる気がする。

出力を使ってフィードバックをかけるものをIIRフィルター

フィードバックがないものをFIRフィルターという。

IIRフィルタは発振する可能性があるので係数設定を適当にやると出力がおかしくなる。

 

2013/12/24