2016年3月29日火曜日

Raspberry Pi 3 model B と Volumio 2 RC1 & I2S-DAC ES9023

Volumio2が10月14日に正式にリリースしました。
10月15日現在、記事をアップデートしました。



以下、Volumio2リリース以前の話題です。

 ラズパイで最新のMPDであるVolumio2(RC1)を動かしている。Raspberry Pi 3 model Bを使えば、外部にWi-Fiドングルを用意しなくてよい。RC1はまだサンバの共有サービスが実装されていないが、NASがNFSをサポートしていれば、現時点でマウントできる。ただ、設定時の認識、動作時のマウントは時間がかかったり、挙動がへんだったりする感じ。



 NAS経由の音源。96kHz/24bitは問題なく再生。192kHzはプチプチ切れることがある。


7/30 いずれもRC2対応の記事にアップデートしています。Rev.B

 Raspberry Pi とVolumioで最先端オーディオを楽しむ その6 コンパクトなZeroでMPD


 RC1のままだとHifiberry+にしか対応していない。/boot/config.txtで、plusの文字をとって

dtoverlay=hifiberry-dac とすれば、ES9023が使えるようになる。GUIの設定は現状のバージョンではhifiberryplusだけど。

ーーー
4月17日現在
まだRC1だけど、CD-ROMが読めるような?記述、HDMIへの音声出力の選択メニューなどが追加されているようだ。
Intel-PCは、それ自体をMPDサーバーにするようで、専用のマシンを用意するような使い方かもしれない。
6月11日現在
もうすぐRC2が出そう。最終テスト版。機能はRC1に比べて大きく増強されている。PC版も用意されるかもしれない。
6月23日現在
 ラズパイ3で44.1kHz再生時に左右の出力が入れ替わる現象は、カーネルが対応したバージョンをRC2で用意するらしい。

6月25日付RC2リリース
 3か月ぶりに最終チェック用RC2がリリースした。2.63GBの容量。intel用はまだ用意されていない。
ダウンロード先;
https://volumio.org/forum/volumio-rc2-t4288.html

2016年3月24日木曜日

とりあえず出力の波形を見る

音源は176.4kHz/24bitの1kHz。

Hifiberry+

TeraDak-ES9023


Audiophonics I-Sabre V3 DAC ES9023 TCXO Raspberry Pi 2.0 A+ B+ / I2S

 ここで、PC-UR12

 Mac-mojo


 比べるとラズパイのノイズが少ないことが分かる。ラズパイだけを見ていると、なんとノイズが多いのだろう、と思っていたのだけど、PCに比べれば、なんともすっきりしていることがわかる。

 PC出力を止めると、波形に乗っているノイズ成分だけが見える。つまり、波形に乗っているのではなく、PCがUSB経由で出しているノイズ。

 外部発振タイプのES9023がなぜかノイズが多い。電源周りの失敗か。


ES9023をGPIO40pinに直接ではなくケーブルでつなぐモデル。TeraDak


おなじく、ES9023をGPIO40pinに直接ではなくケーブルでつなぐモデルで、50MHzではなく40MHzが搭載されているモデル。


2016年3月23日水曜日

Raspberry Pi のI2S信号を見てみる つづき2

 49.152MHzのクロックを使っているのは、ES9023を積んでいる
DAC-24192-ULN, 24Bit/192KHz DAC, I2S Input, Ultra Low Noise Regulator Circuit

クロックは
HPRC-331: High Precision & Low Jitter Audio Clock with Ultra Low Noise Circuit
の組み合わせ。


 今日はpicoScorpeを使った。

 サンプリング周波数176.4kHzの1kHz。メインの正しいらしい周波数に対して、少しのずれた周波数の2種類の周波数が観測できる。


サンプリング周波数192kHzの1kHz。複雑。










サンプリング周波数176.4kHzの1kHz。時間軸を広げた。こちらのほうがはっきりわかる。低い周波数が一つ見える。


サンプリング周波数192kHzの1kHz。時間軸を広げた。メインの周波数自体を少し偏移させている。前の波形を見れば、さらに数Hz離れた複数の周波数にもずらすという、複雑な波形だと推測できる。

昨日の観測の推定から一歩進んだ。


  •  サンプリング周波数の整数倍のMCKのクロックを使うときは、メインの周波数以外に数Hzずれた周波数を数分の1の確率で発生させる。
  •  サンプリング周波数の整数倍でないMCKのクロックを使うときは、メインの周波数以外に数Hzずれた周波数を複数、数分の1の確率で発生させる。メインの周波数自体をすごく狭い範囲で偏移させる。


 サンプリング周波数の整数倍かそうでないかで、波形の作り方が大きく異なる。整数倍の時のほうが生理的には受け入れられるが、多くの人が入手しているのは、整数倍のクロックのDACではない。

 この実験の根本的な部分が間違っているのかな。最初に用意した1kHzが正しくない?
 WaveGeneの波形を見た。すると、トリガのかかり方によって、二つの波形が見えてしまう。でも、これは、トリガが、正弦波に乗っているノイズによって、安定にかかていないためだと思われる。 離れたところに出るので、上記の「サンプリング周波数176.4kHzの1kHz。時間軸を広げた。こちらのほうがはっきりわかる。低い周波数が一つ見える。」とかいたが、同じ理由であれば、

  •  サンプリング周波数の整数倍のMCKのクロックを使うときは、正しい波形だけが出る。


ということになる。


 しごく当然の結論。
 測定は難しい。リアルタイムに正しいトリガをかけるには、トリガにローパスフィルタをつけないと、このノイジーな波形に対処できないかも。
 逆か。ノイジーな波形をそうでないように対策してから測定すればいいのかな。
大体、この汚い波形をだれも見たことないから、対策をしている人を見かけない。。。いるのかな。
 さかのぼれば、BCKやLRCKにはMCKがもろに乗っているし、LRCKにはBCKが乗っている。192kHzのBCKはひどいオーバシュートが出ている。みんな何とかしないといけない問題。ディジタルデータとしては処理されるが、結局アナログ出力に、それらのノイズ成分が漏れているからこんな汚い波形になるのだろうと思う。
 ラズパイの信号からES9023への信号の途中にはダンピング抵抗が入っている。でも、すごくレベルの高いMCKの漏れは、取り切れていない。フェライトビーズで対策をすればいいのかな。

 で、オシロは、そういう状況でも正しい波形を観測しなくちゃいけない。リアルタイムでなくてもいい。そう、今のオシロはみんな蓄積型だ。keysightにはバッチ型の解析ソフトがあったような。買えないけど。
 Picoもデータは吐き出せる。Matlabのデータも吐き出せる。解析に持っていけそうな気はするが、気力がない。

 これらの結論は、測定器を正しく操作しているかどうかで変わってくるので、うのみにしないで。。。

PS. 176.4kHzは 発振器が50MHz、40MHz、49.152MHzいずれであっても、キレイは一つの周波数が観測できるような気がする。192kHzはノイジーになったり偏差のある周波数に動き続けているような感じ。

2016年3月22日火曜日

Raspberry Pi のI2S信号を見てみる つづき

 TeraDak ES9023 For Pi 2/B+。  wavgeneで1kHzを発振させ、UR12でループバックし、Wavespectraで録音。192kHz/24bitデータ。
 波形が安定してトリガがかからない。周波数カウンタに揺らぎがあるということは、PLLの」ロックが外れていること。とは関係ない? こういう事象って、どう測定すればいいのかな。わからない。

FFTをかける
RCA出力。波形自体、ノイズが乗っている。

10kHz FFTをかけると、1kHz以外にノイズがみられる。

100kHz この帯域では、変なノイズ成分が見られない。オーディオ用としては問題ないように見える。でも60kHzから80kHz付近がこんもり盛り上がっているように見える。デルタΣ変調の高域の盛り上がりをローパスフィルタで落とした感じ?

1MHz いやはや、ノイズが多いね。これはコンピュータからのノイズかな?
10MHzでも、多くのノイズがみられる。もちろん音として聞こえはしないが、折り返して20kHz以下に落ちることは十分考えられる。

50MHz
 電源を入れていないとき。環境ノイズです。


さかのぼって、マシンが立ち上がって、volumioが動く前のノイズです。


●●重要なことが分かった。多くの推測あり

  • ES9023で50MHzのクロックを使うとき、サンプリング周波数192kHzの1kHz前後をばりばり変化する。
  • PCM5122でも192kHzの1kHzもばりばり変化する。おかしいなー。BCKに対してPLLが高い周波数を作っているのだから、安定なMCKが出ているはずなのに。
  • ES9023で49.152MHzのクロックを使うとき、サンプリング周波数192kHzの1kHzは少々変化する。
  • ES9023で49.152MHzのクロックを使うとき、サンプリング周波数176.4kHzの1kHzは1kHzと低いのと2つだけ変化する。二つの周波数なのでオシロでは安定に見えてしまう。

 48kHzハイレゾである176.4kHzは、その整数倍の49.152MHzでは安定に2通りの周波数が出力されている。2Hzぐらい離れている。出現頻度は半々ぐらいに見える。

 44.1kHzハイレゾである192kHzは、その整数倍ではないがの49.152MHzでは2通りの周波数が出力されている。2Hzぐらい離れている。波形の濃さから出現頻度は1:3ぐらいに見える。


 ES9018は、マルチレベルかつ3次のデルタシグマ変調器が入っている(たぶん)。絶対なレベルを正確に得ることは不可能なので、2^n個のコンパレータを用意し、ランダムに切り替える。確率的に、すごく正しいレベルが得られる。基準電圧は半導体の製造上正しい電圧が出ないけど、ある一定の電圧範囲に分布しているという理屈。双六を1万回ふると、各数字の出るのが1/6に近づくというのと同じ。10回ふっても1/6にはならない。

 もしかして、クロックに対しても、ふってるの? ある範囲の周波数偏移で毎回ずらして出力する。確率的には正しい周波数を出力することで、理想のクロックを使っていることになる、という理屈なのかなー。
 DSDでも、ノイズが高域にあるが、これがホワイトノイズであれば、折り返しても、聞こえる帯域のノイズレベルを上げるだけ。でも、特有の周波数成分があれば、折り返しノイズは、特定のスペクトルを持つことになる。

 ピアノだって、複数のピアノ線をよって作る。その1本ごとに共振周波数を変えて調律する。すでにむかしから、そういう手法はあったのだ。NHK「もう一つのショパンコンクール」から。

 もうひとつ考えられるのは、BCK/LRCKもすでに周波数がふられている。でも、安定に観測できるからそういうことはないように見えるけど。

 オーディオ用のDACが16ビットを超えたころから、絶対的な基準電圧や電流を作ることが不可能になった。なので、それを避ける工夫を各社がし始めた。

 とすると、15万円もするジッターの少ない発振器は、意味があるの。2つもしくはそれ以上の複数の周波数を偏移させるのだから、ジッターがあろうが最初からずらそうと思って設計されているのだとすると。意味ない?
 安いパーツを使っても、ちゃんと性能を出せる設計! えらい!
 ほんとかなー。

 なんか、青色LEDが、ある一定の割合で格子欠陥が存在したら、光量が飛躍的に増えたという話に通じるものがる。えっ、全然違うか。その当時というか、十年以上、みんなは格子欠陥のないGaNを作ろうとしてたんだね。


2016年3月20日日曜日

Raspberry Pi のI2S信号を見てみる

(1) ES9023ボード
 型番はI2S HiFi DAC ES9023 Expansion Board Decode Board Encoder for Raspberry pi B+で頼んだが、送られてきたのは、TeraDak ES9023 For Pi 2/B+ だった。2417円で購入。


 4つの信号を、200MHz、200MS/sの4象限オシロで見る。
 入力はCDリッピングのまま44.1kHz/16ビット。

 周波数を上げる。

 MCKが見えるところまで上げる。
LRCKの中に、MCKがびっちりと乗っている。BCKもしっかり乗っている。けれど、1/0の判断を間違えるようなレベルではない。
 BCKを基準に数ns遅れてDATAを見るので、ジッタの影響は全くない。というか、素晴らしい信号の立ち上がり。LRCKとBCKの同期はきっちり取れている。MCKは50MHzなので、同期はとれていなし、なんだかひずんだ正弦波だ。

 100MHz 5GS/sのオシロで見てみる。2現象なのでBCKとMCKだけ。同期はしていないので、ログデータをキャプチャ。
  706/44.1=16倍 サンプリング周波数の16倍がBCKになっている。


 ちなみに、画面で見えているのは、こんな感じ。
5GS/sすごいところは、なにかにひきづられて時々時間軸方向に微妙にずれているところをきっちり記録している。でも、このゆらぎは、データの読み取りに影響が出ているずれではないと思う。


●192kHz/24bit
 時間軸は上記の5倍速くなっています。BCK,DATAの関係はおんなじに見えます。おかしいな、Volumioの表示は32bitになっている。


 時間軸を早くします。
 もっと早くします。BCKは100ns=10MHz?
さらに早くします。
別のオシロで見ると。うっすら、少しずれた波形が見えています。BCKとMCKです。

BCK(下)とDATA(上)のタイミングを見ます。TIのPCM1792のタイムチャートによれば、BCK立ち下がり10ns後にDATAをサンプリングしていますから、ジッターの影響はないですね。


I2Sの信号の立ち上がりがとてもそろっています。ARMマイコンって、I/Oを同時にON/OFFする命令があるのでしょうか?

 ついでにRCAのアナログ信号を見て。。。見ないほうが良かった。本当? 1kHzは存在するけど。


 プローブではなくてシールド線でつなぐと少しはきれい。

2016年3月6日日曜日

OPA1622を使ったヘッドホンアンプ

 ICたった1個でヘッドホンアンプが作れたら、いいよね。でも、なかなかハイエンド用がない。
 TIのOPA1622は高速OPアンプと電流アンプをモノリシックICにしたもので、従来の2個入りOPアンプとは異なるピン配置になっている。
 その配置は、入り口と出口を合理的に配線できる。でも、従来の2個入りと同じピン配置のほうが使いやすい。というので、OP1622DIP化ボードが秋月から出ている。3月3日発売。http://akizukidenshi.com/catalog/g/gK-10255/

 DIPにするためには、はんだ付けが必要。使ってみると、出力抵抗を下げていってもひずみは増えない。位相のまわり方もそれほど不自然でない。

 ヘッドホン向けに開発されたOPアンプ OPA1622を試用

 とはいえ、それなりに発熱がある。データシートにもあるが、GND端子があって、プリント基板上ではVEEにつなげ、放熱効果を上げるようになっている。



回路
 OPアンプなので、DCから増幅できるけど、コンデンサの色づけを試したかったので、CCCP(エスエスエスアール)製0.22uFを使った。たぶんオイルコン。
 非反転回路で増幅率は2倍とした。抵抗値をどうするかが問題。1k以上でもよいような気がするけど、もっと抵抗値を下げれば、少しノイズは下がる。でも、このボルトレベルではノイズを気にする必要はないので、470オームにした。
 1+470/470=2倍


  • SW電源;コーセル LCA10S-5
  • 電源フィルタ;TDKラムダ RSEL-2003W
  • フィルムコンデンサ;Cornell Dubilier Electronics (CDE)
  • オイルコンデンサ;ソ連製
  • OPA1622DIP化基板;秋月電子通商
  • ICの電源近くのコンデンサ;680pFセラミック、0.01uFフィルム、1nFメタライズトフィルム
  • 入力の100pF;セラミック


測定
負荷抵抗は27Ωです。
入力ボリュームが9割の場所の時です。入力正弦波は0.5Vp-pです。

入力ボリュームが6割の場所の時です。ハイレゾ対応のヘッドホンになっています。



外観
 全体像です。

 OPアンプ部分です。


ノイズの抑制 その1
オシロスコープのプローブをショートさせた時です。升目は1divではありません。

 ショートさせたのを金属部分に接触させます。金属部分は仮想グラウンドです。見えているのは、コモンモードノイズです。


 電源を入れていないときのSW電源の出力です。

 電源を入れました。

 フィルタをつなぎ、その時の出力です。


 大容量フィルムコンデンサをつないだ出力です。


ノイズの抑制 その2
 測定していることが正しいかどうかわかりかねています。間違っていたらすみません。正しい方法がわかったら差し替えます。
 電源のAC100V側を測ります。黄色が電圧で、緑が電流プローブの波形です。使っているSW電源は10WですからPFCは入っていませんが、これほどひどいとは。電流の幅はもう少し開いていると思ったのですが。


 電圧にFFTをかけます。少し盛り上がりがありますが、それ以上の周波数に対してはノイズが見られません。


 電流にFFTをかけます。100kHzの帯域です。いくつか目立った周波数成分があります。


 10MHz帯域です。ずいぶん高いところまでノイズ成分があります。規定されているのは100MHzのオシロで、10MΩのインピーダンスのプローブで10MHzまでを見ることですので、これ以上の周波数は無視します。
 とはいえ、電流プローブが高価で買えないので、なんちゃってプローブを使っています。実測では2MHzぐらいまでは信用できるかもしれないレベルのプローブです。




 ショートしたプローブを金属部分にふれます。コモンモードノイズが観測されています。


つづく