11## 博士前数学路线图·第五批·子专题 A1:贝叶斯滤波框架与线性高斯滤波族——KF、Information Filter、Square Root Filters 与一致性诊断
22
3- > **底线陈述(BLUF)**:本章把后续 5-A2/A3/A4/5-B 反复引用的"地基"一次性讲透——**所有 Kalman 族滤波器都只是"贝叶斯递推 + 高斯假设"在不同代数形式下的投影**。线性高斯 KF 是最优估计(BLUE + MMSE + MAP 三合一;MMSE/MAP 等价性要求联合高斯,线性模型下自动成立),其协方差形式、信息形式、平方根形式在代数上等价但数值性态迥异:协方差形易懂却脆弱,信息形天然支持多传感器融合与稀疏 SLAM 后端,平方根形是 Apollo 登月以来航天/GNSS 工业界的数值黄金标准。而 **NEES/NIS/χ² gate** 这套一致性诊断是判断"你的滤波器是否真的工作"的唯一严肃方法,也是 MSCKF/OpenVINS 等现代 VIO 的标配。掌握本章后,EKF/UKF(5-A2)是把线性化算子插进去,ESKF/InEKF(5-A3)是把代数空间换到流形上,RTS/MHE(5-A4)是把前向递推扩展到前向-后向或滑动窗口,因子图(5-B)是把同一信息矩阵重新组织成图结构。本章按"贝叶斯框架→KF→信息形→平方根→一致性→工程"六段式展开,兼顾严格推导、伪代码、陷阱清单与代码库映射。
3+ > **底线陈述(BLUF)**:本章把后续 5-A2/A3/A4/5-B 反复引用的"地基"一次性讲透——**所有 Kalman 族滤波器都只是"贝叶斯递推 + 高斯假设"在不同代数形式下的投影**。线性高斯 KF 是最优估计(BLUE + MMSE + MAP 三合一;MMSE/MAP 等价性要求联合高斯,线性模型下自动成立),其协方差形式、信息形式、平方根形式在代数上等价但数值性态迥异:协方差形易懂却脆弱,信息形天然支持多传感器融合与稀疏 SLAM 后端,平方根形是 Apollo 登月以来航天/GNSS 工业界的数值黄金标准。而 **NEES/NIS/$\chi^2$ gate** 这套一致性诊断是判断"你的滤波器是否真的工作"的唯一严肃方法,也是 MSCKF/OpenVINS 等现代 VIO 的标配。掌握本章后,EKF/UKF(5-A2)是把线性化算子插进去,ESKF/InEKF(5-A3)是把代数空间换到流形上,RTS/MHE(5-A4)是把前向递推扩展到前向-后向或滑动窗口,因子图(5-B)是把同一信息矩阵重新组织成图结构。本章按"贝叶斯框架→KF→信息形→平方根→一致性→工程"六段式展开,兼顾严格推导、伪代码、陷阱清单与代码库映射。
44
55** 目标档位** :档位 3(博士入学)20–25h;档位 4(进阶)再加 5–8h。
66** 读者假设** :熟悉线性代数(含 Cholesky/QR/Woodbury)、多元高斯、基本随机过程;有 C++/Python 工程经验。
28281 . ** 推导** 贝叶斯滤波的预测–更新递推框架,理解 Chapman–Kolmogorov 和 Bayes 规则在其中的角色
29292 . ** 手推** 线性 KF 的全部公式(含 Joseph form),并解释 Kalman 增益的物理意义
30303 . ** 对比** 协方差形、信息形、平方根形三种 KF 实现的优劣与适用场景
31- 4 . ** 使用** NEES/NIS/χ² gate 诊断滤波器一致性,判定"过自信"还是"过保守"
31+ 4 . ** 使用** NEES/NIS/$\chi^2$ gate 诊断滤波器一致性,判定"过自信"还是"过保守"
32325 . ** 实现** 一个最小线性 KF(C++ 或 Python),含 Joseph form 和 NIS gate
3333
3434---
@@ -675,7 +675,7 @@ $$\epsilon_k = \tilde y_k^\top S_k^{-1}\tilde y_k,\qquad \tilde y_k = y_k - H_k\
675675
676676** 工程价值** :** NIS 不需要真值** ,完全由滤波器内部量($\tilde y, S$)构成,可** 在线** 逐步计算。因此:
677677- 工程诊断的** 首选** 指标(Bar-Shalom §5.4.2)。
678- - MSCKF/OpenVINS/VINS-Fusion 的 χ² gate 实际用 NIS(见 §A1.18)。
678+ - MSCKF/OpenVINS/VINS-Fusion 的 $\chi^2$ gate 实际用 NIS(见 §A1.18)。
679679- FilterPy ` KalmanFilter.mahalanobis ` 属性即 $\sqrt{\epsilon_k}$。
680680
681681** Monte Carlo 平均 NIS** :与 NEES 完全平行,$\bar\epsilon_k\in[ \chi^2_ {Nm,\alpha/2}/N,\ \chi^2_ {Nm,1-\alpha/2}/N] $。
@@ -695,7 +695,7 @@ $$\hat\rho_\tau = \frac{\sum_{k=1}^{N-\tau}\tilde y_k^\top\tilde y_{k+\tau}}{\sq
695695
696696---
697697
698- ### §A1.18 χ² Gate 用于异常观测剔除 ⭐⭐
698+ ### §A1.18 $\chi^2$ Gate 用于异常观测剔除 ⭐⭐
699699
700700** 规则** :若 $\epsilon_k = \tilde y_k^\top S_k^{-1}\tilde y_k > \chi^2_ {m, 1-\alpha}$ 则** 拒绝该量测** 。
701701
@@ -704,7 +704,7 @@ $$\hat\rho_\tau = \frac{\sum_{k=1}^{N-\tau}\tilde y_k^\top\tilde y_{k+\tau}}{\sq
704704- $m=2$(视觉像素观测):** 5.991** ✅
705705- $m=3$(3D 位置观测):7.815
706706
707- #### χ² 临界值速查表($\chi^2_ {n, 1-\alpha}$)
707+ #### $\chi^2$ 临界值速查表($\chi^2_ {n, 1-\alpha}$)
708708
709709| df $n$ | $\alpha=0.10$ | $\alpha=0.05$ | $\alpha=0.01$ |
710710| :------:| :------:| :------:| :------:|
@@ -749,7 +749,7 @@ if (chi2 > _options.chi2_multipler * chi2_check) {
749749
750750** 核对要点** :OpenVINS ** 实际用的是 NIS** (无真值),这印证 NIS 在工程界的中心地位;` chi2_multipler ` 是用户可调的放松乘子(典型 1.0–3.0),MSCKF 中可针对不同量测类型独立调。
751751
752- ** 关联** :χ² gate 是硬阈值;更平滑的替代是 ** M-estimator** (Huber、Cauchy 等),把二次损失换成 sub-quadratic 损失——详见 5-F 鲁棒估计章。
752+ ** 关联** :$\chi^2$ gate 是硬阈值;更平滑的替代是 ** M-estimator** (Huber、Cauchy 等),把二次损失换成 sub-quadratic 损失——详见 5-F 鲁棒估计章。
753753
754754#### 一致性诊断工具对比表
755755
@@ -758,7 +758,7 @@ if (chi2 > _options.chi2_multipler * chi2_check) {
758758| NEES | $(x-\hat x)^\top P^{-1}(x-\hat x)$ | $\chi^2_n$ | 是 | 仿真/MoCap | 过自信 vs 过保守 |
759759| NIS | $\tilde y^\top S^{-1}\tilde y$ | $\chi^2_m$ | 否 | 是 | 同上,工程首选 |
760760| Innovation whiteness | 自相关 $\hat\rho_ \tau$ | $\pm 1.96/\sqrt N$ 带 | 否 | 是 | 模型欠拟合 / 未建模动态 |
761- | χ² gate | $\epsilon_k > \chi^2_ {m,1-\alpha}$ | 阈值 | 否 | 是 | 单帧异常观测剔除 |
761+ | $\chi^2$ gate | $\epsilon_k > \chi^2_ {m,1-\alpha}$ | 阈值 | 否 | 是 | 单帧异常观测剔除 |
762762
763763---
764764
@@ -834,7 +834,7 @@ double nis = y.transpose() * S.llt().solve(y);
834834
835835** 中文** :
836836- 高翔《视觉 SLAM 十四讲》第二版:第 10 讲后端优化(EKF-SLAM vs BA 对比);slambook2 GitHub 有完整代码。
837- - 深蓝学院课程:《状态估计与多传感器融合》、《多传感器融合定位》、贺一家《从零开始手写 VIO》(含 MSCKF + χ² gating 实现)。
837+ - 深蓝学院课程:《状态估计与多传感器融合》、《多传感器融合定位》、贺一家《从零开始手写 VIO》(含 MSCKF + $\chi^2$ gating 实现)。
838838
839839---
840840
@@ -854,7 +854,7 @@ double nis = y.transpose() * S.llt().solve(y);
8548543 . ** Information Filter 更新公式** 。从 $p(x\mid y)\propto p(y\mid x)p(x)$ 出发,展开两个高斯的乘积,读出 $\Lambda^+ = \Lambda^- + H^\top R^{-1}H$。
8558554 . ** Woodbury 转换** 。给定 $(P^-, H, R)$,用 Woodbury 证明 $(P^{-1}+H^\top R^{-1}H)^{-1}H^\top R^{-1} = P^-H^\top(HP^-H^\top+R)^{-1}$。
8568565 . ** DARE 与 LQR 对偶** 。写出 LQR 的 DARE,指出与 KF DARE 之间"$F\leftrightarrow F^\top,\ H\leftrightarrow B,\ Q\leftrightarrow Q_c,\ R\leftrightarrow R_c$"对应;解释 Separation Principle 成立的必要条件。
857- 6 . ** NEES χ² 检验** 。给定 $n=6, N=100, \alpha=0.05$,计算 $\bar\varepsilon$ 置信区间(答案:$[ 5.340,\ 6.698] $)。
857+ 6 . ** NEES $\chi^2$ 检验** 。给定 $n=6, N=100, \alpha=0.05$,计算 $\bar\varepsilon$ 置信区间(答案:$[ 5.340,\ 6.698] $)。
8588587 . ** NIS 在线异常检测** 。写出接收 $\tilde y_k, S_k$ 后判定"拒绝/接受"该量测的伪代码,阈值取 $\chi^2_ {m,0.95}$。
8598598 . ** FilterPy 2D 跟踪 + NEES** 。用 FilterPy 实现匀速 2D 跟踪(状态 [ px,py,vx,vy] ),跑 $N=50$ 次 Monte Carlo,画出 $\bar\varepsilon_k$ 时序与 $[ 2.36,\ 3.72] $($n=3$ 假设)或对应 $n=4$ 区间。
8608609 . ** Bierman UD 实现** 。按 §A1.14 伪代码用 Python/Eigen 实现 UD 标量量测更新;验证对随机 SPD 矩阵与标量 $h, r$ 的结果与常规 KF 一致。
@@ -872,7 +872,7 @@ double nis = y.transpose() * S.llt().solve(y);
872872| 4 | 初始 $P_0$ 太小 | 早期估计锁死,不收敛 | 按物理量级设,IMU bias 初始 $\sigma$ ~ 0.1 rad/s / m/s² |
873873| 5 | $Q$ 设过小 | 过自信,滤波器发散 | NEES 监测 + tuning;常用技巧:$Q$ 设为运动模型残差方差的 2–4× |
874874| 6 | $R$ 设错(错误单位:rad vs deg) | 量测权重错,增益偏 | 写单元测试验 $R$ 的物理单位 |
875- | 7 | χ² gate 阈值按 $\alpha=0.05$ 太紧 | 好特征被误剔,退化场景更糟 | OpenVINS ` chi2_multipler ` (1.5–3.0)放松 |
875+ | 7 | $\chi^2$ gate 阈值按 $\alpha=0.05$ 太紧 | 好特征被误剔,退化场景更糟 | OpenVINS ` chi2_multipler ` (1.5–3.0)放松 |
876876| 8 | 信息形预测使用 ** Woodbury 加速形式时忘记 $F$ 可逆要求** | NaN | 改用直接双重求逆公式(只需 $Q\succ 0$);或确保动力学可逆 |
877877| 9 | UD 更新对向量 $R$ 未做去相关直接逐标量 | 融合错,等效多次加同一信息 | 先 $R = U_RD_RU_R^\top$ 去相关再标量处理 |
878878| 10 | NEES 只跑一次就下结论 | $\chi^2_n$ 方差大,误判率高 | 至少 $N\ge 30$ 次 Monte Carlo 平均 |
@@ -933,7 +933,7 @@ double nis = y.transpose() * S.llt().solve(y);
933933
934934本章建立的代数与统计机器将在后续 Kalman 族子任务中反复复用:
935935
936- - ** → 5-A2(欧氏非线性滤波)** :EKF 把 $(F, H)$ 换成 Jacobian $(\partial f/\partial x, \partial h/\partial x)$;UKF/CKF/GHKF 把贝叶斯积分近似为求积点加权;FEJ 解决线性化一致性问题(直接对应本章 NEES 过自信诊断);MSCKF 把 χ² gate 应用到滑窗视觉量测。
936+ - ** → 5-A2(欧氏非线性滤波)** :EKF 把 $(F, H)$ 换成 Jacobian $(\partial f/\partial x, \partial h/\partial x)$;UKF/CKF/GHKF 把贝叶斯积分近似为求积点加权;FEJ 解决线性化一致性问题(直接对应本章 NEES 过自信诊断);MSCKF 把 $\chi^2$ gate 应用到滑窗视觉量测。
937937- ** → 5-A3(流形滤波)** :ESKF 在 $\mathfrak{so}(3)$ 切空间上跑本章 KF;MEKF/InEKF 重新定义状态误差以获得状态无关 Jacobian;UKF-M/IKFoM/EqF 把 sigma point/不变性搬到 Lie 群。所有变体的代数核心仍是协方差形 KF 更新 + Joseph form。
938938- ** → 5-A4(迭代变体 / RTS 平滑 / MHE / 工程映射)** :IEKF 是单步 Gauss–Newton 迭代;RTS 是 KF 的前向-后向版(本章 DARE 的对偶时间方向);MHE 用滑动窗口把滤波 MAP 化;全景对比表把本章的协方差/信息/平方根三轴拉伸为 9 种现代变体。
939939- ** → 5-B(因子图与非线性最小二乘)** :本章"信息矩阵 = $J^\top\Sigma^{-1}J$"一语直接连到因子图后端的 Hessian;GTSAM/iSAM2 的 Bayes tree 就是稀疏 Cholesky 在增量场景的组织;RTS 是 smoother 的特例,因子图是平滑器的一般化。
10611061
10621062如果这个值极小,说明当前量测在模型下很不合理。
10631063
1064- χ² gate、NIS 和异常量测剔除都来自这个位置。
1064+ $\chi^2$ gate、NIS 和异常量测剔除都来自这个位置。
10651065
10661066> ** 本质洞察** :预测步是“沿时间边缘化旧状态”,更新步是“用新量测重新加权当前状态”。Kalman filter 的所有矩阵公式只是这两步在高斯族中的闭式写法。
10671067
@@ -2044,7 +2044,7 @@ struct LinearFusion2D {
20442044| 1 | 量测噪声 $R$ | 静止数据的量测方差 |
20452045| 2 | 过程噪声 $Q$ | 新息是否白、NEES 是否过上界 |
20462046| 3 | 初始协方差 $P_0$ | 初始收敛速度和是否锁死 |
2047- | 4 | χ² gate 倍率 | 外点拒绝率和好量测误拒率 |
2047+ | 4 | $\chi^2$ gate 倍率 | 外点拒绝率和好量测误拒率 |
20482048
20492049#### 练习
20502050
0 commit comments