📚 卡尔曼滤波在做什么?
卡尔曼滤波(Kalman Filter)是一种最优递推估计器:在每一时刻, 把带噪声的测量值与运动模型预测按不确定性加权融合, 得到对真实状态更可靠的估计。
核心两步循环:
- 预测:根据模型推算下一时刻状态,不确定性增大(加过程噪声 $Q$)
- 更新:用新测量修正预测,卡尔曼增益 $K$ 决定「更信模型还是更信测量」
🧮 一维更新公式(标量)
$z_k$:含噪测量;$Q$:过程噪声(模型不确定);$R$:测量噪声;$K_k\in[0,1]$ 越大越信任测量。
🎮 交互演示
选择真实波形(由简到繁):
📊 误差指标说明
| 指标 | 含义 | 如何解读 |
|---|---|---|
| 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 受多径、遮挡、天线方向影响,波动很大; 但多次测量的均值与距离存在稳定的相关——距离越远,信号越弱(对数衰减)。
对数距离路径损耗模型
$A$:参考距离 $d_0{=}1\,\mathrm{m}$ 处的 RSSI;$n$:路径损耗指数(室内约 $2.5{\sim}4$); $w$:单次测量噪声。反解距离:$\hat d = d_0 \cdot 10^{(A-\overline{\mathrm{RSSI}})/(10n)}$。
- 采集:接收器对每个 Beacon 反复测 RSSI(如每秒 10 次),得到一串带噪序列 $z_k$。
- 第一层滤波(标量卡尔曼):对每个锚点的 RSSI 分别做一维 KF(或滑动平均),得到平滑的 $\overline{\mathrm{RSSI}}_i$,再换算为估计距离 $\hat d_i$。——对应上方「常量/缓变 + 噪声」演示。
- 三边测量 / 三角定位:已知 $(x_i,y_i)$ 与 $\hat d_i$,求接收器 $(x,y)$,使到各锚点距离尽量吻合($\ge 3$ 个锚点)。单次解算仍会有误差。
- 第二层滤波(位置卡尔曼):把每帧解算出的 $(x_m,y_m)$ 当作位置观测,用二维常速度模型跟踪 $[x,y,v_x,v_y]$,抑制跳点、预测短暂遮挡时的位置。——人走动时位置连续,适合 KF。
🗺️ 交互模拟:拖动绿色接收器,观察定位误差
蓝点为 Beacon;绿点为真实位置(可拖); 红叉为仅用当前瞬时 RSSI 解算的位置; 紫点为「RSSI 滤波 → 距离 → 三边测量 → 位置卡尔曼」后的估计。
- 至少 3 个不共线 锚点才能定平面位置;4 个以上可用最小二乘提高鲁棒性。
- RSSI 换距离本身有系统误差(墙体、人体遮挡),需标定 $A,n$ 或建指纹库。
- 「先对 RSSI 滤波、再定位、再对位置滤波」是两级卡尔曼;也可扩展为扩展卡尔曼(EKF)直接融合非线性 RSSI 模型。
- 若接收器静止,位置层可设极小 $Q$,主要靠多次 RSSI 平均收敛;移动时增大 $Q$ 以跟踪速度。
✏️ 基础知识测验
完成演示后自测:选一项后显示解析。共 5 题。