[文档下载] 卡尔曼算法

[复制链接]
755|1
 楼主| mikewalpole 发表于 2024-11-18 14:04 | 显示全部楼层 |阅读模式
  1. /********************************************************************
  2. *@函数名:KalmanFilter(float newdata)
  3. *@功  能:卡尔曼滤波
  4. *@形  参:newdata 新数据
  5. *@返回值:滤波后数据
  6. *@备  注:要定义过程噪声和测量噪声
  7. ********************************************************************/

  8. /*
  9.         Q: 过程噪声,Q增大,动态响应变快,收敛稳定性变坏
  10.         R: 测量噪声,R增大,动态响应变慢,收敛稳定性变好
  11.         其中p的初值可以随便取,但是不能为0(为0的话卡尔曼滤波器就认为已经是最优滤波器了)
  12.   q,r的值需要我们试出来,讲白了就是(买的破温度计有多破,以及你的超人力有多强)
  13.   r参数调整滤波后的曲线与实测曲线的相近程度,r越小越接近。
  14.   q参数调滤波后的曲线平滑程度,q越小越平滑。
  15. */
  16. //过程噪音  
  17. #define P_Q   0.1
  18. //测量噪声
  19. #define M_R   0.01
  20. float KalmanFilter(float newdata)
  21. {
  22.    static float lastdata=0;
  23.    //其中p的初值可以随便取,但是不能为0(为0的话卡尔曼滤波器就认为已经是最优滤波器了)
  24.    static float p=0.01;
  25.    float        q = P_Q, r = M_R, kGain = 0;
  26.        
  27.    p = p+q;
  28.    kGain = p/(p+r);  //卡尔曼滤波系数
  29.    newdata = lastdata + (kGain*(newdata-lastdata));
  30.    p = (1-kGain)*p;
  31.    lastdata = newdata;  
  32.    return newdata;
  33. }




稳稳の幸福 发表于 2024-11-18 18:54 | 显示全部楼层
卡尔曼滤波算法。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

50

主题

1763

帖子

0

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