Started by November 23, 2010
Dear all,

I have just been reading about the use of oversampling in a decimator to
enhance the resolution of a sampled signal.

The idea is to sample a signal containing 0.5LSB white noise at samplerate
of N times the Nyquist rate. It is then possible to extract log4(N) extra
bits of resolution by summing N samples.

However there is another scheme which can provide much more of an increase
in resolution.

noise. The result is that ADC sample dithering will take place on almost

eg. with noise of LSB, averaged over 6 samples
x=([0:360]/360)*2*pi; y=sin(x); v=[y' y' y' y' y' y']; b=4; n=(1/b)*1;
z=round(v*(b/2)+rand(length(y),columns(v)).*n)/(b/2); plot(mean(z'));

eg. with noise of 5*LSB averages over 6 samples
x=([0:360]/360)*2*pi; y=sin(x); v=[y' y' y' y' y' y']; b=4; n=(1/b)*5;
z=round(v*(b/2)+rand(length(y),columns(v)).*n)/(b/2); plot(mean(z'));

The second curve is much smoother and accurate.

Why is this method not mentioned in most texts about oversampling? It seems
that it is possible to get much more bits out of signal without increasing
the samplerate to extremely high frequencies.

Thanks for the remarks!

On 11/23/2010 04:04 PM, dwjbosman wrote:
> Dear all, > > I have just been reading about the use of oversampling in a decimator to > enhance the resolution of a sampled signal. > > The idea is to sample a signal containing 0.5LSB white noise at samplerate > of N times the Nyquist rate. It is then possible to extract log4(N) extra > bits of resolution by summing N samples. > > However there is another scheme which can provide much more of an increase > in resolution. > > For example instead of adding 0.5LSB noise to a signal one can add 1.5LSB > noise. The result is that ADC sample dithering will take place on almost > all ADC levels. > > eg. with noise of LSB, averaged over 6 samples > x=([0:360]/360)*2*pi; y=sin(x); v=[y' y' y' y' y' y']; b=4; n=(1/b)*1; > z=round(v*(b/2)+rand(length(y),columns(v)).*n)/(b/2); plot(mean(z')); > > eg. with noise of 5*LSB averages over 6 samples > x=([0:360]/360)*2*pi; y=sin(x); v=[y' y' y' y' y' y']; b=4; n=(1/b)*5; > z=round(v*(b/2)+rand(length(y),columns(v)).*n)/(b/2); plot(mean(z')); > > The second curve is much smoother and accurate. > > Why is this method not mentioned in most texts about oversampling? It seems > that it is possible to get much more bits out of signal without increasing > the samplerate to extremely high frequencies. > > Thanks for the remarks!
I don't know the full answer, but I _do_ know that as you increase the noise level you'll need more averaging to get it back out again, but you'll get better linearity. Note 1: you won't necessarily increase the _accuracy_ of the ADC -- that may be lost to various ADC errors (nonlinearity, scaling, etc.). But you'll certainly improve the _precision_ of the ADC. Note 2: Matlab exercises do not constitute proof. They merely suggest. Learn how to do this analysis on paper, and you'll see the issues much easier. -- Tim Wescott Wescott Design Services http://www.wescottdesign.com Do you need to implement control loops in software? "Applied Control Theory for Embedded Systems" was written for you. See details at http://www.wescottdesign.com/actfes/actfes.html
On Nov 23, 8:22&#2013266080;pm, Tim Wescott <t...@seemywebsite.com> wrote: