칼만 필터 참 많이 들었지만, 사칙연산처럼 익숙해지고 싶다는 각오로 읽게 되었습니다!
본 저서를 보며 공부한 칼만필터 내용을 요약한 것입니다.
Python 버전 코드는 https://github.com/tbmoon/kalman_filter 를 참고하며 진행하였습니다.
또한 앞서 살펴본 요약 내용이 있으니, 읽기에 사전 지식을 더 보고 싶다면 이전 포스팅을 참고해주세요!
오타나 의견 환영합니다!
CHAPTER 04 칼만 필터
칼만 필터 알고리즘
총 4단계의 내부 계산으로 이뤄져있고, 이를 반복 수행한다.
CHAPTER 05 추정 과정
5.1 추정값 계산
3번째 단계인 추정값 계산 파트를 잘 살펴보면,
저주파 통과 필터수식과 같이, 직전 추정치와 측정값에 다른 가중치를 주는 것으로 해석할 수 있다.
$ \hat{x_k}= \hat{x^-_k}+K_k(z_k-H \hat{x^-_k})=(1-K_kH)\hat{x^-_k}+K_k z_k $
여기서 H를 단위행렬 I로 가정하면, 더 쉽게 이해할 수 있다.
칼만 필터 : $ \hat{x_k}= (1-K_k)\hat{x^-_k}+K_k z_k $
1차 저주파 통과 필터 : $ \bar{x_k}= (1-\alpha ) \bar{x_{k-1}} + K_kz_k $
5.2 변하는 가중치
다시 추정 단계 식에서 필요한 값을 검토해보면,
'예측값'과 '측정값', 시스템 모델과 관련된 H은 모두 주어져 있고, Kalman gain(K_k)를 알면 새로운 추정값을 계산할 수 있다.
이때 가중치를 조절하는 칼만 이득은 고정되어 있지 않고, 일정한 공식에 따라 매번 새로 계산된다.
즉, 추정값 계산식의 가중치가 계속 바뀐다. 따라서 k번째라는 의미의 아래첨자가 필요해진다.
5.3 오차 공분산 계산
앞 단계에서 구한 추정값이 정확한지 아닌지를 판단하는 척도로, 오차 공분산 P를 계산한다.
$ P_k = P^-_k - K_kHP^-_k $
- 오차 공분산의 의미
$x_k$는 평균 $\hat{x_k}$, 공분산 $P_k$인 정규 분포를 따른다는 관계를 가짐.
이때 오차 공분산은 다음과 같이 계산된다. $P_k = E \left\{ (x_k - \hat{x_k}) (x_k - \hat{x_k})^T \right\}$
즉, 추정 오차의 제곱을 평균한 값을 의미한다.
5장 요약
- 칼만 필터는 앞서 본 1차 저주파 통과 필터와 같이 추정값을 재귀형태로 계산하며, 그 가중치 역할을 하는 Kalman gain이 계속 업데이트된다. 또한, 오차 공분산 P를 통해 추정값의 정확도를 파악할 수 있다.
CHAPTER 06 예측 과정
6.1 예측값 계산
시각이 바뀔 때, 추정값 $\hat{x_k}$는 어떻게 변할까?
앞서 본 전체 칼만필터 모델링을 보면, 시스템 모델 A와 Q, $\hat{x_k}, P_k$로 구한다.
$ \hat{x^-_{k+1}} = A \hat{x_k} $
$ P^-_{k+1} = A P_k A^T + Q $
6.2 예측과 추정의 차이
$ \hat{x_k} = \hat{x^-_k} + K_k (z_k - H \hat{x^-_k}) = A \hat{x_{k-1}} + K_k (z_k - H A \hat{x_{k-1}}) $
추정값 계산식을 살펴보면, 직전 추정값을 바로 식에 활용하는 것이 아니라, '직전 추정값을 통해 구한' 예측값이 있다.
이처럼, 칼만 필터는 1차 저주파 통과 필터와 달리, 추정값을 계산할 때 직전 추정값을 바로 쓰지 않고, 예측 단계를 한번 거친다. 이러한 이유로, 예측값을 사전 추정값(a priori estimate), 추정값을 사후 추정값(a posteriori estimate)라고 부른다. 추정에 사용되는 오차 공분산도 이러하다.
6.3 추정값 계산식의 재해석
$ \hat{x_k} = \hat{x^-_k} + K_k (z_k - H \hat{x^-_k}$
이 식에서 $ \hat{x^-_k}$은 예측값으로 계산한 측정값을 뜻한다.
따라서 예측값을 '실제 측정값과 예측값'으로 적절히 보정하여 최종 추정값을 계산한다고 이해할 수 있다.
위의 식을 통해 알 수 있는 것은, 예측값의 정확성이 추정값 성능에 가장 큰 영향을 준다.
예측값이 부정확하면, Kalman gain을 잘 선정한다고 해도, 추정값이 부정확할 수 밖에 없다.
즉, A와 Q가 실제 시스템과 차이가 커 예측값이 부정확하면 추정값도 신뢰가 떨어진다.
CHAPTER 07 시스템 모델
7.1 시스템 모델
시스템 모델을 수학적으로 모델링하여 구하는 일은 매우 높은 수준을 요구하므로 생략하고,
칼만 필터의 시스템 모델은 어떤 형태여야 하며, 그 시스템 모델이 칼만 필터 알고리즘에 어떻게 이용되는지를 주로 설명한다.
선형 시스템의 상태 모델부터 차근차근 공부해보자.
선형 상태 모델을 대상의 칼만필터를 살펴보면 아래와 같고,
$x_{k+1} = A x_k + w_k$
$z_k = H x_k + v_k$
위는 k, k+1로 표현할 수 있는 상태 변수에 대해 1차 미분 방정식으로 표현된 상태 공간 모델이다.
위의 식에서 시스템 모델의 잡음이 포함된다는 점을 주목하자.
각 변수는 이처럼 정의된다.
$x_k$ : 상태 변수(state variable), (n x 1) 열벡터
$z_k$ : 측정값, (m x 1) 열벡터
$A$ : 시스템 행렬, (n x n) 행렬
$H$ : 출력 행렬, (m x n) 행렬
$w_k$ : 시스템 잡음, (n x 1) 열벡터
$v_k$ : 측정 잡음, (m x 1) 열벡터
state variabl은 거리, 속도, 무게 등 관심을 두는 물리적 변수로 이해하면 되고,
이때 모델 중 잡음은 모두 WGN(White Gaussian nosie, 랜덤한 일반적인 분포)로 가정한다.
시스템 잡음은 시스템에 유입되어 상태 변수에 영향을 주는 잡음이고, 측정 잡음은 센서에서 유입되는 측정 잡음을 말한다.
A, H는 모두 상수로, 시간에 따라 시스템이 어떻게 움직이는 지를 나타내는 것이다.
7.2 잡음의 공분산
잡음은 예측할 수 없고, 단순 통계적 추정만 가능하다.
평균이 0인 정규분포를 따른다고 가정하므로,잡음의 분산(variance)만 알면 된다.
$Q : W_k$ 의 공분산 행렬, (n*n) 대각 행렬
$R : v_k$의 공분산 행렬, (m*m) 대각 행렬
대각 행렬은 대각선 위치 외의 성분은 모두 0인 행렬을 모두 말한다.
공분산 행렬은 변수의 분산으로 구성된 행렬로,
n개의 잡음 w1, w2, ... wn이 있다면, Q는 각 잡음의 분산을 대각선 요소로 넣는다.
행렬 Q, R은 잡음의 특성을 정확히 구하는데에 복합적으로 작용하므로 해석적으로 결정하는 데 한계가 있다.
즉, 잡음에 대한 지식을 최대한 활용하되, 이를 칼만 필터의 시행착오 과정을 통해 보정하면서 적절한 값을 찾아야 함.
적절한 기준
칼만필터 알고리즘 중 2번째 '칼만 이득 계산' 부분을 살펴보면,
$K_k = $
CHAPTER2 요약
- '예측값'과 '현재 측정값'에 적절한 가중치 Kalman gain를 주어 추정값을 계산한다.
- 이때의 Kalman gain은 계속 업데이트 된다.
'1-1. Fundamental > Kalman Filter' 카테고리의 다른 글
[칼만 필터는 어렵지 않아/Python ver.] PART01. 재귀 필터 - 평균 필터, 이동평균 필터, 저주파 통과 필터 (0) | 2024.05.16 |
---|