1. 導論:1969年7月20日「寧靜海」著陸與僅 $2\,\text{KB}$ 記憶體電腦的奇蹟
1969年7月20日,當阿波羅11號登月艙「老鷹號(Eagle)」向月球寧靜海下降時,座艙內突然響起1202與1201程式警報。在距離月面僅數公里的關鍵時刻,尼爾·阿姆斯壯與巴茲·艾德林仰賴的核心導航設備,是由麻省理工學院儀器實驗室(MIT Instrumentation Laboratory)研發的阿波羅導引電腦(Apollo Guidance Computer, AGC)。
以現代標準來看,AGC的硬體規格極度受限:字元長度15位元(加1位元同位元檢查),時脈僅 $2.048\,\text{MHz}$,可讀寫的磁芯記憶體(RAM)僅有 $2,048$ 字元(約 $4\,\text{KB}$,實際可用工作區僅約 $2\,\text{KB}$),唯讀磁芯繩記憶體(ROM)也只有 $36,864$ 字元(約 $72\,\text{KB}$)。更嚴峻的是,太空船上的每一個感測器單獨來看都充滿誤差:
- 慣性測量單元(IMU):陀螺儀與加速度計能連續測量姿態與加速度,但透過對加速度二次積分計算位置(航位推算,Dead Reckoning)時,微小的偏置誤差與熱雜訊會隨時間以 $t^2$ 甚至 $t^3$ 累積漂移。
- 光學六分儀(Sextant)星光觀測:太空人手動測量恆星與地月邊緣的夾角,雖無時間累積漂移,但存在人為對準誤差且只能離散採樣。
- 著陸雷達與深空網路都卜勒測距:受月面隕石坑起伏、揚塵與多路徑反射影響,含有劇烈的隨機高頻雜訊。
如何在一台只有 $2\,\text{KB}$ RAM的電腦上,將「隨時間漂移的物理模型預測」與「瞬間劇烈跳動的感測器觀測」即時融合,算出比任何單一感測器都精確得多的真實位置與速度?
解答這個難題並拯救阿波羅計畫的演算法,正是匈牙利裔數學家、控制理論家魯道夫·卡爾曼(Rudolf Emil Kálmán, 1930–2016)於1960年發表的卡爾曼濾波器(Kalman Filter)。
1.1 卡爾曼1960年論文與NASA艾姆斯研究中心的命運交會
1960年3月,卡爾曼發表了經典論文 “A New Approach to Linear Filtering and Prediction Problems”,突破了維納濾波(Wiener Filter)受限於頻域平穩隨機過程的框架,首次以時域狀態空間模型(State-Space Model)與正交投影重構了最佳濾波理論。
1960年11月,卡爾曼應史丹利·施密特(Stanley F. Schmidt)之邀訪問了位於加州山景城的NASA艾姆斯研究中心(NASA Ames Research Center)。在此之前,軌道確定一直沿用高斯(Carl Friedrich Gauss)於1801年為重尋穀神星(Ceres)發明的批次最小平方法(Batch Least Squares)。批次最小平方法必須儲存所有歷史觀測資料 $\mathbf{Z}_{1:T} = \{\mathbf{z}_1, \dots, \mathbf{z}_T\}$,每當新觀測到來時都要重新求解規模不斷膨脹的正規方程式,計算複雜度高達 $O(T^3)$,記憶體消耗為 $O(T)$,這在僅有 $2\,\text{KB}$ 記憶體的AGC上根本不可能實現。
卡爾曼證明了:利用一階馬可夫性質(Markov Property),系統完全不需要保存任何歷史測量資料!只需在記憶體中保留當前狀態估計向量 $\hat{\mathbf{x}}_{k-1\mid k-1}$ 與誤差共變異數矩陣 $\mathbf{P}_{k-1\mid k-1}$ 這兩個充分統計量(Sufficient Statistics),每步僅需 $O(1)$ 的記憶體與固定計算量,就能遞迴地算出與全歷史批次處理完全等價的最佳估計。施密特隨即將其推廣至非線性軌道力學,發明了擴展卡爾曼濾波器(EKF,亦稱卡爾曼-施密特濾波器),MIT的詹姆斯·波特(James E. Potter)又發明了避免16位元定點運算下共變異數出現負特徵值的平方根卡爾曼濾波(Square-Root Filter),最終成就人類登月壯舉。
2. 一維空間中的數學奇蹟:為什麼兩個帶雜訊常態分佈相乘,變異數會比任何單一感測器都小?
在進入多維矩陣之前,我們先在一維空間 $x \in \mathbb{R}$ 中揭示卡爾曼濾波最核心的貝氏奇蹟。
假設航位推算(預測)告訴我們太空船位置服從高斯先驗分佈 $p(x) = \mathcal{N}(\mu_p, \sigma_p^2)$,同時GPS或雷達感測器的觀測概似函數服從另一高斯分佈 $p(z \mid x) = \mathcal{N}(\mu_m, \sigma_m^2)$(記測量值 $z \equiv \mu_m$)。根據貝氏定理(Bayes’ Rule),後驗機率密度正比於兩個高斯機率密度函數的乘積:
$$p(x \mid z) \propto \exp\!\left(-\frac{(x - \mu_p)^2}{2\sigma_p^2}\right) \cdot \exp\!\left(-\frac{(x - \mu_m)^2}{2\sigma_m^2}\right) = \exp\!\left( -\frac{(x - \mu_p)^2}{2\sigma_p^2} - \frac{(x - \mu_m)^2}{2\sigma_m^2} \right) \propto \exp\!\left(-\frac{(x - \mu_{\text{new}})^2}{2\sigma_{\text{new}}^2}\right)$$我們對指數上的二次式透過配方法(Completing the Square)展開並對比 $x^2$ 與 $x$ 的係數:
$$J(x) = \frac{1}{2}\left( \frac{1}{\sigma_p^2} + \frac{1}{\sigma_m^2} \right) x^2 - \left( \frac{\mu_p}{\sigma_p^2} + \frac{\mu_m}{\sigma_m^2} \right) x + \text{const} = \frac{1}{2\sigma_{\text{new}}^2}x^2 - \frac{\mu_{\text{new}}}{\sigma_{\text{new}}^2}x + \text{const}$$由此立即推導出後驗變異數 $\sigma_{\text{new}}^2$、後驗平均數 $\mu_{\text{new}}$ 以及一維卡爾曼增益 $K \in [0, 1]$ 的精確解析解:
$$K = \frac{\sigma_p^2}{\sigma_p^2 + \sigma_m^2}, \qquad \mu_{\text{new}} = \mu_p + K(z - \mu_p) = (1 - K)\mu_p + K z$$$$\frac{1}{\sigma_{\text{new}}^2} = \frac{1}{\sigma_p^2} + \frac{1}{\sigma_m^2} \implies \sigma_{\text{new}}^2 = (1 - K)\sigma_p^2 = \frac{\sigma_p^2 \sigma_m^2}{\sigma_p^2 + \sigma_m^2} < \min(\sigma_p^2, \sigma_m^2)!$$核心洞察(精確度的可加性):在統計學與資訊理論中,變異數的倒數 $\tau = 1/\sigma^2$ 被稱為精確度(Precision / 費雪資訊量 Fisher Information)。兩個獨立高斯資訊源融合時,它們的精確度直接相加($\tau_{\text{new}} = \tau_p + \tau_m$,恰如並聯電阻的電導相加)。因此,只要感測器的雜訊變異數不是無窮大($\sigma_m^2 < \infty$),融合後的不確定性 $\sigma_{\text{new}}^2$ 嚴格小於預測變異數與感測器變異數中的任何一個!例如當 $\sigma_p = 4\,\text{m}$ ($\sigma_p^2=16$)、$\sigma_m = 3\,\text{m}$ ($\sigma_m^2=9$) 時,$K = 16/25 = 0.64$,融合後的標準差驟降至 $\sigma_{\text{new}} = 2.4\,\text{m}$!
3. 多變量狀態空間表述與卡爾曼濾波五大方程式的完整推導
考慮 $n$ 維狀態向量 $\mathbf{x}_k \in \mathbb{R}^n$ 與 $m$ 維觀測向量 $\mathbf{z}_k \in \mathbb{R}^m$ 的離散時間線性狀態空間模型:
$$\mathbf{x}_k = \mathbf{F}_k \mathbf{x}_{k-1} + \mathbf{B}_k \mathbf{u}_k + \mathbf{w}_k, \qquad \mathbf{z}_k = \mathbf{H}_k \mathbf{x}_k + \mathbf{v}_k$$其中過程雜訊 $\mathbf{w}_k \sim \mathcal{N}(\mathbf{0}, \mathbf{Q}_k)$ 與觀測雜訊 $\mathbf{v}_k \sim \mathcal{N}(\mathbf{0}, \mathbf{R}_k)$ 互不相關。
第一步:預測步(Time Update / Chapman-Kolmogorov)
對狀態方程式取條件期望值 $\hat{\mathbf{x}}_{k\mid k-1} = \mathbb{E}[\mathbf{x}_k \mid \mathbf{Z}_{1:k-1}]$,並計算先驗誤差 $\tilde{\mathbf{x}}_{k\mid k-1} = \mathbf{F}_k \tilde{\mathbf{x}}_{k-1\mid k-1} + \mathbf{w}_k$ 的共變異數,得到前兩個方程式:
$$\hat{\mathbf{x}}_{k\mid k-1} = \mathbf{F}_k \hat{\mathbf{x}}_{k-1\mid k-1} + \mathbf{B}_k \mathbf{u}_k, \qquad \mathbf{P}_{k\mid k-1} = \mathbf{F}_k \mathbf{P}_{k-1\mid k-1} \mathbf{F}_k^T + \mathbf{Q}_k$$第二步:更新步(Measurement Update / Bayes)與最佳卡爾曼增益推導
定義新息(Innovation / 觀測殘差) $\tilde{\mathbf{y}}_k = \mathbf{z}_k - \mathbf{H}_k \hat{\mathbf{x}}_{k\mid k-1} = \mathbf{H}_k \tilde{\mathbf{x}}_{k\mid k-1} + \mathbf{v}_k$,其新息共變異數為 $\mathbf{S}_k = \mathbf{H}_k \mathbf{P}_{k\mid k-1} \mathbf{H}_k^T + \mathbf{R}_k$。線性更新式為:
$$\hat{\mathbf{x}}_{k\mid k} = \hat{\mathbf{x}}_{k\mid k-1} + \mathbf{K}_k \tilde{\mathbf{y}}_k$$後驗估計誤差為 $\tilde{\mathbf{x}}_{k\mid k} = (\mathbf{I} - \mathbf{K}_k \mathbf{H}_k)\tilde{\mathbf{x}}_{k\mid k-1} - \mathbf{K}_k \mathbf{v}_k$。取外積期望值即得對任意增益 $\mathbf{K}_k$ 恆成立的約瑟夫穩定共變異數形式(Joseph Stabilized Covariance Form):
$$\mathbf{P}_{k\mid k} = (\mathbf{I} - \mathbf{K}_k \mathbf{H}_k)\mathbf{P}_{k\mid k-1}(\mathbf{I} - \mathbf{K}_k \mathbf{H}_k)^T + \mathbf{K}_k \mathbf{R}_k \mathbf{K}_k^T = \mathbf{P}_{k\mid k-1} - \mathbf{K}_k \mathbf{H}_k \mathbf{P}_{k\mid k-1} - \mathbf{P}_{k\mid k-1}\mathbf{H}_k^T \mathbf{K}_k^T + \mathbf{K}_k \mathbf{S}_k \mathbf{K}_k^T$$為了最小化均方誤差期望值 $J(\mathbf{K}_k) = \mathbb{E}[\|\mathbf{x}_k - \hat{\mathbf{x}}_{k\mid k}\|_2^2] = \operatorname{Tr}(\mathbf{P}_{k\mid k})$,利用矩陣微積分求跡對矩陣 $\mathbf{K}_k$ 的導數並令其為零:
$$\frac{\partial \operatorname{Tr}(\mathbf{P}_{k\mid k})}{\partial \mathbf{K}_k} = -2\mathbf{P}_{k\mid k-1}\mathbf{H}_k^T + 2\mathbf{K}_k \mathbf{S}_k = \mathbf{0} \implies \mathbf{K}_k = \mathbf{P}_{k\mid k-1}\mathbf{H}_k^T \mathbf{S}_k^{-1}$$將最佳增益 $\mathbf{K}_k$ 代回展開式,後兩項相互抵消,得到簡化的後驗共變異數更新方程式:
$$\mathbf{P}_{k\mid k} = (\mathbf{I} - \mathbf{K}_k \mathbf{H}_k)\mathbf{P}_{k\mid k-1}$$
flowchart TD
Init["初始狀態與共變異數<br/>x̂₀|₀, P₀|₀"] --> Predict["【預測步 Time Update】<br/>x̂ₖ|ₖ₋₁ = Fₖ x̂ₖ₋₁|ₖ₋₁ + Bₖ uₖ<br/>Pₖ|ₖ₋₁ = Fₖ Pₖ₋₁|ₖ₋₁ Fₖᵀ + Qₖ"]
Predict --> Innov["【計算新息與新息共變異數】<br/>ỹₖ = zₖ - Hₖ x̂ₖ|ₖ₋₁<br/>Sₖ = Hₖ Pₖ|ₖ₋₁ Hₖᵀ + Rₖ"]
Innov --> Gain["【計算最佳卡爾曼增益】<br/>Kₖ = Pₖ|ₖ₋₁ Hₖᵀ Sₖ⁻¹"]
Gain --> Update["【更新步 Measurement Update】<br/>x̂ₖ|ₖ = x̂ₖ|ₖ₋₁ + Kₖ ỹₖ<br/>Pₖ|ₖ = (I - Kₖ Hₖ) Pₖ|ₖ₋₁"]
Update --> Predict
4. 最佳性理論保證(BLUE / MMSE)、對偶性與LQG分離定理
- 高斯-馬可夫定理與BLUE/MMSE最佳性:當雜訊嚴格服從高斯分佈時,卡爾曼濾波器在所有線性與非線性估計器中達到全域最小均方誤差(MMSE);即使雜訊非高斯,只要期望值為零且共變異數已知,它依然是所有線性不偏估計器中的最佳線性不偏估計器(BLUE)。
- 卡爾曼對偶性與LQG分離定理(Separation Principle):狀態估計的黎卡提方程式(Riccati Equation)與最佳控制LQR的黎卡提方程式具有嚴格的數學對偶性(可觀測性 $\leftrightarrow$ 可控制性)。在線性二次高斯(LQG)最佳控制中,工程師可以完全獨立地設計卡爾曼濾波器(估計 $\hat{\mathbf{x}}_{k\mid k}$)與確定性LQR控制器(回授矩陣 $\mathbf{L}_k$),再令 $\mathbf{u}_k^* = -\mathbf{L}_k \hat{\mathbf{x}}_{k\mid k}$,即可直接實現全域隨機最佳控制!
5. 超越線性系統:EKF、UKF、粒子濾波與自動駕駛SLAM
現實世界中的極座標雷達與車輛運動學 $\mathbf{x}_k = f(\mathbf{x}_{k-1}, \mathbf{u}_k) + \mathbf{w}_k, \mathbf{z}_k = h(\mathbf{x}_k) + \mathbf{v}_k$ 均為非線性:
- 擴展卡爾曼濾波(EKF):利用一階泰勒展開,圍繞當前估計點計算雅可比矩陣(Jacobians)$\mathbf{F}_k = \left.\frac{\partial f}{\partial \mathbf{x}}\right|_{\hat{\mathbf{x}}_{k-1\mid k-1}}$ 與 $\mathbf{H}_k = \left.\frac{\partial h}{\partial \mathbf{x}}\right|_{\hat{\mathbf{x}}_{k\mid k-1}}$。
- 無跡卡爾曼濾波(UKF,Julier & Uhlmann 1997):無需計算雅可比矩陣,透過決定性選取的 $2n+1$ 個Sigma點(Sigma Points)直接經非線性函數傳播,達到三階泰勒展開精度。
- 粒子濾波(Particle Filter / SMC)與自動駕駛SLAM:以隨機粒子群處理多峰分佈;在SLAM與視覺慣性里程計(VIO)中,利用李群流形 $SO(3)/SE(3)$ 上的誤差狀態卡爾曼濾波(ESKF)及共變異數非對角區塊實現迴路閉合(Loop Closure)。
flowchart TD
A["狀態估計模型選擇"] --> B{"系統與觀測是否線性?"}
B -- "是" --> C["標準卡爾曼濾波 (Linear KF)<br/>嚴格MMSE/BLUE最佳"]
B -- "否 (非線性)" --> D{"後驗分佈是否為單峰近似高斯?"}
D -- "否 (多峰分佈)" --> E["粒子濾波 (Particle Filter / SMC)<br/>蒙地卡羅非參數粒子群"]
D -- "是" --> F{"非線性程度與雅可比可微性?"}
F -- "中等非線性 / 易求導" --> G["擴展/誤差狀態卡爾曼濾波 (EKF / ESKF)<br/>一階雅可比線性化"]
F -- "強非線性 / 免求導" --> H["無跡卡爾曼濾波 (UKF)<br/>2n+1個Sigma點三階精度"]
| 濾波演算法 | 線性假設 | 分佈表示方式 | 單步計算複雜度 | 理論精度 | 典型工程應用 |
|---|---|---|---|---|---|
| 標準卡爾曼濾波 (KF) | 嚴格線性 | 精確高斯分佈 $\mathcal{N}(\hat{\mathbf{x}}, \mathbf{P})$ | $O(n^3)$ | 全域精確最佳 (MMSE/BLUE) | 雷達目標追蹤、LQG飛行控制 |
| 擴展卡爾曼濾波 (EKF) | 非線性(雅可比線性化) | 局部高斯近似 | $O(n^3)$ | 一階泰勒精度 | 阿波羅導引、GPS/IMU整合導航、VIO |
| 無跡卡爾曼濾波 (UKF) | 非線性(免求導) | $2n+1$ 個決定性Sigma點 | $O(n^3)$ | 三階泰勒精度 | 衛星姿態確定、電動車電池SOC估計 |
| 粒子濾波 (PF / SMC) | 任意非線性/非高斯 | $N_p$ 個加權蒙地卡羅粒子 | $O(N_p \cdot n)$ | $N_p \to \infty$ 收斂至真後驗 | 光達全域定位 (MCL)、地形比對導航 |
6. Python二維車輛追蹤完整模擬(同時還原未測量的速度向量)
下面的Python程式碼模擬了4維狀態 $\mathbf{x}_k = [p_x, p_y, v_x, v_y]^T$ 的二維車輛追蹤。儘管感測器 $\mathbf{H}$ 僅測量位置 $(p_x, p_y)$ 而不測量速度,卡爾曼濾波器仍能透過共變異數矩陣的非對角耦合項精確重構出隱藏的速度向量!
| |
模擬顯示:原始GPS位置均方根誤差(RMSE)為 $4.12\,\text{m}$,經卡爾曼濾波融合後穩態誤差降至 $1.18\,\text{m}$(誤差削減逾71%),且未被直接測量的速度向量也被精確重構至 $0.85\,\text{m/s}$ 以內。從阿波羅登月到自動駕駛,卡爾曼濾波正是人類透過嚴格量化「自身不確定性之幾何結構($\mathbf{P}_{k\mid k}$)」來逼近物理真相的最高數學典範。
