デジタルオーディオあれこれ

半田ごての人。紙と鉛筆だけではちょっと。

標本化定理を満たす、現実の理想フィルターとは如何なるものか。

 標本化つまりはデジタル化をした場合の欠点は、不要な高調波が無限に発生してしまう事。もっと本質的に考えるならば前回書いたように、不要な高調波を付け加えると特定のサンプリング周期での標本化で、取り込んでいない所のデータも含む全ての信号の再現が可能になる利点がある。その特定のサンプリング周期が、元の信号の持っている帯域の少なくとも二倍以上という制約。という訳なので、デジタル化した信号からは不要な高調波を取り除く必要がある。これが所謂ポストフィルターで、この性能がとても大事となる。

 

 数学的な解決法はとても単純。理想フィルターというものを使う。仮に音声用の20kHzのカットオフであるならば、0から20kHzまでが通過帯域で、20kHzから上は阻止帯域。遷移帯域はない。これは数学的には実現可能。96KHzでサンプリングしているのであれば、それに合わせたsinc関数を計算し、デジタル化した信号と畳み込み積分を行うと、出て来るのは0から20kHzまでの信号となり、不要な高調波は全て取れる。

 

 現実論としてこれは不可能であるし、全然実用的ではない。遷移帯域のない理想フィルターを必要とする応用例はまずないのだから。音声用であれば、遷移領域が6dB/octであるのか12dB/octであるのかに、かなりの意味がある。理想フィルターは、色気のない芸者のようなものでまずお座敷がかからない。ところが多くのフィルターに関する本は、この理想フィルターを原型としているのでほとんど実用には適さない。多分、実際の機器を設計する人は使ってない。

 

 もう少し実用的なソフトであったり、自分の用途に適したソフトを自作している筈。少なくとも、理想フィルターの延長で12dB/octとか24dB/octの特性は作れない。数学的な意味での理想フィルターは、現実論としては全くの役立たず。ここでのフィルターとは、基本的にデジタルフィルターの事。畳み込みは必ずしもデジタルである必要はないけれど、計算はDSPやFPGAを使うので、結果的にデジタルフィルターを使って不要な高調波を取り除く実用的な方法論、という意味。

 

 sinc関数は問題が山積するので無視して、普通に考える。初めにデジタルありき。sinc関数はフーリエ変換から始まって最終的にデジタル化する。この過程に問題が多過ぎて使い物にならず、徒に話がややこしくなる。初めからデジタルの逆DFFTを使えば、多くの問題は回避できて尚且つとても簡単。

 

 まずは必要な周波数特性のグラフを書く。24dB/octの特性が欲しければそのまま描く。ローパスであろうがバンドパスであろうがノッチフィルターであろうが関係ない。とにかく必要な特性を周波数軸で書く。唯一つ、サンプリング周波数とデジタルフィルターの次数で決まる解像度の制約のみがある。一般的に120dBの減衰量はゼロと考えて差し支えない。1024ぐらいの次数でそのぐらいは落ちるので、普通の音声用の理想フィルターは1024の次数で作れる。

 

 96kHzのサンプリングとするならば、解像度は96000/1024≒96Hz。実用的にはこれでほとんどの場合は足りる。標準的なFPGAの場合、無理なく2048までは上げられる。その上も FPGAの容量次第でどうにでもなるけれど、4096で足りない場合には、足りないのは工夫と考えるのが妥当。普通は1024で十分に理想フィルターになる。

 

 96Hzの解像度で必要なグラフを描いたなら、これは周波数軸の信号なので 逆DFFTで時間軸に変換すると、俗に言うインパルス応答というものが出て来る。このインパルス応答は当然ながら1024の係数になっている。細かく言うと、直線位相フィルターしか扱わないので1023なんだけど、足りない一個はゼロで埋めるので1024の係数。

 

 この係数が必要なデジタルフィルターの係数そのまんま。どうしてそうなるのかは、デジタルフィルターの本に数学的証明が乗っている。この逆DFFTはsinc関数を無理矢理窓関数で切り取るのと、基本的には同じだと思う。工学的数学は、純粋数学に薩摩の守だから、証明はしない。結果的に正しい事が証明と言えば証明。欲しいフィルターの特性に対して逆DFFTすれば良し。それだけのこと。例えばこんなの。

f:id:xx3stksm:20180712190044j:plain

 これは96kサンプリングで、20kカットオフのローパス。20.8kでは126dBも落ちるので、特性的には問題なし。sinc関数由来は、おそらく窓関数の関係で阻止帯域に山と谷が出来て好ましくない。ここまでスパッと落とすのもなかなか難しいと思う。普通に逆DFFTすれば、簡単に作れて勿論FPGAに実装できる形になっている。しかし、一件は全然落着していない。これは単なる初めの一歩。

 

 理想的なデジタルフィルターが出来たのだから、不要な高調波は快刀乱麻を断つと思いきや、実は何も解決していない。このフィルターを通すと、デジタル化された青の波形から不要な高調波が消えて元の赤になるはずが、全くならない。

 

f:id:xx3stksm:20180712190103j:plain

 求めた1024の係数と青のデジタル化された信号を畳み込むと、理論的には元の赤になる。それは嘘ではないけれど、実際に計算してみるとこうなる。ほんの少しだけ、申し訳程度のスズメの涙でゼロの所で僅かな差はあるものの、畳み込みの御利益はない。現実として何の変化も出ないのは正しい。

 ただ、これはシミュレーションなので、おそらく変化があったとしても赤と青のレベルの差が分かるだけで、その意味までは本質論として分からないと思う。この理想フィルターを通しても、ほとんど信号に変化がないので高調波の除去は無理であろうと言えるだけ。この辺りはちょっと数学の話になるので突っ込まない。とにかく、効果はゼロであるという事だけは間違いない。

 

f:id:xx3stksm:20180712195324j:plain

前に出てきた、青の96kサンプリングの12kの波形のスペクトルはこうなっている。96kサンプリングなので、この倍数の所に延々と高調波が連なる。レベルが落ちていくのは、DACの出力が零次ホールド特性で、本来の標本化関数の規定する波形とは異なるため。標本化関数は、下のスペクトルのように一瞬だけ存在するもので、DACの出力のように同じ値を保持しない。但し、この差が問題になる事はほとんどないので、気にする必要はない。延々と続く高調波という所がキモ。

 

f:id:xx3stksm:20180712195331j:plain

 フィルターを通しても意味がないとは、上の高調波が全て通過帯域にあるという意味。しかし1024次のフィルターは、既に20.8kHzで126dBの減衰量になっている。矛盾は何処に。これは謎。こうなってしまうのはデジタルフィルターでは当たり前の話。その当たり前の話を書いている本は見た事がない。畳み込みという言葉の魔術に引っかかっているのでないかと思う。或いは、現実のデジタルフィルターを作った事がない。おそらくは両方。

 

 最初に出した1024次のフィルターの特性は、畳み込みという世界観の中では多分正しい。これは96kサンプリングなので、定義されているのは-48kHzから48kHzまで。通常マイナスの周波数は扱わないので、ゼロから48kHzまで。畳み込みという方法論でフィルターの効果を確かめようとすると、どうもここまでしか表示できない。何か方法はあると思うけれど。

 

 現実に96kサンプリングされた信号は、上のFFTで見るように、或いは標本化定理の原理からも明らかなように、無限の高調波を含む。それが角張ったデジタル特有の波形となる。なので例え96kサンプリングであったとしても、無限の帯域を持っているのだから、ゼロから48kHzまでという制約は当てはまらない。

 

 1024次のフィルターは12kHzの元信号を完全に通す。これは本来の目的。しかしその上の高調波の96kHz±12kHzも、2*96kHz±12kHzも、3*96kHz±12kHzも全て通してしまう。つまりは、全ての高調波も通過帯域。1024次のフィルターの正しい周波数特性はこうなっている。0±20kHzの他に、96kHz±20kHz、2*96kHz±20kHz、3*96kHz±20kHzも通過帯域。

f:id:xx3stksm:20180712201637j:plain

 デジタルフィルターは基本的に周期関数にしかならない。デジタルフィルターの伝達関数は、直線位相の場合はコサインの関数。コサインは周期関数なので、当然の事デジタルフィルターもそうなる。その周期がサンプリング周波数になっている。こんな簡単な移動平均を考えると、その特性が周期的に繰り返すことが分かる。ローパスのデジタルフィルターは、アナログのローパスのように落ちっぱなしにはならない。この当たり前の事実は何故かあまり知られていない。

f:id:xx3stksm:20180712203327j:plain

 

 こんな勘違いは、机の前に座って紙と鉛筆の人になっていると必ず起きる。半田ゴテを持って計測器を見ているならば、実際の現象と矛盾するので、すぐに間違いに気付く。なのでここからは実物の世界。実際にFPGAに実装したデジタルフィルターでの実測値。実物の96kサンプリングの12kの波形とはこんな感じ。下が実物のFFTでいつも正しいのはこっち。ちょっと見辛いけれど、96k毎に幾つも並んでしまうので込み合った感じになる。先に出した12kのFFTの実物版。 

 

f:id:xx3stksm:20180712203713j:plain

f:id:xx3stksm:20180712203720j:plain

 

 そこで疑問。デジタルフィルターは必然的に周期関数になってしまう。ならばデジタルフィルターというものは、理想フィルターとして使えないのでは。モーマンタイというのか、メイウェンティというのか、ノープロブレム。問題なく使える。サンプリング周波数を上げれば良い。実際に八倍に上げるとこう。

f:id:xx3stksm:20180712204801j:plain

f:id:xx3stksm:20180712204809j:plain

 

 下のFFTが最初の96kサンプリングと比べると、随分とスキスキになっている。これは周期が八倍になって768kHzでの繰り返しとなり、通過帯域が0±20kHz、768kHz±20kHz、2*768kHz±20kHz、n*768kHz±20kHzになったため。そのお蔭で、元の波形もかなり角が取れてアナログに近くなっている。まだまだ角張っているのは確かだけど。普通の音声用DACはここまで。それ以上は対応していないので、残った高調波は、アナログのローパスで取っている。

 

 ほとんどのDACチップにはこんなデジタルフィルターが入っている。オーバーサンプリングフィルターというもの。後続のアナログフィルターの負担を軽くするためというのが定説で、嘘ではない。しかしデジタルフィルターを意味あるものにするためには、少なくとも八倍ぐらいのオーバーサンプリングで、サンプリング周波数を上げないと全く機能しないから上げている、とみるのが正しい。

 

 更に八倍上げて6.144MHzにすると、こうなる。

f:id:xx3stksm:20180712205735j:plain

f:id:xx3stksm:20180712205743j:plain

 

 標本化定理に従って、最初の高調波は6.144MHzの所。それはほとんど無視できる程度の周波数なので、DACの出力はもうほとんど元のアナログ。かすかに角があるかないか。現実的には、これを以て理想フィルターの完成と言って嘘ではない。768kではまだ少し角がある。

 

 上海雑技団の如く、上には上があるので更に四倍上げて24.576MHz。10MHzスパンのFFTではもう高調波は見えないので省略。アナログ波形のみ。ほぼ完璧に角はなし。ここらで一件落着。理想フィルターの完成。sinc関数などでは、とてもとてもここまではこれない。実用的な方法論として、sinc関数は有り得ない。

 

f:id:xx3stksm:20180712210222j:plain

 

 結論として、デジタルフィルターの次数は1024もあれば良し。但し、サンプリング周波数は思いっきり上げる必要がある。24.576MHzぐらいまで。256倍のオーバーサンプリング。理想フィルターの話として、無限の次数が必要というのは机上の話。必要なのは高いサンプリング周波数であって、次数はそこそこで良い。

 

 高いサンプリング周波数は、ある意味で大きな次数を意味するけれど、この24.576MHzの波形は、1024と128の二つのデジタルフィルターの組み合わせで出来ている。大抵の場合、足りないのは次数ではなくて工夫の方。理想フィルターにとって不可欠なのは、高いサンプリング周波数。これなくしては、デジタルフィルターが機能しない。

 

 理想フィルターというのは、その応用例に対して若干の修正が必要になるとしても、存在する。音声用であれば、1024次のデジタルフィルターで24.576MHzのサンプリング周波数。これは説明し易いようにマルチビットで出力している。今は主流のDSMの場合、話は少し違ってくる。標本化での高調波とは別に、DSM固有の量子化ノイズが出る。

 

 5ビットの量子化器で24.576MHzのサンプリングの場合、120dBを基準にすると400kHzぐらいから固有の量子化ノイズが出る。この場合は、デジタルフィルターのみで不要な高調波は取れない。しかし固有の量子化ノイズは、標本化定理の理想フィルターとは関係がないし、これはこれで全く別の一つの話。無視は出来ないし、先程のFPGAはDSMの出力も可能なので、いずれはそちらの話も。