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