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

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

2bitというケモノミチ。宗旨替えした訳ではなくて、いわゆる変異株。

 1bitDSMを始めて、もう二年以上。趣味の範囲なので特に時間的制約はなくて、今は基板も自分で設計してネット発注できるので大した費用はかからない。仕事であれば中々二年というのはきつい。そうは言っても、この前の四代目の基板でそろそろ量産かなとは思ってた。マルチシステムで八台必要なので、実質的には量産。量産できる目途が立つぐらいでないと、長期的な安定性に問題が出る。

 

 出来なくはないだろうけれど、もう一押ししてみる事にした。ちょうど、ADCがほぼ完成したこともあって。ディスクリート型のDACを作る場合、1bitDSMになるしかないのは確定事項。AD9117のようなRF用DACを使うと、多ビットのDSMも可能で、実際今使っているのがそれ。3bitDSMで特に問題はなく、もう三年近くになると思う。-110dBぐらいのTHDと、110dBぐらいのSNRは安定的に出せる。

 

 1bitDSMにすると、-120dBを超えるTHDと、120dBぐらいのSNRになる。四次で160OSRのDSMにして、56のタップがあれば可能。再現性は、ディスクリートであっても1bitなので完璧。問題は、2mx56=112mAの電流と、120mmx70mmぐらいの基板でモノラルにしかならない事と、-30dBFS から-60dBFSぐらいまでの間で、少し特性が悪化する事。ESSの「こぶ」に似たような現象。

 

 これは1bitDSMの本質的な欠点で、対策もなくはないけれど、根本的な解決方法はないと思う。電流が増えてしまうのも、同じく本質的な欠点で、SNRを稼ぐためにはタップを増やすしかなくて結果として電流が増える。AK4499も、ppだと70mA超えるぐらい流していたとは思うけど。

 

 これは両方とも1bitDSMに起因するので、1bitDSMを止めれば自動的に問題は解決する。けれども、デイスクリートでの再現性が犠牲になるのでそれは出来ない、という矛盾との戦い。市販品には疎くてあれだけど、知っている限りでmolamolaだけはこの矛盾を克服している。太陽を克服した禰豆子のように。1bitDSMのようで1bitDSMではない方法論を取れば、克服できる。

 

 HPの解説は100%信用できるものではないけれど、彼等は七次で64OSRの5bitDSMを、1bitの64x32=2048OSR(3.072x32=98.304MHz)のPWMに変換してアナログ回路に送っているらしい。5bitDSMを使うと、-30dBFS から-60dBFSぐらいでの「こぶ」は無くなる。あんまり電流を増やす必要もなくなる。何故かと言えば、1bitDSMの宿痾の病のような振幅制限も消えるから。

 

 一般論として、七次のDSMだと最大振幅は-6dBFSぐらい。PCMであれば、ほぼ0dBFSまで振れるので、その差の6dBだけSNRは悪くなる。それを補填するためには電流を流して、SNRを稼ぐしか手はない。この差は、何らかの補填を外部からしないのであれば、AK4499のようなチップでも残る。5bitDSMにすれば、問題は全て解決。少なくともデジタルの次元であれば、多ビットのDSMで1bitDSMの本質的欠陥は消える。

 

 そんな救いの神の 多ビットDSMだけど、molamola以外では使っていないのでないかなあ。理由は色々あるとして、まずはアナログへの変換が上手く行かないのだと思う。100MHz近いクロックは些か問題にはなるけど、DSMを多ビット化するのは簡単。量子化器を変えるだけなので、ハードウエアの変更はごく僅か。必要な定数は1bitでも5bitでも同じ。

 

 でもPWM化の利点として、RTZになるので立ち上がりと立下りの差から来る誤差が無くなるというのは、幻想。ソフトウエアでsimしてみると分かるけれど、RTZするような形でPWM化すると、元の多ビットでのDSMとは同じスペクトルにはならない。こういう単純なPWM化では、全然機能しない。

f:id:xx3stksm:20210814211754j:plain

 

 5bitでの32値を、こんな風に単純にパルスの長さに置き換えると、DC的には元のデータが保存されているけれど、AC的にはまるでダメ。青がデジタル領域での3bitDSMのスペクトル。これを上のように単純にパルスの長さに置き換えて、128x5=640OSRの1bitにすると、デジタル領域では赤のスペクトルにしかならない。元の1kHzは保存されるけれど、THDもSNRもボロボロ。これをアナログに戻しても、意味ない。勿論、ボロボロ。

f:id:xx3stksm:20210814212018j:plain

 もっとOSRを上げると、少しはマシになるとしても、全く使い物にはならない。単純なリニアなPWM変換では、ダメ。色々と試したが、立ち上がりと立下りの差をキャンセルできるような変換では無理、というのが結論。これはD級アンプでも変調のかけ方で問題になるかと思う。molamolaのエンジニアは、そっちが本職なので、何かしらの解決法を知っているのかなとは想像する。

 

 FFTのクセを揣摩臆測しつつ変換方法を工夫すると、デジタル領域ではそこそこ使えるようにはなる。こんな風に。赤が変換後の1bitのパルス列。少しTHDが元よりも高めだけど、アナログ領域でこの数字は出ないので、まあまあ良し。上のに比べれば、遥かに上出来。OSRを上げれば、きっともっと良くなる。640OSR=3.072x10=30.72MHz。

f:id:xx3stksm:20210814213209j:plain

 ただ残念ながら、うちのハードウェアでは、この1bitパルス列を高品位にアナログに戻す事は出来ない。-100dBぐらいのTHDで、114dBぐらいのSNRにしかならない。高めのクロックとは、どうも相性が悪い。160OSRぐらいが上限で、256OSRになると、そろそろ劣化してくる。2048OSRなんてのは、到底無理。せっかくの多ビットDSMだけど、相性が悪いので、諦めざるを得ない。molamola以外で、PWM化した1bitDSMを見ないのは、アナログ変換の難しさであろうというのが一応の結論。

 

 molamola型は無理となるまでに約一か月。それと同時進行していたケダモンの呼吸というのがあって、こっちは一般論としてはダメながら意外とsimの結果は良かった。やっぱり1bitであって1bitではない1bitと多ビットの良いとこ取りで、2bitDSMというケモノミチ路線。

 

 2bitDSMにして1bitDSMの欠点をあらかた解決し、アナログ変換も2bitでやる。しかし、ディスクリートでは再現性の確保が出来ないという定説は、理論的卓袱台返しで引っくり返す。2bitDSMというのは3値。「-1」(00),「0」(01 or 10),「+1」(11)の三つ。1bitであれば一つしか電流源はないので、電流源をIb、温度変化他のエラー成分を時間の関数としてerr(t)とすれば、ゲインはIb+err(t)で決まる。

 

 err(t)は時間と共に変化するけれど、ゲイン全体が変化するだけなのでTHDの変化はない。なのでディスクリートでも安定。2bitの場合、IbとIb1+err(t)の二つの電流源が出来てしまう。両方がオフの時は0(「-1」)。両方がオンの時はIb+Ib1+err(t)(「+1」)。なのでゲインは、Ib+Ib1+err(t)。1bitの時と同じで、ゲイン全体が変化するだけなのでTHDの変化はない。「0」が(Ib+Ib1+err(t))/2という、唯一つの条件を満たすならば。

 

「0」=(Ib+Ib1+err(t))/2であれば、「+1」と「0」の差も「0」と「-1」の差も同じなので、THDの変化はない。1bitDSMと同じ条件になる。うちのハードウェアでは、「0」=(Ib+Ib1+err(t))/2にする事はそんなに難しくはなくて、2bitDSMの場合、振幅が下がって行くとこの条件には有利に働くので、simでも良い結果が出る。

 

 所詮、simはsimなので実物で試すしか手はない。六次で80OSRにすると、1bitDSMだと最大振幅は-5.6dBFSぐらい。これ以上に振幅を上げると、不安定になる。高次のDSM

が不安定というのは、くそとみそを同じと言うようなもので非科学的。高次は次数との関連で最大振幅が下がるというのが正しい認識。

f:id:xx3stksm:20210814221255j:plain

 2bitDSMにすると、同じ条件でも最大振幅は-2.34dBFSまで上がる。3dB以上も上がって、これはそのままSNRの改善になる。タップ数を減らせて電流も減る。1bitDSM固有の「こぶ」も消える。

f:id:xx3stksm:20210814221719j:plain

 
 これを2bitのままアナログに戻す。定説では直線性の確保が出来ないので、THDやSNRは悪化。しかし、分け入っても分け入っても藪の中を、やぶこぎして行くとケモノミチがあって、半信半疑で辿って行くと、思いっきりの近道で頂上に出ちゃうよ、とsimは言っている。数字的には予測されていた事だけど。青が変換後のアナログ。今の基板で出しているので、30タップしか使っていない。

f:id:xx3stksm:20210814222929j:plain

「0」の条件はほぼ確保できるので、再現性は1bitDSMの時と同じぐらいに高い。温度的に安定するまでの時間はこっちの方が早い。五分はかからない。1bitDSMは、五分では完全に元には戻らない。七分ぐらいかかる。2bitDSMに合わせて五代目の基板を作る必要はあるけれど、32タップで現行の1bitDSMの56タップと同じぐらいの数字になりそう。THDは少し落ちるかもだけど、再現性が確保されているならば-120dB超えていればもう誤差の範囲。

 四代目基板はこんな感じ。

f:id:xx3stksm:20210814223626j:plain

 2bit(3値)の場合は1bit(2値)と同じで、ゼロから最大振幅まで変換状態は変わらない。4値以上になると、小さいレベルと大きなレベルとでは使うコードが変わってしまう。なので、モノリシックのチップで全てのコードが同じ絶対値になるように厳重に補正する必要がある。2bitは「0」=(Ib+Ib1+err(t))/2という、比較的守りやすい条件を入れると、ディスクリート圏の住人になって、1bitの親戚。モノリシック圏にも勿論入れられるけど。

 

 今はひとまず六次を使っているので、もしも1bitDSMだと0とか1が連続的に続けるのは、ごく短期的に五個ぐらいまで。それがあるので最大振幅は-5.6dBFSぐらいに制限される。2bitは5bit程ではないにしろ、制限は随分と緩くなる。実際の回路で確かめると、ほぼ最大振幅の青の正弦波を出している時、二つのビット(bitAとbitB)はかなりの区間で、同じ値を出し続けている。この260nSぐらいの周期のパルス二つで、-120dBを超えるTHDの正弦波になるとは不思議。

 

f:id:xx3stksm:20210814224743j:plain


 PCMでのサンプリングも不思議ではあるけれど、DSMのパルス列が綺麗なアナログ信号になるというのも不思議。その不思議を更に腸捻転させて多ビット化すると、より少ないタップ数で同じ様な特性に出来る。1bitDSMはディスクリート型の定番で、新規ルート開拓には必須。ロープウェーで九合目ぐらいまで連れて行ってくれるモノリシックチップとは別路線。その中で更なるルート開拓をするならば、多ビット化。

 

 molamolaの場合、Chordもそうだけど、キモはデジタル側でなくてアナログ変換の所。あんまり明かされていないのは一番の秘密だからだと思う。molamolaは32タップという事なので、これは基本的なアナログ領域でのFIRのはず。1タップではSNRもTHDも稼げないので、どんどん足し込んで上げていく。これは、金は使えば使う程溜まるという未常識経済理論のように、足せば足すだけゲインが上がるけどノイズは一切増えないという血鬼術。勿論、ハードウェアにかなりの精度が要求されるけど、倍にしても3dBしか改善しないDACの並列化とは本質的に別物。

 

 Chordはパルスアレーとか言ってる。7とか11とか奇数を使っているのは、何か意味がありそう。一般的なアナログ領域でのFIRとは少し違う感じがする。少しmolamolaにはSNRで劣るのは、多ビット化していないからだと思う(下弦の鬼かも)。いずれにしても、両者ともどんなアナログ変換をしているのかは謎。まだまだ改善の余地はありそう。どういう形であれ、多ビット化は必須としても。

 

 ADCが良くなって、僅かな違いも見逃さなくなったので、DAC設計は楽。現実の問題として、DACは趣味の域を出る事はなくて、システム全体を左右する力はない。クラシックを聴くのであれば、部屋、音源、スピーカーで3/4は決まってしまう。オシロスコープと半田ごての出番は、残念ながらあんまりない。残りの4/16も3/16はX-overとアースグランドで決まる。DACはその残りの1/16とか。現実とはそういうもので、ワクチン打てば話は終わり、とはならないのと同じ。

 

 そのDACの出来を決めるのはADC。大工の腕は道具を見れば分かるように、DACの出来はADCを見れば分かる。山よりデカい猪はいないように、ADC以上のDACは出てこない。五代目の基板が必要になるとは、些か想定外。もうここまで来てしまったので、484pinのxc6slx25は¥7000ぐらいするのだけど、次の基板ではデジタル回路はほとんど入れずにアナログのドライバーとして使う積り。256pinのxc6slx9も。

f:id:xx3stksm:20210814232453j:plain

 32タップと28タップにして、二チャンネルを一枚の基板に乗せる。デジタル部分はQFPのxc6slx9を追加して入れる。それが良いのは分かっていたけれど、今まではそこまで割り切るほどの勇気がなかった。もうケモノミチ路線なので、なんでもあり。ケダモンの呼吸で猪突猛進。獣柱で行くことに。