オーバーサンプリング(p.248、非公式訳)

オーバーサンプリングはまるで魔法です。10ビット分解能のセンサーを1個使って16回測定し、その総和を4で割ると12ビット分解能の測定結果が得られます。なぜでしょうか?

何回かサンプリングした値を普通に平均すれば、測定値に含まれるばらつきが小さくなります。ADCから得られる値が測定のたびに少し高くなったり低くなったりすることは直感的に理解できるでしょう。中心極限定理のような統計学についてはここでは説明しませんが、結論だけを述べると、平均した測定回数の平方根が増えるに連れて平均値のばらつきは小さくなります。測定値の平均をとればノイズが小さくなるわけですから、質的な観点からいえば、たとえセンサーのノイズが原因で測定値が大きく変動する場合であっても、何回も何回も測定してその平均をとれば、やがて満足のゆく程度までばらつきは小さく収まります。前に移動平均を計算しましたが、まさにそれがここで述べていることです。

複数の数値を加算すれば(そして平均をとらなければ)、その総和のビット数は増えます。10ビット値を2個加算すれば、その総和は11ビット値に増えます。10ビット値を4個加算した場合、その総和を表現するには12ビットが必要です。しかし総和の最下位ビットには、個々の値に含まれるのと同じノイズが含まれています。桁数が増えたからといって、精度まで上がるわけではありません。

オーバーサンプリングをおこなうときは、まず何度もサンプリングしてビット数を増やします。そのあと、(部分的な)平均をとって測定結果のばらつきを減らします。そうすると、増えたビット数だけ精度の高い結果が得られます。今回の例題では、10ビット値を16回サンプリングして総和します。すると14ビット値が得られるので、その14ビット値を4で割ります(下位2ビットを切り捨てるのと同じことです)。これで精度の確かな12ビット値が得られます。

数学的な難しい説明はまったくしていませんが、オーバーサンプリングの有効性が少しでもわかれば結構です。オーバーサンプリングは知っておくべき重要なテクニックのひとつです。オーバーサンプリングを使うときに知っておくべきことは単純です。すなわち、分解能をnビット増やしたい場合には、2^{2^{n}}回サンプリングしてその総和をとってから右にn回シフトする(2^{n}で割る)ことだけです。

オーバーサンプリングの主な欠点は、入力される真値の変動が最下位ビットよりも大きくなる前に2^{2^{n}}回のサンプリングを終えなければならないということです。そのためオーバーサンプリングは主に、サンプリング速度を基準にして比較的変化の遅い信号に用いるテクニックです。オーバーサンプリングは、人が知覚できる程度の時間の尺度で起こる事象であればほぼすべてに利用できますが、オーディオ信号にはまったく追いつけません。速度、精度、コストのどれ優先するのかを考えなければなりません。16倍オーバーサンプリングは、サンプリング速度が16分の1に低下しますが、精度が2ビット上がるうえに費用がかかりません。速度と精度とをもっと引き上げたければ、もっと高価で精度の高いADCを買えば済むことです。

オーバーサンプリングとAVRのADCとについて詳しくは、Atme社のアプリケーションノート(http://www.atmel.com/Images/doc8003.pdf) "AVR121: Enhancing ADC resolution by oversampling"を見てください。

――――――――――――――――
訳註: 要するにたとえば16回測定して総和すれば真値はそのまま16倍になるが、ノイズ成分は直交加算されるので\sqrt{16}倍(=4倍)になる。その平均をとれば真値は1倍に戻るが、ノイズ成分は\frac{4}{16} (=\frac{1}{4}) に減って、結局S/N比が元の4倍になってそのぶんだけ精度が上がる(有効な桁数が増える)。すなわち16回の総和を4で割ったのと同じことになる(2進数でいえば精度が2ビット上がる)。