Model notes
Ported from ADCToolbox 0.9.1. siggen/nonidealities.py: apply_thermal_noise, apply_quantization_noise, apply_jitter, apply_incomplete_sampling, apply_memory_effect, apply_am_tone; fundamentals/: find_coherent_frequency, amplitudes_to_snr, calculate_jitter_limit, snr_to_enob; analyze_spectrum and analyze_error_by_phase. This page is the interactive companion to its examples exp_g01, exp_g03, exp_g04, exp_g06, exp_g07 and exp_a04; python/adc_impairments.py runs ADCToolbox on the same samples and every number here matches it.
The setup. 4096 samples at 1 GS/s of a 0.45 V sine on a 0 … 1 V range, always on a coherent bin. Behind whichever impairment you pick sit 10 µV of thermal noise and a 14-bit converter, so the page never shows you a perfect part — it shows you what one flaw does to a good one. The spectrum is analyze_spectrum over the whole range, rectangular window, harmonics counted to the fifth.
SNDR counts everything that is not the tone; SNR leaves the harmonics out of it. When the two separate, the impairment is distorting rather than adding noise — that is the whole difference between the first three buttons and the last three.
The dashed line in the middle chart is the SNR that impairment alone would allow, and nothing else: amplitudes_to_snr for noise and for a quantiser's own Δ/√12, and calculate_jitter_limit, −20 log (2π fin τ), for the clock. Measure the gap: where the curve sits below the line, something else is dominating. Settling, memory and an interferer distort instead, and have no such number.
Against the phase is the residual after the fitted sine is subtracted, binned by where in the cycle it happened, with ADCToolbox's split drawn over it. An error proportional to the signal has power ∝ cos²φ (AM); one proportional to its slope ∝ sin²φ (PM); noise has neither. Jitter is pure PM, which is why the clock's own rms can be read straight back out of it — exp_a04 — and why moving the input frequency changes everything about it and nothing about the noise.
The floor lifts, flat and everywhere at once. Nothing else moves, and SNDR follows the noise exactly.