雾霾是发生在大气近地面层中的一种灾害天气, 给人们生产生活造成了严重影响, 雾霾现象已经成为我国重要的环境公害[1]. 雾霾的形成通常与气象条件和主要污染物有关, 雾霾的出现给城市交通和人们的身体健康带来了很大影响[2–4]. 准确地预测雾霾程度, 提前做好防护措施, 对提高人们生产生活质量有着极为重要的意义.
为此, 国内外众多学者基于物联网和无线传感网络设计了多种环境监测系统实现对环境信息的实时监测. 文献[5]将无线传感网络与WiFi结合, 实现了PM2.5等环境信息的本地与远程监测, 并增加了自动重连功能. 文献[6]设计了ZigBee无线传感器网络, 对室内多个点实时采集, 完成对室内甲醛浓度的远程监测. 文献[7]基于6LoWPAN技术和Contiki操作系统设计嵌入式网关, 实现了ZigBee与IPV6网络的互联互通. 上述研究虽然实现了环境信息的监测, 但容易受通信距离、通信质量以及应用场景的限制, 对于覆盖范围较广的应用场景不能实现长距离、低功耗的通信. 此外, 许多学者提出了间接检测雾霾的方法, 如文献[8]利用现有视频系统, 研究了视频能见度与PM2.5之间的内在关系, 通过对能见度检测分级, 实现雾霾的监测预警, 对雾霾多发地段的行车安全起了重要作用.
鉴于此, 本文设计了LoRa、NB-IoT、ZigBee 3种传感网络来全面感知监测区域的环境信息. 在近地面通信时, 优先采用ZigBee传感网络来减少成本[9], 而长距离通信时, 考虑到障碍物会影响通信质量, 所以采用长距离、穿透力强、服务质量(QoS)好的NB-IoT网络进行通信; 在远地面通信时, 由于高空中障碍物较少且LoRa成本较NB-IoT更低, 所以采用LoRa网络进行通信. 此外, 引入分级预警机制, 使得对环境信息的预知更加准确, 从而提供可靠的预警信息.
1 系统方案系统拓扑图如图1所示, 该系统由采集模组、协调器、网关、服务器、显示终端五部分组成. 采集模组由LoRa、NB-IoT、ZigBee 3种采集节点组成, 通过节点上搭载的PM2.5、SO2、风速等传感器对环境信息进行周期性采集, 其中LoRa和ZigBee节点通过各自的协议与协调器建立传输网络, 而NB-IoT节点直接通过蜂窝网络将数据上传至云平台. 网关负责汇集各个网络的数据并通过WiFi将数据上传至嵌入式服务器. 服务器作为系统的大脑, 对网关上传的环境信息进行解析、存储与处理, 并判断当前触发的预警等级, 根据预警等级通过搭载的GSM模块向手机等移动设备发送信息, 提醒用户或相关部门采取相应的措施. 显示终端通过PC、显示屏等展示设备实现数据的可视化.
2 异构网络搭建 2.1 采集模组设计采集模组由LoRa、NB-IoT、ZigBee 3种采集节点组成. 其中LoRa采集节点由SX1278发射模块、STM32F407ZET6控制模块、电源模块组成; NB-IoT采集节点由BC35-G IoT模块、STM32L431RCT6控制模块、电源模块组成; ZigBee采集节点由CC2530发射模块、STM32F103ZET6控制模块、电源模块组成. 通过在采集节点上搭载PM2.5、SO2、风速等传感器, 实现环境数据的周期性采集. 采集中断子程序流程图如图2所示.
由于3种传感器网络之间的硬件结构、协议等各不相同, 不利于数据的交互与存储, 所以分别定义了各个子网络采集的数据流格式. 通过对异构网络所采集的数据流(包括网络标识号、采集单元标识号、数据流、含义等)的定义, 使得系统能够根据定义好的数据流格式进行数据的封装与解析. 本系统定义LoRa网络的标识号为12; NB-IoT网络的标识号为13; ZigBee网络的标识号为11, 并对字节数、进制、偏移量、转换倍数等进行了定义, 方便后续的数据封装与解析.
2.2 网关设计网关负责数据的汇集, 协议转换及与服务器的通信. 本网关采用Linux操作系统, 以BCM2837B0为处理器, 集成了ARM Cortex-A53内核, 扩展了以太网、USART、I2C等多种接口, 并可额外通过HAT以太网(Poe)供电. 处理器通过I2C、SPI总线分别与LoRa、ZigBee协调器通信; 通过WiFi依托云平台提供的API接口获取NB-IoT节点上传的数据.
为了实现数据的结构化描述, 在数据格式方面, 选择JSON (Java Script Object Notation)轻量级数据格式. JSON采用键值对结构的文本格式, 便于人们阅读和编写, 同时易于机器解析和生成, 是理想的数据交换语言[10]. 网关通过USART, I2C, SPI通信接口与协调器进行交互, 借助Linux中的JSON编程接口, 实现LoRa和ZigBee网络数据的协议封装; 通过云平台获取NB-IoT数据进行JSON协议封装.
网关根据各个网络定义好的数据流格式, 对不同的协议进行封装, 实现协议封装的原理为: 首先, 创建JSON配置文件的Document对象, 创建根元素和子元素. 然后以字节段描述结束为条件, 循环地封装监测数值ID、含义、偏移量等信息, 实现JSON结构化描述, 进行协议封装, 最终以UTF-8编码格式写入JSON配置文件库, 流程如图3所示.
3 服务器的搭建本文利用NVIDIA Jetson TX2平台搭建嵌入式服务器, 实现对数据的解析、存储与处理. 通过WiFi与网关通信, 将网关上传的数据解析后存储至MySQL数据库中; 对数据进行分析与处理, 触发相应的预警等级并通过串口控制的SIM800模块向用户发送短信, 提醒用户采取相应措施, 实现系统的分级预警功能; 展示终端采用B/S架构, 方便用户访问.
3.1 基于JSON格式的数据解析服务器的具体解析过程如图4所示, 服务器实时对网络进行监听, 当产生中断时, 对比协议标识, 判断网络类型并运行各自的线程. 线程中, 根据系统提供的JSON接口, 按照预先定义好的数据流格式逐字节进行查找, 然后判断数值ID并根据偏移量和转换倍数转换为实际采集的数值, 从而得到数据流中的传感器数据. 解析结束后即调用数据库接口, 以监测数值ID为主键, 将对应的数值存储到MySQL数据库中并提供调用接口供上层应用.
3.2 分级预警机制的工作流程
在进行分级预警之前, 服务器需对数据库中的传感器数据进行预处理. 服务器对每种传感器每天所采集的数据按式(1)进行取平均值处理, 得出一组传感器平均值数据. 平均值公式如下:
$ A= \frac{1}{{{n}}}\sum\limits_1^{{n}} {{A_{{i}}}}\;\;\; \left( {{ i} = 1,2,3, \cdots, n} \right) $ | (1) |
式中, A为取平均值后某一种传感器的数据, Ai表示3种不同的采集节点每天所采集的某一种传感器数据, n为每种传感器每天所采集的次数.
分级预警机制流程如图5所示, 服务器进行数据处理与分析后, 结合中国气象局发布的雾霾等级标准划分预警等级, 当PM2.5浓度小于等于150 μg/m3时为一级预警, 并继续监测; 当PM2.5浓度大于150 μg/m3且小于等于250 μg/m3时, 为二级预警, 并发送信息至用户并给出合理建议; 当PM2.5浓度大于250 μg/m3时为三级预警, 将发送信息至用户并通知环保部门启动喷雾降尘车等操作.
3.3 分级预警机制的优化
将支持向量回归模型用于分级预警机制中, 使得服务器能够根据数据库中的历史数据来预测未来的空气质量. 由于雾霾预测属于非线性问题, 而支持向量回归机(Support Vector Regression, SVR)在解决小样本、非线性问题中表现出独特优势, 支持向量机的关键在于核函数, 不同的核函数会导致SVR推广性不同, 一般使用RBF[11]. 在以RBF为核函数的SVR中, 惩罚参数C和RBF核参数g是影响模型性能的重要参数[12].
为了提高SVR预测的精度, 本系统使用遗传算法对惩罚参数C和RBF核参数g进行参数寻优, 提高预测的准确性. 其中适应度函数是遗传算法用于支持向量机参数寻优的接口, 用于衡量个体的优劣, 其对遗传算法的选择、交叉和变异操作具有重要影响, 从而也会影响参数寻优的优化时间和优化效率[13].
本文采用SVR均方根误差作为适应度函数, 即:
${{fi}}{t_{MSE}} = \sqrt {\frac{{\displaystyle \sum\limits_{i = 1}^n {{{\left({y_i} - {f_i}\right)}^2}} }}{n}} $ | (2) |
式中, yi为训练样本真实值, fi为支持向量机预测值, n为样本的个数, fit为适应度函数.
将优化后的参数代入SVR模型中, 实现对SVR的优化, 再将优化后的SVR应用于分级预警机制中, 使得系统更加准确、合理地划分预警等级.
4 案例分析依托本校已部署的异构网络, 全面获得校园雾霾环境信息. 根据3种传感网络不同的传输特性, 在校园实验室、教学楼顶部、操场分别布置ZigBee、LoRa、NB-IoT 3种采集节点. 进行了为期90天的数据采集和测试工作, 采集周期为10分钟; 使用基于树莓派设计的网关完成数据的汇集与封装; 使用NVIDIA Jetson TX2搭建的嵌入式服务器实现数据解析、存储与分析.
4.1 实验数据的获取由中国气象局发布的雾霾等级标准划分可知, PM2.5的含量决定了雾霾的危险等级, 而湿度、风力、SO2、CO、NO2、O3与PM2.5含量相关度较大[14,15], 所以在3种采集节点上分别搭载温湿度、SO2、风速、NO2、CO、O3、PM2.5 7种传感器. 以LoRa采集单元为例, 其采集数据流如表1所示.
4.2 异构数据封装与解析网关汇集3种传感节点采集的数据后, 根据图3所示的封装流程对监测数值ID、含义、偏移量等信息循环封装为JSON文件, 而后通过WiFi发送到服务器. 部分JSON文件如图6所示.
服务器接收到网关上传的数据后, 按照图6所示流程进行解析. 以16进制数据流12B20209BA0640006B779E为例, 服务器根据12判断为LoRa采集单元, 然后定位到单元标识根节点“LoRa_Node”, 查询到“node_id”为B2, 再根据“describe”中的字节段含义读出对应的CO/O3/SO2数据依次为09BA、0640、006B, 经过十进制转换, 减去偏移量, 乘以转换倍数, 最终解析为2490、1600、107, 然后将监测ID和对应的实际数值存储到MySQL数据库中.
解析后的部分实验数据如表2所示.
4.3 分级预警机制的优化与实现
由于影响因子的物理意义不同, 因此, 在应用于分级预警前需要对影响因子数据进行归一化处理[16]. 使得采集的传感器数据介于0~1范围之内, 有助于网络快速收敛. 归一化公式如下:
$X = \left( {{X_{{i}}} - {X_{\min }}} \right)/\left( {{X_{\max }} - {X_{\min }}} \right)$ | (3) |
式中, X 为经过归一化处理后的数据, Xi为影响因子实际数据, Xmax和Xmin分别为影响因子数据中的最大值和最小值[17].
本系统使用Python语言来编写SVR雾霾预测模型, 实现分级预警机制的优化. 输入处理好的实验数据后, 利用sklearn库中的iloc()函数进行时间序列划分, 按照五比一的比例划分训练数据和测试数据, 将湿度、风力、SO2、CO、NO2、O3作为输入向量, PM2.5作为目标向量. 其中, 种群范围为20, 惩罚系数C的取值为(0, 200), RBF核函数g的取值为(0.1, 10), 交叉概率为0.8, 变异概率为0.01, 进化代数为200; 进行交叉、变异、遗传后得到C和g的最优值分别为17.02和0.35[18].
模型检验结果及误差见表3.
由模型检验结果可知, 采用优化后的SVR模型预测PM2.5的值, 其误差率在10%以下, 这说明优化后的预测模型准确度较高, 能够稳定、有效地预测未来的PM2.5的含量. 利用训练好的SVR预测模型对校园未来15天(2019.2.1–2019.2.15)的PM2.5含量进行检验, 预测结果如图7所示.
由预测结果可知, 未来第3天和第8天PM2.5指数分别为159 μg/m3和161 μg/m3, 大于150 μg/m3且小于250 μg/m3, 服务器判定为二级预警, 并发送信息至用户给出合理建议; 其余各天PM2.5均小于150 μg/m3, 服务器判定为一级预警, 不采取措施并继续监测.
5 总结本文实现了一套面向异构网络的区域雾霾预警系统. 完成了异构网络中传感器数据的采集及存储; 引入分级预警机制, 触发相应的机制响应并采取相应措施; 将支持向量回归模型用于分级预警中, 使其更加准确、合理地划分危险等级. 最后通过校园应用案例验证了该系统能够稳定、有效地对雾霾进行预警.
[1] |
杨准. 雾霾现象成因初步探讨. 科技创新导报, 2014, 11(34): 21. DOI:10.16660/j.cnki.1674-098x.2014.34.031 |
[2] |
Hu JL, Wang YG, Zhang HL. Characterizing multi-pollutant air pollution in China: Comparison of three air quality indices. Environment International, 2015, 84: 17-25. DOI:10.1016/j.envint.2015.06.014 |
[3] |
McLaren J, Williams ID. The impact of communicating information about air pollution events on public health. Science of the Total Environment, 2015, 538: 478-491. DOI:10.1016/j.scitotenv.2015.07.149 |
[4] |
谢元博, 陈娟, 李巍. 雾霾重污染期间北京居民对高浓度PM2.5持续暴露的健康风险及其损害价值评估
. 环境科学, 2014, 35(1): 1-8. DOI:10.13227/j.hjkx.2014.01.057 |
[5] |
陈镱, 王绍源, 陈清华. 基于无线传感网络的实时环境监测系统的设计与实现. 仪表技术与传感器, 2018(9): 79-83. DOI:10.3969/j.issn.1002-1841.2018.09.019 |
[6] |
邵士博, 许家辉, 汪朝晖, 等. 基于ZigBee网络的室内甲醛浓度远程实时监测系统设计. 电子测量技术, 2019, 42(3): 116-122. DOI:10.19651/j.cnki.emt.1802118 |
[7] |
何相甫, 范志辉, 王辉, 等. IPv6与ZigBee互联网关的设计与实现. 计算机工程, 2019, 45(7): 154-158. DOI:10.19678/j.issn.1000-3428.0051254 |
[8] |
阮雅端, 陈湘军, 郁建桥, 等. 雾霾分布视觉传感联动联控系统技术实现. 南京大学学报(自然科学版), 2015, 51(2): 234-242. DOI:10.13232/j.cnki.jnju.2015.02.004 |
[9] |
庞泳, 李光明. 基于ZigBee的智能家居系统改进研究. 计算机工程与设计, 2014, 35(5): 1547-1550, 1582. DOI:10.16208/j.issn1000-7024.2014.05.064 |
[10] |
张玉杰, 刘强, 张婷婷. 物联网系统异构数据的过滤及存储模型研究. 电子器件, 2018, 41(3): 703-707. DOI:10.3969/j.issn.1005-9490.2018.03.030 |
[11] |
左姣姣, 倪志伟, 朱旭辉, 等. 融合协同进化人工鱼群算法和SVM的雾霾预测方法. 模式识别与人工智能, 2018, 31(8): 725-739. DOI:10.16451/j.cnki.issn1003-6059.201808005 |
[12] |
朱旭辉, 倪志伟, 倪丽萍, 等. 基于相异度的SVM选择性集成雾霾天气预测方法. 系统科学与数学, 2017, 37(6): 1480-1493. |
[13] |
李翠平, 郑瑶瑕, 张佳, 等. 基于遗传算法优化的支持向量机品位插值模型. 北京科技大学学报, 2013, 35(7): 837-843. DOI:10.13374/j.issn1001-053x.2013.07.006 |
[14] |
付倩娆. 基于多元线性回归的雾霾预测方法研究. 计算机科学, 2016, 43(6A): 526-528. DOI:10.11896/j.issn.1002-137X.2016.6A.125 |
[15] |
白盛楠, 申晓留. 基于LSTM循环神经网络的PM2.5预测
. 计算机应用与软件, 2019, 36(1): 67-70, 104. DOI:10.3969/j.issn.1000-386x.2019.01.012 |
[16] |
刘洪通, 冯百明, 温向慧, 等. 基于Storm的AQI实时预测模型. 计算机工程与设计, 2019, 40(1): 296-301. DOI:10.16208/j.issn1000-7024.2019.01.050 |
[17] |
王娟娟. 基于改进支持向量机模型的开都河年径流量预测. 西北水电, 2015(4): 1-5. DOI:10.3969/j.issn.1006-2610.2015.04.001 |
[18] |
宗晓萍, 武子瀚, 刘言. 基于遗传算法寻优的SVR雾霾预测模型. 河北大学学报(自然科学版), 2016, 36(3): 307-311. DOI:10.3969/j.issn.1000-1565.2016.03.014 |