Eu tenho uma trajetória de um objeto em um espaço 2D (uma superfície). A trajetória é dada como uma sequência de (x,y)
coordenadas. Sei que minhas medições são barulhentas e às vezes tenho discrepâncias óbvias. Então, eu quero filtrar minhas observações.
Tanto quanto eu entendi o filtro Kalman, ele faz exatamente o que eu preciso. Então, eu tento usá-lo. Encontrei uma implementação em python aqui . E este é o exemplo que a documentação fornece:
from pykalman import KalmanFilter
import numpy as np
kf = KalmanFilter(transition_matrices = [[1, 1], [0, 1]], observation_matrices = [[0.1, 0.5], [-0.3, 0.0]])
measurements = np.asarray([[1,0], [0,0], [0,1]]) # 3 observations
kf = kf.em(measurements, n_iter=5)
(filtered_state_means, filtered_state_covariances) = kf.filter(measurements)
(smoothed_state_means, smoothed_state_covariances) = kf.smooth(measurements)
Eu tenho alguns problemas com a interpretação de entrada e saída. Eu acho que measurements
é exatamente isso que são minhas medidas (coordenadas). Embora eu esteja um pouco confuso porque as medidas no exemplo são números inteiros.
Eu também preciso fornecer alguns transition_matrices
e observation_matrices
. Quais valores devo colocar lá? O que essas matrizes significam?
Finalmente, onde posso encontrar minha saída? Deveria ser filtered_state_means
ou smoothed_state_means
. Essas matrizes têm formas corretas (2, n_observations)
. No entanto, os valores nessa matriz estão muito longe das coordenadas originais.
Então, como usar esse filtro Kalman?