I am trying to simulate a model of an ADC and determine its performance.

One of the interesting properties is the ENOB (Effective Number Of Bits), which can be calculated from SINAD (SIgnal-to-Noise And Distortion ratio).

On that SINAD Wikipedia page, there is a PDF document which suggests that the second definition on the SINAD Wikipedia page is the one to use and which I interpreted to be

$$ SINAD = 10 \log_{10} \left( \frac{p_f} {\sum_i{(p_i)} - p_0 - p_f} \right)dB $$

Where $p_x$ is the power the FFT bin at frequency $x$, $p_f$ is the power of the frequency bin containing the signal frequency $f$ and $p_0$ is the DC component. I calculate the power of each bin by squaring the normalized amplitude. Also note that the sum in that equation runs over all frequencies from $0$ to the Nyquist bandwidth $f_s/2$ with $f_s$ being the sampling frequency of the ADC.

That same document also defines $$ ENOB = \frac{SINAD-1.76dB}{6.02} $$

Using my SINAD and this ENOB definition, I compared the output of an ideal $N$ bit ADC model, which matched for my FFT depth.

In another (related) PDF document, it states that the FFT depth must be large enough in order to distinguish between the FFT noise floor and the ADC noise. To my surprise, it also says that the FFT noise floor is $$ 10 \log_{10} \left( \frac{M}{2} \right)dB $$ below the theoretical signal-to-quantization-noise $SNR=6.02N+1.76dB$, which makes me wonder how $M$ can thus ever be "too low"?

While playing with different ADC models, I have seen that the ENOB does vary significantly when I set $M$ too low, so I am wondering if there is any guide on how to choose $M$ for a desired ADC bitwidth of $N$?

  • 1
    $\begingroup$ I think what the document is saying is that you want to make $M$ large enough so that the FFT's noise floor is well below the ADC's noise floor. By pushing the FFT's noise floor down, it has a diminished effect on the result (what you see is "more ADC noise, less FFT noise"), allowing you to more-easily distinguish where any distortion products might be. $\endgroup$
    – Jason R
    Feb 14, 2013 at 14:29
  • $\begingroup$ @JasonR, that makes sense. The reason why I could see so much influence of $M$ on the ENOB could also have to do with the incorrect calculation of SINAD - I started a separate question for that since I was so far unable to find an equation in the literature and the SINAD equation here was just my interpretation from the Wikipedia article. $\endgroup$
    – FriendFX
    Feb 15, 2013 at 3:41
  • $\begingroup$ By the way, is there an article about how to simulate ADC's? Namely I have an ADC with a given SFDR, SINAD and SNR, what would be the right way to simulate? Did you encounter such paper? $\endgroup$
    – Royi
    Apr 14, 2014 at 21:29
  • $\begingroup$ @Drazick: No, I didn't come across a paper on that. For my purposes, I fed in a sine wave (and optionally some noise) and analysed the FFT results after A/D-conversion. This question is on how to analyse these results correctly. $\endgroup$
    – FriendFX
    May 29, 2014 at 2:32
  • $\begingroup$ @Drazick: This paper from this comment may be a good starting point. $\endgroup$
    – FriendFX
    May 29, 2014 at 2:38

1 Answer 1


tl;dr: ADC noise is both distributed (approximated white noise) and spurious. A N-point FFT is a bank of N filters each approximating a Sinc function in frequency with an equivalent BW of 1 bin. The power output of each FFT bin is proportional to the total power across that filter's BW. For the case of white noise, as the BW gets bigger, the power out in each bin goes up--- this is the FFT noise floor. Spurs, unlike white noise, are not a distribution and therefore do not go up and down as we change the BW of the filter (assuming the filter is centered on the spur). In order to have enough dynamic range in the FFT to see the spurs, we need to ensure the filter BW is narrow enough so that the total integrated white noise power in the filter is less than the total power from the spur.

More Details:

Quantization noise can be well approximated (modeled) as uniform white noise, meaning the distribution of the amplitude is uniform (with an uncorrelated input waveform and sufficient number of bits, it is equally likely that "truth" is anywhere between the quantization levels at each sampling interval), and the distribution of the energy in frequency is also uniform (white) over the sampled spectrum from $-f_s/2$ to $+f_s/2$. In practical implementation due to correlation with the test signal, and non-linearities in the ADC, will result in individual frequency tones in the ADC output called spurs. Thus both Spurious Free Dynamic Range (SFDR) and Signal-to Noise and Distortion (SINAD) are specified (among other ADC performance metrics).

The SFDR is the rms level of the strongest sinusoidal input that maximizes the SFDR (typically this level is around 1 dB below where the actual full-scale is) relative to the level of the maximum spur rms level.

Signal to Noise and Distortion (SINAD) is typically used to denote the rms level of the Signal relative to ALL noise contributions (meaning all the spurs, all the quantization noise, etc), again at a Signal level for a sinusoidal test tone that would maximize this metric. DC offset is usually not included. Since SINAD includes all spurs, including the strongest one, SINAD will always be less than SFDR; however SINAD represents ALL the noise power in the digital spectrum, where SFDR represents a tone at one specific frequency.

After I will show how the formula for SINAD = 6dB/bit + 1.76 dB is derived which will give further insight, but first to answer your question: A key point is that the noise component of SINAD is both at individual frequency locations as spurs and also as distributed noise. Together they are the total noise in SINAD. An FFT is a bank of filters, each filter separated by $F_s/N$ where $F_s$ is the sampling rate and N is the number of bins. (This is very clear if you do a sliding FFT across a waveform, recomputing a new FFT output after each sample shift such that a waveform is produced at each bin). Further, without modifying the time domain data with windowing or zero padding, each bin has a bandwidth of 1/T where T is the duration in seconds of the time domain block being FFT'd. So there is a filter for each bin and each filter is equivalently 1 bin wide. Also note that as the number of samples in the FFT increases, the shape of each filter in frequency approaches a Sinc function (which isn't a great filter, meaning each FFT output will be sensitive to frequencies in other bins).

This is demonstrated with the simple case of a 4 point FFT in the figure below, where we see 4 filter responses, one for each of the 4 FFT outputs. The output of each "filter" will be proportional to the total integrated power across the spectrum after being filtered in each bin; thus in this example we see how a single tone shows up in all the bins, based on each bin's respective attenuation at the particular frequency the test tone is at. However each bin has an equivalent noise band width of 1 bin which is equal to $1/T$ as I described earlier. This means that if the input was white noise, an equivalent brickwall filter with bandwidth $1/T$ would have the same total noise power at the output of the filter. So for the case below, with a white noise input, each of the four FFT outputs would have a noise power term that is 1/4 of the total noise. (If we did successive 4 point FFT's from a larger data set, either block by block or a "moving" FFT where we slide over the sample set one sample at a time, it would be very clear by observing the outputs that their rms level would each be 1/4 of the input rms level, assuming a white noise input).

enter image description here

Every time we double the number of points in the FFT, each filter reduces in BW by half, so for white or similarly distributed noise, the power would reduce by $10log(2)$ = 3 dB. The power level for a spurious signal which exists at one frequency (and is not a power distribution) would not change. Therefore in order to see a spurious signal, we need to ensure we have enough resolution (narrow bandwidth filters) so that the total distributed noise power in the bandwidth of each bin is less than the noise power of the spur.

Why 6 dB/bit + 1.76 dB?

In the plot below I show the SNR for a "perfect" A/D Converter with a noise distribution due to quantization noise modeled as a uniform distribution (noise that is uniform in amplitude over a height of one least-significant bit). Since this noise is due to quantization noise alone, it is also called SQNR (Signal to Quanitization Noise Ratio).

The first plot shows the distribution (histogram) for a full scale Sine Wave, along with the variance for such a distribution. This is compared to the variance for the uniformly distributed quantization noise. As the next slide slows, it is the ratio of these two distributions (Signal - Quantization Noise) that results in the handy relationship between number of bits and SQNR, importantly for a full scale sine wave:

SQNR = 6 dB / bit + 1.76 dB.

enter image description here

enter image description here

I had actually completed and experiment to see how well this approximation would hold up for lower number of bits with the results graphed below, showing little error with the predicted result over a wide range of number of ibts (7 bits results in 1/11.53 instead of 1/12 which would result in an error in the calculated SNQR of only 0.17 dB.)

enter image description here

Further it is interesting to see that with a large number of bits, the histogram is uniformly distributed as expected, and the quantization noise is fairly "scrambled" relative to the input signal and from sample to sample; resulting in a reasonably white spectral density in frequency (unfortunately frequency plot is not shown).

enter image description here

In comparison, here is a plot at the other extreme with a 1.585 bit converter. Notice that the histogram approaches that of the input signal (the sinusoid), explaining why the early plot showing the variance for quantization noise at different number of bits approaches 1/8 as the number of bits is reduces (approaching that of the input signal!). Also note the pattern of the quantization noise itself plotted below the signal (showing the error from "truth" to the levels available). Here we see clear correlation both with the input signal and from sample to sample; this means very strong spurs will be present!

enter image description here

The above cases were for a modeled "perfect" A/D converter; more specifically a quantized digital signal. In actual ADC implementation, there will be other analog distortion sources and non-linearities that will also contribute to noise. This gives rise to Effective Number of Bits (ENOB). ENOB converts the actual A/D Converter into an equivalent "perfect" A/D converter: specifically an equality is made between the actual measured or expected Signal to Noise ratio from all noise sources (SINAD) and SNQR which implies quantization is the only noise source, and by solving for the number of bits in SNQRthat would be equal to SINAD (from 6dB/bit + 1.76 dB as the OP had done) , we determine the equivalent "perfect" A/D converter that would result in the same total noise level. Because the noise is both distributed and spurious, it is important to consider both ENOB (or SINAD, they are both derived from the same result) and SFDR.

Here is also a good reference from Analog Devices that gives further details:



Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.