美文网首页
2018-06-10 py4fi(2)--卡尔曼滤波的实现(1)

2018-06-10 py4fi(2)--卡尔曼滤波的实现(1)

作者: 007刚下班 | 来源:发表于2018-06-10 16:00 被阅读0次

卡尔曼的相关概念知识就不在本篇中复述了
第一篇主要提及一下几个核心的点和Python实现案例

工作流程如下图:

工作流程图

核心方程组:


先验估计方程.png
先验估计协方差矩阵.png
观测向量方程.png
卡尔曼增益.png
更新后的状态估计.png
更新后的协方差估计.png

Python实现案例:

卡尔玛滤波的实现
"""
# 这里是假设A=1,H=1的情况

# 参数初始化
n_iter = 50
sz = (n_iter,)  # size of array
x = -0.37727  # truth value (typo in example at top of p. 13 calls this z)真实值
z = np.random.normal(x, 0.1, size=sz)  # observations (normal about x, sigma=0.1)观测值

Q = 1e-5  # process variance

# 分配数组空间
xhat = np.zeros(sz)  # a posteri estimate of x 滤波估计值
P = np.zeros(sz)  # a posteri error estimate滤波估计协方差矩阵
xhatminus = np.zeros(sz)  # a priori estimate of x 估计值
Pminus = np.zeros(sz)  # a priori error estimate估计协方差矩阵
K = np.zeros(sz)  # gain or blending factor卡尔曼增益

R = 0.1 ** 2  # estimate of measurement variance, change to see effect

# intial guesses
xhat[0] = 0.0
P[0] = 1.0

for k in range(1, n_iter):
    # 预测
    xhatminus[k] = xhat[k - 1]  # X(k|k-1) = AX(k-1|k-1) + BU(k) + W(k),A=1,BU(k) = 0
    Pminus[k] = P[k - 1] + Q  # P(k|k-1) = AP(k-1|k-1)A' + Q(k) ,A=1

    # 更新
    K[k] = Pminus[k] / (Pminus[k] + R)  # Kg(k)=P(k|k-1)H'/[HP(k|k-1)H' + R],H=1
    xhat[k] = xhatminus[k] + K[k] * (z[k] - xhatminus[k])  # X(k|k) = X(k|k-1) + Kg(k)[Z(k) - HX(k|k-1)], H=1
    P[k] = (1 - K[k]) * Pminus[k]  # P(k|k) = (1 - Kg(k)H)P(k|k-1), H=1

pylab.figure()
pylab.plot(z, 'k+', label='noisy measurements')  # 观测值
pylab.plot(xhat, 'b-', label='a posteri estimate')  # 滤波估计值
pylab.axhline(x, color='g', label='truth value')  # 真实值
pylab.legend()
pylab.xlabel('Iteration')
pylab.ylabel('Voltage')

pylab.figure()
valid_iter = range(1, n_iter)  # Pminus not valid at step 0
pylab.plot(valid_iter, Pminus[valid_iter], label='a priori error estimate')
pylab.xlabel('Iteration')
pylab.ylabel('$(Voltage)^2$')
pylab.setp(pylab.gca(), 'ylim', [0, .01])
pylab.show()

相关文章

  • 2018-06-10 py4fi(2)--卡尔曼滤波的实现(1)

    卡尔曼的相关概念知识就不在本篇中复述了第一篇主要提及一下几个核心的点和Python实现案例 工作流程如下图: 核心...

  • 卡尔曼滤波

    把卡尔曼滤波写一下吧,思想很简单,不详细写了,就是根据方差实现的一种最优估计方法。 卡尔曼滤波五个基本的公式 1....

  • 卡尔曼滤波系列1_基础

    卡尔曼滤波系列1_基础 1 基础知识 [1] 卡尔曼增益最后会变成定值吗?[2] 如何通俗并尽可能详细解释卡尔曼滤...

  • 卡尔曼滤波及其无人驾驶应用

    无人驾驶汽车系统感知模块的重要技术——卡尔曼滤波,应用包括:卡尔曼滤波与行人状态估计扩展卡尔曼滤波(EKF)与传感...

  • 轻松理解卡尔曼滤波

    此前学习和实现卡尔曼滤波花费了很多时间,其实想要理解其原理并不算很复杂。只是简单套用卡尔曼滤波的公式,而没有系统理...

  • 卡尔曼滤波(2)

    在今天将主要讨论 3 个方面 数据融合(Data Fusion) 协方差矩阵(Covariance Matrix)...

  • 卡尔曼滤波(1)

    Optimal Recursive Data Processing Algorithm(最优化递归数字处理算法)卡...

  • 图文并茂,卡曼滤波

    ​卡尔曼滤波是如何工作? 看图说话! 我务必向大家介绍卡尔曼滤波器(Kalman Filter),因为它之所能, ...

  • iOS-卡尔曼滤波算法

    一:前言 滤波算法 用于过滤掉连续的数据中出现偏差较大的数据 二:卡尔曼滤波算法 <0>卡尔曼滤波的原理请自行百度...

  • 卡尔曼滤波

    卡尔曼公式 先以状态协方差随时间的传播性,得到先验估计(时间更新),再利用测量值和最小二乘估计,得到后验估计(状态...

网友评论

      本文标题:2018-06-10 py4fi(2)--卡尔曼滤波的实现(1)

      本文链接:https://www.haomeiwen.com/subject/ehafeftx.html