칼만필터란 무엇인가, Python(파이썬) filterpy/kalman_filter 해석
칼만 필터는 측정된 데이터를 기반으로 통계적 예측을 하는 알고리즘이다. an optimal recursive data processing algorithm이라고 불린다.
잡음이 포함되어 있는 선형 역학계의 상태를 추적하는 재귀 필터로 해당 순간에만 측정한 결과만 사용한 것보다는 좀 더 정확한 결과를 기대할 수 있다.
크게 예측과 업데이트, 두 가지로 나눌 수 있다. 예측은 현재 상태 예측이고, 업데이트는 현재 상태에서 관측된 측정까지 포함한 값을 통해서 더 정확한 예측을 하는 것이다.
칼만 필터는 다양한 예측 분야에서 사용되고 있는데 LKF보다는 EKF, UKF등이 더 많이 사용된다.(실제 환경은 비선형이고 잡음도 가우시안(Gaussian)이 아닌 경우가 많기 때문)
*선형 역학계 : 통계학 용어로, 잠재 변수가 마르코프 연쇄에 연결되어있고 선형 관계가 주변 변수 사잉에 속해 있는 베이시안 모형의 일종이다.
* LKF : Linear Kalman Filter
* EKF : Extended Kalman Filter, 선형성 가정을 완화시켜 확장시킨 버전, 최적의 수행은 아니고 초기 추정이 틀릴경우 발산할 수 있음
* UKF : the Unscented Kalman Filter, 상태 천이와 관찰모델이 매우 비선형일 경우 사용됨
파이썬 칼만필터 코드 해석 https://github.com/rlabbe/filterpy/blob/master/filterpy/kalman/kalman_filter.py
-매개변수
dim_x : 상태 변수의 수로, 두 개체의 속도와 위치를 추적하고 있다면 4가 된다 (두 개체 * (속도 + 위치))
dim_z : 측정 입력(measurement input)의 수, 센서가 (x, y)위치를 제공한다면 2가 된다
dim_u : 제어 입력(control input)의 수
-속성
x : numpy.array(dim_x, 1), State estimate vector 상태 측정 벡터
P : numpy.array(dim_x, dim_x), Covariance matrix 공분산 행렬, 여러 변수와 관련된 공분산을 포함하는 정방형 행렬
R : numpy.array(dim_z, dim_z), Measurement noise matrix 측정 잡음 행렬
Q : numpy.array(dim_x, dim_x), Process noise matrix 프로세스 잡음 행렬
B : numpy.array(dim_x, dim_z), Control transition matrix, 제어 천이 행렬
F : numpy.array(), State transition matrix 상태 천이 행렬, 시간의 변화에 따른 상태의 변화를 야기시키는 행렬
H : numpy.array(dim_x, dim_x), Measurement function, 측정 기능
-읽기 속성
y : numpy.array, 갱신 단계의 나머지
K : numpy.array(dim_x, dim_z), 업데이트 단계의 칼만 게인
S : numpy.array, 측정 공간에 불확실하게 투영되는 시스템