Académique Documents
Professionnel Documents
Culture Documents
L’observateurs de Luenberger
La théorie de l’observation de Luenberger repose essentiellement sur la technique de placement de pôles.
On se place dans le cas déterministe, les bruits w et v sont nuls, et l’objectif est d’assembler un vecteur de
résidu sur la base de ce modèle de sorte que ces résidus soient nuls dans l’état normale si
et différents de zéro en présence de défauts si
Suppose que la paire ( ) est observable, et Luenberger propose l’observateur suivant pour le système
̂̇ ̂ ̂ ̂ ̂
{
̂ ̂
Où représente la matrice de gain de l’observateur. Elle est calculée de telle sorte que l’état estimé ̂
Tends vers l’état réel du système quand , quels que soient les états initiaux et ̂
̇ ̇ ̂̇
̇ ̂ ̂
Or : et ̂ ̂
On aura :
̇ ̂ ̂ ̂ ( ̂ )
L’observateur a pour entrées et et il est construit de façon à fournir une estimation de l’état,
notée ̂ . ( est donné de façon que soit stable).
1
Il s’appelle observateur de Luenberger (asymptotique), avec ̂ l’estimé de et est un
gain à choisir tel que : ,̂ , ( ̂ ) , et donc pour
toute valeur initiale si et seulement si la matrice est Hurwitz, c.à.d. les valeurs propres de
( ) sont strictement négatives. Construire un observateur asymptotique revient donc à déterminer
une matrice de gain telle que soit Hurwitz.
Il suffit alors de choisir le gain de telle sorte que les valeurs propres de la matrice soient
strictement négatives, c'est-à-dire, elle est stable. Le choix de la matrice K a une influence sur la vitesse
de convergence de l’erreur .
Exercice 1 :
Soit le système d’espace d’état suivant :
̇
{
[ ], [ ], [ ] et [ ]
Travail demandé :
On veut construire un observateur de luenberger :
1- Donner le programme correspondant :
2- Déterminer : l’observabilité, la contrôlabilité, la stabilisabilité et la détectabilité du système.
3- Déterminer la matrice du gain de l’observateur
4- La matrice de transfert
5- Le graphe correspondant
6- Discuter le le graphe correspondant
Code Matlab:
2
display('système controlable')
else
display('système non controlable')
end
Qo=obsv(sys)
rangQo=rank(Qo)
if rangQo==n
display('système observable')
else
display('système non observable')
end
syms p
Ap=p*eye(2)-A
Qd=[Ap;C]
rangQd=rank(Qd)
if rangQd==n
display('système détectable')
else
display('système non détectable')
end
syms p
Ap=p*eye(2)-A
Sd=[Ap B]
rangSd=rank(Sd)
if rangSd==n
display('système stable')
else
display('système intable')
end
%-------------------------------------------------------------
T=15;
U1=.1*ones(1,T); % input signal
for k=0:T-1,
u=U1(k+1);
y=C*x+D*u
yobs=C*xobs+D*u
x=A*x+B*u
xobs=A*xobs+B*u+L*(y-yobs)
XX=[XX,x];
XXobs=[XXobs,xobs];
end
plot(0:T,[XX(1,:);XXobs(1,:)],'*');
hold on
plot(0:T,[XX(1,:);XXobs(1,:)],'o');
hold on
%-------------------------------------------------------------
xlabel('Time in seconds');
ylabel('State x and estimate xhat');
title('les états réels & obsrvés : YSSAAD');
legend('x','x_1 hat');
%-------------------------------------------------------------
Exercice 2 :
Soit le système d’espace d’état suivant :
̇
{
[ ], [ ], [ ] et [ ]
3
Pôles désirés : ( 0.5, 0.7)
Coditions initiales :
x=[-1; 1]; système
xhat=[0; 0]; estimé
Travail demandé :
On veut construire un observateur de luenberger :
1- Donner le programme correspondant :
2- Déterminer : l’observabilité, la contrôlabilité, la stabilisabilité et la détectabilité du système.
3- Déterminer la matrice du gain de l’observateur
4- La matrice de transfert
5- Le graphe correspondant
6- Discuter le le graphe correspondant
Code Matlab:
4
display('système stable')
else
display('système intable')
end
%-------------------------------------------------------------
T=40;
UU=.1*ones(1,T); % input signal
for k=0:T-1,
u=UU(k+1);
y=C*x+D*u
yhat=C*xhat+D*u
x=A*x+B*u;
xhat=A*xhat+B*u+L*(y-yhat)
XX=[XX,x];
XXhat=[XXhat,xhat];
end
plot(0:T,[XX(1,:);XXhat(1,:)]);
L1=place(A',C',[.5 .7])'
%-------------------------------------------------------------
xlabel('Time in seconds');
ylabel('State x and estimate xhat');
title('Dynamic system observer estimate : YSSAAD');
legend('x','x-1 hat');
%-------------------------------------------------------------
Exercice 3 :
Soit le système d’espace d’état suivant :
̇
{
[ ], [ ], [ ] et [ ]
Travail demandé :
On veut construire un observateur de luenberger dans le cas où on change les valeurs des pôles
désirés :
1- Donner le programme correspondant :
2- Déterminer : l’observabilité, la contrôlabilité, la stabilisabilité et la détectabilité du système.
3- Déterminer la matrice du gain de l’observateur
4- La matrice de transfert
5- Le graphe correspondant
6- Discuter le le graphe correspondant
Code Matlab:
5
C =[0.1810 -0.1810];
D = 0;
x0=[-1;1]; % initial state
xhat0=[0;0]; % initial estimate
x=x0;
xhat1=xhat0;
XX=x;
XXhat1=xhat1;
L1=place(A',C',[.5 .7])'
eig(A-L1*C)
%-------------------------------------------------------------
sys=ss(A,B,C,D)
poles=eig(A)
Qc=ctrb(sys)
rangQc=rank(Qc)
n=rank(A)
if rangQc==n
display('système controlable')
else
display('système non controlable')
end
Qo=obsv(sys)
rangQo=rank(Qo)
if rangQo==n
display('système observable')
else
display('système non observable')
end
syms p
Ap=p*eye(2)-A
Qd=[Ap;C]
rangQd=rank(Qd)
if rangQd==n
display('système détectable')
else
display('système non détectable')
end
syms p
Ap=p*eye(2)-A
Sd=[Ap B]
rangSd=rank(Sd)
if rangSd==n
display('système stable')
else
display('système intable')
end
%------------------------------------------------------------
t=40;
UU=.1*ones(1,t); % input signal
for k=0:t-1,
u=UU(k+1);
y=C*x+D*u
yhat1=C*xhat1+D*u
x=A*x+B*u;
xhat1=A*xhat1+B*u+L1*(y-yhat1)
XX=[XX,x];
XXhat1=[XXhat1,xhat1];
E1=y-yhat1
R1=x-xhat1
end
%-------------------------------------------------------------
x=x0;
xhat2=xhat0;
XX=x;
XXhat2=xhat2;
6
L2=place(A',C',[.75 .8])'
eig(A-L2*C)
t=40;
UU=.1*ones(1,t); % input signal
for k=0:t-1,
u=UU(k+1);
y=C*x+D*u
yhat2=C*xhat2+D*u
x=A*x+B*u;
xhat2=A*xhat2+B*u+L2*(y-yhat2)
XX=[XX,x];
XXhat2=[XXhat2,xhat2];
R2=x-xhat2
end
%-------------------------------------------------------------
x=x0;
xhat3=xhat0;
XX=x;
XXhat3=xhat3;
L3=place(A',C',[.4 .5])'
eig(A-L3*C)
t=40;
UU=.1*ones(1,t); % input signal
for k=0:t-1,
u=UU(k+1);
y=C*x+D*u
yhat3=C*xhat3+D*u
x=A*x+B*u;
xhat3=A*xhat3+B*u+L3*(y-yhat3)
XX=[XX,x];
XXhat3=[XXhat3,xhat3];
R3=x-xhat3
end
%-------------------------------------------------------------
figure(1);
plot(0:t,[XX(1,:);XXhat1(1,:)]);
grid on
hold on
plot(0:t,[XX(1,:);XXhat2(1,:)]);
grid on
hold on
plot(0:t,[XX(1,:);XXhat3(1,:)]);
grid on
%-------------------------------------------------------------
xlabel('Time in seconds');
ylabel('State x and estimate xhat');
title('Dynamic system observer estimate : YSSAAD');
legend('x','x_1 hat','x_2 hat','x_3 hat');
%-------------------------------------------------------------