首页 > 编程知识 正文

nilm非侵入式负载监测系统

时间:2023-05-04 03:20:39 阅读:210044 作者:2858

我发现NILM领域中文的博客还是很少的,比较系统讲解的就更少,目前打算把这个博客写的全面些,而工欲善其事必先利其器,先说论文似乎不太容易理解,先说下NILMTK这个工具包吧。然后再讲几个数据集,再说论文。

NILMTK,顾名思义, nilm的tool kit,是专门为非侵入式负荷监测任务开发的开源工具包,包括了各大公开数据集的数据处理,也支持用户自己采集的数据;内置了组合优化(co)和隐马尔可夫模型(fhmm)两种算法以便和研究人员的算法比较;提供了算法封装的函数,可以方便调用使用者自己写的算法;提供了负荷分解结果的评价指标。

网站就如下图。网址:https://nilmtk.github.io/ (有时需要fq) 论文是《NILMTK: An Open Source Toolkit for Non-intrusive Load Monitoring》

注意,这里首先要声明的是,NILMTK不支持高频数据!!高频数据指khz或Mhz采样的数据。比如BLUED数据集就是khz采样数据,NILMTK是处理不了的,REDD数据集既提供了15khz高频数据也提供了3s采样低频数据,那NILMTK只能处理后者。因此,如果你研究的是用高频电表数据识别电器开关(投切)事件,。。。。。。。你依然需要NILMTK,哈哈哈哈哈。

为什么NILMTK处理不了高频数据集还需要看它呢,因为如果你要用高频的电表数据判断电器开关事件,算法的输入特征是电表数据,那label就是电器的开关事件啊,哪个电器在哪个短暂的0.几秒的时间里开了或关了是需要知道的。但遗憾的是,目前所有高频公开数据集里,(我知道的)只有BLUED这个数据集同时提供了每个电器开关的标签。以REDD的15khz数据为例,那就只有总电表的15khz采样的数据,没有电器的开关事件,那怎么办呢,你可以用NILMTK中的get_activationseries函数(虽然自己写也不麻烦)和REDD低频的电器有功序列,找到低频数据集中每一次电器开关的大致时刻(因为低频3s采样嘛),然后再从高频电表数据波形中精准定位投切事件在3s中的哪里。(如果你真的不想用NILMTK,也不是不可以,NILMTK基本上也是numpy和pandas实现的)

可能描述起来比较困难,但是如果你做高频事件检测,自然看得懂;做低频功率分解,也就没必要看。

下面继续说这个工具包,工具包的安装就不多介绍了,网站上有安装教程,我用过windows10 和7的64位,使用都是没问题的。linux安装可能不会有什么问题,windows安装的话,注意上面说需要安装:VS C++ compiler。其实有个简单的安装方法,你windows也下个wget,用wget安。

然后是用nilmtk转换和导入数据集。转换的意思是,国外这些公开的数据集原本的格式(比如,可能是每个家庭一个文件夹,每个家庭中的每个电器是csv或者dat或者其他格式的文件),通过NILMTK中的dataset_converters模块转换成一个h5文件,也就是比如,原来的整个REDD数据集,就成了一个REDD.h5文件,原来的UK-jwdpj所有家庭的数据最后整合成了一个UK-jwdpj.h5文件。而这个h5格式的文件是NILMTK能够读取的。具体操作在NILMTK的网站都有示例介绍,我就不多讲了,许多数据集的h5格式,网站里也提供了下载(没提供的说明原数据集需要你自己申请账号(dataport)或者邮件索取(redd))。

具体怎么用,网站上很详细,自己研究吧,最后两部分还提供了fhmm算法和co算法,有兴趣你还可以看看源码怎么实现。

 

这节对NILMTK的介绍只是为了后面讲解论文和操作流程做铺垫,因此并没有详细讲解。后面讲实际数据处理流程时,用到NILMTK中什么函数,再逐个详细介绍,over。

 

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。