1. A method comprising: generating feedback data from input data with a non-linear circuit; initializing a software model of the non-linear circuit by using the input data and the feedback data to generate initial software model parameters, wherein the software model includes a linear block and a non-linear block in cascade, wherein the step of initializing further comprises: determining initial linear block parameters, determining initial non-linear block parameters, comprising: convolving the input data by the linear block to generate convolution data, wherein the linear block uses the initial linear block parameters; and generating initial non-linear block parameters from the convolution data; and refining the initial software model parameters following the step of initializing using the feedback data and input data, wherein the step of refining includes: applying the input data to the linear block; applying output data from the linear block to the non-linear block to generate filtered data; determining the difference between the filtered data and the feedback data to generate error data; and determining refined software model parameters that minimize a cost function for the error data.