Linux Computing
  1. ホーム
  2. BeagleBone + Botic + BBB ブリッジ基板で DSD ネイティブ再生

BeagleBone + Botic + BBB ブリッジ基板で DSD ネイティブ再生

BeagleBone Black と BBB ブリッジ基板 B2R-5100 を使って I2S インターフェースでハイレゾ音源を再生することができました。Raspberry Pi では 192kHz/24bit の PCM 音源までですが BeagleBone Black では 384kHz/32bit の PCM 音源での確認もできています。

Botic は DSD 音源の再生も可能となっていますので次はネイティブ DSD 再生にチャレンジしようと思います。BBB ブリッジ基板は Botic の DSD インターフェースをサポートするように設計されています(そのはず)のでこの基板を使って行います。まずは簡易的に実験して確認ができましたら DSD DAC 基板の試作を考えてみましょう。

DSD 音源の作成

DSD 音源はダウンロードサイトから入手することもできますが実験用にはテスト信号があると便利です。そこでまずは DSD フォーマットのテスト信号を作成します。もともと32bit/384kHz 1KHz の PCM フォーマットの正弦波信号を PCM-DSD_Converter を使って DSD フォーマットに変換します。インストールした PCM-DSD_Conberter.exe をダブルクリックして開いたウィンドウに変換する WAVE ファイルをドラッグアンドドロップするとウインドウ内にリスト表示されるので変換するファイルを選択します。

pcm-dsd_converter-02.jpg(38429 byte)

DSD のサンプリングレートを設定しますが今回は DSD128 として変換を実行しています。出力されたファイルは 384KH_32bit_1000Hz_0dB_LR_DSD128.dff のように元ファイル名_DSD+サンプリングレート.dff となります。

DSD 動作確認

DSD は原理的にはパルス密度変調なので復調するにはローパスフィルタを通せば良いはずです。ですので DSD の動作確認をするには BeagleBone Black から出力されるデータストリームに RC フィルタを接続してその出力をオシロスコープで観察します。確認するのに再生する信号は 1kHz なので遮断周波数が10kHz 程度の RC フィルタを接続しました。本来であればアナログフィルタは使用する DA コンバーターによって遮断周波数や次数を決定することになりますが、ここでは簡易的な確認をします。以下のようにBBB ブリッジ基板からブレッドボードに LRCK/DSDR 信号を引き出し抵抗とコンデンサで組んだローパスフィルタに接続しています。

playback-dsd-01.jpg(54718 byte)

DSD ファイルの再生にはターミナルでの play コマンドは使えないので ympd や GMPC などの MPD クライアントから行います。オシロスコープでの観測結果が以下になります。因みにオシロスコープでは 20MHz の帯域制限をオンにしています。

oscilloscope-01.jpg(57774 byte)

CH1 が RC フィルタの出力で CH2 が RC フィルタに入力した LRCK/DSDR 信号で 右チャネルの DSD データそのものです。尚、LRCK/DSDR 信号とは再生するファイルが PCM フォーマットデータの時は LRCK (L チャネルと R チャネル識別用クロック信号)となり DSD フォーマットデータの時は DSDR (DSD の R チャネルデータ信号)となって自動的に切り替わります。1kHz の正弦波信号が復調されているのがわかります。

以上のように BeagleBone Black + Botic + BBB ブリッジ基板で DSD ネイティブ再生の確認はできました。次は、やっぱり DSD ネイティブの音を聞いてみたくなりますね。ということでまだまだつづく・・・。

DSD 対応 DAC 基板でネイティブ再生

以下2015年11月14日に追記。

一月ほど前に納品されていた DSD 対応 DAC 基板の試作品の火入れを行いました。試作した基板は DAC チップに Cirrus Logic(旧 Wolfson)の WM8741 を採用しました。このチップは大分古く性能的にも最新のデバイスに比べ劣る内容なので、今更という感はありますが、ハードウェアモードで PCM と DSD の切り替えができるので比較的簡単に音だしができるのと音質的にも評判が良いので採用しました。しかし、古いチップの割には(古いから?)部品単価が高いのが欠点です。

設計上の注意点

回路を設計するに当たり BBB ブリッジ基板(B2R-5100)と WM8741 と接続するには多少の回路の追加が必要になります。

PCM/DSD の切り替え信号(XDSD)は "H" で PCM、"L"で DSD となっていますが WM8741 ではその逆になっています(BBB ブリッジ基板が逆?)ので反転回路が必要になります。BBB ブリッジ基板の出力では LRCK/DSDR、DATA/DSDL となっていますが WM8741 では LRCK/DSDL、OSR/DSDR に変換する必要があります。OSR/DSDR は PCM モード時はオーバーサンプリングレートの切り替え信号となり "H"、"L" そして ”Hi-Z" の状態を作る必要があります。そして DSD モード時には R チャネルのデータストリームになります。これらを満足させるために回路を追加しました。

playback-dsd-12.jpg(34104 byte)

PCM モードでの動作にはマスタークロック(MCLK)が必要です。マスタークロックは BBB ブリッジ基板から SCK 信号として 22.5792MHz と 24.576MHz が供給されます。WM8741 はマスタークロックを自動的に検知してサンプリングレートを切り替えるのでそのまま MCLK 端子に入力します。

動作確認

BeagleBone Black と接続して動作を確認します。本来は BBB ブリッジ基板のピンヘッダーと DAC 基板のピンソケットを直接接続するのですが確認のためオス-メスのジャンパーワイヤーで接続しています。接続する信号は BCK/DSD64、DATA/DSDL、LRCK/DSDR、SCK、XDSDそれと SYS_5V、VDD_3V3B、GND です。

playback-dsd-02.jpg(76414 byte)

まずは PCM モードでの確認です。

確認は 192kHz/24bit 0dB 1kHz の信号で行いました。WM8741 はサンプリング周波数に応じて OSR/DSDR 端子を切り替える必要があります。当初まったく気にしてなかったので出力がされず焦りました。データシート良く見たらちゃんと書いてありました。

"For optimum operation of the digital filtering and other processing on the WM8741 in PCM hardware mode, the user must ensure the correct value of OSR is set at all times. "

ということはサンプリング周波数によって切り替えが必要になるので自動的に切換えるにはそれ用の回路が必要になります。この回路は後ほど考えることにしてスイッチなどで手動で切り替えることになります。OSR/DSDR 端子はジャンパー(J5)で切り替え可能にしていますので "H" (J5 の 1番ピンと2番ピンをショート)にして波形がでるのを確認しました。

な、なんと左チャネルと右チャネルの位相が逆になっていました。

playback-dsd-03.jpg(41830 byte)

まさか mono モードで動作させているのではと確認しましたが normal モードの設定になっています。設計した回路図を見直すと右チャネルの DAC 出力の接続を正負逆にしていました。追加工が必要になりました orz

気を取り直して、次は DSD モードです。

基板を試作した目的はこの DSD モードでの動作を確認する為なのでちょっと詳しく見ていきます。確認は 192kHz/24bit 0dB の PCM 信号を前述の PCM-DSD_Converter で DSD64 に変換した信号をテスト信号とします。以下が WM8741 の出力(正相、逆相)です。DSD 信号自体が持っている刄ー変調特有のノイズが乗っているのがわかります。

playback-dsd-04.jpg(62886 byte)

LPF を通過し正相逆相の信号を差動増幅回路で減算した後の波形が以下になります。SCAD フォーマットブックでは、SCAD 再生時のフィルタ特性として、カットオフ 50kHz 以下のスロープ -30dB/oct 以上のフィルタが推奨されていますが、デフォルトで設計したフィルタ特性は WM8741 のデータシートに記載されているフィルタの定数を使用しています。このフィルタ特性はカットオフ 100kHz となっており PCM に最適化した特性となっていますので殆どノイズの減少は確認できません。PCM の再生では問題ありませんが DSD の再生には問題がありますね。

playback-dsd-06.jpg(49170 byte)

そこで外部のブレッドボードにカットオフ 50kHz 以下のスロープ -30dB/oct 以上のフィルタを組んでみました。このフィルタを通過した後の波形が以下になります。

良く見るとまだ完全には除去されていませんが実用上問題がないと思われます。

尚、PCM モードでは出力電圧は約 2Vrms ですが DSD モードでは約 0.95Vrms になりますのでモードを切り替えて再生するには注意が必要です。

playback-dsd-09.jpg(33271 byte)

ブレッドボードに組んだフィルタは以下の回路です。

playback-dsd-07.jpg(76772 byte)

LTspice でシミュレーションしたフィルタ特性です。SCAD フォーマットで推奨されている特性を満足しているのが確認できます。

playback-dsd-08.jpg(73120 byte)

ブレッドボードに組んだ回路は WM8741 のデータシートの推奨回路とは異なっていますので、今回実際に基板のレイアウトをした推奨回路の定数を変更して SCAD フォーマットブックで推奨されているフィルタ特性に近づけています。以下その回路図です。

playback-dsd-10.jpg(51953 byte)

LTspice でシミュレーションした結果です。

playback-dsd-11.jpg(64781 byte)

mpd.conf の変更

BBB + Botic で DSD ネイティブ再生するとファイルによっては曲の最後で再生が停止し、その際 mpd の CPU 使用率が 95% 以上になる現象が発生します。これを回避するには /etc/mpd.conf の audio_output にある dsd_native_type をデフォルトでは "3" となっているところ "0" にします。

これは muraji さんが、BBB ブリッジ基板と Mi-take さんの DAC(PCM1795)での組み合わせで DSD ネイティブ再生を試みていたときに発生した現象としてご連絡いただき、調査したことで解決しました。いろいろと試していただいた muraji さんに感謝です。

音だし

WM8741 基板は基板上の 40ピンのピンソケットと BBB ブリッジ基板のピンヘッダーを直接接続します。

playback-dsd-13.jpg(61381 byte)

さて肝心の音ですが、PCM モードでの 192kHz/24bit の音源で BBB と RBD-02+ HG キットでの音との比較をしました。RBD-02+ HG キットでも十分に満足できる音質です(と筆者は思っています)が、WM8741 DAC 基板ではさらに重厚さが加わり、それでいて奥行きが広がった印象です。DSD については重厚さというよりはよりクリアになり透明感が増しました。

DSD DAC 基板として試作したのですが PCM モードの音もなかなかのものです。今後、オペアンプや抵抗・コンデンサをいろいろ変更して視聴してみたいと思います。

このページは2015年8月28日にはじめてアップされました。

目次
PR
コンテンツ
最近のトピック
週間アクセスランキング
デル株式会社
Copyright (C) 2018 Linux Computing All rights reserved