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

其他行业

开发平台:

Matlab

  1. function [G, Ae] = observer(A,B,C,Pe)
  2. %  H. Saadat,  1998
  3. clc
  4. % discr=[
  5. %' This function is used for the computation of the estimator gain     '
  6. %' gain vector G based on the Ackermann`s formula.  A is the system    '
  7. %' matrix, B is the input column vector & C is the output row vector.  '
  8. %' Pe is the row vector containing the desired estimator closed-loop   '
  9. %' poles. The function displays the gain vector G and the open-loop    '
  10. %' plant transfer function. The gain G and the estimator system matrix '
  11. %' A - G*C are returned.                                               '
  12. %'                                                                    '];
  13. %disp(discr)
  14. n=length(A);
  15.   for i=1:n;
  16.   V(n+1-i,:) = C*A^(n-i);
  17.   end
  18.   if rank(V)~=n
  19.   error('System is not state observable')
  20.   else
  21. W=inv(V);
  22.    end
  23. qe=zeros(n,1); qe(n)=1;
  24. He=W*qe;
  25. pe=poly(Pe);
  26. AL=zeros(n);
  27. for i=1:n+1
  28. AL=AL+pe(n+2-i)*A^(i-1);
  29. end
  30. G=AL*He;        % Requlator constants
  31. Ae=A-G*C;      % Closed-loop system matrix
  32. fprintf('Estimator gain vector G  n'),
  33. for i=1:n, fprintf('  %gn',G(i)),end,fprintf('n')
  34. D=0;
  35. [num, den]=ss2tf(A,B,C,D,1);
  36.   for i=1:length(num)
  37.   if abs(num(i)) <= 1e-08 num(i)=0; else,end,end
  38. %fprintf('Open-loop Plant transfer function: n'),
  39. %fprintf('Numerator   ')
  40. %for i=1:length(num), fprintf('  %g',num(i)),fprintf('  '),end,fprintf('n')
  41. %fprintf('Denominator ')
  42. %for i=1:length(den), fprintf('  %g',den(i)),fprintf('  '),end,fprintf('nn')
  43. fprintf('Open-loop Plant ')
  44. GH = tf(num, den)
  45. fprintf('Error matrix A - G*C n')
  46. disp(Ae)