卡尔曼滤波学习

news2024/11/14 14:37:21

原教程地址:KalmanFilter.NET

卡尔曼滤波广泛应用在雷达系统目标跟踪)中,但是其实它还可以应用在任何需要估算和预测的领域

一、一维卡尔曼滤波

通过8个数值例子介绍卡尔曼滤波,涉及平均数、方差、标准差等,最终可以自行设计出一个一维的卡尔曼滤波算法

1.1 背景知识

平均值、期望值、方差、标准差

  对于一个跟踪和控制系统,最大的问题计时在存在不确定性的前提提供一个准确的有用信息
  卡尔曼滤波就是一种常用且重要的估算方法,它在预估时默认输入信息不准确,同时也根据上一次系统的预估值来预估下一次的系统状态,测量噪声和处理噪声的存在可能使得动态模型(描述输入与输出关系的方法)估算出来的结果与真实值相差甚远,因此需要对噪声进行处理。

  平均值和期望值的区别在于,用可观测状态计算出的是均值,一般用 μ \mu μ 表示,而对于无法获得真实值的隐变量,平均多次测量值估计的结果称为期望值,一般用 E E E 表示。

  方差和标准差,方差 Variance 用来衡量一组结果的离散程度,标准差 Standard Deviation 则是方差的算数平方根,两者分别用 σ 2 \sigma^2 σ2 σ \sigma σ 表示。
  方差、标准差在完全样本中的计算和在抽样样本中的计算是有区别的
  在完全样本中:
σ 2 = 1 N ∑ n = 1 N ( x n − μ ) 2 , σ = 1 N ∑ n = 1 N ( x n − μ ) 2 \sigma^2=\frac{1}{N}\sum^{N}_{n=1}(x_n-\mu)^2,\sigma=\sqrt{\frac{1}{N}\sum^{N}_{n=1}(x_n-\mu)^2} σ2=N1n=1N(xnμ)2,σ=N1n=1N(xnμ)2
  在抽样样本中:
σ 2 = 1 N − 1 ∑ n = 1 N ( x n − μ ) 2 , σ = 1 N − 1 ∑ n = 1 N ( x n − μ ) 2 \sigma^2=\frac{1}{N-1}\sum^{N}_{n=1}(x_n-\mu)^2,\sigma=\sqrt{\frac{1}{N-1}\sum^{N}_{n=1}(x_n-\mu)^2} σ2=N11n=1N(xnμ)2,σ=N11n=1N(xnμ)2

正太分布

  很多自然现象都遵循正太分布,也称为高斯分布,可以通过以下等式描述:
f ( x ; μ , σ 2 ) = 1 2 π σ 2 e − ( x − μ ) 2 2 σ 2 f(x;\mu,\sigma^2)=\frac{1}{\sqrt{2\pi\sigma^2}}e^{\frac{-(x-\mu)^2}{2\sigma^2}} f(x;μ,σ2)=2πσ2 1e2σ2(xμ)2
  高斯曲线也被称为正太分布的概率密度函数,如下图所示,以及正太分布在 μ ± σ \mu\pm\sigma μ±σ μ ± 2 σ \mu\pm2\sigma μ±2σ μ ± 3 σ \mu\pm3\sigma μ±3σ 的比例,通常,测量误差呈正太分布

  随机变量分为连续随机变量离散随机变量,所有的测量值都是连续随机变量。

估计的准确度与精密度

  估计用来估算系统的不可见状态,可以通过雷达等传感器估计飞机位置,并通过使用多个传感器和高级估计及追踪算法(如卡尔曼滤波)来显著提升估计精度。
  准确度表示测量结果与真实值的接近程度。精密度表示测量结果的再现性。

  随机误差导致方差,高/低精密度系统表示系统方差/不确定性的大小,而高/低精度系统表示系统系统性误差(偏差)的大小。对测量值进行平均或平滑处理可以显著降低方差影响,但是无法修复固定的系统误差,教程中案例都假设为无偏系统

以一张图进行总结

1.2 α − β − γ \alpha-\beta-\gamma αβγ 滤波器

静态模型案例-金条称重

  估计一个静态模型的状态,
x ^ n , n = 1 n ( z 1 + z 2 + . . . + z n − 1 + z n ) = 1 n ∑ i = 1 n ( z i ) \hat{x}_{n,n}=\frac{1}{n}(z_1+z_2+...+z_{n-1}+z_n)=\frac{1}{n}\sum^{n}_{i=1}(z_i) x^n,n=n1(z1+z2+...+zn1+zn)=n1i=1n(zi)

符号说明:
x x x  是测量值
z n z_n zn  是第 n n n 次的测量值
x ^ n , n \hat{x}_{n,n} x^n,n  是第 n n n 次测量后的估计值
x ^ n , n − 1 \hat{x}_{n,n-1} x^n,n1  是 n − 1 n-1 n1 次测量后对 n n n 时刻作出的先验估计值
x ^ n + 1 , n \hat{x}_{n+1,n} x^n+1,n  是 n n n 次测量后对 n + 1 n+1 n+1 时刻作出的先验估计值
因为案例中的动态模型是定值,因此 x ^ n + 1 , n = x ^ n , n \hat{x}_{n+1,n}=\hat{x}_{n,n} x^n+1,n=x^n,n

  经过计算可以得到 x ^ n , n = x ^ n − 1 , n − 1 + 1 n ( z n − x ^ n − 1 , n − 1 ) \hat{x}_{n,n}=\hat{x}_{n-1,n-1}+\frac{1}{n}(z_n-\hat{x}_{n-1,n-1}) x^n,n=x^n1,n1+n1(znx^n1,n1),这就是一个状态更新方程,可以将其总结为:
当前状态估计 = 当前状态估计的先验估计值 + F a c t o r × ( 测量值 − 当前状态估计的先验估计值 ) 当前状态估计=当前状态估计的先验估计值+Factor\times(测量值-当前状态估计的先验估计值) 当前状态估计=当前状态估计的先验估计值+Factor×(测量值当前状态估计的先验估计值)

  这里的 F a c t o r Factor Factor在卡尔曼滤波中被称为卡尔曼增益,记为 K n K_n Kn ,这里暂以 α n \alpha_n αn 代替 K n K_n Kn状态更性方程可以写为如下,其中的 ( z n − x n , n − 1 ) (z_n-x_{n,n-1}) (znxn,n1)观测残差/更新,包含了新的观测信息。
x ^ n , n = x ^ n , n − 1 + α n ( z n − x ^ n , n − 1 ) \hat{x}_{n,n}=\hat{x}_{n,n-1}+\alpha_n(z_n-\hat{x}_{n,n-1}) x^n,n=x^n,n1+αn(znx^n,n1)
下面是整个估计过程:

一维空间追踪匀速飞行器

  假设一个一维空间,一架飞行器向远离/接近雷达方向恒速飞行,雷达角度、飞机高度不变。 x n x_n xn 表示飞行器在 n n n 时的航程,雷达以恒定频率向目标发射追踪波束,周期为 Δ t \Delta t Δt,可以用以下两个方程描述运动:
x n + 1 = x n + Δ t x ˙ n x ˙ n + 1 = x ˙ n x_{n+1}=x_n+\Delta t\dot{x}_n\\ \dot{x}_{n+1}=\dot{x}_n xn+1=xn+Δtx˙nx˙n+1=x˙n
  以上的方程组可以称为状态外推方程(State Exploration Equation)/过渡方程/预测方程,也是卡尔曼滤波的方程之一。
  设定雷达跟踪周期 Δ t \Delta t Δt 为5秒,假设在 n − 1 n-1 n1 时无人机估计航程30000m,估计速度40m/s。可以外推预测 n n n 时目标位置和速度值:
x ^ n , n − 1 = x ^ n − 1 , n − 1 + Δ t x ˙ ^ n − 1 , n − 1 = 30000 + 5 ∗ 40 = 30200 m   x ˙ ^ n , n − 1 = x ˙ ^ n − 1 , n − 1 = 40 m / s \hat{x}_{n,n-1}=\hat{x}_{n-1,n-1}+\Delta t\hat{\dot{x}}_{n-1,n-1}=30000+5*40=30200m\\\ \\ \hat{\dot{x}}_{n,n-1}=\hat{\dot{x}}_{n-1,n-1}=40m/s x^n,n1=x^n1,n1+Δtx˙^n1,n1=30000+540=30200m x˙^n,n1=x˙^n1,n1=40m/s
  如果在 n n n时雷达测量航程( z n z_n zn)为30110,与预测值存在90m的偏差,可能有雷达测量误差、飞行器速度误差两方面因素导致.

下面写下飞行器速度的状态更新方程
x ˙ ^ n = x ˙ ^ n , n − 1 + β ( z n − x ^ n , n − 1 Δ t ) \hat{\dot{x}}_{n}=\hat{\dot{x}}_{n,n-1}+\beta(\frac{z_n-\hat{x}_{n,n-1}}{\Delta t}) x˙^n=x˙^n,n1+β(Δtznx^n,n1)
  这里的系数 β \beta β 值取决于雷达精度:
  (1)如果雷达精度高,倾向于是飞行器速度变化导致航程的测量偏差,则将 β \beta β调高。
  (2)如果雷达精度低,倾向于是雷达测量误差导致航程的测量偏差,则将 β \beta β调低。

下面再写出飞行器位置的状态更新方程
x ^ n , n = x ^ n , n − 1 + α ( z n − x ^ n , n − 1 ) \hat{x}_{n,n}=\hat{x}_{n,n-1}+\alpha(z_n-\hat{x}_{n,n-1}) x^n,n=x^n,n1+α(znx^n,n1)
  同样,这里的系数 α \alpha α 值取决于雷达精度, α \alpha α 在 0~1 之间, α = 1 \alpha=1 α=1,则估计航程等于测量航程, α = 0 \alpha=0 α=0,则测量没有意义。

  由此得到雷达追踪器的状态更性方程组,也被称为 α − β \alpha-\beta αβ 轨迹更新方程/ α − β \alpha-\beta αβ 轨迹滤波方程
   α , β \alpha,\beta α,β的值取决于测量精度,在0~1之间,对精度越高的设备,测量权重越高,此时滤波器会对目标速度变化作出快速响应;而如果精度较低,则采用低 α 、 β \alpha、\beta αβ,降低测量中的不确定性。

注:有些教材中 α − β \alpha-\beta αβ 滤波被写为 g-h 滤波。

一维空间中追踪加速飞行器

  设定一架战斗机先以50m/s的恒定速度飞行15秒,然后以 8 m / s 2 8 m/s^2 8m/s2的加速度匀加速飞行35秒。

  使用 α − β \alpha-\beta αβ 滤波器进行追踪,通过每次周期的速度估计考虑加速度带来的影响,会看到真实值或测量值与估计值之间存在一个固定的差值,被称为滞后误差(lag error),它的其他常见名称还有:动态误差、系统误差、偏移误差、截断误差。

  因此需要使用 α − β − γ \alpha-\beta-\gamma αβγ 滤波器进行跟踪,将目标加速度考虑进去:

状态外推方程变为:
x ^ n + 1 , n = x ^ n , n + x ˙ ^ n , n Δ t + x ¨ ^ n , n Δ t 2 2   x ˙ ^ n + 1 , n = x ˙ ^ n , n + x ¨ ^ n , n Δ t   x ¨ ^ n + 1 , n = x ¨ ^ n , n \hat{x}_{n+1,n}=\hat{x}_{n,n}+\hat{\dot{x}}_{n,n}\Delta t+\hat{\ddot{x}}_{n,n}\frac{\Delta t^2}{2}\\\ \\ \hat{\dot{x}}_{n+1,n}=\hat{\dot{x}}_{n,n}+\hat{\ddot{x}}_{n,n}\Delta t\\\ \\ \hat{\ddot{x}}_{n+1,n}=\hat{\ddot{x}}_{n,n} x^n+1,n=x^n,n+x˙^n,nΔt+x¨^n,n2Δt2 x˙^n+1,n=x˙^n,n+x¨^n,nΔt x¨^n+1,n=x¨^n,n
状态更新方程变为
x ^ n , n = x ^ n , n − 1 + α ( z n − x ^ n , n − 1 )   x ˙ ^ n , n = x ˙ ^ n , n − 1 + β ( z n − x ^ n , n − 1 Δ t )   x ¨ ^ n , n = x ¨ ^ n , n − 1 + γ ( z n − x ^ n , n − 1 0.5 Δ t 2 ) \hat{x}_{n,n}=\hat{x}_{n,n-1}+\alpha(z_n-\hat{x}_{n,n-1})\\\ \\ \hat{\dot{x}}_{n,n}=\hat{\dot{x}}_{n,n-1}+\beta(\frac{z_n-\hat{x}_{n,n-1}}{\Delta t})\\\ \\ \hat{\ddot{x}}_{n,n}=\hat{\ddot{x}}_{n,n-1}+\gamma(\frac{z_n-\hat{x}_{n,n-1}}{0.5\Delta t^2}) x^n,n=x^n,n1+α(znx^n,n1) x˙^n,n=x˙^n,n1+β(Δtznx^n,n1) x¨^n,n=x¨^n,n1+γ(0.5Δt2znx^n,n1)
  包含加速度模型的 α − β − γ \alpha-\beta-\gamma αβγ 滤波器可以追踪匀加速运动的目标,并且消除滞后误差。

  然而,真正的目标动态模型仍可能有很多不同的因素,使得 α − β − γ \alpha-\beta-\gamma αβγ 滤波器失效。

1.3 卡尔曼滤波

二、多维卡尔曼滤波

  现实世界中的卡尔曼滤波都是多维的,这一部分介绍多维的卡尔曼滤波及其如何在矩阵中表示,涉及线性代数,将展示卡尔曼滤波的数学推导和动态系统模型,最终设计处一个多维的卡尔曼滤波算法。

三、扩展内容与现实问题

  包括扩展卡尔曼滤波器无迹卡尔曼滤波和在解决现实困难问题应用的卡尔曼滤波

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

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

相关文章

解决Spring Data Jpa 实体类自动创建数据库表失败问题

先说一下我遇到的这个问题,首先我是通过maven创建了一个spring boot的工程,引入了Spring data jpa,结果实体类创建好之后,运行工程却没有在数据库中自动创建数据表。 找了半天发现是一个配置的问题! hibernate.ddl-auto节点的配…

【python学习笔记】:条件语句

Python 条件语句 Python条件语句是通过一条或多条语句的执行结果(True或者False)来决定执行的代码块。 可以通过下图来简单了解条件语句的执行过程: Python程序语言指定任何非0和非空(null)值为true,0 或者 null为fa…

Vue 中过滤器 filter 使用教程

Vue 过滤器 filter 使用教程文章目录Vue 过滤器 filter 使用教程一、过滤器1.1 过滤器使用的背景1.2 格式化时间的不同实现1.3 过滤器的使用1.4 过滤器总结一、过滤器 1.1 过滤器使用的背景 过滤器提供给我们的一种数据处理方式。过滤器功能不是必须要使用的,因为它…

DSP_TMS320F28377D_ADC学习笔记

前言 DSP各种模块的使用,基本上就是 GPIO复用配置、相关控制寄存器的配置、中断的配置。本文主要记录本人对ADC模块的学习笔记。TMS320F28377D上面有24路ADC专用IO,这意味着不需要进行GPIO复用配置。 只需要考虑相关控制寄存器和中断的配置。看代码请直…

2023年湖北住建厅八大员各岗位题库精准小题库-启程别

2023年湖北住建厅八大员各岗位题库精准小题库-启程别 住建厅八大员(施工员、质量员、资料员、材料员、机械员、标准员、劳务员) 各岗位题库分2种: 1.住建厅八大员报名之后会有培训任务,完成培训任务学习才能安排考试,…

番外10:使用ADS对射频功率放大器进行非线性测试2(使用带宽20MHz的64QAM信号进行ACLR、EVM、CCDF测试)

番外10:使用ADS对射频功率放大器进行非线性测试2(使用带宽20MHz的64QAM信号进行ACLR、EVM、CCDF测试) 1、基本理论 功率放大器的非线性性能十分重要,特别是对于当前广泛使用的移动设备。由于其各种复杂的信号调制,功…

大数据系统重点

第一章 大数据计算系统概述 1 大数据计算框架概述 计算框架: 一种抽象,在其中提供相应的通用功能供用户编写代码以实现具体功能,从而形成面向应用的软件。 大数据计算框架:面向大数据的计算框架。 Hadoop Hadoop的运行过程 Hadoop的详细…

Android 9.0系统源码_通知服务(三)应用发送状态栏通知的流程

前言 应用发送一个显示在状态栏上的通知,对于移动设备来说是很常见的一种功能需求,本篇文章我们将会结合Android9.0系统源码具体来分析一下,应用调用notificationManager触发通知栏通知功能的源码流程。 一、应用触发状态栏通知 应用可以通…

专题:一看就会的C++类模板讲解 (1)

目录 一.类模板的作用 二.类模板的定义: 三.类模板的声明格式: 四.类模板对象 五.再举一个例子 一.类模板的作用 面向对象的程序设计编程实践中,我们可能会面临这样的问题:要实现比较两个数的大小。明明比较两个数的方法都一样…

小米mix2s刷win11和android双系统

在给电脑安装系统的过程中,可能会因为各种原因出现windows无法安装的情况,我在给小米mix2s安装win11时发现出现了“计算机意外地重新启动或遇到错误,windows无法安装”的情况,下面就来教一下大家两种解决方法,希望可以…

进行新类检测以及概念漂移适应的半监督分类框架SACCOS论文阅读笔记

介绍 本文主要想解决基于聚类的概念漂移检测方法中常做出的强假设问题,即假设同类比较接近,异类比较远离,并且还假设新类别出现时通常会连续大量出现。 针对这些问题,本文提出了一种基于数据流的半监督自适应分类框架SACCOS&…

程序员看过都说好的资源网站,看看你都用过哪些?

程序员必备的相关资源网站一.图片专区1.表情包(1)发表情(2)逗比拯救世界(3)搞怪图片生成(4)哇咔工具2.图标库(1)Font Awesome(2)iconf…

基于vscode开发vue项目的详细步骤教程 2 第三方图标库FontAwesome

1、Vue下载安装步骤的详细教程(亲测有效) 1_水w的博客-CSDN博客 2、Vue下载安装步骤的详细教程(亲测有效) 2 安装与创建默认项目_水w的博客-CSDN博客 3、基于vscode开发vue项目的详细步骤教程_水w的博客-CSDN博客 目录 六、第三方图标库FontAwesome 1 安装FontAwesome 解决报…

vulnhub靶场NAPPING: 1.0.1教程

靶场搭建靶机下载地址:Napping: 1.0.1 ~ VulnHub直接解压双击ova文件即可使用软件:靶机VirtualBox,攻击机VMware攻击机:kali信息收集arp-scan -l上帝之眼直接来看看网站可以注册账号,那就先试试。注册完后登入哦。要输…

阿里面试之Hr面,这个套路把我坑惨了......

作为技术类的测试工程师面试,往往要经过多次面试才能拿到心仪的offer,这里面有技术一面、二面…,甚至总监面等,还有一个必不可少的就是HR面,一般HR会出现在你面试的最前面和最后面,前面是了解你的基本情况&…

NCRE计算机等级考试Python真题(六)

第六套试题1、算法的时间复杂度是指A.执行算法程序所需要的时间B.算法程序的长度C.算法程序中的指令条数D.算法执行过程中所需要的基本运算次数正确答案: D2、下列关于栈的叙述中正确的是A.在栈中只能插入数据B.在栈中只能删除数据C.栈是先进先出的线性表D.栈是先进…

JavaEE简单示例——MyBatis多对多关联映射

简单介绍: 在实际的开发中,多对多的查询也是非常常见的。比如一个订单可以有很多的商品,而一个商品也可以被很多的订单所包含,而这种时候,如果我们有需求查询某一个订单内包含的所有商品;或者查询购买这个…

本地启动nacos注册服务

1.下载启动nacos(我的路径2.D:\nacos-server-2.0.0\nacos\bin) 2.单点模式启动 startup.cmd -m standalone 3.打开本地服务mysql、redis 4.配置nacos Nacos <1>创建命名空间&#xff0c;名称和项目pom一致 <2>ncaos导入配置或新建配置 <3>修改配置&#x…

Java培训:深入解读函数式接口

函数式编程是一种编程规范或一种编程思想&#xff0c;简单可以理解问将运算或实现过程看做是函数的计算。 Java8为了实现函数式编程&#xff0c;提出了3个重要的概念&#xff1a;Lambda表达式、方法引用、函数式接口。现在很多公司都在使用lambda表达式进行代码编写&#xff0c…

花7000报了培训班,3个月后我成功“骗”进了阿里,月薪拿16K....

“月薪4000元不如报名学IT&#xff0c;挑战年薪百万”这是大多数培训班在互联网上宣传的口号&#xff0c;简单的16个字却戳中了很多人的痛点&#xff0c;同龄人买车买房&#xff0c;自己却拿着微薄的工资连好一点的房子都租不起&#xff0c;这句口号 彻底激起了底层员工的焦虑&…