Linuxに手を出すのは、ちょっと敷居が高い。でもRpiのIISは実験用の信号源としては役に立ちそうなので、今回のDAC基板はIISのピン配置をRpiに合わせてある。大きさが少し違うのでHATとは言えないけれど、そのままRpiにはつながる。ドライバーはなくても、generic IISで信号さえ出してもらえば大丈夫。こんな具合。
普通のHATだとこんな感じ。
RpiのIISはジッタがテンコモリであるとは周知の事実。では数字的にどの位なのかを確かめたくて、Rpiにもつながるようにした。測ってみると、確かに問題あり。バチモンのpifiberryで調べたら、対策なしではCD並の16bitぐらいの精度しか出ない。勿論、これはRpiの問題なので、どんなDACをつないでもDSMでは同じ結果になる。
16bitのファイルでも24bitのファイルでも、同じぐらいのS/Nになってしまう。歪の-90dB前後はまあこんなもの。現実の問題として、96dB程度のS/NはCDがそうであるように、ノイズが聞こえる事はない。問題になるのは、デジタルのクロスオーバーを使う時で、中音はスピーカーの能率が高く尚且つ耳の感度も高いので、ここでは実害が出る可能性あり。
どうしてこれがジッタの影響かというならば、話は簡単。ジッタ対策をしたクロックに入れ替えると、24bitファイルの劣化がほとんどなくなるので。pifiberryでは、後付けのリクロッカーというHATを間にかますしか手はないと思う。そこまで拘る必要はないけど。
こういう時は、市販品ではなくてDIYが真価を発揮する。自作ものであればクロックの補償は簡単に出来るので、befpreとafterを比べるならば一件落着。こういう結果になる。
クロック補償なしで、そのままつないだ状態が上。OSRの関係か、更に悪化してS/Nは88dB程度になっている。補償してやると、20dB近くも改善する。歪もそれに連れて良くなる。x256のOSRにして5bitのDSMにすれば、S/NはSDカードからの読み出しとほぼ同じで110dBぐらいになる。これが本来の特性。
但しこれには少し裏がある。というか表であれば、こんな事は起きない。今までずっと表一本で来たので、ここまでジッタが影響するとは初めての経験。表というのは、マルチビットの事。マルチビットとDSMというのはかなり境界が曖昧で、ここでは元のDACチップが14bit以上をマルチビット、6bit以下をDSMと言っている。NFBはどちらも入っている。
その間はどうなのかというならば、考えない。普通のオーディオ関連でそこを使う事はないので、ない事にする。敢えて使うとするならば、両者の中間的特性になると思うけど。ハッキリしているのは、マルチビットは圧倒的にジッタ耐性が高い。なのでRpi程度のジッタであれば、ほとんど特性に劣化はない。こんな具合。
補償なしだと、30kHzを少し超えた所に変な成分が出ているけれど、歪やS/Nはほとんど劣化しない。-100dBに少し欠ける程度の歪はかなり良い部類。スピーカーではどんなに良くても-60dB程度の歪はあるので、-100dBで特に問題はない。
何故マルチビットがジッタに強いかは、出している出力の問題。基本的にマルチビット(PCM)は1kHzであればそのまま1kHzを出力する。x512のOSRでサンプリング周波数が上がっていても、出力は低周波のまま。DSMでは、x512のOSRなら10MHz近い周波数を出して、そこから低周波分のみを使っている。
クロックジッタの影響に関しては、多くの誤解がある。サンプリング周波数とDACの出力周波数の比が関係する。昔のデータシートには必ずそういう事が書いてあった(pcm1702の頃)。今はオーディオメーカーがジッタで商売する様になっているので、そんな不都合な事実は書かないようになっているみたい。高速ADCやRF用のDAC関連にしかそんな記述はない。詳しくは、こういうの。
出力が1kHzと10MHzでは、ジッタ耐性が80dBも違うよという話。
x64のOSRでも1MHzぐらいを出すので、マルチビットの10kHzと比べるならば、40dBも耐性が違ってくる。DSMがジッタに弱いという話は時々目にする。但し、サンプリング周波数が高いのでそうなる、という方向で言っている事が多いと思う。正しくは、出力周波数が高いのでそうなる。つまり一番のジッタ対策とは、マルチビットを使う事。
実際のRpiのクロックを調べるとこうなっている。
RpiにはデータサンプリングのBCLKしかなくて、MCLKというのは出ていない。これは192kのファイルの時のBCLK。2nSぐらいのジッタがある。下はヒストグラム。前の濃いめの波形と後ろの少し薄めの波形は、頻度の違いでそうなっている。茶色の四角内で頻度を比べると、四対一ぐらいと分かる。五回のうち四回が前の波形で、一回が後といった按配。80nSぐらいの周期で2nSのジッタはかなり大きい。
でもまあ今一つ分からないので、FFTでみるとハッキリする。テクトロの3000シリーズは、おまけで少し本格的なスペアナがついている。オシロの他にスペアナはちょっと負担だけと、一体物ならば使って損はなし。おまけとは言え、かなりの精度が出る。
本来の周波数に対してワサワサと、余計なのが沢山ついている。ノイズ電力という見方をするならば、40dBもS/Nがない事になる。時間軸波形からの類推として、まあこんなもんかと思う。本来はこんな具合になるのが普通。
ほとんど測定限界で、本来のクロックのみしか観測できない。これが正しい。但し、市販チップの場合、これはほとんど意味を持たない。普通はこれを元にして内部のPLLで必要なクロックを作り出す。それは基板の実装状態であるとか、電源の質に大きく依存する。現実のクロックが如何なものかは外部からは分からない。出力の信号から判断するしか手はない。
自作品の場合は、DACチップに入っているそのままのクロックを見れる。これもそう。勿論、最終判断は実際の1kHzなどの信号で測る。Rpiの場合はこんだけ悪いので、ハイエンドとして使うのであれば、クロック補償は必須。或いは、マルチビットを使う。
リクロッカーと言っているのは、大きめのバッファメモリー(512k)を用意して、FIFOとして使うHAT。なのでいずれはオーバーフローするけれど、10時間程度は持つだろうから実質これで問題ない。うちの基板は単純にPLLで補償する。LRCKはジッタがないので、ここからクリスタルのPLLで再生用のクロックを作るのが簡単。
16ワード程度のFIFOを用意してRpiからのBCLKで書き込んで、PLLで作ったクロックで読みだすだけ。勿論、オーバーフローはしない。クリスタルのPLLは安定なので、ジッタに弱いDSMであっても差し支えなく動作する。
ほんの少しだけ余計な成分が出ているようだけど、DSMでも問題なく使える。これは光入力の信号に対してロックした時のスペクトル。IISよりはずっと条件が悪い。光はフォトカプラーのジッタが大きいので、TOSLINKの場合こんな特性は望めない。CS8416だとこうなる。他のレシーバーでもTOSLINKならば似たような特性にしかならないはず。
48kHzの倍数になるのは、元が48kHzの信号だから。時間軸だとこう。
RpiのIISとほぼ同じく2nSのジッタ。カプラーでのジッタなので、綺麗な正規分布になる。今までこれをそのままクロックとして使っていたけれど、マルチビットしか使っていないためか、出力にジッタの痕跡が出る事はない。DSMだと出る可能性はある。同軸で入れるならば、こんなに悪くはない筈。
しかし現実問題として、光で完全な分離をしないと他に致命的な問題が出るので、導体でつながる同軸はダメ。アイソレーターなんてのは気休めにしかならない。あれは元々アースグランドの電位差でICが壊れないようにするもので、スイッチング電源から出るような高周波ノイズは素通しと思った方が良い。プラスチックに勝る絶縁体はない。なのでDSMを使うのであれば、光に対してのジッタフリーなクロックの再生が必須。
TOSLINKを使わなければカプラーのジッタは正規分布なので、これを平均化すると相当に正確な基準信号が作れる。それを元にしてクリスタルのPLLを使うならば、光入力に対しても上に挙げたように安定なクロックが作れる。クリスタルのPLLは引き込み範囲が狭いので、市販品で使うものはないと思う。大きく外れた周波数で出してくる装置があったりするので。
昔風のHC-49型は大抵は在庫品で比較的引き込み範囲が広い。多分24.576MHzに対して、+1kHzから-1kHzぐらいは引き込める。500Hz外れるものはあまりないので、大抵はこれで間に合う。特に自分用であれば全く問題はない。
どうして光が必須であるかは、コモンモード電流の問題。コモンモード電流とは、一本つないだだけなのに、何故か電流が流れるという不思議。例えるならば、雀は感電しないが、大型の鷲や梟は感電する。電子機器も、オーディオ製品のような微小電圧を扱う場合、発電機とは些か様相が異なる。アースグランドに対する対策が正反対。強電では、電流を流して感電防止、弱電では流さないようにして感電防止。
電柱にとまった鷲の翼が電線に触れると、感電する。この事故はとても多い。電柱は接地されているのでアースグランドと等電位。電線は高電位。故に感電。鷲は知らないだろうが、お前は既に触れている。アースグランドに既に触れているので、電線に触れるだけで閉回路が出来て感電。雀は電柱と電線の両方に触れる事はない。電柱のみか電線のみか。故に感電しない。
電子機器も同じ。商用電源を使う限り、お前は既に触れている。そして光などで絶縁されない限り、浮遊容量などを介して必ずノイズ源につながってしまう。結果として閉回路が出来て、知らない間にコモンモード電流が流れている。それは多くの場合、普通のノーマルモードに変換されるので、不可思議なノイズとなって現れる。或いは、聞こえる。電線で音が変わるのは、嘘ではないと思う。導体の電線はコモンモード電流の経路になっている。材質に意味はなく何処を這っているかがキモ。実際、空中に吊ると良いと言っている人もいる。
閉回路が出来ない限り電流は流れない。微小電圧を扱う場合は、アースグランドから分離する事。コモンモード電流は二本つなぐ必要はない。なので知らない間に流れている。アースの場所を変えると大きく音が変わるとは、誰もが経験している事実。そしてその対策は皆違っている。状況依存なのでそうなってしまう。強電的に流す方向で考えるならばそうなる。
元を辿るならば話は簡単。流さない事。雀になれば感電はしない。アースグランドから分離するならば、一本は外れる。感電の可能性はずっと減る。そして対策も簡単。微小電圧は、アースグランドにつながない。