第16章
ディジタルフィルタの設計
この章のねらい
- フィルタの仕様(通過域・阻止域・リップル・減衰量)とトレランスマスクを読める
- 窓関数法でFIRローパスを設計する手順を実行できる
- インパルス不変変換と双線形変換の違い(エイリアシングとワーピング)を説明できる
16.1 仕様と設計方針
前章で「フィルタを設計する」って予告してたお。でも、設計って具体的に何を決めるんだお? いきなり極を置けって言われても困るお。
まず仕様を決めるところから始まる。ローパスフィルタを例にすると、決めるべきは主に4つだ。
- 通過域端 : ここまでの低い周波数は通したい
- 阻止域端 : ここから上の高い周波数は止めたい
- 通過域リップル: 通過域で許せる利得のばらつき
- 阻止域減衰量: 阻止域でどれだけ小さく抑えたいか(dB)
この4つを図にしたものをトレランスマスク(許容域の型)という。「特性曲線がこのマスクの白い部分を通れば合格」という枠だ。
通過域端と阻止域端のあいだは何なんだお? から まで隙間があるお。
そこは遷移帯だ。利得が「通す」から「止める」へ移り変わる坂道で、ここは特性を問わない自由地帯にしておく。なぜか分かるか?
うーん…。坂道を急にしようとすると無理がかかる、とか?
正解に近い。理想は「 で利得1のままストンと落ちて、すぐ次の点で0」という壁みたいな特性だ。でも、その理想LPFは実現できない。理由は2つある。
2つもダメな理由があるのかお。
ひとつ、理想LPFのインパルス応答は無限に長く続く(後で見るが sinc 関数だ)。有限の計算で打ち切るしかない。ふたつ、その sinc は時刻0より前にも値を持つ、つまり非因果的だ。未来の入力を使わないと作れない。だから現実のフィルタは、必ずどこかで妥協して遷移帯を持つ。設計とは「仕様を満たす範囲で、できるだけ理想に近づける妥協の技術」なんだ。
16.2 FIR窓関数設計
まず FIR の設計から。発想はシンプルで、「理想LPFのインパルス応答を求めて、それを有限長で切り出す」だ。
理想LPF(カットオフ )の周波数特性は、 で1、それ以外で0という箱型だ。これを逆フーリエ変換すると、インパルス応答が出る。
それ、sinc だお! 第3章でやった「箱型のフーリエ変換は sinc」ってやつの…逆向きだお!
そう、第3章の知識がそのまま効く。周波数領域の箱型 ⇄ 時間領域の sinc という対応の、時間側を見ているわけだ。ところがこの は両側に無限に伸びる。だから有限長で打ち切る。一番素朴なのは、 の範囲だけ残して両端をバッサリ切る方法だ。これは矩形窓を掛けたことに相当する。
バッサリ切るだけなら簡単だお。それで何か問題が?
第11章を思い出せ。信号を矩形窓で切ると、スペクトルに sinc 状の裾(サイドローブ)が漏れ出てくる。同じことがここでも起きて、フィルタの周波数特性にリップル(ギザギザ)が乗る。とくに阻止域の減衰が浅くなって、止めたい周波数が漏れる。
第11章の窓の話がここで返ってくるのかお。じゃあ、滑らかな窓を使えば…
そういうことだ。ハミング窓やブラックマン窓のような、両端でなだらかに0へ落ちる窓を掛ければ、サイドローブが抑えられて阻止域が深くなる。代わりに遷移帯が少し広がる、というトレードオフがある。手順をまとめるとこうだ。
- 仕様からカットオフ を決める(通過域端と阻止域端の中間あたり)
- 式 (16.1) で理想インパルス応答 を計算する
- 必要なタップ数 を決める(多いほど遷移帯が急峻になる)
- 中心 だけずらして因果的にし、窓 を掛ける:
- 周波数特性を確認し、仕様(トレランスマスク)を満たすまで や窓を調整する
手順4で中心をずらすのは、さっき言った「非因果を因果にする」ためだお? sinc の中心を から に動かして、負の時刻の値を正の側に持ってくる。
よく繋げた。そのずらしぶん が、そのまま群遅延になる。前章でデモした「21タップで群遅延10」はこれだ。下のデモで、カットオフ・タップ数・窓を動かして、特性がどう変わるか確かめてみろ。
タップ数を増やすと、下のグラフの坂が立ってくるお! あと矩形窓だと阻止域がギザギザで浅いけど、ブラックマンにすると下までストンと落ちるお!
それが窓の効果だ。矩形窓は遷移帯が一番急だが、阻止域が約 -21dB までしか落ちない。ブラックマンは -74dB くらいまで落ちるが遷移帯は広い。仕様に合わせて選ぶ。
16.3 IIR間接設計
FIR は分かったお。IIR はどう設計するんだお? 極があるぶん、ややこしそうだお。
IIR は直接 z 平面で極零点を置くのは難しい。そこで定番の作戦がある。「アナログの名設計を借りてくる」だ。
アナログ? コンデンサとコイルの回路のことかお。なんでわざわざ古い世界から?
アナログフィルタには、何十年もかけて磨かれた名設計がある。バタワース、チェビシェフ、楕円フィルタ…。これらは「アナログ伝達関数 」として完成されている。これをディジタルの に変換すれば、設計の苦労を丸ごと輸入できる(代表格バタワースの中身=最大限平坦の意味・極配置・次数の決め方は付録Bで扱う)。変換の方法が2つある。
16.3.1 インパルス不変変換
ひとつめはインパルス不変変換。アナログフィルタのインパルス応答 を、サンプリング周期 で標本化して、それをそのままディジタルのインパルス応答にする。
時間波形をそのままサンプリングするだけかお。素直で分かりやすいお。
素直だが、弱点がある。第8章でやった標本化を思い出せ。時間波形をサンプリングすると、周波数領域ではスペクトルが周期的に繰り返される。アナログフィルタの周波数応答も同じく繰り返され、重なって混ざる。つまりエイリアシングが起きる。
あー、サンプリングするんだから当然エイリアシングが付いてくるお…。高い周波数まで伸びてるフィルタだと致命的だお。
そのとおり。だからインパルス不変変換は、阻止域でしっかり減衰しているローパスには使えるが、ハイパスやバンドストップには使えない(高域が折り返してきて潰れる)。用途が限られるんだ。
16.3.2 双線形変換
そこで主役になるのが双線形変換だ。 から への変換をこう定義する。
この変換のすごいところは、アナログの 軸( は から )を、ディジタルの単位円の上半分( は から )に1対1で押し込むことだ。無限に広いアナログ周波数軸が、有限の単位円1周にきっちり収まる。
無限を有限に折りたたむ…? じゃあエイリアシングは?
起きない。これが双線形変換の最大の長所だ。アナログ周波数が単位円から「はみ出して折り返す」ことがないから、混ざりようがない。
うますぎる話だお。何か裏があるはずだお。
鋭い。裏はある。無限の軸を有限に押し込むということは、高い周波数ほどギューッと圧縮されるということだ。アナログ周波数 とディジタル周波数 の対応はこうなる。
低い周波数では がほぼ直線だから でほぼ歪まないが、 が に近づくと が発散して が急に伸びる。つまり周波数軸が非線形に歪む。これをワーピング(warping、ねじれ)という。
低いところは破線(歪みなしの線)とほぼ重なってるけど、右にいくほど緑の曲線がグイッと持ち上がるお。これが「高周波ほど圧縮」かお。
そうだ。困るのは、たとえば「ディジタルで にカットオフを置きたい」と思ってアナログ側でも素朴に で設計すると、ワーピングのせいでズレた場所にカットオフが来てしまうことだ。
それは困るお。狙ったところに来ないフィルタなんて使えないお。
だからプリワーピングで先回りする。式 (16.4) を逆に使って、「最終的に に来てほしいなら、アナログ側ではあらかじめ で設計しておく」。歪むぶんを見越して、ねじれた先のゴールから逆算するわけだ。デモのチェックボックスをONにすると、補正後にちゃんと狙いの周波数へ命中する様子が見える。
カーブを見越して投げる、みたいな話だお。ワーピングは欠点だけど、計算でちゃんと打ち消せるなら、エイリアシングが無いぶん双線形のほうが安心だお。
その判断でいい。実務では、エイリアシングの心配がない双線形変換が IIR 設計の標準になっている。アナログの名設計(バタワースの導出は付録B)を双線形でディジタル化する、という流れを押さえておけ。
- フィルタ設計はまず仕様(通過域端・阻止域端・リップル・減衰量=トレランスマスク)を決める。理想LPFは非因果かつ無限長で実現不能
- FIR窓関数設計: 理想LPFのインパルス応答 sinc(式16.1)を、中心をずらして窓で切り出す。タップ数で遷移帯の急峻さ、窓で阻止域の深さ/リップルが決まる。必ず線形位相にできる
- IIR間接設計はアナログの名設計を変換して輸入する。インパルス不変変換は素直だがエイリアシングがありHPF不可
- 双線形変換 は 軸全体を単位円1周に写すのでエイリアシング無し。代償に周波数軸が歪む(ワーピング )が、プリワーピングで狙いの周波数に補正できる