第16章

ディジタルフィルタの設計

この章のねらい

  • フィルタの仕様(通過域・阻止域・リップル・減衰量)とトレランスマスクを読める
  • 窓関数法でFIRローパスを設計する手順を実行できる
  • インパルス不変変換と双線形変換の違い(エイリアシングとワーピング)を説明できる

16.1 仕様と設計方針

やる夫

前章で「フィルタを設計する」って予告してたお。でも、設計って具体的に何を決めるんだお? いきなり極を置けって言われても困るお。

やらない夫

まず仕様を決めるところから始まる。ローパスフィルタを例にすると、決めるべきは主に4つだ。

  • 通過域端 ωp\omega_p: ここまでの低い周波数は通したい
  • 阻止域端 ωs\omega_s: ここから上の高い周波数は止めたい
  • 通過域リップル: 通過域で許せる利得のばらつき
  • 阻止域減衰量: 阻止域でどれだけ小さく抑えたいか(dB)

この4つを図にしたものをトレランスマスク(許容域の型)という。「特性曲線がこのマスクの白い部分を通れば合格」という枠だ。

やる夫

通過域端と阻止域端のあいだは何なんだお? ωp\omega_p から ωs\omega_s まで隙間があるお。

やらない夫

そこは遷移帯だ。利得が「通す」から「止める」へ移り変わる坂道で、ここは特性を問わない自由地帯にしておく。なぜか分かるか?

やる夫

うーん…。坂道を急にしようとすると無理がかかる、とか?

やらない夫

正解に近い。理想は「ωp\omega_p で利得1のままストンと落ちて、すぐ次の点で0」という壁みたいな特性だ。でも、その理想LPFは実現できない。理由は2つある。

やる夫

2つもダメな理由があるのかお。

やらない夫

ひとつ、理想LPFのインパルス応答は無限に長く続く(後で見るが sinc 関数だ)。有限の計算で打ち切るしかない。ふたつ、その sinc は時刻0より前にも値を持つ、つまり非因果的だ。未来の入力を使わないと作れない。だから現実のフィルタは、必ずどこかで妥協して遷移帯を持つ。設計とは「仕様を満たす範囲で、できるだけ理想に近づける妥協の技術」なんだ。

16.2 FIR窓関数設計

やらない夫

まず FIR の設計から。発想はシンプルで、「理想LPFのインパルス応答を求めて、それを有限長で切り出す」だ。

理想LPF(カットオフ ωc\omega_c)の周波数特性は、ω<ωc|\omega|<\omega_c で1、それ以外で0という箱型だ。これを逆フーリエ変換すると、インパルス応答が出る。

hd[n]=sin(ωcn)πn(16.1)h_d[n] = \frac{\sin(\omega_c n)}{\pi n} \tag{16.1}
やる夫

それ、sinc だお! 第3章でやった「箱型のフーリエ変換は sinc」ってやつの…逆向きだお!

やらない夫

そう、第3章の知識がそのまま効く。周波数領域の箱型 ⇄ 時間領域の sinc という対応の、時間側を見ているわけだ。ところがこの hd[n]h_d[n] は両側に無限に伸びる。だから有限長で打ち切る。一番素朴なのは、MnM-M \le n \le M の範囲だけ残して両端をバッサリ切る方法だ。これは矩形窓を掛けたことに相当する。

やる夫

バッサリ切るだけなら簡単だお。それで何か問題が?

やらない夫

第11章を思い出せ。信号を矩形窓で切ると、スペクトルに sinc 状の裾(サイドローブ)が漏れ出てくる。同じことがここでも起きて、フィルタの周波数特性にリップル(ギザギザ)が乗る。とくに阻止域の減衰が浅くなって、止めたい周波数が漏れる。

やる夫

第11章の窓の話がここで返ってくるのかお。じゃあ、滑らかな窓を使えば…

やらない夫

そういうことだ。ハミング窓やブラックマン窓のような、両端でなだらかに0へ落ちる窓を掛ければ、サイドローブが抑えられて阻止域が深くなる。代わりに遷移帯が少し広がる、というトレードオフがある。手順をまとめるとこうだ。

  1. 仕様からカットオフ ωc\omega_c を決める(通過域端と阻止域端の中間あたり)
  2. 式 (16.1) で理想インパルス応答 hd[n]h_d[n] を計算する
  3. 必要なタップ数 NN を決める(多いほど遷移帯が急峻になる)
  4. 中心 M=(N1)/2M=(N-1)/2 だけずらして因果的にし、窓 w[n]w[n] を掛ける: h[n]=hd[nM]w[n]h[n] = h_d[n-M]\,w[n]
  5. 周波数特性を確認し、仕様(トレランスマスク)を満たすまで NN や窓を調整する
やる夫

手順4で中心をずらすのは、さっき言った「非因果を因果にする」ためだお? sinc の中心を n=0n=0 から n=Mn=M に動かして、負の時刻の値を正の側に持ってくる。

やらない夫

よく繋げた。そのずらしぶん MM が、そのまま群遅延になる。前章でデモした「21タップで群遅延10」はこれだ。下のデモで、カットオフ・タップ数・窓を動かして、特性がどう変わるか確かめてみろ。

FIR WINDOW DESIGN INTERACTIVE
カットオフ・タップ数・窓を動かす。上のインパルス応答 h[n]、下の振幅特性(dB)が連動し、タップ数を増やすと遷移帯が急峻に、窓を矩形→ハミング→ブラックマンに変えると阻止域が深くなる(代わりに遷移帯はやや広がる)=タップ数で切れ味、窓でリップル/減衰量が決まると分かる。
やる夫

タップ数を増やすと、下のグラフの坂が立ってくるお! あと矩形窓だと阻止域がギザギザで浅いけど、ブラックマンにすると下までストンと落ちるお!

やらない夫

それが窓の効果だ。矩形窓は遷移帯が一番急だが、阻止域が約 -21dB までしか落ちない。ブラックマンは -74dB くらいまで落ちるが遷移帯は広い。仕様に合わせて選ぶ。

16.3 IIR間接設計

やる夫

FIR は分かったお。IIR はどう設計するんだお? 極があるぶん、ややこしそうだお。

やらない夫

IIR は直接 z 平面で極零点を置くのは難しい。そこで定番の作戦がある。「アナログの名設計を借りてくる」だ。

やる夫

アナログ? コンデンサとコイルの回路のことかお。なんでわざわざ古い世界から?

やらない夫

アナログフィルタには、何十年もかけて磨かれた名設計がある。バタワース、チェビシェフ、楕円フィルタ…。これらは「アナログ伝達関数 Ha(s)H_a(s)」として完成されている。これをディジタルの H(z)H(z)変換すれば、設計の苦労を丸ごと輸入できる(代表格バタワースの中身=最大限平坦の意味・極配置・次数の決め方は付録Bで扱う)。変換の方法が2つある。

16.3.1 インパルス不変変換

やらない夫

ひとつめはインパルス不変変換。アナログフィルタのインパルス応答 ha(t)h_a(t) を、サンプリング周期 TT で標本化して、それをそのままディジタルのインパルス応答にする。

h[n]=Tha(nT)(16.2)h[n] = T\, h_a(nT) \tag{16.2}
やる夫

時間波形をそのままサンプリングするだけかお。素直で分かりやすいお。

やらない夫

素直だが、弱点がある。第8章でやった標本化を思い出せ。時間波形をサンプリングすると、周波数領域ではスペクトルが周期的に繰り返される。アナログフィルタの周波数応答も同じく繰り返され、重なって混ざる。つまりエイリアシングが起きる。

やる夫

あー、サンプリングするんだから当然エイリアシングが付いてくるお…。高い周波数まで伸びてるフィルタだと致命的だお。

やらない夫

そのとおり。だからインパルス不変変換は、阻止域でしっかり減衰しているローパスには使えるが、ハイパスやバンドストップには使えない(高域が折り返してきて潰れる)。用途が限られるんだ。

16.3.2 双線形変換

やらない夫

そこで主役になるのが双線形変換だ。ss から zz への変換をこう定義する。

s=2T1z11+z1(16.3)s = \frac{2}{T}\cdot\frac{1 - z^{-1}}{1 + z^{-1}} \tag{16.3}

この変換のすごいところは、アナログの jΩj\Omega 軸(Ω\Omega00 から \infty)を、ディジタルの単位円の上半分(ω\omega00 から π\pi)に1対1で押し込むことだ。無限に広いアナログ周波数軸が、有限の単位円1周にきっちり収まる。

やる夫

無限を有限に折りたたむ…? じゃあエイリアシングは?

やらない夫

起きない。これが双線形変換の最大の長所だ。アナログ周波数が単位円から「はみ出して折り返す」ことがないから、混ざりようがない。

やる夫

うますぎる話だお。何か裏があるはずだお。

やらない夫

鋭い。裏はある。無限の軸を有限に押し込むということは、高い周波数ほどギューッと圧縮されるということだ。アナログ周波数 Ω\Omega とディジタル周波数 ω\omega の対応はこうなる。

Ω=2Ttan ⁣(ωT2)(16.4)\Omega = \frac{2}{T}\tan\!\left(\frac{\omega T}{2}\right) \tag{16.4}

低い周波数では tan\tan がほぼ直線だから Ωω\Omega \approx \omega でほぼ歪まないが、ω\omegaπ\pi に近づくと tan\tan が発散して Ω\Omega が急に伸びる。つまり周波数軸が非線形に歪む。これをワーピング(warping、ねじれ)という。

BILINEAR FREQUENCY WARP INTERACTIVE
横軸ディジタルω・縦軸アナログΩ。緑の曲線が双線形変換の対応 Ω=tan(ωT/2)で、低域は破線(歪みなしΩ=ω)にほぼ沿うが高域ほど上へ反る=高周波ほど圧縮されるワーピングが見える。プリワーピングONにすると、ねじれを見越して逆算し狙いの周波数へ命中させる補正が確かめられる。
やる夫

低いところは破線(歪みなしの線)とほぼ重なってるけど、右にいくほど緑の曲線がグイッと持ち上がるお。これが「高周波ほど圧縮」かお。

やらない夫

そうだ。困るのは、たとえば「ディジタルで ωp\omega_p にカットオフを置きたい」と思ってアナログ側でも素朴に Ω=ωp\Omega = \omega_p で設計すると、ワーピングのせいでズレた場所にカットオフが来てしまうことだ。

やる夫

それは困るお。狙ったところに来ないフィルタなんて使えないお。

やらない夫

だからプリワーピングで先回りする。式 (16.4) を逆に使って、「最終的に ωp\omega_p に来てほしいなら、アナログ側ではあらかじめ Ω=2Ttan(ωpT/2)\Omega' = \frac{2}{T}\tan(\omega_p T/2) で設計しておく」。歪むぶんを見越して、ねじれた先のゴールから逆算するわけだ。デモのチェックボックスをONにすると、補正後にちゃんと狙いの周波数へ命中する様子が見える。

やる夫

カーブを見越して投げる、みたいな話だお。ワーピングは欠点だけど、計算でちゃんと打ち消せるなら、エイリアシングが無いぶん双線形のほうが安心だお。

やらない夫

その判断でいい。実務では、エイリアシングの心配がない双線形変換が IIR 設計の標準になっている。アナログの名設計(バタワースの導出は付録B)を双線形でディジタル化する、という流れを押さえておけ。

この章のまとめ
  • フィルタ設計はまず仕様(通過域端・阻止域端・リップル・減衰量=トレランスマスク)を決める。理想LPFは非因果かつ無限長で実現不能
  • FIR窓関数設計: 理想LPFのインパルス応答 sinc(式16.1)を、中心をずらして窓で切り出す。タップ数で遷移帯の急峻さ、窓で阻止域の深さ/リップルが決まる。必ず線形位相にできる
  • IIR間接設計はアナログの名設計を変換して輸入する。インパルス不変変換は素直だがエイリアシングがありHPF不可
  • 双線形変換 s=2T1z11+z1s=\frac{2}{T}\frac{1-z^{-1}}{1+z^{-1}}jΩj\Omega 軸全体を単位円1周に写すのでエイリアシング無し。代償に周波数軸が歪む(ワーピング Ω=2Ttan(ωT/2)\Omega=\frac{2}{T}\tan(\omega T/2))が、プリワーピングで狙いの周波数に補正できる