Learn an inverse from a known ramp. Keep the coefficients fixed and test on a new sine wave.

1 · Known reference →Training ramp covers ±0.95 Vx, known
2 · Distorted ADC →12 bits + output noisey = Q[f(x)]
3 · Fit an inverse →Minimize Σ[g(y) − x]²g(y) = Σ cₖỹᵏ
4 · ValidateNew signal, independent noisex̂ = g(yₙₑw)
0.06
-0.16
0.3 mV rms
±0.95 V
Inverse polynomial degree
±0.85 V

512 training samples · degree 5 · 2048 independent validation samples

Transfer curve · straighten the bend

IdealRawCorrected
-1.25-1-0.625-0.5000.6250.51.251output · Vknown input · V
trained region

Validation error · same unseen samples

RawCorrected
-142-1-71.1-0.50071.10.51421output − input · mVvalidation input · V

Both curves share the same axis. Quantization and noise remain after deterministic distortion is corrected.

Harmonics shrink on the independent validation record

SNDR before → after27.5 → 54.7 dB
RMS error before → after61.00 → 1.22 mV

■ Raw / ■ Corrected · dBFS per FFT bin. Coherent sine: 53/2048 cycles/sample. SNDR includes every non-DC, non-fundamental bin, not just these harmonics.

What is being calibrated?

f(x) = x + a₂x² + a₃x³, followed by additive output noise, 12-bit quantization and saturation. A known reference ramp supplies training pairs (x, y); a polynomial maps measured y back toward x. ỹ is y divided by the largest training magnitude. This foreground method assumes an accurate external reference. It corrects static distortion; it does not recover clipped information or remove random noise. Changing the validation amplitude never refits the coefficients.