状态空间模型与卡尔曼滤波

这篇具有很好参考价值的文章主要介绍了状态空间模型与卡尔曼滤波。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

1)说起卡尔曼滤波,必有状态空间模型,两个离不开。
2)从卡尔曼滤波名字就可以看出来,其更倾向于滤波。即对系统噪声和测量噪声进行过滤优化,得出更优的结果。如果系统噪声比较强,那么最终结果就会倾向于测量结果,而当测量噪声强时,最终结果就倾向于系统状态方程描述的结果。
3)卡尔曼滤波是个迭代计算过程,不断重复这两步,预测和校正(更新)。校正就是用测量结果和状态方程结果不断计算卡尔曼增益K。K越大越详细测量结果,K越小越相信状态方程描述的结果。
4)卡尔曼滤波必须先知道系统状态方程,只有对系统较为熟悉才能写出。所以不知道系统时,采用最小二乘法,而不是卡尔曼滤波。如果状态方程写错了,卡尔曼滤波效果也许并不好。

1.状态空间模型

状态空间模型 (State Space Model),包括两个方程模型:
一是状态方程模型,反映动态系统在输入变量作用下在某时刻所转移到的状态;
二是输出或测量方程模型,它将系统在某时刻的输出和系统的状态及输入变量联系起来。
状态空间模型,数学,算法,人工智能,算法

状态空间模型求解算法的核心是Kalman滤波。

2.卡尔曼滤波

卡尔曼滤波的目的:由于人的主观认识(数学模型的建立而产生的理论状态值)和测量(传感器等测量值)都不准确,引入卡尔曼滤波,综合两者的误差,得到最优的对于真实值的预测。

以前有一种状态估计方法称为维纳滤波,它在第二次世界大战期间得到了应用。其缺点在于:①必须使用全部的历史观测数据,存储量和计算量都很大;②当获得新的观测数据时,没有合适的递推算法;③很难用于非平稳过程的滤波问题。为克服上述缺点,在20世纪60年代初,美国数学家R.E.卡尔曼(R.E.Kalman)等人发展了一种递推滤波方法,即现称的卡尔曼滤波。

斯坦利·施密特(Stanley Schmidt)首次实现了卡尔曼滤波器。卡尔曼在NASA埃姆斯研究中心访问时,发现他的方法对于解决阿波罗计划的轨道预测很有用,后来阿波罗飞船的导航电脑使用了这种滤波器。 关于这种滤波器的论文由Swerling (1958), Kalman (1960)与 Kalman and Bucy (1961)发表。

Kalman滤波算法的本质就是利用两个正态分布的融合仍是正态分布这一特性进行迭代而已。比如两个秤去测量一个苹果的重量,每个秤的测量存在误差,是正态分布。两个秤就是两个正态分布。那么我们将两个秤的结果通过某种算法合并就能得到更真实的苹果重量,而不是相信其中一个秤。

状态空间模型,数学,算法,人工智能,算法

卡尔曼滤波核心公式如下:

状态空间模型,数学,算法,人工智能,算法

不考虑u及B时,简写为:
状态空间模型,数学,算法,人工智能,算法

公式推导参见,【【卡尔曼滤波器】1_递归算法_Recursive Processing-哔哩哔哩】 https://b23.tv/XOOAYUK.

3.扩展卡尔曼滤波(EKF)

当状态方程和测量方程非线性方程时,就考虑扩展卡尔曼滤波。

对于非线性滤波,至今未得到完善的解法,通常的处理方法是利用线性化技巧将非线性滤波问题转化为一个近似的线性滤波问题,套用线性滤波理论得到求解原非线性滤波问题的次优滤波算法,其中最常用的线性化方法是泰勒级数展开,得到的滤波方法即为扩展卡尔曼滤波。对于二阶EKF,其滤波性能远比一阶的要好,但是二阶以上的效果提升就不明显了,所以一般就是用一阶、二阶,但是二阶计算量比较大,一般都用一阶的。
状态空间模型,数学,算法,人工智能,算法

4.状态空间模型与ARMAX

1)每一个有外部变量的自回归移动平均系统(ARMAX)或可用有理传递函数表示的系统都可以转换成用状态空间表示的系统,从而能用卡尔曼滤波进行计算。但是只有简单的状态空间模型可以以ARIMA形式精确表示。
2)与ARIMA相比,状态空间模型使您可以对更复杂的流程进行建模,具有可解释的结构并轻松处理数据不规则性;但是为此,您需要付出的代价是增加模型的复杂性,更难进行校准。

5.Kalman与最小二乘法

最小二乘(Least Square)是优化方法中的一种特殊情况,而卡尔曼滤波又是最小二乘法的一种特殊情况。 古典最小二乘中,假设了每一次测量的权重相同,但事实上这样并不合理,后来演化为加权最小二乘法,至此最小二乘估计所做的都是批处理(Batch),这样比较占内存,不符合动态系统状态估计的需要,即每一次更新输入时,都要从新计算之前所有的记录值。而后,提出递推最小二乘法,模型就不用每次都重新计算了。与递归最小二乘相似,卡尔曼滤波加入了系统内部变化的考虑。即利用process model对系统在下一时刻的状态进行预测。

当对于系统不够了解时,使用最小二乘法比较合适,而对于系统了解比较多时,可以采用Kalman滤波。改变量测噪声、系统噪声都会对Kalman滤波的效果产生影响,而不会对最小二乘滤波产生影响,而改变最小二乘的阶数会对其产生影响.

6.Kalman与HMM

HMM 模型适用于隐变量是离散的值的时候,对于连续隐变量的 HMM,常用卡尔曼滤波(Kalman Filtering)描述线性高斯模型的状态变量,使用粒子滤波(Particle Filter)来表述非高斯非线性的状态变量。

《Advanced Digital Signal Processing and Noise Reduction 4th Edition》中的描述:
状态空间模型,数学,算法,人工智能,算法

7.代码

可以参考开源git:http://github.com/rlabbe/filterpy

import numpy as np
import matplotlib.pyplot as plt
from filterpy.kalman import KalmanFilter
from filterpy.common import Q_discrete_white_noise

np.random.seed(2)


def demo():
    dt = 0.1
    F = np.array([[1, dt], [0, 1]])
    Q = 1e-2 * np.array([[1 / 4 * dt ** 4, 1 / 2 * dt ** 3], [1 / 2 * dt ** 3, dt ** 2]])
    R = 2.
    itr = 100

    real_state = []
    x = np.array([10, 5]).reshape(2, 1)

    for i in range(itr):
        real_state.append(x[0, 0])
        x = np.dot(F, x) + np.random.multivariate_normal(mean=(0, 0), cov=Q).reshape(2, 1)

    measurements = [x + np.random.normal(0, R) for x in real_state]

    # initialization
    P = np.array([[10, 5], [5, 10]])
    x = np.random.multivariate_normal(mean=(10, 5), cov=P).reshape(2, 1)

    # filter
    kf = KalmanFilter(dim_x=2, dim_z=1)  # dim_x:隐状态大小,dim_z:量测大小
    # 定义参数
    kf.x = x  # 初始状态[位置,速度]
    kf.F = F  # 状态转移矩阵
    kf.H = np.array([[1., 0.]])  # 量测矩阵
    kf.P = P  # 初始状态协方差
    kf.R = R  # 量测噪声
    kf.Q = Q_discrete_white_noise(dim=2, dt=dt, var=1e-2)  # 过程(系统)噪声

    filter_result = list()
    filter_result.append(x)
    for i in range(1, itr):
        z = measurements[i]
        kf.predict()
        kf.update(z)
        filter_result.append(kf.x)
    filter_result = np.squeeze(np.array(filter_result))

    return measurements, real_state, filter_result

8.参考

1)部分公式来源于:【【卡尔曼滤波器】1_递归算法_Recursive Processing-哔哩哔哩】 https://b23.tv/XOOAYUK.
2)卡尔曼滤波(kalman)相关理论以及与HMM、最小二乘法关系https://blog.51cto.com/u_13206712/5839786
3)《Advanced Digital Signal Processing and Noise Reduction 4th Edition》文章来源地址https://www.toymoban.com/news/detail-778396.html

到了这里,关于状态空间模型与卡尔曼滤波的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【算法系列】卡尔曼滤波算法

    ·【算法系列】卡尔曼滤波算法 ·【算法系列】非线性最小二乘求解-直接求解法 ·【算法系列】非线性最小二乘求解-梯度下降法 ·【算法系列】非线性最小二乘-高斯牛顿法  ·【算法系列】非线性最小二乘-列文伯格马夸尔和狗腿算法  文章目录 系列文章 文章目录 前言 一、

    2024年02月12日
    浏览(29)
  • 卡尔曼滤波模型及Matlab模型建立

    目录 一、卡尔曼滤波 1.概念解析: 2.卡尔曼滤波的最优估计模型 3.实例——小车匀加速直线运动 4.Matlab建模  二、扩展卡尔曼滤波(EKF:Extended KAlman Filter) 1.非线性系统的局部线性化 2.扩展卡尔曼滤波模型         卡尔曼滤波的目的:由于人的主观认识(数学模型的建立而产

    2023年04月10日
    浏览(29)
  • 卡尔曼滤波算法原理及示例

      例程:物体做匀速运动每秒运动1m,观测器观测方差为1m

    2024年02月15日
    浏览(27)
  • 算法介绍及实现——卡尔曼滤波

            本文主要介绍卡尔曼滤波的推导过程及建模步骤,是网站的学习笔记。本文主要是通过例子来引出卡尔曼滤波的建模思想及算法步骤。 参考网站:(这个网站讲得真的很详细很清楚,层层递进,逻辑清晰) Kalman Filter Tutorial https://www.kalmanfilter.net/ 目录 一、引言

    2024年02月14日
    浏览(29)
  • SOC计算方法:卡尔曼滤波算法

    卡尔曼滤波算法 是一种经典的状态估计算法,它广泛应用于控制领域和信号处理领域。在电动汽车领域中,卡尔曼滤波算法也被广泛应用于电池管理系统中的电池状态估计。其中,电池的状态包括电池的剩余容量(SOC)、内阻、温度等。 并且 卡尔曼滤波法 也是一种比较精确

    2024年02月02日
    浏览(24)
  • 【状态估计】变分贝叶斯近似的递归噪声自适应卡尔曼滤波(Matlab代码实现)

    💥💥💞💞 欢迎来到本博客 ❤️❤️💥💥 🏆博主优势: 🌞🌞🌞 博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️ 座右铭: 行百里者,半于九十。 📋📋📋 本文目录如下: 🎁🎁🎁 目录 💥1 概述 📚2 运行结果 🎉3 参考文献 🌈4 Matlab代码及文献 文献来

    2024年02月09日
    浏览(32)
  • 滤波算法 | 无迹卡尔曼滤波(UKF)算法及其MATLAB实现

    本文接着分享位姿跟踪和滤波算法中用到的一些常用程序,希望为后来者减少一些基础性内容的工作时间。以往分享总结见文章:位姿跟踪 | 相关内容目录和链接总结(不断更新中~~~) 本文分享无迹卡尔曼滤波(UKF)算法的一些基本公式和MATLAB程序。 首先简单介绍一下UKF滤

    2023年04月15日
    浏览(36)
  • 卡尔曼滤波算法的五大核心公式含义

    在SLAM中经常会用的卡尔曼滤波算法,这里简单的记录一下卡尔曼滤波算法的五大核心公式,以便后续查询,公式的推导不在作赘述,直接放出卡尔曼滤波算法的五大核心公式: 1. 状态更新方程 x k ^ = F k x ^ k − 1 + B k u k hat{x_k}={F_k}hat{x}_{k-1}+{B_k}{u_k} x k ​ ^ ​ = F k ​ x ^ k −

    2024年02月05日
    浏览(30)
  • 了解卡尔曼滤波器4--非线性状态估算器(EKF,UKF,PF)

            一般来说,我们希望我们的生活是线性的,就像这条线,这可能表示成功、收入或者幸福。但实际上,生活并不是线性的,它充满了起伏,有时甚至更复杂。         如果您是工程师,您经常会需要处理非线性系统,为了帮助您,我们将讨论非线性状态估算器

    2023年04月20日
    浏览(42)
  • 【状态估计】粒子滤波器、Σ点滤波器和扩展/线性卡尔曼滤波器研究(Matlab代码实现)

    💥💥💞💞 欢迎来到本博客 ❤️❤️💥💥 🏆博主优势: 🌞🌞🌞 博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️ 座右铭: 行百里者,半于九十。 📋📋📋 本文目录如下: 🎁🎁🎁 目录 💥1 概述 📚2 运行结果 2.1 扩展卡尔曼滤波 2.2 线性卡尔曼滤波 

    2024年02月09日
    浏览(29)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包