Amplifier Linearization with Learned Predistortion
| Stage under test | LTC6078 op amp, 10 V/V, diode clipped at ±1 V |
|---|---|
| Dominant distortion | cubic (third harmonic) |
| Correction | polynomial predistorter, coefficients fit in Python from DC sweeps |
| Adaptation | SDR captures output, re-fits inverse model as temperature and load drift |
| Design target | third-harmonic reduction of 10 dB |
| Tools | LTspice, Python, software-defined radio |
- Input.The test signal, x(t). The amplifier's curve is measured first from DC sweep data, point by point, which is what the correction is fit against.
- Predistorter.A polynomial, a1x + a3x³, chosen to be the inverse of the amplifier's own curve. The coefficients are not derived by hand; they are fit in Python to the sweep data.
- Amplifier.An LTC6078 stage at 10 V/V, diode clipped at ±1 V. Past the knee it compresses, and the dominant error is the cubic term. The predistorter has already bent the input the other way.
- Output.y(t) should track G·x further into the knee than it would without correction. The design target is 10 dB less third harmonic. No measured number yet.
- SDR capture.A software-defined radio samples the real output, not the LTspice model. This is what makes the loop honest about temperature and load drift.
- Re-fit.The captured output goes back into the fitter, the coefficients update, and the predistorter tracks the amplifier as it drifts. This is the learned part.
- Project started. Amplifier stage chosen (LTC6078, 10 V/V, clipped at ±1 V). LTspice model built; DC sweep data collected; first polynomial fit in Python.
- SDR capture of the real output, then the re-fit loop. Third-harmonic measurement before and after correction goes here.
What this is. An amplifier is only linear up to a point. Push the input past that knee and the output no longer follows it, and the error shows up as harmonics, mostly the third. Predistortion means bending the input the opposite way first, so the amplifier's own curve straightens it back out. The interesting part is that the right bend changes as the amplifier warms up, so the correction has to be measured and re-fit rather than set once.
A diode-clipped op amp stage distorts once it passes its compression knee, and the dominant term is cubic. I am designing a polynomial predistortion stage that applies the inverse of that curve ahead of the amplifier so the chain stays linear further into the knee. The model lives in LTspice; the coefficients are fit in Python from DC sweep data rather than derived by hand.
Fixed coefficients drift with temperature and load, so the second half is an SDR feedback loop that captures the amplifier's actual output and re-fits the inverse with a learned predistorter. This entry gets numbers when the loop closes.