MATLAB - 估计滤波器(Estimation Filters)

news2025/1/18 6:46:47

系列文章目录


前言

        本篇文章翻译自官网,部分下标有问题,请自行分辨。


一、背景介绍

1.1 估算系统

        对于许多自主系统(autonomous systems)来说,了解系统状态(system state)是设计任何应用的先决条件。但在现实中,系统状态往往无法直接获取(not directly obtainable)。系统状态通常是根据某些仪器(如传感器(sensors))测得的系统输出以及动力学或运动模型(a dynamic or motion model)控制的状态流推断或估计出来的。一些简单的技术,如最小二乘估计(least square estimation)或批量估计,足以解决静态或离线估计问题(static or offline estimation problems)。对于在线和实时(连续)估算(online and real time (sequential) estimation)问题,通常需要使用更复杂的估算滤波器。

        估计系统由描述状态流的动态或运动模型和描述如何获得测量值的测量模型组成。在数学上,这两个模型可以用运动方程和测量方程来表示。例如,一般非线性离散估计系统的运动方程和测量方程可以写成:

$\begin{array}{c}{​{x_{k+1}=f(x_{k})}}\\ {​{y_{k}=h(x_{k})}}\end{array}$

        其中,k 为时间步长,xk 为时间步长 k 时的系统状态,f(xk) 为与状态相关的运动方程,h(xk) 为与状态相关的测量方程,yk 为输出。

1.2 噪声分布

        在大多数情况下,建立一个完美的模型来捕捉所有动态现象是不可能的。例如,在自动驾驶汽车的运动模型中包含所有摩擦是不可能的。为了弥补这些未建模的动态现象(unmodeled dynamics),通常会在动态模型中加入过程噪声(process noise) (w)。此外,在进行测量时,测量结果中不可避免地会包含校准误差(calibration errors)等多种误差源。为了考虑这些误差,必须在测量模型中加入适当的测量噪声。包含这些随机噪声和误差(random noises and errors)的估算系统称为随机估算系统(stochastic estimation system),可以用以下方式表示:

$\begin{array}{c}{​{x_{k+1}=f(x_{k},w_{k})}}\\ {​{y_{k}=h(x_{k},v_{k})}}\end{array}$

        其中,wk 和 vk 分别代表过程噪声和测量噪声。

        在大多数工程应用中,过程噪声和测量噪声被假定遵循零均值高斯分布(zero-mean Gaussian)或正态分布(normal distributions),或至少近似于高斯分布。此外,由于确切状态未知,状态估计值是一个随机变量(random variable),通常假定遵循高斯分布。假设这些变量的分布为高斯分布,可以大大简化估计滤波器的设计,并构成卡尔曼滤波器(Kalman filter)系列的基础。

        随机变量 (x) 的高斯分布由均值 μ 和协方差矩阵(covariance matrix) P 参数化,可写成 x∼N(μ,P)。给定一个高斯分布,平均值也就是 x 的最可能值,由期望 (E) 定义为:

$\mu=E[x]$

        平均值也称为 x 关于原点(the origin)的第一矩(first moment)。描述 x 不确定性的协方差用期望 (E) 来定义,即

$P=E[(x-\mu)(x-\mu)^{T}]$

        协方差(The covariance)也称为 x 关于其均值(mean)的第二矩(second moment)。

        如果 x 的维数为一,则 P 只是一个标量。在这种情况下,P 的值通常用 σ2 表示,称为方差(variance)。平方根 σ 称为 x 的标准差(standard deviation)。标准差具有重要的物理意义。例如,下图显示了均值等于 μ、标准差等于 σ 的一维高斯分布的概率密度函数(probability density function)(描述了 x 取某个值的可能性)。约 68% 的数据位于 x 的 1σ 边界内,95% 的数据位于 2σ 边界内,99.7% 的数据位于 3σ 边界内。

        尽管高斯分布假设是工程应用中的主要假设,但也存在无法用高斯分布近似其状态的系统。在这种情况下,需要使用非卡尔曼滤波器(如粒子滤波器(particle filter))来准确估计系统状态。 

二、滤波器设计

        设计滤波器的目的是利用测量结果和系统动态来估计系统状态。由于测量通常是按离散的时间步长进行的,因此滤波过程通常分为两个步骤:

  1. 预测(Prediction): 使用动态模型在离散测量时间步(k = 1、2、3......,N)之间传播状态和协方差(Propagate state and covariance)。这一步也称为流程更新(flow update)。
  2. 校正(Correction): 利用测量结果修正离散时间步的状态估计值和协方差。这一步也称为测量更新(measurement update)。

        在表示不同步骤的状态估计和协方差状态时,xk|k 和 Pk|k 表示时间步骤 k 修正后的状态估计和协方差,而 xk+1|k 和 Pk+1|k 表示从上一个时间步骤 k 到当前时间步骤 k+1 预测的状态估计和协方差。

2.1 预测


        在预测步骤中,状态传播非常简单。滤波器只需将状态估计值代入动态模型,并按 xk+1|k = f(xk|k) 的方式向前传播。

        协方差传播则更为复杂。如果估计系统是线性的,那么协方差就可以根据系统特性在标准方程中精确传播 (Pk|k→Pk+1|k)。对于非线性系统,精确的协方差传播具有挑战性。不同滤波器的主要区别在于它们如何传播系统协方差。例如

  • 线性卡尔曼滤波器使用线性方程精确传播协方差。
  • 扩展卡尔曼滤波器基于线性近似来传播协方差,当系统高度非线性时,会产生较大误差。
  • 无迹卡尔曼滤波器使用无迹变换对协方差分布进行采样,并在时间上传播。

        如何传播状态和协方差也会极大地影响滤波器的计算复杂度。举个例子:

  • 线性卡尔曼滤波器使用线性方程精确传播协方差,通常计算效率较高。
  • 扩展卡尔曼滤波器使用线性近似,需要计算雅各布矩阵,需要更多计算资源。
  • 无特征卡尔曼滤波器需要对协方差分布进行采样,因此需要传播多个采样点,这对高维系统来说成本很高。

2.2 修正


        在修正步骤中,滤波器通过测量反馈来修正状态估计值。基本上,真实测量值与预测测量值之间的差值在乘以反馈增益矩阵后,会被添加到状态估计值中。例如,在扩展卡尔曼滤波器中,状态估计值的修正公式为

$x_{k+1|k+1} =x_{k+1|k} +K _k(y _{k+1}-h(x_{k+1|k}))$

        如前所述,xk+1|k 是(先验)修正前的状态估计值,xk+1|k+1 是(后验)修正后的状态估计值。Kk 是卡尔曼增益,受最优准则制约,yk 是真实测量值,h(xk+1|k) 是预测测量值。

        在修正步骤中,滤波器还要修正估计误差协方差。其基本思想是利用 yk+1 的分布信息修正 x 的概率分布。在滤波器中,预测和修正步骤是递归处理的。流程图显示了卡尔曼滤波器的一般算法。

 

三、传感器融合与跟踪工具箱中的估计滤波器(Estimation Filters in Sensor Fusion and Tracking Toolbox)

        传感器融合与跟踪工具箱™ 提供多种估计滤波器,可用于估计和跟踪动态系统的状态。

3.1 卡尔曼滤波器


        经典卡尔曼滤波器(trackingKF)是具有高斯过程和测量噪声的线性系统的最佳滤波器。线性估计系统可表示为

$\begin{array}{c}{​{x_{k+1}=A_{k}x_{k}+w_ k}}\\ {​{y_{k}=H_{k}x_{k}+v_{k}}}\end{array}$

        假设过程噪声和测量噪声都是高斯噪声,即

$\begin{array}{c}{​{w _k\sim N(0,Q_{k})}}\\ {​{v_{k}\sim N(0,R_{k})}}\end{array}$

        因此,协方差矩阵可以通过线性代数方程在测量步骤之间直接传播,即

$P_{k+1|k}=A_{k}P_{k|k}A_{k}^{T}+Q_{k}$

         测量更新的校正方程为

$\begin{array}{c}{​{x_{k+1|k+1}=x_{k+1|k}+K_{k}(y_{k}-H_{k}x_{k+1|k})}}\\ {​{P_{k+1|k+1}=(I-K_{k}H_{k})P_{k+1|k}}}\end{array}$

        为了在每次更新中计算卡尔曼增益矩阵 (Kk),滤波器需要计算一个矩阵的逆矩阵:

$K_{k}=P_{k|k-1}H_{k}^{T}\left[H_{k}P_{k|k-1}H_{k}^{T}+R_{k}\right]^{-1}$

        由于转置矩阵的维数等于估计状态的维数,因此对于高维系统来说,这种计算需要一定的计算量。更多详情,请参阅线性卡尔曼滤波器。

3.2 Alpha-Beta 滤波器

        Alpha-Beta 滤波器(trackingABF)是一种适用于线性系统的次优滤波器。该滤波器可视为简化的卡尔曼滤波器。在卡尔曼滤波器中,卡尔曼增益矩阵和协方差矩阵是动态计算的,每一步都会更新。然而,在 Alpha-Beta 滤波器中,这些矩阵是恒定的。这种处理方法牺牲了卡尔曼滤波器的最优性,但提高了计算效率。因此,在计算资源有限的情况下,Alpha-Beta 滤波器可能是首选。

 3.3 扩展卡尔曼滤波器


        最流行的扩展卡尔曼滤波器(trackingEKF)是从经典卡尔曼滤波器改进而来,以适应非线性模型。它的工作原理是将非线性系统与状态估计值线性化,并忽略二阶及更高阶的非线性项。除了卡尔曼滤波器中的 Ak 和 Hk 矩阵被 f(xk ) 和 h(xk) 的雅可比矩阵所取代外,它的公式与线性卡尔曼滤波器的公式基本相同: 

$\begin{array}{c}{​{A_{k}=\dfrac{\partial f(x_{k})}{\partial x_{k}}\bigg|_{x_{k|k-1}}}}\\ {​{H_{k}=\dfrac{\partial h(x_{k})}{\partial x_{k}}\bigg|_{x_{k|k-1}}}}\end{array}$ 

        如果估计系统的真实动态接近线性化动态,那么使用这种线性近似在短时间内不会产生明显误差。因此,对于更新间隔较短的轻度非线性估计系统,EKF 可以产生相对准确的状态估计。然而,由于 EKF 忽略了高阶项,因此对于高度非线性系统(例如四旋翼飞行器),特别是更新间隔较大的系统,EKF 可能会出现偏离。

        与 KF 相比,EKF 需要推导雅各布矩阵,这就要求系统动力学是可微分的,还需要计算雅各布矩阵使系统线性化,这就需要更多的计算资产。

        需要注意的是,对于状态以球面坐标表示的估计系统,可以使用 trackingMSCEKF。

3.4 无迹卡尔曼滤波器


        无迹卡尔曼滤波器(trackingUKF)使用无迹变换(UT)来近似传播非线性模型的协方差分布。UT 方法对当前时间的协方差高斯分布进行采样,利用非线性模型传播采样点(称为 sigma 点),并通过评估这些传播的 sigma 点来近似假定为高斯分布的协方差分布。图中说明了实际传播、线性化传播和不确定性协方差的UT 传播之间的差异。 

        与 EKF 采用的线性化方法相比,UT 方法能更准确地传播协方差,并能进行更准确的状态估计,尤其是对于高度非线性系统。UKF 不需要推导和计算雅各矩阵。但是,UKF 需要通过非线性模型传播 2n+1 个 sigma 点,其中 n 是估计状态的维度。对于高维系统来说,计算成本可能会很高。 

3.5 立方卡尔曼滤波器


        立方卡尔曼滤波器(trackingCKF)采用与 UKF 稍有不同的方法生成 2n 个用于传播协方差分布的样本点,其中 n 是估计状态的维度。这种交替的样本点集通常能带来更好的统计稳定性,并避免 UKF 可能出现的发散现象,尤其是在单精度平台上运行时。请注意,当 UKF 参数设置为 α = 1、β = 0 和 κ = 0 时,CKF 本质上等同于 UKF。 有关这些参数的定义,请参见 trackingUKF。 

3.6 高斯求和滤波器


        高斯和滤波器(TrackingGSF)使用多个高斯分布的加权和来近似估计状态的分布。估计状态由高斯状态的加权和给出: 

$x_ k=\sum_{i=1}^{N}{​{c}}^i_{k}{​{​{x}}}^i_{k}$

        其中,N 是滤波器中保持的高斯状态的数量,cki 是相应高斯状态的权重,每次更新都会根据测量结果进行修改。多个高斯状态遵循相同的动态模型:

${x}_{k+1}^{​{i}}=f(x_{k}^{​{i}},w_{k}^{​{i}}),\,\mathrm{for}\,i=1,2,\dots,N.$

        该滤波器能有效估计不完全可观测估计系统的状态。例如,当只有测距数据时,滤波器可以使用多个角度参数化的扩展卡尔曼滤波器来估计系统状态。有关示例,请参阅 "仅测距跟踪"。

3.7 交互式多重模型滤波器


        交互式多模型滤波器(trackingIMM)使用多个高斯滤波器来跟踪目标的位置。在高机动性系统中,系统动力学可以在多个模型(例如匀速、匀加速和匀转向)之间切换。仅使用一种运动模型来模拟目标的运动是很困难的。多模型估计系统可描述为:

$\begin{array}{l}\\ {​{x^{i}_{k+1}=f_ i(x_{k}^{\ i},w_{k}^{\ i})}}\\ {​{y_{k}^i=h _i(x_{k}^{i},v_{k}^i)}}\end{array}$

        其中 i = 1,2,...,M,M 是动态模型的总数。IMM 过滤器通过对机动目标使用多个模型来解决目标运动的不确定性。滤波器同时处理所有模型,并将总体估计值表示为这些模型估计值的加权和,其中权重为每个模型的概率。有关示例,请参阅 "跟踪机动目标"。

3.8 粒子滤波器


        粒子滤波器(trackingPF)不同于卡尔曼滤波器系列(例如 EKF 和 UKF),因为它不依赖于高斯分布假设,后者相当于使用均值和方差对不确定性进行参数化描述。取而代之的是,粒子滤波器通过时间对系统运行的加权样本(粒子)进行多次模拟,然后将这些粒子作为未知真实分布的代理进行分析。粒子滤波算法简介如图所示。

 

        这种方法背后的动机是大数定律论证 —— 随着粒子数量的增加,粒子的经验分布会越来越接近真实分布。与各种卡尔曼滤波器相比,粒子滤波器的主要优势在于它可以应用于非高斯分布。此外,该滤波器对系统动力学没有限制,可用于高度非线性系统。另一个优点是,粒子滤波器本身就能代表关于当前状态的多种假设。由于每个粒子都代表一个具有一定相关可能性的状态假设,因此粒子滤波器在状态存在模糊性的情况下非常有用。

        除了这些吸引人的特性外,粒子滤波器的计算复杂度也很高。例如,UKF 需要传播 13 个采样点来估计物体的三维位置和速度。然而,粒子滤波器可能需要数千个粒子才能获得合理的估计值。而且,实现良好估计所需的粒子数量会随着状态维度的增加而快速增长,在高维空间中会导致粒子剥夺问题。因此,粒子滤波器大多被应用于维数较低的系统(例如机器人)。

 四、如何选择跟踪滤波器


        下表列出了传感器融合与跟踪工具箱中所有可用的跟踪滤波器,以及在系统非线性、状态分布和计算复杂度等限制条件下如何选择这些滤波器。

滤波器名称支持非线性模型高斯状态计算复杂度评论
Alpha-BetaLowSuboptimal filter.次优滤波器。
KalmanMedium LowOptimal for linear systems.线性系统的最佳方案
Extended KalmanMediumUses linearized models to propagate uncertainty covariance.使用线性化模型传播不确定性协方差。
Unscented KalmanMedium HighSamples the uncertainty covariance to propagate the sample points. May become numerically unstable in a single-precision platform.采样不确定性协方差来传播采样点。在单精度平台上可能会出现数值不稳定的情况。
Cubature KalmanMedium HighSamples the uncertainty covariance to propagate the sample points. Numerically stable.采样不确定性协方差来传播采样点。数值稳定。
Gaussian-Sum

(Assumes a weighted sum of distributions假设分布的加权和)

HighGood for partially observable cases (angle-only tracking for example).适用于部分可观测的情况(例如只跟踪角度)。
Interacting Multiple Models (IMM)

Multiple models

(Assumes a weighted sum of distributions假设分布的加权和)

HighManeuvering objects (which accelerate or turn, for example)操纵物体(例如加速或转弯的物体)
ParticleVery HighSamples the uncertainty distribution using weighted particles.使用加权粒子对不确定性分布进行采样。

References

[1] Wang, E.A., and R. Van Der Merwe. "The Unscented Kalman Filter for Nonlinear Estimation." IEEE 2000 Adaptive Systems for Signal Processing, Communications, and Control Symposium. No. 00EX373, 2000, pp. 153–158.

[2] Fang, H., N. Tian, Y. Wang, M. Zhou, and M.A. Haile. "Nonlinear Bayesian Estimation: From Kalman Filtering to a Broader Horizon." IEEE/CAA Journal of Automatica Sinica. Vol. 5, Number 2, 2018, pp. 401–417.

[3] Arasaratnam, I., and S. Haykin. "Cubature Kalman Filters." IEEE Transactions on automatic control. Vol. 54, Number 6, 2009, pp. 1254–1269.

[4] Konatowski, S., P. Kaniewski, and J. Matuszewski. "Comparison of Estimation Accuracy of EKF, UKF and PF Filters." Annual of Navigation. Vol. 23, Number 1, 2016, pp. 69–87.

[5] Darko, J. "Object Tracking: Particle Filter with Ease." https://www.codeproject.com/Articles/865934/Object-Tracking-Particle-Filter-with-Ease.

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1331287.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux命令-查看内存、GC情况及jmap 用法

查看进程占用内存、CPU使用情况 1、查看进程 #jps 查看所有java进程 #top 查看cpu占用高进程 输入m :根据内存排序 topMem: 16333644k total, 9472968k used, 6860676k free, 165616k buffers Swap: 0k total, 0k used, 0k free, 6…

【网络编程】网络通信基础——简述TCP/IP协议

个人主页:兜里有颗棉花糖 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 兜里有颗棉花糖 原创 收录于专栏【网络编程】【Java系列】 本专栏旨在分享学习网络编程的一点学习心得,欢迎大家在评论区交流讨论💌 目录 一、ip地…

全网最全ChatGPT指令大全prompt

全网最全的ChatGPT大全提示词,大家可以进行下载。 AIGC ChatGPT 职场案例 AI 绘画 与 短视频制作 PowerBI 商业智能 68集 数据库Mysql 8.0 54集 数据库Oracle 21C 142集 Office 2021实战应用 Python 数据分析实战, ETL Informatica 数据仓库案例实战 E…

The Cherno C++笔记02

目录 Part 06 How the C Compiler Works 1.编译过程 2.C并不关心文件 3.翻译单元(Translation Unit) 4. 实际用代码感受一下编译过程 4.1 预处理 4.1.1 预处理的本质 4.1.2 预处理后的.i文件 4.1.3 骚操作 4.2 .asm文件(汇编语言源文…

手把手教你在飞书中搭建机器人

前言 大家好,我是潇潇雨声。飞书是一款在国内广受欢迎的企业内部管理和协同工具,同时也可以作为一个强大的个人知识管理工具。在本文中,我将帮助你迅速创建一个飞书对话机器人,并嵌入 chatGPT 的功能。这个机器人可以直接回答你的…

贪吃蛇(七)方向和屏幕刷新

由于用户玩游戏的时候,程序需要一边接收用户的输入,一边需要刷新屏幕,此时就需要引用线程来解决此问题。 实现思路 linux线程库pthread,只需要创建pthread_t 类型的线程变量,然后将线程变量与函数进行绑定即可&#…

HFish蜜罐搭建及简单使用

一、HFish蜜罐 HFish是一款社区型免费蜜罐,侧重企业安全场景,从内网失陷检测、外网威胁感知、威胁情报生产三个场景出发,为用户提供可独立操作且实用的功能,通过安全、敏捷、可靠的中低交互蜜罐增加用户在失陷感知和威胁情报领域的…

一篇文章带你搞定CTFMice基本操作

CTF比赛是在最短时间内拿到最多的flag,mice必须要有人做,或者一支战队必须留出一块时间专门写一些mice,web,pwn最后的一两道基本都会有难度,这时候就看mice的解题速度了! 说实话,这是很大一块&…

JavaEE进阶学习:Spring MVC 程序开发

1.什么是 Spring MVC Spring Web MVC 是基于Servlet API 构建的原始 Web 框架,从一开始就包含在Spring 框架中。它的正式名称 “Spring Web MVC” 来自其源模块的名称(Spring-webmvc),但它通常被称为“Spring MVC”。 从上述定义我们可以得出两个关键信…

blender径向渐变材质-着色编辑器

要点: 1、用纹理坐标中的物体输出连接映射中的矢量输入 2、物体选择一个空坐标,将空坐标延z轴上移一段距离 3、空坐标的大小要缩放到和要添加材质的物体大小保持一致

【雷达原理】雷达测速原理及实现方法

一、雷达测速原理 1.1 多普勒频率 当目标和雷达之间存在相对运动时,若雷达发射信号的工作频率为,则接收信号的频率为,其中为多普勒频率。将这种由于目标相对于辐射源运动而导致回波信号的频率发生变化的现象称为多普勒效应。 如图1-1所示&a…

猫头虎博客:SSH连接失败ssh: connect to host port 22: Connection refused”解决大揭秘

🌷🍁 博主猫头虎 带您 Go to New World.✨🍁 🦄 博客首页——猫头虎的博客🎐 🐳《面试题大全专栏》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 &a…

Linux bridge开启hairpin模拟测试macvlan vepa模式

看到网上介绍可以通过Linux bridge 开启hairpin方式测试macvlan vepa模式,但是没有找到详细资料。我尝试测试总提示错误信息,无法实现,经过几天的研究,我总算实现模拟测试,记录如下: 参考 1.Linux Macvla…

Angular 11到升级到 Angular 16

日新月异,与时俱进… 随着Angular版本不断更新,再看所开发的项目版本仍然是Angular 11,于是准备升级 截止发博日最版本是 v17.1.0,考虑到稳定性因素决定升级到v16版本 一:查看 升级指南 二:按照指南&…

Ubuntu 常用命令之 cal 命令用法介绍

📑Linux/Ubuntu 常用命令归类整理 cal命令在Ubuntu系统下用于显示日历。它可以显示任何特定月份或整个年份的日历。 cal命令的参数如下 -1:只显示当前月份的日历。-3:显示前一个月、当前月和下一个月的日历。-s:指定日历的开始…

力扣思维题——寻找重复数

题目链接:https://leetcode.cn/problems/find-the-duplicate-number/description/?envTypestudy-plan-v2&envIdtop-100-liked 这题的思维难度较大。一种是利用双指针法进行计算环的起点,这种方法在面试里很难说清楚,也很难想到。大致做…

MyBatis中延迟加载,全局和局部的开启使用与关闭

文章目录 MyBatis中延迟加载,全局和局部的开启使用与关闭1、问题提出2、延迟加载和立即加载延迟加载立即加载 3、三种对应的表关系中的加载4、打开全局延迟加载(实现一对一的延迟加载)5、实现一对多的延迟加载(将上面设置的全局延…

Flink 数据序列化

为 Flink 量身定制的序列化框架 大家都知道现在大数据生态非常火,大多数技术组件都是运行在JVM上的,Flink也是运行在JVM上,基于JVM的数据分析引擎都需要将大量的数据存储在内存中,这就不得不面临JVM的一些问题,比如Ja…

thinkphp+vue+mysql酒店客房管理系统 b1g8z

本系统包括前台界面、用户界面和管理员界面、员工界面。在前台界面里游客和用户可以浏览客房信息、公告信息等,用户可以预定客房,在用户中心界面里,用户可以管理预定信息,管理员负责用户预定的审核以及客房的发布、用户的入住等。…

装饰者模式学习

装饰器(Decorator)模式的定义:指在不改变现有对象结构的情况下,动态地给该对象增加一些职责(即增加其额外功能)的模式,它属于对象结构型模式。 装饰器模式的主要优点有: 装饰器是继…