前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >卡尔曼滤波器原理和matlab实现

卡尔曼滤波器原理和matlab实现

作者头像
用户9925864
发布2022-07-27 08:22:43
5330
发布2022-07-27 08:22:43
举报
文章被收录于专栏:算法工程师的学习日志

项目最近正好用上kalman滤波器,故整理一下kalman滤波器相关资料,网上有很多详细的kalman资料,参考如下: 1、https://zhuanlan.zhihu.com/p/34656822 2、https://blog.csdn.net/m0_37953670/article/details/89528002 由于项目处理的是一维信号,过滤噪点,故上面2篇文献足够完成项目

以其中的一篇参考资料为例:

卡尔曼滤波器的递归过程:

  1. 估计时刻k 的状态: X(k) = AX(k-1) + Bu(k) 这里, u(k) 是系统输入,在项目中,一维输入信号A=1
  2. 计算误差相关矩阵P, 度量估计值的精确程度: P(k) = A*P(k-1)*A’+ Q 这里, Q = E{ Wj^2 } 是系统噪声的协方差阵,即系统框图中的Wj的协方差阵, Q 应该是不断变化的,为了简化,当作一个常数矩阵。
  3. 计算卡尔曼增益, 以下略去 (k), 即 P = P(k), X = X(k): K = P C’ (C * P * C’ + R) -1 这里 R = E{ Vj^2 }, 是测量噪声的协方差(阵), 即系统框图中的 Vj 的协方差, 为了简化,也当作一个常数矩阵。由于我们的系统一般是单输入单输出,所以 R是一个 1x1的矩阵,即一个常数,上面的公式可以简化为: K = P C’ / (C P * C’ + R)
  4. 状态变量反馈的误差量: e = Z(k) – C*X(k) 这里的 Z(k) 是带噪声的测量,在项目中,一维输入信号C=1
  5. 更新误差相关矩阵P P = P – K * C * P
  6. 更新状态变量: X =X + Ke = X + K (Z(k) – C*X(k))
  7. 最后的输出: Y = C*X
代码语言:javascript
复制
%卡尔曼滤波实例
%测量房间温度,房间温度真实值为T=25度,一共测量两百个点
N=200;  T=25;  size=[N,1]; 
%取温度预测值的方差为Q=1e-3,温度传感器的测量方差为R=0.36,即我们更相信预测值,而较少相信传感器测量值。
Q=1e-3;  R=0.36;  T_mearsured=T+sqrt(R)*randn(size);
%初始时刻温度的最优估计值为T_start=22.5度,温度初始估计方差为P_start=2
T_start=22.5;  P_start=2;
T_kalman(1)=T_start;  P_kalman(1)=P_start;
%用_kalman的后缀表示最优估计值,用_pre的后缀表示预测值
for k=2:N
    %在进行温度预测时,因为温度是一个连续的状态,我们认为上一时刻的温度和当前时刻的温度相等,则有T(k)=T(k-1)。
  T_pre(k)=T_kalman(k-1); % 估计时刻k 的状态
  P_pre(k)=P_kalman(k-1)+Q; % 计算误差相关矩阵P, 度量估计值的精确程度
  K(k)=P_pre(k)/(P_pre(k)+R); % 计算卡尔曼增益
  T_kalman(k)=T_pre(k)+K(k)*(T_mearsured(k)-T_pre(k)); % 更新状态变量
  P_kalman(k)=P_pre(k)-K(k)*P_pre(k); % 更新误差相关矩阵P 
end
%画图
figure();
plot(T*ones(size),'g');
hold on
plot(T_mearsured,'b');
hold on
plot(T_kalman,'r');
legend('温度真实值','温度测量值','Kalman估计值')

在项目上,关键的是获取到Q、R、P,这3个数据需要通过实验统计获取,代码可以直接复用,其中参数需要自己择优选择

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-12-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 算法工程师的学习日志 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档