第15章

ディジタルフィルタの解析

この章のねらい

  • H(z) を z=e^{jω} で評価すると周波数特性になることを理解する
  • 極・零点の配置から振幅特性の山谷を直観的に読めるようになる
  • 安定性の条件(極が単位円内)と線形位相・群遅延の意味を説明できる

15.1 周波数特性

やる夫

前の章で出てきた伝達関数 H(z)H(z) ってやつ、結局あれは何を表してるんだお? 入力と出力の比、みたいな曖昧な理解で止まってるお。

やらない夫

そこを今日ハッキリさせる。差分方程式で書かれた離散時間システムは、z 変換すると分数の形になる。

H(z)=B(z)A(z)=b0+b1z1++bMzM1+a1z1++aNzN(15.1)H(z) = \frac{B(z)}{A(z)} = \frac{b_0 + b_1 z^{-1} + \dots + b_M z^{-M}}{1 + a_1 z^{-1} + \dots + a_N z^{-N}} \tag{15.1}

これが伝達関数だ。で、ここからが本題。zz単位円上の点 z=ejωz = e^{j\omega} を代入すると、何が起きると思う?

やる夫

z=ejωz = e^{j\omega} …。第2章でやった、半径1で角度 ω\omega の回転する点だお。それを代入する…?

やらない夫

そうだ。代入した H(ejω)H(e^{j\omega})周波数応答そのものになる。つまり「角周波数 ω\omega の正弦波を入れたとき、出力がどれだけ大きくなって(振幅)、どれだけ位相がずれるか(位相)」を、複素数1個で表したものだ。

H(ejω)=H(ejω)ejH(ejω)(15.2)H(e^{j\omega}) = |H(e^{j\omega})|\, e^{j\angle H(e^{j\omega})} \tag{15.2}

絶対値 H(ejω)|H(e^{j\omega})|振幅特性、偏角 H(ejω)\angle H(e^{j\omega})位相特性だ。

やる夫

なんで単位円上を選ぶんだお? zz は複素平面のどこにでも置けるはずだお。

やらない夫

いい質問だ。z=rejωz = re^{j\omega} と書いたとき、r=1r=1 の円周がちょうど「定常的な正弦波入力」に対応するからだ。r>1r>1r<1r<1 は増大・減衰する信号に対応する。フィルタにかける入力は基本的に「ずっと続く正弦波」を想定するから、その振る舞いを見るには単位円の上を一周すれば十分なんだ。ω\omega00 から π\pi まで動かせば、直流から最高周波数(ナイキスト)までの応答が全部見える。

やる夫

なるほどだお。zz 平面全体のうち、実際に使うのは円周だけってことかお。

15.2 極と零点

やらない夫

ここで式 (15.1) の分子 B(z)B(z) と分母 A(z)A(z) を、それぞれ根の積に因数分解する。

H(z)=gi=1M(zzi)k=1N(zpk)(15.3)H(z) = g\,\frac{\prod_{i=1}^{M}(z - z_i)}{\prod_{k=1}^{N}(z - p_k)} \tag{15.3}

分子を 0 にする ziz_i零点(zero)、分母を 0 にする pkp_k(pole)という。gg はゲイン定数だ。

やる夫

零点では分子が 0 だから H=0H=0、極では分母が 0 だから HH が無限大に飛ぶ、ってことかお。名前のまんまだお。

やらない夫

そのとおり。で、ここからが今日いちばん見てほしいところだ。式 (15.3) に z=ejωz = e^{j\omega} を代入して絶対値をとると、こうなる。

H(ejω)=gi=1Mejωzik=1Nejωpk(15.4)|H(e^{j\omega})| = |g|\,\frac{\prod_{i=1}^{M} |e^{j\omega} - z_i|}{\prod_{k=1}^{N} |e^{j\omega} - p_k|} \tag{15.4}

この ejωzi|e^{j\omega} - z_i| は何だと思う? 複素平面上の2点間の距離だ。

やる夫

距離? あ、ejωe^{j\omega} は単位円上の点で、ziz_i は零点の場所だから…単位円上の点から零点までの距離だお!

やらない夫

そういうことだ。つまり振幅特性はこう読める。

単位円上を ω\omega に沿って歩いていく点から、各零点までの距離の積を、各極までの距離の積で割ったもの。

歩いている点が極の近くを通ると、分母の距離が小さくなって H|H| が大きくなる。つまりができる。逆に零点の近くを通ると分子の距離が小さくなって H|H| が小さくなる。だ。

やる夫

おおー。極が「引き寄せる磁石」で、零点が「押し下げる重し」みたいなイメージだお。極を単位円のすぐ内側に置けば、その角度のあたりに鋭い山が立つってことかお。

やらない夫

その理解で完璧だ。言葉だけだと半信半疑だろうから、自分で極と零点をつまんで動かせる装置を用意した。これが本章の目玉だ。

POLE-ZERO PLAYGROUND INTERACTIVE
左の z 平面で × (極)や ○ (零点)をドラッグすると、右の振幅特性 |H| がリアルタイムに変わる。極を単位円のキワに寄せると鋭い山、零点を円上に置くと深い谷=極の角度が山の周波数、円への近さが山の鋭さを決めると体感できる。極を円の外に出すと「不安定!」が点灯し、安定性は極だけが握ると分かる。
やる夫

うおおっ、極を円のフチに近づけたら、右のグラフにニョキッと山が生えたお! しかも極の角度を変えると、山の位置が左右に動くお! これ面白いお!

やらない夫

体で覚えたな。極の角度が山の出る周波数を決め、極の半径(円にどれだけ近いか)が山の鋭さを決める。フィルタ設計とは結局、「どこに極と零点を置けば欲しい形になるか」を考える作業なんだ。

15.3 安定性

やる夫

さっき極を円の外に出したら「不安定!」って出たお。あれは何が起きてるんだお?

やらない夫

第14章で、zz 変換の逆変換をやると極が rnr^n の形の時間波形を生むという話をしたな。極の位置を p=rejθp = re^{j\theta} とすると、対応する出力には rnr^n がかかる。ここで rr は極の半径、つまり原点からの距離だ。

やる夫

rnr^n …。nn は時間(サンプル番号)だお。rr が 1 より小さければ rnr^n はどんどん小さくなって消える。rr が 1 より大きいと…爆発するお!

やらない夫

そういうことだ。だから安定性の条件はシンプルだ。

因果的な離散時間システムが安定 ⇔ すべての極が単位円の内側(pk<1|p_k| < 1)にある。

極が一つでも円の外(または円上)に出ると、入力が有限でも出力が時間とともに発散する。さっきのデモで「不安定!」が出たのは、極の半径が 1 以上になったときだ。

やる夫

零点は外に出ても平気なのかお?

やらない夫

平気だ。零点は分子側、HH を 0 に近づける要素だから、どこにあっても発散はしない。安定性に効くのは極だけ。「極は檻の中、零点は自由」と覚えておけ。

15.4 線形位相特性

やらない夫

ここまで振幅特性ばかり見てきたが、位相特性も同じくらい大事だ。とくに線形位相という性質が重要になる。

やる夫

線形位相? 位相が直線ってことかお。位相が直線だと何が嬉しいんだお?

やらない夫

位相特性が H(ejω)=ωτ\angle H(e^{j\omega}) = -\omega \tau という、ω\omega に比例する直線だったとしよう。τ\tau は定数だ。このとき、入力の正弦波 ejωne^{j\omega n} は出力で

Hej(ωnωτ)=Hejω(nτ)(15.5)|H|\, e^{j(\omega n - \omega\tau)} = |H|\, e^{j\omega(n - \tau)} \tag{15.5}

になる。つまりどの周波数の成分も等しく τ\tau サンプルだけ遅れる。全部が同じだけ遅れるなら、波形の形は崩れない。ただ時間軸上を τ\tau ぶん平行移動するだけだ。

やる夫

なるほどだお。みんなで足並みそろえて遅れるから、隊列(波形)の形が保たれるんだお。逆に、周波数ごとに遅れ方がバラバラだと…

やらない夫

波形がぐにゃっと歪む。これを位相歪みという。音声や画像では、振幅特性が同じでも位相が乱れると質感が劣化する。だから線形位相が望ましい場面が多い。

ここで朗報だ。インパルス応答が左右対称な FIR フィルタは、厳密に線形位相にできる。 h[n]=h[N1n]h[n] = h[N-1-n] という対称性があれば、位相は必ず ω\omega の一次式になる。

やる夫

FIR は対称にすれば線形位相、と。じゃあ IIR はどうなんだお?

やらない夫

IIR は因果的なままでは厳密な線形位相にできない。これは IIR の宿命だ。フィードバック(分母の極)があると位相が必ず曲がる。だから「波形を崩したくない、計算量は多くてもいい」なら対称 FIR、「少ない計算で急峻な特性が欲しい、多少の位相歪みは許す」なら IIR、という使い分けになる。

15.5 群遅延

やる夫

「遅れ」の話が出てきたお。さっきの τ\tau は具体的にどう測るんだお?

やらない夫

そのために群遅延を定義する。位相特性を ω\omega で微分して符号を反転したものだ。

τ(ω)=ddωH(ejω)(15.6)\tau(\omega) = -\frac{d}{d\omega}\angle H(e^{j\omega}) \tag{15.6}

意味は「角周波数 ω\omega 付近の成分が、何サンプル遅れて出てくるか」だ。位相が直線 ωτ-\omega\tau なら、微分すると (τ)=τ-(-\tau) = \tau で、群遅延は全周波数で一定になる。これが線形位相の特徴だ。

やる夫

位相のグラフの「傾き」が遅れの量ってことかお。傾きが一定なら遅れも一定、傾きが場所で変われば遅れも周波数ごとにバラバラ…。

やらない夫

そのとおり。下のデモで、対称 FIR と IIR の位相特性と群遅延を並べてある。フィルタを切り替えて見比べてみろ。

PHASE & GROUP DELAY INTERACTIVE
フィルタを切り替えて、上の位相特性と下の群遅延を見比べる。対称FIR(21タップ)は位相がきれいな直線で群遅延が約10サンプルに平坦=全周波数が等しく遅れるので波形が崩れない。IIRにすると位相が曲がり群遅延が周波数で変動する=成分ごとに遅れ方が違って波形が歪む。
やる夫

ほんとだお! FIR のほうは群遅延が真っ平らで 10 のところにピッタリ張り付いてるお。IIR に変えると、にょろっと曲がるお。

やらない夫

その「10」は、21タップの対称 FIR の中心位置 M=(211)/2=10M = (21-1)/2 = 10 から来ている。対称フィルタは中心を境に折り返した形だから、ちょうど中心ぶんだけ一様に遅れる。きれいな数字になるだろ。

やる夫

極と零点で振幅の山谷を作って、位相が崩れないように対称にする…。フィルタを「設計する」っていうのが、だんだん具体的な作業に見えてきたお。

やらない夫

いい流れだ。解析の道具はこれで揃った。次章はいよいよ、欲しい特性から逆算してフィルタを設計する話に入る。

この章のまとめ
  • H(z)H(z)z=ejωz=e^{j\omega} を代入すると周波数応答 H(ejω)H(e^{j\omega}) になる。絶対値が振幅特性、偏角が位相特性
  • 振幅特性は「単位円上の点から各零点までの距離の積 ÷ 各極までの距離の積」。極の近くは山、零点の近くは谷
  • 安定性の条件はすべての極が単位円の内側pk<1|p_k|<1)。零点はどこにあってもよい
  • 位相が ωτ-\omega\tau の直線(線形位相)なら全周波数が等しく τ\tau 遅れ、波形が崩れない。対称FIRは線形位相にできるが、因果IIRはできない
  • 群遅延 τ(ω)=dH/dω\tau(\omega)=-d\angle H/d\omega は「周波数 ω\omega の成分が何サンプル遅れるか」。線形位相なら定数