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

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

PCMを超えようとの積りでもなくDSMを暇つぶしとして。何事も 夢幻と 思い知る 身にはPCMも DSMもなし。

DSMとは、初めにNFBありき。オーバーサンプリングとかノイズシェービングとかは、実用的な歪に持っていくために必要になるけれど、条件次第で無しでも何とかなる。でもNFBなしのDSMはあり得ない。PCMは量子化誤差を捨てる。DSMはNFBという形で再利用する。誤差が大きくならないように、プラス側に大きくなったならばこれを入力にNFBして、次の出力が小さくなるようにする。

 

なので例え1ビットであったとしても、ノイズシェービングというのかノイズに対する伝達関数の特性次第で、実用的なものが作れる。というか、今はそんなDSMが主流になっている。捨てればPCM使えばDSM。今はもったいないの観点からも、DSMの優位性は動かない。 

 

数字的にはDSMがPCMを圧倒するし値段も安い。昔トランジスタは石の音がすると言われたし、CDも発売当時は実際あまり良くはなかったけれど、デジタルはギザギザとか今でも言われる。DSMにもアンチはいる。1ビットでまともな音が出る訳ないという、夷敵撃つべしみたいな感情的側面がある。この場合の帝はpcm1704みたいな伝統的マルチビット。

 

おそらくちゃんと作れば、両者に差はないと思う。異人にだってシーボルトのように、未練というのか情に厚過ぎる人もいる。DSMは一つのチップとして出来上がっているものがほぼ全てなので、いちから始めるDSMで市販品と同等のものを作るのは簡単ではない。そんな積りもなかったけれど、測定用の低歪発信器をDSMならば簡単に出来るだろうと手を出したら、結構な泥沼にはまってしまい一年近く、もがく羽目。

 

時間だけはあるのでlong and interesting roadと思い定め、基板CADも新しくしたので使い勝手を試しつつ、基板データの丸投げを受けてくれてメタルマスクも激安の、ちょっとこのロゴはやっぱし野暮ったいよねなドイツメーカーに発注し、雪に埋もれながらのデバッグとか停電で断水する事二度の苦難の果て、北極圏のてっぺんまでは難しいとしても、北緯80度ぐらいまでは到達。

 

DSMの教科書は、「Understanding Delta-Sigma Data Converters」というのが定番で、和訳も出ている。実用レベルにするためには、最低5次ぐらいが必要。7次あれば御の字。但しこれは使っている回路構成や定数にも左右される。SACDDSDは、開発時期が古いので、今のものと比べるとあまり特性は良くない。この程度のものは、5次で十分に作れる。

 

材料としては、FPGAと高速のDACチップ。5次か7次のループフィルターをFPGAで実装し、ノイズシェービングのためではなく色々な理由で数メガヘルツ以上になるサンプリング周波数に対応するためには、高速のRF用DACが必須。市販品はチップ内にDACを持っていて、勿論単独でこれを買う事は出来ない。

 

どんなループフィルターが必要であるかは、上述の本に書いてある。自前で最適なアルゴリズムを考える必要はない。考えても到底敵わない。問題なのは、ハードウエア化し易いものとそうでないものがある事。ソフトウエア処理であれば、DSMの変調は不便ではあるけれどリアルタイムでなくとも良いので、芋蔓プログラムでも何とかなる。ハードウエアでは、限りなくスリムでないとダメ。

 

f:id:xx3stksm:20181016194033j:plain

DSMには、量子化器という数式化しにくい素子が必ず含まれる。そこで上にあるようなモデルで、まずは単純化する。これは多分、ノイズシェービングが初級ならば、DSM中級篇の免許皆伝のために学ぶべき術。この雲を掴むようで取りつく島のない図が実はツンデレで、デレを引き出せた時には中級を会得。

 

このループフィルターという中身は、色々な人が随分な時間をかけて色々考えている。なのであっさりと成果を使わせてもらう。教科書に幾つか出ているので無料で使える。例えばこんなの。

f:id:xx3stksm:20181016194658j:plain

定石に従って、出力のVは入力のUにノイズを足しただけの形にする。ノイズのEは量子化器のビット数に相当するので、基本的に定数。zの関数になっている1/(1-L1)を小さく出来るように係数のa0からa4を決めれば良い。これも実は教科書に出ている。matlabで走るプログラムがあるので、それを使うと計算できる。問題なのは、計算してくれるのはここでのa0からa4ではない事。

f:id:xx3stksm:20181016195137j:plain

ちょっと小さくて見難いけれど、見易くても理解し難いので結局は同じ。f(V)というのが、ノイズの伝達関数に相当する1/(1-L1)。良く目を凝らしてみると、確かに分数の形になっていて、分母も分子もzの5次式になっている。g0とg1はローカル帰還と言って、これがあると少しだけ性能が上がるけれど、実装の手間の割には功徳に乏しいので無視してゼロにする。五体投地のような係数。マニ車の方が賢い。

 

この鬼のような5次の多項式のa0からa4と、matlabが計算してくれる係数のr0,j0,r1,j1,r2とは、一次の五元連立方程式になるのでこれを解くと、下の段のようにa0からa4が出て来る。ここにr0,j0,r1,j1,r2の値を代入すると、やっと欲しいa0からa4が出て来る。これを手計算するのは中々に難しく、vxmaximaという無料の数式計算ソフトを使う。

 

matlabはかなり高い。ネットを渉猟すると、r0,j0,r1,j1,r2の値は見つけられる。a0からa4もなくはないかも知れないが、正しいとは限らないので自前で計算するべき。r0,j0,r1,j1,r2は大本なので、間違いはないと思う。5次でもソフトがないとお手上げ。7次になると、PCの一画面に収まらないぐらいの長さの数式になる。鬼の七乗。確かに性能は上がるけれど、OSR比で補填は可能なので、5次ぐらいが妥当かなと思う。

 

この5次CRFBというのには、遅延積分器と無遅延積分器の2つがある。ソフト的にはほとんど意味がない。ハード的にはイギリスとキリギリス程に違う。或いは、北アイルランドアイルランド程。FPGAでのハード化は、高いクロック周波数で時分割処理をして、スループットを上げるのが基本。

 

FIRのように帰還を持たない場合は、単純に時分割すれば良い。クロックが高ければ全て丸く収まる。DSMのループフィルターはIIRのように帰還を含むので、時分割が難しいか或いはできない。出来ない場合、ハード化するためには膨大な量の掛け算器などが必要になる。金に糸目を付けないのならば、大容量のFPGAで話はケリ。そうでない場合は、可能な限り時分割できる回路構成を選ぶ。

 

無遅延積分器は時分割が出来ない。遅延積分器は、ある程度可能。遅延積分器は、押し寄せてくる膨大なデータの一時的な防波堤になり得るが、無遅延積分器はただ右から左に流すだけなので、溜めにはならない。ループフィルターは、無遅延積分器だけでも作れる。でもこれをやると、大きなFPGAが必要になるという話。なので、可能な限り遅延積分器を含むものが好ましい。

f:id:xx3stksm:20181016201946j:plain

こんな按配で、遅延積分器はz^(-1)の四角がデータを遮っているので、一時的に溜められる。無遅延積分器はドライブスルーですけすけ。これはどちらも積分器として動作するので、機能的には同じと考えて差し支えない。でもやっぱし、溜まるか溜まらないかは大違い。全て遅延に出来ないかと色々考えたけれど、どうも無理そう。何か手はあるのかも知れないけれど。

 

係数の値が分かって回路構成も決まると後は実装。三角の印は係数のa0とかa1を掛けろという意味なので、a5以外で10箇所ある。計算精度の関係で、a0からa4は40ビットで、入力のデータは36ビット。40x32の掛け算器がいる。金に糸目をつける場合はとても大変。上側でUとの掛け算は時分割が可能なので、実際は1個で済む。

 

下はDSMの特性として時分割できない。次のデータの計算には、必ず前の計算結果が必要になるので。でもここに掛け算器は必要ない。掛ける相方のVは量子化器の出力なので、この場合は5ビットしかない。なので40x5の掛け算。となるともう掛け算ではなくて単なるROM。32個の40ビット係数を予め計算してROM化すれば良いという話。10個の掛け算器は結局1個で済む。

 

他にも足し算器も色々な方法で節約して、やっとこさXc6slx25というFPGAにステレオで5次のDSMを実装。容量に収まりさえすれば、計算はデジタルなので何の問題もない。デジタル領域では、5ビットの量子化器で元の24ビット精度と同等の量子化ノイズに出来る。この場合のDSMとは、24ビットから5ビットへの劣化なし変換と等価になる。もしもwavファイルにするならば、一種のロスレス変換。メモリーサイズは相当に大きくなるとしても。

 

実際のDACはアナログ領域にあるものなので、デジタル領域での性能は絵に描いた餅。或いは3Dプリンターで打ち出した成形品。これを本物の餅肌で喉に詰まらしたら昇天の餅にするのはアナログの世界。それは又別の話なので別の機会に。結果だけはこんな具合。

f:id:xx3stksm:20181016204750j:plain

 

数字は立派。PCMでこんな特性は出ない。-120dB(0.0001%)近いTHDは測るADCにも左右される。110dB超えるSNは、DSMとかPCM以前に基板の質が大きく影響するので、通常の市販品の両面基板ではまず不可能。オーディオでのSN表示は所謂フェイクなので、実際に信号を入れて普通のSNの測り方をすると110dBを超えるものは稀。CDプレイヤーは、原理的に100dBを超える事はない。

 

 DSMなので1MHzまでの帯域でノイズレベルを見るとこう。

 

f:id:xx3stksm:20181022191022j:plain

 

f:id:xx3stksm:20181022191038j:plain

f:id:xx3stksm:20181022191059j:plain

f:id:xx3stksm:20181022191115j:plain

 

上からX64、X128、X256、X512の順番。

さすがにx512になると残留ノイズも皆無。簡単な6dB/octのアナログフィルター二段だけでここまで少ない。20kHz帯域でのノイズと、binあたりでは同じぐらいと思う。後は音を聞きたいけれど、うちのシステムに実装するためには八台作る必要がある。まあ、冬の間に縄をなう事もないので半田付けをして、来年の春頃にはなんとか。