【问题标题】:Kalman Filterin with changing known variance over time?随时间改变已知方差的卡尔曼滤波?
【发布时间】:2019-10-28 23:18:06
【问题描述】:

我有一个简单的卡尔曼模型:

y_1_t = (1 + phi) * alpha_t + e_1_t 

y_2_t = (1 - phi) * alpha_t + e_2_t 

alpha_t+1 = alpha_t + s_t

现在我知道 e_1_t 和 e_2_t 随时间的变化 - 它们不是恒定的。有没有我可以用来估计这个模型的python包?

参数 phi 未知。如果模型可以估计是否会很棒。如果没有,也可以提供,因为存在近似估计。

非常感谢任何提示。

PS:我还检查了图书馆 pykalman。 https://pykalman.github.io/#mathematical-formulation。似乎这里假设方差随时间保持不变。

【问题讨论】:

  • 您想同时更改测量和系统噪声协方差还是只更改测量协方差?我在解释你的表达时遇到了一些问题。
  • @Anton 你好。我想修改测量表达式的协方差。因此,基于en.wikipedia.org/wiki/Kalman_filter 中的方程式,它将是 R_k。原因是我在系统之外有另一个“测量”,它告诉我观察结果有多准确。

标签: python bayesian kalman-filter pykalman pyro.ai


【解决方案1】:

如果您需要在估计期间更改转换协方差(矩阵Q)或测量协方差(矩阵R),您仍然可以使用您在问题中提到的pykalman 库。

看看函数filter_update()。如果您想将一些过滤器参数(尤其是协方差矩阵)从一个调用更改为另一个调用,这将非常有用。

函数调用如下所示:

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)

要修改协方差矩阵,您只需将自定义值放入 transition_covarianceobservation_covariance

在这里查看我的帖子:Kalman filter with varying timesteps

在此示例中,我根据测量来自的传感器动态修改了观察协方差:

    if Sensor[t] == 0:
        obs = None
        obs_cov = None
    else:
        obs = [X[t], Y[t]]

        if Sensor[t] == 1:
            obs_cov = np.asarray(R_1)
        else:
            obs_cov = np.asarray(R_2)

    filtered_state_means[t], filtered_state_covariances[t] = (
    kf.filter_update(
        filtered_state_means[t-1],
        filtered_state_covariances[t-1],
        observation = obs,
        observation_covariance = obs_cov)
    )

由于某种原因,必须将观察协方差转换为 np.asarray,否则该库将无法工作。

【讨论】:

  • 非常感谢。我会试试的。实际上很有趣,我已经看过你的帖子,虽然它可能会朝着那个方向发展!当缺少观察时,我的想法是放置一个虚拟观察并赋予它高方差(我认为如果观察不相关,它应该可以工作,但这只是一种特殊情况)。
猜你喜欢
  • 1970-01-01
  • 2014-09-28
  • 1970-01-01
  • 1970-01-01
  • 2011-04-14
  • 1970-01-01
  • 1970-01-01
  • 2023-03-23
  • 1970-01-01
相关资源
最近更新 更多