Révision 469
Ajouté par Lea DUVIVIER il y a presque 3 ans
branch/duvivier_lea/sp4a3/sp4a3_kalman.c | ||
---|---|---|
#include "sp4a3_kalman_extra.h"
|
||
|
||
|
||
void Add_Mat_Mat(int na,int ma,double A[na][ma],int nb,int mb,double B[nb][mb], double R[na][ma]){
|
||
void Add_Mat_Mat(int na,int ma,double A[na][ma],int nb,int mb,double B[nb][mb], double R[na][ma]){ /*Fonction qui permet de faire l'addition de deux matrices*/
|
||
int i,j;
|
||
for(i=0;i<na;i++)
|
||
{
|
||
... | ... | |
}
|
||
}
|
||
|
||
void Inverse_Mat_22(int n,int m,double A[n][m],double B[n][m]){
|
||
void Inverse_Mat_22(int n,int m,double A[n][m],double B[n][m]){ /*Fonction qui permet d'inverser une matrice 2x2*/
|
||
float det;
|
||
det=(1/(A[0][0]*A[1][1]-A[1][0]*A[0][1]));
|
||
B[0][0]=A[1][1]*det;
|
||
... | ... | |
|
||
}
|
||
|
||
void Transpose_Mat(int n,int m,double A[n][m],double R[m][n]){
|
||
void Transpose_Mat(int n,int m,double A[n][m],double R[m][n]){ /*Fonction qui permet de faire la transposee d'une matrice*/
|
||
int i,j;
|
||
for (i=0;i<n;i++)
|
||
for (j=0;j<m;j++)
|
||
R[j][i]=A[i][j];
|
||
}
|
||
|
||
void Sub_Mat_Mat(int na,int ma,double A[na][ma],int nb,int mb,double B[nb][mb], double R[na][ma]){
|
||
void Sub_Mat_Mat(int na,int ma,double A[na][ma],int nb,int mb,double B[nb][mb], double R[na][ma]){ /*Fonction qui permet de faire la soustraction de deux matrices*/
|
||
int i,j;
|
||
nb=na;
|
||
mb=ma;
|
||
... | ... | |
}
|
||
}
|
||
|
||
void Mul_Mat_Mat(int na,int ma,double A[na][ma], int nb,int mb,double B[nb][mb], double R[na][mb]){
|
||
void Mul_Mat_Mat(int na,int ma,double A[na][ma], int nb,int mb,double B[nb][mb], double R[na][mb]){ /*Fonction qui permet de faire la multiplication de deux matrices*/
|
||
int i,j,k,a,b;
|
||
for(a=0;a<na;a++)
|
||
{
|
||
... | ... | |
double FT[4][4];
|
||
Transpose_Mat(4,4,F,FT);
|
||
double X1[4][1];
|
||
double P1[4][4]; /*Déclaration des différents tampons*/
|
||
double P1[4][4]; /*Déclaration des différents tampons qui servent dans le decoupage des operations*/
|
||
double tampon1[4][4];
|
||
double tampon2[4][4];
|
||
double tampon3[4][2];
|
||
... | ... | |
Mul_Mat_Mat(4,2,tampon3,2,2,tampon7,K);
|
||
Mul_Mat_Mat(2,4,H,4,1,X1,tampon8);
|
||
obser[0][0]=xobs;
|
||
obser[1][0]=yobs; /*On met ici obser car les valeurs changent en fonction des iterations*/
|
||
obser[1][0]=yobs; /*On met ici obser car les valeurs changent en fonction des iterations et on se sert ensuite de la matrice obser donc besoin d'avoir les valeurs à jour*/
|
||
Sub_Mat_Mat(2,1,obser,2,1,tampon8,delta);
|
||
Mul_Mat_Mat(4,2,K,2,1,delta,tampon9);
|
||
Add_Mat_Mat(4,1,X1,4,1,tampon9,X2);
|
||
... | ... | |
Mul_Mat_Mat(4,4,tampon10,4,4,P1,tampon11);
|
||
Sub_Mat_Mat(4,4,P1,4,4,tampon11,P2);
|
||
// X = F*X
|
||
Plot_Mat(X," X(k+1|k) = ");
|
||
Plot_Mat(X," X(k+1|k) = "); /*Affichage des courbes*/
|
||
|
||
//P = F*P*F'+Q;
|
||
Plot_Mat(P,"P(k+1|k) = F.P(k|k).FT + Q = ");
|
Formats disponibles : Unified diff
Fin du TP filtre de Kalman , courbes correctes et commentaires