在工业物联网 (IIoT) 和车联网 (IoV) 场景中,传感器数据是企业进行决策、预测性维护和自动化控制的基石。
行业报告显示,我国联网工业设备数量已突破 1.3 亿台,年均产生时序数据超 800PB800PB 是什么概念?如果一部高清电影约 5GB,800PB 相当于 1.6 亿部电影------而且,这只是一年的数据增量。
以一家中型工业企业为例:2.5 万个传感器以 1Hz 频率发送数据,平均每条记录 200 字节,一天就能产生超过 430GB 的数据,一个月超过 12TB。如果是多站点大型部署,年存储量轻松突破数百 TB
数据不是问题------问题是,数据的清洗与实时分析跟不上 ,传统 IoT 系统关注的是数据能不能收集,而现在大家更关心的是数据能不能用得上。
滤波算法的必要性
传感器在采集数据时,不可避免的受到外界干扰。环境温度波动、电磁干扰、硬件精度限制,都会导致数据中出现随机波动(白噪声)或异常离群点。在工业数据分析领域,一个基本共识是:未经处理的原始传感器读数,通常难以直接用于状态评估、故障诊断或闭环控制等关键环节。
滤波(Filtering)的核心目的,正是从从包含噪声的观测数据中提取出最接近真实状态的信息。具体来说:
- 抗干扰:消除环境噪声和电磁耦合带来的随机波动,让数据接近设备真实状态,避免误报
- 解决滞后与不确定性:借助物理模型,对历史数据和当前观测值进行计算,估计当前乃至下一时刻的较优状态
- 多源融合:当多个传感器(如 GPS、加速度计、陀螺仪)共同描述一个设备的状态时,通过算法使异构数据加权融合,输出可靠结论
在噪声与不确定性普遍存在的物联网场景中,滤波不是可选项,而是从"数据"走向"决策"的必经之路。
传统方案:搬运数据的代价
尽管滤波在工业物联网和车联网场景中至关重要,但在传统数据处理架构中,滤波通常并不是由数据库或存储系统原生支持,而是依赖 Python、Spark 等外部计算框架在数据落库之后再进行处理。也就是说,数据往往需要先完成采集、传输和持久化,再被导出到独立的计算环境中执行平滑、去噪、异常剔除等滤波操作。
这种"先存后算"的处理模式虽然实现灵活,但会引入额外的数据迁移、任务调度和结果回写开销,导致处理链路较长、系统复杂度较高,难以满足高频时序数据对实时性的要求。
换个思路:让计算就地发生
针对传统滤波方案中数据搬运成本高、链路复杂、实时性不足等问题,DolphinDB 推出了面向工业物联网场景的 IoT Filtering 模块。
注意:fir, iir 函数要求 Server 版本在 3.00.6 以上。
该模块将基础时域统计滤波、经典信号处理滤波和最优状态估计等能力直接集成到数据库内,覆盖从异常清洗、信号增强到智能预测的完整数据处理链路:
- 异常清洗:自动剔除传感器毛刺(中值滤波)、填补缺失、去除离群点等。
- 信号增强:通过降噪算法(高斯滤波、SG 滤波等)提取更接近真实状态的信号趋势。
- 智能预测:集成卡尔曼滤波(Kalman Filter),实现多传感器融合与最优状态估计。
与传统"先存后算"的模式不同,IoT Filtering 模块可以直接嵌入流计算链路,使数据在写入存储之前就完成实时滤波与异常过滤,从而能及时发现设备异常状态并处置。相比"先落库、再搬运、后计算"的处理方式,这种模式能够从源头减少噪声数据的进入,降低 ETL 和跨系统传输成本,同时实现低延迟、高吞吐的在线清洗与分析。
依托 DolphinDB 的一体化架构,同一套系统即可同时承担高吞吐写入、实时清洗、复杂信号处理和结果存储,从而简化系统架构,减少多系统拼接带来的开发与运维成本。

场景落地:从理论到实战
场景一:传感器数据清洗 (去除毛刺与离群点)
工业现场,温度传感器偶尔会输出离谱的数值------ 100 度突变到 0 度,或者直接跳到 1000 度。这种异常值一旦进入分析系统,可能触发误报警,甚至导致产线停摆。
用 Hampel 滤波 hampelFilter,基于中位数和中位绝对偏差(MAD)的鲁棒离群点检测与替换方法,识别并替换超出动态阈值的异常值,对数据中的极端值不敏感:
bash
// 模拟数据:包含噪声和两个明显的离群点
temp_raw = 25.0 + rand(1.0, 100)
temp_raw[10] = 100.0 // 异常高值
temp_raw[50] = -50.0 // 异常低值
// 调用 Hampel 滤波,窗口=5,阈值=3
temp_clean = IotModules::Filtering::BasicStats::hampelFilter(temp_raw, window=5, k=3)
// 验证结果
print("Outlier at 10: " + temp_raw[10] + " -> " + temp_clean[10])
// 输出: Outlier at 10: 100 -> 25.4 (近似局部中位数)
异常值被自动替换为局部中位数。过去需要人工逐一核对的离群点检测,现在可以实时完成。
场景二:GPS 轨迹平滑
物流车辆 GPS 定位存在几米到几十米的随机误差,轨迹图看起来像锯齿。
卡尔曼滤波 kalmanFilter 融合位置观测值与运动模型,实时修正 GPS 漂移。对于物流车辆,提供精准的实时位置服务,优化调度效率,减少空驶里程。
场景三:实时流处理集成
在生产物联网场景中,传感器数据持续实时产生,需要流式处理框架对数据逐条(或微批)进行滤波。DolphinDB 提供了完善的流计算框架,支持实时订阅、实时清洗、实时预警。
只需定义订阅回调函数,每当传感器产生一条新数据,系统就会自动触发预设的清洗逻辑,实现数据在流动过程中同步完成异常识别与修正,确保拿到的数据及时可用。
bash
def cleanSensorData(msg){
cleaned = IotModules::Filtering::BasicStats::hampelFilter(msg.temperature, 5, 2.0)
t = table(msg.time as time, msg.deviceID as deviceID, msg.temperature as temperature, cleaned as cleaned)
objByName("cleanResult").append!(t)
}
性能测试结果
在 1 千万条 数据的测试中(除 Hampel 算法为 1 百万条 ,Kalman 算法为 1 千条),DolphinDB 的滤波算法性能全面领先 Python 实现:
| 滤波算法 | Python (ms) | DolphinDB (ms) | 性能提升 |
|---|---|---|---|
| 高斯滤波 | 18,533 | 283 | 约 65 倍 |
| 双指数平滑 | 4,991 | 119 | 约 42 倍 |
| 移动平均 | 256 | 13 | 约 20 倍 |
| 中值滤波 | 1,620 | 106 | 约 15 倍 |
| Hampel 滤波 | 38.7 | 4.3 | 约 9 倍 |
工业物联网真正的竞争,不是看谁采得更多,而是谁能更快把数据变成决策。
当传感器还在持续吐出海量原始数据时,DolphinDB 已经把清洗、降噪、融合、预测这条链路,直接压缩进库内计算之中------数据不再需要来回搬运,算法也不必在多套系统之间反复切换。
从异常毛刺识别,到轨迹平滑,再到实时状态估计,过去要靠离线脚本、分布式组件拼接完成的流程,现在可以在同一套系统里毫秒级完成。
对工业现场来说,这意味着更少的延迟、更低的成本,以及更稳定、更可信的实时决策能力。而对数据价值来说,这意味着真正可用的,不只是数据本身,而是数据被及时"算"出来的结果。
点击 http://dolphindb.com/downloads/tutorials/script/iotFilter.zip ,获取完整代码~