Resolution
bits
Model notes

Ported from ADCToolbox 0.9.1. aout/: compute_inl_from_ramp, compute_inl_from_sine, _correct_inl. spectrum/: analyze_spectrum. This page is the interactive companion to its examples exp_a32, exp_a33 and exp_g05; python/adc_inl_dnl.py feeds ADCToolbox the same histograms and the numbers agree to 0.01 LSB.

The converter. A binary capacitor DAC of N bits. Transition k is the input at which the code steps from k to k + 1, and an ideal converter puts it at k + ½. Unit-capacitor mismatch moves every weight and so every level built from it; the bow and the S-curve add the two lowest-order INL shapes on top, each zero at both ends of the range.

Weights. Every level of the DAC is a sum of capacitor weights, so a weight's error moves every level built from it and no others. Drag the MSB: its own carry at mid-scale swallows the whole error as one enormous DNL spike, and the INL breaks into two straight halves. Drag the LSB and almost nothing happens — the same percentage of a capacitor a thousand times smaller. Unit-cap mismatch and New chip just deal a fresh set of these errors, σ/√units on each weight.

DNL is how much wider than one LSB each code is, measured against the average code width, so a gain error never shows up in it. −1 LSB is a missing code: its two transitions have crossed and no input produces it. INL is the running sum of DNL, one value per transition — how far that transition has drifted from the straight line through the converter.

Reference line. INL only means something once you say which straight line it is measured against. Endpoint takes the line through the first and last transition, so the curve starts and ends at zero. Best fit takes the least-squares line, which usually reports about half as much INL without changing anything about the converter.

Histogram tests. A ramp sweeps the input uniformly, so each code is hit in proportion to its width and DNL is the histogram divided by its own mean, minus one. A sine is far easier to generate cleanly, but it spends its time at the ends of its swing, so its code density has to be undone by the arcsine law — ADCToolbox does that with −cos(π · cumsum / total) — and the mid-scale codes, which collect the fewest hits, come out the noisiest.

How many samples. Counting is a Poisson experiment: with H hits per code each DNL carries about 1/√H LSB of noise, and INL, being their running sum, wanders like a random walk of that step. That is the whole reason a production ramp test takes millions of samples. Watch the measured curve pull away from the true one as you take samples away.

Spectrum. 4096 conversions of a −0.5 dBFS sine through the same transition levels, rectangular window. A bow is an even error and lands in the second harmonic; an S-curve is odd and lands in the third; mismatch has no particular shape and lifts the whole floor.

Static error
2.0 LSB
0.0 LSB
1.00 %
Test
1,024 / code
Weights drag a capacitor off its nominal value, in %
DNLcode width, per code −0.34 … 0.15 LSB · 0 missing
-0.6-0.4-0.200.20.402565127681024DNL, LSB
INLtransition drift, endpoint line 0.00 … 2.20 LSB · measured −0.14 … 2.20
-0.500.511.522.502565127681024INL, LSB
Code densityuniform ramp 1,048,576 samples
289577866115502565127681024hits per code
Spectrumwhat the static error costs, −0.5 dBFS sine ENOB 8.64 · SFDR 54.7 dB
−120−100−80−60−40−20000.10.20.30.40.5 fsdBFSH2 −55.2 dBFS