App note: Enhancing ADC resolution by oversampling

Atmel describes how to enhance ADC resolution by oversampling the signal and averaging the extra data. This has a side effect of increasing the signal to noise ratio, and reducing the quantization error.

When the ADC samples a signal, it quantizes the signal in  discrete steps. This introduces some error, often referred to as  quantization error. Normal averaging will only even out signal fluctuations, while Decimation will increase the resolution. In a  4- times-oversampled signal, four adjacent data points are averaged to produce a new data point. Which frequency to oversample the signal with, can be calculated by equation 3-1.

Adding these extra samples and right-shifting the result by a factor n, yields a result with resolution increased by n bits. Averaging four ADC results to get a new ADC result is the same as if the ADC sampled at ¼ of the rate, but also has the effect of averaging the quantization noise, which improves SNR. This will increase the ENOB and reduce the quantization error. With the availability of faster ADCs and with low memory cost, the advantages of oversampling are cost effective and desirable

Join the Conversation


  1. You can trade less time resolution for more voltage resolution only if the noise level is about 1 LSB or more. If the noise is < 1 LSB, then oversampling does not help much; you get additional information only near the edge of a bit transition. That is the case with a MCP3424 18-bit ADC, for example, if your underlying signal is clean enough.

  2. @Philip, the Arcs bsndwidhth also referred to ad the 3dB point is always fixed and has nothing to do with the number of bits. That bandwidth is fixed by the bandwidth of the internal sample and hold amplifiers GainBandwidthProduct.


  3. It’s funny that the example they give is a brewer measuring temperature. It’s the exact same reason this interested me in the first place.

  4. So, in theory, it’s possible to increase Arduino ADC resolution. I’ll take a look at Arduino code.

Leave a comment

Your email address will not be published. Required fields are marked *

Notify me of followup comments via e-mail. You can also subscribe without commenting.