卡尔曼滤波(Kalman Filtering)——(6)MATLAB仿真(保姆级)

article/2025/10/5 19:42:00

MATLAB仿真

  • 一、卡尔曼滤波的实际应用
  • 二、流程图
  • 三、执行过程
  • 四、程序代码
  • 五、仿真结果
  • 参考文献

一、卡尔曼滤波的实际应用

  在这里依旧以前面提到的测量硬币为例进行MATLAB仿真。现有一枚硬币为了这枚硬币的直径,我们进行了多次测量,但是所使用的的尺子存在一定误差,人进行测量的过程中存在测量误差,而且由常识可以估算硬币的直径得到估计值。所以测量所得到的值与估计值哪一个更接近真实值呢?
已知:硬币直径真实值为50mm;
   首次估计误差为40mm;
   过程误差方差为4e-4;
   尺子的误差方差为3。

二、流程图

  由前面几篇博客对卡尔曼滤波公式进行了仔细的推导,一共得到了五大公式。卡尔曼滤波的过程就是对系统进行预测加矫正的过程,两者循环迭代使系统逐渐趋近于真实值。下面就是卡尔曼滤波过程的流程图。

三、执行过程

  一、由k-1次估计的硬币直径 x ^ k − 1 \hat{x}_{k-1} x^k1 去估计第k次系统的状态值(直径) x ^ k − , x ^ k − = A x ^ k − 1 + B u k − 1 \hat{x}_{k}^{-}, \hat{x}_{k}^{-}=A \hat{x}_{k-1}+B u_{k-1} x^k,x^k=Ax^k1+Buk1, 对应于本例中系统无输入 u k − 1 = 0 u_{k-1} = 0 uk1=0 A = H = I ; Q = 4 e − 4 ; R = 3 A = H= I;Q = 4e-4;R = 3 A=H=IQ=4e4;R=3。则 x ^ k − = x ^ k − 1 = 40 m m \hat{x}_{k}^{-}=\hat{x}_{k-1}=40mm x^k=x^k1=40mm

  二、由上一次的误差协方差 P k − 1 P_{k-1} Pk1 和过程噪声Q预测新的误差 P k − , P k − = P_{k}^{-}, P_{k}^{-}= Pk,Pk= A P k − 1 A T + Q A P_{k-1} A^{T}+Q APk1AT+Q, 对应于本例中 P k − = 5 P_{k}^{-}=5 Pk=5

  三、计算卡尔曼增益, K k = P k − H T ( H P k − H T + R ) − 1 K_{k}=P_{k}^{-} H^{T}\left(H P_{k}^{-} H^{T}+R\right)^{-1} Kk=PkHT(HPkHT+R)1, 对应于本例中 K k = K_{k}= Kk= 5 / ( 5 + 3 ) , K k = 0.625 5/\left(5+3\right), \quad K_{k}=0.625 5/(5+3),Kk=0.625

  四、 进行校正更新, x ^ k = x ^ k − + K k ( z k − H x ^ k − ) \hat{x}_{k}=\hat{x}_{k}^{-}+K_{k}\left(z_{k}-H \hat{x}_{k}^{-}\right) x^k=x^k+Kk(zkHx^k), 对应于上例中 x ^ k = 40 + 0.625 ∗ \hat{x}_{k}=40+0.625 * x^k=40+0.625 ( z k − 40 ) (z_{k}-40) (zk40), 此 x ^ k \hat{x}_{k} x^k 即为 k \mathrm{k} k 时刻的最优直径。

  五、为下一步估计 k + 1 \mathrm{k}+1 k+1 时刻的最优温度值的迭代进行更新操作, 级更新 P k P_{k} Pk 值, P k = ( I − K k H ) P k − , P_{k}=\left(I-K_{k} H\right) P_{k}^{-}, \quad Pk=(IKkH)Pk, 对应于上例中的 ( 1 − K k ) ∗ 5 = 1.875 \left(1-K_{k}\right) * 5=1.875 (1Kk)5=1.875

方法kalman 公式对应本例kalman 公式
先验估计 x ^ k − = A x ^ k − 1 + B u k − 1 \hat{x}_{k}^-=A \hat{x}_{k-1}+B u_{k-1} x^k=Ax^k1+Buk1 x ^ k − = x ^ k − 1 \hat{x}_{k}^{-}=\hat{x}_{k-1} x^k=x^k1
先验误差协方差矩阵 P k − = A P k − 1 A T + Q P_{k}^{-}=A P_{k-1} A^{T}+Q Pk=APk1AT+Q P k − = P_{k}^{-}= Pk= P k − 1 + Q P_{k-1} +Q Pk1+Q
卡尔曼增益 K k = P k − H T H P k − H T + R K_{k}=\frac{P_{k}^{-} H^{T}}{H P_{k}^{-} H^{T}+R} Kk=HPkHT+RPkHT K k = P k − P k − + R K_{k}=\frac{P_{k}^{-} }{P_{k}^{-}+R} Kk=Pk+RPk
后验估计 x ^ k = x ^ k − + K k ( z k − H x ^ k − ) \hat{x}_{k}=\hat{x}_{k}^{-}+K_{k}\left(z_{k}-H \hat{x}_{k}^{-}\right) x^k=x^k+Kk(zkHx^k) x ^ k = x ^ k − + K k ( z k − x ^ k − ) \hat{x}_{k}=\hat{x}_{k}^{-}+K_{k}\left(z_{k}- \hat{x}_{k}^{-}\right) x^k=x^k+Kk(zkx^k)
更新误差协方差矩阵 P k = ( I − K k H ) P k − P_{k}=\left(I-K_{k} H\right) P_{k}^{-} Pk=(IKkH)Pk P k = ( I − K k ) P k − P_{k}=\left(I-K_{k} \right) P_{k}^{-} Pk=(IKk)Pk

四、程序代码

本次程序运行环境为WIN7+MATLAB R2018a

% Kalman filter example 
%% 系统描述:
% 1.硬币直径真实值为50mm;
% 2.开始时,硬币直径的估计为40mm,估计误差为5mm;
% 3.尺子的测量误差为3mm;
%% 变量初始化
close all;% intial parameters
% 计算连续n_iter次数
n_iter = 100;
% size of array. n_iter行,1列
sz = [n_iter, 1];
% 硬币直径的真实值
x = 50;
% 过程方差,反应连续两个次直径方差。更改查看效果
Q = 4e-4;
% 测量方差,反应尺子的测量精度。更改查看效果
R = 3;
% z是尺子的测量结果,在真实值的基础上加上了方差为3的高斯噪声。
z = x + sqrt(R)*randn(sz);
%% 对数组进行初始化
% 对直径的后验估计。即在k次,结合尺子当前测量值与k-1次先验估计,得到的最终估计值
xhat = zeros(sz); 
% 后验估计的方差
P = zeros(sz); 
% 直径的先验估计。即在k-1次,对k时刻直径做出的估计
xhatminus = zeros(sz);
% 先验估计的方差
Pminus = zeros(sz);
% 卡尔曼增益,反应了尺子测量结果与过程模型(即当前时刻与下一次直径相同这一模型)的可信程度
K = zeros(sz); 
% intial guesses
xhat(1) = 40; %直径初始估计值为40mm
P(1) =10; % 误差方差为10
%% kalman 方程
for k = 2:n_iter% 时间更新(预测) % 用上一次的最优估计值来作为对本次的直径的预测xhatminus(k) = xhat(k-1);% 预测的方差为上一次直径最优估计值的方差与过程方差之和Pminus(k) = P(k-1)+Q;% 测量更新(校正)% 计算卡尔曼增益K(k) = Pminus(k)/( Pminus(k)+R );% 结合当前时刻尺子的测量值,对上一次的预测进行校正,得到校正后的最优估计。该估计具有最小均方差xhat(k) = xhatminus(k)+K(k)*(z(k)-xhatminus(k));% 计算最终估计值的方差P(k) = (1-K(k))*Pminus(k);
end
%% 作图
FontSize = 14;
LineWidth = 3; % 线宽
figure();
plot(z,'r-*'); %画出尺子的测量值
hold on;
plot(xhat,'b-','LineWidth',LineWidth) %画出最优估计值
hold on;
plot(x*ones(sz),'g-','LineWidth',LineWidth); %画出真实值
grid on;legend('尺子的测量结果', '后验估计', '真实值');
title('kalman 滤波','fontsize',FontSize);
xl = xlabel('次数');
yl = ylabel('直径(mm)');
set(xl,'fontsize',FontSize);
set(yl,'fontsize',FontSize);
hold off;
set(gca,'FontSize',FontSize);% gca:坐标轴序号figure();
valid_iter = 2:n_iter; % Pminus not valid at step 1
% 画出最优估计值的方差
plot(valid_iter,P(valid_iter),'LineWidth',LineWidth);
grid on;legend('后验估计的误差估计');
title('最优估计值的方差','fontsize',FontSize);
xl = xlabel('次数');
yl = ylabel('次数^2');
set(xl,'fontsize',FontSize);
set(yl,'fontsize',FontSize);
set(gca,'FontSize',FontSize);

五、仿真结果

在这里插入图片描述

在这里插入图片描述

参考文献

MATLAB官方文档
二维图绘制官方文档


http://chatgpt.dhexx.cn/article/7Yg1sTCS.shtml

相关文章

Kalman Filter 遇到 Deep Learning : 卡尔曼滤波和深度学习有关的论文

突然心血来潮,想到卡尔曼滤波器是否能和深度学习结合。于是从谷歌学术上搜了一下,发现现在这方面的工作还没有太多结合。Top 期刊 TNNLS 2021 有一篇最新工作。ICLR 2020 出现一篇 Kalman Filter Is All You Need 的文章,但目前从开源的审稿意…

目标跟踪:卡尔曼滤波(Kalman Filter)到底是怎么工作的?

Kalman filter到底是怎么工作的? 本文主要参考的文章:https://www.bzarg.com/p/how-a-kalman-filter-works-in-pictures/,图片也基本来自上述博客 其实接触KF已经很久了,听过对应的课程,也对着公式进行过推导&#x…

卡尔曼滤波(kalman)

卡尔曼(kalman)滤波原理 kalman滤波器可以看做状态变量在由观测生成的线性空间上的射影。 如下状态空间模型描述的动态系统: (1) ​​​​​​​ ​​​​​​​ (2) 式中,k为离散时间&#xff…

卡尔曼滤波(Kalman filter)及预测

参考文章:https://blog.csdn.net/baidu_38172402/article/details/82289998; https://www.jianshu.com/p/2768642e3abf kalman滤波的作用:1.数据 滤波;2.数据预测 3.数据融合。其基本原理:是通过协方差 来进行加权。 1.什么是…

【Kalman】卡尔曼滤波Matlab简单实现

本节卡尔曼滤波Matlab实现是针对线性系统估计的,仅为简单仿真。 1.离散时间线性动态系统的状态方程 线性系统采用状态方程、观测方程及其初始条件来描述。线性离散时间系统的一般状态方程可描述为 其中,X(k) 是 k 时刻目标的状态向量,V(k)…

学习OpenCV——Kalman滤波

背景: 卡尔曼滤波是一种高效率的递归滤波器(自回归滤波器), 它能够从一系列的不完全及包含噪声的测量中,估计动态系统的状态。卡尔曼滤波的一个典型实例是从一组有限的,包含噪声的,对物体位置的观察序列(可能有偏差&a…

卡尔曼滤波Kalman Filtering:介绍

本文是Quantitative Methods and Analysis: Pairs Trading此书的读书笔记。 控制理论(control theory)是工程学的分支之一,主要应对工程系统控制的问题。比如控制汽车发动机的功率输出,稳定电动机的转速,控制“反应速率”&#x…

kalman 滤波 演示与opencv代码

在机器视觉中追踪时常会用到预测算法,kalman是你一定知道的。它可以用来预测各种状态,比如说位置,速度等。关于它的理论有很多很好的文献可以参考。opencv给出了kalman filter的一个实现,而且有范例,但估计不少人对它的…

Ensemble Kalman filter集合卡尔曼滤波

在气象预测领域,很多时候,模型具有 O ( 10 e 8 ) O(10e8) O(10e8)以上的量级,如果使用传统的卡尔曼滤波,协方差矩阵的更新将是一个~ 10 e 22 10e22 10e22量级的计算操作,因此传统的卡尔曼滤波并不适用。集合卡尔曼滤波…

Kalman滤波MATLAB实现实例——在温度测量中的应用

参考:《卡尔曼滤波原理及应用MATLAB仿真》 原理介绍 假设我们要研究的对象是一个房间的温度。根据经验判断,这个房间的温度大概在25℃左右,可能受空气流通、阳光等因素影响,房间内温度会小幅度地波动。我们以分钟为单位,定时测量房间温度,这里的1分钟,可以理解为采…

图解卡尔曼滤波(Kalman Filter)

背景 关于滤波 首先援引来自知乎大神的解释。 “一位专业课的教授给我们上课的时候,曾谈到:filtering is weighting(滤波即加权)。滤波的作用就是给不同的信号分量不同的权重。最简单的loss pass filter, 就是直接把低…

卡尔曼滤波(Kalman Filter)原理理解和测试

Kalman Filter学原理学习 1. Kalman Filter 历史 Kalman滤波器的历史,最早要追溯到17世纪,Roger Cotes开始研究最小均方问题。但由于缺少实际案例的支撑(那个时候哪来那么多雷达啊啥的这些信号啊),Cotes的研究让人看着显得很模糊,因此在估计理论的发展中影响很小。17世纪…

Kaplan-Meier

Kaplan-Meier 算法 Kaplan-Meier,是一种生存分析的常用方法,用于研究某一个因素对于生存时间的影响。在医学广泛使用,比如新药物是否有效的增加癌症病人的存活时间。 计算方法:假设我们已经计算出了时间t1的生存概率是0.95&#…

Kalman滤波器从原理到实现

转载请注明出处:http://xiahouzuoxin.github.io/notes Kalman滤波器的历史渊源 We are like dwarfs on the shoulders of giants, by whose grace we see farther than they. Our study of the works of the ancients enables us to give fresh life to their finer…

Kalman Filter 通俗讲解

引言 Kalman Filter,很多人刚听到这个名词时,总是会下意识认为这就是个滤波器。我这里想要重点声明的是,Kalman Filter不是滤波,它是一种信息融合的过程。 那么Kalman Filter到底是什么?它在那些方面有着应用&#xf…

卡尔曼(kalman)详解

Kalmanfliter [TOC](Kalmanfliter) kalman详解贝叶斯准则(Bayes rule)全概率定理贝叶斯卡尔曼matlab仿真 kalman详解 贝叶斯准则(Bayes rule) 全概率定理 两个随机变量 X 和 Y 的联合分布(joint distribution)如下: p (x , y) p (X x , Y y)(Xx,Yy同…

kalman简单例子——初始化参数对kalman性能的影响

此篇为第⑤篇,多目标跟踪系列文章: 基础demor入门①②;公式推导③④;深入分析初始化参数的影响⑤; ① Matlab Kalman滤波例子——小球跟踪解析 :matlab官方例子,单目标跟踪。匀速模型和匀加速模型 ②Matlab Kalman Filter based Multiple object Tracking 官方例子 多目…

卡尔曼(kalman)滤波器原理

引言:卡尔曼滤波器适用于线性高斯系统,若为非线性系统,可以使用扩展卡尔曼滤波器。 一、状态估算器 如下图,如果我们需要知道火箭发射时尾部内部的实际温度,这个温度与火箭的燃料输入有关。但是由于里面温度过高&…

Kalman详尽原理介绍合集

目录 前言 1.线性kalman(LKF) 1.1LKF原理简介 1.2 适用场合 2.扩展kalman(EKF) 2.1EKF原理简介 2.2 适用场合 2.3 使用注意事项 3.无迹kalman(UKF) 3.1UKF原理简介 3.2 UT变换 3.3 适用场合 4.粒子滤波PF 4.1 PF原理简介 4.2 适用场合 前…

对Kalman(卡尔曼)滤波器的理解

分类: 计算机视觉 转载过来的,觉得不错,原文 http://blog.csdn.net/lanbing510/article/details/8828109 1.简介(Brief Introduction) 在学习卡尔曼滤波器之前,首先看看为什么叫“卡尔曼”。跟其他著名的理论(例如傅…