칼만 필터를 사용하는 방법?


12

2D 공간 (표면)에 객체의 궤도가 있습니다. 궤적은 일련의 (x,y)좌표로 제공됩니다. 측정 값이 시끄럽고 때로는 특이 치가 있습니다. 따라서 관측치를 필터링하고 싶습니다.

내가 칼만 필터를 이해하는 한, 내가 필요한 것을 정확하게 수행합니다. 그래서 나는 그것을 사용하려고합니다. 여기 에서 파이썬 구현을 발견했습니다 . 그리고 이것은 문서가 제공하는 예입니다.

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)

입력 및 출력 해석에 문제가 있습니다. 그것이 measurements바로 내 측정치 (좌표)와 같습니다. 예제의 측정 값이 정수이므로 약간 혼동됩니다.

나는 또한 몇 가지를 제공해야 transition_matrices하고 observation_matrices. 거기에 어떤 가치를 두어야합니까? 이 행렬은 무엇을 의미합니까?

마지막으로 출력을 어디에서 찾을 수 있습니까? filtered_state_means또는 이어야 smoothed_state_means합니다. 이 배열은 올바른 모양을 갖습니다 (2, n_observations). 그러나이 배열의 값이 원래 좌표와 너무 멀리 있습니다.

그렇다면이 칼만 필터를 사용하는 방법은 무엇입니까?


행렬은 칼만 필터에 의해 추정됩니다. 최적화 알고리즘 등에 대한 시작 값만 제공하면됩니다.
Richard Hardy

1
상태 공간 모델을 지정하여 시작해야합니다. 상태 공간 모델은 관찰을 관찰되지 않은 상태와 관련시키고 시간이 지남에 따라 상태가 어떻게 전개되는지 설명합니다. 그러면 상태 오류의 공분산 행렬 ( "프로세스 노이즈")과 관측 오류에 대한 공분산 행렬 (위키 백과 페이지의 F, H, Q 및 R), A, 링크에서 C, Q & R). Kalman FIlter는 모든 것을 지정한 후 매번 (관찰 할 수없는) 상태 및 분산 공분산 행렬을 추정하는 알고리즘입니다.
Glen_b-복지 주 모니카

당신이 연결하는 함수는 EM을 사용하여 일반적으로 지정하는 것을 추정 할 수 있기 때문에 표준 KF와 약간 다른 것을 구현하는 것처럼 보입니다.
Glen_b-복지 주 모니카

답변:


8

다음은 유용한 2 차원 칼만 필터 의 입니다. 파이썬으로되어 있습니다.

상태 벡터는 x0 방향의 위치, x1 방향의 위치, x0 방향의 속도 및 x1 방향의 속도의 네 가지 변수로 구성됩니다. 주석 처리 된 행 "x : 위치 및 속도의 초기 상태 4 튜플 : (x0, x1, x0_dot, x1_dot)"을 참조하십시오.

시스템 / 객체 다음 상태의 예측을 용이하게하는 상태 전이 행렬 (F)은 위치 및 속도의 현재 상태 값을 결합하여 위치 (즉, x0 + x0_dot 및 x1 + x1_dot) 및 현재 상태 속도 값을 예측한다 속도 (예 : x0_dot 및 x1_dot).

측정 행렬 (H)은 x0 및 x1 위치의 위치 만 고려하는 것으로 보입니다.

모션 노이즈 매트릭스 (Q)는 4x4 단위 매트릭스로 초기화되고 측정 노이즈는 0.0001로 설정됩니다.

이 예제를 통해 코드를 작동시킬 수 있기를 바랍니다.


1

칼만 필터는 모델 기반 예측 필터입니다. 따라서 필터를 올바르게 구현하면 입력에서 정기적으로 측정 할 때 출력에서 ​​시간 지연이 거의 또는 전혀 발생하지 않습니다. 모델이 항상 정적이 아니기 때문에 라이브러리를 사용하는 대신 kalman 필터를 직접 구현하는 것이 항상 더 간단하다는 것을 알았습니다.

필터가 작동하는 방식은 프로세스의 수학적 설명을 사용하여 이전 상태를 기반으로 현재 값을 예측 한 다음 전류 센서 측정을 기반으로 해당 추정값을 수정하는 것입니다. 따라서 측정 된 상태와의 관계가 모델에 정의되어있는 한 은닉 상태 (측정되지 않음) 및 모델에 사용되는 기타 매개 변수를 추정 할 수도 있습니다.

알고리즘을 이해하지 못하면 필터를 사용하려고 할 때 실수를 저지르기가 매우 쉽기 때문에 칼만 필터를 더 자세히 연구 할 것을 제안합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.