Timespec.m
上传用户:eighthdate
上传日期:2014-05-24
资源大小:270k
文件大小:2k
源码类别:

其他行业

开发平台:

Matlab

  1. function timespec(num, den)
  2. %  Hadi Saadat,  1998
  3.    discr=[
  4.  ' function timespec(num, den) returns the time domain performance        '
  5.  ' specifications of the system step response.  num & den are row vectors '
  6.  ' of the numerator & denominator coefficients of the closed-loop transfer'
  7.  ' function.                                                              '
  8.  '                                                                        '];
  9. % disp(discr)
  10. m=length(num); n=length(den);
  11. [pn,r,k]=residue(num,den);
  12. nr=length(r);
  13. for i=1:nr
  14.       if r(i) >=0  disp('Unbounded response'), return
  15.       else, end
  16. end
  17. rp=abs(real(r)); i=find(rp>0 & abs(pn) >.0001); rn0=rp(i);
  18. rmn=min(rn0); tf=10/rmn; dt=tf/1000;
  19. tf1=tf;  % new
  20. Css=num(m)/den(n);
  21. if Css==inf
  22.    disp('Unbounded response')
  23.    return,else end
  24. t=0:dt:tf;
  25. tt=t;  %new
  26. l=length(t);  l1=length(t); % new
  27. c=step(num, den, t);  c1=c; % new
  28. if c(l) > Css+0.1*Css | c(l) < Css-0.1*Css
  29. disp(' Unbounded response'),return
  30. else,end
  31. j=0 ;m =0;
  32. Cmax=max(c);
  33. if Cmax > Css
  34.    po= (Cmax - Css)/Css * 100;
  35.    i=find(c==Cmax); tp=t(i); else,tp=0; end
  36. if tp < 10*dt & tp>0
  37.    tf=round(10*tp); dt=tf/200;
  38.    t=0:dt:tf;
  39.    l=length(t);
  40.    c=step(num, den, t);
  41.    j=0 ;m =0;
  42.    Cmax=max(c);
  43. else, end
  44. if Cmax > Css
  45.    po= (Cmax - Css)/Css * 100;
  46.    i=find(c==Cmax); tp=t(i);
  47.    fprintf('Peak time = %g',tp),fprintf('         Percent overshoot = %g',po),
  48. else, tp=0;end
  49.      for i =1:l
  50.           if  j == 0
  51.               if c(i) >= 0.1*Css  t1=t(i); j=1;
  52.               end
  53.           else, end
  54.           if  m ==0
  55.               if c(i) >= 0.9*Css  t9 = t(i); m =1;
  56.               end
  57.           else, end
  58.       end
  59. %end
  60. if t9 ~= 0
  61.   tr = t9 -t1;
  62. fprintf('n')
  63. fprintf('Rise time = %g',tr),fprintf('n')
  64. end
  65. tfu=1.02*Css; tfd=.98*Css;
  66. if tp > tr  t0=tp; else t0=tr; end
  67. if Cmax <= tfu  t0 = tr; else; end
  68. ts1=0;ts2=0;
  69. for i=1:l1
  70.  if tt(i) >t0 & tt(i) <tf1
  71.     if c1(i) >= tfu; ts1=tt(i); else, end
  72.     if c1(i) <= tfd; ts2=tt(i); else, end
  73.     else,end
  74. end
  75. ts=max(ts1,ts2);
  76. fprintf('Settling time = %g ',ts),fprintf('nn')