칼만필터는 제어, 신호 등등 여기저기에 참 다양한 곳에 등장하는 추정기이다.
많이 쓰이는 지라 인터넷 여기저기 자료도 많고 설명 글도 참 많지만
아쉬운 점있다면 칼만필터를 이해하기 위해 필요한 백그라운드가 많은데
인터넷에 설명 글들을 읽다보면 글읽는 사람이 칼만필터를 이해하기 위해 필요한
배경지식을 다 알고 있다고 가정하고 설명한 글들이 대부분이라 조금 아쉬웠다.
그래서 이번 기회에 칼만필터를 수학적으로 유도해보고 유도과정에서 사용되는 배경지식을 함께 정리해 보고자 한다.
글의 주된 목적은 칼만필터를 나만의 언어로 풀어 다음에 기억하기 쉽게 하는것 이다.
칼만필터 설명은 다음과 같은 구성으로 이뤄진다.
1. 이 글에서 칼만필터를 설명하기 위해 사용하는 기호 정의
2. 칼만필터의 개념(칼만필터의 개념도, 베이즈 정리를 이용한 칼만필터의 해석)
3. 특정 가정하에 칼만필터의 추정값을 구하는 공식(2/2)
4. 3. 에서 주어진 칼만필터의 추정값을 구하는 공식에 사용된 각각의 값들을
구하는 방법과 이들을 구하는 과정에서 사용되는 수학적 배경지식(3/3)
칼만필터 정리 내용은 총 2페이지로 예상을 하고 있는데 1,2는 현재 페이지(1/2)에서
3.과 4.의 내용은 칼만필터(2/2)에 포스팅할 예정이다.
기호 정의:
이 글에서 사용되는 기호들은 아래와 같이 정의한다.
$x$: 칼만필터를 이용해 추정하고자 하는 랜덤변수.
관측할수 없는 미지의 값으로 이 변수에 대한 초기 값만 알고 있다고 가정한다.
$z$: 관측값. 실험을 통해 관측가능한 값으로 칼만필터의 입력 중 하나이다.
구하고자 하는 랜덤변수 $x$와 특정한 과계가 있고 칼만필터에서는 이 관측 값 $z$를
통해 미지의 수 $x$에 대한 정보를 얻을수 있다고 본다.
(왜 $z$를 이용해 $x$에 대한 정보를 얻을 수 있다고 보는지는 아래에 설명한다.)
$u$: 외부 입력. 칼만필터의 입력 중 하나.
위 값들에 시간 개념을 도입해 $x(k), z(k), u(k)$등의 기호로 사용 하면 시점 k에서의 $x,z,u$ 로 해석한다.
$\hat{x}(k|k-1)$: k-1시점의 $\hat{x}(k-1|k-1)$과 시스템 모델을 이용해 구한
k시점에서의 랜덤 변수(또는 랜덤벡터) $x$의 추정값
(일반적으로 $x(k|k-1)$을 k 시점에서 x의 prior knowledge로 본다.
prior knowledge는 베이즈 정리의 prior knowledge를 의미)
$\hat{z}(k|k-1)$: x(k|k-1)과 측정 모델을 이용해 계산한 k 시점에서의 관측값 z의 예측값
(실제 관측값이 아니라 예측한 관측값이다.)
$\hat{x}(k|k)$ : k 시점에서 추정하고자 하는 랜덤 변수(또는 랜덤 벡터)
위에 언급한 시스템 모델과 측정모델을 아래와 같은 의미로 사용된다.
- 시스템 모델: 추정하고자 하는 랜덤변수(또는 랜덤벡터) $x$의 k-1시점과 k시점 사이의 관계식.
$$\hat{x}(k|k-1) = F(k-1)\hat{x}(k-1|k-1) G(k-1)u(k-1)+G_{w}(k-1)w(k-1)$$
시스템 모델은 우리가 명확히 알고 있다고 가정한다.(사실 이걸 모르면 말이 안되므로..) - 관측 모델: 관측 값 $z(k)$와 추정하고자 하는 랜덤변수 $x$사이의 관계식.
$$\hat{z}(k) = H(k)x(k)+v(k)$$
관측 모델도 우리가 명확히 알고 있다고 가정한다.
(이것도 마찬가지고 관측값과 관측값에 영향을 미치는 인자간의 관계를 모르면 문제를 풀기 매우 힘들어진다...)
칼만필터의 개념(베이즈 정리를 이용한 칼만필터의 개념설명):
칼만필터는 두 부분 1.예측 단계, 2. 측정 업데이트 단계 로 이루어져 있다.
- 예측 단계: 시간을 k로 표현할때 시간 k-1에서 얻은 정보를 이용해 시간 k에서 필요한 정보를 예측 하는 단계
- 측정 업데이트 단계: 관측값과 시간 예측 단계에서 얻은 값을 이용해 추정하고자 하는 값을 업데이트 하는 단계
이를 예측 단계와 측정 업데이트 단계를 시간 흐름의 그림으로 표현하면 아래와 같다.
위 그림을 보면 예측단계에서는 k-1시점에서 추정한 $\hat{x}(k-1)$을 이용해
k 시점에서의 $\hat{x}(k|k-1)$, $\hat{z}(k|k-1)$를 예측하고
측정 업데이트 단계에서 관찰 값 $z(k)$을 이용해 k시점에서의 최종 추정값 $\hat{x}(k|k)$을 업데이트 한다.
위 그림과 설명을 보고 기본기가 충실한 사람은 바로 베이즈 정리를 떠올릴 수 있는데 베이즈 정리는 아래와 같다.
$$p(x|z) = \frac{p(z|x)p(x)}{p(z)}$$
해석하자면 $x$에 대한 사전 정보 p(x), $x$가 주어졌을때 얻을수 있는 $z$의 정보($p(z|x)$),
그리고 $z$ 자체의 정보($p(z)$)를 이용해 $x$에 대한 정보를 업데이트(필터링) 할 수 있는 식으로 해석할 수 있다.
(있어 보이는 표현을 사용하면 $x$에 대한 사전 정보를 prior distribution(prior knowledge),
$x$가 주어졌을때 얻을 수 있는 $z$의 정보($p(z|x)$)를 likelihood,
앞의 두 정보로 업데이트해 얻을 수 있는 $x$를 posterior distribution(posterior knowledge)라고 표현한다.)
베이즈 정리를 이용해 칼만필터의 시간 예측, 측정 업데이트 단계를 설명해 보면 아래와 같이 해석 할 수 있다.
- 예측 단계: k-1시점의 정보($\hat{x}(k-1)$)를 이용해 $\hat{x}(k|k-1)$의 사전 정보(베이즈 정리의 p(x))와
likelihood $z(k|k-1)$ (베이즈 정리의 $p(z|x)$)를 구한다. - 측정 업데이트 단계: 관측한 $z(k)$ (베이즈 정리에서 $p(z)$)와 예측단계에서 구한
$\hat{x}(k|k-1)$, $z(k|k-1)$을 이용해 $x(k|k)$ (베이즈 정리에서 posterior에 해당)을 구한다.
위 설명은 주의 해서 살펴 보아야 한다. $z(k)$는 시점 k에서 실제로 관측한 값이고
$z(k|k-1)$은 k-1시점에서 구한 정보를 바탕으로측정모델을 이용해 추측한 관측값이다.
예측 단계에서 $\hat{x}(k-1)$를 이용해 $\hat{x}(k|k-1)$를 예측할 때 시스템 모델을 사용하고
$\hat{x}(k|k-1)$를 이용해 관측값 $z(k|k-1)$을 예측 할때 관측 모델을 사용한다.
이를 바탕으로 칼만필터의 개괄적인 내용을 풀어 보자면
- k-1 시점에서 $x$의 posterior 정보를 구한다.
- k-1 시점에서 구한 $\hat{x}(k-1)$의 posterior와 시스템 모델을 이용해 k 시점에서의 $\hat{x}(k|k-1)$의 prior knowledge를 계산한다.
- $\hat{x}(k|k-1)$과 측정 모델을 이용해 관측값의 예상값 $\hat{z}(k|k-1)$를 구한다.
- k시점에서의 실제 관측값 $z(k)$와 관측 예측값 $\hat{z}(k|k-1)$을 차이를 이용해 $x(k)$의 사전정보 $\hat{x}(k|K-1)$가
어느정도의 오차를 내포하고있는 지 간접적으로 계산. - 2,3,4에서 구한 정보와 베이즈 정리를 이용해 시점 k에서의 $x$의 posterior $\hat{x}(k|k)$를 구한다.
오늘은 칼만 필터 포스팅에서 사용할 기호에 대한 정의, 칼만필터의 동작 개념에 대해 정리해봤다.
글로 풀어 설명하다 보니 표현이 이상한 부분, 미처 적지 못한 부분이 있을 수있는데 이런 부분은 틈틈히 생각 나는 데로
수정해야겠다.
다음 포스팅에서는 특정 가정하에서 MMSE(minimum mean square error)를 이용해 칼만필터의 수학적 유도과정을 설명을 정리해 보자.