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

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

1bitDSMの三種の神器。アナログFIRとECL接続とFPGA。

 半信半疑だった自作のDSMDACは、思いの外の高性能だった。理論的には1bitDSM(DSD)が高嶺の花と言うか、他の追随を許さない最高峰になり得るので、これは試すしかない。今はネットで簡単に基板を作れるようになったので、CADを持っているならば試作は容易。空中配線基板では、事の本質は分からない。二週間ほどで基板データを作り、発注は海外。運送費払ってでも、こっちが質として上。

 

 一か月ほど前に届いて、あれこれと試行錯誤。ひとまずの結論として、理論の通り1bitDSMはとても潜在能力が高い。AD9717での3bitDSMは、DSMの変調回路から始めた事もあって一年以上はかかった。それを流用できるとはいえ、1bitDSMは一月ほどでほぼ同じぐらいの性能になった。細かい修正は必要としても、DACチップ無しのFPGAトランジスタだけで、ESSのような最新チップと同等もしくはそれ以上の物が作れる。1bitDSMおそるべし。こんな基板。

 

 

f:id:xx3stksm:20190724182723j:plain

  Xc6slx9という¥2400ぐらいのFPGAが二つ。各チャンネルに一個づつ。トランジスタをドライブする数が多いので、基板の配置からしてもLとRに一個づつが正解。左と右は少しトランジスタの構成が違っていて、おそらく左はダメだろうとの予想通りダメだったので放置。右側が本命。

 

 1bitDSMは基本的に、所謂ノイズシェービングで高域に追いやった量子化ノイズをアナログのLPFで落とせば、本来の音声帯域の信号が取り出せる。言うは易く行うは難し。論理ゲートの出力にCRのフィルターをつなぐだけでも音は出る。詳しい中身は知らないけれど、高級品としてはChordとかPSaudioの製品は結構な値段する。FPGAとアナログ部品という構成は同じだろうけど。

 

 今はRpiとかBBBのようなLinux系は勿論、WindowsでもPCMから1bitDSMへの変換は色々あると思う。小振幅時の応答性、大振幅時の安定性、周波数が変わった時のpopノイズ、など色々細かい問題はあるとしても、そこそこの質での変換はしてくれるはず。デジタルの領域ではそんなに差はつかない。問題は、1bitのDSM信号を、理想的な形で如何にしてアナログに変換するか。

 

 市販品のDACチップもDSD入力が可能なので、それを使うのも手ではあるけれど、ESSの場合DSD入力は本命ではないようで、TOSLINKよりは質が落ちる。1bitDSMに拘るのであれば、やはり独自路線が得策。良く使われているのは、Signalystという方法論。これは74hc590のようなシフトレジスタを使って、アナログのFIRを構成する。アナログFIRはもう失効した昔の特許で、その時はこんな使われ方は想定していなかったと思う。とはいえ今となっては、アナログFIRなしでの1bitDSMは考えられない。

 

 1bitDSMは、そもそも異端に属するケモノ道的流派なので、ここからDSMを理解しようなどと考えるならば、初めっから千日回峰に挑むようなテイになるのが落ちで、必ず脱落する。木食をしてケモノになって山野を駆け巡るなど到底無理。どのぐらい無理かは、この図で自ずと知れる。これが1bitDSMの正体だから。

f:id:xx3stksm:20190724185728j:plain

 ちょこっと透けて見えている赤のサイン波を、1bitDSMに変調すると青の波形になる。この青から高調波を取り除くと、信じられない事にTHD+Nが120dBを超えるサイン波を取り出せる。少なくとも五次ぐらいの次数で、40bit程度の演算精度で変調がかかっているならばそうなる。それをここから見通すなんて、千日回峰か五体投地としか言いようがない。

f:id:xx3stksm:20190724190123j:plain

 心眼を持って上の小さな図を眺めるならば、隠されているサイン波のようなものが、ふと感じられるかもしれない。小さい方が、目のLPF効果で高域のノイズ成分を落とせるので、何かしら隠された本性と言うか元の波形が浮かび上がる。五次ぐらいになっても、微かには波形の疎と密で何が隠されているのがが推察できる。二次ぐらいまでであれば、ほとんど丸見えなんだけど。

 

 電子機器に心眼は期待できないので、マニ車として登場するのがアナログFIR。これには、金は使っても使っても減らない、というような効能がある。この猛烈な高調波ノイズの泥に埋もれている音声信号は、クモの糸にすがり付くようにして上に昇って行ける。音声信号はドンドン大きくなるのに、高調波ノイズは下に留まったままになってくれるので、SNRもTHDも鰻登り。

f:id:xx3stksm:20190724191150j:plain

 これがまずは一発目のFIR。これだけで心眼でも見えなかった青の波形が、もう素性は知れたも同然の黄色に変わる。これは最も単純な、二点間の移動平均。青の波形の隣り合っている二点を、足して二で割っただけ。二点間の平均なので、基本的にはデジタルフィルター。ではあるけれど、デジタルの領域でこの手は使えない。何故かと言うならば、二点が両方とも1若しくは-1であれば結果は変わらずであるけれど、1と-1の時は結果がゼロになってしまい、上の図のように元の二値データが三値に増えてしまう。二値以外は、デジタル領域の1bitDSMでは扱えない。

 

 なのでアナログFIR。アナログであるならばそんな制約はない。74hc590であるならば、その隣り合った二点をアナログ的に足せばよい。抵抗でもトランジスタでもopアンプでも。この場合は足すだけで、もう二では割らない。つまり、二点間の足し算をすると、信号は倍になる。高調波ノイズはほぼそのまま。埋もれていた音声信号が6dBだけ浮かび上がってくるという按配。6dBだけ地上に近くなる蜘蛛の糸

f:id:xx3stksm:20190724192326j:plain

 四点間の移動平均だとこうなる。更に高調波ノイズが落ちるので、結果として音声信号がより浮かび上がってくる。八点間だとこうなる。

f:id:xx3stksm:20190724192458j:plain

 元々の青の信号に対して、八点間の足し算だけでここまで元の赤に近い信号に変わる。つまりは、高調波ノイズを落とせる。なのに音声信号の方は八倍になる。18dBの改善が期待できる。嘘のようなホントの話。但し問題は、アナログの領域でこの足し算を理想的に行う必要がある事。デジタルの領域であればいとも容易い話。しかし多ビットのDACが必要になってしまうので、アナログ領域で足すしかない。

f:id:xx3stksm:20190724192956j:plain

 平均とはLPFなので、足す数つまりはタップ長でこんな具合に高調波が落ちる。これは4096長のFFTだから、八点の場合は(4096/8)=512毎に零点が来る。紫は512おきにゼロになる。四点の緑だと1024おき。全然落ちていない青と比べるならば、八点の紫は相当に効いている。実際、元波形の赤にかなり近くなる。これがアナログFIRという術の正体。実際は32点ぐらいの移動平均を使う。

 

 現実のハードウエアでは、四点だとこんな感じ。四点ぐらいでも、その後に6db/octの落ちっ放しになってくれるアナログフィルターを入れるだけで、青の波形になる。アナログでの足し算とはいえ、FIRは意味合いとしてはデジタルフィルターなので、上の図のように落ちっ放しにはならない。これはデジタルフィルターの鉄則。

f:id:xx3stksm:20190724193715j:plain


 ではこれで一件落着かと言うならば、せいぜい三合目。それで出て来る数字は、90dBぐらいのSNRとかTHD。これは実用レベルではあるし、90dBのSNRでも大抵の場合、残留ノイズは聞こえないけど。それを超えるためには二つ目の術が必要になる。74hc590のような場合、一個あたりの特性はこんな感じだと思う。

f:id:xx3stksm:20190724194650j:plain

 THDがあまり良くないのは二次の歪が大きいため。これは差動型にしてやるとかなり改善できるけれど、この方式の致命的な所は、電源が基準電圧になってしまう事。普通のDACチップでは、基準電圧に気を使う。PSRRが0dBなので、ここでのノイズがそのまま出力に乗ってくる。Signalyst型では、74hc590の出力をそのままアナログとして使うため、電源のノイズがほぼそのままアナログ出力に出てしまう。

 

 なので本来のアナログFIRの、音声信号だけを大きくしていくという美味しい所を享受できない。音声信号と共に、ノイズ成分もクモの糸を伝って上がってくる羽目になるので、32点の平均でもあまり大きな改善はない。90dBぐらいが上限になると思う。第二の術とは、このPSRR=0dBのしがらみを快刀乱麻を断つが如くに解き放つこと。色んな方法論があると思うけど、ありふれていながらあまり知られていないのがECL。第二の術。こんなの。

f:id:xx3stksm:20190724195708j:plain

 T1とT13が基本単位。残りは足し算のためにコレクタが共通になっているだけ。32の平均ならば、32個のパラになる。LN_0とLP_0は逆相になったトランジスタのスイッチング信号で、これが1bitDSMに相当する。LN_1とLP_1はLN_0とLP_0を一段遅延した信号。T13を抵抗に置き換えると、標準的なECL回路になる。T13は定電流回路で、その電流はT1のどちらかのトランジスタに全て流れる。LN_0とLP_0に0.4Vぐらいの差があれば、高いベース電圧のトランジスタに全て流れる。

 トランジスタ(T13)の定電流性から、オンになっている方のベース電圧に乗っているノイズは、流れる電流にはほとんど影響しない。T1のドライブはFPGAなので、LN_0とLP_0には74hc590と同じように電源のノイズが乗っている。けれども0.4Vが0.5Vになったとしても、オンになっているトランジスタに流れる電流に変化はない。つまり、それなりのPSRRが期待できるという話。なのでECLのような抵抗ではなく、T13で定電流にした方が良い。

 この基本単位の特性はこんな具合。差動型になっているので、そこそこのTHD特性で、U2のゲインが18dBぐらいあるので、R1とR4の所でのノイズは115+18=133dBFSぐらい。0dBFSが3.5Vppなので、1uVを切る。opアンプのノイズや熱雑音とかでその位と思う。FPGAの電源ノイズを分離できていないとこんな数字にはならない。

 

f:id:xx3stksm:20190724201818j:plain

 
タップを倍にすると、ほぼ6dBの改善。信号成分だけが倍になるので、そういう美味しい話になる。青は残留ノイズで、信号が倍になっているのに変化しない。これがアナログFIRという魔法の真の姿。

f:id:xx3stksm:20190724201935j:plain


 更に倍にするとこう。ちょっと術に陰りがあるものの、通常のDACのパラ接続では良くても3dBなので、悪くはない。THDは逆に悪化しているけれど、これはあんまり気にする必要はない。実質的にはこの段階で八点の足し算をしているので、アナログ領域ではそろそろ馬脚が現れる。最後の術でこれは化粧する。三発目はくの一。 

f:id:xx3stksm:20190724202239j:plain

 これが12点の足し算。さすがにノイズフロアが3dBぐらい上がってしまう。

f:id:xx3stksm:20190724202900j:plain

 そして最終の24点での足し算。くの一で化粧して、そこそこの数字。これはトランジスタのスイッチングパルスのLN_0とLP_0を、微妙に調整する。ターンオンとターンオフは、同じ時間では切り替わらない。トランジスタの個体差なども関係する。なので最後に一番良さそうな位相関係になるよう、化粧する。

f:id:xx3stksm:20190724203042j:plain


 FPGAには内蔵のPLLがあって、位相を微調整できるようになっている。デジタル的な値なので、記憶しておいて電源オン時に再設定すれば良い。あんまり意味はないけれど、115dBを超えるようなTHDには再現来があまりない。現行のAD9717の3bitDSMでも、落ち着くまでには数分かかるし、いつもいつも同じ数字にはなかなかならないもの。1bitDSMは、直線性とは無縁の世界にいるので、そういう安定性はとても高い感じがする。

 

 まだ試作段階なので、直す所は沢山ありそう。でも潜在能力はとても高い。磨けば更に光る原石。今はXc6slx9の中にDSMの変調器が入っている。それよりも完全にデジタルとアナログを分けて二枚基板にして、アナログ部分はXc6slx4でトランジスタのドライブだけにした方が良いと思う。小振幅での特性を考えると、DSMの変調はもう少し大きめのFPGAで対応した方が良さそうだし。

 

 ともあれ、3bitDSMは一年以上かかった。1bitDSMは一月で目鼻がついたし、伸びしろがまだまだある。天下を取るのは 1bitDSMという、DACの最終予想は、現実のものになるはず。次の次の基板ぐらいで、今のAD9717は置き去りにされて後塵を拝すのみになるだろうなあ。短い命に合掌。