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

其他行业

开发平台:

Matlab

  1. function [numopen, denopen, denclsd] = frqp(num, den)
  2. % Hadi Saadat,  1998
  3. %discr=[
  4. %'                                                                           '
  5. %'  The function [numopen,denopen,denclsd]=frqp(num, den) is used for the    '
  6. %'  frequency response design of a P controller.  num & den are row vectors  '
  7. %'  of polynomial coefficients of the uncompensated open-loop plant transfer '
  8. %'  function.  The user is prompted to enter the controller gain Kp.  The    '
  9. %'  frequency-domain specifications before and after compensation are found. '
  10. %'  The function returns the open-loop & closed-loop numerator & denominators'
  11. %'  of the compensated system transfer function.                             '];
  12. %disp(discr);
  13. r=abs(roots(den));
  14. i=find(r>0); rp=r(i);
  15. rmx=max(rp); rmn=min(rp); wst=0.1*round(rmn); wf=20*round(rmx);;dw=wf/800;
  16. w=wst:dw:wf;
  17. clc
  18. [mag,phase]=bode(num,den,w);
  19. [Gm, Pm, wpc, wgc]= margin(mag, phase, w);
  20. fprintf('Uncompensated control system n')
  21. fprintf('Gain Margin  = %7.3g',Gm),fprintf('    Gain crossover w = %7.3gn',wgc)
  22. fprintf('Phase Margin = %7.3g',Pm),fprintf('   Phase crossover w = %7.3gn',wpc)
  23. fprintf('n')
  24. Kp=input('Enter the desired gain factor Kp -> ');
  25. numopen=Kp*num; denopen=den;
  26. [magp,phasep]=bode(numopen,denopen,w);
  27. [Gm1, Pm1, wpc1, wgc1]= margin(magp, phasep, w);
  28. fprintf('Gain & Phase Margins with gain compensation, Kp = %gn',Kp)
  29. fprintf('Gain Margin  = %7.3g',Gm1),fprintf('    Gain crossover w = %7.3gn',wgc1)
  30. fprintf('Phase Margin = %7.3g',Pm1),fprintf('   Phase crossover w = %7.3gn',wpc1)
  31. fprintf('n')
  32. % the following statements will form the characteristic Equation
  33. % of the compensated system.
  34. m=length(num); n=length(den);
  35. if n > m
  36. o=zeros(1,n-m); mk=[o,1]; num1=conv(num,mk);
  37. else, num1=num, end
  38. numopen=conv(Kp,num1);
  39. denclsd=denopen+numopen;
  40. [M,ph]=bode(numopen,denclsd,w);
  41. frqspec(w,M)
  42. %fprintf('Row vectors of polynomial coefficients of the compensated system:n')
  43. %fprintf('Open-loop num. '),disp(numopen)
  44. %fprintf('Open-loop den. '),disp(denopen)
  45. %fprintf('Closed-loop den'),disp(denclsd)
  46. fprintf('Compensated open-loop ')
  47. GH = tf(numopen, denopen)
  48. fprintf('Compensated closed-loop ')
  49. T = tf(numopen, denclsd)
  50. discr2=[
  51. 'Roots of the compensated characteristic equation:       '];
  52. disp(discr2)
  53. r=roots(denclsd);
  54. disp(r)
  55. rreal=real(r);
  56.   for l=1:n-1
  57.   if rreal(l) >=0
  58.   fprintf('   Root on the RHP, system is unstable. Reduce Kp and repeat.nn')
  59.   else,end
  60.   end