Mercurial > forge
changeset 8274:537381eddbe0 octave-forge
control: work on ss2tf conversion
author | paramaniac |
---|---|
date | Mon, 15 Aug 2011 17:06:28 +0000 |
parents | ac1679a7f7a4 |
children | 64dbf90232a7 |
files | main/control/devel/ss2tf/sltb04bd.cc main/control/inst/@lti/size.m main/control/inst/@ss/__sys2tf__.m |
diffstat | 3 files changed, 23 insertions(+), 16 deletions(-) [+] |
line wrap: on
line diff
--- a/main/control/devel/ss2tf/sltb04bd.cc Mon Aug 15 16:44:45 2011 +0000 +++ b/main/control/devel/ss2tf/sltb04bd.cc Mon Aug 15 17:06:28 2011 +0000 @@ -146,6 +146,9 @@ retval(1) = gd; retval(2) = ignm; retval(3) = igdm; + retval(4) = octave_value (md); + retval(5) = octave_value (p); + retval(6) = octave_value (m); } return retval;
--- a/main/control/inst/@lti/size.m Mon Aug 15 16:44:45 2011 +0000 +++ b/main/control/inst/@lti/size.m Mon Aug 15 17:06:28 2011 +0000 @@ -71,7 +71,7 @@ else stru = "s"; endif - disp (sprintf ("LTI model with %d output%s and %d input%s.", ny, stry, nu, stru)); + disp (sprintf ("LTI model with %d output%s and %d input%s.", p, stry, m, stru)); case 1 n = [p, m]; case 2
--- a/main/control/inst/@ss/__sys2tf__.m Mon Aug 15 16:44:45 2011 +0000 +++ b/main/control/inst/@ss/__sys2tf__.m Mon Aug 15 17:06:28 2011 +0000 @@ -20,28 +20,32 @@ ## Author: Lukas Reichlin <lukas.reichlin@gmail.com> ## Created: October 2009 -## Version: 0.1.1 +## Version: 0.2 function [retsys, retlti] = __sys2tf__ (sys) - if (! issiso (sys)) - error ("ss: ss2tf: MIMO case not implemented yet"); - endif + [a, b, c, d] = ssdata (sys); # system could be a descriptor model + + [num, den, ign, igd, md, p, m] = sltb04bd (a, b, c, d); + + num = reshape (num, md, p, m); + den = reshape (den, md, p, m); - if (isempty (sys.a)) # static gain - num = sys.d; - den = 1; - else # default case - [zer, gain] = zero (sys); - pol = pole (sys); - - num = gain * real (poly (zer)); - den = real (poly (pol)); - endif + num = mat2cell (num, md, ones(1,p), ones(1,m)); + den = mat2cell (den, md, ones(1,p), ones(1,m)); + + num = squeeze (num); + den = squeeze (den); + + ign = mat2cell (ign, ones(1,p), ones(1,m)); + igd = mat2cell (igd, ones(1,p), ones(1,m)); + + num = cellfun (@(x, y) x(1:y+1), num, ign, "uniformoutput", false); + den = cellfun (@(x, y) x(1:y+1), den, igd, "uniformoutput", false); retsys = tf (num, den, get (sys, "tsam")); # tsam needed to set appropriate tfvar retlti = sys.lti; # preserve lti properties ## FIXME: sys = tf (ss (5)) -endfunction \ No newline at end of file +endfunction