시뮬레이션 환경 설정

확장 칼만 필터(EKF)를 검증하기 위해서는 먼저 시뮬레이션 환경을 설정하는 것이 중요하다. 시뮬레이션을 통해 필터가 얼마나 정확하게 비선형 시스템의 상태를 추정할 수 있는지를 평가할 수 있다. 일반적으로 시뮬레이션 환경은 다음과 같은 요소를 포함한다:

이를 수식으로 나타내면 다음과 같다.

\mathbf{x}_{k} = f(\mathbf{x}_{k-1}) + \mathbf{w}_{k-1}

여기서,
\mathbf{x}_{k}는 시점 k에서의 상태 벡터,
f(\mathbf{x}_{k-1})는 비선형 상태 전이 함수,
\mathbf{w}_{k-1}는 시스템 노이즈(process noise)을 나타낸다.

\mathbf{z}_{k} = h(\mathbf{x}_{k}) + \mathbf{v}_{k}

여기서,
\mathbf{z}_{k}는 시점 k에서의 측정 벡터,
h(\mathbf{x}_{k})는 비선형 측정 함수,
\mathbf{v}_{k}는 측정 잡음(measurement noise)을 나타낸다.

초기 상태 설정

시뮬레이션을 시작하기 위해 초기 상태 벡터 \mathbf{x}_{0}를 설정해야 한다. 초기 상태는 대개 실제 시스템에서 측정된 값이나 추정된 값을 바탕으로 한다. EKF는 초기 추정값이 성능에 큰 영향을 미치므로, 신중하게 설정해야 한다.

과정 및 측정 잡음의 설정

시스템 노이즈 \mathbf{w}_{k-1}과 측정 잡음 \mathbf{v}_{k}는 각각의 공분산 행렬 \mathbf{Q}\mathbf{R}로 정의된다. 이 공분산 행렬은 필터가 상태 및 측정 값에 대한 불확실성을 얼마나 신뢰하는지를 결정한다.

\mathbf{Q} = \text{cov}(\mathbf{w}_{k-1})
\mathbf{R} = \text{cov}(\mathbf{v}_{k})

이 공분산 행렬은 실제 시스템에 대한 경험적 데이터 또는 추정치를 바탕으로 설정된다.

예측 단계 시뮬레이션

시뮬레이션을 통해 확장 칼만 필터의 예측 단계를 구현하고 테스트한다. 예측 단계는 현재 상태를 기반으로 미래 상태를 추정하는 과정이다. 이 단계에서 시스템 모델을 이용하여 상태 벡터와 공분산 행렬을 갱신한다.

\mathbf{\hat{x}}_{k|k-1} = f(\mathbf{\hat{x}}_{k-1|k-1})

여기서,
\mathbf{\hat{x}}_{k|k-1}는 시점 k에서의 상태 벡터의 예측값,
\mathbf{\hat{x}}_{k-1|k-1}는 시점 k-1에서의 상태 벡터의 추정값,
f(\mathbf{\hat{x}}_{k-1|k-1})는 비선형 상태 전이 함수이다.

\mathbf{P}_{k|k-1} = \mathbf{F}_{k-1} \mathbf{P}_{k-1|k-1} \mathbf{F}_{k-1}^\top + \mathbf{Q}_{k-1}

여기서,
\mathbf{P}_{k|k-1}는 시점 k에서의 오차 공분산 행렬의 예측값,
\mathbf{F}_{k-1}는 상태 전이 함수 f(\cdot)의 야코비 행렬,
\mathbf{Q}_{k-1}는 시스템 노이즈 공분산 행렬이다.

이 과정에서 중요한 부분은 상태 전이 함수의 야코비 행렬을 계산하는 것이다. 야코비은 비선형 상태 전이 함수를 선형화하는 역할을 하며, 이는 다음과 같이 정의된다:

\mathbf{F}_{k-1} = \frac{\partial f(\mathbf{x})}{\partial \mathbf{x}} \bigg|_{\mathbf{x} = \mathbf{\hat{x}}_{k-1|k-1}}

업데이트 단계 시뮬레이션

업데이트 단계는 센서로부터 얻어진 측정값을 기반으로 예측된 상태를 수정하는 과정이다. 이 단계에서 측정 모델을 통해 예측 상태와 실제 측정값의 차이를 줄인다.

\mathbf{K}_{k} = \mathbf{P}_{k|k-1} \mathbf{H}_{k}^\top \left( \mathbf{H}_{k} \mathbf{P}_{k|k-1} \mathbf{H}_{k}^\top + \mathbf{R}_{k} \right)^{-1}

여기서,
\mathbf{K}_{k}는 시점 k에서의 칼만 이득,
\mathbf{H}_{k}는 측정 함수 h(\cdot)의 야코비 행렬,
\mathbf{R}_{k}는 측정 잡음 공분산 행렬이다.

\mathbf{\hat{x}}_{k|k} = \mathbf{\hat{x}}_{k|k-1} + \mathbf{K}_{k} \left( \mathbf{z}_{k} - h(\mathbf{\hat{x}}_{k|k-1}) \right)

여기서,
\mathbf{\hat{x}}_{k|k}는 시점 k에서의 상태 벡터의 추정값,
\mathbf{z}_{k}는 시점 k에서의 측정값,
h(\mathbf{\hat{x}}_{k|k-1})는 예측된 상태에서의 측정값이다.

\mathbf{P}_{k|k} = \left( \mathbf{I} - \mathbf{K}_{k} \mathbf{H}_{k} \right) \mathbf{P}_{k|k-1}

여기서,
\mathbf{P}_{k|k}는 시점 k에서의 오차 공분산 행렬의 추정값,
\mathbf{I}는 단위 행렬이다.

성능 평가를 위한 지표 설정

확장 칼만 필터의 성능을 평가하기 위해 다양한 성능 지표를 사용할 수 있다. 이러한 지표들은 필터가 상태 추정 및 예측에서 얼마나 정확한지를 수량화한다. 주요 지표는 다음과 같다.

평균 제곱 오차 (Mean Squared Error, MSE)

확장 칼만 필터의 상태 추정이 실제 상태와 얼마나 차이가 나는지를 평가하는 가장 기본적인 방법 중 하나는 평균 제곱 오차(MSE)를 계산하는 것이다. 이를 수식으로 나타내면 다음과 같다:

\text{MSE} = \frac{1}{N} \sum_{k=1}^{N} \left( \mathbf{x}_{k} - \mathbf{\hat{x}}_{k|k} \right)^\top \left( \mathbf{x}_{k} - \mathbf{\hat{x}}_{k|k} \right)

여기서,
\mathbf{x}_{k}는 시점 k에서의 실제 상태 벡터,
\mathbf{\hat{x}}_{k|k}는 시점 k에서의 추정된 상태 벡터,
N은 전체 시뮬레이션에서의 시간 스텝 수이다.

MSE는 필터가 상태를 얼마나 잘 추정하고 있는지 전반적인 오류를 수량화하는데 유용하다. 값이 작을수록 필터의 성능이 좋음을 의미한다.

루트 평균 제곱 오차 (Root Mean Squared Error, RMSE)

평균 제곱 오차는 제곱된 값이기 때문에 실제 상태 차이에 대한 직관적인 이해가 어려울 수 있다. 이를 해결하기 위해 루트 평균 제곱 오차(RMSE)를 사용한다. RMSE는 MSE의 제곱근으로 계산되며, 수식은 다음과 같다:

\text{RMSE} = \sqrt{ \frac{1}{N} \sum_{k=1}^{N} \left( \mathbf{x}_{k} - \mathbf{\hat{x}}_{k|k} \right)^\top \left( \mathbf{x}_{k} - \mathbf{\hat{x}}_{k|k} \right) }

RMSE는 MSE보다 실제 상태와의 차이를 더 직관적으로 표현하며, 필터 성능을 평가하는 데 자주 사용된다.

상태 추정 오차 공분산

확장 칼만 필터의 상태 추정의 불확실성을 측정하는 또 다른 방법은 오차 공분산 행렬을 평가하는 것이다. 상태 추정 오차 공분산은 필터가 상태 추정에 대해 얼마나 신뢰할 수 있는지를 보여준다. 필터의 오차 공분산이 작을수록, 필터가 상태 추정에 대해 더 높은 신뢰도를 가진다.

\mathbf{P}_{k|k}

여기서,
\mathbf{P}_{k|k}는 시점 k에서의 상태 추정 오차 공분산 행렬이다.

필터 이득 평가

확장 칼만 필터의 성능을 평가하는 또 다른 방법은 필터 이득 \mathbf{K}_{k}를 분석하는 것이다. 필터 이득은 측정값이 예측된 상태를 얼마나 수정하는지에 대한 비율을 나타내며, 필터가 각 상태에서 얼마나 측정값을 신뢰하는지 결정한다.

\mathbf{K}_{k}

필터 이득이 적절하게 계산되면, 필터는 정확하게 상태를 추정할 수 있으며, 필터 이득이 지나치게 크거나 작다면, 필터의 성능에 문제가 있을 수 있다.

시뮬레이션 결과 분석

시뮬레이션 결과를 바탕으로 확장 칼만 필터의 성능을 평가하는데, 각 성능 지표에 따라 결과를 해석한다. 특히, 시뮬레이션을 여러 번 반복하여 평균 성능을 확인하고, 필터가 다양한 조건에서 어떻게 동작하는지를 분석할 필요가 있다. 이 과정에서 필터가 특정 조건에서 불안정하게 동작하는 경우, 해당 조건에 대한 필터의 민감도를 분석하고, 성능을 개선할 수 있는 방법을 도출할 수 있다.

실험 반복을 통한 성능 향상

확장 칼만 필터의 성능을 최적화하기 위해서는 다양한 시뮬레이션 환경에서 필터를 반복적으로 테스트하고, 각 테스트의 결과를 분석하는 것이 중요하다. 실험에서 발생할 수 있는 변수로는 다음이 있다.

이러한 변수들을 다르게 설정하여 실험을 반복적으로 수행함으로써 필터 성능을 향상시킬 수 있다.