1. A circuit for linearizing a non-linear element comprising: input circuitry that provides an input signal; a digital predistorter (DPD) that is coupled to the input circuitry to compensate for distortion in the non-linear element, wherein the DPD includes: a magnitude squared circuit that is coupled to the input circuitry; a plurality of variable delay elements that are each coupled to the magnitude squared circuit; a plurality of programmable nonlinearities, wherein each programmable nonlinearity is coupled in series with at least one of the variable delay elements; a first digital filter that is coupled to each of the input circuitry and that is coupled to each of the programmable nonlinearities, wherein the programmable nonlinearities supply filter coefficients for the digital filter; and a second digital filter that is coupled to first digital filter, wherein the second digital filter generates an output for the digital predistorter; and a feedback path that receives a feedback signal from the non-linear element and that is coupled to the input circuitry.