# Deriving the transfer function from a data set that has magnitude,phase and omega

15 views (last 30 days)
George Isaac on 16 Sep 2022
Commented: Paul on 17 Sep 2022
Hello,
I have this dataset that contains magnitude, phase and omega of a transfer function. I can bodeplot it but I need to derive the transfer function from it. Please help.
Thanks

Paul on 16 Sep 2022
Hi George,
I plotted the data and it looks like the data comes from a transfer function where the degree of the denominator is two more than the degree of the numerator.
First, store the data in an frd object. Then try using tfest to find the transfer function that fits the data. It should work very well.
If you have any trouble, feel free to come back, show your code, and and ask more questions.
Paul on 17 Sep 2022
Strictly speaking, the formula only applies for a second order system. For example, with zeta = 0.2 and Kdc = 1, we would expect to have
Kdc = 1;
zeta = 0.2;
Mr = 1/2/zeta/sqrt(1-zeta^2)
Mr = 2.5516
20*log10(Mr)
ans = 8.1361
And we do
bode(tf(1,[1 2*zeta*1 1]),tf(Mr))
If the transfer function is not second order, the formula might still be a very good approximation if the additional poles and zeros are at higher frequency than that of the dominant second order poles. For example, let's add a zero at s= -10 and a pole at s = -20, which don't have much impact on the low-frequency response and don't really affect the Mr
bode(tf([1/10 1],conv([1/20 1],[1 2*zeta*1 1])),tf(Mr),logspace(-1,1,500))
In your transfer function, the dominant second order poles are at ~4.45 rad/sec, but the transfer function has a zero at s = -0.1, which is smaller than the frequency of the dominant poles. That zero has a sigificant impact on the low frequency portion of the Bode plot (and the overshoot of the step response as illuatrated above by @Sam Chak), so the formula doesn't apply.