Resolution
bits
Model notes

Ported from ADCToolbox 0.9.1. fundamentals/: fit_sine_4param; aout/: analyze_error_by_value, analyze_error_by_phase, analyze_error_pdf, analyze_error_spectrum; siggen/nonidealities.py: apply_thermal_noise, apply_static_nonlinearity, apply_jitter, apply_memory_effect, apply_am_tone. This page is the interactive companion to its examples exp_a01, exp_a02, exp_a03 and exp_a21–exp_a22; python/adc_error_views.py runs ADCToolbox on the same samples and every number here matches it.

The method. 4096 samples of a −1 dBFS sine at a coherent bin. Fit A cos ωt + B sin ωt + C by least squares at the known frequency, subtract it, and the residual is everything the converter did wrong. Its rms is what SNDR is made of; the four views below are four ways of asking where it came from. Take each impairment on its own first — the buttons do that — and learn its shape; then mix them and see which view still gives it away.

Against the value shows the residual sorted by the voltage the converter was looking at. A static curve is a function of exactly that, so it appears here as a clean shape and nowhere else. Noise, jitter and interference are unrelated to the value and average away to a flat line.

Against the phase sorts the same residual by where in the cycle it happened, and splits it three ways. An error proportional to the signal has power ∝ cos²φ; one proportional to the signal's slope has power ∝ sin²φ; noise has neither. Fitting the squared error to a constant plus cos 2φ separates them, which is ADCToolbox's AM / PM decomposition. Clock jitter is the textbook PM: it can only hurt where the signal is moving, so it vanishes at the peaks and is worst at the zero crossings. An interfering tone that multiplies the signal is the textbook AM.

The distribution is the residual's histogram against the Gaussian of the same rms. Quantisation alone is flat and one LSB wide; thermal noise is Gaussian; clipping and glitches put weight in the tails.

The residual's own spectrum answers one question the output spectrum cannot: is what is left a line or a floor? Static curvature leaves harmonics, an interferer leaves its own tone, jitter and thermal noise leave a floor — and jitter's floor is the one that grows with input frequency.

Impairments are applied in the order ADCToolbox's signal generator applies them: the static curve bends the input, the sampler carries jitter and a memory of the previous coarse sample, an interfering tone modulates it, thermal noise adds, and the quantiser rounds. fs = 100 MS/s, so jitter reads in picoseconds.

One at a time
0.0 LSB
0.00 %
0.00 %
2.0 ps
0.00 %
0.00 %
14.97 MHz
Output spectrumwhat you measure first ENOB 11.43 · SFDR 94.7 dB · the residual below accounts for all of it, 0.382 LSB rms
−120−100−80−60−40−20000.10.20.30.40.5 fsdBFS−95.7 dBFS
Against the valuestatic curvature lives here peak 0.19 LSB
-10122320483873error vs code, LSB
Against the phaseAM / PM split on the signal 0.000 · on its slope 0.352 · neither 0.289 LSB
-1010π2πerror vs phase, LSB
Distributionagainst a Gaussian of the same rms rms 0.382 LSB
-3-1.501.53error, LSB
The residual alonea line, or a floor? largest line −95.7 dBFS
−120−100−80−60−40−20000.10.20.30.40.5 fsdBFS−96.0 dBFS