# 간단한 레이더 예시로 이해하는 칼만 필터

> Clean Markdown view of GeekNews topic #28359. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=28359](https://news.hada.io/topic?id=28359)
- GeekNews Markdown: [https://news.hada.io/topic/28359.md](https://news.hada.io/topic/28359.md)
- Type: GN+
- Author: [neo](https://news.hada.io/@neo)
- Published: 2026-04-10T03:33:52+09:00
- Updated: 2026-04-10T03:33:52+09:00
- Original source: [kalmanfilter.net](https://kalmanfilter.net)
- Points: 4
- Comments: 1

## Topic Body

- **칼만 필터**는 잡음이 많은 환경에서 시스템의 상태를 추정하고 미래를 예측하는 **최적 상태 추정 알고리듬**
- 항공기 추적 레이더를 예시로, 거리와 속도 측정값을 이용해 **예측과 업데이트 단계를 반복**하며 정확도를 높이는 과정을 설명
- 각 단계에서 **상태 벡터, 공분산 행렬, 칼만 이득(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}\)
  - 시간이 지남에 따라 측정이 없으면 불확실성이 다시 증가
- ## 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}\)

### 예제 요약
- 칼만 필터의 세 단계: **초기화 → 예측 → 업데이트**
- 이후에는 **예측-업데이트 루프**를 반복 수행
- 새로운 측정이 추가될 때마다 불확실성이 감소하며, 시스템 상태 추정이 점점 정교해짐
- 추가 학습 자료
  - 무료 온라인 [튜토리얼](https://kalmanfilter.net/kalman-filter-tutorial.html): 단계별 수치 예제 제공
  - 서적 *Kalman Filter from the Ground Up*: 선형·비선형 필터, 구현 지침, Python/MATLAB 코드 포함

## Comments



### Comment 55009

- Author: neo
- Created: 2026-04-10T03:33:52+09:00
- Points: 1

###### [Hacker News 의견들](https://news.ycombinator.com/item?id=47693153) 
- 글쓴이임. 최근 내 **Kalman Filter 튜토리얼**의 홈페이지를 업데이트했음. 간단한 **레이더 추적 예제**를 추가해서, 통계와 선형대수 기초만 아는 사람도 이해할 수 있도록 구성했음  
  수식 유도는 최소화하면서도, 측정의 노이즈·예측 모델·필터 결합 과정을 직관적으로 보여주려 했음. 수학 수준이나 설명의 명확성에 대한 피드백을 듣고 싶음  
  - 잠깐 훑어봤는데, **프로세스 노이즈 행렬 Q**가 갑자기 등장한 느낌이었음. 책에서는 설명이 있을 것 같지만, 왜 그런 값이 되는지 간단한 근거가 있으면 좋겠음  
  - 전반적으로 명확했음. 다만 초반에 시스템 모델과 Kalman 필터 자체의 구분이 조금 모호했음. 상태 행렬을 만드는 부분까지는 모델 설명인 줄 알았는데, 그게 곧 필터 식으로 이어져서 헷갈렸음  
  - 접근성 메뉴가 정말 마음에 들었음. 페이지 가독성을 조정하기 너무 쉬웠음  
  - 6개월 전쯤 Kalman 필터를 직접 구현해보려 했는데, 응용 도메인에 따라 구조가 꽤 달라서 중간에 멈췄음. 이번 자료가 완주에 큰 도움이 될 것 같아 기대 중임  
  - 튜토리얼 초반의 “**최적 알고리즘**”이라는 표현이 다소 추상적으로 느껴졌음. 수학으로 들어가기 전에 그 의미를 간단히 풀어주면 좋겠음  

- 내가 생각하는 **직관적 가이드**는 다음과 같음  
  1. 가중 최소제곱법을 이해하고, 새로운 측정값과 불확실성을 이용해 기존 추정치를 갱신하는 방법을 익힘  
  2. 실제 평균이 변하지 않는다고 가정했을 때는 이 방식이 잘 작동함  
  3. 하지만 평균이 변한다면, Kalman 필터는 그 변화를 예측하는 모델을 사용함  
  4. 예측 후에는 다시 (1)과 같은 문제로 돌아감  
  결국 핵심은 **최소제곱법**이며, 특정 가정하에서는 이것이 최적임을 증명할 수 있음  

- [“How a Kalman Filter Works in Pictures”](https://www.bzarg.com/p/how-a-kalman-filter-works-in-picture...) 글이 정말 좋았음  
  - 나도 그 글의 **시각적 설명 방식**을 좋아함. 다만 내 튜토리얼은 단계별 **레이더 예제**를 중심으로 직관과 함정을 함께 다루는 게 목표였음  
  - 하지만 이런 “간단한 설명”들도 실제로는 너무 복잡하게 느껴질 때가 있음. Kalman 필터는 본질적으로 **추정기(estimator)** 의 한 종류임.  
    예를 들어 저역통과 필터도 일종의 추정기인데, Kalman 필터는 여기에 **프로세스 모델**과 **공분산 계산**을 더해 동적으로 조정되는 형태임.  
    위치·속도처럼 상관된 변수 간의 관계를 반영해, 하나의 측정값이 다른 변수의 추정에도 영향을 주게 함.  
    다만 선형대수 기반이라 **가우시안 노이즈**를 가정해야 하고, 비선형 문제에는 EKF나 UKF 같은 변형이 필요함  

- Kalman 필터를 이해하려면 다음 네 가지를 알아야 함  
  1. 시스템 모델  
  2. 내부 상태  
  3. 최적 추정의 정의  
  4. 공분산의 개념  
  필터는 측정값을 기반으로 시스템의 내부 상태와 공분산을 **최적 추정**하는 수학적 해법임.  
  Alex Becker의 책이 이 주제의 훌륭한 입문서라고 생각함. 예제가 풍부하고 직관을 잘 쌓게 해줌  
  - 피드백 고마움. 더 고급 주제를 다루는 **2권**을 고려 중임. 다만 EKF나 UKF는 근사적이므로 **완전한 최적해는 아님**을 명확히 하고 싶음  

- Kalman 필터를 배울 때, **서로 다른 노이즈 특성의 입력이 두 개 이상**일 때 훨씬 직관적으로 이해됨. 하지만 대부분의 튜토리얼은 단일 입력만 다룸  
  - 내 책에는 **센서 융합(sensor fusion)** 개념을 소개하는 장이 있음. 더 깊이 배우고 싶다면 Bar-Shalom이나 Blackman의 책을 추천함  
  - 사실 Kalman 필터의 본질은 **상태 추정(state estimation)** 임. 센서 융합은 그 응용 중 하나일 뿐, 둘을 동일시하면 오해가 생김  

- Kalman 필터는 실제로도 많이 쓰임. 예를 들어 **Sendspin**에서는 스피커 동기화를 위해 사용함  
  [라이브 데모](https://www.sendspin-audio.com/#live-demo)와 [구현 문서](https://github.com/Sendspin/time-filter/blob/main/docs%2Fthe...)를 참고할 수 있음  

- Kalman 필터 개념을 **사람의 증언**에도 적용할 수 있을지 궁금함  
  - 흥미로운 발상임. 인간의 관찰을 **노이즈가 있는 센서**로 볼 수도 있음. 다만 표준 Kalman 필터는 **편향 없는 가우시안 노이즈**를 가정하므로, 인간의 경우 그 가정이 성립할지는 의문임  

- [thekalmanfilter.com](https://thekalmanfilter.com/kalman-filter-explained-simply/)에서도 간단한 설명을 볼 수 있음  

- 이 글이 **비싼 책 광고**처럼 보였음. 이미 무료 자료가 많은데, 예를 들어 [Kalman and Bayesian Filters in Python](https://rlabbe.github.io/Kalman-and-Bayesian-Filters-in-Pyth...) 같은 것들이 있음. 이 책만의 장점이 있는지 궁금함  
  - 좋은 질문임. 핵심 Kalman 필터 내용은 무료로 공개되어 있음. 책에서는 **튜닝, 설계 고려사항, 추가 예제** 등을 더 다룸  
  - Roger Labbe의 책과 **Jupyter 노트북**은 정말 훌륭함. Kalman 필터뿐 아니라 일반적인 추정 문제 접근법을 이해하는 데 큰 도움이 됨  
  - 다른 자료도 많이 봤지만, 이 책은 **세부 설명이 매우 충실**해서 추천할 만함. 무료 튜토리얼도 [여기](https://kalmanfilter.net/kalman-filter-tutorial.html)에서 볼 수 있음  
  - 링크한 자료는 **고전 명작**임  
  - 좋은 자료가 많지 않음. 내가 본 것 중 진짜로 잘 만든 건 손에 꼽음. Kalman 필터를 새롭게 이해하려는 노력이 느껴지는 자료임
