USB-Audio用USBを考える

15/05/02初稿

 ハイレゾについて考えていたら、≪foobar2000≫のPCM→DSD変換によって「DACユニットをアナログLPFとしてのみ利用する」用法はとても魅力的に思えてきました。
 そのためには(手持ち機材としては)UDA-1を使う必要があります。つまりUSB-Audioです。しかし、これまでずっとHDMIばかりケアしてきたのでUSBについてはほとんど白紙です(笑)。今更のように“AudioによいUSB”について考えることになりました。

 なお、本稿に記す音質関連の評は客観的なデータとの因果関係に基づくものではありませんから、一般論にはなり得ません。
 「こう考えてやってみたらこうなったので私はこっちにする」ジャンルのお話です。
 せっかくいろんなUSBポートがあるんですから、漫然とではなくどうしてそうするのか考えないとモッタイナイ(笑)。


■Audio用USBポート考察

 はじめに。一部誤解があるようにも見えますが、USBは原則「新しいホスト規格は古い規格をサポート」しています。
 例えば、ONKYO製SE-U55SXはUSB1.1デバイスですがUSB3.0ホストに繋いでも動きます。もちろんUSB1.1モードでリンクして、です。
 USB3.0に繋いだからといってUSB2.0対応DACユニットとのI/F速度は10倍になって空回りしたりはしません。

 逆に「ホストの規格にダウンして動くデバイス」もあります(ていうか概ね動く?)。例えば、USB1.1ホスト(実際にはUSB1.1時代のHUBで試しました)にUSB2.0デバイスたるUDA-1を繋いでも動きます。もちろんUSB1.1モードでリンクしており、24192などのハイレゾは通りませんけれど。ちなみにSB-DM-PHDもUSB1.1HUB経由で(少なくとも再生機能は)動きました。

 ですが、一般的には(CPUと同じように)「ホストはなるべく低速規格の方がAudioにはヨイ」信仰があるように思います(互換性のハナシは別として)。USB3.0より2.0、もしかしたら1.1信仰もあるカモ?
 しかし、実体験としては、オンボードのRenesas製3.0コントローラの方がチップセット内蔵2.0より好ましく聴こえたことがあります。

 そういう可能性あるのでしょうか?

・割り込み負荷
 そこでUSB3.0について調べたところ、2010年の大原雄介氏記事(*)を見つけました。今更でスイマセン。
 これによると、USB3.0コントローラ「xHCI」ではCPU負荷軽減が図られている模様です。1.1も2.0も3.0もすべてxHCIが制御するとのことですから、2.0モードでも1.1モードでもその恩恵を受けられると理解できます。
 つまり、速度ではなく割り込み負荷の意味で「USB-Audioでは3.0(というかxHCI)コントローラを使った方が有利」な可能性はあるのでは。

*:http://pc.watch.impress.co.jp/docs/column/interface/20100930_396807.html

 ちなみに、各世代のコントローラは以下の通りです。

・UHCI・・・USB1.1世代。IntelとVIAが採用。バスマスタ転送非対応
・OHCI・・・USB1.1世代。NEC(現Renesas)など。バスマスタ転送対応
・EHCI・・・USB2.0世代。USB2.0専用
・xHCI・・・USB3.0世代。USB1.1も2.0も制御できる

 そういえばUSB-Audioデバイスがまだ1.1だった時代、「UHCIよりOHCIの方が負荷が低いのでUSB-Audioに有利」なんてハナシあったことを思い出しました。本件はその続きになるでしょうか。

 Renesas製コントローラチップの内部ブロック図を見ると、USB2.0(*1)ではUSB1.1用のOHCIと2.0用のEHCIが搭載されていますが、3.0コントローラ(*2)にはxHCIしかありません。USB2.0世代では1.1と2.0のコントローラコアが異なっていたワケですが、3.0世代では確かにひとつで全規格まかなってるようですね。
 USB2.0世代では1.1デバイス接続時にはどうせ使ってないEHCIを無効にする(USB2.0をDisableにする)といった“チューニング”もやりましたが、USB3.0世代ではそのあたりの事情も変わっているということですね。

*1:http://japan.renesas.com/products/soc/usb_assp/product/upd720102/index.jsp
*2:http://japan.renesas.com/products/soc/usb_assp/product/upd720202/index.jsp

 ということで、「負荷」について実動作で確認してみることに。いろいろ弄くりますのでAudio用E-350システムではなくGIGABYTE製GA-Z68X-UD3H-B3&2600Kの自作メインPCにUDA-1を繋いで行いました。
 ≪foobar2000≫による1644WAVのDSD256変換再生にて(転送データ量をできるだけ多くするため。データ量には関係ありませんがResampler-Vでx4にしています)。
 メインPCにはデフォルトで「Z68チップセット内蔵USB2.0」と「オンボードEtron製EJ168チップによるUSB3.0」があります(善し悪しはなんとも言えませんが、この両者でも違うように聴こえます)。
 さらに、後述するuPD720200とuPD720202、およびuPD720102(PCI)の拡張カード3枚も加えて比較してみました。

 タスクマネージャで「割り込み負荷」を見ます。2600Kの定格では1~2%程度となりほとんど差が出ませんので、BIOS(UEFI)でCPU動作を最低レベルの「1.6GHz/2コア/2スレッド(当然TurboBoostはDisable)」に設定してみました(真の最低1コア/1スレッドじゃないのは、DSD変換でパフォーマンス使い切ってしまうためです)。
 正確な数字かどうかアヤシイですが、ざっくりした相対比較はできるのではないかと。

 すると、確かにUSB2.0よりUSB3.0の方が負荷率は低いようです。また、OSのINBOXドライバとベンダ提供ドライバ、そのバージョンなどでも“倍”レベルで変わります。
 Etron製EJ168はGIGABYTEやEtron社サイトにある“純正”ドライバだとほとんどハング状態になってしまいましたが、OSのINBOXドライバに変更してみたらちゃんと動きました(苦笑)。(特に初期型の?)USB3.0チップ、イカガワシイこともあるようです。これは極端な例としても、ドライバのデキでも負荷は結構変わる可能性を感じました。

 う~む。「割り込み負荷」的には、USB3.0(xHCI)の方がいいような気がしてきました。

・バスパワー品質
 さて、USBポートにはUSBデータI/F以外にも着目すべきポイントがあります。言うまでもなく「バスパワー品質」です。
 バスパワー駆動の機器には当然大きな影響を及ぼすでしょう。UDA-1ではデテクトにしか使っていないようですが、それでも品質(GND含め)はいいに越したことはありません。

 そのUSB5Vの“出自”ですが、M/B標準搭載のUSBポートでは、チップセット内蔵であれオンボコントローラ(イマドキはPCIe接続)であれ、M/B上の5Vが使われているハズです。GIGABYTEやMSIではその品質を向上させたことをウリにするM/Bも出していますね。
 一方、USB3.0の拡張カードはペリフェラル電源を入力して使う仕様になっています。つまりM/Bを経由しない“PSUダイレクト”の5Vがベースになっているワケです。
 また、電源回路部品(コンデンサなど)の配置スペースやコストの制約が大きいM/Bより、それが確保しやすい拡張カードの方が、5V電源品質は高いような気がします。実際、オンボではFUSEを複数ポートで兼用してたりするようですし。

 そこで、試聴してみるためPCIeのUSB3.0拡張カードを調達。USB3.0コントローラとしては定評あるRenesas製uPD720200F1です。N/Bですけど。
 ざくっとオンボと聴き比べしてみると「ちょっといいかな」というところ。
 しかし変化は感じたので、より新しいuPD720202も試したくなりました。新型はノートPCを考慮して低消費電力化されたということですし、割り込みもより洗練されて低負荷になっているかも知れませんし。
 uPD720202搭載カードを物色したところ、“USB-Audio用として”ちょっと魅力的な商品を見つけました。

  PP2U-E : uPD720202搭載2ポートPCIe2.0-USB3.0拡張ボード ver1.0
                 PP2U-E : uPD720202搭載2ポートPCIe2.0-USB3.0拡張ボード ver1.0

PP2U-E : uPD720202搭載2ポートPCIe2.0-USB3.0拡張ボード ver1.0

 EはEnhance=強化版の意でしょう。

http://www.bplus.com.tw/Adapter/PP2U.html
http://www.bplus.com.tw/PDF/PP1U2U_jp.pdf

 三洋製固体電解コンデンサとかLDO(Low Drop Out)レギュレータ(おそらくuPD720202の1.05V電源生成用と推定)とか、よさげではありませんか。
 早速調達。が、装着したらPCが起動しません。別のPC(Asusマザー)で試してみると、起動してコントローラとしては認識されましたがUSBデバイスを挿してもウンスン。
 不良品かと思いましたが、いろいろ試している中でふとUSBメモリのLEDが点灯していないことに気づきました。ではとペリフェラル電源を繋いでみたらサックリ動作(苦笑)。このカード、内部ペリフェラル電源を繋がないとUSBデバイスが電源不足になるだけでなく(M/Bによっては?)正常動作しない仕様だったのです。

 N/Bカードでは繋がなくても使えたので油断してました。つまりカードによっても違いがあるということです。
 そこでUSBバスパワーとPCIe x1スロットの電源について調べてみました。
 N/Bカードはペリフェラルコネクタを繋がなくてもUSB5Vを供給できるのですから、PCIeのエッジコネクタからの電源でそれをまかなっているハズです。が、実はPCIeには5V供給はありません。ですので、12Vからレギュレートしていると推定されます。
 しかし、通常のx1スロットの12Vの供給能力は規格(*)では0.5Aなので、単純に5V換算すると1.2Amaxです。つまり、USB3.0仕様である900mAは1portしか供給することはできません。

*:http://pc.watch.impress.co.jp/docs/column/hot/20100324_356370.html
 x1でもサーバ用途などではもっと流せるものもあるようですし、x4以上だと能力は拡大します。USB3.1世代などx4以上のカードの場合は事情が変わりそうです。

 N/Bカードのパターンをテスタで追っかけてみると、スロット電源12Vから生成した5Vとペリフェラル5Vをミックスしているようです。
 ペリフェラル電源を繋がないと「全ポート合計で900mA」、繋ぐと「各ポートごとに900mA」といった仕様の製品もあるようですが(N/Bカードの仕様は不明(笑))、このような仕組みだと推定されます。

 ではPP2U-Eはどうなっているのでしょう?
 それを確認するため、まずPCIe電源エッジ部のピンアサインを示します(“裏面”は本論に影響ないので省略)。
 商品写真を加工利用してよいことが確認できているBUFFALOさんのカードIFC-PCIE2U3S2の写真を使わせていただきました。ありがとうございます。

PCIeエッジ

 これを踏まえてPP2U-Eのエッジコネクタ部を見ると、なんとPCIeスロットからの12V供給端子パターンがありません。
 テスタで追ったところ、ペリフェラル5VがFUSE代わりの電源スイッチTI製TPS2068に入り、そのOUTがEMIフィルタに繋がってるようです。
 つまりPP2U-Eはペリフェラル5VのみをUSB5Vに使っているということです。

 USB3.0拡張カードのバスパワー5Vには大きく2種類の出自があると言えそうです。

 となると、「ペリフェラル電源を繋がなくても使えるカード」よりも「繋がないと全く使えない」カードの方がUSB5Vの純度は高いと言えるのではないでしょうか。M/Bを経由しないPSUからダイレクトに入った5Vのまま、12Vからレギュレートした5Vと混ぜていないのですから。
 ただ、実物を入手する前に完璧に仕様を判断するのは難しいですね。エッジに12Vパターンがない場合はPSUダイレクト型であることはまず間違いないですが、パターンがあっても部品非実装だったり回路に繋がってないデザインもあり得ますので。ペリフェラル5Vとレギュレート5Vを切り替える仕様や、ペリフェラル12Vから5Vを生成するデザインもあり得ないとは言えませんし。

 ですが、オンボでは「PSUダイレクト」の可能性はまずありませんから、バスパワー品質の点では「拡張カードでよさけなものを探す」方がよいのではと思います。
 ていうか、拡張カードなら、たとえ混ぜる仕様であっても「パターンカットしたり部品ハズしたりして混ぜないように改造する」って荒技もアリかも知れませんし。

 PP2U-Eの5VはPSUダイレクト型であることに加え、関する回路は上記の通り“よさげ”です(笑)。
 これはいいんじゃないでしょうか。気に入っちゃいました。
 2ポートありますが、ペリフェラル電源からのパターンパスが素直に見える上側を使おうと思います(キモチの問題です(笑))。

 なお、PSUダイレクト型の拡張カードなら、USBケーブルなどに細工せず出力前の「バスパワー供給源」を変更できるだろう点も面白そうですね。ちょっと工夫すればバッテリ駆動なども出来そうです。UDA-1はデテクト用途のみで5mAしか流れないようですからeneloopなどでも実用になりそうです(15/05/19追記:eneloopだとダメかも。電源スイッチICをONする電流値が必要かな?)。
 「USB5Vをデテクトにすら使っていない」USB機器もあるようですので、そのような場合はカンタンに「元からカット」接続に出来るのも利点かも。ウチのZ68マザーみたいにカード自体を認識しなくなっちゃうこともありますけど(笑)。

 LDOレギュレータはpdfによるとRICOH製らしい。刻印はH00DPU。
 EEPROMはChingisTechnology製Pm25LD512。

 USB3.0は供給可能電流値規格が2.0の倍近く(500mA→900mA)になってることも有利かもです。

・バス純度
 イマドキはCPU&チップセットがネイティブサポートする拡張用バスはPCI Expressしかなく、PCIバスはPCIe→PCI変換チップによって実現されています。拡張するならPCIe一択となるでしょう。
 同じチップでもバスパワーの観点からオンボより「拡張カード」の方がよさそうだと思いますが、さらに、“バス純度”の観点からもそれは補強されそうです。というのも、イマドキのプラットフォームではCPUがPCIe-I/Fを有しており、M/B上にその拡張スロットを持てるからです。チップセット経由のPCIeより純度高そうじゃありませんか(イメージです(笑))。
 オンボチップはチップセットPCIeに接続されるのが普通ですので、「CPUと直結」するためには拡張カードにする必要があるということです。

・シリコン純度
 変なタイトルでスイマセン(苦笑)。
 Intelの場合(SoC除く)、プラットフォーム標準装備のUSBはIOHに内蔵されています。その中ではUSB以外にもSATAコントローラなどのいろんなシリコンがひしめいて忙しく動いています。IOHとCPUとのI/Fはもの凄く特殊というワケではなくPCIeの変形版ですので、言ってみれば「PCIe接続のマルチI/Oコントローラ」として実装されていることになります。
 専用チップより不利っぽいですよね(笑)。

・レイアウト純度
 コントローラ→USBポートの配線の観点でも、チップセットUSBより拡張カードの方が有利と言っていいでしょう。チップセットUSBはポートに至るまでにM/Bの中を這い回ることになりますので、他のいろんな信号線の影響受ける可能性が高くなるためです。

・PCIカード
 PCIバスカードも試してみました。RATOC製PCIU3(USB2.0:Renesas製uPD720102搭載)です。
 PCIeと異なりPCIバスには5Vが供給されていますからバスパワーとしてはそれを使っていると推定されます。その点においてはオンボチップやチップセット内蔵と同等と言えるでしょう。
 また、上述の通り2.0世代のチップは割り込み負荷的には3.0より不利なようです。


 「割り込み負荷」「バスパワー品質」「バス純度」「シリコン純度」「レイアウト純度」からすると、USB3.0の拡張カード、よさそうじゃありませんか。
 当然PCIe、それもできる限りCPU直結で。


■USBバトル

 ということでいろんなUSBホストを揃えて試してみることに。
 メインPCにごっそり拡張カードを搭載し、USBポートの聴き比べを敢行。UDA-1を鳴らすUSBホストを決めようと思います。
 CD音源のPCM→DSD256変換をUDA-1のヘッドホン出力でHD700にて。Audio用システムじゃないですけど、相対比較するだけなので利便性をとりました。
 CPU直結PCIeは使っていません。

 結果は以下の通り。

 PP2U-E > N/B > オンボ(Etron製EJ168) > Z68内蔵 > PCIU3

 といっても、「PP2U-Eがいい」ことと「PCIU3がイケてない」のは判る気がするのですが、それ以外はダンゴでしょうか。
 やっぱり「USB5Vの出自」は効いてる気がします。
 試しにUSBケーブルを細工して「PCIU3でI/FしてUSB5VはPPU2-Eから供給」してみたところ、PCIU3単独よりはよいように聴こえました。
 PCIU3がふるわないのは「Z68マザーではPCIがネイティブではなく変換チップ経由のため」という理由もあるかも知れません。

 ただし、客観的相関データはありませんので真実かどうかなんて解りません。いくつか思いつく実験してみましたが有効なデータは採れませんでした。
 いずれにしろ個人的に納得するために勝手にリクツ付けして決めたってレベルのお話ですので、採れなくてもいいやと思ってやめちゃいました(笑)。


 以上より、UDA-1用USBとしては、

・なるべく新しい規格の新しいチップ
・オンボではなく拡張カード(拡張スロットのバスはCPU&チップセットネイティブのもの)
・USB5Vの出自がヨイもの(PSUダイレクト型など)

という方針で行こうと思います。当面はPP2U-Eでいいでしょう。

 なお、一般的なUSB3.0コントローラチップはPCIe Gen.2のx1接続でしょうから、Gen.1ではなくGen.2で使った方がいいでしょう。もちろんDACユニットとのデータ転送レートのことを言っているのではありません。「割り込み応答性」観点での配慮です。
 また、当然ながら「1カード1デバイス」で使うべきでしょう。Renesasのブロック図を見ても解りますが、チップの中のxHCIコントローラ自体は1個しかなく、2portは「チップ内ハブ」を介して接続しているからです。
 ですので、「せっかく速いUSB3.0カードを増設したんだから」などとHDD接続したりしない方がよいと思います。


 さて、となると。
 PCM→DSD変換再生するならCPU性能的にE-350だと無理があるのでM/B変更は必須です。
 HDMI-Auido用に「Gfxカード」は残しておきたいので、加えて「USB3.0カード」も挿すとなると、フォームファクタもMini-ITXでなく最低でもMicroATXにする必要があります。
 つまりケースごと変更する必要があるということに。CPUパワーを上げるので当然排熱性能も再考する必要がありますし。

 む~ん、全取っ替えかな?


メインメニューへ

テーマ : オーディオ
ジャンル : 趣味・実用

PCMの「TruePeak」とは何か

15/04/11初稿

 「ハイレゾとDACについて考えていたらいろいろメンドクサイことに気がついちゃったかも知れない」シリーズ(笑)。


■TruePeakとは何か

・データがクリップしていなくても再生するとクリップする?
 とある邦楽CD音源のUDA-1出力をアナログサンプリングしてスペクトルを眺めていた時のことです。
 頻度は多くありませんが、22kHz以上の帯域がヘンな表示に崩れることがあります。録音レベルを下げても発生します。DSD変換でも、PCMのそのまんま再生でもアップサンプリング再生でも同じです。フルスイングのサイン波では発生しないようにボリウム調整したヘッドホン出力でも発生します。
 しかし、プレーヤの≪foobar2000≫のボリウムをちょっと下げると発生しなくなります。

 ≪JRiver MediaCenter20≫でも、PCM単純再生、DSD256変換再生共に発生します。

フィルタリング・クリップ
(アナログキャプチャ)

 ずっと、たまたま何かFFT処理のツボみたいな時に発生するのかと思ってたけどなんだか違うみたいです。
 ということで、これをきっかけ(*)にいろいろ調べることになりました。

*:この「きっかけ」には何か勘違いあるかも知れませんが、以下考察には影響ないと思います。


 クリップして潰れている時の現象? と思って“海苔系音源”で見てみると確かに多発します。しかし、当該ソースの最大音量を≪SoundEngineFree 5.02≫で調べてみると「-0.10dB」です。
 ≪Audacity 2.0.6≫の1of1条件で調べてもクリップしていません。

 これってもしかしてどこかで見た記憶がある「TruePeak」ってヤツでは? と、Resampler-Vで2倍アップサンプリングしたファイル(Convert機能で作成)を作ってみたところ、最大音量は「0dB」になり、「1of1クリップ」も大量発生しました。

 以下、発生箇所の例です。
 上がオリジナル、下が2倍アップサンプリングです。

TruePeak:1644と1688:音楽:トリミング2

*:ただし、このポイントはきっかけになった「スペクトル崩れ」箇所ではありません。
 また、1サンプルのみがフルスケール値になったとしてもピーク潰れとは限りません(本来あるべきレベルはもっと高いのに飽和したのかリアルにフルスケールなのかは判らない)。上記は単純に「アップサンプリングでピーク値が上昇する」例として使っています。
 1サンプルのみフルスケール(フルビット)であることを≪Audacity≫表示にならって「1of1クリップ」と呼ぶことにします。

 オリジナルのサンプルは全くクリップしていません。が、2倍アップサンプリングして“本来あるべきアナログ波形”に近づけたら「1of1クリップ」が発生しています。
 これはPC内でのアップサンプリングで発生した例(*)ですが、DACチップ内でも同様の処理であるオーバーサンプリングデジタルフィルタ(PCM1795の場合は8倍)が行われていることはDAC動作を考えた記事などで詳述した通りです。

*:本実験は、解りやすくするために2倍で実施しています。

 つまり、PC内でアップサンプリングしなくとも、DACユニット内のデジタル→アナログ変換において

オーバーサンプリングデジタルフィルタ処理=リコンストラクションフィルタ処理によってピークは上昇する

のです。

 「TruePeak」「インターサンプルピーク」などと呼ぶようです。
http://pro.miroc.co.jp/2012/08/03/6782/

 DSDのMaxPeak考察時に参照したJPPA資料にもあります。
http://www.jppanet.or.jp/documents/audio_doc/jppa_chair_of_loudness_vol-1_2010.pdf

 ARIBの資料。P.33あたりが詳しいです。
http://www.arib.or.jp/english/html/overview/doc/4-TR-B32v1_0.pdf

TruePeakのリクツを確かめる
 TruePeakは、いわゆる音圧戦争によって発生した現象ではありません。もちろんその方が発生しやすくなるでしょうけれど、意識的に音圧を上げたりせず良心的に0dB未満に抑えた場合でも発生するものです。
 それを確かめてみましょう。

 以下は、≪WaveGene 1.50≫で生成した16kHz:2448サイン波(左)と、それを≪foobar2000≫のResampler-Vでx4:24192にした波形(右)を並べたものです。≪Wavosaur≫にて。
 ピーク関連の実験ですので、念のため-3dBで生成しています。
 16kHzを48kHzサンプリングですから、1周期には3サンプルしかないことになります。

TruePeak:2448とそのx4サイン波 30°:トリミング

 1周期にサンプルポイントが3カ所しかありませんからそれがサイン波のピークを捉えるとは限らず、むしろサンプルとサンプルの間にピークがあることの方が多くなります。
 これが「インターサンプルピーク」です。サイン波なら、一番厳しいのはサンプルリングのちょうど中間がアナログ信号のピークだった時です。本例の場合は位相が30度ズレた時そうなります。波形生成で言うと、周期をゼロクロスからではなく30/360=1/12進んだ状態からスタートしている状態です(自分で作図してみればすぐ解ります。上記資料に図ありますし)。周波数が高くなるほど(1周期のサンプルポイントが少なくなるほど)リアルサンプルピークとの差が大きくなるのが解ると思います。

 上記2448波形は30度ズラして生成したものです。16kHz-3dBのサイン波を48kHzキャプチャした時、たまたま波形とキャプチャ周期のタイミングが30度(1/12周期)ズレた場合のシミュレーションになっているハズです。
 左側の2448では、プラス側振幅は全く-3dBに届いていません。先の資料の通りおそらく-6dB程度低いでしょう。しかし、サンプリング定理に基づいてリコンストラクションされるとキレイなサイン波が再現されるのです。右側の24192は、4倍アップサンプリングすればほぼサイン波が再現できることをシミュレートしていることになります。

 (アップサンプリングなどしない)普通のPCM再生でもTruePeakは発生していると思われます。ので、DACユニット内のOSDF(*)でも上記と同じことが起きているようです(リクツ上その方が納得できます)。

*:Over Sampling Digital Filter

 でも、感覚的には腑に落ちないところもありますよね。本当にそうなっているのか? ていうか、元のデジタルデータよりも約6dBも大きなアナログデータに再現されるのって本当に正しいのか? と。
 そこで、実際にこの2448ファイルを無加工“ネイティブPCM再生”してアナログキャプチャしてみました。環境は「基音と倍音」記事と同じです。

TruePeak:2448サイン波16kHz-3dB 30°の再生波形
(アナログキャプチャ)

 データとしては3サンプル/周期しかなく、しかもプラス側ピークはデータ値としては-9dB程度しかないのに、キレイな16kHzサイン波が再生されています。
 サンプリング定理(リコンストラクション処理)って凄いですね。

・TruePeakは制作側でどう扱われているか
 さて、とすると

「デジタルデータの値としてピークがサチっていなくても、アナログ化したらクリップする可能性がある」

と言うことです。
 制作サイドが、44.1kHz(や48kHz)のデータとしてサチらないようにピークレベルを確認しても、再生(DA変換)におけるリコンストラクションフィルタによってサチる(ピーク潰れが発生する)ことがあるワケです。
 そして、それはDAC(リコンストラクション)が余計なことをしているのではなく、正しい動作なのです。

 単純にAD→DAするだけであればアナログ波形が復元されるだけで元のアナログ波形よりピークが上昇することはないでしょう。
 が、一般の音楽制作ではそうはいきません。デジタルドメインでミキシングしますしシンセなどの人工音声も入ってくるでしょうから。
 少なくとも非ハイサンプリングの音楽データにおいては、リアルデータ値で注意していてもダメってことです。

 これを避ける=事前に確認・修正する方法はあります。データをアップサンプリングしてDAC内におけるリコンストラクションをシミュレートすればよいのです。上記資料には、4倍すればリアルサンプルピークとインターサンプルピークの誤差を0.3dBにまで抑えられるとあります。上で見た24192(4倍)ファイルではほぼ16kHzサイン波が再現できていますので、確かにそのようです。
 「アップサンプリングでリコンストラクションをシミュレートし、クリップしないか確認し、修正する」ということですね。

 以上のことはデジタルオーディオのリクツを熟知している専門家にとっては意外でもなんでもないことだと思います。
 また、アップサンプリングによるクリップチェックは確認だけであってデータに手を加えるワケではありませんから弊害はありません。なので実施していて当然と思いますが、どうもそうではないようですねぇ。
 「TruePeak問題」は制作現場には浸透していなかったのでしょうか。それとも、あまり気にしなくて良いという判断だったのでしょうか。
 まあ、そもそもインターサンプルのピークどころか「“リアルサンプルのピーク”をガンガンクリップさせまくるマスタリング」が横行しているくらいですから、見えないピークなんて、知ってても無視なのかもしれません(苦笑)。

 昔のCDは2~3dBヘッドルームマージンがあるものが多いですが、“かつては”こういうことも配慮していたのかも知れません。

 web検索していたら、「Mastered for iTunes勉強会」の報告書(*)という情報を見つけました。
 この中の【クリッピングをチェックするツール】項に、「すごい数出てくる」「いくつかなら問題ない(とAppleに言われている)」「compかけてガツガツ入れてる音源では1.5dBくらい下げないと出てきちゃう」などとあります。
 おそらくアップサンプリングしてチェックかけるツールなのだと思いますが、もしかすると圧縮エンコードのシミュレーションも入っているかも知れません(圧縮エンコードするとデコード時にピークが上がることがあるらしい)。
 いずれにしてもその結果について意外そうに言われると、TruePeakは制作者側にあんまり意識されてないような気がします。

*:http://jarec.com/report/2492

 どうも“そういうもの”ってことみたいですねぇ。意外ですけれど。


■TruePeakをどうすればよいか

 制作側では“そういうもの”らしいとなると、じゃあ、これエンドユーザはどうすればいいのでしょう?
 「発生数が多くなければ無視してよい」ってのは作る方の事情であって、聴く方にすれば発生数の多少なんて音源データ解析しないと判らないですもんね。

・デジタルボリウムでデータ演算して回避
 PCMそのまま再生でもPCM→DSD変換再生でも、プレーヤ側で2dBくらい絞って送出すれば発生しなくなるっぽいですので、今後はそうしようかなぁ。
 でも、

「もともとピークが-3dB以下くらいのソースならそのままでもいい」
けれど、逆に
「もともとクリップしまくりのソースだとTruePeakを救っても焼け石に水」

ですよねぇ。だからってソースの素性をいちいちチェックしてから再生ってのも… リッピング時にチェックしてフォルダにマーキングでもしとく?(苦笑)

 また、やるなら排他WASAPIやASIOなどビットパーフェクトなAPIに対応してて、かつ、ボリウム機能があるプレーヤを使う必要があります。アップサンプリングする場合はそれより前にボリウム絞らねばなりません。プレーヤソフトに対する条件が増えちゃう=選択肢が狭まるということですね。TruePeakを気にするのなら、ですが。
 ちなみに≪foobar2000≫ではボリウムはDSPより前段でかかっていると思います。

・デジタルボリウムは音質劣化しているのか
 デジタル演算でボリウム調整することには、「音質劣化する」と抵抗ある人も多いと思います。
 ですが、ちゃんとしたプレーヤソフトならそれはあまり気にする必要はないと思っています。
 例えば≪foobar2000≫の内部処理は32bitFloatのよう(*)ですから、(32bitネイティブ音源以外は)“音声情報劣化”を心配する必要はないでしょう。

*:BBSに、SoX Resamplerはプラグインとして32bitFloatでfoobarコアとIN/OUTしているという記述があることから。

 どうして気にする必要ないのか、ちょっとたとえ話で説明してみます。

 PCさんが持ってる10円をDACさんに7/8にして渡さなければならなくなったとします。PCさんとDACさんが“円単位”でしか取引できない場合は四捨五入して9円にするしかないですが、“銭の単位”で取引できるならバッチリ「8円75銭」渡せますよね。
 もちろんいくら拡張しても割り切れるケースの方が少ないですが、例えば16bitを32bit拡張して演算した結果は、元の1bitを65,536段階で表現しているワケで、さらにそこで残る誤差(余り?)はもう無視していいでしょう。

 個人的には、ビット拡張してなお発生する誤差より、TruePeakによるクリップ発生の方がキモチワルイです。

・“ビット落ち”とは何か
 ところで、デジタル演算が嫌いな理由としてよく「“ビット落ち”が発生するから」と言われますが、この言葉、正しく用いる必要があると思っています。
 16bit深度データのプラス側フルスイング値は7FFFhです。例えばこれを256分の1の音量にする時、16bitのままだと8bitシフトですから007Fhになってしまいます。情報量が8bit分もなくなっています。明らかに“ビット落ち”ですね。
 しかし、24bit拡張して処理すれば7FFF00h→007FFFhですよね。元の情報量(16bit分)はそのまま残っています。
 これは、ざっくり言うと、「ボリウム演算する時、16bitを24bit拡張して実施するなら8x6=48dBゲインダウンするまでは情報の欠損はない」ということです。48dB以上絞る場合に初めて気にした方がよい、ということですね。
 逆に、EQなどで音量が上がる可能性がある場合は24bit拡張した後一旦07FFF0hなどにしてから演算すればよいワケです。

 以上、16bitデータを32bit拡張演算して32bitや24bitで再生するような場合、情報量欠損はほぼ発生していないハズですので“ビット落ち”という表現は不適切だと思っています。
 一方、24bitデータの場合、32bitで受けられるDACチップじゃないとDAC-I/Fの段階でビット深度拡張できず情報量欠損となりますから、“ビット落ち”といってもいいでしょう。例えば6dB以上音量絞ったら有効ビットが23bitに減りますので“1bit落ち”です。
 しかしそれって「ダイナミックレンジが144dB→138dBになる“だけ”」です。それを音質劣化と認識できる人はたぶんいない…ていうかそれ以前にその音質違いを表現できる再生装置がない(熱雑音以下?)でしょうから、実効的には無視していいと思っています。逆に、16bitが15bitになっちゃうビット落ちは無視できないと思います。
 ので、「ホントにビット落ち(情報量欠損)しているのか」「落ちてるとしても実効的な音質劣化なのか(それによって得られる効果を上回る劣化なのか)」をよく考えてシステム構築・運用した方がいいと思っています。

 なお、演算結果7FFFh(マイナス側なら8000h)を超えてしまうことは単純に「オーバーフロー」、波形的には「ピーク潰れ」「クリッピング」と呼ぶべきでしょう。ビット落ちてないので。敢えて言うなら“ビット溢れ”?

・≪foobar2000≫の内部処理
 ≪foobar2000 1.3.6≫で実際に32bit内部処理されているかカンタンに調べてみました。ボリウムが一番手軽なのですが、Convert機能によるファイル化ではボリウム効かないんですよね。といってウチの機材のS/PDIFデジタル録音方式だと24bitまでしか扱えません。そこで、16bitデータに≪-6dBLimiter≫というプラグインかけてConvert機能の32bit出力でファイル化。あんまりいい方法じゃないと思いますけどとりあえず。
 値を覗いてみたところ、おそらく32bit有意な値になってると思います。最大振幅値は7FFFhが3F6178D7hになってましたので。

1648.png
1648を3248で-6dB

 色付けしたサンプルはサイン波の1/4周期(ゼロクロス~プラスピーク)分です(ステレオ)。

 ボリウム演算がビットシフトに相当する比率じゃない場合はデータ値は変わってしまいます。ですので、私も気持ち的には「なるべく弄りたくない」派です(笑)。が、例えば送り出し側でアップサンプリングする場合、増やしたサンプルだけでなく元サンプルも値は変わってしまいます。何も加工せずに出したとしても、イマドキのDACユニット内ではOSDFなど「デジタル演算」は必ずかかります。
 ので、「送り出し側でのデジタル演算の副作用はあまり気しても仕方ない(ビット落ちレベルにならないなら)」と、なんとか自分を納得させています。

 ≪foobar2000≫は上記の通り内部32bit処理、UDA-1(PCM1795)は32bit入力、そしてWASAPIもASIOも32bit出力可能、です。
 おお、「フル32bit処理」完成だ(笑)。
 “なんちゃって32bit”とか言われることもあるPCM1795ですが、スペック的にはキモチいいですね(爆)。

・FloatingPointの意味
 ところで、上記説明は敢えて「FixedPoint(ていうかINT:integer)」形式に限定しています。プレーヤソフトがFloatingPointで演算しても、DACチップで再生するまでのどこか(プレーヤソフトかDACユニット内のデータレシーバ部か)でFixedPointに変換されてしまうのが一般的だと思いますので。
 ていうか、浮動小数点形式は「計算」のためのものですから、普通はプレーヤソフトの出力時点でINTになってるハズです。Floatで受けられるDACユニットがあったとしても、内部で何らかの演算処理をFloat形式で行う仕様(*)じゃないと意味ありません。それでも、DACチップにはINTで入れる必要があるでしょうから演算結果はINT変換されちゃうのですが。
 「Floatで受けられるけど特に内部演算はしないDACユニット」があるなら、受け取ってもただINT変換するだけですから、対応フォーマットを広げるって意味しかないです。
 「Floatで受けてOSDFやΔΣ変換演算をFloat形式で行うDACチップ」を搭載しているなら別ですが、そのようなチップは寡聞にして知らないです。ないですよね?

*:Roland社の「S1LKi」エンジンはこれに相当します。32bitFloat形式で受け取り、DSPで1bit化やPCMx4処理まで行うようです。

    


 なお、念のためですが、本Blogで言う「ピットパーフェクト」とは「意図した加工するにせよしないにせよ、その前提として必要な“意図しない加工が発生しない転送・処理システム、状態”」という意味です。意図した加工を否定するものではありません。


■実事情

・ハイレゾとTruePeak
 ハイレゾ(ハイサンプリング)には、TruePeakが発生しにくいというメリットがあるかも知れませんね。インターサンプルピークとリアルサンプルピークと差が小さくなりますので。
 ただ、96kHzくらいだとまだ残っちゃうみたいです。上記資料の通り、やっぱり4倍(176.4kHz,192kHz)程度は必要ってことですね。

・DACとTruePeak
 JPPA資料によると4kHzくらいならリアルサンプルとインターサンプルの誤差は0.3dB程度のようです。フルスケールになるような周波数は5kHz程度までと仮定すると、OSDFかける前に0.5dB程度絞ればかなりのTruePeakは防げるのではないかと思います。まあ、実際の楽曲では複数の波形(周波数)が重なるのでカンペキに防ぐことはできないでしょうけれど。

 ここで思い出されるのが、DSDにおける「MaxPeak」について調べてた時、同じファイルでもPCM→DSD変換再生よりPCM再生の方が0.4~0.6dBほどレベルが低かったことです。
 もしかすると、DACユニットはPCM再生モードではTruePeakを考慮し、「OSDF前段のAttenuation機能で0.5dB絞る」ようにDACチップを設定しているのかも知れません。
 定かではありませんが…


メインメニューへ

テーマ : オーディオ
ジャンル : 趣味・実用

DSDの「MaxPeak」とは何か

15/03/28初稿

 PCM→DSD変換によるUDA-1の“なんちゃってNOS-DAC(というかアナログFIRフィルタとしてのみ)”用法の際、ちょっと気になってるのがこれ。

具体的にはDSDはPCMよりも最大で6dB低くなっている。澤田氏によれば、「DSDはノイズシェーパー(Δ∑変換器)の技術を用いて可聴帯域のダイナミックレンジを稼いでいるため、理論上の100%変調をかけるとノイズが増加してしまう」ため、抑えられているそうだ。
出典:http://av.watch.impress.co.jp/docs/topic/20131029_618702.html

 この記事によると、SACD規格ではΔΣ変調フルスケールの-6dBで使うように規定されているようです。それ以上のゲインではΔΣ変調歪みが出るからだそうで。
 とすると、PC側で行うPCM→DSD変換の際、変調歪みを避けるためPCMのピークを絞るべきなのでしょうか?
 というか、そもそもPCM再生の時、DACチップ側で行われるΔΣ変換はフルスケール(100%変調)なのでしょうか?


■6dBの謎

 早速、441Hz-6dBサイン波(2444)を再生してアナログキャプチャ、波形のレベルを見てみました。
 すると、≪foobar2000≫のリアルタイムDSD変換再生、≪JRiverMediaCenter≫の同再生、PCMそのまま再生(DACチップ内でΔΣ変換している)では、少なくとも数dBも違うようには見えませんでした。

 PCMをΔΣ変換する際、ソフトもDACチップも、すべて6dB絞ってる? またはすべて絞ってない?

 DACチップから出てLINE-OUTされるまでのアナログ信号ゲインはPCMモードとDSDモードで違っていても不思議ではないので、デジタルドメインで何か起こっているのかこれでは解りません。

・デジタル事情を調べる
 まず、“ライターがホントに解って書いてるのかアヤシイ(苦笑)”レポート記事や、メーカの宣伝文句などでこんがらがる前に、「技術資料」を紐解きます。

 JPPAという協会の資料だと、「-6dBから+3.1dB上(つまりフルスケールから-2.9dB?)が“MaxPeak”」とあります。
http://www.jppanet.or.jp/documents/audio_doc/jppa_chair_of_loudness_vol-1_2010.pdf

 TIのDACチップPCM1738の技術資料には明確に「DSDはPCMより6dB出力レベルが低い」とあります。
http://www.tij.co.jp/jp/lit/an/jaja008/jaja008.pdf

 プロ用サイト(と銘打っている)。PCMのフルスケールがDSDの50%変調に相当する図があります。
http://www.super-audiocd.com/professional/guide5.php

 これらを見ると、どうもSACDのフルスケール=0dBは確かにΔΣ変調50%のようです。DACチップからは、(細工しない場合は)DSDの0dBはPCMの-6dBのレベルで出力されるということでいいと理解しました。

 しかし、DSDには「Peak」と、それより3.1dB高い「MaxPeak」というふたつのピークがあるようです。PeakがMaxじゃないってどういうこと?

 というデジタル事情を踏まえ、さて、DSDとPCMの実際のアナログレベルはどのような関係になっているのでしょうか。
 冒頭のmarantzインタビュー記事ではいろんなケースがあるようですが…

・アナログ事情を試す
 ということで、UDA-1で実際にやってみることに。
 まず、便宜上“データ的な意味”でのゲインを以下のように表記することにします。

・DSD50%変調=DSD0dB  100%変調はDSD6dBとなります
・PCMのフルスケール=PCM0dB

 本当はSACD0dB、0dBFSなどと表記するようですが、本稿においてはこの方が解りやすいと思いまして。

 最終的なアナログレベルはアナログ段での増幅率によるのでこの数値と直接関係はありません。
 アナログキャプチャでのレベルは「DSD」や「PCM」を付けずdB表記します。

 そして、以下の条件でファイルの再生波形をアナログキャプチャで観察してみます。

・再生ファイル・・・サイン波 1200Hz-0dB/24192 ≪WaveGene 1.50≫で生成
           データ値改変を防ぐためリサンプラは使用しないのでPCM最高精度の192kHzとした
           +側ピーク値は7FFFFFhになっている(確かに0dB)ことをバイナリエディタで確認
・キャプチャ環境・・・Z68自作PCにSB-DM-PHD(2496モード)  ≪WaveSpectra 1.50≫にて
            録音レベル79(おおよそPCMフルスケール=キャプチャ時0dBになるように調整した結果)
           *オンボのLINE-INはPCMフルスケール入力できず1dBほど下げないとサチってしまうので
            SBを使用
・DSD変換・・・≪AudioGate 2.3.2≫  SACDを想定して2.8MHzに変換(DSD64)
・プレーヤ・・・≪foobar2000 1.3.6≫
        PCM→DSD変換再生の設定はDSD128(UDA-1仕様内で使おうということで),TypeB(FP32)
        DSD→PCM変換再生の設定は以下の通り

fb2kLPCM変換設定
*:ちなみに当設定では30kHzくらいでLPFかかります。「Multistage」では設定したSamplerateのナイキストでLPFかかります。「Installable FIR」は何かインストールしてないと使えませんでした。


 いろいろ試した結果、アナログレベルは以下のようになりました。「P」はPCM1795にとってPCMモード、「D」はDSDモードです。

P:PCM再生・・・0dB
     そのようにアナログキャプチャレベルを設定したのでアタリマエ。

D:PCM→DSDリアルタム変換再生・・・0dB
     ただし、こちらの方がPCM再生より0.4~0.6dB程度レベルが大きくなる。
     DACチップ内やDACチップ外で、PCMとDSDではDA変換動作が違うため?
     本稿の目的は3dBクラスの差違を見ることなのでとりあえず無視し、
     実際にはこちらを0dBとして調整した。

D:≪AudioGate≫でPCM→DSD変換して生成したdsfファイルをDSDネイティブ再生・・・0dB
     ≪foobar2000≫によるリアルタイム変換再生とゲインの扱いは同じと推定。

P:上記dsfをDSD→PCMリアルタイム変換再生・・・激しく音量低下。目視だがおそらく半分=-6dB

P:上記dsfを≪AudioGate≫で再び24192化したファイルをPCM再生・・・0dBに戻った。
     DSD→PCM変換については≪foobar2000≫とゲインの扱いが異なる。

D:≪AudioGate≫でゲイン+3dB設定でdsf化したファイルのDSDネイティブ再生・・・完全にクリップ。
     +3dBで再生している模様。

P:上記dsfをDSD→PCMリアルタイム変換再生・・・-3dBの一見マトモなサイン波が再生される。
     -6dB + 3dB = -3dB になってると推定。
     そして、+3dBというゲインでも「“dsfファイル内では(データとしては)”クリップしていない」ということ。
     これがPCMでは不可能な「MaxPeak」ということではないか?

P:同じく+6dB設定で作ったdsfをDSD→PCMリアルタイム変換再生・・・ピークあたりの波形が崩れた。
     また、DSDファイル内ではフルスケールのハズだが、再生されたアナログは0dB近傍まで
     届いていない。
     これが50%以上の変調率だと歪みが出るってことではないか?


 以上を見ると、DSDデータのピークはやはりΔΣ変調100%から-6dB(DSD0dB)が基本であって、DACチップ内でもその通り再生されているようです。

 また、UDA-1ではPCM0dBとDSD0dBの最終的アナログ出力レベルを揃えていると言えます。
 「DACチップ内の処理 or 外の処理」「デジタル or アナログ」などの段階や方法は解りませんが。
 DACチップ内の「Attenuation」機能でPCMを絞ってるような気はしますが…

 さらに、≪AudioGate≫では、PCMとDSDの相互変換でDSD0dBとPCM0dBをイコールに置いているっぽいですね。PCMのフルスケールから+3dBゲインアップしてもDSDデータとしては存在しえるようですが、PCMに戻すとサチってしまいますので。
 ≪foobar2000≫のPCM→DSD変換再生でもそうしている(PCMのフルスケールがDSD変換してアナログ0dBで再生されるので)ようですが、DSD→PCM変換においてはDSD6dBをPCM0dBに当てるのをデフォルトに置いているようです。つまりDSD0dBはPCM-6dBとして再生されるということですが、イキナリ明らかに音量が小さくなりますので聴感上も矛盾ありません。デフォルトではPCMで表現できない「プラスdB」の世界に入らないようにしているのでしょう。ここは≪AudioGate≫とコンセプト逆ですね。
 なので、0~+6dBまでゲイン調整可能になってるんですね。
 余談ですが、PS3のSACD再生音量がとっても低かったのはこのリクツかも知れません。

 ということで、少なくとも≪foobar2000≫のPCM→DSD変換においてはPCMフルレンジが変調率50%だと思いますので、“なんちゃってNOS-DAC”用法においてPCMのゲインを気にする必要はなさそうです。
 逆のDSD→PCM変換はちょっと考慮する必要ありそうですね。

・クリップしているのは出力か入力か
 実は上記実験ではこれが判っていません。
 DSD0dB以上のdsfファイル再生(上記でやったのは3dBと6dBだけですが)のキャプチャは、

・録音ボリウム下げてもサチる
・念のためやってみたM/BのオンボLINE-INでもサチる
・UDA-1純正プレーヤソフト再生でもサチる

のですが、これだけだと

「出力がクリップしてる可能性」と
「出力はクリップはしていないがLINE-INが受けられないレベルなので受け側でクリップしている可能性」

両方考えられます(厳密には両方ダメな可能性もありますが(苦笑))。確かめるためには、どちらかで「確実にクリップしていない状態」を作る必要があります。
 UDA-1の出力をLINE-INが充分受けられるレベルに調整してキャプチャできればいいのですが…
 世の中にはゲイン調整するアダプタなどもありますね。

  ←-10dB     ←-20dB(商品説明にないけど)


 けど、このためだけに買うのもナンなので、「ボリウムを適量に絞ったUDA-1のヘッドホン出力」をキャプチャすることにしました。

 再生ファイルは、≪WaveGene≫で生成した0dBのwavを≪AudioGate≫でゲイン設定0dBと3dBでdsf化したものです。
 CDやSACDを意識して周波数は44.1kHz系で。ビット深度は波形歪みを見るので24bitで。疑似周波数が発生しないようサンプル数が整数になる1470Hzのサイン波としました。
 キャプチャ環境はハイレゾを聞いて見る記事と同じです。


1.DSD0dB (アナログキャプチャ)

DSD+0dB HP出力波形


2.DSD3dB (アナログキャプチャ)

DSD+3dB HP出力波形


 +3dB化したdsfファイルのDSD再生では、ゲイン弄っていない0dBのdsfファイルより3dB大きいと思われます。
 これで、UDA-1のDSD0dB=PCM0dB以上のアナログレベルでサチっていたのはキャプチャ側だと判りました(ヘッドホン出力は大丈夫だけどLINE-OUTはダメなんてことはないでしょう)。
 DSD3dB、0dBを超えたあたりからやや乱れ、頭がワニャワニャしてるのが気になりますね(笑)。

 しかし、これでもまだUDA-1の出力が一般機器より“大きすぎる”可能性が残ります。仕様には2Vとありおそらく2.0Vppのことであり、DSD3.1dBがそのスケールだと思いますので異常とは思えませんけれど、念のため。
 そこで、UDA-1のLINE-OUTをAVアンプであるDSP-Z7のLINE-INに入れ、DSP-Z7のヘッドホン出力を採取してみました。UDA-1の0dB以上の出力が一般的なAV機器の標準より大きすぎるのならDSP-Z7でもサチってしまうハズですが、UDA-1のヘッドホン出力と同じ結果となりました。
 また、+4dB,5dB,6dBのファイル再生しても、ピークはドンツキのまま(サイン波の頭が潰れていく)になるようです。
 以上、

「UDA-1のアナログLINE-OUTのフルスケールはDSD3.1dBまでであり、PCMのフルスイングより3.1dB大きい」

ということです。
 そして、DSP-Z7(まっとうなAV機器の代表として)のLINE-INはそれを受けられますが、オンボやSB-DM-PHDといったPC用機器(*)のLINE-INの許容レベルは超えてしまうということですね。

*:PC用機器のLINE-INは外部アナログ入力の再生用というよりPCMデジタル録音が主目的でしょうから、LINE-IN=「ADコンバータ入力のフルスケール」を、PCM0dBの一般的アナログフルスケールレベルで規定&固定しているのかも知れません。録音する音源の方でボリウム調整するのが基本、と。


■「DSD変調歪」を可視化する

 マトモなDACユニットならDSD3.1dBまではちゃんと再生できるハズです。
 ですので、上記「DSD3dBサイン波キャプチャ」において頭がウニャムニャしているのはUDA-1のアナログ性能などの問題ではなく“変調歪み”によるものだと思えるのですが、UDA-1の出力限界点に近いということもあり、断定は躊躇します。
 そこで考えました。
 上記のファイルをプラスdBゲインでdsf化した後、-6dB設定で再PCM化することで、「DSD領域でDSD0dB以上=変調率50%以上における変調歪み」をデジタルドメインのスペクトルで見ることができるのではないでしょうか。

 ただ、特にDSD3.1dB以上は“あっちゃダメ”な領域なので、≪AudioGate≫の変換保証範囲外である可能性もあります。


0.DSD+0dB-6dB
 とりあえずフツーのハズの0dBを。

DSD+0dB-6dB.png


1.DSD+3dB-6dB

DSD+3dB-6dB.png


2.DSD+4dB-6dB

DSD+4dB-6dB.png

3.DSD+5dB-6dB

DSD+5dB-6dB.png


4.DSD+6dB-6dB

DSD+6dB-6dB.png


 確かに50%~100%領域はフォーマットとしては記録できるが音質はどんどん悪化する領域っぽいですね。
 上記はスペクトルを優先しましたが、波形の方を拡大すると頭がウニャムニャしてるのも確認できます。

 つまり、DSDにおける「Peak」と「MaxPeak」とは、

「突入的なピークを許容するマージンとしてDSD3.1dBまでは許可する(=MaxPeak)けど、なるべくDSD0dBで抑えときなね(=Peak)」

ということのようです。
 DSD音源商品で実際にあるかどうか知りませんが、これを見ると、規格上許されてるからとMaxPeakまでガンガン突っ込む「DSD版海苔マスタリング」とかあったらヤですね… 元々海苔マスタリングなPCMデータをPCM0dB=DSD3.1dB設定で変換などされたら悲惨なことになりそうです。


 なお、UDA-1のPCMフルスケール再生においてこのような歪みは認められませんから、ΔΣブロックにおける変調歪みについては充分考慮されていると考えていいでしょう。まあ、アタリマエと言えばアタリマエですね(苦笑)。
 なので、少なくともPCM1795においては、「PCM再生の時も内部ΔΣ変換ブロックの変調歪みを考慮して3~6dBくらい下げて入力した方がいいカモ?」といったことはなさそうです。


■MaxPeakの現実

 PCMをDSDに変換することで「なんちゃってNOS-DAC」として使う時、PCM0dBをデフォルトで敢えてDSD3.1dBなどにゲインアップする変換ソフトは多分ないと思いますので、変調歪みに関して考慮する必要はまずないでしょう。一応、変換ソフトはそのヘンの仕様を確認してから使い始めた方がいいとは思いますが。
 また、通常のPCM再生においても、少なくともPCM1795では充分考慮されているようです。万全を期すなら、DACユニットはそのヘンの仕様を確認してから使い始めた方がいいかも知れませんが。

 とりあえずは一安心ですが、ハイレゾ配信などの「DSD音源商品」をDSDネイティブ再生する時の事情が気になってきました。当面やらないとは思いますが(笑)。

・「DSDファイルの規格」はどうなっているのか
 ところで、+3.1dBまで許容されているというのはあくまでも「SACD用DSD」規格(ScarletBook AnnexD.3)のハナシです。
 SACDは専用プレーヤでしか再生できませんが、DSDファイルは単体DACユニットなど“ディスクプレーヤ”以外でも再生します。考慮すべき事情が異なりそうですが、「DSDファイルオーディオ」の規格はあるのでしょうか。

 DSD音源商品はSACD用を流用するケースが多いような気がしますので、事実上ScarletBook規格に準拠しちゃってると考えた方がよい気がします。また、後述するweb記事などを見ても、おそらくDSDファイル制作は“SACD用でなくても”ScarletBookの通り+3.1dBをMaxPeakにしてるのだと推察します。
 もし、DSD“ファイル”再生規格はDSD0dBまでだとするなら、ちゃんと“DSDドメインで”DSD0dBをピークにゲイン調整してから売ってるのでしょうか?
 たぶんそんなことしてないと思います(笑)。

 ですので、上記の通り例えばUDA-1のLINE-OUTを入れるとクリップしてしまうLINE-IN機器もありえます。
 その場合は、DSDドメインでのデジタルボリウムは一般的にはムリなので、DSDネイティブ再生しようとするとユーザ側ではどうしようもないということになります。まあ、問題になるのはPC用くらいしかも知れませんけれど。
 それより、例えば≪AudioGate≫がDSD0dBをPCM0dBに一致させている(ゲイン設定しないでPCM変換するとDSDの0~3.1dB領域はクリップする)方が問題かも?
 といってもそんなに山ほど当該目的のソフトあるワケじゃないですし、ゲイン設定できますし、そもそもあんまり出番もないかもですが(苦笑)。「いつかDSDネイティブ再生できるDAC買う」つもりで前倒しでDSDファイル買ってPCM変換して聴くような場合くらい?
 でも、気をつけないとですね。

・製作側はどうしているか
 こちらの記事では、ピークはDSD0dBではなくDSD3.1dBでAD変換しているようです。

レベル調整時には、SADiE上のメーターでチェックを行い、マックスピークが+3.1dBを超えないようチェックする。というのは、SACDとして販売し再生する場合は、SACDプレーヤー側に3.1dB分レベルを下げて再生する機能が入っていたが、PCで再生される配信音源の場合では、PC側にそういった機能がないため歪みの原因になってしまうのだという。
出典:http://www.phileweb.com/interview/article/201402/26/220.html

*:主旨からは外れますが疑問点を。
 文脈では「+3.1dBを超えないようにすることでPC再生で歪みを発生させないようにしている」ように読めますが、ScarletBookに準ずるならそこで抑えるのは当たり前ですよね。
 「SACDプレーヤではDSD3.1dBをアナログ出力の最大振幅にしていたが、PCではしてない=PCM0dBをフルレンジとしているので“もともと”+3.1dBレンジオーバーするところにさらにオーバーすると“さらに”歪みの原因になる」と読解すればいいのかな?

 OTOTOYにも以下のような音源説明があります。

また、DSDのネイティヴ再生を念頭に置いて、リマスタリングしていますので、以下のことにお気をつけ下さい。DSDにはPCMよりもヘッドルームがあります。PCMの0dbの上に、3.1dbほど余裕があるのです。今回のDSDリマスターの中には、レベルが0dbを越えて、その3.1dbのヘッドルームに達しているものもあります。AudioGateでこうしたDSDのファイルをwavファイルなどに変換すると、ピーク時にクリップして、歪んでしまいます。クリップしないように変換したい場合は、AudioGateの変換時のゲイン設定を-3dbに下げれば、避けることができます。
出典:http://ototoy.jp/feature/20130402

 明確に+3.1dBまで使ってると言ってます。

 一方、e-onkyoの2L無料サンプルDSD64を≪AudioGate≫でPCMに変換したファイルの最大音量は0dB未満でした。
 2LではDXD(352.8kHz/24bit)のオリジナルソースからいろんなフォーマットに変換して商品化しているよう(*)ですので、DSDデータでもプラスdBゲインがないのでしょうね。

*:http://www.2l.no/hires/
  http://ascii.jp/elem/000/000/947/947845/index-4.html

 このように、DSDデータでもSACD用ではないマスタリングもあるでしょう。

・データの中身と再生機器と
 e-onkyoは次のように言っています。

DSDのほうが圧倒的に小さいのが波形からも確認できます。つまり、CDとDSDを聴き比べるときは、アンプのボリューム位置が同じではいけません。DSDを再生するとき、まずはCDと同じ音量感で聞こえるまで、グイッとボリュームをアップさせてください。音量さえ揃えれば、圧倒的なDSDサウンドの本質に触れることができるでしょう。
出典:http://www.e-onkyo.com/news/115/

 データの話としては大正解でしょう。が、実際の再生ではDSDとPCMのアナログゲインは再生装置によって違うので、「圧倒的に小さいとは限らない」ハズです。
 例えば、アナログゲインとして「DSD0dBをPCM0dBに合わせる」プレーヤと、「DSD3.1dBをPCM0dBに合わせる」プレーヤがあるとすると、前者は「SACDの方がCDよりピークが3.1dB大きい」となり、後者だと「(MaxPeakをPCMのPeakと見るなら)同じ」となります。
 さらに、冒頭記事の「DSDが3dB低いまま出す」というmarantzコンセプトは、DSD6dB=PCM0dB(MaxPeakであるDSD3.1dBでもPCM0dBより約3dB低い)と理解できます。DSD6dBを変調率100%=DSD0dBを50%変調とするDACチップ処理そのまま、ということでしょう。この場合は「DSDの方が約3dB小さい」となりますね。一方、見てきた通りUDA-1ではDSD0dB=PCM0dBですので、「DSDの方が約3dB大きい」となります。
 データの事情は変わりませんが、それをアナログ段で(*)どう増幅するかによって最終出力は「DSD(SACD)の方が3dB大きい~3dB小さい」まで変わっちゃうワケです。実に6dBもの違いがあることに。
 DACユニット商品のコンセプトは統一されていないようですので、ここの事情を踏まえて評しないとこんがらがりますよね。

*:前述の通り、厳密に言えばDACチップ内のデジタル処理でPCMを下げている場合もあり得ます。


 以上、

「DSDファイル商品は結果的にScarletBookに準じて製作されているものがあり、最大音量がDSD3.1dBになっている楽曲がある」

「PCMから変換されているものもあるので、この場合の最大音量はDSD0dB、つまりPCMと同じ」

「DSD→PCMファイル変換する時は要注意」

「アナログ音量としてDSDの方が大きいとか小さいとかってハナシは、再生機器の設計に依存するので一般論にならない」

「DSDネイティブ再生アナログ出力レベルがPCM0dBより最大3.1dB大きくなるDACユニットもあるので、受け側が許容できるか要チェック」


ということですね。


■備忘録

・変調率50%以上だと歪むワケ
 例えば入力フルスケールが10のΔΣ変調器があったとして。
 レベル4のサンプルは「0」判定となり、0との差分4が次のサンプルにフィードバックされます。そのサンプルのレベルが7だったら足して11、オーバーフローします。サンプル値の上限が5なら、10を超えることはありません。
 原理はそういうことでいいのかな。単純すぎ?

・出力レベルと入力感度
 出力電圧2Vを入力感度200mVで受けた時、入力側の有意な増幅(というか減衰)最大ゲインは
20 x log10(0.2/2) で計算できる。
 このゲインで減衰させた時入力された2Vが内部で200mVになる。入力感度とは、その値がその後段回路のフルスケール(パワーアンプなら出力最大)になる値という意味。なので、このゲイン以上に上げても歪むだけで意味がない。

 Vrmsは平均値(振幅の半分の)、Vppはピークトゥピーク(全振幅)。なので実際には同じ出力値でもVrms表記は少なくともVpp表記の半分以下になる。
http://www.g200kg.com/jp/docs/dic/rms.html

・オーサリング関連
http://surroundterakoya.blogspot.jp/2009_07_01_archive.html

・JPPA
 「日本ポストプロダクション協会」。ポストプロダクションとは、テレビ番組などのコンテンツ制作を技術面からサポートする業務だそうです。
http://www.jppanet.or.jp/annai/annai_top.html


メインメニューへ

テーマ : オーディオ
ジャンル : 趣味・実用

foobar2000八面六臂

15/03/08初稿

 DSD再生につき、DAC側がどんな動作しているのかはおおよそ解りました。(少なくともUDA-1では)DACユニットは受けた1bitストリームを“ありのままに”アナログ化しているようです(UDA-1ではLPFとしてPCM1795のアナログFIRフィルタを通すだけ)。
 なら、PCMをDSD変換する時、PC側はどんな動作をどう設定すればよいのでしょうか。
 DSDネイティブ再生やPCM→DSDリアルタイム変換再生が可能で、いろんな設定が解放されているプレーヤソフトとして≪foobar2000≫について考えてみようと思います。

 ≪foobar2000≫のいろんなバージョンは以下の通りです。

foobarバージョンV


■≪foobar2000≫の「PCM to DSD」機能を調べる

・「PCM to DSD Method」とは何か
 いろいろ試す前に、まず用語の意味について確認しておきたいと思います。

 SDMは「Sigma-Delta Modulation」の略でしょう。

 FP32は普通に「32bit FloatingPoint」だと思います。
 readmeに

05/06/13:Version 0.6.4 - PCM to DSD multithreading, floating point SDMs.

とありますし、以下ページにもそういう記述ありますので。
https://diyaudioheaven.wordpress.com/digital/pc-software/foobar-2000-for-dummies-part-2/

 また、64bitのチェックをハズしても両方選べますから無印が64bitフロートってこともないでしょう。
 つまり、無印は言ってみれば“INT32”だと思います。
 なお、同じTypeなら無印よりFP32の方がCPU負荷(ASIOhost64のCPU使用率)は低いです。

 ということで、無印系ではなくFP32系を使うことにします。

・タイプ違い
 ということを踏まえて、では、Typeを変えると何がどう変わるのでしょうか。
 おそらくDSDエンコーディングパラメータ(アルゴリズム?)の違いと推察されますが、普通に試聴してみてもなかなか判りませんよね。
 しかしスペクトルキャプチャしてみると一目瞭然でした。採取条件は以下の通りです。

・441Hz/-6dBサイン波の24176ファイル再生
 純音ですので88.2kHzまで余計なスペクトルはなく、イメージングノイズも「176kHz-441Hz」まで発生しないハズで、さらにそのあたりはポストフィルタでカットされてるので事実上倍音やイメージングノイズがないスペクトルになるハズ
・アップサンプリングなどの処理はナシ
 上記の通りなので余計な処理はなくていいハズ
・ノイズシェイピングの差が一番判りやすいであろうDSD64にて
・Z68+Core i7-2600K自作機のUSB3.0拡張カードPP2U-E経由UDA-1にて
・アナログキャプチャ環境は基音と倍音を見て聞いた時と同じ(録音レベルのみ50)

 参考までにCPU負荷を添えておきます。
 2600Kを2コア・1.6GHzに固定かつTBとHTをDisableにしてパフォーマンスを下げ、DSD256で負荷を上げた状態でのASIOhost64の値をタスクマネージャ読みしたものですので、フラフラしてる中でのざっくり値ですけれど。


1.TypeA (FP32) (アナログキャプチャ)  約28%

TypeA:DSD64


2.TypeB (FP32) (アナログキャプチャ)  約30%

TypeB:DSD64


3.TypeC (FP32) (アナログキャプチャ)  約23%

TypeC:DSD64


4.TypeD (FP32) (アナログキャプチャ)  約32%

TypeD:DSD64


・処理負荷とノイズシェイプ結果とのバランス型の A
・とにかくノイズシェイピングによるノイズの最大値を抑える B (Dよりノイズエネルギーの帯域は低くなる)
・とにかくノイズエネルギーを極力高域に持っていく D (Bより最大値は大きくなる)

ってところでしょうか。実際の音質の善し悪しは一概には言えませんが、TypeBかDがよさそうな気がします。

 TypeCの意図はヨクワカリマセン(笑)。負荷を下げるにしても効果があるほどとは思えませんし。理由は解りませんがかなりノイジーですし(添付版は中でも穏やかな瞬間を選んだものです)。

 なお、無印もFP32と原則同じ特性のようです。若干異なるようにも見えましたが意図したものではないと思います。


■≪foobar2000≫ VS ≪JRiver MediaCenter≫

 ところで、リアルタイムPCM→DSD変換できるプレーヤとしては≪JRiver MediaCenter≫というソフトもありますよね。有料ですけれど。よく≪foobar2000≫と音質比較されているみたいですので、特性にどんな違いがあるのか気になったので調べてみました。有料ソフトの有意性や如何に?
 以下、JRMC20にて。

・DSD変換Method
 1xDSD(DSD64)、2xDSD(DSD128)、4xDSD(DSD256)、8xDSD(DSD512)が選択できます(UDA-1ではDSD512は通りません)。ちなみに「ビットストリーミング」はHDMI,S/PDIF,DSD,カスタムが選べますが「無し(推奨)」で変換再生もネイティブ再生も問題ありません。何の設定なんでしょうかね?

JRMC20:DSPスタジオ2

 それぞれのノイズシェイピング状態を見てみます。


1.DSD64(アナログキャプチャ)

サイン441-6dBDSD64:JR:PP2U-E


2.DSD128(アナログキャプチャ)

サイン441-6dBDSD128:JR:PP2U-E


3.DSD256(アナログキャプチャ)

サイン441-6dBDSD256:JR:PP2U-E


 最大値は高めでもその発生をなるべく高域に追いやる変換タイプのようです。≪foobar2000≫で言うとTypeDの方向性みたいですが、20kHzあたりを見ると差がありますね。

・DSD変換とアップサンプリング
 PCM→DSD変換再生を選択するとアップサンプリングは選択できなくなります。通常楽曲のスペクトルを見るとイメージングノイズがありませんので、DSD変換の場合は自動的にアップサンプリングをかけているようです。DACチップ内の動作を再現しているのですね。「4xDSD(DSD256)」でもイメージングノイズは見えませんので、4倍以上のOSDF処理をしてからDSD変換しているようです。
 ですので、≪foobar2000≫と≪JRiverMediaCenter≫のDSD変換音質を比較するなら、fb2k側にアップサンプリング設定しないと同条件にならないです。「DSD変換」を有効にしただけだとフィルタなし=イメージングノイズまみれと比較することになってしまいますので。

 アップサンプリングかけて比較したところ、強いて言えばJRMC20の方が厚みやエネルギーを感じるでしょうか。もちろんfb2kの設定にも依りますが。

 ということで、JRMC20では“なんちゃってNOS-DAC”的な使い方はできないということですが、リクツを考えるとDSD変換するなら強制的にアップサンプリングフィルタ入れるのはスジでしょうね。

 ちなみに、2xDSDと4xDSDではバッファリングをデフォルトより大きくとらないと音跳びしてました。また、同じDSD倍率でもfb2kよりCPU負荷は高めで、マルチスレッドではありますが複数コアにまんべんなくではなく1コアに集中処理させてるようでした。ですのでfb2kよりCPUパフォーマンス要求は高くなります。もしかしてそのあたりも音質チューニング?


■≪foobar2000≫ VS ≪AudioGate≫

 PCM→DSD変換できるソフトとしては≪AudioGate≫も有名ですよね。音質も評判いいです。
 KORG製DACユニットじゃないとリアルタイム再生は出来ませんけれどファイル変換(エクスポート)はできますから、dsfファイル化して≪foobar2000≫でネイティブDSD再生したスペクトル採取しました。
 TwitterWareだったバージョン2.3.2にて。

 みせてもらおうか、業務用DSD機器開発メーカの実力とやらを!

・DSD変換Method
 2.8MHz(DSD64)と5.6MHz(DSD128)のみ選択できます。


1.DSD64(アナログキャプチャ)

AudioGate:DSD64


2.DSD128(アナログキャプチャ)

AudioGate:DSD128


 うおお、これはさすがと言うべきでしょうか。シェイピングしたノイズの抑えっぷりは見事、これは音良さそうだなぁと思わせるスペクトルですね。DACユニット選ばなければ(*)≪AudioGate3≫買うのになぁ(苦笑)。

 こちらも同じく、DSD変換すると自動的にアップサンプリングかかっています。普通の楽曲のスペクトル見たところイメージングノイズは認められませんでしたので、4倍以上と推定されます。
 あ、つまりそういうことかな。ソフト側で全てのデジタル処理を行うワケですが、その特性は「自社製DACユニットの1bitストリーム→アナログ変換部用にチューンしてあるから他社製では鳴らさせない」ということかな。まあそれを言ったらPCMのアップサンプリングもそうだかも知れないけど。

*:KORG社の説明は以下の通り。有償版でもDSD再生に他社製DACは使えないと読める。

※:AudioGate 3 を使ってDSDネイティブ再生をするにはDS-DACシリーズが必要となります。他社のDACではサンプリング周波数を2.8Hz/5.6MHzには設定することができないことをご了承頂きました上で、ライセンスをご購入くださいますようお願い申し上げます。
出典:http://www.korg.com/jp/news/2014/0530/


 以上、Type設定の参考にしようと思います。

 なお、DSD変換の違いをノイズシェイピング状態で見ているのは私にはとりあえずそれしか手がないからで(笑)、実際のパラメータやアルゴリズムの違いは解っていません。

 ところで、PCM→DSD変換を「アップサンプリング」と呼ぶことがあるようですが、どうなんでショ?
 確かにサンプリング周波数は格段に上がってますがビット深度は劇的に減少してますし、そもそもPCMとDSDは基本原理からして違うのですから、当BlogではPCM→DSD変換は「アップサンプリング」とは呼ばないようにしています。


■必須のアップサンプリングを考える

 先の考察で、「≪foobar2000≫でDSD変換するならアップサンプリングしておかないとイメージングノイズまみれになる」ことが解りました。ですので、組み合わせるアップサンプラを選びその設定を決める必要があります。

 といっても、2496以上などの場合はこれまでみてきた通り「イメージングノイズを許容してフィルタによる変形を防ぐ」考え方もあるでしょうから、その場合は不要です。が、44.1kHzや48kHz音源の場合はイメージングノイズは可聴域のすぐ隣にありますから一般的には必要でしょう。もちろん、それでもフィルタヤダって考え方もアリですし、「DSD64だとどうせシェイピングしたノイズまみれぢゃん」と言われればそれまでですけれど(笑)。

 fb2k用のリサンプラとしては≪SoX Resampler≫プラグインが代表的だと思いますが、最近登場した≪Resampler-V≫なるプラグインは設定項目が多彩で視覚的にも解りやすくなっています。
 本稿では“V”を使ってみようと思います。

・リ・サンプラーV!
 アルゴリズムはSoXかSSRCを使っており、どちらか選べるようになっています。それぞれのプラグインが無くても動作しましたので≪Resampler-V≫が内蔵しているようです。とりあえずこれまで使っていたSoXの方でちょっと弄ってみます。
 設定項目は以下の通りです。

・PassBand・・・LPFの減衰開始周波数でしょう
・StopBand・・・LPFの遮断周波数でしょう
・StopBandAttenuation・・・遮断帯域での減衰レベルでしょう
                SoXなら-96dB~-198dB、SSRCだと-240dBまで調整可です
・PhaseResponse・・・フィルタ特性と理解しておけばよいかと

 ≪SoX Resampler≫では、「aliasing/imaging」をAllowするとStopbandが高周波数に移動するようです。比率で設定しているためPassbandも一緒に移動しますので、Vではそれを独立させたというカンジですね。
 逆にPhaseResponseはスライダじゃなくて3種類の選択にしたようです。それはそれでいいかも。
 Attenuation設定があるのはいいですね。減衰特性を強くすると演算対象のサンプルが増えてエコーが拡散するデメリットがあるようですから、あまり欲張らない方がいいと思いますので。

 ちょっと弄っていたら面白い仕掛け(?)を発見しました。PassBandとStopBandの組み合わせでメッセージが出るんですね。Gentleは「ゆるゆる」、Mediumは「フツー」、Steepは「きっつぅ」かな? 作者さんの推奨値なのでしょうか。
 以下発見した組み合わせをメモしておきます。

 StopBand/PassBand
   100.0% 98.2%(Steepest) -144dB以下にしないと出てこない
   100.1% 選択できず
   100.2% 83.4%(Medium)  StopBand最低(100%だとメッセージはない)
   100.3% 93.4%(Steep)
   100.4% 選択できず
   100.5% なし
   100.6% 93.7%(Steep)
   100.6% 83.8%(Medium)
   100.6% 66.9%(Gentle)
   101.7% 68.0%(Gentle)
   102.0% 95.1%(Steep)
   102.3% 68.6%(Gentle)
   102.7% 95.8%(Steep)
   102.7% 69.0%(Gentle)
   103.0% 96.1%(Steep)
   103.0% 86.2%(Medium) 
   103.0% 69.3%(Gentle) 
   106.4% 89.6%(Medium)
   106.8% 90.0%(Medium)
   108.8% 92.0%(Medium)
   110.5% 93.7%(Medium)
   111.9% 95.1%(Mesdium)
   116.1% 82.4%(Gentle)
   115.0% 98.2%(Medium)

 さて、どんな設定がいいのでしょう? 最終的には“聴いて決める”のはアタリマエとしても、どんな設定も出来てしまいますから、何か“アタリ”は欲しいところです。

 ちょっと考えて、「市販ソフトの特性をパクる参考にさせていただく」のはどうだろうかと(笑)。
 DSD変換の前段のLPFも同じ特性と仮定して、PCM再生におけるアップサンプリングスペクトルを採取してみます。


■商用ソフトのアップサンプリング特性

 「SoundBlaster DigitalMusic PremiumHD」のS/PDIFループバック機能を使ってデジタルドメインで比較してみます。DSD再生ではデジタルダイレクト録音できませんが、PCMならお手の物、デジタルで録らない手はありません。
 SB-DM-PHDの最大スペックが2496ですので、2448ファイルの2倍アンプサンプリングを行います。
 再生ファイルは≪WaveGene 1.50≫で生成した「ホワイトノイズ-3dB」です。人工波形ですのでLPFかかってません(ナイキストのヘソはありません)し、ホワイトノイズですのでナイキスト周波数以降もホワイトノイズのイメージングノイズが連続しますから、LPF特性がそのまま現れると考えたためです。
 APIは、JRMC20はWASAPI排他モードにて(ボリウム効きませんしWMPが同時動作できませんので排他でしょう)。≪AudioGate≫のWASAPIは排他じゃない(ボリウム効くしWMP同時動作します)ようなのでASIOにて。

・≪JRiver MediaCenter20≫

ホワイトノイズ2448-3dB x2:JRMC20


・≪AudioGate 2.3.2≫ 高品位
 ちなみに「リアルタイム変換:低品位」だと、どうもWindowsSoundEngineのリサンプラを使ってるような? DSD変換エクスポートの場合はノンリアルタイムでもあるので高品位だと思いますが…

ホワイトノイズ2448-3dB:AudioGateでx2


 ≪AudioGate≫はDSD変換の時のような驚きはありませんでした(笑)。StopBandはナイキストをオーバーしてる=イメージングノイズを許容するタイプのようです。
 JRMC20はずいぶんと急峻なLPFかけてるんですね。ナイキスト周波数たる24kHzで“真っ逆さま”です。念のためインパルス応答も見てみましたが一般的なプリ・ポスト対象型(Linear型)のようです。フィルタ特性には自信たっぷりってことでしょうか。

・≪Resampler-V≫設定を詰める
 fb2kのSoXアルゴリズムも劣らないと仮定し、JRMC20の特性とニアリーになる≪Resampler-V≫設定を詰めてみました。

JRMC20と近似設定(WN2448-3dBx2にて)

 スペクトルはこんなカンジです。x2だけのものなので、厳密には上記商用ソフトと条件異なりますけれど。

ホワイトノイズ2448-3dB:Resampler-V近似設定でx2

 PassBandはこれ以上キツくできないので落ち始めはちょっと丸くなってます。
 Attenuationは、-96dBだと減衰が安定しないように見えますが(VのGUI表示上の問題かも知れませんが)、-120dBもあれば充分っぽいです。

 とりあえずエコー状態を1200Hz-3dBのノコギリ波で比較してみましたが、おおむね同じに見えました。

 近似設定になってるかどうか本当のところは解りませんしもちろん似せるほどいいとも思っていませんが、参考にはなるかなと思います。少なくとも闇雲にチャレンジするよりいいかなと。

 なお、例えばTI製DACチップでのPCM再生では、ΔΣブロックの前で8倍オーバーサンプリングデジタルフィルタ処理されています。
 よって、極力DACチップ動作に近づけるコンセプトでいくなら、少なくとももう一段2倍アップサンプリングを入れて合計4倍とし、3fsイメージングノイズ除去くらいまでは行う必要があるでしょう。
 ただ、二段目以降の設定は「一番ゆるゆる」でいいのではと思っています。有効な信号は初段のナイキスト周波数までしかないので。

・そもそもDACチップのLPF特性は
 本項15/08/12追記。
 一応、「本家」の特性も参考にすべきでしたね(笑)。データシートを紐解いてみます。
 旭化成製AK4490は、シャープロールオフモードで44.1kHz時PsasBand=20.0kHz(fs x0.4535),StopBand=24.1kHz(fs x0.546)。
 x0.4535はそのまんま20/22.05でしょう。「20kHzまでしか有効周波数はないと仮定している」と推察します。とするとイメージングノイズも22.05+(22.05-20)=24.1kHzまでは存在しないことになりますので、SBはx0.546になります。
 TI製PCM1795も、PBがx0.454、SBがx0.546となっています(具体的は周波数の表記はなし)。考え方はシンプルなようです。
 「DACチップのOSDFをシミュレートする」コンセプトで行くなら、PB=90.6%,SB=109.2%あたりがResampler-V設定になるでしょうか。


 これで、DACユニット側の動作に加えてPC側ソフトの処理特性もおおよそ解りました。
 DSD128かDSD256、TypeB(FP32)かTypeD(FP32)、アップサンプリングは上記設定を中心に、いろいろ聴きこんでいこうと思っています。

 しょわしょわノイズが気になりますけれど。


メインメニューへ

テーマ : オーディオ
ジャンル : 趣味・実用

UDA-1を活かす

15/02/21初稿

 DSDネイティブ再生可能なDACユニットにPCMをDSD変換して渡せば、PCMデータでもOSDF(*)をバイパスして鳴らすことが可能だと解りました。

*:OSDF=オーバーサンプリングデジタルフィルタ(以下同)

 いろいろ活用できそうな用法ですので、その際のDAC動作について確認しておこうと思います。
 所有しているSONY製USB-DACアンプUDA-1にて行いますが、DSDネイティブ再生可能なDACユニット(*)なら同じ動作する可能性は高いと思います。

*:「DSDストリームをそのままアナログ化するタイプのDACチップ」に「無加工データを送り込んでいる」製品を指します。DSDをPCM変換して処理するDACチップ搭載機は当然含みませんし、DACチップの前に独自のフィルタやSRCなど搭載している製品(それをオフできない製品)も含みません。




■UDA-1でPCM1795の1bitストリーム処理を調べる

 “なんちゃってNOS-DAC”とっても楽しそうですが、OSDFだけでなくDACチップのΔΣ処理までPCで行ってしまうことになります。
 その際、渡された1bitストリームデータはDACユニットの中でどのようにDA変換されているのでしょうか?

 UDA-1では、カタログに「アナログFIRフィルタ」とあります。
 おそらく「アドバンスドカレントセグメントブロック」がDSD時には「アナログFIRフィルタ」になるというTI資料記述通り、なのだと思いますが、DACユニットとしてチップ前段で何かしている可能性もあります。
 ので、「ΔΣ型DACチップ搭載のDACユニット」として、PCM再生の事情も合わせ以下のような点を確認したいと思います。

・DSDモードでは入力された1bitストリームを無加工で再生しているのか
・PCMモードでは何ヘルツの1bitストリームにΔΣ変換されているのか(TI推奨のDSD128?)
・それはPCMソースのサンプリング周波数で変わるのか固定なのか(TI推奨の固定?)
・結局、アナログポストフィルタはどうなっているか
・ところで48kHz系のDSDデータの倍率は整数倍か・そのまま受けているのか

 ということで、2444,2488,24176ファイルのPCM再生と、DSD64,DSD128,DSD256再生をアナログキャプチャして比較してみました。

・再生録音・・・≪foobar2000≫のバージョンやAD変換環境は「基音と倍音」記事と同じ(録音レベルのみ50)
・再生音声・・・441Hz/-6dBのサイン波
         44.1kHz系にしたのは、通常DSD**といった数字は44.1kHzの倍数を示していることが多いため
・API・・・DSD再生と比較するのでPCM再生時もAPIはASIOで統一
・DSD変換Method・・・とりあえず「SDM TypeA(FP32)」

 受信周波数はUDA-1のLEDで確認しながら実施しました。
 ちなみに、最初無音ファイルでやってみたのですが、PCM→DSD変換アルゴリズムが「そんなデータしらね」状態になるのか、盛大なノイズ発生をみたのでサイン波にした次第。サイン波なら倍音もありませんし。

・DSDデータは素直にDA変換されているか
 まず、サイン波24176を≪foobar2000≫でDSD64、DSD128、DSD256変換再生した場合です(アップサンプリングはナシ)。UDA-1にとってはDSDネイティブ再生モードになります。


1.DSD64 (アナログキャプチャ)

サイン441-6dBDSD64


2.DSD128 (アナログキャプチャ)

サイン441-6dBDSD128


3.DSD256 (アナログキャプチャ)

サイン441-6dBDSD256


 1bitストリームはソースの周波数のまま処理されている(例えばDSD64をDSD256に変換したりはしていない)と見ていいでしょう。「アナログFIRフィルタ」にそのまま突っ込まれているようですね。

・PCMデータはΔΣブロックで何ヘルツの1bitストリームに変換されているか
 続いてPCM3種のスペクトルを見ます。


1.2444 (アナログキャプチャ)

サイン441-6dB2444


2.2488 (アナログキャプチャ)

サイン441-6dB2488


3.24176 (アナログキャプチャ)

サイン441-6dB24176


 ΔΣブロックでDSD変換された後の周波数特性は原則同じとみていいでしょう。DSD64,128,256は上記の通りもっと明らかに違いますので。
 つまり、

・ΔΣブロックにおける変換結果としての1bitストリーム周波数はPCMソース周波数には依存しない
・高域のノイズシェイプ状態を比較すると、UDA-1はどうもDSD256と同等性能レベルの変換(*)している模様
・確かに「ポストフィルタの特性はPCM周波数に関係なく同じ」と見てよさそう

 176.4kHzがちょっとノイジーに見えるのはUDA-1が忙しいからでしょうか。8kHzの高調波ノイズはおそらくUSB Audio Class2のフレーム周期125usでしょう。88.2kHzだけややフラットに見えるのは面白いですね。

*:データシート上ではPCM時のΔΣ変換はDSD128までしか設定がないので、あくまでもノイズシェイピング状態からみた“相当”です。DSDデータはそのままアナログFIRフィルタに入りますが、PCMデータのΔΣ変換&アナログ化はTI社自慢のアドバンスド・カレント・セグメント方式であり、単純な1bitストリームではないためです。後述します。

・48kHz系のDSD倍率は整数か
 UDA-1では48kHz系PCMのDSD256変換も通っちゃいます。この時≪foobar2000≫のPCM→DSD変換では、どんな処理されてるのでしょう? 12.288MHzになってるのでしょうか? それとも44.1kHz系のDSD256たる11.2896MHzに非整数倍変換?(あんまり可能性はないと思えますが…)
 また、UDA-1ではそれをそのまま再生しているのでしょうか?
 それを確かめるため、2444と2448のサイン波(それぞれ441Hz,480Hz/-6dB)をDSD64変換し、ノイズシェイプ状態を比較してみました。確実と言える方法ではありませんけれど。
 DSD64にしたのは、ノイズシェイプ状態が一番ハデなので、差があるなら一番判りやすいのではと思ったためです。


1.2444のDSD64 (アナログキャプチャ)

2444DSD64.png


2.2448のDSD64 (アナログキャプチャ)

2448DSD64.png


 微妙ですが、2448の方がノイズの山が若干高域側にシフトしているように見えます。少なくとも同じではなさそうです。
 ということは、≪foobar2000≫のDSD変換は48kHz系でもズバリ整数倍にしており、PCM1795もそのまま受け付けているようです。48kHz系のDSD256は仕様オーバーですね… ってだからもともと仕様外だって(笑)。

・ソースによるノイズシェイピングに違いはあるか&DACはそれを再現しているか
 ついでに、もともと1bitストリームであるDSDソースのDSDネイティブ再生に違いがあるのかも見てみました。
 もし違いがあることが確認できるなら、PCM1795はソースのビットストリームを忠実にアナログ化している追加事例になると思います。加えて、「ソースによってDSDエンコーディングの特性は違う」ということにもなります。
 違いがなかった場合は、どんなソースも同じシェイピング状態になのか、UDA-1で何らかの変換されて同じになっているのかは判別できませんので、特に役に立たないサンプリングですけれど(笑)。


1.とある邦楽 (アナログキャプチャ)

DSD64邦楽


2.とある洋楽 (アナログキャプチャ)

DSD64洋楽

 よかった、違いがありました(笑)。


■デジタルフィルタリングとΔΣ変換をPCで行う

 以上、DSDネイティブ再生時、DACユニットでは1bitストリームをそのままDA変換しているようだと解りました。
 DACユニット内で未知の変換は行われていないことを踏まえ、改めてどんな動作しているかみてみます。

・スペクトルを拝見
 PCM再生の時、PCM1795のOSDFは8倍固定でかかります。
 そして、ΔΣブロックでソース周波数によらずDSD256相当の性能を持つマルチストリーム(マルチレベルストリーム。周波数的にはおそらくDSD128)に変換しているようです。
 DSD再生の時、入ってきたシングルストリームデータは特に変換などはされていないようです。

 一方、≪foobar2000≫では、リサンプリング機能で倍率が、PCM→DSD変換機能でDSD64,128,256(UDA-1相手の場合)が選択できます。

 ですので、例えば

「SoXをx4とx2の2段入れて8倍アップサンプリング」&「ASIOでDSD256に変換」

すれば、普通にPCM再生する際PCM1795内部でやっているデジタル処理をPC側で実行する状態にできるということです。ざっくり言えば、ですが。

 さて、この時のアナログ出力につき、あるCD音源ファイル再生をキャプチャしてみました。


1.無音時:RealtekのAD変換回路のフロアノイズ (アナログキャプチャ)
 まず、AD変換の限界を確かめておきます。

Realtekフロアノイズ


 ざっくり-110dBあたりでしょうか(値がホントかどうかはこの際無関係)。
 ということを押さえた上で、次に、あるCD音源→DSD256変換のアナログスペクトルを見ます。PCでLPFかけると、前稿で見たOSDFなし状態のイメージングノイズはどうなるでしょうか。

2.SoXでx2した時 (アナログキャプチャ)

OSx2→DSD256


3.SoXでx4した時 (アナログキャプチャ)

OSx4→DSD256


 20kHz以上はバッチリLPF(Realtek測定限界以下(笑))されてます。x2だと66kHz以上は残ってます。
 想定通りの動作していると見ていいでしょう。また、奇しくもサンプリング定理を考えた記事でデジタルデータ状態でシミュレートしたOSDFのイメージングノイズカット動作について、実際のアナログ信号で可視化できたということですね。
 先の考察の裏取りにもなりました。

・PCM1795のPCM処理とDSD処理の違い
 ところで、PCMモードでのΔΣ変換結果は、DSDモードで受信したデータとイコールになるワケではありません。実際には以下のような違いがあるようです。
 ざっくり言えば、ですが。難しいんですもん(苦笑)。

・PCM通常再生
  PC側:PCM(マルチビット)出力
 ⇒
  PCM1795側:PCMをOSDF→複数の1bitストリームに分割変換→カレントセグメント機能でアナログ変換

・PCM→DSD変換再生(PCM1795にとってはDSDネイティブ再生)
  PC側:PCMをアップサンプリング→1本の1bitストリーム(DSD)に変換→出力
 ⇒
  PCM1795側:アナログFIRフィルタ(カレントセグメントブロックがそのように動作)でアナログ変換


■DSDネイティブ再生対応DACユニットの有効活用

 あくまでも「DACユニットにDSD形式でデータを渡す場合」のハナシです。「DSDフォーマット音源」の有利不利のハナシではありません。

・ハイレゾはNOS-DACとして再生する
 イメージングノイズが高域にしかないことでフィルタリングしなくても済む可能性があることもハイレゾの効能のひとつだと考えています。
 そのためにはDACユニットにOSDFをオフする機能が必要なのですが、それがないDACでもPCM→DSD変換して渡せば同等の処理ができることが解りました。
 例えば2496のハイレゾなら、
「デジタルフィルタリングで波形変更を許容して48kHz以上にあるイメージングノイズをカットする」のと
「超高域にノイズは残るがフィルタリングによる波形変形はない」
のとどちらがいいか、聴き比べることも出来ますね。

・メンドウなお仕事は極力PCでやっちゃってDACを余裕で動かす
 PC側でアップサンプリング→DSD変換してDACに渡すと、普通ならDACチップでやっているデジタル処理をほぼPC側でやることになります。ざっくり言うと、UDA-1内蔵のPCM1795を「1bitストリームDA変換チップとしてのみ使っている(*)」状態に出来るということです。
 しかも、普通ならほとんど出来ないデジタルフィルタやΔΣ変換機能の設定もいろいろ可能になります。
 改造も工作もせずこういうことが出来ることこそ、「PC-Audio」の醍醐味だなぁと思いました。

*:UDA-1の説明には「DSD再生時アナログFIRフィルター方式、PCM再生時アドバンス・セグメント方式を使用しています」とありますから、正確には「DSDストリームをアナログ化するためのLPFとして、アナログFIRフィルタとしてのみ使っている」となります。しかも「192KHz 32bit 対応 D/A コンバーターのアナログ出力をセレクターやコネクターを一切介さずダイレクトに出力するD/A DIRECT端子を搭載」だそうで。鮮度高そう~


 SoX Resamplerを重ねて16倍アップサンプリングにしてみたり、Resampler-VでPassBandとStopBandの差を広げてみたり。DSD変換ではMethod Typeを変えてみたり。
 楽しいですね。

 これも≪foobar2000≫をはじめとするフリーソフトを提供してくださっている方々のお陰。感謝感謝です。

・効果のほどと効果の理由
 音質はシステムや主観に依存するので詳論しませんが、ざっくり、アップサンプリング=OSDFの倍率を上げていくとキレイになっていくカンジです。DSDの倍率も高い方が好ましいでしょうか。
 少なくとも、UDA-1においては、試してみる価値はあると思います。追加コストありませんし。

 ただ、いろいろ弄っている中で、PCの処理能力に影響されるかも知れない気がしています。
 また、DSD変換だと曲がフェードアウトして終わるあたりに“しゅるしゅろしゅれ”ってノイズ(?)が聞こえることがあります。DSD256だと聞こえちゃいますね。DSD128、DSD64と倍率が小さいほど小さいようです。≪foobar2000≫よりは小さいですが≪JRiverMC20≫でもDSD256だとやや聞こえますので、≪foobar2000≫特有の現象ではなくPCM→DSD変換による付帯音ではないかと。ちなみにアップサンプリングの有無や変換Methodは関係ない模様。

 いずれにしろ、「いろんな鳴らし方がある」のはいいことですよね。ERIとしてはこれでUDA-1を使う機会も増えそうです。


 「DACチップでの処理とPC側での処理」どっちが高性能かは定かではありません。専用ハードと汎用コンピュータのソフト処理ですので、比較するならちゃんと考える必要があるでしょう。私には即断は無理っす。上述の通り最終的なアナログ変換の仕組みも異なるみたいですし。
 よって、その点での音質メリット有無は現時点ではなんとも言えません。

 が、少なくともDACチップの“忙しさが圧倒的に緩和されている”のは間違いないでしょう。デジタル処理がほとんど無くなっちゃうワケですから。
 参考までにワットチェッカでUDA-1の消費電力をみてみました。家庭用ACの変動をなるべく抑えるため、CSE製レギュレータRG-50のACにて。調べた時は99.5~99.7Vでした。
 とあるCD音源につき≪foobar2000≫の設定を変更して以下を計測。PCMモードもASIOにて。出力ビット深度は32Bitです(16Bitにしても変わらないようですが)。ResamplerはSoXのデフォルトを使いました。

・起動直後アイドル 0.23A 12W安定
・x4&DSD256再生 0.23A 12Wたまに13W
・x4&DSD128再生 0.23A 12W安定
・x4&DSD64再生  0.23A 12W安定
・x4再生        0.23A 13W安定
・x2再生        0.23A 12W~13W
・x1再生        0.23A 12W安定

*ちなみに、UDA-1は再生停止すると直前の“PCMモード動作状態”でアイドル化するようです(DSDモードは無視)。

 x4(176.4kHz)は32bit転送されていると仮定してもx4x32=DSD128相当ですので、ビットレートを考えるとDSDモードの方が低消費電力に見えます。
 「AC電力のふらつき」のハナシですので、あくまでも参考レベルですけれど(AC電圧が変わると変わっちゃう)。


 「デジタルフィルタOFF機能付きDACユニット」買わなくてよかった(笑)。

 しかし、こうして見てくると、DSD再生モードはDSD64じゃ物足りない気がしますねぇ。20kHz以上の信号はノイズに埋もれちゃいそうですので(*)。DSD128でもどうでしょう…?

*:DSD64=2.8MHz=SACDは100kHzをカバーできるとかって言われてますけど(だから24192相当と言われる?)、20kHz以上はシェイピングされたノイズがどんどん大きくなる一方、“普通の音楽”では周波数成分のレベルは逆にどんどん小さくなっていきますよね。実質的にはカバーになってないような気がするのですが。


 どんどん贅沢になってゆく(笑)。

 現在HDMI-Audio用に使っているE-350システムだとDSD128以上の変換はキツイので、PCパワーアップしたくなりました。困ったものです(笑)。


メインメニューへ

テーマ : オーディオ
ジャンル : 趣味・実用

ERIへようこそ

Author:らかせ
 「最新記事」または「メインメニュー」からどうぞ。

・ファイルへの直接リンク以外はリンクフリー(連絡不要)です。
・一応、拍手にコメント(非公開)付けられるようにしてあります。
・DB的に利用しており、過去記事もガシガシ書き換えています。特に「最新記事」は初稿から一週間くらいは直してることが多く、大幅に変わっちゃうことも。ご了承ください。
・ということもありますし、記すまでもないですが無断転載(ファイル含む)はご遠慮ください。
・引用の考え方については「007:諸事」をご参照ください。
・アフィリエイトはAmazonのみです。
・ハイパーリンクは当Blog記事のみです(054:節電記事のみ例外)。
・オーディオ再生環境については「008:AVC基本コンセプトと使用機材履歴」の当該日付を含む期間をご参照ください。

最新記事
カテゴリ
検索フォーム
FC2カウンター