III. IDENTIFICATION PARAMETRIQUE DES SYSTEMES LINEAIRES Le processus de l’identification paramétrique Système à identifier D/A A/D Modèle à paramètres ajustables (préducteur) Algorithme d’adaptation Paramètres u(t) y(t) + e(t) Programme
1. MOINDRES CARRES RECURSIFS Admettons pour le moment que la perturbation v = 0 Choisissons les degrés m et n du numérateur et du dénominateur de la FT du système à modéliser. Forme du modèle : Soient les valeurs associées aux paramètres durant la période t c.à.d durant [t-1, t[ t-1 t Prédiction de la valeur de y(t) (1) Vecteur des paramètres En posant : Regresseur (1) Prédiction
Erreur de prédiction : (2) Soit (3) où ai : facteurs de pondération Critère de q durant [t, t+1[ minimise Jt(q) L’estimation est la solution de Or (3) est la solution de (4) et (4)
Si la matrice (5) est inversible, on tire (6) Mais (6) est non récursive. Elle nécessite : la mémorisation de tous les j(i), i = 1, …, t, l’inversion de la matrice P-1(t). Expressions récursives: => => (7) Il reste à trouver une relation récursive pour P(t)
(5) (8) Pour éviter les inversions, on utilise le Lemme: Pour A = P-1(t-1), B = j(t), C = at et D = jT(t), et si P-1(t-1) est inversible, (8) ou (9) Remarque : si P-1(t-1) inv. => P-1(t), P-1(t+1),... inv.
Algorithme du moindre carré récursif
INTERPRETATION du MCR PAR KALMAN CONVERGENCE DU MCR En supposant que le système reste invariant entre t et t+1, et l’écart bt.n(t) provient de l’imprécision du modèle et de mesure n(t): aléatoire de moyenne nulle et de variance s2 bt : facteur qui diminue quand l’information sur q augmente Les équations précédentes sont d’état avec Appliquons Kalman:
En posant: et comme dans MCR on retrouve (*) les mêmes relations qu’en MCR On déduit les propriétés suivantes
1) 2) => tr[P(t)] est une mesure de l’erreur d’estimation en t 3) tr[P(t)] décroissante. En effet Trace de > 0 car tr(numérateur) = > 0 et dénominateur = (1) => tr[P(t+1)] < tr[P(t)]
4) En effet tr[P(t)] décroissante et bornée par 0 L (limite) (*) => L = L - lim de trace de => pour tout j(t) => P(t) 0 => L’algorithme MCR converge en moyenne quadratique vers les vrais paramètres en admettant que le modèle représente correctement la dynamique du système.
Choix des facteurs de pondération : ai Initialisation du MCR On pose: j(0) = [0, …, 0, 0, …,0] les y les u et au lieu de P(0) qui n’existe pas car P-1(0) = 0, on pose P(0) = P0 = c.I; c grand (=1000) et I = matrice unitaire P-1(0) = d.I (d = 0.001) et, d’après (5) et (6), MCR donne Comme les éléments diagonaux de j(i).jT(i) = jk2(i) > 0, devient rapidement négligeable. Choix des facteurs de pondération : ai a) Cas d’un système invariant En principe on donne la même importance à toutes les périodes ai = 1 i. Mais pour accélérer la convergence, on prend: 1 a0 ai i
b) Cas d’un système variant b(t,i) est d’autant plus faible que i est loin de t. (5) et (6) deviennent : (10) (11)
Choix de at et l(t) 1 b(t,i) t-i L’expression de ne se modifie pas dans MCR mais P-1(t-1) doit être remplacée par l(t).P-1(t-1) ou P(t-1) par P(t-1)/l(t) (10) et (11) Donc la relation du MCR doit être remplacée par Choix de at et l(t) 1) Si q varie lentement at = 1 et l(t) = l = cte => b(t,i) = l(t-i) 1 b(t,i) t-i 2) Si q varie rapidement il faut pouvoir le suivre => les pas d’itération doivent rester grands => tr[P(t)] ne doit pas diminuer On procède comme suit:
a) On pose l(t)/at = k = cte arbitraire mais d’autant plus faible que q est rapide b) On détermine l(t) en résolvant à chaque pas tr[P(t)] = tr[P(t-1)] = tr c.a.d ou (*) (*) est valable si l’écart est dû à la variation de q et non à l’erreur d’estimation. Or, au départ, c’est l’erreur d’estimation qui l’emporte. Remède : 1) On commence par supposer que le système est invariant jusqu’à l’instant t0 où tr[P(t0)] < (m+n).c, 0 < c < 4. Typiquement, c = 2. 2) On applique (*) à partir de t0.
(MCR) systèmes variants Initialement, on introduit les constantes k, c, a et on donne à t0 une trés grande valeur. La matrice P(t-1) et les vecteurs (t) et , obtenus durant l’étape t, sont stockés dans la mémoire. A l’instant t, on lit les valeurs de y(t) et de u(t). 2) Durant l’étape t+1, c’est-à-dire entre t et t+1, on effectue successivement les opérations suivantes: c) Si t > t0, on passe à f). e) Si tr[P(t)] ≤ (n + m).c, on pose t0 = t et tr = tr[P(t)], on passe à h). . i) T(t+1) = [-y(t), 1(t),…., (n-1)(t), u(t), (n+1)(t),…., (n+m-1)(t)].
S-function mcri function [sys,x0,str,ts] = mcri(t,x,v,flag,n,m,lamda,dt) % MCRI est une fonction-S pour estimer les paramètres d'un % système linéaire invariant non perturbé. % Les arguments t, x, v et flag sont introduits à chaque pas par % simulink. % t = instant du simulateur; v = [u(t),y(t)]' = entrée à l'instant t; % x = [theta;P(:);phi;alpha] = vecteur colonne contenant les % estimations des paramètres, les éléments de la matrice P, le % vecteur phi et le facteur alpha à l'instant t. % flag = code qui indique à la fonction-S ce qu'elle doit associer % à sys. % Les paramètres à introduire dans la fenêtre du bloc mcri sont: % n et m = les degrés respectivement du dénominateur et du % numérateur, % lamda = le facteur d'oubli et % dt = la période d'échantillonnage. % Voir SFUNTMPL pour la signification des valeurs de flag.
r = n+m ; if flag == 2 % associe à sys le nouveau état x(t+1). theta = x(1:r); P = zeros(r,r); P(:) = x(r+1:r+(r^2)); phi = x(r+(r^2)+1:2*r+(r^2)); alpha = x(2*r+(r^2)+1); u = v(1); y = v(2); epsilon = y - theta'*phi; den = (1/alpha) + phi'*P*phi; nvP = P - (P*phi*phi'*P)/den; nvtheta = theta + alpha*nvP*phi*epsilon; nvphi = [-y; phi(1:n-1)];u;phi(n+1:r-1)]; nvalpha = 1 - amda*(1 - alpha); sys = [nvtheta;nvP(:);nvphi;nvalpha]; elseif flag == 0 % dimensions et initialisation. %dimensions sys(1) = 0; % pas d'états continus. sys(2) = 2*r+(r^2)+1; % dimension de x : sys(3) = r+1; % dimension de la sortie: theta +trace. sys(4) = 2; % dimension de l'entrée v. sys(5) = 0; % pas de racines a déterminer. sys(6) = 0; % l'entrée ne sera pas lue durant flag 3. sys(7) = 1; % la periode d’échantillonnage est % toujours la même
%initialisation P = 1000*eye(r); x0 = [zeros(r,1);P(:);zeros(r,1);0.98]; str = []; % c'est toujours vide. ts = [dt 0]; % calcul aux instants nT sans décalage. elseif flag == 3 % définition de la sortie. P = zeros(r,r); P(:) = x(r+1:r+(r^2)); tr = trace(P); sys = [x(1:r);tr]; % c'est-à-dire theta et la trace de P. sys = sys(:); else sys = []; % les autres flags n'ont pas de rôle ici. end MCRI v = [u, y]’ dt xt xt-1 Flag t q tr(P)
a) Identification d’un système variant sur SIMULINK b2 b1