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

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

リンギングしない(プリエコーなし)FIRフィルターの意味合いとは。 

 標本化定理のために必要な理想フィルターとは、FIRフィルターのタップ長さはそこそこで良くて、必須なのは高いサンプリング周波数であるというのが前回の結論。そこから少し藪の中に入り込んでみるのが趣味の世界。分け入っても分け入っても藪の中かも知れず、思いの外、高台からの良い眺めに巡り合うことも。銀閣を建て始めた時、後世に金閣を超える日本文化の象徴になるとは 、きっと誰も思わなかったように。

 

 理想フィルターはその性質上、どうしても急峻な特性が必要になる。一番初めのCDの時代は特に。一般的には20kHzから落として、22kHzでは-120dBぐらいの減衰量が欲しい。所謂ブリックウォール、煉瓦塀特性が必要。これは今ではFIRフィルターで実現可能で、尚且つアナログでは有り得なかった直線位相になっている。初期のアナログ多段フィルターと比べれば、完璧。一つケチがつくのは、方形波などでリンギングを起こす事。

 

f:id:xx3stksm:20180805211509j:plain

こんな具合に、方形波やインパルスに対して発振しているようなリンギングが出る。これはアンプの発振とは違って、単にFIRフィルターの係数に由来する。アナログ時代こういう波形は嫌われたので、今に至ってもリンギングにはアレルギーがある。感情論的に、後に出るリンギングはアナログフィルターでも出るので構わないが、前に出るのは気に入らない、というのもある。

f:id:xx3stksm:20180805211928j:plain

 周波数特性としてはこんな按配で、典型的な煉瓦塀。実測なので測定器のスプリアスの関係で、65dBぐらいしか落ちていないように見えるけれど、本来は42kHzまでが通過帯域で、46kHz以上は-120dB以上落ちている(96kHzサンプリング)。オーバーサンプリングで思いっ切りサンプリング周波数は高いので、アナログフィルターなしでもそのまま使える。こんな基板。近々うちのシステムはこれに更新の予定。

f:id:xx3stksm:20180805212431j:plain

 このリンギングをどう考えるかは中々に難しい。多分、問題はないと思う。リンギングの一番の原因はおそらくギブス現象にある。特定の周波数帯域で制限することは、デジタルの世界では暗黙の了解事項。これがないと標本化定理は成り立たず、つまりはデジタル化が出来ないので、CDであればどう足掻いても22kHzぐらいが上限になる。結果として、方形波の振動は避けられない。

 

 FIRフィルターの側から言うと、一般論としてその係数は振動している。1024の係数があると、プラスの値とマイナスの値の両方を取りながら大きくなって行き、最大値から後はやはり振動しながら段々と小さくなる。インパルスに対する応答は、そっくりそのまま係数の値を並べる事になるので、係数の振動は応答の振動を意味する。従って、振動しないFIRフィルターは稀。稀ではあるが零ではない。

 

 これは経験法則で理論的裏付けはない。つまり工学的回答はあるのだけれど、理論的な証明はひとまず横に置く。論より証拠でこんなの。上の基板での実測データ。FIRフィルターで直線位相。タップ数は1024に収まる。

f:id:xx3stksm:20180805214013j:plain

 下のインパルスが振動せず単調に上がって行って、最大値の後は単調に落ちるので、方形波に対しても勿論振動はしない。周波数応答には少し難がある。なんでも良い事ばっかしではないので。

f:id:xx3stksm:20180805214345j:plain

 96kHzサンプリングなので、基本的には煉瓦塀のように48kHz以上は-120dBぐらい落としたいし、通過帯域も40kHzぐらいまでは欲しい。これは21kHzで-3dBぐらい落ちる。48kHzではまだ18dBぐらいしか落ちない。21kHzぐらいまでを使う積りになると、実質的に不要な高調波は、折り返してくる75kHz以上となる。それより上は完全に落ちるので(88.4-42)=46.4dBの減衰量が最悪値。

 

 あんまり褒められた特性ではないけれど、俗に言うNOSというものは完全な高調波垂れ流しだし、多くのDACに乗っているslowのフィルターを44.1kHzで使うともっと悪い。勿論これも、96kHzで使うのがミソ。実際に20kHzと30kHzを出してみると、20kHzではほとんど残留高調波の影響はない。30kHzでは少し見える。青が30kHz。

f:id:xx3stksm:20180805215646j:plain

 

 

 

f:id:xx3stksm:20180805220004j:plain

 実際の使用として96kHzサンプリング以上であれば、このぐらいの緩い特性でも音楽信号の再生に問題はないのかなあと思う。リンギングの有無に関して、あまり積極的な意味合いは感じないとしても、煉瓦塀とリンギングレスの両方を選べるのであれば損はなかろうと。

 ここでの実測値は、特記のない限りアナログのフィルターの前で測っている。位相云々とかリンギングあれこれを言うならば、アナログフィルターの後では意味がない。

ほとんどの場合、DACには12db/oct以上のアナログフィルターが入る。これは当然位相が回る。リンギングみたいな様相を呈するので、どこに原因があるかはもう分からなくなる。

f:id:xx3stksm:20180805220756j:plain

 これはリンギングレスFIRをアナログフィルターに通した結果。黄色は12db/octで青は6db/oct。6db/octは信者がいるように、ほとんど見た目の変化はない。と言っても、最大で90度は回っている。直線位相は一切回らない。12db/octは180度回るので、なんか角が立っている。これはSPICEでシミュレーションしても、ほぼ同じ結果になる。

 

 振幅特性は平坦でも、位相特性の乱れで角が立ってしまう。あんまりアナログフィルターには期待せず6db/octにして、高いオーバーサンプリングでデシタル処理するのが賢い。コストが安く再現性もある。

 

 リンギングレスのFIRは、係数が単調増加か単調減少であれば宜しい。幾つか可能性はあると思うけど、ここで使っているのは移動平均フィルター。単純な移動平均では、下の紫のように全く高い方で落ちないので、アナログフィルターが必須となり好ましくない。幾つかの移動平均を組み合わせて96kHzや192kHzに零点が来るようにして使う。下図では一目盛が3kHz。

 

f:id:xx3stksm:20180805221842j:plain

 192kHzサンプリングで20kHzまでを使うのであれば、図の赤なので20kHzで-1dB。不要高調波も最悪値で-60dB以上は落とせる。流石にそこまでの無駄遣いはアレなので、96kHzサンプリングで何とかしたい。煉瓦塀と移動平均の中間というのも可能で、これは両者の中間の特性になる。少しリンギングするけれど、高調波の漏れはほとんど出ない。

 リンギングレスの利点は、些かギブス現象を超越してしまう所。常識的には、帯域を制限されてしまうデジタルのシステムでは、必ず方形波はリンギングする。さはさりながら、リンギングレスは違う落とし所を用意している。リンギングレスの実測値は、FIRフィルターで完全に帯域制限されている。しかしギブス現象を起こしていない。振動しない方形波になっている。何処かに勘違いがないかは簡単に確かめられる。

 

 実測値は黄色の特性で96kHzに零点があるフィルター。これを実現するには192kHzサンプリングが必要。話を単純化するには96kHzサンプリングのシステムで、48kHzに零点があるフィルターを想定した方が楽。仮に6kHzの方形波を出すとすると、6kHz、18kHz、30kHz、42kHz の四つのサイン波で方形波を作る事になるので。192kHzサンプリングだと八個必要になる。

 

 素のままの方形波の場合、6kHzを-3dbとすると、18kHzは-12.5dB、30kHzは-17dB、42kHzは-20dBのサイン波の合成。48kHzに零点のあるリンギングレスフィルターは18kHzで-5dB、30kHzで-17dB、42kHzで-40dBの減衰。結果として、6kHzを-3dbとすると、18kHzは(-12.5-5)dB、30kHzは(-17-17)dB、42kHzは(-20-40)dBのサイン波の合成。

両者を並べて表示するとこうなる。

f:id:xx3stksm:20180805225427j:plain

 42kHzは-60dBになるので影響なしとして無視。省略して三つでの合成。素のままの方形波は確かに振動してしまう。帯域制限されたシステムでの見慣れた風景としてこうなる。下はちょっと驚きの結果。リンギングレスフィルターの面目躍如。帯域制限からの立ち上がりのなまりは仕方ないとしても、全く振動していない。

 当然と言えば当然。リンギングレスフィルターの係数は振動していない。なのでインパルスであれ方形波であれ、計算結果つまりはフィルターの出力が振動することはない。理論的にはそうなるしかないので振動はしない。しかし方形波を三つだけのサイン波に制限してしまうので、ギブス現象の影響を受けそうだが受けない。

 係数で決まる減衰量で三次と五次のサイン波を落とす結果、振動しない方形波が出来上がる。これは勿論192kHzサンプリングでも同じ結果となる。その場合は足しているサイン波の数が増えるので、それなら不思議ない感じもするけれど、96kHzサンプリングはたったの三つで出来てしまうのが驚き。

 結論として、リンギングレスにあまり積極的意味合いは感じないとしても、自然界の音は上の波形のようにリンギングしたりはせず、下のようになだらかになるだけと思う。なので、デジタルシステムの都合としての帯域制限が、結果として多くの場合は不自然なリンギングにつながる。

 リンギングレスフィルターのような帯域制限は、高調波の漏れからして常識的には掟破りであるけれど、20kHz帯域に対して少し広めの96kHzサンプリングや、ゆるゆるの192kHzサンプリングに意味はあるのでなかろうか。ハイレゾというのは、20kHz以上の蝙蝠帯域は無意味としても、不自然な帯域制限を避けるという観点で意味がある。20kHz帯域に対して96kHzサンプリングしていると、それなりの利点はあるという事。

 

 

 

 

 

 

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

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

 

 数学的な解決法はとても単純。理想フィルターというものを使う。仮に音声用の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の出力も可能なので、いずれはそちらの話も。

 

標本化定理を、振幅変調の無限級数と解く。

 信号のデジタル化の話は、標本化定理に始まる。中身は、デジタル化したい信号の含んでいる帯域の二倍以上でサンプリングしろという事で、まぁそんなもんかと納得の行く範囲ではある。フェルマーの最終定理のようで、中身は分かるが何故それが正しいかという話になると、内容は揮発する。草原という言葉を聞くと、私の思考は気体になると司馬遼太郎が何処かに書いていた記憶がある。デルタ関数とか畳み込みという言葉は、同じく気体になって何処かに消えて行く。

 常々思うのは、科学には数学的な紙と鉛筆の世界つまりは理学と、半田ごてと基板の物理的実体を扱う工学があって、定理の証明は理学の分野なので中々半田ごての人には理解が難しい。半田ごての人は、現物の物理世界と付き合う過程での経験から、ちょびっとだけ理論的世界を垣間見るしか手はない。気体にならずに地面に留まるにはそれしかないのかなあと。

 という訳で、経験法則の側から標本化定理を眺めてみると、これはつまり、振幅変調の無限級数だなとの結論に至る。数学的厳密性には欠けるんだと思うけれど、今の所自分にとって必要な回路設計並びにFPGAでの演算に関しては矛盾はない。工学的には十分に実用になるので、当面はこの路線で良いかと思ってる。何かしらの矛盾が出たならば、その時に修正すれば良いのだから。

 デルタ関数にFFTをかけると、そのスペクトルは均一になる。拘っても仕方ないながら、これは多分数学的な厳密性には欠ける。つまり何処かで矛盾の起きる可能性が残る。一言でFFTと言うけれど、今はほぼ全てがPC上でのDFFTを称してFFTと言っている。FFTとDFFTは、かなり根本的に別物。イギリスとキリギリス程ではないにしろ。

  DFFTは離散時間でのFFTの意味。デジタル化された数字のみを扱うので、必ず有限個の数しか扱えない。実際、PCでは有限の計算しかできない。それはFFTが意味する高速フーリエ変換という言葉に矛盾する。フーリエ変換は無限の数を扱うのだから。なのでこういう矛盾点は基本的に無視する。おそらくは致命的欠陥になる可能性は小さいという事で。でも間違いなく、デルタ関数にFFTをかけると、そのスペクトルは均一になる。つまり、全ての周波数を均一に含んでいる。

 ちょっと調べてみたら、デルタ関数の例として、sin(nx)/πxが出て来る。これはデルタ関数の定義を満たしている。でもちょっと工学的には使いづらい。何故かというと、これはおそらく無限界の住人なので、必ず有限になる現実の物理世界との相性が良くない。有限界的には、全ての周波数を均一に含んでいる、という方向で考えた方が良い。全ての周波数を均一に含む関数、で代用すれば良しという話。こういうの。

 

f:id:xx3stksm:20180514192508j:plain

 

具体的には、48kHzでサンプリングすることを考えて、48kHz,2*48kHz,3*48kHz・・・という無限級数を考える。この理屈で10倍の480kHzまでの十個を足してしまうと、こんな感じ。

f:id:xx3stksm:20180514193006j:plain

本来のデルタ関数は、0と仮想的な1しか存在しないので、この例のようにうねうねと0でない部分があるのは問題。でもそれは足していく数を増やして、そこそこ無限かと思える程度にすれば工学的には問題がない。これをデルタ関数と黙認してサンプリングをしてみるとこうなる。

f:id:xx3stksm:20180514193401j:plain

 

少し位相をずらしたsin波(薄い灰色)、この場合は48kHzのサンプリング周波数で16の点があるので、3kHzのsin波。デルタ関数もどきと3kHzのsin波を、単純に掛け算した結果がこれ。通常良く見る正式なデルタ関数での図とは、やはりまがい物だけあって些か違う。でもサンプリングっぽいのは確か。そこで足し合わせるcosの数を40にするとこれ。

f:id:xx3stksm:20180514193908j:plain

 

当然ながら、仮想の1でない時のうねうねがだいぶ減る。でもまだ少しばかりお里が知れている感が無きにしも非ず。そこで更に倍にした80個のcosがこれ。

f:id:xx3stksm:20180514194054j:plain

 

 もうここまで来れば、標本点のx0からx15以外は0だと思ってもまあ良いかという按配。少なくとも工学的には問題ないので、これをもってデルタ関数の代用としてしまう。標本化にとってのキモは標本化に使うデルタ関数にある。しかしこれは超関数と言われるぐらいに現実世界からは遊離しているので、工学世界に引きずり降ろすのは難しい。なので些かの誤差は本質論に影響しないので無視して、実を取る。たかだか80個のcosの和で、超関数は有限世界の住人になって、お話が通じるようになるという寸法。

 この図は結構な意味を持っている。この黄緑のサンプリングされたように見える波形はアナログで出来ている。元々の被変調波に相当する3kHzに、48kHz,96kHz,・・・、3840kHz(48kHz*80)までの和を掛け算しただけなので。その周波数スペクトルは、FFTするまでもないけれど、グラフ化のために計算するとこう。勿論、昔ながらの振幅変調のように、直流分での3kHzの次は3kHzと48kHzの掛け算なので三角関数の定理から45kHzと51kHzで、その上も簡単にFFTなしで求まる。そして一番上は、3837kHzと3843kHz。

f:id:xx3stksm:20180514194706j:plain

 

 それだけの161個の和がこの黄緑で、詰まる所、標本化定理の意味する真の姿。通常の振幅変調は、検波のしやすさから搬送波も含むので少し違うけれど基本的には同じなので、これを超振幅変調と称してもそれ程の嘘ではなし。ちょっと取りつく島のない離散化信号ではなくて、正真正銘のアナログ波形。なので、この信号をアナログ記憶したとしても、元の3kHzの信号を取り出すことは可能。それはあまりにも冗長であるけれど。それよりも何処か一つだけの振幅変調を電波で送る方が賢い。20倍の所であれば、960kHzで普通の中波放送になる。

 わざわざこんな振幅変調級数を持って来たのは、記憶するのであればもっとエレガントな方法があるから。デジタル化とも言える方法がある。このアナログの振幅変調級数は、何故か所謂サンプリング点以外、つまりはx0からx15以外は、ゼロで近似できる。80個なのでゼロとまでは言えないけれど、1000個にすればまずは問題がない。その時に起きる弊害は、48997kHzと48003kHzまでの高調波を含んでしまう事。でも元の3kHzを取り出すことに問題はない。

 そこでここで掌を反して、もうアナログ的な記憶はやめる。サンプリングのx0からx15のデータさえあれば、残りはゼロと決まっている。その16の数字とその間隔つまりはサンプリング周期(1000/48μS)さえ分かっていれば、元の振幅変調級数は復元できるし、本来の被変調波である3kHzを元に戻せる。振幅変調級数はアナログ波形であるけれど、記録するのであればデータ量はとても少なくて済むという話。黄緑の波形はそう言ってている。

 標本化定理で納得いかないのは、サンプリング点は良いとして、その他の部分例えばx0からx1の間にもアナログ信号はあるので、こいつらの存在をどうするのかという、尤もな疑問がある。いきなり無限界からやって来たデルタ関数に、無理矢理むげな扱いを受けている感を否めない。花は何処へ行ったでなくて、間は何処へ行った。どうやら、間は無に帰った。振幅変調級数という処理をすると、単純に掛け算しているだけなんだけど、間は全てゼロになってしまう。だから元の値には何の意味もない。教えによれば、情報量として寄与しているのは、実はサンプリング点だけで、間は虚仮にしかすぎなくて空である。般若心経ぽい。デルタ関数は肌感覚として、間が空であるとは教えてくれない。振幅変調級数であれば、その処理過程から間違いなく間は空なのだと悟れる。空はゼロなので普通は無視する。でも時々は空にも意味がある。アップサンプリングの時には、その空がゼロが深い意味を持って再び現れてくる。それは又別の話だけど。

 もう一つ標本化定理で引っかかるのは位相の話。同じ3kHzでも位相が違うとサンプリング値は変わる。しかしそれは本来の位相を本当に反映しているのかと。黄緑の波形を見ると、位相も正確に記憶されるのだと直感的に分かる。位相が異なればそれに応じた値が記憶されて、仮にLとRでステレオ信号のように位相差があれば、復調後の3kHzには正確な位相差が出て来る。位相なので、勿論二つ以上の信号は必要。 

 それから通常のDACの出力は、零次ホールド性という特性なので、ここでの話のようなデルタ関数でのサンプリングとは些か違う。でもこれはほんの少しだけ高い周波数でのスペクトルに違いが出るだけで、大勢に影響はない。一瞬だけ存在するような仮想的な出力を想定して解析しても、特に問題はない。

 

 本筋の何故二倍以上のサンプリング周波数が必要かという問いは、振幅変調級数のFFTを見れば自明。サンプリング点以外をゼロにするための処理を行うと、元の本来必要な帯域の上に、最初の振幅変調の側波帯が近付いてくる。それはこの図では、8の24kHzに相当する所が上限になる。この図では、FFTの都合で一目盛が3kHzに相当している。それはつまりサンプリング周波数の半分になる。そこまでは混信しないけれど、ここを超えると混信するのでもう再現は不能になる。

 

 その混信具合は図解すると明らか。被変調波の3kHzに21kHzも混ぜてみる。21kHzは24kHz以下なので混信はしない。薄い灰色が両者の和。

f:id:xx3stksm:20180514205137j:plain

 同じように80個のcosでデルタ関数を代用すると、黄緑のようになる。もちろん、サンプリング点以外は空になっている。つまりはゼロ。その下がFFT。元波形の青は混信しない境界の8より下にあるので復元可能。しかし黄緑は、かなり衝撃的な波形になっている。最初のサンプリング点と次の間は、そこそこ真っ直ぐなので、まあそうかなという感じ。しかしその次は、-0.5から0.13ぐらいまでの間を、ぐにゅっと曲線でつないでいる。これは不自然なようでいて、このつなぎ方以外は宇宙に存在しないと言っている。何故かと言えば、この薄い灰色は3kHzと21kHzのみで出来ている。そして黄緑は下のFFTのようなスペクトルを持つ。これは最初の変調波までしか表示していないけれど、実際には80番目までを含む。24kHzの所で切ってしまえば、残るのは3kHzと21kHzのみでこれは薄い灰色を意味する。つまり、高調波を多く含む黄緑から、24kHz以下のみという標本化定理の制限を実行すると、残るのは元の波形であり薄い灰色になるしかない。24kHz以下のみという切り札を出すと、この曲がったつなぎ方以外は存在しないという結論になる。他も全て同じ。薄い灰色のつなぎ方しか24kHz以下のみという制約下ではありえない。つまり、完全な復元が可能。

 

f:id:xx3stksm:20180514205052j:plain

f:id:xx3stksm:20180514210805j:plain

 ここまで来ると最後の〆。では復元できない時はどうなっているのか。工学的には実物で試す。21kHzではなく27kHzを混ぜてから、振幅変調級数をかけてみる。これです。下はFFT。青が3kHzと21kHzで上の図と同じ。赤が 3kHzと27kHz。理論的に、青は復元できても赤は復元できない。

f:id:xx3stksm:20180514212335j:plain

f:id:xx3stksm:20180514212605j:plain

 なにやら不可思議な事が起きている。青と赤が何処かで交差するのは当然としても、その交差点とサンプリング点が全て一致している。つまり、青でも赤でも関係なく、標本化したデータは両方とも同じ。ユナイテッドとシティーの区別がないという話。会社辞めたり離婚は日常茶飯としても、ユナイテッドからシティーの鞍替えはない。人格を疑われる所業。

 勿論FFTも同じになる。但し、赤と青を区別しなければ。それぞれのスペクトルは違うけれど、意味があるのは全体としてのものだから両者は同じ。23と25の位置が違うのは、最初の変調までしか表示していないため。二番目のまで表示すると、それは25と23の位置に出て来るので両者は同じになる。

 別の言い方をすると、この例の場合は27kHzの存在を許している。そのためにサンプリング点のつなぎ方が唯一つではなくなってしまった。24kHzまでという制限を入れるならば、最初の例のようにつなぎ方は唯一つで復元は可能。完全な復元のために24kHzまでという制限は、つなぎ方を唯一つにするための制約と考えた方が工学的。

 ナイキスト周波数を守らないと折り返し雑音が発生する。この例では、3kHzと27kHzをサンプリングしてから24kHz以上を切った。そうすると、出てきたのは3kHzと21kHzだったという話。これは中々に厄介な問題で、往々にしてどこからこの21kHzはやって来たのかと頭をひねる羽目になる。特に、SSRC等で44.1kHz系から48kHz系に変換した時などに良く出る。通常のデルタ関数の数学的解析では、まずその由来は分からない。泥臭く腹で押し込むボレーシュートみたいな工学的方法論でないと難しい。神の手はなし。それは偶然の産物で科学ではないのだから。