칼만필터는 노이즈가 존재하는 센서 측정값으로부터 노이즈가 제거된 정확한 값을 확률적인 추정을 해내는 데에 널리 사용되는 방법이고, estimated error covariance를 최소화한다는 의미에서 최적화라고 말할 수 있으며, "predict"와 "correct" estimator 루틴을 수행하는 수학적 식들의 집합이다.
다시 말하면, 최소자승법(Least Square)의 개념을 바탕으로 이전의 측정 데이터와 새로운 측정 데이터를 사용하여 데이터에 포함된 노이즈를 제거하여 새로운 결과를 estimate 하는 알고리즘이다. 여기서 필터란 측정 데이터에 포함된 불확실성(noise)을 필터링하는 것으로 노이즈를 동반한 측정데이터에서 원하는 신호를 골라내는 알고리즘으로 보면 된다. 확률적인 추정이라는 것은 노이즈를 정규분포(가우시안 분포)를 가지는 것으로 가정하기 때문이다. 이것이 칼만필터의 장점이자 단점으로 가우시안 분포로 가정하면 평균과 분산으로 그 특성이 완벽하게 표현가능해진다.

x_k : k시간에서의 시스템의 상태
x_k-1 : k-1시간에서의 시스템의 상태
w_k-1 : k-1시간에서의 process noise
v_k : k시간에서의 measurement noise
A, B, H : 시스템 매트릭스
Q : process noise covariance
R : measurement noise covariance
위의 식은 칼만필터의 기본식이다. 여기서 x_k는 k시간에서의 시스템의 상태를 나타내는 벡터이다. 이 값은 직접적으로 측정할 수 없다. 다만 측정 잡음(v_k, measurement noise)이 포함된 z_k 값(센서에서 읽어들인 값)으로 측정된다. 한편, 칼만필터를 적용하기 위해서는 적용하려는 대상의 모델이 필요하며 이 모델의 정확도가 중요하다. 이런 모델의 부정확도를 process noise (w_k) 라 한다. 위에서도 언급했지만 이 process와 measurement noise가 평균이 0인 가우시안 분포를 이루며 이때의 covariance가 각각 Q와 R인 정규분포를 띤다고 가정하면, 노이즈는 Q와 R을 통해서 표현된다. 또한, process와 measurement noise는 서로 독립적이어야 한다.
아래 그림에서 볼 수 있듯이 칼만필터의 처리과정은 크게 "Predict"와 "Correct" 두 가지로 나뉜다.
먼저 비슷하게 보이는 두 항을 구분할 필요가 있는데, hat(x_k)와 hat(x_k_bar)이다. x위에 있는 ^ (hat)의 의미는 "추정한 값" 이라는 기호이며, k위에 있는 - (bar)는 "~이전의" 라는 뜻이다. 즉, hat(x_k)는 "추정한 값 x의 현재 값" 영어로는 "a posteriori state" 이며, hat(x_k_bar)는 “추정한 값 x의 이전의 값” 영어로는 "a priori state"라고 한다.
"Predict" 단계에서는 현재의 상태와 모델을 이용하여 다음 측정시간의 상태와 error corvariance의 값을 예측한다. 그리고 "Correct" 단계의 첫번째 식에서처럼 계산된 error corvariance 값과 measurement noise covariance를 이용하여 칼만게인 K를 계산한다. 다음으로 "Correct" 단계의 두번째 식에서처럼 실제 측정이 이루어진 뒤 얻은 값 z_k와 예측된 측정 상태 값 H*hat(x_k_bar)의 차에 칼만게인 K를 곱하여 이전에 예측된 상태값 hat(x_k_bar)를 더해주어 계산한다. 마지막으로 "Correct" 단계의 세번째 식에서처럼 측정이 이루어진 이후이므로 error corvariance 값도 업데이트해준다.
먼저 "Correct" 단계의 두번째 식의 두번째 항을 살펴보면, 이는 measurement innovation이라는 이름을 가진 보정항으로 새로 측정된 데이터에의해 얼마나 많은 보정을 이전의 시스템 상태 예측에 가해야 하는지를 나타낸다. 이번에는 "Correct" 단계의 첫번째 식을 자세히 살펴보면, 만약 센서노이즈가 큰 경우 즉, measurement noise covariance가 큰 경우에는 칼만게인 K값이 작아진다. 결과적으로 새로 측정될 데이터에 대한 신뢰가 떨어지게 되므로 측정치보다 시스템 상태 예측에 무게가 실리게 된다. 반대로 센서노이즈가 작은 경우 즉, measurement noise covariance가 작은 경우에는 칼만게인 K값이 커지게되고 이는 새로 측정될 데이터가 신뢰할 수 있음을 의미하므로 측정 데이터에 무게가 실리게 된다.
다시 말하면, 칼만게인 K를 계산할 때 process noise의 분산과 measurement noise의 분산을 이용하는데, process noise가 measurement noise보다 분산이 크면 측정 데이터에 더 큰 가중치가 곱해질 것이고 그 반대라면 모델을 이용한 상태 예측 값에 더 큰 가중치가 곱해져서 업데이트된다고 말할 수 있다.
(n*n) 행렬인 A와 (n*l) 행렬인 B는 이전 시간 k-1에서의 시스템 상태로부터 현재의 시간인 k에서의 시스템 상태를 계산해내는 선형시스템 식의 시스템 상수로 볼 수 있다. (m*n) 행렬인 H는 실제 측정데이터인 z_k와 연관이 있는 값이다. 칼만필터 식에서 A, B와 H행렬은 시스템에 따라 결정되는 값이며 변하지 않는다. 또한, H는 측정을 어떻게 하느냐에 따라 결정된다. 칼만필터에서는 변하지 않는 행렬 A, B, H, Q, R 값이 있으며 "predict" 루틴과 "correct" 루틴이 시작되기 전에 초기값 hat(x_k-1)과 P_k-1이 있다는 가정을 해주어야 한다. 그러면 변하지 않는 행렬값과 초기값을 가지고 "predict" 루틴값을 구하게 된다. 그 다음 이 값을 이용하여 칼만게인 K와 측정값 z_k를 이용하여 다음 예측값을 보정하고 error corvariance 값도 보정한다. 이러한 과정을 반복하는 것이 칼만필터이다.
< References >
An Introduction to the Kalman Filter - Greg Welch, Gary Bishop
Kalman Filtering - Dan Simon (Embedded Systems Programming, June 2001)
http://blog.naver.com/earless4cats?Redirect=Log&logNo=80069313445
http://blog.naver.com/hangondragon?Redirect=Log&logNo=20066898769
http://blog.naver.com/msnayana?Redirect=Log&logNo=80144116755
http://www.cs.unc.edu/~welch/kalman/




덧글