Projet

Général

Profil

« Précédent | Suivant » 

Révision 632

Ajouté par jcguifodjo il y a environ 4 ans

Implémentation de la fonction calcul vitesse
Et implémentation de la matrice observation du filtre de Kalman

Voir les différences:

sp4a3_kalman.c
Plot_Mat(X," X(k+1|k) = ");
//P = F*P*F'+Q;
double A0[4][4],A1[4][4],A2[4][2],A3[2][4],A4[2][4],B[2][2],D[2][2],C[2][2],E[2][2];
double delta[2][1],Obs[2][1];
double A0[4][4],A1[4][4],A2[4][2],A3[4][4],A4[4][4],B[2][2],D[2][2],C[2][2],E[2][1];
double delta[2][1],Obs[2][1],C1[4][1];
Mul_Mat_Mat(4,4,F,4,4,P,A0);
Mul_Mat_Mat(4,4,A0,4,4,FT,A1);
Add_Mat_Mat(4,4,A1,4,4,Q,P);
......
Mul_Mat_Mat(2,4,H,4,2,A2,B);
Add_Mat_Mat(2,2,B,2,2,R,C);
Inverse_Mat_22(2,2,C,D) ;
Mul_Mat_Mat(2,2,A2,2,2,D,K);
Mul_Mat_Mat(4,2,A2,2,2,D,K);
Plot_Mat(K,"K = ");
//X = X + K*([xb(i);yb(i)]-H*X);
//Plot_Mat(Delta,"DELTA = Obs - H.X(k+1|k)");
Mul_Mat_Mat(2,4,H,4,1,X,E);
Sub_Mat_Mat(2,1,Obs,2,1,E,delta);
Mul_Mat_Mat(4,2,K,2,1,delta,C1);
Add_Mat_Mat(4,1,X,4,1,C1,X);
Plot_Mat(X," X(k+1|k+1) = X(k+1|k) + K.Delta = ");
// P = P - K*H*P;
Mul_Mat_Mat(2,2,K,2,4,H,A3);
Mul_Mat_Mat(2,4,A3,4,4,P,A4);
Sub_Mat_Mat(4,4,P,2,4,A4,P);
Mul_Mat_Mat(4,2,K,2,4,H,A3);
Mul_Mat_Mat(4,4,A3,4,4,P,A4);
Sub_Mat_Mat(4,4,P,4,4,A4,P);
Plot_Mat(P," P(k+1|k+1) = P(k+1|k) - K.H.P(k+1|k) = ");
/// La matrice X doit contenir la position filtrée ///

Formats disponibles : Unified diff