12. ディジタルフィルタの基礎

12.1 周波数選択フィルタと線形時不変システム

やらない夫
前回は,入力信号にどんな周波数成分が含まれているかを分析する方法について考えた.今回はさらに一歩進めて,周波数成分を操作することを考えよう.

やる夫
音声の低音域をカットしたりとか,中音域を強調したりとか,そういうことだお.

やらない夫
そうだな.一般に,入力のうち欲しい成分だけを通過させて他を阻止する装置をフィルタと呼ぶ.特に注目するのは,周波数によって通過・阻止を決めるをもので,周波数選択フィルタなどと呼ぶ.例えば低域通過フィルタ,高域通過フィルタ,帯域通過フィルタ,帯域阻止フィルタなどに分類できる.よくアナログの電子回路として実現されたりしているわけだが,それをコンピュータで実装してやろうってことだな.

やる夫
でもまあ,前回の方法で入力信号を周波数スペクトルに分解できるわけだお.分解してから周波数ごとに成分を増やしたり減らしたりして,それをまた時間領域に逆変換で戻してやればいいんだお?

やらない夫
うーん,気持ちはわかるが,それはあまりいいアイディアとは言えないな.

やる夫
えーっ,何でだお?

やらない夫
前回得られたスペクトルは,あくまで元の信号に窓関数をかけたもののスペクトルだってことだ.元の信号のスペクトルからは歪んでしまっている.窓関数の影響を考慮してゴニョゴニョすることも考えられないわけではないが,いかにも回りくどい.

やる夫
ぐぬぬ.

やらない夫
それよりも,元の信号を入力として,フィルタをかけた後の信号を出力とするような「システム」を考える方がずっと筋がいい.

そもそもアナログフィルタはどうやってできているのかを考えると,抵抗とかキャパシタとかを使った電子回路だったりするわけで,連続時間の線形時不変システムなわけだ.同じ役割をするものをコンピュータを使って作りたいわけだから,離散時間の線形時不変システムを考えようというのが自然な発想だ.

やる夫
んー,時間信号から時間信号への変換を直接考えるってことかお? 周波数によってフィルタをかけることを考えるのに,周波数領域で考えなくていいのかお?

やらない夫
いや,もちろん周波数領域で考えた上で,どのような変換をするか定めることになる.鍵になるのは線形時不変システムの周波数応答の考え方だ.

さて復習だ.周波数応答ってどういうことだった?

やる夫
え,えーと,線形時不変システムにある周波数 $ \omega$ の振動 $ e^{j\omega n}$ を入力すると,式(8.21) の通り,同じ周波数の振動が $ H(\omega)$ 倍にっなて出て来るんだお.

$\displaystyle y[n]$ $\displaystyle = H(\omega) e^{j\omega n}$ (8.21)

つまり,一般の入力信号をスペクトルに分解して考えると,周波数 $ \omega$ の成分は振幅が $ \vert H(\omega)\vert$ 倍されて,位相が $ -\angle H(\omega)$ だけ遅れるんだったお.この $ H(\omega)$ が周波数応答ってやつだお.


\includegraphics[scale=0.5]{fig_conv/inout_sinusoidal.eps}

やらない夫
そうだったな.つまりそのシステムを通すことで,各周波数の成分がそれぞれどれだけ変化するかを表すのが周波数応答だ.てことは,この周波数応答を自由に設計できるなら,周波数選択フィルタになるんじゃないか?

やる夫
ん? あ,そうか.通過させたい周波数は残して,阻止したい周波数の応答を 0 にしてやればいいんだお.

やらない夫
というわけで,離散時間線形時不変システムの周波数応答を考えることで,周波数選択フィルタを考えることができそうだ.これ以降,ディジタルフィルタといったらそういうものを考えることとする.

論点としては,そうやって好き勝手に与えた周波数応答は本当に実現可能なのか,実現できるとしたらどうやって作ればいいのか,実現できないなら次善策はあるのか,とかを考えなくてはならないわけだな.

12.2 インパルス応答のたたみこみによるディジタルフィルタ

やらない夫
まずは,システムの所望の周波数応答 $ H(\omega)$ が与えられたときに,それが時間領域ではどういう操作に相当するかを考えよう.

やる夫
えーと,周波数応答ってのは,インパルス応答の離散時間フーリエ変換だったんだお.だから,与えられた周波数応答 $ H(\omega)$ を離散時間フーリエ逆変換すれば,インパルス応答 $ h[n]$ が得られるお.

$\displaystyle h[n] = {\text{DTFT}^{-1}}[H(\omega)]$ (12.1)

この $ h[n]$ をたたみこむのが,フィルタの仕事ってことになるお.

やらない夫
おお,冴えてるじゃないか.

やる夫
単にたたみこみをするだけでいいなら,実現可能とか不可能とかってのはどういうことなんだお?

やらない夫
そうだな.いくつかの観点がある.まずは因果性という概念だ.定義から話すと,すべての $ n < 0$ について $ h[n] = 0$ であるようなインパルス応答を持つシステムを因果的であるという.

やる夫
えーと,どういうことかお.

やらない夫
インパルス応答 $ h[n]$ の意味をもう一度確認しておこうか.時刻 0 に単位インパルスが入力されたときに現れる出力がインパルス応答だった.


\includegraphics[scale=0.5]{fig_dfbasic/causal.eps}

じゃあ,$ n < 0$ のときに $ h[n]$ の値が 0 じゃないってのはどういうことになる?

やる夫
んー,あ,入力がまだ来てないのに応答が現れることになるお.


\includegraphics[scale=0.5]{fig_dfbasic/noncausal.eps}

やらない夫
そう,言い換えると,未来の入力を先取りして応答するシステムだということになる.そういうフィルタは,少なくともリアルタイムに動作するシステムとしては実現不可能だ.

やる夫
リアルタイムじゃない場合ってどういうことだお?

やらない夫
例えば,あらかじめ入力信号をすべて記録しておいて,後から処理するような場合だな.そういう場合も「仮の現在時刻」を進めながら入力信号を読み出して,フィルタ処理をしていくことはできるわけだ.その場合,仮の現在時刻よりも未来の入力信号も既に手に入っているので,使うことができる.

やる夫
そういう特殊な状況ではないリアルタイムなシステムとしては,因果的なフィルタしか実現できないってわけだお.

やらない夫
そういうことだな.だから我々は主として因果的なフィルタを考えていくことにする.因果的な場合,たたみこみで総和を取る際のインデックスは以下のように取ることもできることにも注意しておこう.


やる夫
えーと 1行目は,$ m$ が負のときに $ h[m]$ が 0 になってその項は消えるから,$ m =
0$ 以降の総和でいいってことだお.2行目は…どういうことかお?

やらない夫
基本的には同じことだ.$ n - m < 0$ になる項が消えるわけなので,$ m >
n$ は総和範囲から外していいってことだな.あるいは $ x[m]$ の方に着目して,$ m >
n$ であるような $ x[m]$,すなわち未来の入力は,出力に寄与しないと理解する方がわかりやすいかもしれない.

やる夫
あー,そっちの方がピンと来るお.ともかく,因果的なフィルタであれば実際に作ることができるってことでいいのかお.

やらない夫
ここでまた別の観点の登場だ.ちょっとゆっくり考えてみて欲しい.因果的な場合のみを考えることとして,式(12.2)とか(12.3)とかのたたみこみの計算は,本当に常に実行可能か?

やる夫
ん? えーと,単に積の総和を計算するだけ…,あ,そっか,無限の総和をしなきゃいけないお.

やらない夫
そう,つまり,インパルス応答 $ h[n]$ が有限の長さの区間でのみ値を持っていてその他は 0,というような場合じゃないと,たたみこみの計算をそのまま実行するのは不可能ってことだな.

ディジタルフィルタを分類して考える上では,この観点も重要だ.重要なので例によって名前がついている.インパルス応答 (のうち 0 でない部分) の長さが有限のものを FIR (Finite Impulse Response) フィルタと呼ぶ.


\includegraphics[scale=0.5]{fig_dfbasic/fir.eps}

インパルス応答が時刻 $ M$ まで続くとすると,出力は


と有限の手順で計算できる.

一方,インパルス応答 (のうち 0 でない部分) が無限に続くものを IIR (Infinite Impulse Response) フィルタと呼ぶ.


\includegraphics[scale=0.5]{fig_dfbasic/iir.eps}

やる夫
FIR フィルタはそのまま計算できるけど,IIR フィルタは無理だってことだお.

やらない夫
ざっくり言うとそうなんだが,ちょっと不正確だ.もう少し慎重に考えると,いくら FIR でも長すぎたら現実的には計算が終わらないとか,もちろんそういう場合はある.そういう話は置いといて,FIR フィルタなら少なくとも原理上は有限の計算資源で直接計算可能ってことだな.

それから,IIR フィルタの計算が無理ってのは,あくまで「たたみこみを直接計算するのは無理」って意味なので要注意だ.計算のしかたを工夫すると,無理じゃなくなる場合がある.それを次に見ていこう.

12.3 線形差分方程式によるディジタルフィルタ

やる夫
えー,無限長の $ h[n]$ のたたみこみが有限の手順で実行できるってことかお.そんなことどうやったらできるんだお?

やらない夫
そうだな,具体例を見ていくのがわかりやすいと思う.例えば

$\displaystyle h[n] = \left\{\begin{array}{ll} \alpha^n, & n \geq 0 0, & \text{otherwise} \end{array}\right.$ (12.5)

というインパルス応答のシステムを考えてみようか.

やる夫
$ \alpha$ ってのは定数かお?

やらない夫
ああ,定数だ.とりあえずどんな数でもいいんだが 0 ではないとしておこう.因果的なシステムになっていることも注意して欲しい.

やる夫
そっか,単に $ h[n] = \alpha^n$ って書いてしまうと因果的にならないんだお.場合分け面倒くさいお.

やらない夫
ああ,確かに面倒なので,同じことをよくこういう風に書く.

$\displaystyle h[n] = \alpha^n u_0[n]$ (12.6)

ここで $ u_0[n]$ は単位ステップ関数と呼ばれるもので,

$\displaystyle u_0[n] = \left\{\begin{array}{ll} 1, & n \geq 0 0, & \text{otherwise} \end{array}\right.$ (12.7)

と定義しておくことにする.

やる夫
あー,制御工学の授業で連続時間の単位ステップなら出てきたのでよくわかるお.なるほど,場合分けで書くより,$ u_0[n]$ をかける方がいくぶん見やすいお.

やらない夫
この $ u_0[n]$ は今後も因果的なシステムを考えるときにちょくちょく使うので覚えておいてくれ.まあ書き方はいずれにせよ,今重要なのは,このシステムは IIR であるということだ.

やる夫
$ \alpha \neq 0$ だから,時間 $ n$ を無限大まで進めても $ h[n]$ は 0 にはならないお.インパルス応答が無限に続くから確かに IIR だお.

やらない夫
このシステムに $ x[n]$ を入力したときの出力を $ y[n]$ としよう.$ y[n]$ はたたみこみを使ってこう書けるが,

$\displaystyle y[n]$ $\displaystyle = \sum_{m = -\infty}^{\infty} \alpha^m u_0[m] x[n - m]$ (12.8)
  $\displaystyle = \sum_{m = 0}^{\infty} \alpha^m x[n - m]$ (12.9)

IIR なので無限和の計算が必要だ.現実には実行できない.

やる夫
そうだお.これをどうするんだお?

やらない夫
まず,$ m =
0$ の項とそれ以外に分ける.

$\displaystyle y[n]$ $\displaystyle = \sum_{m = 1}^{\infty} \alpha^m x[n - m] + \alpha^0 x[n]$ (12.10)

それから $ l = m - 1$ という変数変換をしてみよう.

$\displaystyle y[n]$ $\displaystyle = \left\{ \sum_{l = 0}^{\infty} \alpha^{l+1} x[n - (l + 1)] \right\} + x[n]$ (12.11)
  $\displaystyle = \alpha \left\{ \sum_{l = 0}^{\infty} \alpha^l x[(n - 1) - l] \right\} + x[n]$ (12.12)

さて,この中カッコ { } の中を式(12.9) と見比べてみてくれ.何か気づかないか?

やる夫
んん? あ, $ \sum_{l = 0}^{\infty} \alpha^l x[(n - 1) - l] = y[n - 1]$ って書けるってことかお? つまり,


が成り立っていることになるお.

やらない夫
そう,この式を使えば $ y[n]$ の計算に無限和は必要ない,というか,定数倍1回と加算1回で済んでしまうな.入力信号 $ x[n]$ だけじゃなく,前の時刻の計算結果 $ y[n-1]$ も計算に再利用してやることことでこれが可能になっている.

やる夫
えーと,つまり $ y$ の初期値が例えば $ y[0] = 0$ とか決まっていたとして,そこから $ y[1] = \alpha y[0] + x[1]$ $ y[2] = \alpha y[1] +
x[2]$,… って順繰りに計算していくってことだお.漸化式みたいなもんだお.

やらない夫
今わかったことは,式(12.9) みたいに無限に続くインパルス応答のたたみこみと等価なものを,過去の出力を再帰的に利用することで有限の手続きで計算できる場合があるってことだ.

やる夫
手品みたいだお.

やらない夫
この例では 1 時刻前の出力しか使わなかったし,入力信号も現時刻のものしか使わなかった.これをもっと一般化したものを考えることができる.

$\displaystyle y[n]$ $\displaystyle = \sum_{k = 1}^{N} \alpha_k y[n - k] + \sum_{k = 0}^{M} b_k x[n - k]$ (12.14)

つまり $ y[n]$ を計算するために $ N$ 時刻前までの出力と,$ M$時刻前までの入力を遡って使うってことになる.もう少し対称性のある書き方をするなら, $ a_0 = 1$ $ a_k = -\alpha_k   (k \geq 1)$ と置いて


としてもよい.以降こっちの書き方をすることにしよう.

やる夫
この方程式を $ y[n]$ について解いたものを使って,順繰りに出力を計算していくことになるわけだお.

やらない夫
これが線形差分方程式によるディジタルフィルタの表現だ. $ M = N = 2$ の場合だと,こんな図を使って表すことができる.三角は定数倍を,四角に $ z^{-1}$ と書いているものは 1 時刻の遅延を表している.


\includegraphics[scale=0.5]{fig_dfbasic/block.eps}

やる夫
$ z^{-1}$ って何だお? なんでそれが遅延の意味になるんだお.

やらない夫
確かにまだ意味がわからないだろうな.後で z 変換というものを学ぶと理解できるようになる.今のところは単なる記号だと思ってくれればいい.

やる夫
気持ち悪いけど,そう思うことにしますお.とにかくこれでさっきの差分方程式が表されていることはわかるお.今後,ディジタルフィルタといえばこれのことを考えていくってことかお?

やらない夫
そうだな.有限長のたたみこみでは FIR フィルタしか実現できなかったのに対して,こうやって線形差分方程式を使うことにすると,より広い範囲の線形時不変システムを実現することができる.

やる夫
より広い…ってことは,有限長のたたみこみによる FIR フィルタもこの方程式の表現に含まれるってことかお?

やらない夫
ああ, $ a_k = 0  (k \geq 1)$ とすると

$\displaystyle y[n]$ $\displaystyle = \sum_{k = 0}^{M} b_k x[n - k]$ (12.16)

になるだろ.この場合を非再帰型という.ここで $ b_k = h[k]$ とすれば,式 (12.4) そのものになる.

やる夫
あ,なるほど.FIR フィルタならすべて表現可能になっているわけだお.

やらない夫
それらに加えて各 $ a_k$ を 0 じゃなくすることで,つまり再帰型にすることで,IIR フィルタも表現可能としているわけだ.

ただし,それでもあらゆる線形時不変システムが表現可能になったわけじゃないことに注意して欲しい.線形時不変システム全体のうち,現実に計算しやすいものとして式(12.15) のような線形差分方程式で表されるもののみを考えようということだ.その範囲内で,所望のディジタルフィルタとして機能するものを模索していくことになる.

まとめよう.

  • 周波数選択性を持つディジタルフィルタは,線形時不変システムによって実現することができる.そのフィルタ特性は,システムの周波数応答によって表される.
  • ディジタルフィルタの作用とは,そのインパルス応答 (= 周波数応答の離散時間フーリエ逆変換) を入力にたたみこむことである.
  • たたみこみを定義通りに直接計算するのは,FIR フィルタであれば可能だが,IIR フィルタでは不可能である.
  • 過去の出力を再帰的に利用することで,IIR フィルタの計算を有限の手順で行える場合がある.そのようなフィルタは,式 (12.15) のような線形差分方程式で一般に表現できる.以降は,そのように表現できる範囲のディジタルフィルタを議論していく.
  • ディジタルフィルタがリアルタイムに動作するものとして実現可能であるためには,因果的なインパルス応答を持つことが必要である.

やる夫
久々のまとめだお.

swk(at)ic.is.tohoku.ac.jp
2016.01.08