2019年7月3日水曜日

【にわかAVマニアの暗雲】 XMOS DDC 出力にclock jitter ダメこれ?

由々しき事態が進行中だ.

XMOSのDDCとAK4495を組み合わせて、よい音が出たと喜んでいたのも束の間、XMOS DDCが出力する LRCK,BCLK,MCLKに明確なjitterが観測された.これでは音が濁ってしまうではないか?  (それを指摘するサイトも存在する)

まずは状況を、、、

↓BCLK/MCLKに2.5nsぐらいのjitterがいる.LRCKも同様.

2.5nsのclock jitterが音質をどれだけ劣化させるかを試算してみよう.

オシロで観測しているjitterはpeakを読み取っている.つまり2.5ns-ppということだ.
だが知りたいのは平均化した値だ.すなわちjitterの実効値を知りたい.
実効値を表示させるにはTime Interval Analyzerという高級測定器があれば便利なのだが、持っていないので、ここはエイヤッと1/5にしてrms換算値としてしまう.すなわち、XMOS DDCのclock jitterは0.5ns-rmsということにする.

0.5ns-rmsの影響度はどうなのだろうか?
HiRes音源であっても最終的には44.1kHzサンプリング周期に丸めて耳に入るので、fs周期は、
   44.1kHz   →   22675ns
と考えられる.
jitterの影響度は、
   22675ns ÷  0.5ns-rms  =  45350
となる.
つまり、0.5ns-rmsのjitterが存在すると、44.1kHzサンプルの音に1/45350の影響を与えるということである.大雑把な言い方だが.
この45350という数字は、2^16=65536に近い.すなわちXMOS DDCを使っている限り16bit相当の音しか聴けない、という恐ろしいことを意味しているのである.

あくまで大雑把な換算ではあるが、どう間違っても20bit分解能なんか夢のまた夢であろうよ.

これは容認できない.もはや死亡である.

なぜなら、AK4495のモノラルモードのSNR=126dBというのがカタログスペックである.これは、約21bit分解能に相当する.DACの性能が21bitほどあるにも関わらず、その前段のDDCが出すLRCK/BCLKがノイジーで16bit分解能しかないとしたら、、、それはDDCの性能で律速されていて何を聴いているのか不明だ.

これにはビックリしたなぁ.
だってさ、XMOSのDDCって、高価なpro用 audio機器にも使われているでしょ.それがこの性能じゃだめでしょう.

仮にDDCのjitterに22bit相当の奇麗さを要求するとしたらどれだけのjitterが許容されるかを概算してみると、、、10.8ps-rms である.

-----
XMOSの素性は酷くないが、プリント基板の設計が悪いという説は考えられるか?

→否定する

理由は、jitterが概ね2本に割れて見えているところにある.
これは、XMOSのPLLがdigital PLLであることを意味している.
digital PLLの回路は、夥しい数のgateを直列に並べて、夥しい数のセレクタを通じて、周波数や遅延時間を調整してくれるようになっている.ただし時間も位相も量子化される.
2本に割れている理由は、N番目とN+1番目のgateが交互に切り替えられているからなのだ.
←XILINX XC9538より

一方で世の中にはjitter attenuaterという特殊用途ゆえお値段の高いICがある.
jitterのあるclockを入力すると、内部のPLLがそれにロックして、jitterが少ないclockを出力してくれるというICだ.そのPLLは言うまでも無くanalog回路だ.analog PLLでないと美しいclockを生成できはしない.(正確にはVCOがanalogである点が重要)

pro用機器でも採用されるXMOS DDC ICは当然analog PLLなのでしょ? と思っていたのだが甘かった.

-----
他のDDC基板は無いのか?

→存在はするが素性が不明なのだ.

↓まず、ATMELのCPUと、XILINXのFPGAを組み合わせたものがある.
clock生成と切り替えのためにFPGAが使われている.FPGAは容認できない.もしかしたらXMOS DDCよりマシかもしれないがね.

↓XMOS+FPGA(XC9538)という構成のものもあるが、同様の理由で容認できない.

↓SA9227というICがある.datasheetを読んだが、電気的特性については記載されておらず、jitter性能は不明だ.

↓CM6631というICがある.これもdatasheetに電気的特性の記載が無い.

というわけで、詰んでいるのかもしれない

プリント基板の売り文句に「高精度Crystal搭載」というのがたまにあるけれど、これは嘘だろう.Crystalが悪いのではなくて、PLLの性能が悪いのだから.世迷言はやめていただきたい.

上で書いたjitter attenuatorを導入するのはとりあえず見送った.とりあえず、CM6631基板を発注したからだ.

だがしかし、いずれはjitter attenuatorをがっつりと導入する日が来る予感がする.
上で10.8psが必要と書いたが、datasheetによるとjitter attenuatorを導入すればクリアできるらしい.


こんな罠があるとはね.

fuckだなぁ

10 件のコメント:

  1. ジッタがそんなに効くなんて。しかもpsとか。
    恐るべしオーディオの世界。

    返信削除
    返信
    1. 20bitとかいうオーダーですとダイナミックレンジ的にクレイジー領域ですね。

      削除
    2. いつもの通りすがりの人2019年7月5日 22:16

      回路構成とか、よくわかんないんですが、
      ベースクロックは大体で言うと
      2.5ns → 400MHz
      10.8ps → 93GHz
      のオーダーですね・・・
      ※400MHzはともかく、93GHzって・・・
      ホント、恐るべしオーディオの世界ですね。

      ジッターが、割ときれいに?出てるように見えるので、
      初段にスワローカウンタでも使ってんのかな?という気もしました。
      ※イマドキの高速ロジックに、こんなレトロな技術が使われてるのか?
      という気はしましたが。

      削除
    3. 細かすぎて本文には書かなかったのですが、次のように考察しています.

      狭義のDPLL(digital PLL)では、インバータゲートのリングカウンタでVCOを形成します.
      ところがanalog VCOを採用するDPLLも有り得て、そういうのはana/digi混合PLLともいうような回路になります.
      XMOSがどちらなのかはとりあえず不明です.

      ではXMOSで見える2.5nsのブレは何なのかというと、DLL(delay lock loop)の時間分解能が2.5nsなのではないかと予想しています.(リングカウンタVCOの時間分解能が2.5nsだと粗すぎてloopが不安定になると思う)

      DLLというのはLRCH,BCLK,SCLKのような複数クロック同士の位相を合わせるために使われる、いわば遅延時間自動調整回路でして、FPGAなどでは大抵はPLL+DLL構成になっていると思います.

      ところでjitter attenuator ICのSi5317のような製品を一口でいうと「loopの応答速度がやたら遅いanalog PLL」であるようです.あまりにも応答が遅いと周波数引き込みに失敗する可能性が高まるので、補助回路がいろいろとお手伝いしてるんじゃないかとは思いますが.

      Si5317のような高級品ではありませんが、ICS570Bというお手軽品がありまして、まずはお手軽品でclock浄化を試してみようと思っています.

      削除
    4. いつもの通りすがりの人2019年7月6日 17:33

      当方、あんまりDPLLとか知らなかったので、思わずWikiPediaを見てしまいました
      (というか、ちゃんと デジタルPLLの項があるっていうのがすごいな・・・)
      アナログPLLと違って、単純に出力が基準クロック×n というわけではないのですね・・・
      >DLL(delay lock loop)の時間分解能が2.5ns
      これは、
      https://ja.wikipedia.org/wiki/ファイル:All_Digital_PLL_(TDC).PNG
      で言う、「各τからの出力が、2.5nsずつズレている」ということですね

      ※アナログPLLで言うところの、位相ノイズみたいなものか
      ※だったら、この分解能を下げちゃえば「どこかに収束して」
      安定する?ような気がするのですが、そんなハズはないですよね。
      (多分、変化の周期が長くなるだけで本質的な解決にはならなさそう・・・)

      うーん、ハイレゾオーディオは、奥が深い。。。

      削除
    5. 御理解で合っていると思います。
      わたしは7年間ぐらいDPLL開発ばっかしで飯食ってました。

      削除
  2. 同じ問題にハマってここに辿り着きました。
    更にググっていたところ、XMOSのデッドリンクになっていると思われるファイルを発見・・

    https://www.xmos.com/download/I-O-timings-for-xCORE200(1.0).pdf
    I/O timings for xCORE200

    16ページに次の記述がありました。

    I2S_MCLK が xCORE に再同期されると、I2S_BCLK は 12.288 MHz で動作しますが、コア クロックに同期します。つまり、I2S_BCLK の周期は 81.380... ns ですが、これは 80、82、82、80、82、82、80、... ns 間隔のクロックのシーケンスとなり、平均して正確に 12.288 MHz のクロックが作成されます。これにより、BCLK にジッタが発生します。これは通常問題になりませんが、CODEC が I2S_BCLK のジッタに敏感な場合は、I2S_MCLK でクロックされる D タイプ フリップ フロップを使用してマスター クロックに再同期できます。これを行うと、BCLK のクロック エッジがシフトされるため、セットアップ、ホールド、およびクロック対データのタイミングが変わることに注意してください。

    コアクロックが400MHzならば、ご指摘のジッターになるかも?

    返信削除
    返信
    1. あら、正直に書いてるですわね.
      jitter attenuatorと組み合わせるとよろしか.

      削除
    2. 私はとりあえずジッタークリーニングせずに使っておこうかと・・・(BCLK、LRCKはDATAをDACのシフトレジスタ群?に無事送り込むためだけにある認識。ただしMCLKだけはXO出力をXMOS MCUを通さず、そのままDACへ送リます。)とはいえI2Sをまんま外部機器に渡す場合はジッタークリーニングしたいですね.

      削除