Фильтр Калмана (pykalman) с двумя измерениями для одной и той же переменной - PullRequest
0 голосов
/ 20 октября 2019

в последние дни я использовал 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]
...