📡 卡尔曼滤波交互演示

从常量到复杂波形,观察滤波如何压制噪声、逼近真实信号

← 返回主页

📚 卡尔曼滤波在做什么?

卡尔曼滤波(Kalman Filter)是一种最优递推估计器:在每一时刻, 把带噪声的测量值运动模型预测按不确定性加权融合, 得到对真实状态更可靠的估计。

核心两步循环:

  • 预测:根据模型推算下一时刻状态,不确定性增大(加过程噪声 $Q$)
  • 更新:用新测量修正预测,卡尔曼增益 $K$ 决定「更信模型还是更信测量」

🧮 一维更新公式(标量)

\[ \hat{x}^-_k = \hat{x}_{k-1}, \quad P^-_k = P_{k-1} + Q \] \[ K_k = \frac{P^-_k}{P^-_k + R}, \quad \hat{x}_k = \hat{x}^-_k + K_k\,(z_k - \hat{x}^-_k) \]

$z_k$:含噪测量;$Q$:过程噪声(模型不确定);$R$:测量噪声;$K_k\in[0,1]$ 越大越信任测量。

🎮 交互演示

选择真实波形(由简到繁):

运动模型:
0.02
4
200
42
测量 RMSE
滤波 RMSE
滤波 MAE
滤波最大误差
RMSE 改善率
等效 SNR 增益 (dB)

📊 误差指标说明

指标含义如何解读
RMSE均方根误差 $\sqrt{\frac1N\sum(\hat x-x)^2}$综合衡量偏离,对大误差敏感
MAE平均绝对误差更直观的平均偏差
最大误差$\max|\hat x - x|$最坏情况下的偏离
改善率$1 - \mathrm{RMSE}_\text{滤波}/\mathrm{RMSE}_\text{测量}$相对原始测量提升了多少
SNR 增益$20\log_{10}(\mathrm{RMSE}_\text{raw}/\mathrm{RMSE}_\text{filt})$信噪比意义上的提升(dB)

🔧 调参直觉

  • R 增大:测量更不可信 → $K$ 变小 → 曲线更平滑,但对突变反应变慢
  • Q 增大:更相信状态会变 → 跟踪更快,但噪声抑制变弱
  • 常量信号:用随机游走 + 小 Q 效果最好
  • 正弦/斜坡:用匀变速模型;方波/阶跃会有不可避免的滞后(因果滤波器无法预知未来)

📶 实际用例:蓝牙 RSSI 三角定位

室内定位常见方案:在墙上固定若干蓝牙 Beacon(锚点),坐标 $(x_i,y_i)$ 已知; 手机/接收器扫描到各锚点的 RSSI(信号强度,dBm)。 单次 RSSI 受多径、遮挡、天线方向影响,波动很大; 但多次测量的均值与距离存在稳定的相关——距离越远,信号越弱(对数衰减)。

对数距离路径损耗模型

\[ \mathrm{RSSI}(d) = A - 10n\log_{10}\!\left(\frac{d}{d_0}\right) + w,\quad w \sim \mathcal{N}(0,\sigma^2) \]

$A$:参考距离 $d_0{=}1\,\mathrm{m}$ 处的 RSSI;$n$:路径损耗指数(室内约 $2.5{\sim}4$); $w$:单次测量噪声。反解距离:$\hat d = d_0 \cdot 10^{(A-\overline{\mathrm{RSSI}})/(10n)}$。

  1. 采集:接收器对每个 Beacon 反复测 RSSI(如每秒 10 次),得到一串带噪序列 $z_k$。
  2. 第一层滤波(标量卡尔曼):对每个锚点的 RSSI 分别做一维 KF(或滑动平均),得到平滑的 $\overline{\mathrm{RSSI}}_i$,再换算为估计距离 $\hat d_i$。——对应上方「常量/缓变 + 噪声」演示。
  3. 三边测量 / 三角定位:已知 $(x_i,y_i)$ 与 $\hat d_i$,求接收器 $(x,y)$,使到各锚点距离尽量吻合($\ge 3$ 个锚点)。单次解算仍会有误差。
  4. 第二层滤波(位置卡尔曼):把每帧解算出的 $(x_m,y_m)$ 当作位置观测,用二维常速度模型跟踪 $[x,y,v_x,v_y]$,抑制跳点、预测短暂遮挡时的位置。——人走动时位置连续,适合 KF。

🗺️ 交互模拟:拖动绿色接收器,观察定位误差

蓝点为 Beacon;绿点为真实位置(可拖); 红叉为仅用当前瞬时 RSSI 解算的位置; 紫点为「RSSI 滤波 → 距离 → 三边测量 → 位置卡尔曼」后的估计。

5
3
0.15
0.02
瞬时定位误差 (m)
卡尔曼定位误差 (m)
改善率
B1 滤波 RSSI (dBm)
Beacon 锚点 真实接收器(可拖动) 瞬时三边测量 卡尔曼估计
工程要点
  • 至少 3 个不共线 锚点才能定平面位置;4 个以上可用最小二乘提高鲁棒性。
  • RSSI 换距离本身有系统误差(墙体、人体遮挡),需标定 $A,n$ 或建指纹库。
  • 「先对 RSSI 滤波、再定位、再对位置滤波」是两级卡尔曼;也可扩展为扩展卡尔曼(EKF)直接融合非线性 RSSI 模型。
  • 若接收器静止,位置层可设极小 $Q$,主要靠多次 RSSI 平均收敛;移动时增大 $Q$ 以跟踪速度。

✏️ 基础知识测验

完成演示后自测:选一项后显示解析。共 5 题。

1. 卡尔曼滤波每一步「更新」阶段,主要是在做什么?
2. 测量噪声方差 $R$ 很大时,滤波器通常会更……
3. 对「真实值几乎不变」的常量信号,较合适的模型是?
4. 一维标量情况下,卡尔曼增益 $K_k$ 的取值范围是?
5. 对方波/阶跃等突变信号,因果卡尔曼滤波典型会出现?