Is it possible to increase the resolution of an ADC by supersampling on a PIC24F ADC, which has 10 bits of resolution and is implemented using a successive approximation engine? Speed is not critical - greater than 1 kHz or so.

My initial thought was no, as it is not a Delta-Sigma ADC and results are not cumulative, so I thought I could add noise to the voltage reference (3V nominal) using a pin of the MCU and a high valued resistor. Would this work? The additional noise should improve the resolution, but I'm unsure if this applies for all types of ADC's.

• I do not have time to answer right now. IT sounds like you are asking if super-sampling will allow you to overcome more of your noise. Is this the case? If it is I must give a different answer then if you are asking if reading faster than needed allows you to infer extra bits of precision(ie. 10 bits from an 8 bit adc) Commented Oct 27, 2010 at 2:38
• Can you explain what you mean by adding noise to the voltage reference? This isn't anything that I have heard of before and would like to learn more about it. Commented Oct 27, 2010 at 3:28
• The idea is you add a small amount of noise (<1mV) to the voltage reference; if the actual value for the input is 1/4 the way from say 512 and 513 a non-supersampled ADC would say 512 but a supersampled ADC would say 512.25; read up on dithering. Commented Oct 27, 2010 at 11:21
• "Supersampling" is the same thing as oversampling, right? Commented Oct 27, 2010 at 19:19
• I think so - supersampling is what I've always heard it called. Commented Oct 27, 2010 at 21:03

Atmel has very clear application note about increasing ADC resolution by oversampling with sources in C.

Description in PDF is here, sources are on Atmel website.

oversampling allows higher ADC resolution, if you oversample at 4x nyquist you can gain 1 bit of resolution via spreading quantization noise and decimation.

If when you say adding noise to your reference, you are adding a known offset to your offset in order to determine when a signal shifts to reading a different value and then interpolating, then yes, I think that should work. (wow, long sentence) I think this is probably very difficult to code compared to the method that Mark mentioned where you over-sample. What I would worry about in the method is the error caused by adding more non-ideal components to a system where you are looking for very high precision.

If you are concerned about noise, you can over-sample, and then in code filter and then down-sample. This method will actually give you less noise then to just sample at your desired rate, but costs more in the since of processing time.

I think that you've confused two different things:

Supersampling (a.k.a oversampling) is the process of increasing signal time-resolution (you might say: horizontal). It multiplies the sampling rate of a sampled signal by adding extra samples between existing ones with interpolated values. This allows for higher-precision processing further the road and helps minimize some processing artifacts. This process applies only to digital signals, because analogue signal isn't sampled, it's continuous. One could say that an analogue (voltage) signal has infinitely high sampling rate, but that's not technically true, it's just a figure.

Dithering is adding noise to increase the dynamic (vertical) resolution of the digital signal that is about to be quantized. Quantization is necessary to store samples in finite precision numbers (digital files). Adding noise before quantization replaces the quantization distortion that produces audible artifacts called quantization distortion, with much less audible noise floor.

You can't increase sampling rate (and therefor frequency range) by adding noise to the signal, but you can increase the dynamic range by replacing quantization distortion with it.