[STM32F1] 卡尔曼的C语言算法对吗?网上搜到的算法都很多是这样

[复制链接]
715|0
 楼主| ljxh401 发表于 2021-5-14 01:12 | 显示全部楼层 |阅读模式
代码里面 KG 的卡尔曼增益 好像和 输入数据 没有关系,这样不能通过数据 修正增益,那么好像效果,不符合 卡尔曼 滤波的思想吧
p_mid=p_last+Q; //p_mid=p(k|k-1),p_last=p(k-1|k-1),Q=噪声
kg=p_mid/(p_mid+R); //kg为kalman filter,R为噪声

kg 和 ResrcData 产生不了关系
  1. /*-------------------------------------------------------------------------------------------------------------*/
  2. /*        
  3.         Q:过程噪声,Q增大,动态响应变快,收敛稳定性变坏
  4.         R:测量噪声,R增大,动态响应变慢,收敛稳定性变好        
  5. */

  6. double KalmanFilter(const double ResrcData,double ProcessNiose_Q,double MeasureNoise_R,double InitialPrediction)
  7. {
  8.         double R = MeasureNoise_R;
  9.         double Q = ProcessNiose_Q;

  10.         static        double x_last;

  11.         double x_mid = x_last;
  12.         double x_now;

  13.         static        double p_last;

  14.         double p_mid ;
  15.         double p_now;
  16.         double kg;        

  17.         x_mid=x_last; //x_last=x(k-1|k-1),x_mid=x(k|k-1)
  18.         p_mid=p_last+Q; //p_mid=p(k|k-1),p_last=p(k-1|k-1),Q=噪声
  19.         kg=p_mid/(p_mid+R); //kg为kalman filter,R为噪声
  20.         x_now=x_mid+kg*(<font color="#ff0000">ResrcData</font>-x_mid);//估计出的最优值
  21.                
  22.         p_now=(1-kg)*p_mid;//最优值对应的covariance        

  23.         p_last = p_now; //更新covariance值
  24.         x_last = x_now; //更新系统状态值

  25.         return x_now;               
  26. }

  27. /*-------------------------------------------------------------------------------------------------------------*/



您需要登录后才可以回帖 登录 | 注册

本版积分规则

53

主题

235

帖子

4

粉丝
快速回复 在线客服 返回列表 返回顶部