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

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

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

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

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

 という訳で、経験法則の側から標本化定理を眺めてみると、これはつまり、振幅変調の無限級数だなとの結論に至る。数学的厳密性には欠けるんだと思うけれど、今の所自分にとって必要な回路設計並びに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系に変換した時などに良く出る。通常のデルタ関数の数学的解析では、まずその由来は分からない。泥臭く腹で押し込むボレーシュートみたいな工学的方法論でないと難しい。神の手はなし。それは偶然の産物で科学ではないのだから。