# Why is the dB of the FFT plots exceeding 96dB for these signals sampled by an 16 bit ADC

There is a 16-bit data acquisition board and below is the recording of 120 seconds of voltage input at 500Hz sampling rate. The blue plot corresponds to the input voltage Vin and the green plot output voltage Vout is after 6Hz digital filter in time series:

And here below is the FFT of both input and output signals:

Basically I used the following code in Python to obtain the FFT plots:

plt.figure()
y = v_in
T = 1/sampling_rate
N = len(y)
yf = scipy.fftpack.fft(y)
xf = np.linspace(0.0, 1.0/(2.0*T), N//2)
amplitude = 2.0/N * np.abs(yf[:N//2])
pow = (N/sampling_rate)*amplitude*amplitude/2
plt.semilogx(xf, 20*np.log10(amplitude),'-b',  label="$Vin$")

y = v_out
T = 1/sampling_rate
N = len(y)
yf = scipy.fftpack.fft(y)
xf = np.linspace(0.0, 1.0/(2.0*T), N//2)
amplitude = 2.0/N * np.abs(yf[:N//2])
pow = (N/sampling_rate)*amplitude*amplitude/2
plt.semilogx(xf, 20*np.log10(amplitude), '-g',  label="$Vout$")
plt.legend(loc='upper right')


Here is my question:

The dynamic range of a 16 bit system is 96dB. This means max to min power ratio is 96dB or min to max ratio is -96dB.

How come then in my plots the 96dB is exceeded? I tried to figure out but couldn't find the reason.

• The 16 bit resolution is being wasted on 7.16Vdc +0.06/-0.10V to much fewer bits of dynamic range Jul 21, 2018 at 17:01

The dynamic range of (about) 96dB means that the ratio of a full scale signal (FSD) to the total power of the quantisation noise is about 96dB. Or the total noise power is about -96dBFSD.

However, when the noise is analysed into discrete frequency bins by doing a DFT, that noise power is split among the many bins. Another way to consider it is that the noise bandwidth of the each frequency bin is rather less than the Nyquist bandwidth, so can contain less noise power than the entire bandwidth.

In fact one way to distinguish noise from spurious signal is to change the DFT resolution bandwidth. Noise power will drop, coherent spurious signals will not.

• Is there a way to normalise this so that the min power in the plot is -96dB and max is 0dB? Ie giving the correct representation of 16 bit system. Jul 21, 2018 at 15:40
• @user1234: What you see IS the correct representation.
– JRE
Jul 21, 2018 at 16:16

I think the question might paraphrase to something like this: -

With a time domain signal restricted to 16 bits (96 dB), can you analyse the data samples in such a way to get a deeper depth of resolution?

And the answer is yes. A Fourier analysis will analyse all the time domain points and come up with an RMS value for a particular frequency and the resolution achievable can be likened to what happens when a signal is dithered.

Consider a noisy steady state value. Instantaneous samples will be both limited by ADC resolution and have a random element due to the noise. However, if you averaged 4 samples and compared it to another four samples, the difference between the two averaged values will not be as random as comparing individual samples. Additionally, 4 samples averaged contains 1 more bit of resolution. See this article from ADI on the subject: -

Extending this further: you have quite literally hundreds if not thousands or tens of thousands of samples in your time domain plot. 16 samples averaged gives 2 more bits of resolution. 64 samples gives 3 more bits, 256 samples gives 5 more bits equivalent to a resolution of 21 bits.

21 bits (256 samples averaged) means you are able to resolve to a range of 126 dB.

Both FFT’s show about the same 30+ dB dynamic quantization noise in adjacent bins from 60k samples and an input resolution of about -30 dB below the DC voltage of 7V. (est.)

This contributes to the 10log num of 50k samples of the noise and the slope of the filter providing another 30 dB of noise power filtering at max f giving my estimate of a total FFT dynamic range of 90+dB

Much cleaner FFT results would be obtained by AC coupling input and 40dB voltage gain or by using a sigma delta ADC with better resolution .

The long sampling duration of 2 minutes does not add much information to the results due to the quantization noise, even though it shows a nice sub-harmonic at 30Hz? (with wideband PWM phase noise) on the DC output.with a slightly smaller pure fundamental at line frequency.