卡尔曼滤波

2023-05-16

卡尔曼滤波是一个纯时域的滤波器,不需要进行频域变换,描述状态之间的线性关系。
卡尔曼滤波主要由两部分组成:
1、预测:使用上一阶段的状态来预测当前状态的预测值。
2、校正:利用对当前状态的观测值修正在预测阶段获得的预测值,获得一个更接进真实值的新估计值。

公式推导

预测

状态预测公式:
x t − ^ = F t x t − 1 ^ + B t u t \hat{x_t^-}=F_t\hat{x_{t-1}}+B_tu_t xt^=Ftxt1^+Btut
其中 x t − ^ \hat{x_t^-} xt^表示当前状态的估计值,’-'上标表示现在的估计值是根据上一状态预测的,还需用观测值进行校正,才可得到最优的当前状态估计值 x t ^ \hat{x_t} xt^ F t F_t Ft表示当前状态转移矩阵,用于从上一时刻的状态推测当前时刻的状态, x t − 1 ^ \hat{x_{t-1}} xt1^表示上一状态的估计值, B t B_t Bt是控制矩阵,表示控制量 u t u_t ut如何作用于当前状态。

噪声是不确定的,假设噪声成高斯分布,利用协方差矩阵来表示噪声不同维度的相关程度。(以两个维度为例)
c o v ( x ) = [ σ 11 σ 12 σ 12 σ 22 ] cov(x)=\begin{bmatrix} {\sigma_{11}}&{\sigma_{12}}\\ {\sigma_{12}}&{\sigma_{22}} \end{bmatrix} cov(x)=[σ11σ12σ12σ22]
其中 σ 11 \sigma_{11} σ11为第一个维度的方差, σ 22 \sigma_{22} σ22为第二个维度的方差, σ 12 \sigma_{12} σ12为两个维度的协方差。如果两个维度不相关, σ 12 = 0 \sigma_{12}=0 σ12=0,正相关, σ 12 > 0 \sigma_{12}>0 σ12>0,负相关, σ 12 < 0 \sigma_{12}<0 σ12<0
所有不确定性的因素,都用协方差矩阵表示。

不确定性转移公式:
P t − = F t P t − 1 F T + Q {P_t^-}=F_t{P_{t-1}}F^T+Q Pt=FtPt1FT+Q
其中 P P P表示协方差矩阵。协方差矩阵的性质: c o v ( A x , B x ) = A c o v ( x , x ) B T cov(Ax,Bx)=Acov(x,x)B^T cov(Ax,Bx)=Acov(x,x)BT。噪声的预测也并非完全准确,因此加上协方差矩阵 Q Q Q,表示预测噪声本身带来的噪声。

校正

观察值公式:
Z t = H x t + v Z_t=Hx_t+v Zt=Hxt+v
其中, Z t Z_t Zt表示观测值, H H H表示由状态到观测值的变换关系矩阵,即观测矩阵, v v v表示观测的噪声。观测噪声的协方差矩阵为 R R R

状态更新:
x t ^ = x t − ^ + K t ( Z t − H x t − ^ ) \hat{x_t}=\hat{x_t^-}+K_t(Z_t-H\hat{x_t^-}) xt^=xt^+Kt(ZtHxt^)
Z t − H x t − ^ Z_t-H\hat{x_t^-} ZtHxt^表示实际观测值与预期观测值之间的残差。将残差与 K t K_t Kt相乘即可用于修正 x t ^ \hat{x_t} xt^
实际观测值与预期观测值的残差的协方差为: S t = H P T − H T + R S_t=HP_T^-H^T+R St=HPTHT+R

K t K_t Kt为卡尔曼系数,其公式为: K t = P t − H T S t − 1 = P t − H T ( H P T − H T + R ) − 1 K_t=P_t^-H^TS_t^{-1}=P_t^-H^T(HP_T^-H^T+R)^{-1} Kt=PtHTSt1=PtHT(HPTHT+R)1
其作用为:
1、利用预测模型的协方差矩阵和观测模型的协方差矩阵,用于决定相信预测模型多一些还是观察模型多一些。相信预测模型多一些,残差的权重就会小一些,否则就会大一些。
2、将残差的表现形式从观察域转换到状态域。

更新噪声最佳估计值的分布:
P t = ( I − K t H ) P t − P_t=(I-K_tH)P_t^- Pt=(IKtH)Pt
卡尔曼滤波在不确定性的变化中寻找平衡,不断迭代,不确定性噪声不断发生改变。

代码例子

%% 以匀速小汽车为例
z=6:2:204;%理想观测值
speed=2*ones(1,100);
noise_z=randn(1,100);%方差为1的高斯噪声
z=z+noise_z;%添加了噪声的观测值
x=[0;0];%初始状态
P=[1 0;0 1];%状态协方差矩阵
F=[1 1;0 1];%状态转移矩阵
Q=[0 0;0 0];%状态转移协方差矩阵
H=[1 0];%观测矩阵
R=1;%观测噪声方差
Kalman_ans=[];
for i=1:100 %根据卡尔曼滤波的公式进行迭代
    x_t=F*x;
    P_t=F*P*F'+Q;
    K_t=P_t*H'*pinv(H*P_t*H'+R);
    x=x_t+K_t*(z(i)-H*x_t);
    P=(eye(2)-K_t*H)*P_t;
    Kalman_ans=[Kalman_ans;x'];
end
plot(Kalman_ans(:,1),Kalman_ans(:,2));
hold on;
plot(z,speed);
legend({'卡尔曼滤波预测值','观测值'});
xlabel('位置'); ylabel('速度');

结果图:
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

卡尔曼滤波 的相关文章

  • springboot多数据源使用canal同步master数据库

    canal数据库同步 canal源码 xff08 需要根据自己配置修改参数 xff09 准备 0 xff1a binlog文件 0 1 xff1a binlog文件包含两种类型 xff1a 索引文件 xff08 文件名后缀为 index x
  • nginx映射域名以及加证书https(SSL证书)

    1 映射一个域名到服务器80端口 2 在服务器nginx配置这个域名并重启 nginx conf默认配置 user root span class token punctuation span worker processes auto s
  • 严重 [RMI TCP Connection(3)-127.0.0.1]

    遇到这个问题网上搜了半天发现还是没解决 xff0c 最后发现是maven库的问题 1 这个问题一般是maven库的原因 xff0c 自己下载配置Repository仓库 xff0c 也可以使用IDEA自动下载一个库 下面我是使用IDEA下载
  • MySQL数据库删除数据(有外键约束)

    在MySQL中删除一张表或一条数据的时候 xff0c 出现有外键约束的问题 xff0c 于是就去查了下方法 xff1a span class hljs operator span class hljs keyword SELECT span
  • IDEA 第一次配置Tomcat找不到Tomcat server

    新装的一个电脑 xff0c 配置tomcat时候找不到tomcat server xff0c 这次做个记录 关闭项目 gt setting gt plugins gt 搜索tomcat安装 再次打开就可以看到了 如果还没有就应该是下面的情况
  • java.lang.NumberFormatException: null原因

    今天跑从公司SVN download下来的项目 xff0c 老实报java lang NumberFormatException null这个错 xff0c 页面还提示我系统异常 xff0c 从网上百度看的很多解决方案说是下面这些情况 xf
  • linux内核睡眠状态解析(转载)

    1 系统睡眠状态 睡眠状态是整个系统的全局低功耗状态 xff0c 在这种状态下 xff0c 用户空间的代码不能被执行并且整个系统的活动明显被降低 1 1 被支持的睡眠状态 取决于所运行平台的能力和配置选项 xff0c Linux内核能支持四
  • 记一次Debian11安装

    出现问题 安装成功之后无法启动 从官网上下载镜像之后 xff08 有网络镜像和完整镜像 xff09 xff0c 就是一步步下一步 xff0c 当时提醒我缺少固件 xff0c 我也没有注意 xff0c 以为会联网自动安装 xff0c 当时选择
  • 再谈 UITableView 的 estimatedRowHeight(转)好文章

    转载自 xff1a https kangzubin com uitableview estimatedrowheight 今天发现之前写的一个基于 UITableView 的列表页面存在如下问题 xff1a 当列表在滑动过程中 xff0c
  • Windows访问Ubuntu的两种方法

    两种访问方法都是基于SSH实现的 xff0c 相比于samba只能在同一局域网访问的限制 xff0c 提高工作访问的效率 使用前提 Ubuntu 系统安装了ssh客户端 1 xff1a 将远程Ubuntu文件系统映射到本地磁盘 xff0c
  • 转账设计测试用例-----必背

    功能测试 1 付款账户无余额 xff0c 发起转账 2 付款账户输入框输入特殊字符发起转账 3 付款账户输入框输入空值 xff0c 发起转账 4 付款账户输入0元 xff0c 发起转账 5 付款账户输入大于0且小于余额 xff0c 发起账号
  • 微信朋友圈点赞设计测试用例

    功能测试 发朋友圈本人 已点赞好友 发赞朋友圈的好友且已点赞的好友的共同好友 非发赞朋友圈的好友但是已点赞好友的好友 不通知 发赞朋友圈的好友但是非已点赞好友 通知 1 本人能否进行正常点赞 好友能否点赞 朋友圈开放非好友能否点赞 2 点赞
  • appium + webdriver + HTML 经常遇到的问题

    目录 问题1 xff1a Mac和iOS通信 进行自动化测试参考Desired Capabilities官方说明文档 问题2 xff1a driver 61 webdriver Remote http localhost 4723 wd h
  • 网络安全基础知识&中间件简单介绍

    web服务器产品 apache httpd tomcat iis lighttp nginx xff1a 不是用来web服务器 xff0c 而是用来做反向代理 xff08 tps10w xff0c 优化tqs2020w xff09 fast
  • 连接数据库的方法和方式

    前景说明 xff1a 在我们刚开始使用数据库的时候 xff0c 发现只能在mysql编辑器里面使用sql语句来完成对数据库的操作 xff0c 那我们怎么来通过Java来操控数据库呢 xff1f 这个时候就有了JDBC的出现 1 什么是JDB
  • 域(Domain)

    1 Domain 2 内网环境 工作组 xff1a 默认模式 xff0c 人人平等 xff0c 不方便管理 域 xff0c 人人不平等 xff0c 集中管理 xff0c 同一管理 3 xff1a 集中 统一管理 4 域的特点域组成 控制器D
  • 测试代码PostUrl,字典报空指针异常错误

    package TestExp import org apache http HttpEntity import org apache http client methods CloseableHttpResponse import org
  • Windows~~~在MySQL登录时出现Access denied for user ‘root‘@‘localhost‘ (using password: YES) ,并修改MySQL密码

    目录 适用于windows安装MySQL 对于出现拒绝访问root用户的解决方案 解决方案 xff1a 重启MySQL服务器 以上仍然不行的话 1 卸载计算机上所有与MYSQL相关应用程序 2 删除MYSQL所有配置文件 3 然后安装或者进
  • Java环境配置正确,但是java、javac、java -version均返回“不是内部或外部命令,也不是可运行的程序或批处理文件”?

    微信公众号 xff1a AIMIN2020 前言 大多数人刚接触Java的时候都会经常看到JDK JRE JVM xff0c 但可能一直迷迷糊糊 xff0c 不知道它们之间真正的作用和含义 xff0c 而了解JDK JRE JVM分别是什么
  • 来此加密证书申请,验证,自动部署

    之前用certbot 后来一直不报错 证书不管用 就想着干脆直接使用来此加密 不要中间商了 就有了直接到来此加密注册之旅 注册地址 来此加密 https letsencrypt osfipin com user 0408 order lis

随机推荐