'2007/01/27'에 해당되는 글 1건

  1. 2007.01.27 칼만필터 알고리즘 by system 1
칼만필터는 1960년 R.E.Kalman (Kalman, Rudolph, Emil) 의 논문
"A New Approach to Linear Filtering and Prediction Problems"
에 그 시초를 두고 있다.
칼만필터에 대한 자세한 설명과 관련자료는 아래주소 Greg Welchd의 홈페이지에 잘 정리되어 있다.
여기서는 처음 칼만필터의 내용을 접하는 초보자를 위해 한글로 몇가지 중요한 내용을 정리해본다.
 
칼만필터는 흔히 " an optimal recursive data processing algorithm" 이라고 불린다.
이에 대한 직접적인 설명을 하기 전에 간단한 예로써 그 의미를 전달해보자.
어느 고등학교 선생님이 자신의 학급 학생들의 수학점수 평균을 알고 싶다고 가정하자. 물론 모든 학생의 점수를 더한 후 이를 학생 수로 나누는 방법이 가장 쉽고 간편할 것이다. 그러나, 한가지 재미를 더하기 위해 상황을 설정하자면 아직 선생님은 학생들의 점수를 전혀 알고 있지 못한 상황이고, 학생들은 한번에 한명씩만 선생님께 점수를 말해준다고 가정하자. 이때 선생님이 평균을 짐작해보기 위한 가장 좋은 방법은 학생 한명한명이 점수를 말할 때마다 이들의 평균으로 전체의 평균을 짐작해보는 것이다. 즉 다음과 같은 관계식을 생각해볼 수 있다.
 
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번째라는 두개의 값만 기억하면 아무 문제없이 n번째의 평균을 구할 수 있게된다.
이와 같은 기법을 "반복적 자료 처리 (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)" 의 스칼라 형태이다. (일반적으로 칼만필터의 기본식은 행렬 또는 벡터형태로 나타나 있다.)
더불어 새로운 최적값, X, 의 표준편차는 다음과 같이 계산된다.
 
(sd)^2 = [(sd1)^2+(sd2)^2] / [(sd1)^2*(sd2)^2]
 
이제 위의 두 식, 최적값 X와 표준편차 sd를 구하는, 을 이용하면 앞에서 말한 두 관측 값 이외에 다른 관측값을 추가적으로 얻어서 다시 새로운 최적값을 구할때도 같은 방법을 계속 사용할 수 있다. 이때는 앞에서 얻어진 X 는 X1 이 되고, sd 는 sd1 이 되며, 새로운 관측값과 표준편차(경중률)은 각각 X2 와 sd2 가 된다.
이와 같은 반복적인 (recursive) 연산 (data processing) 을 통해 최적 (optimal) 값을 추적하는 것이 칼만 필터의 기본개념이라 할 수 있겠다.
Posted by system
l