卡尔曼滤波_3(EKF)

2024-05-15 21:32
文章标签 卡尔曼滤波 ekf

本文主要是介绍卡尔曼滤波_3(EKF),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!


wiki原文

EKF

在估计理论中,EKF是KF的非线性版本,对当前估计的均值和协方差进行线性化。如果状态转移模型很准确的话,EKF会是非线性状态估计理论、导航系统、GPS中最好的方法。

历史

创造卡尔曼滤波器的论文发表于上世纪60年代。卡尔曼滤波器对于线性系统模型,在状态转移系统和测量系统中加上独立白噪声下,都是最有估计器。然而,实际应用问题中,大部分都是非线性系统,需要对卡尔曼滤波器进行一些改进。这方面大部分工作由NASA Ames童鞋完成。EKF采用的方法来源于微积分中的泰勒展开式,对模型进行线性化。如果系统模型不太清楚或者不够精确(下面会描述这种情况),蒙特卡洛方法,特别是粒子滤波的方法,就派上用场。蒙特卡洛方法在EKF之前就出现了,但是蒙特卡洛方法计算比EKF慢。

计算公式

在EKF中,状态转移模型和观测模型(就是KF中的俩矩阵)不必是状态变量的线性函数,而可以是可微分函数。

分别是过程噪声和测量噪声,假定是0均值的高斯分布,协方差分别是是控制输入向量。

函数用来从上一次估计的状态计算预测的状态,同样的,函数从预测的状态计算测量量。但是,无法直接计算协方差,而是需要计算偏导矩阵(雅可比矩阵)。

每一步计算时,需要从当前的估计值中计算雅可比矩阵。这些矩阵才可以用于卡尔曼滤波器方程。这个步骤就是在对非线性系统进行线性化。

离散时间域下的预测和更新方程

预测

状态预测方程

协方差预测方程

更新

Innovation or measurement residual
Innovation (or residual) covariance
卡尔曼增益
状态预测更新
协方差预测更新

状态转移矩阵和观测矩阵如下:

高阶EKF

上述是一阶EKF。更高阶的EKF可以通过保留更多项泰勒展开来实现。例如,二阶和三阶EKF。不过,只有当测量误差很小时,更高阶的EKF才会表现更好。

非加性噪声下的公式和方程

EKF下的典型形式假设过程噪声和测量噪声都是加性的。这个假设,在EKF的实现下,不是必须的。可以考虑下面更加一般的情况:

分别是过程噪声和测量噪声,假定是0均值的高斯分布,协方差分别是。这样一来,预测的协方差以及相应的方程就变成如下形式:

其中,都是雅可比矩阵:

The predicted state estimate and measurement residual are evaluated at the mean of the process and measurement noise terms, which is assumed to be zero. Otherwise, the non-additive noise formulation is implemented in the same manner as the additive noise EKF.

连续时间下的EKF

EKF的缺陷

Robust EKF

UKF

比EKF性能更好的非线性卡尔曼滤波器是UKF。在UKF中,通过采样点来估计潜在高斯分布的概率密度函数。这些采样点为了能对后验概率进行估计,需要进行变换。这个变换叫做U变换。UKF在误差估计方面,比EKF还要鲁棒和精确。

Invariant UKF

附注:本文为转载文章
出处:http://blog.csdn.net/duinodu/article/details/52143231

这篇关于卡尔曼滤波_3(EKF)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/992973

相关文章

风速预测 | 基于MATLAB的无迹卡尔曼滤波算法UKF、SVR-UKF、ANN-Kalman等时间序列风速预测模型

基本描述 基于MATLAB的无迹卡尔曼滤波算法UKF、SVR-UKF、ANN-Kalman等时间序列风速预测模型 模型步骤 时间序列风速预测模型基于MATLAB的无迹卡尔曼滤波算法(Unscented Kalman Filter, UKF)、SVR-UKF(Support Vector Regression - Unscented Kalman Filter)和ANN-Kalman(Arti

【数学和算法】扩展卡尔曼滤波器(六)

本文是观看B站视频【卡尔曼滤波器】6_扩展卡尔曼滤波器_Extended Kalman Filter所做的截图和笔记。 前面讲的都是线性系统,他们可以用卡尔曼滤波器进行预测。 对于非线性系统,可以将非线性系统线性化,就需要用到扩展卡尔曼滤波器。 线性化:泰勒级数 视频 对于泰勒公式的讲解,请跳转参考这篇博客:泰勒公式_线性化。 对于一维度的非线性系统进行线性化,就是泰勒一阶展开,对于高维度

【数学和算法】初识卡尔曼滤波器(四)

本文是观看B站视频教程【卡尔曼滤波器】4_误差协方差矩阵数学推导_卡尔曼滤波器的五个公式 所做的截图和笔记。 先列出前面几篇博客得到的公式: 下面是利用上图公式推导 P k − \displaystyle\color{blue}P_k^- Pk−​的过程: 先写出接下来的计算会用到的东西: 上一次的真实值减去上一次的估计值: 由于 W k − 1 \displaystyle\color{

【数学和算法】初识卡尔曼滤波器(三)

本文是观看B站视频教程所做的截图和笔记。 疑问: 1.观测矩阵H是单位矩阵吗?如果是的话,那么卡尔曼增益的两种写法都合理。那么他的作用是对 X k X_k Xk​向量进行变换为 Z k Z_k Zk​向量的各个维度对应吗? 答:观测矩阵H可以是单位矩阵,但是也可以不是单位矩阵。他把状态量变换成和观测量对应的特征值。2.卡尔曼增益 K k K_k Kk​是矩阵还是实数? 答:卡尔曼增益 K k

卡尔曼滤波源码注释和调用示例

卡尔曼滤波源码注释和调用示例 flyfish Python版本代码地址 C++版代码地址 主要用于分析代码,增加了中文注释 import numpy as npimport scipy.linalg"""0.95分位数的卡方分布表,N自由度(包含N=1到9的值)。取自MATLAB/Octave的chi2inv函数,用作Mahalanobis门限。"""chi2inv95 = {1

从最小二乘法的角度来理解卡尔曼滤波(1)

从最小二乘法的角度来理解卡尔曼滤波(1) flyfish 假设你有一堆数据点,比如在一个二维平面上有很多点。你想找到一条直线,能够尽可能接近这些点。这条直线可以用一个方程来表示:y = mx + b,其中 m 是斜率,b 是截距。 但是这些数据点通常不会完美地在这条直线上,而是散布在它的周围。每个点与这条直线之间的距离称为误差(残差)。为了找到最佳的直线,我们希望所有这些误差的平方和最小。为

基于EKF的姿态解算

首先一个最为基本的公式(我去,怎么编写公式啊?):; 其中;。 由此,我们可以得出状态方程:step1: ,。 计算协方差矩阵 step2: ; Q 为过程噪声。

【数据融合】基于卡尔曼滤波实现GPS-IMU数据融合附matlab代码

下面是一个简单的示例代码,用于基于卡尔曼滤波实现GPS-IMU数据融合的MATLAB实现: matlab % 初始化卡尔曼滤波器参数 dt = 0.1; % 时间步长 A = [1 dt; 0 1]; % 状态转移矩阵 B = [0.5*dt^2; dt]; % 输入控制矩阵 H = [1 0]; % 观测矩阵 Q = eye(2); % 状态噪声协方差矩阵 R_gps = 0.1; % GP

DeepSORT(目标跟踪算法)卡尔曼滤波中的贝叶斯定理

DeepSORT(目标跟踪算法)卡尔曼滤波中的贝叶斯定理 flyfish 从例子中介绍名词 假设我们有一个袋子,里面有5个红球和3个蓝球。我们从袋子里随机抽取一个球。 概率 (Probability) 我们想计算从袋子里抽到红球的概率 P ( R ) P(R) P(R)。 红球的数量是5,球的总数量是8,所以抽到红球的概率是: P ( R ) = 5 8 P(R) = \frac{

DeepSORT(目标跟踪算法) 卡尔曼滤波的完整流程

DeepSORT(目标跟踪算法) 卡尔曼滤波的完整流程 flyfish DeepSORT(目标跟踪算法)中的状态向量与状态转移矩阵 DeepSORT(目标跟踪算法)中卡尔曼滤波器中的更新 DeepSORT(目标跟踪算法)中卡尔曼增益的理解 DeepSORT(目标跟踪算法)中的卡尔曼滤波 - 看了就会的状态转移矩阵 DeepSORT(目标跟踪算法)中的初始化卡尔曼滤波器的状态向量和协方差