扩展卡尔曼滤波器(EKF):一个面向初学者的交互式教程-翻译

合集下载

ardupilot(EKF)扩展卡尔曼滤波

ardupilot(EKF)扩展卡尔曼滤波

ardupilot(EKF)扩展卡尔曼滤波一、初识卡尔曼滤波器为了描述方便我从网上找了一张卡尔曼滤波器的5大公式的图片。

篇幅所限,下图所示的是多维卡尔曼滤波器(因为EKF2是多维扩展卡尔曼滤波器,所以我们从多维说起),为了跟好的理解卡尔曼滤波器可以百度一下,从一维开始。

这5个公式之外还有一个观测模型,根据你实际的观测量来确定,它的主要作用是根据实际情况来求观测矩阵H。

因为卡尔曼滤波器是线性滤波器,状态转移矩阵A和观测矩阵H是确定的。

在维基百科上状态转移矩阵用F表示。

在ardupilot EKF2算法中,状态转移矩阵也是用F表示的。

下面是维基百科给出的线性卡尔曼滤波器的相关公式。

上述更新(后验)估计协方差的公式对任何增益K k都有效,有时称为约瑟夫形式。

为了获得最佳卡尔曼增益,该公式进一步简化为P k|k=(I-K k H k)P k|k-1,它在哪种形式下应用最广泛。

但是,必须记住它仅对最小化残差误差的最佳增益有效。

为了使用卡尔曼滤波器来估计仅给出一系列噪声观测过程的内部状态,必须根据卡尔曼滤波器的框架对过程进行建模,这意味着指定一下矩阵:只要记住一点就行了,卡尔曼滤波器的作用就是输入一些包含噪声的数据,得到一些比较接近真是情况的数据。

比如无人机所使用的陀螺仪和加速度计的读值,他们的读值都是包含噪声的,比如明明真实的角速度是俯仰2°/s,陀螺仪的读值却是2.5°/s。

通过扩展卡尔曼之后的角速度值会变得更加接近2º/s的真实值,有可能是2.1º/s。

二、扩展卡尔曼滤波器因为卡尔曼滤波器针对的是线性系统,状态转移模型(说的白话一点就是知道上一时刻被估计量的值,通过状态转移模型的公式可以推算出当前时刻被估计量的值)和观测模型。

注:有的资料显示状态模型中有,有的没有,目前我也不清楚是为什么,有可能和被估计的对象有关。

但看多了你就会发现不管网上给的公式有怎样的不同,但总体的流程是一样的,都是这5大步骤。

扩展Kalman滤波算法原理及应用

扩展Kalman滤波算法原理及应用

扩展Kalman滤波算法原理及应用随着科技的发展,各种传感器和控制系统的应用越来越广泛,很多智能化的设备需要使用滤波算法,提高其精度和鲁棒性。

在滤波算法中,扩展Kalman滤波(EKF)算法是一种非常常用的算法,可以广泛应用于各种工程领域,如自动控制、机器人导航、图像处理等,本文将介绍EKF算法的原理、特点以及应用。

一、Kalman滤波算法简介Kalman滤波算法是一种常用的状态估计算法,具有优秀的滤波效果。

它是由R.E. Kalman于1960年提出的,主要用于随机信号的滤波和估计。

Kalman滤波是一种基于线性系统和高斯噪声模型的最优估计算法。

它通过对样本点之间的关系建立一个能够描述它们在时间上的演变的状态模型,并根据观测值推算出状态量的概率分布,然后利用这个分布,根据Bayes公式进行矫正,得到最终的估计值。

二、扩展Kalman滤波算法原理扩展Kalman滤波算法是对Kalman滤波算法的一种改进,主要应用于非线性系统的估计。

与Kalman滤波相比,EKF基本思想是通过在预测和更新阶段线性化非线性系统模型来解决非线性系统问题。

EKF的步骤如下:1.定义状态变量向量:通过时间t来定义系统状态x(t),包含系统的全部状态信息。

2.建立状态转移方程:利用状态向量和噪声过程,建立状态转移方程,描述系统在各时间点的演变规律。

3.定义观测变量向量:通过时间t来定义系统的观测值Y(t),包含应用于系统的观测传感器的测量信息。

4.建立系统量测方程:通过状态转移方程和状态向量,以及观测传感器测量值,建立系统量测方程。

5.系统预测:预测状态的无偏估计值和方差。

6.状态更新:利用观测数据校正预测状态的无偏估计值和方差。

以上步骤在线性系统中都是可直接实现的,但非线性系统由于噪声,量测误差和模型误差等原因,使得状态转移方程和系统量测方程无法直接用之前的线性方程来解决。

因此,EKF在预测和更新过程中,均采用泰勒展开式对非线性芯片进行线性化处理,通过对状态转移和系统量测方程进行一阶泰勒展开,将非线性函数在某点的值近似为线性函数的值,从而得到线性化的状态转移方程和系统量测方程。

ekf卡尔曼滤波公式

ekf卡尔曼滤波公式

ekf卡尔曼滤波公式EKF卡尔曼滤波公式随着物联网技术的不断发展,传感器在现代生活中起着越来越重要的作用。

然而,传感器采集的数据往往存在不确定性和噪声,这就需要一种过滤算法来对采集到的数据进行处理。

而卡尔曼滤波(Kalman Filter)则是一种经典的用于处理不确定状态的过滤算法。

基于卡尔曼滤波的一种变体——扩展卡尔曼滤波(Extended Kalman Filter,EKF)广泛应用于估计、控制和机器人领域等方面。

本文将介绍EKF卡尔曼滤波的基本原理和公式。

一、卡尔曼滤波简介在介绍EKF卡尔曼滤波公式之前,我们需要先了解一下卡尔曼滤波的基本原理。

卡尔曼滤波是一种利用先验知识和测量数据来估计未知变量状态的一种算法。

在卡尔曼滤波中,通过对系统的状态和传感器的测量数据进行建模,并估计它们的协方差矩阵,从而实现对未知状态的估计。

卡尔曼滤波最早由美国航空航天局(NASA)科学家R.E. Kalman在1960年提出,后来广泛应用于导弹、飞机等领域的轨迹估计和控制问题。

二、EKF卡尔曼滤波公式EKF卡尔曼滤波是卡尔曼滤波的一种变体,对于非线性系统的状态估计问题具有很好的处理能力。

以下是EKF卡尔曼滤波公式的基本形式:1. 方程1:预测状态(基于上一时刻的状态和控制量)$x_k = f(x_{k-1}, u_k) + {w_k}$其中,$x_{k-1}$表示上一时刻的状态,$u_k$表示控制量,$f$表示状态转移函数,$w_k$表示用来描述模型不确定性和外部干扰的噪声。

2. 方程2:预测协方差(基于上一时刻的协方差和模型误差)$P_k = F_{k-1}P_{k-1}F_{k-1}^T + Q_k$其中,$F_{k-1}$表示状态转移矩阵,$P_{k-1}$表示上一时刻的协方差矩阵,$Q_k$表示用来描述模型误差的噪声矩阵。

3. 方程3:更新状态(基于测量值和预测值的差异)$K_k = P_kH_k^T(H_kP_kH_k^T + R_k)^{-1}$$x_k = x_k + K_k(z_k - h(x_k))$其中,$H_k$表示观测矩阵,$z_k$表示测量值,$h(x_k)$表示通过状态估计测量值的函数,$R_k$表示观测噪声的协方差矩阵。

扩展卡尔曼滤波(EKF)理论讲解与实例(matlab、python和C++代码)

扩展卡尔曼滤波(EKF)理论讲解与实例(matlab、python和C++代码)

扩展卡尔曼滤波(EKF)理论讲解与实例(matlab、python和C++代码)扩展卡尔曼滤波(EKF)理论讲解与实例(matlab、python和C++代码)⽂章⽬录我们上篇提到的 (参见我的另⼀篇⽂章: )是⽤于线性系统,预测(运动)模型和观测模型是在假设⾼斯和线性情况下进⾏的。

简单的卡尔曼滤波必须应⽤在符合⾼斯分布的系统中,但是现实中并不是所有的系统都符合这样 。

另外⾼斯分布在⾮线性系统中的传递结果将不再是⾼斯分布。

那如何解决这个问题呢?扩展卡尔曼滤波就是⼲这个事的。

理论讲解扩展卡尔曼滤波(Extended Kalman Filter,EKF)通过局部线性来解决⾮线性的问题。

将⾮线性的预测⽅程和观测⽅程进⾏求导,以切线代替的⽅式来线性化。

其实就是在均值处进⾏⼀阶泰勒展开。

数学中,泰勒公式是⼀个⽤函数在某点的信息描述其附近取值的公式( ⼀句话描述:就是⽤多项式函数去逼近光滑函数 )。

如果函数⾜够平滑的话,在已知函数在某⼀点的各阶导数值的情况之下,泰勒公式可以⽤这些导数值做系数构建⼀个多项式来近似函数在这⼀点的邻域中的值。

泰勒公式还给出了这个多项式和实际的函数值之间的偏差。

表⽰ 在第 阶导数的表达式,带⼊⼀个值计算后得到的结果(注意,它是个值)是⼀个系数(⼀个值),每⼀项都不同,第⼀项 ,第⼆项 …… 依此类推是⼀个以为⾃变量的表达式 。

是泰勒公式的余项,是 的⾼阶⽆穷⼩KF 和EKF 模型对⽐⾸先,让卡尔曼先和扩展卡尔曼滤波做⼀个对⽐。

在对⽐过程中可以看出,扩展卡尔曼是⼀个简单的⾮线性近似滤波算法,指运动或观测⽅程不是线性的情况,在预测模型部分,扩展卡尔曼的预测模型和量测模型已经是⾮线性了。

为了简化计算,EKF 通过⼀阶泰勒分解线性化运动、观测⽅程。

KF 与EKF 具有相同的算法结构,都是以⾼斯形式描述后验概率密度的,通过计算贝叶斯递推公式得到的。

最⼤的不同之处在于,计算⽅差时,EKF 的状态转移矩阵(上⼀时刻的状态信息)和观测矩阵(⼀步预测)都是状态信息的雅克⽐矩阵( 偏导数组成的矩阵)。

扩展卡尔曼滤波器(EKF):一个面向初学者的交互式教程-翻译

扩展卡尔曼滤波器(EKF):一个面向初学者的交互式教程-翻译

扩展卡尔曼滤波器教程在使用OpenPilot和Pixhawk飞控时,经常遇到扩展卡尔曼滤波(EKF)。

从不同的网页和参考论文中搜索这个词,其中大部分都太深奥了。

所以我决定创建自己学习教程。

本教程从一些简单的例子和标准(线性)卡尔曼滤波器,通过对实际例子来理解卡尔曼滤波器。

Part 1: 一个简单的例子想象一个飞机准备降落时,尽管我们可能会担心许多事情,像空速、燃料、等等,当然最明显是关注飞机的高度(海拔高度)。

通过简单的近似,我们可以认为当前高度是之前的高度失去了一小部分。

例如,当每次我们观察飞行高度时,认为飞机失去了2%的高度,那么它的当前高度是上一时刻高度的98%:altitude current_time=0.98*altitude previous_time工程上对上面的公式,使用“递归”这个术语进行描述。

通过递归前一时刻的值,不断计算当前值。

最终我们递归到初始的“基本情况”,比如一个已知的高度。

试着移动上面的滑块,看看飞机针对不同百分比的高度变化。

Part 2:处理噪声当然, 实际从传感器比如GPS或气压计获得测量高度时,传感器的数据或多或少有所偏差。

如果传感器的偏移量为常数,我们可以简单地添加或减去这偏移量来确定我们的高度。

不过通常情况下,传感器的偏移量是一个时变量,使得我们所观测到的传感器数据相当于实际高度加上噪声:observed_altitude current_time=altitude current_time+noise current_time试着移动上面的滑块看到噪声对观察到的高度的影响。

噪音被表示为可观测的海拔范围的百分比。

Part 3:全部考虑所以现在我们有两个方程描述我们的飞机的状态:altitude current_time = 0.98 * altitude previous_timeobserved_altitude current_time = altitude current_time + noise current_time这些方程是很容易理解,但他们不够通用处理一般系统,除了我们上面所举的例子。

c语言 扩展卡尔曼滤波 -回复

c语言 扩展卡尔曼滤波 -回复

c语言扩展卡尔曼滤波-回复C语言中的扩展卡尔曼滤波算法(Extended Kalman Filter, EKF)是一种常用的状态估计算法,其在机器学习、机器人和信号处理等领域具有广泛的应用。

本文将介绍什么是卡尔曼滤波,为什么需要扩展卡尔曼滤波,以及如何使用C语言实现扩展卡尔曼滤波算法。

一、什么是卡尔曼滤波?卡尔曼滤波是一种用于根据一系列观测值来估计系统状态的算法。

它基于状态空间模型,通过对系统的动态方程和测量方程建模,实现对系统状态的递归估计。

卡尔曼滤波是一种最优估计算法,具有高效、精确和稳定的特点,尤其适用于线性系统。

卡尔曼滤波算法通过将当前的测量值与上一时刻的状态估计进行融合,得到对当前状态的最优估计。

具体来说,卡尔曼滤波算法包括两个主要步骤:预测和更新。

在预测阶段,通过动态方程预测当前时刻的状态;在更新阶段,通过测量方程和当前的测量值对状态进行修正。

通过不断地迭代预测和更新过程,卡尔曼滤波算法可以逐渐逼近真实系统状态。

二、为什么需要扩展卡尔曼滤波?尽管卡尔曼滤波在线性系统中具有优秀的性能,但在非线性系统中表现不佳。

原因在于卡尔曼滤波算法假设系统的动态方程和测量方程都是线性的,而实际系统中存在许多非线性因素。

因此,为了处理非线性系统,需要引入扩展卡尔曼滤波。

扩展卡尔曼滤波通过在卡尔曼滤波中引入线性化技术,对非线性系统进行逼近,从而实现对状态的估计。

具体来说,在扩展卡尔曼滤波中,通过对非线性系统进行泰勒展开,将其近似为线性系统,并使用卡尔曼滤波算法对近似线性系统进行状态估计。

扩展卡尔曼滤波算法在非线性系统中具有很好的适应性和表现,因此被广泛应用于实际工程中。

三、如何使用C语言实现扩展卡尔曼滤波算法?在C语言中实现扩展卡尔曼滤波算法需要以下几个步骤:1. 定义状态向量和观测向量:首先,根据具体问题,定义系统的状态向量和观测向量。

比如,如果要估计车辆的位置和速度,可以将状态向量定义为[位置, 速度],观测向量定义为[位置]。

扩展卡尔曼滤波器原理

扩展卡尔曼滤波器原理

扩展卡尔曼滤波器原理一、引言扩展卡尔曼滤波器(Extended Kalman Filter,EKF)是一种常用的非线性滤波器,其原理是对非线性系统进行线性化处理,从而利用卡尔曼滤波器的优势进行状态估计和滤波。

本文将介绍扩展卡尔曼滤波器的原理及其应用。

二、卡尔曼滤波器简介卡尔曼滤波器是一种基于最优估计理论的滤波算法,广泛应用于估计系统状态。

卡尔曼滤波器通过对系统状态和观测数据进行加权平均,得到对系统状态的估计值。

其基本原理是通过系统的动力学方程和观测方程,利用贝叶斯概率理论计算系统状态的后验概率分布。

三、非线性系统的滤波问题在实际应用中,许多系统都是非线性的,而卡尔曼滤波器是基于线性系统模型的。

因此,当系统模型非线性时,传统的卡尔曼滤波器无法直接应用。

扩展卡尔曼滤波器就是为了解决这个问题而提出的。

四、扩展卡尔曼滤波器原理扩展卡尔曼滤波器通过对非线性系统进行线性化处理,将非线性系统转化为线性系统,然后利用卡尔曼滤波器进行状态估计。

其基本思想是通过一阶泰勒展开将非线性系统进行线性逼近。

具体步骤如下:1. 系统模型线性化:将非线性系统的动力学方程和观测方程在当前状态下进行一阶泰勒展开,得到线性化的系统模型。

2. 预测步骤:利用线性化的系统模型进行状态预测,得到预测的状态和协方差矩阵。

3. 更新步骤:利用观测方程得到的测量值与预测的状态进行比较,计算卡尔曼增益。

然后利用卡尔曼增益对预测的状态和协方差矩阵进行更新,得到最终的状态估计和协方差矩阵。

五、扩展卡尔曼滤波器的应用扩展卡尔曼滤波器广泛应用于各个领域,包括机器人导航、目标跟踪、航天器姿态估计等。

以机器人导航为例,机器人在未知环境中通过传感器获取的信息是非线性的,而机器人的运动模型也是非线性的。

因此,利用扩展卡尔曼滤波器可以对机器人的位置和姿态进行估计,从而实现导航功能。

六、总结扩展卡尔曼滤波器是一种处理非线性系统的滤波算法,通过对非线性系统进行线性化处理,利用卡尔曼滤波器进行状态估计和滤波。

deepsort 拓展卡尔曼滤波

deepsort 拓展卡尔曼滤波

deepsort 拓展卡尔曼滤波拓展卡尔曼滤波(Extended Kalman Filter, EKF)是一种常见的目标跟踪算法,而DeepSORT则是在EKF基础上进行的拓展,用于更加准确地实现目标跟踪。

下面将从EKF的基本原理开始,介绍DeepSORT 算法的原理以及其在目标跟踪领域的应用。

1.卡尔曼滤波(Kalman Filter)的基本原理卡尔曼滤波是一种递归滤波算法,用于估计在不完整和有噪声的测量数据下的状态变量。

简而言之,卡尔曼滤波算法通过结合先验信息和观测结果来实现对目标状态的最优估计。

卡尔曼滤波算法包括两个主要步骤:预测(Predict)和更新(Update)。

预测步骤中,根据上一时刻的状态估计和系统模型,通过状态转移方程得到当前时刻的状态预测。

预测的结果包括状态估计和状态协方差矩阵。

更新步骤中,利用预测的状态估计和观测模型,将测量结果与预测结果进行比对,得到当前时刻的最优状态估计。

更新的结果也包括状态估计和状态协方差矩阵。

通过不断迭代预测和更新步骤,卡尔曼滤波算法可以实现对目标状态的最优估计。

2. DeepSORT的原理DeepSORT是一种将深度学习与卡尔曼滤波相结合的目标跟踪算法,旨在提升目标跟踪的准确性与鲁棒性。

DeepSORT的核心思想是利用深度学习网络(如卷积神经网络)来提取目标特征,然后将这些特征作为观测值输入到卡尔曼滤波器中进行状态估计。

DeepSORT算法的主要步骤如下:(1)特征提取:利用预训练的深度学习网络,如ResNet、VGG等,对目标进行特征提取。

通过将目标图像输入到网络中,可以得到代表目标特征的向量。

(2)目标匹配:根据特征向量计算目标之间的相似度,并利用匈牙利算法或最小权重匹配算法来建立观测与目标的对应关系。

(3)卡尔曼滤波:对每个目标的运动进行预测,并将预测的结果作为观测值输入到卡尔曼滤波器中进行状态估计。

利用卡尔曼滤波器的预测步骤和更新步骤,可以得到每个目标的最优状态估计。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

扩展卡尔曼滤波器教程在使用OpenPilot和Pixhawk飞控时,经常遇到扩展卡尔曼滤波(EKF)。

从不同的网页和参考论文中搜索这个词,其中大部分都太深奥了。

所以我决定创建自己学习教程。

本教程从一些简单的例子和标准(线性)卡尔曼滤波器,通过对实际例子来理解卡尔曼滤波器。

Part 1: 一个简单的例子想象一个飞机准备降落时,尽管我们可能会担心许多事情,像空速、燃料、等等,当然最明显是关注飞机的高度(海拔高度)。

通过简单的近似,我们可以认为当前高度是之前的高度失去了一小部分。

例如,当每次我们观察飞行高度时,认为飞机失去了2%的高度,那么它的当前高度是上一时刻高度的98%:altitude current_time=0.98*altitude previous_time工程上对上面的公式,使用“递归”这个术语进行描述。

通过递归前一时刻的值,不断计算当前值。

最终我们递归到初始的“基本情况”,比如一个已知的高度。

试着移动上面的滑块,看看飞机针对不同百分比的高度变化。

Part 2:处理噪声当然, 实际从传感器比如GPS或气压计获得测量高度时,传感器的数据或多或少有所偏差。

如果传感器的偏移量为常数,我们可以简单地添加或减去这偏移量来确定我们的高度。

不过通常情况下,传感器的偏移量是一个时变量,使得我们所观测到的传感器数据相当于实际高度加上噪声:observed_altitude current_time=altitude current_time+noise current_time试着移动上面的滑块看到噪声对观察到的高度的影响。

噪音被表示为可观测的海拔范围的百分比。

Part 3:全部考虑所以现在我们有两个方程描述我们的飞机的状态:altitude current_time = 0.98 * altitude previous_timeobserved_altitude current_time = altitude current_time + noise current_time这些方程是很容易理解,但他们不够通用处理一般系统,除了我们上面所举的例子。

更一般的方程,工程上采用熟悉的像x、y和z为变量,a和b为常量,下标k代表时间。

所以我们的方程变成:x是我们系统的当前状态,xk−1是其先前的状态,a是一常数(在我们的示例中是0.98),zk 是我们当前的观测变量,vk是当前的测量噪声。

卡尔曼滤波如此受欢迎的原因之一是,通过给定的观测量zk,常量a以及整体的测量噪声vk,它可以让我们得到一个对当前状态的准确的估计值xk。

我们还应该考虑到,飞机实际的高度变化可能没有描述的那么光滑。

飞机通常在下降过程中是会经历一定的动荡的。

这种动荡是通过定义的噪声来描述,可视为另一个噪声信号:altitude current_time = 0.98 * altitude previous_time +turbulence current_time一般表述为Wk表示过程噪声,比如飞机下降过程的动荡,这是一个固有模型的一部分,而不是观测量或测量值。

为了方便其他问题的讨论,我们将忽略过程噪声一段时间,但我们将在传感器融合一节继续讨论它。

Part 4:状态估计这里再次(忽略过程噪声)列出我们的两个方程,来描述我们正在观察的系统状态:因为我们的目标是从观测量z获得状态量x,我们可以重写第二个方程为:当然,问题是我们不知道当前的噪声vk,理论上它是不可预测的。

幸运的是,卡尔曼滤波器能够使我们通过考虑当前的观测值和先前的估计值来估计当前的状态值。

工程上在变量上面使用“^”帽子符号表示估计值。

所以表示当前状态的估计值。

然后我们可以用先前的估计值和当前观测值的权重来表示当前的估计值。

这里的g表示权重值的增益。

这个方程用红色突出显示,是因为这就是我们直接使用的卡尔曼滤波器。

现在,这一切看起来相当复杂,想象一下如果gk的取极值会如何?当gk = 0时,我们得到:也就是说增益为0时,观测值对状态估计没有影响,当前状态级先前的状态估计值。

当gk=1时,我们得到:也就是说,当增益为1时,前面的状态估计值并不重要,我们所获取的当前状态估计完全跟当前的观测值有关。

当然,实际的增益值可能介于这两种极端情况之间。

试着移动下面的滑块,看到增益对获得当前状态估计的影响:Part 5:计算增益所以现在我们有一个公式,可以根据先前的估计值,当前的观测量,当前的增益来计算当前状态估计。

那么,我们如何计算增益呢?答案是:间接地从噪声获得。

回想下,每一个观测值都与一个特定的噪声值有关:我们不知道每一个观测量的单独的噪声值,但我们通常能知道噪声的平均值。

比如:一个传感器所发布的精度能告诉我们大概的输出的噪声值。

称这个变量为r,r没有下标值,因为r不随时间而变化,与传感器的性能有关。

我们可以根据r计算当前增益gk:这里的pk是一个用于递归计算的预测误差:让我们思考之前这两个公式是什么意思。

假设我们之前预测的误差是零。

然后我们获得当前的增益为,这样下一个状态估计与当前的状态估计没有不同。

这是有道理的,因为当预测值准确的时候,我们不应该调整状态估计。

在另一个极端,如果预测误差是1。

然后将获得。

如果r是零,或者传感器的噪声很小,那我们的增益为1。

新的状态估计与观测值有很大关系。

但随着r增大,增益越来越小,换句话说,当传感器的噪声太大,则忽略一个糟糕的预测值。

第三个公式,递归地从它的前一个值pk−1和当前增益gk计算预测误差pk?当,我们得到。

所以,对于状态估计,0增益表示没有更新的预测误差。

当,我们得到。

因此,增益的最大值也就是没有预测误差,当前的观测值直接用于更新当前状态。

Part 6:预测与更新我们现在基本可以运行卡尔曼滤波器,并看到一些结果。

首先,你可能会思考常量a在我们的原始方程中有什么作用:似乎在我们的状态估计方程中消失了:答案是,我们需要这两个方程一起来估计状态。

事实上,这两个方程基于不同类型的信息,表示状态的估计。

我们的原始方程表示预测状态应该是什么,第二个方程表示基于观测值的更新预测。

所以我们重写原始方程:最后,我们使用常数a表示预测误差:这两个红色公式表示我们的卡尔曼滤波器的预测阶段。

周期预测/更新的思路是,预测/更新,……重复等尽可能多的时间步长。

Part 7:运行滤波器为了滤波器的运行,我们需要:一个观测值序列状态估计的初始值(基本情况)。

这可以是我们的第一个观测值。

预测误差的初始值。

它不能是0,否则pk将永远与0相乘。

所以我们随意将其设置为1。

对于我们的观测量,我们将伪造观测量,而不是试图测量一个实际系统(如飞机准备降落时),在观测量基础上添加随机噪声vk的范围在(-200 + -200),理想值,初始状态:一旦你准备好运行滤波器,点击运行按钮,看看卡尔曼滤波器产生光滑的曲线(绿色),带噪声信号(红色),以及非常接近于原始干净的信号(蓝色)。

也可以尝试不同的值。

Part 8:一个更真实的模型回忆描述系统的这两个方程:xk是我们系统的当前状态,xk−1是它之前的状态,a是一个常数,zk是我们当前的观测值,vk是当前的观测噪声(不准确)。

虽然这两个方程很好地应用于各种各样的系统,但有时不能完全的表达系统特征。

首先,我们没有实时的控制飞行器,例如飞行员控制飞机那样,控制飞行器前后飞行。

为了控制该系统,我们引入一个变量uk,代表了当前的控制信号,跟飞行员给飞机发的指令一样。

正如前面的状态xk−1扩展了一个比例系数a,这种控制信号也可以由一个常量表示,称之为b。

所以我们完整的状态方程为:一般来说,任何信号以外的噪声可以用常系数来表示,所以我们观察zk的方程可以改写:Part 9:修改估计值这里我们获得更真实的/更一般的方程的状态和观测变量系统:正如我们所料,引入这些新组件到我们的模型,需要相应修改预测和更新方程:这里有一个扩展我们的飞机演示,添加控制信号表示飞行员稳步提高控制序列提高飞机的高度。

试着移动滑块来调整常量的值不同。

在前面的演示,原始信号显示蓝色,观测信号用红色,绿色Kalman-filtered信号。

Part 10:添加速度量到系统回忆我们的飞机的原始高度方程:一般形式表达成:想想以前学的数学和物理,这种公式似乎有点奇怪。

高度,毕竟是一种距离(海拔或高出地面),我们学会了公式我们可以协调这两种不同的方式思考距离?答案是肯定的,但它需要我们采取两个步骤。

首先,我们需要将当前时间和以前时间的概念引入到我们上面的公式,并思考在离散时间的步骤,而不是总体距离:换句话说,我们现在是之前的公式加上离散时刻的距离。

如果我们执行此计算,以固定的采样周期(一秒,100纳秒,六个月,等等),然后我们可以简化成:这个方程我们接近我们的一般形式但是我们仍然似乎有两种截然不同的表达方式:一个是简单的形式,另一个包括简单的和形式。

第二步,采样线性代数提出一个一般方程。

Part 11:线性代数所以我们有一个方程表示距离的速度和时间:我们试着用更一般的形式来表达。

幸运的是,数学家们很久以前就发明了“一个怪异的技巧”,以同样的方式表示这两种方程。

诀窍就是把系统的状态不是一个数字表达,而是一个数字列表称为向量,就像在Excel电子表格的一列。

向量的大小(元素)的数量对应于我们想设置的状态量的数量。

在我们这个例子中,用两个状态量,距离和速度:在这里当前状态被定义为一个向量包含当前距离和流速。

所以这是如何帮助我们?好吧,我们从线性代数学到的另一件事是矩阵。

如果一个向量就像一列的值在一个电子表格,那一个矩阵就像整个表格。

当我们用一个矩阵乘以一个向量得到相同的另一个向量大小:例如:向量和矩阵可以是任何大小,只要他们匹配:我们也可以将两个矩阵相乘得到另一个矩阵:两个矩阵相加简单,只是每一对元素相加:回到手头的任务中,我们定义了一个矩阵使用一个大写字母来表示一个矩阵。

然后我们的一般方程几乎是相同的:工作原理:换句话说,当前距离是前一刻的距离加上前一刻的速度乘以采样周期,当前速度与前一刻的速度相同。

如果我们想要模型表达系统随着时间的推移的速度变化,我们可以很容易地修改向量和矩阵包括加速度:Part 12:重新审视预测和更新这里是我们修改系统状态的公式:x是一个向量,A是一个矩阵。

您可能还记得,这个方程的原始形式uk是一个控制信号,b是系数。

观测方程:Zk是测量(观察、传感器)信号,和vk是一些噪音,造成传感器信号的不准确。

那么,我们如何修改这些原始形式与我们的新向量矩阵的方法?您可能会怀疑,线性代数这很简单:我们写大写字母系数b和c,使它们矩阵而不是标量值:那么所有的变量(状态、观察、噪声、控制)被认为是向量,我们有一组矩阵向量乘法。

那么我们的预测和更新方程呢?回想一下,它们是:我们想利用所有的常量a,b,c和r,使他们成为矩阵A、B、C和R就万事大吉了。

相关文档
最新文档