home *** CD-ROM | disk | FTP | other *** search
/ ARM Club 3 / TheARMClub_PDCD3.iso / hensa / maths / rlab / controls / CTB / dstep < prev    next >
Text File  |  1995-11-15  |  3KB  |  137 lines

  1. //-------------------------------------------------------------------------------
  2. //
  3. // dstep
  4. //
  5. // G=dstep(A,B,C,D,IU,N)
  6. //
  7. // This routine plots the unit step response of discrete-time linear systems.
  8. // It plots the time response of the following linear discrete-time
  9. // system
  10. //
  11. //     x[n+1] = Ax[n] + Bu[n]
  12. //     y[n]   = Cx[n] + Du[n]
  13. //
  14. // to a unit step input applied to the input IU. The routine may be called
  15. // in several fashions:
  16. //
  17. // (1)  G=dstep(A,B,C,D)
  18. //      (This produces the dstep response of the system looping over the
  19. //       inputs and looping over the outputs with an arbitrary sample
  20. //       of sample points N=200).
  21. //
  22. // (2)  G=dstep(A,B,C,D,IU)
  23. //      (This produces the dstep response of the system to the IU input
  24. //       and looped over the outputs with an arbitrary number of sample
  25. //       points N=200)
  26. //
  27. // (3)  G=dstep(A,B,C,D,IU,N)
  28. //      (This produces the dstep response of the system to the IU input
  29. //       and looped over the outputs for the specified number of sample
  30. //       points N).
  31. //
  32. // (4)  G=dstep(NUM,DEN)
  33. //      (This produces the step response of the transfer function model
  34. //       to the IU input with an arbitrary number of sample points N=200)).
  35. //
  36. // (5)  G=dstep(NUM,DEN,T)
  37. //      (This produces the step response of the transfer function model
  38. //       with the specified number of samples points N).
  39. //
  40. // Note: Two matrices are returned in a list.
  41. //
  42. //       G.x = X values in the plot.
  43. //       G.y = Y values in the plot.
  44. //
  45. // Note: The matrix G.y has as many columns as there are outputs and
  46. //       has N rows. The matrix G.x has as many columns as states
  47. //       and has N rows).
  48. //
  49. // Copyright(C), by Jeffrey B. Layton, 1994
  50. // Version JBL 940915
  51. //-------------------------------------------------------------------------------
  52.  
  53. rfile tfchk
  54. rfile tf2ss
  55. rfile abcdchk
  56. rfile dlsim
  57.  
  58. dstep = function(a,b,c,d,iu,n)
  59. {
  60.    local(nargs,msg,estr,Dum,numc,denc,A,B,C,D,IU,N,x,y,BI,DI,i)
  61.  
  62. // Count number of input arguments
  63.    nargs=0;
  64.    if (exist(a)) {nargs=nargs+1;}
  65.    if (exist(b)) {nargs=nargs+1;}
  66.    if (exist(c)) {nargs=nargs+1;}
  67.    if (exist(d)) {nargs=nargs+1;}
  68.    if (exist(iu)) {nargs=nargs+1;}
  69.    if (exist(n)) {nargs=nargs+1;}
  70.  
  71. // System check
  72. // ------ -----
  73.    if (nargs == 2) {
  74. // T.F. no N
  75.        Dum=tfchk(a,b);
  76.        numc=Dum.numc;
  77.        denc=Dum.denc;
  78.        IU=1;
  79.        Dum=tf2ss(numc,denc);
  80.        A=Dum.a;
  81.        B=Dum.b;
  82.        C=Dum.c;
  83.        D=Dum.d;
  84. // Set default N
  85.        N=200;
  86.    else if (nargs == 3) {
  87. // T.F. N specified
  88.        Dum=tfchk(a,b);
  89.        numc=Dum.numc;
  90.        denc=Dum.denc;
  91.        N=c;
  92.        IU=1;
  93.        Dum=tf2ss(numc,denc);
  94.        A=Dum.a;
  95.        B=Dum.b;
  96.        C=Dum.c;
  97.        D=Dum.d;
  98.    else if (nargs >= 4) {
  99. // State-Space
  100.        A=a;
  101.        B=b;
  102.        C=c;
  103.        D=d;
  104.        msg="";
  105.        msg=abcdchk(A,B,C,D);
  106.        if (msg != "") {
  107.            estr="DSTEP: "+msg;
  108.            error(estr);
  109.        }
  110.        if (exist(iu)) {
  111.            IU=iu;
  112.            if (exist(n)) {
  113.                N=n;
  114.            else
  115.                N=200;
  116.            }
  117.        else
  118.            IU=B.nc;
  119.            N=200;
  120.        }
  121.    }}}
  122.  
  123.  
  124. // Perform the Simulation
  125.    for (i in 1:IU) {
  126.  
  127. // Define B and D for ith input
  128.         BI=B[;i];
  129.         DI=D[;i];
  130.         Dum=dlsim(A,BI,C,DI,ones(N,1));
  131.         x=Dum.x;
  132.         y=Dum.y;
  133.    }
  134.  
  135.    return << x=x; y=y >>
  136. };
  137.