AEGLOSLAB 제어공학 종합 핸드북

제5부 상태 추정: 칼만필터

5.1 확률·잡음 모델 기초

제5부 상태 추정: 칼만필터 · 토대. 센서 측정에는 잡음이 많고 모델은 근사다(1.1.11). 그 불확실성을 수로 다뤄야 모델 예측과 측정을 최적으로 융합할 수 있다(칼만필터). 평균·분산·가우시안·공분산을 익히고, 두 가우시안의 융합이 곧 칼만 갱신임을 본다 — 0.2.7의 "확률 기초", 4.4.6의 "최적 L엔 잡음 통계가 필요"가 여기서 본격화된다.

이 장을 마치면 불확실성을 공분산 행렬로 표현하고, 가우시안의 선형변환·합·곱을 다루며, 프로세스·측정 잡음 모델을 세우고, 1D 융합이 스칼라 칼만 갱신임을 이해해야 한다.

5.1.1 왜 확률 — 불확실성을 수로 다룬다

관측기(4.4)는 모델로 예측하고 측정으로 교정했다. 그런데 모델과 측정 중 무엇을 더 신뢰해야 하나? 모델이 정확하고 센서 잡음이 크면 예측을, 모델이 부정확하고 센서가 정밀하면 측정을 신뢰해야 한다. 이 "얼마나 신뢰하나"를 정량화하는 언어가 확률이고, 그 최적 가중이 칼만 이득(5.2)이다. 4.4.6에서 "최적 L은 잡음 통계로 정해진다"고 미룬 그 통계를 지금 세운다.

5.1.2 평균·분산 — 불확실성의 크기

확률변수 $x$(불확실한 양)를 두 수로 요약:

  • 평균(기댓값) $\mu= \operatorname{E}[x]$: 중심, 최선의 한 점 추정.
  • 분산 $\sigma^2 = \operatorname{E}[(x-\mu)^2]$: 퍼짐 = 불확실성의 크기. 표준편차 $\sigma$는 그 제곱근(같은 단위).

$\sigma$가 작으면 확신, 크면 모호. 추정이란 결국 "$\mu$는 어디고 $\sigma$는 얼마인가"를 답하는 일이다.

5.1.3 가우시안 분포 — 왜 어디에나

잡음은 보통 가우시안(정규분포) $N(\mu, \sigma^2)$으로 모델링한다. 종 모양 곡선이며 평균·분산 둘이면 완전히 정해진다.

−4 −2 0 2 4 x p(x) ±1σ 68%
가우시안 분포 N(μ,σ²)

왜 가우시안인가 — 네 가지 실용적 이유:

  • 중심극한정리: 많은 작은 잡음의 합은 가우시안에 가까워진다(실제 잡음의 흔한 모습).
  • 선형 연산에 닫혀 있다: 가우시안을 선형변환·합해도 가우시안(5.1.5) — 그래서 계속 평균·공분산만 추적하면 된다. 칼만이 가능한 핵심 이유.
  • 평균·공분산만으로 완전 기술: 추적할 것이 둘뿐.
  • 최대 엔트로피: 평균·분산만 알 때 가장 "보수적인"(가정 적은) 분포.

5.1.4 다변수 가우시안과 공분산 행렬

상태가 여럿이면($x\in\mathbb{R}^n$) 평균은 벡터 $\mu$, 퍼짐은 공분산 행렬 $\Sigma$(또는 $P$):

$$\Sigma = E[\,(x-\mu)(x-\mu)^T\,]$$ — $n\times n$, 대칭, 준양정 — 0.2.5.4

  • 대각 원소 $\Sigma_{ii}$ = 각 상태의 분산($x_i$의 불확실성).
  • 비대각 $\Sigma_{ij}$ = 상태 간 상관($x_i$와 $x_j$가 함께 움직이는 정도). 0이면 무상관.
  • 오차 타원(error ellipse): $\Sigma$는 불확실성의 모양을 타원(체)으로 그린다. 주축 방향 = $\Sigma$의 고유벡터, 축 길이 ∝ √고유값. 길쭉한 타원 = 어떤 방향은 확실하고 다른 방향은 모호.
−2 0 2 4 −2 −1 0 1 2 x1 x2 μ 주축=고유벡터 길이=√고유값
공분산 오차 타원

5.1.5 가우시안 연산 — 칼만의 엔진

칼만필터는 가우시안에 대한 세 연산의 반복일 뿐이다.

5.1.5.1 선형변환 → 불확실성 전파

$x \sim N(\mu, \Sigma)$를 선형변환 $y = Ax + b$하면:

$$y \sim N(A\cdot\mu + b,\ A\cdot\Sigma\cdot A^T)$$

$\Sigma\to A\Sigma A^T$가 핵심 — 상태가 동역학 $A$를 거치면 불확실성이 이렇게 전파된다(칼만의 예측 단계, 5.2).

5.1.5.2 독립 가우시안의 합 → 공분산 더하기

$x \sim N(\mu_1,\Sigma_1)$와 독립인 w ~ N(0,Q)를 더하면:

$$x + w \sim N(\mu_1,\ \Sigma_1 + Q)$$ — 공분산이 커진다 = 불확실성 증가

프로세스 잡음 $w$가 더해지면 예측이 덜 확실해진다(5.1.6).

5.1.5.3 가우시안의 곱(베이즈 융합) → 불확실성 감소

같은 양에 대한 두 독립 가우시안 추정을 곱하면(=두 정보를 융합) 또 가우시안이 되고, 분포가 더 좁아진다(확실해진다):

−2 0 2 4 6 8 x p(x) 예측(넓음) 측정 융합(더 좁음)
베이즈 융합 — 곱은 더 좁아진다

정밀도(precision = 1/분산)가 더해진다. 두 정보를 합치면 둘 중 어느 것보다도 확실해진다 — 이것이 센서 융합의 본질이자 칼만 갱신 단계다(5.1.8).

5.1.6 프로세스 잡음·측정 잡음

상태공간(4.1)에 두 잡음을 더한 것이 칼만의 모델이다(이산형):

$$x[k+1] = A\cdot x[k] + B\cdot u[k] + w[k], \qquad w \sim N(0, Q)$$ — 프로세스 잡음(모델 불확실성·외란)

$$y[k] = C\cdot x[k] + v[k], \qquad v \sim N(0, R)$$ — 측정 잡음(센서 잡음)

  • $Q$(프로세스 잡음 공분산): 모델이 못 담은 동역학·외란의 크기. 크면 "모델을 덜 신뢰한다".
  • $R$(측정 잡음 공분산): 센서가 얼마나 부정확한가. 크면 "측정을 덜 신뢰한다".
  • 표준 가정: $w, v$는 평균 0·백색(시간 무상관)·서로 독립. (현실은 다를 수 있다 — 5.1.10.)

⚠️ 기호 충돌 주의: 칼만의 $Q, R$(잡음 공분산)은 LQR의 $Q, R$(비용 가중, 4.5)과 다른 것인데 전통적으로 같은 글자를 쓴다. 쌍대성으로 깊은 연결은 있지만(추정 리카티 ↔ 제어 리카티) 같은 행렬이 아니다. 문맥으로 구분하라 — 이 책은 칼만 잡음을 가리킬 때 "잡음 공분산 $Q,R$"로 명시한다.

5.1.7 베이즈 추정의 틀 — 예측 × 측정 = 사후

추정은 베이즈 정리의 반복이다:

사후(posterior) ∝ 사전(prior) × 가능도(likelihood)
   "측정 후 믿음"   "예측한 믿음"   "측정이 말하는 것"

가우시안 세계에서는 이 곱이 또 가우시안(5.1.5.3)이라, 평균·공분산만 갱신하면 된다. 칼만필터는 이것을 매 시각 재귀적으로 수행하는 것:

반복 예측(predict): 모델로 사전 분포 만들기 (5.1.5.1·5.1.5.2, 공분산 ↑) 갱신(update): 측정으로 융합해 사후 분포 (5.1.5.3, 공분산 ↓)

다음 장(5.2)이 이 두 단계를 행렬로 구체화한다.

5.1.8 1D 융합 예제 — 이것이 스칼라 칼만 갱신

한 양을 두 번 추정했다: 예측 $\hat{x}_1 \pm\sigma_1$(분산 $\sigma_1^2$)와 측정 $z \pm\sigma_2$. 융합(곱):

$$1/\sigma^2 = 1/\sigma_1^2 + 1/\sigma_2^2$$ — 정밀도 더하기

$$\hat{x} = \sigma^2\cdot(\hat{x}_1/\sigma_1^2 + z/\sigma_2^2)$$ — 정밀도 가중 평균

이를 칼만 형태로 다시 쓰면:

$$K = \sigma_1^2 / (\sigma_1^2 + \sigma_2^2)$$ — 칼만 이득 (0~1)

$$\hat{x} = \hat{x}_1 + K\cdot(z - \hat{x}_1)$$ — 예측 + 이득×혁신(innovation)

$$\sigma^2 = (1 - K)\cdot\sigma_1^2$$ — 갱신된 분산 (항상 $\sigma_1^2$보다 작다!)

읽는 법: $K$는 측정을 얼마나 신뢰할지다. 측정이 정밀하면($\sigma_2$ 작음) K→1(측정 따름), 측정이 부정확하면($\sigma_2$ 큼) K→0(예측 유지). 그리고 융합 후 분산은 항상 줄어든다 — 정보를 더하면 더 확실해진다. 이 세 줄이 칼만필터의 전부이고, 5.2은 이것을 벡터·행렬로 확장한 것이다.

5.1.9 도구로 — 샘플·공분산·융합

# gaussian.py — 가우시안 샘플·공분산·1D 융합
import numpy as np
rng = np.random.default_rng(0)

# 다변수 가우시안 샘플과 공분산 추정
mu = np.array([0.0, 0.0]); Sig = np.array([[2.0, 0.8],[0.8, 1.0]])
X = rng.multivariate_normal(mu, Sig, size=10000)
print("추정 공분산:\n", np.cov(X.T))        # Sig에 가까워야

# 선형변환 전파: y=Ax → AΣAᵀ
A = np.array([[1, 1],[0, 1]])
print("AΣAᵀ:\n", A @ Sig @ A.T)

# 1D 융합 (= 스칼라 칼만 갱신)
x1, s1 = 2.0, 1.0**2       # 예측 2.0, 분산 1.0
z,  s2 = 2.6, 0.5**2       # 측정 2.6, 분산 0.25
K = s1 / (s1 + s2)
x  = x1 + K*(z - x1);  s = (1 - K)*s1
print(f"K={K:.2f}  fused x={x:.3f}  var={s:.3f} (둘보다 작음)")

검증(docker ce-verify, control 0.10.2 / numpy 2.2.6 / Python 3.10, 시드 고정 rng=default_rng(0) — 아래 값은 여러분 환경에서도 그대로 재현된다):

추정 공분산:
 [[1.96784949 0.79896437]
 [0.79896437 1.00462729]]
AΣAᵀ:
 [[4.6 1.8]
 [1.8 1. ]]
K=0.80  fused x=2.480  var=0.200 (둘보다 작음)

10000개 표본의 공분산 추정치가 참값 Sig=[[2.0,0.8],[0.8,1.0]]에 근접하고(대각 1.97·1.00, 비대각 0.80 — 표본 오차 수준), $A\Sigma A^T$도 손계산([[4.6,1.8],[1.8,1.0]])과 정확히 일치한다. 1D 융합은 측정($\sigma_2=0.5$)이 예측($\sigma_1=1.0$)보다 정밀해 $K=0.80$으로 측정 쪽으로 더 치우치고($x=2.48$, 측정값 2.6에 가까움), 융합 분산 0.200은 두 입력 분산(1.0·0.25) 중 더 작은 쪽보다도 작다 — 5.1.8의 "융합은 항상 더 확실해진다"가 수로 확인된다. ✅ 검증됨.

5.1.10 정직 — 가정은 이상화다

칼만필터의 최적성은 가정에 기반한다. 현실은 종종 어긋난다.

  • 백색·가우시안·독립? 실제 잡음은 유색(시간 상관)·편향(0 평균 아님)·비가우시안·서로 상관일 수 있다. 가정이 성립하지 않으면 추정이 최적이 아니거나 발산한다.
  • $Q, R$ 튜닝이 어렵다: 잡음 공분산을 정확히 아는 경우는 드물다. $Q,R$ 고르기가 칼만 실무의 실제 병목이다(LQR의 $Q,R$처럼). 잘못 설정하면 필터가 측정을 과신(떨림)하거나 예측을 과신(지연·발산).
  • GIGO: 잡음 통계가 부정확하면 "최적" 추정도 부정확하다. 통계는 데이터·물리·실험으로 정하고 검증한다.
  • 편향·이상치: 가우시안은 큰 이상치(outlier)에 약하다 — 견고 추정·이상치 제거가 별도로 필요.

5.1.11 정리 — 그리고 다음 장

  • 불확실성은 평균·분산(공분산 $\Sigma$)으로 수치화한다. 가우시안은 평균·공분산만으로 완전하고 선형 연산에 닫혀 있어 추정에 이상적(5.1.3·5.1.4).
  • 칼만의 엔진은 가우시안의 선형변환($A\Sigma A^T$, 전파)·합(공분산 더하기)·곱(베이즈 융합, 불확실성 감소)(5.1.5).
  • 모델은 프로세스 잡음 $Q$·측정 잡음 $R$을 더한 상태공간(5.1.6, LQR의 $Q,R$과 혼동 주의). 추정은 예측×측정=사후의 베이즈 반복(5.1.7).
  • 1D 융합이 곧 스칼라 칼만 갱신(5.1.8) — $K$가 측정 신뢰도, 융합은 항상 불확실성을 줄인다. 가정은 이상화이며 $Q,R$ 튜닝이 실무 병목(5.1.10).

다음 5.2에서는 이 융합을 벡터·행렬로 확장한 칼만필터(KF)를 완성한다 — 예측·갱신 방정식, 칼만 이득의 의미, 선형 추정 실습.

5.1.12 연습·생각해 볼 것

  1. 분산 직관. 두 센서의 표준편차가 $\sigma_A=0.1$, $\sigma_B=0.5$다. 어느 쪽을 더 신뢰해야 하나? 융합하면 결과의 표준편차는 둘보다 큰가 작은가? (5.1.2·1.2.3)
  2. 공분산 읽기. Σ=[[4, −3],[−3, 9]]에서 각 상태의 표준편차와 두 상태의 상관 부호를 말하라. 오차 타원은 어느 방향으로 기울어져 있나? (5.1.4)
  3. 불확실성 전파. x~N(0, diag(1,4))를 $y=[[1,1],[0,1]]x$로 변환하면 $y$의 공분산은? $y_1$의 분산이 왜 커졌나? (5.1.5.1)
  4. 1D 융합. 예측 $\hat{x}_1=10, \sigma_1=2$, 측정 $z=12, \sigma_2=1$을 융합하라($K$, 융합 평균, 융합 표준편차). 측정이 예측보다 정밀하니 결과가 어느 쪽에 가까운가? (5.1.8)
  5. Q vs R. 칼만에서 $Q$를 크게(모델 불신), $R$을 크게(측정 불신) 설정하면 필터가 각각 어떻게 동작하나? 두 $Q,R$이 LQR의 $Q,R$과 왜 다른지 한 줄로. (5.1.6)
  6. 가정 위반. 센서에 일정한 편향(예: 항상 +0.3)이 있다면, "평균 0" 가정이 위배되어 추정에 무슨 일이 생기나? 어떻게 대응하겠나? (5.1.10)
  7. (손으로) gaussian.py로 1D 융합을 여러 $\sigma_2$에 대해 실행해, $\sigma_2$가 작아질수록 K→1(측정 신뢰)·$\sigma_2$가 커질수록 K→0(예측 신뢰)이 됨을 확인하라. (검증 필요)

막히면 "불확실성=공분산, 융합=정밀도 더하기(항상 확실해짐), K=측정 신뢰도"로 돌아가라 — 그것이 칼만필터의 출발점이다.