How to average different transfer functions in order to obtain a global one?

5 views (last 30 days)
I am trying to obtain a transfer function from experimental data of different tests. The thing is that for each test I obtain different transfer functions using the System Identification Toolbox, what would be the average transfer function that best fits all the tests?

Answers (2)

Star Strider
Star Strider on 20 Feb 2018
Combining the transfer functions in any way is likely not a valid approach. (You have not posted your code, so I do not know how you are estimating your transfer functions.)
The tfest (link) function (in R2012a and later) allows you to specify the number of poles and zeros. I would specify the same number of each for every experiment, being sure that they are specified so that the transfer functions are always proper.
Those transfer functions will each have the same number of poles and zeros, so you can then look at the poles and zeros directly (in z-space on the unit circle or in s-space in the complex plane). If the poles and zeros appear to ‘cluster’, the best approach might then be to take the complex mean of each cluster, and use that to define a common transfer function. (You could use the kmeans function to define the clusters, if you convert the imaginary components to real values first. The coordinates of the centroid values kmeans returns may be all you need to define your poles and zeros.)
NOTE This is entirely conjecture on my part, since I have never done anything like what you want to do. I cannot claim that there is any mathematical justification for it. I invite you to experiment to determine if it would appear to be a valid approach with your data.
  2 Comments
Francisco
Francisco on 20 Feb 2018
Sorry for my imprecised definition, I have used tfest to estimate the transfer functions and I know it should be a second order function (p=2 z=0). I had tried to average the poles already and the result is not very well... one of the main problems is that some of my transfer functions have imaginary poles and when I average them, the result are a pair of nonconjugate poles...
I was wondering for some kind of least square method to average them, I'll look for some mathematical approach. Thank you very much for your answer.
Star Strider
Star Strider on 20 Feb 2018
My pleasure.
I do not know what your data are, however an all-pole model may not be appropriate. I suspect there is at least a zero at the origin, ±Inf, or both. I would use at least a p=3, z=2 model. If you end up with pole-zero cancellations, you can resolve that later with the minreal function.
If you have only real poles or zeros (or poles or zeros with very small imaginary components, so near the origin), your system is not oscillating, and there is no reason to estimate a transfer function. The best approach is likely a nonlinear regression using a simple decaying exponential model. It is straightforward to code that using the fminsearch function if you are estimating 7 or fewer parameters. If it does demonstrate oscillations, you can estimate those parameters with the techniques in How to filter noise from time-frequency data and find natural frequency of a cantilever? (link).

Sign in to comment.


Kanthaswamy Ganapathy
Kanthaswamy Ganapathy on 6 May 2021
Think of an approach where you could add all the transfer functions together resulting in a higher order model. Then perform the model order reduction using 'balred' for the order of choice as similar to the individual transfer functions. Final step plot & frequency plot should show the average transfer function lying between the boundary of all the other transfer functions.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!