一维卡尔曼滤波:环境数据去噪的极简实现
1D Kalman Filter for Denoising
卡尔曼滤波不需要存历史、逐点更新,非常适合嵌入式与在线去噪。一维版本只有几行:在"模型预测"与"新观测"之间按不确定度加权。
本文涉及的条目11 条 · 自动匹配自标签与标题
核心思想
卡尔曼滤波是递归的最优估计:每一刻,它都持有"当前估计值 x 及其不确定度 P",新来一个观测 z 时:
- 预测:x 不变(或按模型演化),P 因过程噪声 Q 增大一点;
- 更新:用观测 z 修正 x,增益 K = P/(P+R),其中 R 是观测噪声方差;
- 修正后 P 缩小为 P(1-K)。
K 越大,越相信新观测;R 越大(观测越不可信),K 越小,越信任历史估计。 这就是它比固定加权聪明的地方——它会根据"谁更可信"动态调整。
一维伪代码
`` x = z0; P = 1.0 每来一个 z: P = P + Q // 预测不确定度增加 K = P / (P + R) // 卡尔曼增益 x = x + K*(z - x) // 更新估计 P = (1 - K)*P // 更新不确定度 ``
怎么调 Q 和 R
- R 大(传感器噪声大):滤波平滑强,但响应慢。
- Q 大(信号变化快):滤波跟手,但噪声抑制弱。
- 经验:Q 取小(如 1e-4~1e-3),R 取传感器噪声方差估计。
适用范围与坑
- 适合缓慢变化 + 高斯噪声的信号(温度、水位趋势)——表现优于 EWMA,因为会自适应。
- 不适合突变事件:滤波会平滑掉真实阶跃(同 EWMA 的问题)。
- 假设噪声高斯、模型线性,强非线性/非高斯需扩展卡尔曼或无迹卡尔曼。
一维卡尔曼是"有记忆的、会变权重的 EWMA"——几乎零成本,却比固定加权更懂什么时候该信新数据。