随着时间的推移改变已知方差的卡尔曼滤波?
Kalman Filterin with changing known variance over time?
我有一个简单的卡尔曼模型:
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 未知。如果模型可以估计 if,那就太好了。如果没有,也可以提供,因为存在近似估计。
非常感谢任何提示。
PS: 我也查了图书馆pykalman。 https://pykalman.github.io/#mathematical-formulation。似乎这里的方差是假设随着时间的推移是恒定的。
如果您需要在估计期间更改转换协方差(矩阵 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_covariance 和 observation_covariance
看看我的post:
在这个例子中,我根据测量来自的传感器动态修改了观察协方差:
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
,否则库将无法工作。
我有一个简单的卡尔曼模型:
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 未知。如果模型可以估计 if,那就太好了。如果没有,也可以提供,因为存在近似估计。
非常感谢任何提示。
PS: 我也查了图书馆pykalman。 https://pykalman.github.io/#mathematical-formulation。似乎这里的方差是假设随着时间的推移是恒定的。
如果您需要在估计期间更改转换协方差(矩阵 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_covariance 和 observation_covariance
看看我的post:
在这个例子中,我根据测量来自的传感器动态修改了观察协方差:
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
,否则库将无法工作。