Files
player/Project_App_Chat/App_Src/calc/kalman.c

34 lines
879 B
C
Raw Normal View History

2025-06-27 00:32:57 +08:00
#include "kalman.h"
int kalman_init(kalman_struct *k)
{
k->x_last=0;
k->p_last=0.02;
k->Q=0.018;
k->R=0.542;
return 0;
}
float kalman_filter(kalman_struct *k,float now)
{
k->x_mid=k->x_last; //x_last=x(k-1|k-1),x_mid=x(k|k-1)
2025-07-05 19:47:28 +08:00
k->p_mid=k->p_last+k->Q; //p_mid=p(k|k-1),p_last=p(k-1|k-1),Q= <20><><EFBFBD><EFBFBD>
k->kg=k->p_mid/(k->p_mid+k->R); //kg Ϊkalman filter <20><><52><CEAA><EFBFBD><EFBFBD>
// k->z_measure=z_real+frand()*0.03; // <20><><EFBFBD><EFBFBD>ֵ
k->x_now=k->x_mid+k->kg*(now-k->x_mid); // <20><><EFBFBD>Ƴ<EFBFBD><C6B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
k->p_now=(1-k->kg)*k->p_mid; // <20><><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>Ӧ<EFBFBD><D3A6>covariance
k->p_last = k->p_now; // <20><><EFBFBD><EFBFBD>covariance ֵ
k->x_last = k->x_now; // <20><><EFBFBD><EFBFBD>ϵͳ״ֵ̬
2025-06-27 00:32:57 +08:00
return k->x_now;
}