RIGOL DHO800の12bit分解能を確認してみた

DHO800はADCが12ビットで垂直解像度が4096あります。普通の安価なオシロでは、通常8ビットのADCが使われているそうです。実際に解像度が12ビット分あるのかどうか実験してみました。

実験用の信号には手持ちのUSB-DACを使いました。私の記憶違いでなければ、玄人志向のAudioJack-USBという20年近く前の製品です。

このDACは48KHz16ビットの一般的な製品ですが、一つ特徴があって、出力信号にローパスフィルターがかかっていません。そのため、オシロで出力信号を見ると、サンプリング周期のところで階段状に電圧が上下していることが見て取れます。
下の波形は3KHzの鋸波です。1波長あたり48000/3000 = 16個のサンプルがあることが分かります。

いくら安物でも普通はこんな製品は無いのですが、音声信号に48KHzの矩形波が重畳されているだけなので、聴いても異常に気づきません。

このDACで3000/16 = 187.5Hzの鋸波を再生すると、256段の階段状の信号が得られます。
(※初出時、「同様に、このDACで48Hzの鋸波を再生すると、1000段の階段状の信号が得られます。」と書いていましたがWAVファイルを取り違えていました。)
オシロでこの256段の階段をきちんと観測できるか、実際にやってみました。

オシロの性能との関係は、

ADCのフルスケールでキャプチャして観測 → 8ビットの解像度が必要
フルスケールの1/2でキャプチャして観測 → 9ビットの解像度が必要
   :
フルスケールの1/16でキャプチャして観測 → 12ビットの解像度が必要

となるはずです。

まず、オシロの画面に表示される範囲と、実際に測定されている範囲は異なります(後者のほうが広い)。
ですので、実際に測定されている範囲を調べます。
手順は以下のビデオが分かりやすいです。

私のDHO800で調べた結果は以下の通りでした。
screen rangeは画面上の表示される目盛りの最大値-最小値、dynamic rangeは測定された値の最大値-最小値です。
前者より後者のほうが少し大きくなっています。ADCは後者を12ビットの分解能で測定します。

V/div 5 2 1 500m 200m 100m 50m
screen range 40 16 8 4 1.6 800m 400m
dynamic range 45.470 17.872 9.3669 4.6749 2.0432 1.0186 473.46m
V/div 50m 20m 10m 5m 2m 1m 500μ
screen range 400m 160m 80m 40m 16m 8m 4m
dynamic range 473.46m 183.84m 91.965m 47.09m 18.384m 9.1624m 4.5812m

オシロ側の垂直レンジを200mV/divにします。(プローブは×1にセットしています。)画面上で見えるのは-0.8v~0.8Vの範囲ですが、この状態で波形をキャプチャすると-1.02V~1.02Vの範囲が記録されます。(キャプチャ後に垂直レンジを変化させると、-1V~1Vの範囲が取り込めていることが確認できます。)
Windows側でボリウムを調整して信号をVppで2Vとし、波形をキャプチャします。

キャプチャ後に波形を拡大してみると、約20μsec(1/48000秒)ごとに階段状の信号が出ていることが分かります。
8ビットの解像度の信号を12ビットの解像度で測定しているので、変化がはっきり分かります。

ちなみに、これまで使っていたSeeedのポケットオシロDSO203は8ビットのADコンバータを搭載していますが、同じ信号を音量最大にして、レンジも最高(50mV/div)に設定して測定しても、下図が限界でした。

次に、垂直レンジを1V/divにしてから波形をキャプチャします。このとき測定できる電圧の幅は9.3669Vです。ボリウムを調整して波形のVppを9.3669/4 = 2.342V近辺にします。これで、8ビットの解像度の信号を12ビットの1/4 = 10ビット分の解像度で測定していることになります。

こちらの波形を拡大してみると、ノイズにかなり埋もれてはいるものの、一応20μsecごとの階段状の変化が見て取れます。

さらにレンジを上げて、2V/divにしてみます。取り込める電圧の幅は17.872Vです。その1/8は2.234Vですので、入力信号のVppを再度調整します。(1V/divで2.234Vに設定してからレンジを2V/divに切り替えるとVppが大きくなりますが、ノイズや分解能の影響と思われるので再調整はしていません。)
このとき、8ビットで量子化された信号を9ビット分の解像度で測定していることになります。

これを拡大してみたのが下の画像ですが、オシロの操作が制約されており、そもそもY軸を20mV/divより小さくできない、つまり100倍までしか拡大できません。

右肩上がりなのははっきり確認できますが、ノイズもあり20μsec単位の階段は微かに見える程度ですね。
ちなみにこのレンジで信号を測定すると下のようになります。元の段差自体がこの程度なので、上の画像では段差がノイズに埋もれてしまっているようです。

レンジをもう1段上げて5V/divとし、入力信号のVppを45.47/16 = 2.84Vにします。レンジを上げるとVppの値が変わりますが、入力信号の再調整はしていません。

この状態で波形をキャプチャして拡大すると、下図のようになりました。階段は完全にノイズに埋もれていて、全く確認できません。ただ、右上がりの傾向は見て取れます。

ちなみに、このレンジで元の信号を測定すると、以下のようになります。もともと階段の段差はかなり小さいですね。キャプチャした信号ではこれ以上は拡大できませんが、もし仮にADCがLSB側まで低ノイズで取り込めていたらこういった波形が見えただろう・・・ということになります。

というわけで、上記をまとめると大体以下のように言えるのではないかと思います。

8ビットで量子化された信号をキャプチャして観測する場合、
ADCのフルスケールで観測(12ビット相当) → 解像度は十分に得られている
フルスケールの1/4で観測(10ビット相当) → LSBよりノイズのほうが大きいが、波形は何とか確認できる
フルスケールの1/8で観測(9ビット相当) → ノイズがLSBの3倍程度あるが、元の波形がかろうじて確認できる
フルスケールの1/16で観測(8ビット相当) → ノイズが多すぎて最下位ビットの値の確認は難しい

別の言い方をすると、
・12ビットADCの最下位ビットは、ノイズが多すぎるし画面上でも拡大の限界があって、ほぼ使い物にならない
・2ビット目、3ビット目あたりは、ノイズを許容するなら用途次第では使えるかもしれない
という感じかと思います。
ここでのノイズはADC自体の測定誤差で、目測ですが3ビット分くらいかなあと思います。(12ビットの測定値に3ビット分の乱数が加算されるようなイメージです。)

画面に表示するだけなら垂直解像度は600ピクセル分、10ビットあれば足りますが、測定結果をCSVに吐き出して・・・とかしたいのであれば、上記を念頭に置いておいた方が良さそうです。

※2023/9/23追記

EEVblogのレビューが出たので貼っておきます。以下のビデオでは1V/divレンジで100mV ppvの信号を測定して拡大し、8bit ADCのオシロと比較しています。1V/divなので測定範囲はpeak-to-peakで9.3Vですから、100mVは測定範囲の1/93です。1/256までしか測れない8bit ADCのオシロではなかなか苦しい信号で、比較したらさすがにDHO800は大分違いますね。

※2023/10/31追記

イチケンさんの動画も出ていたので貼っておきます。

コメント