几种经典非线性滤波算法简单概括(EKF,UKF,CKF,PF)

2023-05-16

几种经典非线性滤波算法概括(EKF,UKF,CKF,PF)

上一篇文章阐述了Kalman滤波算法,该算法是在线性高斯下的最优滤波估计算法。但是在实际控制系统中,系统的动态过程和测量过程很多情况都是非线性的,所以非线性滤波算法变得尤为重要。

: 本文仅就几种经典的滤波算法进行简单的介绍,详细的算法及仿真会在后面的文章中更新

非线性滤波可以分为两大类:点估计概率密度估计

点估计

直接估计随机状态值及其相关二阶统计量,并不需要估计其概率密度函数
从非线性逼近技术上可分为三类:

  • 非线性函数估计
  • 矩逼近
  • 随机模型逼近

代表算法:

  • 扩展卡尔曼算法(EKF)
    EKF算法是将非线性函数以泰勒级数展开的方式,保留一阶项实现对非线性函数线性化,用雅可比矩阵代替卡尔曼滤波方程中的状态转移矩阵,然后以卡尔曼滤波算法为框架计算系统的状态估计值和方差。
  • 无迹卡尔曼算法(UKF)
    UKF算法是利用UT变换获取Sigma点集,然后通过非线性函数传递,将非线性函数线性化问题转换成系统状态量概率密度分布的近似,然后基于Kalman算法框架实现滤波问题。
    UT变换,通过一定的采样策略,获取一组Sigma采样点,并设定相应的均值权值和方差权值,来近似非线性函数的后验均值和方差。
  • 容积卡尔曼算法(CKF)
    CKF算法是基于三阶球面-径向容积准则,使用一组容积点来逼近具有加性高斯白噪声的非线性系统的状态均值和协方差。
    三阶球面-径向容积规则是依据先验均值和协方差,通过容积规则选取容积点,再将这些容积点经过非线性函数的传递,再将非线性函数传递后的容积点加权处理近似状态后验均值和协方差。
    三种算法对比:
算法优点缺点
EKF结构简单,适用于非线性程度不高的系统由于忽略了高阶项,当非线性程度高或初始误差较大时,会大大降低滤波精度甚至发散 。
UKF不会引入线性化误差,精度可以达到泰勒级数展开的二阶精度,无需计算雅克比矩阵,适合于不可或不连续的情况当维数大于3时会损失掉部分Sigma点对非线性函数后验分布的统计特性,会使系统的估计精度有所下降。
CKF实现简单,滤波精度高,收敛性好。CKF算法对非线性系统估计时舍去了部分近似化误差, 会造成滤波不满足拟一致性, 从而无法对状态真值进行准确估计。有时也会出现开方失败的问题。

注:上述几种算法都是针对非线性高斯系统,都是为了解决非线性高斯滤波中高斯加权积分难以获取精确解析解这一问题

概率密度估计

基于先验信息和在线数据估计状态的后验概率。
代表:粒子滤波(PF)
粒子滤波算法的基本思想是利用蒙特卡洛方法产生大量随机粒子去近似状态的后验分布从而实现状态估计,粒子滤波算法在预测、更新过程中,只对其中的粒子进行更新,再加权求和得到状态估计,不用计算状态的后验协方差。这种方法可应用于非线性、非高斯分布的情况。
蒙特卡洛思想:利用状态空间中大量的随机采样样本近似逼近所求变量的后验概率分布函数。
下图为粒子滤波示意图:
粒子滤波示意图
粒子滤波存在的问题:

  1. 退化问题,在实际计算中,经过数次粒子传播后,只有少数粒子具有较大权值,其余粒子的权值均忽略不计,导致粒子集不能有效表达系统状态后验概率分布,从而引起滤波性能下降甚至发散。
  2. 贫化问题,通过重采样虽然可以避免粒子的退化现象,但是大量粒子由相同的大权值粒子复制而来,会使粒子类型大幅度下降,甚至最后只剩下一个权值为1的粒子,不能再对概率分布进行正确的近似。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

几种经典非线性滤波算法简单概括(EKF,UKF,CKF,PF) 的相关文章

  • Failed to execute ‘createObjectURL‘ on ‘URL‘ Overload resolution failed

    vue使用二进制流下载文件 xff0c 使用 link href 61 window URL createObjectURL blob 报错 xff1a Failed to execute createObjectURL on URL Ov
  • openwrt安装docker并启动

    在软件包中下载docker和dockerd 也可以自行下载ipk文件安装 安装成功后启动xshell连上openwrt 执行 etc init d dockerd 启动docker的daemon服务 若要dockerd自启动则执行 ln s
  • Mysql环境变量配置

    一 mysql的环境变量配置步骤 1 1 在桌面选择 计算机 的图标 xff0c 右键 gt 属性 gt 点击 高级系统设置 gt 点击 环境变量 2 2 新建MYSQL HOME变量 xff0c 并将值设置为C Program Files
  • MySQL安装配置教程(超级详细)

    一 下载MySQL Mysql官网下载地址 xff1a MySQL Download MySQL Installer Archived Versions 1 选择要安装的版本 xff0c 本篇文章选择的是5 7 31版本 xff0c 点击D
  • mysql字符切割的四种方式

    1 从左开始截取字符串 left xff08 str length xff09 说明 xff1a left xff08 被截取字段 xff0c 截取长度 xff09 select left 39 如果暴力不是为了杀戮 xff0c 那将变得毫
  • Podman 使用指南

    原文链接 xff1a Podman 使用指南 Podman 原来是 CRI O 项目的一部分 xff0c 后来被分离成一个单独的项目叫 libpod Podman 的使用体验和 Docker 类似 xff0c 不同的是 Podman 没有
  • ClickHouse查询语句详解

    ClickHouse查询语句兼容大部分SQL语法 xff0c 并且进行了更加丰富的扩展 xff0c 查询语句模板如下 xff1a WITH expr list subquery SELECT DISTINCT ON column1 colu
  • Mysql和Redis如何保证数据一致性

    文章目录 前言一 先更新数据库 xff0c 再更新redis二 先更新redis xff0c 在更新数据库三 先更新数据库 xff0c 再删除redis四 先删除redis xff0c 再更新数据库总结 前言 如何保证数据库和缓存双写一致
  • SQL——左连接(Left join)、右连接(Right join)、内连接(Inner join)

    文章目录 前言 一 概念 二 例子 总结 前言 最近在做SQL相关的练习 发现以前那么自信的SQL放久了不碰也变得棘手起来 特别是这一块表之间的内外连接 所以这篇是关于这个内外连接的整理 一 概念 首先还是介绍一下这三个的定义 1 Left
  • UCOSII之项目实战总结

    电子IT行业博大精深 xff0c 没有人能够用笔记本天天记录自己所学的知识 xff0c 于是乎 xff0c 撰写博客就成了每个 IT民工 的专长 再者 xff0c 写一篇博客 xff0c 其意义与不但记录了自己所需的知识 xff0c 更提高
  • 明白了一句话:“加速度信号对高频敏感,位移信号对低频敏感”

    以前听别人说这些 xff0c 然后记住了 但是一直不大理解 最近在调试IEPE传感器 xff0c 正好要算位移 速度 加速度 对于相同的速度 xff0c 频率越高 xff0c 加速度值就越大 因为从公式就能看出来 xff0c 对于固定频率的
  • ubuntu 16.04使用IntelRealSense D435i调用realsense ROS包时,报symbol lookup error和undefined symbol错误的解决办法

    在ubuntu 16 04使用IntelRealSense D435i调用realsense ROS包时 xff0c 运行 roscore roslaunch realsense2 camera rs rgbd launch 出现错误 xf
  • Android浪潮

    Google的Android手机就要席卷世界了 xff01 IT技术的发展常常太出人意料 xff0c 我也想不太清楚Google的Android平台究竟吸引人在哪里 xff0c 但我相信Android会很快改变手机平台的格局 新的形势会出人
  • 卡尔曼滤波相关介绍及优缺点

    1 卡尔曼滤波算法为什么会叫滤波算法 xff1f 以一维卡尔曼滤波为例 xff0c 如果我们单纯的相信测量的信号 xff0c 那么这个信号是包含噪声的 xff0c 是很毛糙的 xff0c 但是当我们运行卡尔曼滤波算法去做估计 xff0c 我
  • STM32单片机(五)-寄存器地址理解和控制LED闪烁

    芯片 xff1a stm32f103zet6 1 存储单元一般应具有存储数据和读写数据的功能 一般以8位二进制作为一个存储单元 也就是一个字节 每个单元有一个地址 是一个整数编码 可以表示为二进制整数 2 stm32是32位单片机 xff0
  • 跨平台构建 Docker 镜像新姿势,x86、arm 一把梭

    点击 34 阅读原文 34 可以获得更好的阅读体验 在工作和生活中 xff0c 我们可能经常需要将某个程序跑在不同的 CPU 架构上 xff0c 比如让某些不可描述的软件运行在树莓派或嵌入式路由器设备上 特别是 Docker 席卷全球之后
  • 正点原子STM32F4笔记

    使用寄存器操作 xff0c 不错的博客 xff1a https blog csdn net w471176877 article category 1230060 https blog csdn net w471176877 article
  • JAVA中this用法小结

    我知道很多朋友都和我一样 xff1a 在 JAVA 程序中似乎经常见到 this xff0c 自己也偶尔用到它 xff0c 但是到底 this 该怎么用 xff0c 却心中无数 xff01 很多人一提起它 xff0c 就说 当前对象 xff
  • Linux Platform总线+SPI总线分析

    2015 07 1 11 20 本文以MPC8308 powerpc架构 xff0c HX软件包为依据 xff0c 详细内容可参考源码 CPU e300c3MPC8308 400MHz BOARD Freescale MPC8308ERDB
  • ubuntu下SD卡分区与挂载

    本来只是想借SD卡来做一个OK6410的升级 但笔记本上只装了ubuntu xff0c 一开始是可以识别sd卡的 xff0c 但按照网上的教程不小心将 dev sdb1删除了 导致ubuntu不能识别sd卡了 记录一下解决过程 1 sd的设

随机推荐