
简介这份文档面向正在学习状态估计、信号处理或控制算法的读者系统梳理卡尔曼滤波从离散状态方程、观测方程到完整递推公式的推导脉络帮助理解预测与校正两步迭代背后的最小均方误差思想。全文围绕状态预测、卡尔曼增益求解、误差协方差更新等关键环节展开并给出矩阵求导与协方差化简的中间步骤适合希望摆脱公式死记、真正吃透算法原理的初学者与工程实践者。资源为单个docx文件压缩包约23KB篇幅紧凑、便于打印或随查随用。目前已有1956人学习下载可作为课程笔记、论文推导参考或工程实现前的理论铺垫读者能从中获得从建模假设到增益公式的完整推导链条与清晰的变量符号说明。1. 卡尔曼滤波算法到底在算什么从猜体重说起你站上体重秤数字跳来跳去最后停在 70.3 公斤。你心里其实有个预期昨天是 70.0今天没多吃大概也就 70 上下。于是你不会把 70.3 当成铁板钉钉的事实也不会完全无视它而是心里默默折中一下大概 70.1 吧。这个“折中”的动作就是卡尔曼滤波算法每天在你脑子里干的事。卡尔曼滤波算法是一套用数学写成的“折中规则”它同时相信两样东西——你对系统下一步会怎样的预测以及传感器给你的实际观测然后按各自的可信程度加权得出一个更接近真实状态的估计。它之所以值得搞懂是因为现实里的数据几乎都带噪声而它给出的是“最小均方误差”意义下的最优估计不是拍脑袋的平滑。这份资料把整套推导从状态方程一路写到协方差更新适合想弄明白公式背后每一步为什么成立的人。2. 为什么需要卡尔曼滤波预测和观测都不能全信2.1 两个都不靠谱的信息源先看一个具体场景。某实验室做小车定位车上装了轮速计和 GPS。轮速计短时间很准但会累积漂移GPS 绝对位置不漂但每次跳几米。你单独信轮速计十分钟后车“跑”到墙外面去了单独信 GPS轨迹像喝醉了酒。卡尔曼滤波算法的出发点就是承认预测有误差观测也有误差而且这两种误差都可以用高斯分布描述。预测误差的协方差记作 P观测噪声的协方差记作 R。谁的方差小谁就更可信融合时权重就更大。这不是玄学是可以用公式算出来的比例。打个比方你有两个朋友给你报天气一个平时十次对八次一个十次对五次你自然会多听前者的。卡尔曼增益 K 就是那个“听谁多一点”的系数而且它每个时刻都会重新算因为可信度会变。2.2 递归结构不需要存下全部历史很多滤波方法要把过去所有数据攒起来一起算数据一多就吃不消。卡尔曼滤波算法是递归的每个时刻只需要上一时刻的估计值 $\hat{x}{k-1}$ 和它的协方差 $P{k-1}$加上当前观测 $z_k$就能算出当前估计。用资料里的状态预测方程说$$x_k A x_{k-1} B u_k w_k$$这里 $A$ 是状态转移矩阵描述“没有外界干预时状态怎么自然演化”$u_k$ 是控制输入$B$ 把它换算成对状态的影响$w_k$ 是过程噪声均值为 0、协方差为 $Q$。观测方程则是$$z_k H x_k v_k$$$H$ 是测量矩阵把状态空间映射到观测空间$v_k$ 是测量噪声均值为 0、协方差为 $R$。提示$Q$ 和 $R$ 不是从数据里“学”出来的通常要人为设定。设得离谱滤波结果就会翻车这是初学者最常见的踩坑点。递归的好处是内存恒定、计算量恒定特别适合在线估计——传感器每来一帧数据就算一轮不用等攒够一批。这也是它在导航、跟踪、信号处理里长期占位置的原因。2.3 最小均方误差优化的目标是什么资料里反复出现一句话卡尔曼的本质是最小均方差估计。翻译成大白话估计值和真实值之间的误差是一个随机变量我们希望它的平方的期望尽可能小。误差定义为 $e_k x_k - \hat{x}_k$它的协方差矩阵 $P_k E[e_k e_k^T]$。均方误差就是 $P_k$ 的迹对角线元素之和。所以“让估计最优”就变成“让 $P_k$ 的迹最小”。关键一步是对卡尔曼增益 $K_k$ 求导并令其为零。资料里用了两个矩阵微分公式最终解出$$K_k P_k H^T (H P_k H^T R)^{-1}$$这个式子的结构很值得看一眼分子 $P_k H^T$ 代表“预测的不确定度经过观测映射后的部分”分母 $H P_k H^T R$ 是“预测在观测空间的不确定度加上观测噪声”。预测越不确定$K_k$ 越大越偏向观测观测噪声越大$K_k$ 越小越偏向预测。这就是加权折中的数学形态。3. 卡尔曼滤波算法的五个核心公式预测与校正怎么分工3.1 预测步先按模型往前推每个时刻开始先做预测。状态预测$$\hat{x}k A \hat{x}{k-1} B u_k$$协方差预测$$Pk A P{k-1} A^T Q$$第一式是“按物理规律推一步”第二式是“不确定度也跟着传播并且加上过程噪声”。注意 $Q$ 是加在后面的即使模型完全确定过程噪声也会让预测变得更不确定所以 $P$ 通常比上一时刻的 $P$ 大。用一段伪代码把预测步写清楚# 预测步输入上一时刻估计 x_prev、协方差 P_prev、控制量 u x_pred A x_prev B u # 状态外推 P_pred A P_prev A.T Q # 协方差外推Q 为过程噪声协方差参数说明A的维度是 n×nB是 n×mu是 m×1Q必须对称半正定否则协方差可能算出负特征值后续求逆会出问题。这一段没有用到观测所以哪怕传感器暂时没数据预测步照样能跑。3.2 校正步拿观测来修正观测残差也叫新息$$\tilde{z}_k z_k - H \hat{x}_k$$它衡量“实际看到的”和“按预测应该看到的”差多少。然后算增益、更新状态、更新协方差$$K_k P_k H^T (H P_k H^T R)^{-1}$$ $$\hat{x}_k \hat{x}_k K_k \tilde{z}_k$$ $$P_k (I - K_k H) P_k$$对应代码# 校正步输入观测 z、预测结果 x_pred / P_pred innovation z - H x_pred # 新息 S H P_pred H.T R # 新息协方差 K P_pred H.T inv(S) # 卡尔曼增益 x_est x_pred K innovation # 状态更新 P_est (I - K H) P_pred # 协方差更新S的逆是整套算法里计算量最大的地方维度等于观测维度而不是状态维度所以观测少的时候很划算。P_est用简化式 $(I-KH)P$ 即可资料里也推导了它和展开式等价。3.3 增益 K 的直觉一个可以手算的例子设状态是一维位置$A1$$H1$$Q0.01$$R1$上一时刻 $P0.01$。预测后 $P 0.01 0.01 0.02$。增益$$K 0.02 / (0.02 1) \approx 0.0196$$意思是这次观测只被采信不到 2%因为观测噪声远大于预测不确定度。反过来若 $R0.001$则 $K \approx 0.02/0.021 \approx 0.95$几乎全听观测的。这个手算例子说明卡尔曼增益不是固定参数它随 $P$ 和 $R$ 动态变化。系统刚启动时 $P$ 往往设得大$K$ 接近 1快速跟上观测稳定后 $P$ 变小$K$ 也变小输出变得平滑。很多人以为滤波器“越跑越迟钝”是 bug其实这是设计使然。3.4 协方差更新为什么能简化资料里从完整式 $P_k (I-KH)P(I-KH)^T K R K^T$ 出发代入 $K$ 的表达式化简得到 $P_k (I-KH)P$。这一步不是近似是精确等价前提是 $K$ 取最优值。理解它的意义在于完整式在数值上更稳定始终对称正定简化式计算更省。工程上常见做法是用简化式算、再强制对称化 $P \leftarrow (PP^T)/2$防止浮点误差累积导致不对称。这是血泪经验不是理论要求。4. 易混概念辨析卡尔曼滤波常被误解的四个地方4.1 卡尔曼滤波 vs 低通滤波易混点两者都能让曲线变平滑看起来效果差不多。为什么混一阶低通也是“新值按比例混旧值”形式上跟卡尔曼更新式 $\hat{x}_k \hat{x}_k K(z-H\hat{x}_k)$ 很像。怎么区分低通的系数是固定的卡尔曼的 $K$ 每步由 $P$、$Q$、$R$ 算出来会随系统不确定度自适应。低通不知道你的物理模型卡尔曼显式用了 $A$、$B$、$H$。判断标准如果你的系统有明确的动态方程、噪声统计可估卡尔曼更合适如果只是想去毛刺、没有模型低通更省事。4.2 过程噪声 Q vs 测量噪声 R易混点两个都是“噪声协方差”初学时容易随便填。为什么混符号相近都出现在协方差递推里。怎么区分$Q$ 描述“模型本身有多不准”加在预测协方差上$R$ 描述“传感器有多不准”出现在增益分母里。$Q$ 调大滤波器更信观测、响应更快但更抖$R$ 调大更信预测、更平滑但可能滞后。调参时先估 $R$传感器手册或静态数据再调 $Q$顺序反了会白折腾。4.3 预测值 vs 估计值易混点资料里用上标区分 $\hat{x}_k$预测和 $\hat{x}_k$估计读公式时容易看串。为什么混两者都带“hat”只差一个撇号。怎么区分预测值是“还没看观测”的结果估计值是“看完观测并融合后”的结果。协方差同理$P$ 是预测误差协方差$P$ 是估计误差协方差且通常 $P P$因为观测带来了新信息。写代码时变量名一定要分开混用是调试时最隐蔽的 bug 来源之一。4.4 卡尔曼滤波 vs 最小二乘易混点都叫“最优估计”都涉及误差平方和。为什么混目标函数形式接近。怎么区分最小二乘通常是一次性批处理假设参数不变卡尔曼是递归的带状态演化模型适合动态系统。静态标定用最小二乘在线跟踪用卡尔曼。两者在特定条件下可以互相转化但不是同一个东西。5. 什么时候该用、什么时候别用一个调参翻车的教训先说该用的场景。系统能用线性或近似线性状态方程描述噪声大致服从高斯分布需要在线、逐帧地估计状态——这三条同时满足时卡尔曼滤波算法是很自然的选择。比如某图像处理 Demo 里跟踪一个运动目标状态是位置和速度观测是检测框中心$A$ 描述匀速运动$H$ 取位置映射这套结构直接套公式就能跑。再说别用的情况。系统强非线性时标准卡尔曼的线性假设会失效得换扩展卡尔曼或无迹卡尔曼但那是另一套推导不能指望原公式硬扛。噪声明显非高斯、有大量离群点时均方误差准则本身就不合适中位数类方法更稳。还有一种常被忽略状态维度很高而观测很少时协方差矩阵求逆和传播的计算量会上去此时要评估实时性是否够。下面这张表把边界收一收判断维度适合用不建议直接用系统模型线性或可线性化强非线性且无近似手段噪声分布近似高斯、零均值重尾、含大量离群点数据方式在线逐帧只有一批静态数据实时要求观测维度不高超高维且算力紧张我自己的踩坑经历是这样的某次做小车轨迹平滑$Q$ 随手填了个 1$R$ 按传感器手册填 0.01结果输出几乎完全跟着观测跳平滑等于没做。排查半天才意识到 $Q$ 比 $R$ 大了两个数量级增益接近 1预测被彻底架空。后来改成先静态采一段数据估 $R$再把 $Q$ 从很小往上试看残差是否白化才把曲线压稳。从那以后我每次配卡尔曼参数都强制先跑一遍“只预测不校正”的对照确认模型外推本身不离谱再开校正。这份资料把从状态方程到增益求导、协方差化简的每一步都写全了公式之间的衔接没有跳步适合对着推一遍、把每个符号的来历弄清楚。需要完整推导文档的话按文末方式获取即可。希望帮到你。本文还有配套的精品资源点击获取