Improve model parameters in a chain of simple transfer functions by optimization

I hope this is the right section here.

Suppose there’s a simple chain of transfer functions which originate from an electrical system. I try to match an output curve to be as close to a target as possible. I’ll try to depict the system below.

The input signal is some physical quantity q, given in floating point representation in a Microcontroller. That quantity shall be transformed into a voltage v, using a digital analog converter (DAC) and an electrical circuit to amplify and shift the output levels. I also have a target value, i.e. an expected output value at a given input value. There is only one place in the µC where I can adjust parameters of a function to alter the output according to my needs.

Here is the chain of signals:

qf(q, \theta)g(...)h(...)v

q is the input signal, f is a polynomial function f=\theta_0+\theta_1q+\ldots, with adjustable parameter vector \theta. g is the transfer function of the DAC, which is mostly linear but saturates at the large and small inputs. h is the transfer function of the amplifier circuit, also mostly linear. I do not have exact information about g and h and I don’t want to model them explicitly.

I’m searching for optimal parameters \hat{\theta}, that minimize the MSE for a given input/output sequence.
This sounds like a simple calibration/optimization problem, but the key issue is that some default values for \theta are used to create measurements.

The process is:

  • set \theta to some known default values \theta_\text{initial}
  • set q
  • measure v, which includes all the effects of f,g,h
  • find an improved set of parameters \hat{\theta} that minimize the error of the whole chain ||h(g(f(q,\theta)))-v_t|| where v_t is the expected target for a given input q

Usually, I would just go with a linear or nonlinear optimization, but I’m unable to create my objective function, because I don’t know how to model the improval of a given parameter set. It’s like a chicken-egg problem, because the values I measure result from a default parameter set. And I don’t have insight into g and h, either. I was trying to split the problem or to calculate back from v to f by estimating inverse functions based on data I have but that was not successful. Therefore, I’d like to make a step back and discuss the problem with you, maybe I’m missing something very simple.


  • \theta_\text{initial}
  • a list of tuples of training data (q, v_t, h(g(f(q,\theta_\text{initial})))), but no functional relationship of g,h, just the measured data


  • \hat{\theta}, an optimized version that minimizes the error of my training data

Is this a recursive problem? Can it be solved at all with the given data and information? I have a hard time to properly write down an objective function.

Thank you so much!

Hello Jan,

I have some questions for clarification.

  1. When you say transfer function, do you mean an LTI system like
    H(s) = \dfrac{P(s)}{Q(s)}
    or just a static nonlinearity?

  2. Are f, g, h all transfer functions according to the definition in 1.?

  3. When you are finding the improved \theta, are you trying to estimate also the parameters in \theta that you set to a known value? If so, why?

Dear Fredrik, thanks for your questions!

  1. No dynamic systems, just static nonlinearities
  2. Yes. But their shape might be different
  3. My description seems to be unclear, sorry. My data is measured while all elements in \theta are fixed and known. The resulting output can be measured and is the result of the signal chain. I’d then like to calculate a second set of \theta so that the output is not the measured one, but the target, v_t. There is no mixing of known and unknown parameters.

Thank you :slight_smile:

I think I’ve solved it using a two-step approach.

  1. Find a data-based forward model for the unknown functions g and h denoted \hat{g} and \hat{h} by using f(q,\theta) as input and v as output. Easiest way given a very low amount of noise is interpolation. This seems to work fine in my case but I need to find a way to make it more robust in case of (potential) noise.
  2. Perform nonlinear optimization, using \hat{h}(\hat{g}(f(q,\hat{\theta})))-v_t\rightarrow0, to find \hat{\theta}, i.e., a new set of parameters. It would have also been possible to estimate coefficients that improve the existing ones like \hat{h}(\hat{g}(f(q,\hat{\theta}\cdot\theta_\text{initial})))-v_t\rightarrow0.

I’m sure the interpolation part can and should be improved. Maybe some simple case of surrogate could be used.

Does this approach seem to be valid or am I missing something?