Vous êtes sur la page 1sur 7

FACULTE DES SCIENCES ET DE LA TECHNOLOGIE

Département d’Electrotechnique et d’Automatique Niveau : Master II


Année Universitaire : 2022 – 2023 Automatique et systèmes
Enseignant : Pr. YSSAAD Benyssaad
TP : Diagnostic des systèmes

TP N° :01- l’observateur de Luenberger

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 ̂

La dynamique de l’erreur d’estimation sur l’état ̂ peut s’écrire de la facon suivante :

̇ ̇ ̂̇
̇ ̂ ̂

Or : et ̂ ̂
On aura :
̇ ̂ ̂ ̂ ( ̂ )

Figure : Structure de l’observateur de Luenberger

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 [ ]

Pôles désirés : ( 0.7, 0.2)


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:

%% observateur estimateur de Luenberger du système dynamique: YSSAAD'


%-------------------------------------------------------------
close all; clear all; clc;
A=[2 -0.8;2 0];
B=[1;0];
C=[0 1];
D =[0];
L=place(A',C',[0.7 0.2])'
M=eig(A-L*C)
x=[-1;1];
xobs=[0;0];
XX=x;
XXobs=xobs;
%-------------------------------------------------------------
sys=ss(A,B,C,D)
poles=eig(A)
Qc=ctrb(sys)
rangQc=rank(Qc)
n=rank(A)
if rangQc==n

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:

%% observateur estimateur de Luenberger du système dynamique: YSSAAD'


%-------------------------------------------------------------
close all; clear all; clc;
A =[1.8097 -0.8187; 1 0];
B = [0.5; 0];
C =[0.1810 -0.1810];
D = 0;
L=place(A',C',[.5 .7])'
eig(A-L*C)
x=[-1;1]; % initial state
xhat=[0;0]; % initial estimate
XX=x;
XXhat=xhat;
%-------------------------------------------------------------
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

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 [ ]

Pôles désirés : ( 0.5, 0.7) , ( 0.75, 0.8), ( 0.4, 0.5)


Coditions initiales :
x=[-1; 1]; système
xhat=[0; 0]; estimé

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:

%% Dynamic system observer estimate Luenberger: YSSAAD'


%-------------------------------------------------------------
close all; clear all; clc;
A =[1.8097 -0.8187; 1 0];
B = [0.5; 0];

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');
%-------------------------------------------------------------

Vous aimerez peut-être aussi