ディジタルフィルタってなんだろう
by K.I
Index
- ディジタルフィルタは、以前から興味があったけど、DSPとか使わないと出来ないかなぁと思っていた。
- PastelMagicの掲示板で、ごく低速の信号でディジタルフィルタを使うという話題が出たので、ちょっと試してみたくなった。
- Marsさんという方が紹介していた式(4msサンプリングで50Hzならば、ということだが。。。)
 = ( 5y(n-1) %2B x(n) - x(n-5) ) / 5&chf=bg,s,ffffff00)
どんなフィルタになるのか全然イメージが湧かないけど、低速なら適当に試してみることが出来そうだ。
ちょっと模式的に描いてみる。
まぁ、わかんないなりに考えてみよう。
- これは4msサンプリングとすれば、4ms×5=20ms間隔で相殺してる。
- つまり、1/20ms=50Hzの信号を消してしまうと考えられる。
- あとは、前回のデータの1/5の割合で加算してるから、感覚的にローパスになっている感じがする。
でもこれ以上は、わかんないなぁ。
- とにかく、いろいろ調べてみよう。 こことか、 ここなんか参考になりそうだ。
[top]
- サンプリングしたデータについて処理するとしたら、最初に思いつくのは単純に平均をとることだよね。例えば、
 = ( x(n) %2B x(n-1) %2B x(n-2) ) / 3&chf=bg,s,ffffff00)
- これなら自分にもなんとなく分かる。ローパスになってる気がする。
- こんな風に、有限の範囲のデータに係数を掛けて加算して作るフィルタをFIRフィルタというようだ。移動平均も、FIRフィルタの一種ということらしい。
 = ( 5y(n-1) %2B x(n) - x(n-5) ) / 5&chf=bg,s,ffffff00)
- こうしてみると、これは立派なデジタルフィルタみたいだ。意識せずにデジタルフィルタを使っていたんだなぁ。
[top]
- なんとなくローパスになってるのは分かるんだけど、特性は正確には分からない。
- ディジタル信号処理の基礎(CQ出版)を買ってきたので、それを元に勉強しよう。
}{dt} %2B \frac{1}{CR}y(t) = \frac{1}{CR}x(t)&chf=bg,s,ffffff00)
- RCフィルタ(いわゆる積分回路)をちょっと復習してみよう。
- 直列RC回路の電圧E(t)は、以下の式で表される。これなら分かる。
 = RI(t) %2B \frac{q(t)}{C}&chf=bg,s,ffffff00)
- ここで、電流I(t)は電荷q(t)の変化量だから、
}{dt} %2B \frac{q(t)}{C} = E(t)&chf=bg,s,ffffff00)
}{dt} %2B Ec(t) = E(t)&chf=bg,s,ffffff00)
- つまりx=E、y=Ecとすれば、、なるほど、こうなるわけね。
}{dt} %2B \frac{1}{CR}y(t) = \frac{1}{CR}x(t)&chf=bg,s,ffffff00)
- また本の説明を追っかけてみよう。
- この微分方程式を差分で置き換えるってことなんだけど、いきなり変換してるから良く分からん。
- ちょっと悩んだけど、こんな感じで良いのかな。
T) %2B (1-\frac{CR}{CR%2BT})x(nT)&chf=bg,s,ffffff00)
 = ay((n-1)T) %2B (1-a)x(nT)&chf=bg,s,ffffff00)
- これが差分方程式ってことなんだ。。それで、Tは一定なので省略して、
x[n]&chf=bg,s,ffffff00)
- あぁ、これは最初のフィルタの後半部分と一緒だね。なるほど〜やっぱりローパスフィルタだったんだ。
- うーん、RCフィルタをディジタルフィルタで記述出来るっていうのは、自分的にはちょっとしたカルチャーショックだなぁ。
- さらに、本をなぞってみよう。
- 単位ステップ信号の応答を考える。これは矩形波の応答と同じだから実際にも良くある信号だ。
- これはお馴染みの積分回路の過渡応答ってやつだね。微分方程式を解くとこうなる。
 = 1 - exp \left( -\frac{t}{CR} \right), \qquad t \ge 0&chf=bg,s,ffffff00)
- ディジタルフィルタの場合は、やはり差分方程式を解いて、以下のようになるらしい。
- もちろん、初期値x=1,y=0として、差分方程式に当てはめて順に数値計算しても同じ。

- アナログでもディジタルでも同じ1ってところが面白いなぁ。
- さぁ、いよいよどんな特性をもったフィルタなのかってことを知ることが出来そうだ。
 = \frac{Y(z)}{X(z)}&chf=bg,s,ffffff00)
- H(z)が伝達関数、X(z)が入力信号x[n]のz変換、Y(z)が出力信号y[n]のz変換
ここで、z変換というのが出てきたが、以下の性質を持っている
 = z^{-k}Z(x[n])&chf=bg,s,ffffff00)
- これを基に、差分方程式をz変換して、伝達関数を求める。
 = \frac{Y(z)}{X(z)} = \frac{1-a}{1-az^{-1}}&chf=bg,s,ffffff00)
- ふーん、なるほどね。って、なんだか全然分からないけど。。。
- やっぱり、周波数応答を見ないと分かんないよね。難しい理屈は置いといて、zを以下のように置き換えれば、周波数応答が求められるらしい。
 = \frac{1-a}{1-ae^{-j{\omega}T}}&chf=bg,s,ffffff00)
- なんか見慣れた式になってきた。これは複素数が入っているので、極形式、つまり絶対値と偏角で表す。

 = tan^{-1}\frac{Im\left[H(e^{j{\omega}T}\right]}{Re\left[H(e^{j{\omega}T}\right]} = -tan^{-1}\frac{a\sin{{\omega}T}}{1-a\cos{{\omega}T}}&chf=bg,s,ffffff00)
- ここ2を参考に(というより、そのまんまだが。。。)Javaで計算してみました3。(T=0.001,a=0.5)
- サンプリング周波数が1kHzだから、500Hzぐらいまでしか使えないというように見れば、ちゃんとローパスになってることが分かる。
- ん、でも標本化周波数で同じ特性が繰返されるはずじゃないのかなぁ。何か間違っているのか4な?
- サーバクラッシュで、Javaが使えなくなったので、グラフはMaximaで改めて計算しなおしました。(130813追記)
1ディジタルの場合は、aがマイナスもアリなのでちょっと違うらしい。
2リンク先が無くなってしまったので、やり方も分からなくなってしまいました。。
3計算式を完全に理解してないので、間違ってるかも。
4これは、Javaで計算した時はそう思ったんだけど、Maximaで計算したグラフは、ちゃんと繰り返しになってるので、計算誤差があったと思われる。
[top]
 = \frac{1-e^{-5j{\omega}T}}{5(1-e^{-j{\omega}T})}&chf=bg,s,ffffff00)
- あぁ、計算出来ない→計算苦手。複素指数関数を三角関数に変換するソフトでもないかなぁ。
- Mathematicaとかにはありそうなんだけどね。それだけでも計算出来れば良いんだけど。。。
- これは、Maximaなら無理やり数値計算してしまうことができることがわかったけど、それはまた別の機会に。。。(130813追記)
[top]
[電子工作関連に戻る]