アナログフィルタをディジタル化する手法にインパルス不変法があります。
これは、アナログフィルタのインパルス応答g(t)をサンプリングした値と、
ディジタルフィルタのインパルス応答とを一致させることでディジタル化します。
インパルス不変法の一般的なアイディア
アナログフィルタのインパルス応答のラプラス変換は、下式で近似出来ます。
ここで、Tは適当なサンプリング間隔を示す。
次に、ディジタルフィルタのインパルス応答をz変換すれば、
で表される伝達関数H(z)が得られます。
ここで、
、すなわち
...式(1)
とおけば、アナログフィルタとディジタルフィルタを時間領域の世界で結びつける関係性が得られます。
簡易な例
下記の伝達関数G(s)で表されるアナログフィルタをディジタル化し、その伝達関数を求めてみます。
サンプリング周波数ft = 40[Hz]とします。
インパルス応答g(t)は、上式をラプラス逆変換することで、下式を得ます。
、
式(1)で示された関係性から下式を得ます。
ここで、Aに10が与えられています。
このディジタル信号列に対して、z変換すれば、
を得ます。
ここで、T=0.025(サンプリング周波数ft=40[Hz])を上式に代入すると、
を得る事が出来ます。
scilabを使って解いてみる
簡単な例で示した変換をscilabを使って解いてみます。
サンプリング周波数ft = 40[Hz], 60[Hz], 120[hz]とします。
scilabコマンド
-->gs = 1/(1+s/10/%pi);
-->sfrq=40;T=1/sfrq;
-->hz1=zrep(10*%pi*T/(1-exp(-10*%pi*T)*p))
hz1 =
0.7853982
-------------
1 - 0.4559381p
-->sfrq=60;hz2=imp2z(gs)
hz2 =
! 0 0.5235988 !
! - ------------- !
! 1 1 - 0.5923848p !
-->sfrq=120;hz3=imp2z(gs)
hz3 =
! 0 0.2617994 !
! - ------------- !
! 1 1 - 0.7696654p !
-->aspec(gs, [0,60],'hz',1);
-->col=1;zgraph(hz3,1,col);
-->col=2;zgraph(horner(hz2,z^2),1,col);
-->col=4;zgraph(horner(hz1,z^3),1,col);
結果
下図の内、上部が振幅を示し、下部が位相を示します。
振幅に関して
黄緑の曲線がアナログフィルタの曲線を示し、水色は、ft=40[Hz]、青色は、ft=60[Hz]、黒色は、ft=120[hz]に
より近似したディジタルフィルタの曲線になります。
つまり、サンプリング周波数が高くなるにつれ、近似精度がよくなることが分かります。
位相に関して
ピンク色の曲線がアナログフィルタの曲線を示し、水色は、ft=40[Hz]、青色は、ft=60[Hz]、黄緑色は、ft=120[hz]に
より近似したディジタルフィルタの曲線になります。
サンプリング周波数を高くしても、アナログの特性が保持されないことが分かります。