3

我可以运行pykalman 文档中给出的简单 pykalman Kalman Filter 示例:

import pykalman
import numpy as np
kf = pykalman.KalmanFilter(transition_matrices = [[1, 1], [0, 1]], observation_matrices = [[0.1, 0.5], [-0.3, 0.0]])
measurements = np.asarray([[1,0], [0,0], [0,1]])  # 3 observations
(filtered_state_means, filtered_state_covariances) = kf.filter(measurements)
print filtered_state_means

这会正确返回状态估计(每个观察一个):

[[ 0.07285974  0.39708561]
 [ 0.30309693  0.2328318 ]
 [-0.5533711  -0.0415223 ]]

但是,如果我只提供一个观察结果,则代码将失败:

import pykalman
import numpy as np
kf = pykalman.KalmanFilter(transition_matrices = [[1, 1], [0, 1]], observation_matrices = [[0.1, 0.5], [-0.3, 0.0]])
measurements = np.asarray([[1,0]])  # 1 observation
(filtered_state_means, filtered_state_covariances) = kf.filter(measurements)
print filtered_state_means

出现以下错误:

ValueError: could not broadcast input array from shape (2,2) into shape (2,1)

如何使用 pykalman 仅使用一次观察来更新初始状态和初始协方差?

4

2 回答 2

2

来自文档: http: //pykalman.github.io/#kalmanfilter

filter_update(filtered_state_mean, filtered_state_covariance, observation=None, transition_matrix=None, transition_offset=None, transition_covariance=None, observation_matrix=None, observation_offset=None, observation_covariance=None)

这会在时间 t 获取过滤状态均值和过滤状态协方差,以及在 t+1 的观察,并返回 t+1 的状态均值和状态协方差(用于下一次更新)

于 2015-09-08T06:40:15.967 回答
1

如果我正确理解卡尔曼滤波器算法,您可以仅使用一次观察来预测状态。但是,增益和协方差将相差甚远,预测将与实际状态相去甚远。您需要给卡尔曼滤波器一些观察值作为训练集以达到稳定状态

于 2017-06-23T22:17:18.170 回答