ss2tf() Acting Oddly

11 ビュー (過去 30 日間)
Daniel Gelman
Daniel Gelman 2016 年 8 月 24 日
回答済み: Jose Lara 2016 年 8 月 31 日
I am constructing a few transfer functions and I believe this the output is very wrong. I am not expecting the numerator and denominator to be the same. As expected B is a 'tf' (transfer function) but for some reason F defaulted to 'ss' (solid-state representation).
s = tf('s');
B = 0.05/(0.0303*s+1);
F = (1+B)/(1+(B*exp(-0.1*s)));
[num,den] = ss2tf(F.a,F.b,F.c,F.d)
Fsys = tf(num,den)
Output:
num =
1.0e+03 *
0.001000000000000 0.067656765676568 1.143678724308074
den =
1.0e+03 *
0.001000000000000 0.067656765676568 1.143678724308074
Fsys =
s^2 + 67.66 s + 1144
--------------------
s^2 + 67.66 s + 1144
Continuous-time transfer function.

回答 (1 件)

Jose Lara
Jose Lara 2016 年 8 月 31 日
You are trying to create an irrational transfer function. System interconnections using internal delays can only be represented in state-space, that is why F is defaulted to state-space. Try creating the system using only one equation by simplifying F and then using Pade approximation for the transport delays. Try the following steps:
s = tf('s');
Fs = ((0.0303*s + 1.05)/(0.0303*s+1+0.05*exp(-0.1*s)));
F = pade(Fs, 0);
[num,den] = ss2tf(F.a,F.b,F.c,F.d);
Fsys = tf(num,den);
Check out this other answer that uses transport delays: https://www.mathworks.com/matlabcentral/answers/246815
Also, check the documentation on how this Pade approximation works: http://www.mathworks.com/help/symbolic/pade.html

カテゴリ

Help Center および File ExchangeProgramming についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by