1. 从一道赛题说起:NILM到底在解决什么问题
2018年的第六届泰迪杯,有一道题目叫“NILM电流指纹识别与符合检测”。当时我拿到题目原型的时候,第一反应是“这名字怎么这么拗口”。NILM是Non-Intrusive Load Monitoring的缩写,翻译过来叫非侵入式负荷监测。说白了就是:不在每个电器插座上安装传感器,只在家庭总进线处装一个监测点,通过分析总电流总电压的波形,就能判断出家里哪几个电器正在工作、各自耗了多少电。
这个思路之所以吸引人,是因为它解决了一个很实际的痛点。传统电力监测要搞明白每个电器的用电情况,就得在每个设备上装智能插座或者传感器,几十个电器就是几十个节点,成本高、部署麻烦、维护更是头疼。而NILM只需要一个监测点,算得上是以计算换硬件的典型思路。2018年前后,智能电表普及率已经很高,但电表本身只会记录总用电量,用户问“我家空调到底一小时花多少钱”,电表答不上来。NILM就是为了回答这种问题而生的。
这道竞赛题的“符合检测”部分,指的是在识别出负荷状态后,还需要验证这些识别结果是否符合实际物理约束。比如主线路电流等于各支路电流之和,或者功率向量在数值上要和总功率吻合。说白了就是不能只给一个分类结果,还要让结果在物理层面“说得通”。
适合看这篇内容的读者,我分成三类。第一类是准备参加数据挖掘类竞赛的学生,这篇内容相当于把NILM赛题从数据到模型的完整链路拆开讲;第二类是做智能家居、能源管理相关工作的工程师,NILM技术可以直接嵌入到用电分析和节能推荐系统里;第三类是纯粹对“从信号里猜设备状态”这件事感兴趣的读者,这类问题本质上和声音识别、振动识别是相通的,换个领域思路可以直接复用。
我基于当年参赛前后积累的经验,把整个赛题的解题链路、关键技术原理、模型选型逻辑、以及实际踩过的坑逐段展开。内容按实操流程来排,尽量做到每一步都能落地复现。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 电流指纹为什么分得开:先理解特征背后的物理基础
2.1 稳态特征:每种电器在功率平面都有自己的坐标
先讲一个最核心的概念:稳态特征。所谓稳态,就是电器稳定运行的状态,比如电热水壶烧水烧到一半、空调压缩机稳定运转、冰箱压缩机稳定嗡嗡响,这些状态下电流波形是周期性重复的,非常规律。
如果只做最简单的特征提取,有功功率P和无功功率Q两个维度就能区分开很多电器。我举个例子,同样是功率在1500W附近的设备,一台是电热水壶,一台是取暖器。纯阻性负载的电热水壶,无功功率接近0,功率因数几乎为1;而带电机或者变频电路的设备,无功功率明显偏高,功率因数会掉到0.8以下。就这一个差异,就能把两类负载分开。
实际操作中,我习惯把特征面铺得更开一些。除了P和Q,还会加上视在功率S、功率因数PF、电流有效值、电压有效值、相位角这些量。有段时间我建议参赛的朋友直接在P-Q平面上做聚类可视化,很多设备会形成非常明显的簇,看一眼就知道哪些设备区分度高、哪些设备纠缠在一起。比如LED灯泡和充电器,功率都很小,在P-Q平面上会扎堆叠在一起,这种靠稳态有功无功已经分不开的情况,就需要往下看谐波特征。
2.2 谐波特征:电流波形里藏着的“身份证”
非线性的开关电源类负载,是稳态P-Q特征的天敌。手机充电器、LED灯、电脑电源,这些设备工作时电流波形不是标准正弦波,而是尖尖的、带脉冲的波形。它们的共同特点是:基波占比低,但3次、5次、7次等奇次谐波含量很高。不同品牌的充电器,谐波分布又有细微差异,这就构成了类似“身份证”一样的信息。
谐波特征怎么提取?最常用的做法是对电流波形做FFT变换,然后看各次谐波幅值占总谐波畸变率(THD)的比例。实践中我会取到9次或11次谐波,把每次谐波的幅值、相位角、以及奇偶谐波比值放一起,拼成谐波特征向量。
有些设备特别“吃”谐波信息。比如空调的变频模块,不同压缩机频率下谐波特征会有规律变化;再比如微波炉,磁控管工作时谐波特征非常独特,和启动时完全不同。我见过一个公开数据集里的案例,用谐波特征能区分出同一型号的两台微波炉,因为每台机器磁控管老化程度不同,谐波分布会有偏差。这在竞赛里很难碰到,但在工业级应用里确实存在——设备个体差异导致指纹漂移,是NILM落地时最头疼的问题之一。
2.3 暂态特征:设备开机瞬间的“签名”
稳态特征处理的是“设备已经稳定运行”的情况,而暂态特征关注的是“设备刚刚开机那几百毫秒”发生的事。很多设备的启动电流和稳定电流完全不同。电动机类负载,比如冰箱压缩机启动瞬间,会出现一个比稳态电流高3到5倍的大电流浪涌,持续时间可能只有几百毫秒;开关电源类负载开机瞬间会有高频充放电脉冲;白炽灯、电热类负载因为灯丝和发热丝的电阻随温度变化,启动电流表现为一个缓慢爬坡的过程,等温度升高后电流才慢慢降到稳态。
暂态特征的提取方式通常是在事件检测之后的窗口内做的,具体是:定位到投入事件的起点t0,截取t0到t0+T之间的电流波形,同样做FFT或者小波包变换,提取时频特征。也可以直接在时域上统计启动波形的一些统计量,比如启动电流峰值、启动时间常数、启动波形过零率。
为什么暂态特征有价值?因为有些设备稳态特征几乎一样,但暂态特征差别很大。举个例子,两台功率相近的电机类设备,空载启动和带负载启动的暂
