в последние дни я использовал pykalman для коррекции координат GPS с измерениями ускорения и скорости, что работает нормально. Теперь я хотел бы объединить полученные координаты (1) со вторым измерением координат (2), которое является очень точным, но имеет гораздо более низкую скорость каротажа. Я замаскировал все элементы второго измерения, которые не имеют значения (== 0).
Моя проблема в том, что я не знаю, как должны выглядеть матрицы. Может быть, фильтр Калмана даже не подходит для того, что я хочу сделать.
Заранее большое спасибо.
for i in range(len(lat1)):
if i == 0:
measurements = ma.asarray([(lat1[i], long1[i], lat2[i], long2[i])])
else:
measurements = ma.append(measurements, [[lat1[i], long1[i], lat2[i], long2[i]]], axis=0)
for i in range(len(measurements)):
if measurements[i, 2] == 0:
measurements[i, 2] = ma.masked
if measurements[i, 3] == 0:
measurements[i, 3] = ma.masked
initial_state_mean = ma.asarray([measurements[0, 0], measurements[0, 1], measurements[0, 2], measurements[0, 3]])
transition_matrix = [[0, 0, 1, 0],
[0, 0, 0, 1],
[0, 0, 0, 0],
[0, 0, 0, 0]]
observation_matrix = [[1, 0, 0, 0],
[0, 1, 0, 0],
[0, 0, 1, 0],
[0, 0, 0, 1]]
kf1 = KalmanFilter(transition_matrices=transition_matrix,
observation_matrices=observation_matrix,
initial_state_mean=initial_state_mean,
observation_covariance=[[0.1, 0, 0, 0],
[0, 0.1, 0, 0],
[0, 0, 1, 0],
[0, 0, 0, 1]],
transition_covariance=[[0, 0, 1, 0],
[0, 0, 0, 1],
[0, 0, 0, 0],
[0, 0, 0, 0]]
)
(smoothed_state_means, smoothed_state_covariances) = kf1.smooth(measurements)
lat_corr = smoothed_state_means[:, 0]
long_corr = smoothed_state_means[:, 1]