【问题标题】:Kalman filter behaviour卡尔曼滤波器行为
【发布时间】:2014-08-30 10:11:56
【问题描述】:

我在这里使用了卡尔曼滤波器:https://gist.github.com/alexbw/1867612

我对它有一个非常基本的了解。这是我的测试代码:

import matplotlib.pyplot as plt
import numpy as np
from Kalman import Kalman

n = 50    
d = 5

xf = np.zeros(n - d)
yf = np.zeros(n - d)

xp = np.zeros(d)
yp = np.zeros(d)

x = np.zeros(n)
y = np.zeros(n)

for i in range(n):

    if i==0:
        x[i] = 05
        y[i] = 20
        KLF = Kalman(6, 2)

    elif i< (n - d):
        xf[i], yf[i] = KLF.predict()  
        x[i] = x[i-1] + 1
        y[i] = y[i-1] + np.random.random() * 10
        NewPoint = np.r_[x[i], y[i]]
        KLF.update(NewPoint)
    else:
        x[i] = x[i-1] + 1
        y[i] = y[i-1] + np.random.random() * 10
        xp[n - i -1], yp[n - i -1] = KLF.predict()  
        NewPoint = np.r_[x[i] , yp[n - i -1]]
        KLF.update(NewPoint)

plt.figure(1)
plt.plot(x, y, 'ro') #original
plt.plot(xp, yp, 'go-') #predicted kalman
plt.plot(xf, yf, 'b') #kalman filter
plt.legend( ('Original', 'Prediction', 'Filtered') ) 
plt.show()

我的问题是,如果数据从 x=5, y=20 开始,为什么卡尔曼滤波从 0 开始? 这是某种标准行为吗?

谢谢

【问题讨论】:

    标签: python kalman-filter


    【解决方案1】:

    卡尔曼实例的当前状态存储在x属性中:

    In [48]: KLF = Kalman(6, 2)
    
    In [49]: KLF.x
    Out[49]: 
    matrix([[ 0.],
            [ 0.],
            [ 0.],
            [ 0.],
            [ 0.],
            [ 0.]])
    

    六个分量分别代表位置、速度和加速度。所以默认情况下,Kalman 实例从 (0,0) 开始,速度和加速度为零。

    在实例化KLF后,当i=1时,首先通过调用KLF.predictxfyf进行修改:

    xf[i], yf[i] = KLF.predict()
    

    这有两个问题。首先,xf[0], yf[0] 永远不会更新,所以它仍保留在(0, 0)。因此蓝线从(0, 0) 开始。

    第二个问题是KLF.x的当前状态默认为(0, 0),这是由于卡尔曼类的定义方式。 如果您希望KLF 实例以(5, 20) 的位置开始,那么您需要自己修改KLF.x

    还请记住,卡尔曼滤波器旨在通过先观察进行更新,然后再进行预测。 这在类文档字符串中有所提及。

    现在我不太了解您的代码的意图,所以我不会尝试理清 updates 应该如何出现在 predicts 之前,但就设置初始状态而言担心,你可以使用这个:

    if i==0:
        x[i] = 5
        y[i] = 20
        KLF = Kalman(6, 2)
        KLF.x[:2] = np.matrix((x[0], y[0])).T
        xf[i], yf[i] = KLF.predict()  
    

    产生

    【讨论】:

    • 太棒了。在这种情况下如何计算 R2 分数?你可以帮帮我吗?请。
    猜你喜欢
    • 2011-04-14
    • 1970-01-01
    • 2017-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-14
    • 2021-05-06
    相关资源
    最近更新 更多