首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >卡尔曼滤波行为

卡尔曼滤波行为
EN

Stack Overflow用户
提问于 2014-08-30 10:11:56
回答 1查看 933关注 0票数 4

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

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

代码语言:javascript
复制
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开始?这是某种标准的行为吗?

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-08-30 10:37:53

Kalman实例的当前状态存储在x属性中:

代码语言:javascript
复制
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进行第一次修改

代码语言:javascript
复制
xf[i], yf[i] = KLF.predict()

这有两个问题。首先,xf[0], yf[0]从来没有更新过,所以它仍然保留在(0, 0)上。因此,从(0, 0)开始的蓝线。

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

还请记住,Kalman滤波器意味着首先要用观测来更新,然后再进行预测。在类docstring中提到了这一点。

现在,我不太明白您的代码的意图,所以我不打算尝试将updates放在predicts之前,但是就设置初始状态而言,您可以使用以下方法:

代码语言:javascript
复制
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()  

产额

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25581263

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档