본문 바로가기
C++ 200제/코딩 IT 정보

칼만필터의 이해, KalmanFilter 쉽게 이해하기 [필터]

by vicddory 2017. 8. 16.

칼만필터의 이해, KalmanFilter 쉽게 이해하기 [필터]


칼만필터의 이해?

인터넷에서 칼만 필터 관련 자료를 찾아보면 많은 자료와 응용이 소개되어 있습니다. 위키백과에 칼만필터의 이해를 돕도록 우리말로 잘 정리 설명되어 있습니다.


칼만필터의 이해 - 쉬운 설명

칼만필터는 1960년 R.E.Kalman (Kalman, Rudolph, Emil) 의 논문 "A New Approach to Linear Filtering and Prediction Problems"에 그 시초를 두고 있다. 여기서는 처음 칼만필터의 내용을 접하는 초보자를 위해 한글로 중요한 내용을 정리해 칼만필터의 이해를 돕는다.

칼만필터는 흔히 "an optimal recursive data processing algorithm"이라고 불린다. 이에 대한 직접적인 설명을 하기 전에 간단한 예로써 그 의미를 전달해보자. 어느 고등학교 선생님이 자신의 학급 학생들의 수학점수 평균을 알고 싶다고 가정하자.


물론 모든 학생의 점수를 더한 후 이를 학생 수로 나누는 방법이 가장 쉽고 간편할 것이다. 그러나, 한가지 재미를 더하기 위해 상황을 설정하자면 아직 선생님은 학생들의 점수를 전혀 알고 있지 못한 상황이고, 학생들은 한 번에 한 명씩만 선생님께 점수를 말해준다고 가정하자.


이때 선생님이 평균을 짐작해보기 위한 가장 좋은 방법은 학생 한명 한명이 점수를 말할 때마다 이들의 평균으로 전체의 평균을 짐작해보는 것이다.


칼만필터의 이해[칼만필터의 이해, KalmanFilter 쉽게 이해하기 [필터]]


즉 다음과 같은 관계식을 생각해볼 수 있다.


X'(1) = X1

X'(2) = (X1 + X2) / 2 = (X'(1) * 1 + X2) / 2

X'(3) = (X1 + X2 + X3) / 3 = (X'(2) * 2 + X3) / 3

X'(4) = (X1 + X2 + X3 + X4) / 4 = (X'(3) * 3 + X4) / 4

:

X'(n) = (X1 + X2 + ....... + Xn) / n = (X'(n - 1) * (n - 1) + Xn) / n


위 식의 일반식은 다음과 같이 변형할 수도 있다.



X'(n) = X'(n-1) * ((n - 1) / n) + (1 / n) * Xn


그럼 위 식이 가진 특징은 무엇일까? 위 식으로 칼만필터의 이해를 돕는다.


위와 같은 식을 사용할 때의 간편한 점은 지나간 개개의 값들을 모두 기억해 둘 필요가 없다는 것이다.


즉 n번째 평균을 구할 때 선생님은 X'(n-1)과 지금 n번째의 값 Xn 두 개의 값만 있으면 아무 문제 없이 n번째의 평균을 구할 수 있게 된다.


칼만필터 이해하기[칼만필터의 이해, KalmanFilter 쉽게 이해하기 [필터]]


이와 같은 기법을 "반복적 자료 처리 (recursive data processing)"이라고 하며, 최초 Kalman Filter 이론의 개발 이유이기도 하다.


처리할 자료의 양이 그리 많지 않을 때는 모든 자료를 기억해두었다가 한 번에 계산하는 것이 간편할 수도 있겠으나, 그 자료의 양이 많다면, 저장 장소 및 처리 시간을 고려하지 않을 수 없게 된다.


칼만필터가 개발된 60년대는 컴퓨터의 발달이 초보적인 상태였기에 자료의 효율적 저장 및 처리가 절실할 시절임을 고려한다면 어쩌면 당연한 고안이라고 생각할 수 있겠다.


그럼 이제 "최적 (optimal)"이라는 단어에 초점을 둬 보자. 위에서 제시한 예는 각각의 데이터 (각 학생의 수학점수)에 같은 가중치, 즉 새로 받아들 이는 모든 값에는 1/n의 가중치가 두어졌다. 그렇다면 가중치가 다른 경우에는 어떠할까?

같은 점수를 가진 학생 3명이 함께 와서 "우리 점수는 ㅇㅇ점 입니다."라고 한다면 이 점수에 대한 가중치는 3/n을 주어야 할 것이다.


이처럼 각 데이터가 가진 평균에 대한 중요도를 "경중률"이라고 한다. 경중률에 대한 개념은 측량에서 여러 방법으로 길이를 재고 이들의 평균을 구해봄으로써 더욱 쉽게 이해할 수 있다.


이번에는 칼만필터의 이해를 위해 위의 수학 선생님이 학생 두 명에게 각기 다른 방법으로 교실의 길이를 재보라고 했다고 하자.


한 학생은 자신의 보폭을 이용하고 다른 학생은 줄자를 이용하여 교실의 길이를 측정했을 때 첫 번째 학생은 10m 두 번째 학생은 12m라는 값을 얻었다. 만약 둘 다 같은 방법으로 길이를 측정하였다면, 선생님은 주저 없이 두 값을 평균하여 11m를 교실의 길이라고 말할 수 있겠다.


그러나, 누가 보더라도 보폭으로 잰 길이보다는 줄자로 잰 길이가 정확하다고 느낄 것이다. 그렇다면 이들 두 값을 어떻게 평균해야 할까? 이때 도입되는 개념이 경중율이다. 측량학에서 관측값의 경중률은 각 값이 가진 표준편차를 기준으로 정한다.


즉, 각 관측치에 대한 경중률은 표준편차 제곱에 반비례한다.


표준편차가 크면 클수록 그 값의 경중률은 떨어지며 평균에 대한 기여도가 적어지게 된다.


줄자로 잰 거리가 10m이지만, 수많은 경험 또는 수많은 반복 측정을 통해 얻은 표준편차가 +-0.1m라고 가정한다면, 그리고 보 측은 12m +-1.0m라고 가정한다면, 이들의 평균은 다음과 같이 구해진다.


평균 = (10 * (1.0)^2 + 12 * (0.1)^2 ) / (0.1^2 + 1.0^2) = 10.02m


위의 식을 일반화하면,


X = (X1 * (sd2)^2 + X2 * (sd1)^2) / ((sd1)^2 + (sd2)^2)

= (X1 * (sd1)^2 - X1 * (sd1)^2 + X1 * (sd2)^2 + X2 * (sd1)^2) / ((sd1)^2 + (sd2)^2)

= X1 + (X2 - X1) * [(sd1)^2 / ((sd1)^2 + (sd2)^2)]


여기서, X : 상태변수 (state variables) sd : 표준편차 (standard deviation)


위의 마지막 식이 칼만필터에 있어서 시스템 출력 값 (위에서는 X1)과 새로운 입력값 (X2)을 이용하여 새로운 최적값 (optimized state variables)을 계산하는 "관측갱신 알고리즘 (measurement update algorithm)"의 스칼라 형태이다. (일반적으로 칼만필터의 기본 식은 행렬 또는 벡터형태로 나타나 있고, 위는 칼만필터의 이해를 돕는 식이다)


KalmanFilter 칼만필터[칼만필터의 이해, KalmanFilter 쉽게 이해하기 [필터]]


더불어 새로운 최적값, X, 의 표준편차는 다음과 같이 계산된다.


(sd)^2 = [(sd1)^2 + (sd2)^2] / [(sd1)^2 * (sd2)^2]


이제 위의 두 식, 최적값 X와 표준편차 sd를 구하는, 을 이용하면 앞에서 말한 두 관측값 이외에 다른 관측값을 추가로 얻어서 다시 새로운 최적값을 구할 때도 같은 방법을 계속 사용할 수 있다.


이때는 앞에서 얻어진 X는 X1 이 되고, sd 는 sd1 이 되며, 새로운 관측값과 표준편차(경중률)은 각각 X2와 sd2 가 된다.


이와 같은 반복적인(recursive) 연산 (data processing)을 통해 최적(optimal) 값을 추적하는 것이 칼만필터의 기본개념이라 할 수 있겠다.


이것으로 칼만필터의 이해를 마친다.


칼만필터의 이해, 계산식칼만필터의 이해, 계산식


칼만필터의 이해, KalmanFilter 쉽게 이해하기 [필터]

댓글