2、数学基础(上):高斯分布、协方差矩阵、矩阵运算回顾

各位同学,欢迎来到第二讲。

说实话,很多做导航融合的工程师,最后栽跟头的地方往往不是卡尔曼滤波本身,而是数学基础。我见过太多人,公式背得滚瓜烂熟,一上真机就炸。为什么?因为没搞懂背后的数学直觉。

今天这一讲,咱们就把高斯分布、协方差矩阵、还有矩阵运算这几个硬骨头啃下来。别怕,我会用我踩过的坑来帮你铺路。

2.1 高斯分布:为什么它无处不在?

先问个问题:为什么卡尔曼滤波里到处都是高斯分布?

说白了,因为高斯分布是自然界最诚实的噪声模型。你想想看,传感器测量值,比如GPS的位置、IMU的加速度,它们的误差大多服从高斯分布——中间大、两头小,偏离均值越远的概率越低。

核心公式(一维高斯):

p(x) = (1 / (σ * √(2π))) * exp(-(x - μ)² / (2σ²))

其中 μ 是均值,σ 是标准差。μ 决定了分布的中心,σ 决定了分布的胖瘦。

我在做无人机定位时遇到过一件事:GPS信号受多径效应干扰,误差分布变成了双峰。这时候再用高斯假设去套,卡尔曼滤波直接发散。嗯,这里要注意——高斯分布假设不成立时,你得考虑其他滤波器,比如粒子滤波。

2.2 协方差矩阵:不确定性怎么量化?

一维情况很简单,一个方差 σ² 就搞定了。但导航融合里,状态向量通常是多维的,比如位置 (x, y, z) 加上速度 (vx, vy, vz)。这时候,我们不光要知道每个变量的方差,还得知道它们之间的相关性。

协方差矩阵就是干这个的。

二维协方差矩阵示例:

P = [[σx², σxy],
     [σyx, σy²]]

对角线元素是方差,非对角线元素是协方差。σxy 为正表示 x 和 y 正相关,为负表示负相关。

举个例子:你开车时,位置和速度是强相关的。位置误差大,速度误差通常也大。协方差矩阵能捕捉这种关系,让滤波器知道「位置不准时,速度也别太信」。

我的经验: 初始化协方差矩阵时,别拍脑袋设。我习惯先跑一段数据,用样本协方差来估计初始值。这样滤波器收敛快得多。

2.3 矩阵运算回顾:加减乘除与转置

卡尔曼滤波里全是矩阵运算。别慌,你只需要掌握几个基本操作。

2.3.1 矩阵加减法

对应元素相加减。维度必须相同。

A = [[1, 2], [3, 4]]
B = [[5, 6], [7, 8]]
A + B = [[6, 8], [10, 12]]

2.3.2 矩阵乘法

这个容易出错。我刚开始做时,经常把维度搞反。

规则:A (m×n) 乘以 B (n×p),得到 C (m×p)。C 的 (i, j) 元素是 A 的第 i 行与 B 的第 j 列的点积。

避坑指南: 我曾经在写卡尔曼增益更新时,把 H*P 和 P*H^T 的顺序搞反了,结果滤波器输出全是 NaN。排查了整整两天。记住:矩阵乘法不满足交换律!

2.3.3 矩阵转置

把行变成列,列变成行。用上标 T 表示。

A = [[1, 2],
     [3, 4]]
A^T = [[1, 3],
       [2, 4]]

2.3.4 矩阵求逆

这是卡尔曼滤波里最耗时的操作。对于方阵 A,如果存在 B 使得 A*B = I,则 B 是 A 的逆。

实际工程中,我很少手动求逆。一般用数值稳定的方法,比如 Cholesky 分解或 QR 分解。你想想看,嵌入式平台资源有限,直接求逆容易数值不稳定。

实用技巧: 在代码里,尽量用库函数。比如 Eigen、Armadillo 或者 MATLAB 的 inv()。自己手写求逆?除非你想重温线性代数考试。

2.4 协方差矩阵的传播:状态更新时它怎么变?

卡尔曼滤波的核心思想之一:状态更新了,不确定性也要跟着更新。

假设我们有线性系统:

x_k = F * x_{k-1} + B * u_k + w_k

其中 w_k 是过程噪声,协方差为 Q。

那么协方差矩阵的预测公式是:

P_k = F * P_{k-1} * F^T + Q

这个公式我建议你手推一遍。F 乘以 P 再乘以 F 的转置,本质上是在做坐标变换。Q 是新增的不确定性。

我记得有一次做轮式机器人定位,轮子打滑导致过程噪声 Q 设小了。结果滤波器过于自信,位置估计越来越偏。后来我把 Q 调大了一倍,效果立竿见影。

2.5 总结与下节预告

今天咱们聊了:

  • 高斯分布:噪声建模的基础
  • 协方差矩阵:量化多维不确定性
  • 矩阵运算:加减乘除、转置、求逆
  • 协方差传播:状态更新时不确定性怎么变

这些是卡尔曼滤波的数学骨架。下一讲,我们会深入「数学基础(下)」,聊聊条件概率、贝叶斯公式,以及它们怎么和卡尔曼滤波联系起来。

嗯,今天就到这里。回去把矩阵乘法练熟,下次课咱们直接上卡尔曼滤波的五个核心公式。

课后练习:

  1. 手算一个 2×2 矩阵的逆
  2. 写一段代码,生成 1000 个服从 N(0, 1) 的高斯随机数,并验证其均值和方差
  3. 思考:如果两个传感器测量值完全不相关,协方差矩阵会是什么形状?