- 칼만 필터는 잡음이 많은 환경에서 시스템의 상태를 추정하고 미래를 예측하는 최적 상태 추정 알고리듬
- 항공기 추적 레이더를 예시로, 거리와 속도 측정값을 이용해 예측과 업데이트 단계를 반복하며 정확도를 높이는 과정을 설명
- 각 단계에서 상태 벡터, 공분산 행렬, 칼만 이득(Kalman Gain) 을 계산해 측정값과 예측값을 가중 결합
- 측정 불확실성과 모델 불확실성을 함께 고려해, 시간이 지날수록 추정 오차(불확실성)가 감소함을 수치로 제시
- 직관적 수치 예제와 단계별 계산을 통해 직접 필터를 설계·구현할 수 있는 이해 기반을 제공
칼만 필터 소개
-
Kalman Filter는 측정 잡음이나 외부 요인 등 불확실성이 존재하는 환경에서 시스템의 상태를 추정하고 예측하는상태 추정 알고리듬
- 물체 추적, 항법, 로보틱스, 제어 등 다양한 분야에서 핵심 도구로 사용
- 예를 들어, 마우스 궤적의 노이즈를 줄여 부드러운 움직임을 얻거나, 금융 데이터의 추세 탐지, 기상 예측 등에 활용
- 많은 교육 자료가 수학적 유도에 치중해 실제 예시가 부족하다는 점을 지적하며, 본 자료는 수치 예제 중심의 직관적 설명을 제공
- 잘못 설계된 경우 필터가 추적에 실패하는 사례도 함께 다루며, 이를 보정하는 방법을 제시
- 목표는 독자가 직접 칼만 필터를 설계하고 구현할 수 있도록 이해를 확립하는 것
학습 경로
- 단일 페이지 개요: 핵심 개념과 주요 수식을 간단히 소개하며, 통계와 선형대수의 기초 지식만 요구
- 무료 웹 튜토리얼: 단계별 수치 예제로 직관을 쌓는 온라인 튜토리얼, 사전 지식 불필요
- Kalman Filter from the Ground Up (서적): 14개의 완전한 수치 예제, 비선형 필터(Extended/Unscented) 및 센서 융합, Python·MATLAB 코드 포함
예측의 필요성
-
항공기 추적 레이더 예시를 통해 상태 추정과 예측의 필요성을 설명
- 시스템 상태는 항공기의 위치(거리 (r))이며, 레이더는 펄스 반사 시간을 측정해 거리 계산
- 속도 (v)는 도플러 효과로 측정 가능
- 일정 시간 간격 (\Delta t) 후의 위치 예측은 동적 모델을 통해 수행
- 예: (r_{t_1} = r_{t_0} + v \cdot \Delta t)
- (\Delta t = 5s), (r_{t_0}=10,000m), (v=200m/s) → (r_{t_1}=11,000m)
- 실제 환경에서는 측정 잡음(Measurement Noise)과 모델 불확실성(Process Noise)이 존재
- 여러 레이더가 동시에 측정해도 결과가 약간씩 다름
- 바람 등 외부 요인으로 속도 일정성 가정이 깨짐
- 칼만 필터는 현재 상태 추정과 미래 상태 예측을 동시에 수행하며, 각 추정의 불확실성(분산) 을 함께 제공
- 상태 추정 불확실성을 최소화하는 최적 알고리듬
칼만 필터 예제
-
1차원 레이더가 항공기의 거리 (r)과 속도 (v)를 측정
- 상태 벡터 (\boldsymbol{x} = [r, v]^T)
- 벡터와 행렬을 사용해 시스템을 표현
-
Iteration 0 — 초기화 및 예측
-
초기화
- 첫 측정값으로 필터를 초기화 (\boldsymbol{z}_0 = [10{,}000, 200]^T)
- 측정 불확실성(표준편차): 거리 4m, 속도 0.5m/s (\boldsymbol{R}_0 = \begin{bmatrix}16 & 0 \ 0 & 0.25\end{bmatrix})
- 초기 상태 추정치 (\hat{\boldsymbol{x}}_{0,0} = \boldsymbol{z}_0)
- 초기 공분산 (\boldsymbol{P}_{0,0} = \boldsymbol{R}_0)
-
예측 단계
- 시간 간격 (\Delta t = 5s)
- 상태 전이 행렬 (\boldsymbol{F} = \begin{bmatrix}1 & 5 \ 0 & 1\end{bmatrix})
- 예측 상태 (\hat{\boldsymbol{x}}{1,0} = \boldsymbol{F}\hat{\boldsymbol{x}}{0,0} = [11{,}000, 200]^T)
- 공분산 예측(프로세스 노이즈 제외): (\boldsymbol{P}{1,0} = \boldsymbol{F}\boldsymbol{P}{0,0}\boldsymbol{F}^T = \begin{bmatrix}22.25 & 1.25 \ 1.25 & 0.25\end{bmatrix})
- 프로세스 노이즈 추가 ((\sigma_a = 0.2m/s^2)): (\boldsymbol{Q} = \begin{bmatrix}6.25 & 2.5 \ 2.5 & 1\end{bmatrix})
- 최종 예측 공분산: (\boldsymbol{P}_{1,0} = \begin{bmatrix}28.5 & 3.75 \ 3.75 & 1.25\end{bmatrix})
-
Iteration 0 요약
- 첫 측정으로 상태 및 공분산 초기화
- 상태 전이 모델을 사용해 다음 상태와 불확실성 예측
- 예측 수식
- 상태 예측: (\hat{\boldsymbol{x}}{n+1,n} = \boldsymbol{F}\hat{\boldsymbol{x}}{n,n} + \boldsymbol{G}\boldsymbol{u}_n)
- 공분산 예측: (\boldsymbol{P}{n+1,n} = \boldsymbol{F}\boldsymbol{P}{n,n}\boldsymbol{F}^T + \boldsymbol{Q})
-
Iteration 1 — 업데이트 및 예측
-
필터 업데이트
- 두 번째 측정: (\boldsymbol{z}_1 = [11{,}020, 202]^T)
- 측정 불확실성 증가 (표준편차: 거리 6m, 속도 1.5m/s) (\boldsymbol{R}_1 = \begin{bmatrix}36 & 0 \ 0 & 2.25\end{bmatrix})
- 예측 공분산 (\boldsymbol{P}_{1,0})과 비교 시, 예측 불확실성이 더 작음
- 칼만 필터는 측정과 예측을 가중 평균으로 결합
- 가중치 (K_1): Kalman Gain
- 상태 갱신식: (\hat{\boldsymbol{x}}{1,1} = \hat{\boldsymbol{x}}{1,0} + \boldsymbol{K}_1(\boldsymbol{z}1 - \boldsymbol{H}\hat{\boldsymbol{x}}{1,0}))
- 관측 행렬 (\boldsymbol{H} = \boldsymbol{I})
- 칼만 이득 계산: (\boldsymbol{K}1 = \boldsymbol{P}{1,0}\boldsymbol{H}^T(\boldsymbol{H}\boldsymbol{P}_{1,0}\boldsymbol{H}^T + \boldsymbol{R}_1)^{-1}) 결과: (\boldsymbol{K}_1 = \begin{bmatrix}0.4048 & 0.6377 \ 0.0399 & 0.3144\end{bmatrix})
- 혁신(innovation): (\boldsymbol{z}1 - \hat{\boldsymbol{x}}{1,0} = [20, 2]^T)
- 보정값: (\boldsymbol{K}_1[20, 2]^T = [9.37, 1.43]^T)
- 갱신 상태: (\hat{\boldsymbol{x}}_{1,1} = [11{,}009.37, 201.43]^T)
-
공분산 갱신
- 단순화된 형태 사용: (\boldsymbol{P}_{1,1} = (\boldsymbol{I} - \boldsymbol{K}1)\boldsymbol{P}{1,0})
- 결과: (\boldsymbol{P}_{1,1} = \begin{bmatrix}14.57 & 1.43 \ 1.43 & 0.71\end{bmatrix})
- 갱신 후 불확실성은 예측 및 측정 불확실성보다 작음 → 측정과 예측을 결합하면 항상 불확실성이 감소
-
예측 단계
- 다음 시간 (t_2) 예측
- 상태 예측: (\hat{\boldsymbol{x}}{2,1} = \boldsymbol{F}\hat{\boldsymbol{x}}{1,1} = [12{,}016.5, 201.43]^T)
- 공분산 예측: (\boldsymbol{P}{2,1} = \boldsymbol{F}\boldsymbol{P}{1,1}\boldsymbol{F}^T + \boldsymbol{Q} = \begin{bmatrix}52.86 & 7.47 \ 7.47 & 1.71\end{bmatrix})
- 시간이 지남에 따라 측정이 없으면 불확실성이 다시 증가
- 다음 시간 (t_2) 예측
-
Iteration 1 요약
- 업데이트 단계: 예측과 측정을 칼만 이득으로 결합
- 예측 단계: 갱신된 상태를 다음 시점으로 전달
- 주요 수식
- 상태 갱신: (\hat{\boldsymbol{x}}{n,n} = \hat{\boldsymbol{x}}{n,n-1} + \boldsymbol{K}_n(\boldsymbol{z}n - \boldsymbol{H}\hat{\boldsymbol{x}}{n,n-1}))
- 공분산 갱신(Joseph form): (\boldsymbol{P}_{n,n} = (\boldsymbol{I} - \boldsymbol{K}n\boldsymbol{H})\boldsymbol{P}{n,n-1}(\boldsymbol{I} - \boldsymbol{K}_n\boldsymbol{H})^T + \boldsymbol{K}_n\boldsymbol{R}_n\boldsymbol{K}_n^T)
- 칼만 이득: (\boldsymbol{K}n = \boldsymbol{P}{n,n-1}\boldsymbol{H}^T(\boldsymbol{H}\boldsymbol{P}_{n,n-1}\boldsymbol{H}^T + \boldsymbol{R}_n)^{-1})
예제 요약
- 칼만 필터의 세 단계: 초기화 → 예측 → 업데이트
- 이후에는 예측-업데이트 루프를 반복 수행
- 새로운 측정이 추가될 때마다 불확실성이 감소하며, 시스템 상태 추정이 점점 정교해짐
- 추가 학습 자료
- 무료 온라인 튜토리얼: 단계별 수치 예제 제공
- 서적 Kalman Filter from the Ground Up: 선형·비선형 필터, 구현 지침, Python/MATLAB 코드 포함

1 day ago
3









English (US) ·