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

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

ここで打ち止め。2bitDSMの五代目基板。

 随分と長い旅になってしまったディスクリートのFPGADAC。方法論として可能性は限られている。まずはR2RかDSM。R2Rとして使えるものは、pcm1704のような既に製造終了したものは除いて、オーディオ用と産業用の高速RFDACに幾つかある。RFDACならば、PCMでもDSMでも出力可能なので、ほぼ完全な形で両者の比較が可能。既に試していて、結果としてDSMが聴感として優れている。数字的にも。

 

 という訳でDSMを採用するとなると、5bitぐらいのマルチビットをRFDACでするのか、1bitのような直線性の問題が発生しない方法にするのかの選択。これはやはり、ディスクリートで考えるのならば1bit的なのが最善で、既存のR2Rを使うと再現性とSNRの確保が難しい。結局、方法論としてはFPGADSMの変調をかけて、アナログ部分は直線性の影響を受けない1bitのような方法論が一番良さそう。

 

 FPGAが必須なのは、オーバーサンプリングしたりDSMの演算とかもあるけれど、一番の目玉はXover(チャンネルディバイダー)を入れられる事。音源は既にデジタルのデータになっているのだから、Xoverは2k長か1k長ぐらいのFIRで簡単に実装できる。マルチシステムやる人は今はほとんどいないようで、そのままデジタルで入れられるような装置は自作するのが一番。市販品では全く融通が効かない。

 

 部屋の定在波補正のノッチフィルターはトランスポートの大きめのFPGAで対応するから、DAC側はxc6slx9とかxc6slx25ぐらいの小さ目のFPGAでどうにでもなる。既存品では到底無理。マルチシステムの利点は、スピーカーの選択肢が増えるのもさりながら、思いっきり急峻な肩特性にしてやると(120dB/octとか)、目が覚めたようにというのか耳垢がごそっと取れたかのように、オーケストラの各楽器の鮮明度が上がる。

 

 電子機器での違いは、これが一番。誰でも分かるほどの違いが出る。DACの違いは、それに比べるとずっとずっと小さい。Xoverが違いすぎると言うべきかも。スピーカーに直結する話なので、どえらく変わるのは当然かもだけど。なのでFPGADACの最大の利点は、Xoverを内蔵できる事。自作品でないとこの利点は得られない。DAC部分は、そういう意味では余韻といったぐらいに僅か。その僅かのために基板を四回も試作して、終には最終形の第五版にまで辿り着いてしまった。

 

 これが第四版。これは1bitDSMではほぼ最終形。ディスクリートでは1bitが定番。直線性の問題が発生しないので。但し欠点もある。最大振幅が取れないので、tap数が増える。これは56taps。結果として、流す電流が増える。1tapで2.6mAなので、2.6x56≒145mA。ステレオだとこれの倍。基板もこれが二枚になってしまう。ちょっと重たい。更に、ESSのこぶみたいなTHDの悪化も-30dBFSから-60dBFSぐらいである。

f:id:xx3stksm:20220323201509j:plain

 問題解決には、マルチビット化するしかない。成功しているのは、Molamolaぐらいでなかろうか。これは数字にも出て来る。Chordよりはかなり良くて、AK4499なんかと同じ程度だったと思う。Molamolaは時分割で1bitのマルチビット化をしているようで、結果としてクロックが高くなる。これはアナログ部分に依存すると思うけど、理想的な変換は中々に難しい。うちの基板ではダメだった。

 

 そこで四版の基板を少し改造して、2bitDSMというのを試したのが、去年の夏ごろ。これは思いの外、上手く行った。ちょっと考えれば分かる事ながら、実は2bitというのも1bitと同じように直線性の影響を受けない。理由は単純。2bitは、-1、0、+1、の三つで出来ている。0が-1と+1の丁度真ん中に来さえすれば、直線性の影響を受けない。

 

 これはアナログ的な調整を必要としない。2bitの-1とは「00」、+1とは「11」、0とは「01」か「10」。0として仮にずっと「01」を使うと、これは必ずズレる。アナログ的な調整をしても、温度変化に耐えられない。しかし「01」と「10」を交互に使うならば、両者は平均されるので、結果として目的の-1と+1の丁度真ん中に収まる。細かい話は色々あるけれど、原理的にはほぼ解決。アナログ調整は不要で非常に安定。通電後三分ぐらいで、ほぼ元の状態に戻る。1bitでは五分は少なくともかかる。

 

 それやこれやを含めて、FPGAもデジタル用に一個追加して、三個。xc6slx25が一個でxc6slx9が二個。本来はxc6slx25をデジタル用にして、アナログ部分がつながる所はxc6slx9を二個にしたかったけど、最近の在庫切れの関係で在庫品を使うしかなくて、アナログ部分は、xc6slx25とxc6slx9になってしまった。この基板はステレオ。  f:id:xx3stksm:20220323200142j:plain

 2bit化してタップ数を減らせるので、32taps。電流は一チャンネルで2.6x32≒83mA。最近のDACチップはもっと流しているのでないだろうか。これぐらいだと発熱も少ないので、温度的にも有利。オーバーサンプリングとかXoverは、デジタル側のQFPのxc6slx9に入れる。DSMはアナログ側のFPGAの中。xc6slx25をデジタル側に使えていればDSMもそっちなので、割振りとしてはその方が良いと思う。特に問題はないみたいだけど。

 

 -120dB越える様なTHDだと、ADCの性能もあってどこまで正確なのかは分からない。同じ環境でD90(AK4499)みたいなのをリファレンスとして測ってみて、それとの比較でおおよその所を推測するのが現実。D90だとこんな具合。概ねAPなんかの測定値と同じ。SNRはAudioTesterだと少し良さ目になるので、まあこんなもの。SNRはADCの残留ノイズ分を補正する必要あり。

f:id:xx3stksm:20220323210334j:plain

 2bitDSMの第五版の基板だとこんな感じ。SNRD90より良くないけれど、最大振幅が8dBぐらい低いので、絶対値としてのノイズレベルはこっちの方が良い。D90も完璧な形でアッテネーターを入れるならば、理論的には絶対値は下がるけれど、後付けの部品でその性能はかなり難しい。熱雑音の問題も出て来るだろうし。単純にデジタルボリュームで落とすならば、勿論8dB悪くなる。

f:id:xx3stksm:20220323210605j:plain

 普通の家庭で使う場合、ましてマルチのシステムだと4Vrmsは大き過ぎる。最近のは5Vrmsとかのも多い。これは測定器との関係も含めて、上げた方が見た目の数字は良くなる。実際は使う人が不適切な状態で落とす事になるので、実使用でどうなっているかはかなり疑問。最初からDAC側で落として貰わないとなかなか上手くは行かない。でも4Vrmsが必要な人もいる訳で、市販品としては仕方ないのかも。

 

 DSMの特徴として、周波数依存性は低い。1kHzでなくてもだいたいは似たような傾向になる。これは375Hzと3kHz。R2Rだと、中々こうはならないと思う。Holoのkitsuneはかなり良い数字になってるけど、かなり大がかりな補正をしているだろうし、周波数変わると変化するのが普通。原理的に、R2Rではそうなってしまう。 

f:id:xx3stksm:20220323211651j:plain

f:id:xx3stksm:20220323211704j:plain

 ここまでは市販品のような汎用的な範囲での数字。自作のFPGADACの利点は、マルチシステムに特化している所で、低音用と中高音用では最大振幅が違う。違うように最適化しないと、実際の使用環境ではかなりSNRを損する事になる。デジタルボリュームで最大振幅を下げるような羽目になるので。うちの場合だと、中高音用の最大振幅は低音用よりも9dBぐらいは低い。ホーンを使うので当然そうなる。

 

 なのでステレオのDACと言っても、低音用と中高音用と言う意味での二チャンネル。中高音用は0.55Vrmsぐらいが最大振幅。SNRは完全にADCの測定限界を超えているので、もう測れない。30kHz近辺の量子化ノイズが低音用よりも9dBぐらい低くなっているので、ここから推測するしかない。これは抵抗でのアッテネーターと同じで、アナログ的な操作だからそのまま9dBぐらいは絶対値が落ちる。つまり、総合的なSNRはほぼ低音側と同じはず。   f:id:xx3stksm:20220323213002j:plain

 1kHzによる単独の測定だと、THDは振幅が小さくなるので有利に働くみたい。これは低音側も含めて調整した後の数字。デジタル的なレジスタ設定なので、通電後三分ぐらいすれば元の調整時の数字に落ち着く。R2Rではそうはならない。-110dBぐらいまでなら何とかなるが、-120dB越えて元の数字に戻る事は無い。特殊な補正をしても温度変化には勝てないと思う。2bitDSMだと、驚異的な再現性があるので-130dB近くまで同じ数字になる。 

 

 1kHzの単純な測定ではなくて実際の環境では、マルチシステムの場合些か状況が変わる。DACが複数あるのでSNR的に有利な状況になって、自動的にISOの発生は無くなる。ISOを防ぐには、オーバーサンプリングの前で何も考えずに振幅を6dBぐらい下げるしかない。結果として、その分だけSNRを損するけど仕方ない。今のDACは十分にSNRが良いので、その位は平気。ISOは壊滅的だから。

 

 DACが一つしかない場合、スピーカーのネットワークで最終的には帯域分割されるのだろうけれど、低音側と中高音側のノイズレベルは基本的に同じ。D90だとこんな感じ。20Hzから20kHzまでの32toneの信号。これはだいたい256kのFFTで出す事が多くて、各信号を0dBFSにした時、ノイズフロアが-130dB以下だと一級品。ほとんどのR2Rはこれで大コケする。1bitDSMも-130dB以下はちょっと難しい。うちの第四版の基板も-130dB以下にはならない。

f:id:xx3stksm:20220323214658j:plain

 2bitDSMになると、タップは32でも-130dB以下ぐらいになってくる。これは収束性の影響も多分ある。1bitというのは、FFTの始まりのデータと終わりのデータが一致する事は無い。同期サンプリングをしても、rectangularのウィンドウは使えない。具体的に言うと、PCMの96kサンプリングで12kHzのサイン波を作る時、96/12=8なので八個分のデータがあれば後はその繰り返しで済む。6kHzなら16個、3kHzなら32個。

f:id:xx3stksm:20220323215329j:plain

 では1bitDSMで12kHzのサイン波を作る時、OSRが64だと数字としては8x64=512で済む。でもこれはダメ。始まりと終わりは連続的につながらないのでダメ。スイッチング電源のノイズパターンが、だいたいは同じ繰り返しでも完全には同じでないのと同じ理由。それをFFTするので、つなぎ目にインパルスが入ったようになって、SNRは悪化する。個々の周波数の収束性もマルチビットと比べると少し悪い。4bitぐらいまで行けば、ほぼ問題は消える。2bitDSMだとそういう理由でかなり改善される。

 

 そしてマルチシステムで複数のDACを持っていると、実使用の環境では更に良くなる。これはXoverを経由した低音用と中高音用の二つを重ねて表示。パワーアンプの入力の所での数字。青の中音用は8dBぐらい白の低音用よりも低い。スピーカーの能率が違うのでこうなってる。但し量子化ノイズを見ると、中音用はかなり低くなっている。なのでレベル自体は低いけれど、SNRはほぼ低音側と同じ程度になる。

f:id:xx3stksm:20220323220506j:plain

 ここではまだそれだけになっているけれど、マルチシステムの特徴としてSNRはまだ6dBぐらいは良くなる。というのは、低音用に入っている信号は、最大値が-6dBぐらいまでしか振れない。32toneではなくて16toneぐらいまでなので、そうなる。なのでIV変換の抵抗値を6dB下げて、替りにデジタルボリュームで信号レベルを6dB上げてもクリップはしない。中高音用では更にその余裕は大きくなっているけれど、低音用で制約されるので6dBぐらいが最大値。これは十分過ぎるぐらいの値だけど。
 

 マルチシステムに特化した自作DACだと、そこまでSNRは上がる。それが出来るので、市販品の融通の利かないDACはマルチシステムには向かない。元々それは考えていない訳だし。クラシックを聴く場合、とにかくSNRは最優先なので、自作のXover内蔵のDACが最適解。値段が安いのは二次的な話。適切な肩特性とゲイン配分が出来ないと、マルチシステムは活きてこない。秋頃までには八台作って、PCMとDSMの共用可能な現行品と入れ替え。時間かかったけど、これでもう死ぬまで使えるかな。