回路図によれば、Raspberry Piのヘッドフォン出力は、ΔΣ方式のDACではなくて、PWMとRCローパスフィルタ(R=270Ω C=0.033uF fc=17.9KHz)によるシンプルなDA回路だ。このため、ヘッドフォン出力にはPWMに伴うノイズが重畳するはずだ。そこで、このノイズがどの程度なのか調べてみた。
サウンドを再生し、イヤフォンジャックから出力される信号をオシロで記録するとともに、実際に聴いてみた。サウンドファイルの再生にはaplayを使った。
aplay サウンドファイル名
用意したサウンドファイルの仕様は次の通り。
サンプル周波数:44.1kHz
チャネル数:モノラル
量子化ビット数:16ビット
ファイル形式:WAV
サンプル:正弦波
正弦波周波数 | 44Hz | 192Hz | 1.1kHz | 9.6kHz |
---|---|---|---|---|
サウンドファイル | sine44.WAV | sine192.WAV | sine1k1.WAV | sine9k6.WAV |
結果、下記の通りオシロの波形としては、スパイクノイズがあり、1kHあたりからステップ状の波形となる。ただ、後でわかったことだが、このステップ状の波形は、幅が約20μsであり48kHzのサンプリングによるものと考えられる。実際に聴いてみると、1kHzぐらいからノイズが耳についた。予想以上にひどい音質だった。なお、サンプル周波数が96kHzのサウンドファイルについても調べてみたが44.1kHzとほとんど変わらない結果だった。
44Hz
192Hz
1.1kHz
1.1kHz (拡大)
1.1kHz (更に拡大)
9.6kHz
比較のために、PCのオンボードサウンド(安物だと思うが)のイヤフォンジャックからの出力も同じ条件で調べてみたが、9.6kHzでもこの通り、さすがにRaspberry Piに比べれば優れている。
9.6kHz
どうも、設計では48kHzで再サンプルし、11ビット、100MHz(48kHz * 2^11 => 100MHz)という仕様のPWMだったが、バグで10ビットになってたらしい。
http://www.raspberrypi.org/phpBB3/viewtopic.php?f=38&t=10538&start=25
ファームウェアを更新すれば治るということなので、早速試してみた。ダウンロード
$ sudo wget http://goo.gl/1BOfJ -O /usr/bin/rpi-update && sudo chmod +x /usr/bin/rpi-update
認証エラーが出た場合、ca-certificatesパッケージが必要
$ sudo apt-get install ca-certificates
更新前に現在のバージョンを確認しておく
$ sudo /opt/vc/bin/vcgencmd version
Aug 10 2012 17:20:18
Copyright (c) 2012 Broadcom
version 330751 (release)
ファームウェアの更新(4,5分かかる)
$ sudo rpi-update
Raspberry Pi firmware updater by Hexxeh, enhanced by AndrewS
Performing self-update
ARM/GPU split is now defined in /boot/config.txt using the gpu_mem option!
We're running for the first time
Setting up firmware (this will take a few minutes)
Using HardFP libraries
If no errors appeared, your firmware was successfully setup
A reboot is needed to activate the new firmware
エラーが表示されなければ更新は成功新しいファームウェアをアクティべートするためにリブート
$ sudo reboot
更新後のバージョンを確認、確かに新しくなった。4日前(^^;
$ sudo /opt/vc/bin/vcgencmd version
Nov 8 2012 00:43:49
Copyright (c) 2012 Broadcom
version 349058 (release)
この結果、音質は劇的に改善し、何とかまともな音が聞こえるようになった。なお、再生の開始と終了時に発生するポップノイズは、10月22日現在「既知の問題」だそうだ。
http://www.raspberrypi.org/phpBB3/viewtopic.php?f=28&t=20689
関連記事