我试图使用卡尔曼滤波数据集的GPS数据,以减少噪音。为此,我检查了是否已经有了一个在线实现,并找到了pykalman。我试着使用它,但出于某种原因,我不知道我应该如何正确地分配矩阵。当我尝试运行它时,它告诉我我有一个维度错误。首先,我要做的是:我想让卡尔曼滤波器用旧的位置+速度估计下一次的位置。下一步的速度就是旧的速度。每一个时间步骤都是非常精确的1秒。我有x和y方向的度量,对于x_t、y_t、vx_t、vy_t,过渡矩阵应该如下所示(我认为):
transition_matrix = np.array([[1, 0,1,0],
[0, 1,0,1],
[0,0,1,0],
[0,0,0,1]])我的测量结果如下:
[[ 7.616984 47.53661 ]
[ 7.616999 47.536629]
[ 7.616997 47.536635]
...
[ 7.617117 47.536999]
[ 7.617117 47.536999]
[ 7.617117 47.536999]]到目前为止,我尝试过的是:我试着拼凑一下,它是如何从各种在线资源中运行的,并想出了如下结论:
import numpy as np
import pykalman
import geopandas
measurments= np.asarray(gdf[["Longitude_deg", "Latitude_deg"]])
#gdf is a geopandas dataframe, but no i'm not currently using the geometry of it.
transition_matrix = np.array([[1, 0,1,0],
[0, 1,0,1],
[0,0,1,0],
[0,0,0,1]])
#the pykalman documentation says the model parameter can but don't have to be specified and it will simply use defaults for unspecified parameters:
kf = pykalman.KalmanFilter(
transition_matrices =transition_matrix
)
(smoothed_state_means, smoothed_state_covariances) = kf.smooth(measurments)尝试运行最后一部分将给我以下错误:
形状(2,1)和(2,)不对齐:1 (dim 1) != 2 (dim 0)
据我所知,所使用的矩阵没有正确的大小可用于彼此。一般来说,我对矩阵的理解是非常有限的。我希望有人能帮我。
发布于 2021-02-02 10:24:06
根据您的模型,您的状态向量如下:[x, y, v_x, v_y],您只观察(测量) [x, y]。因此,您需要正确地定义度量矩阵H,它将真实的状态空间映射到观察到的空间:z=Hx + noise。所以在你的例子中,这是非常简单的:
observation_matrix = np.array(
[[1, 0, 0, 0],
[0, 1, 0, 0]]
)这将适当地发挥作用:
kf = pykalman.KalmanFilter(
transition_matrices=transition_matrix,
observation_matrices=observation_matrix
)https://stackoverflow.com/questions/66007351
复制相似问题