基于层级结构的用电信息采集系统通信报文的压缩方法
技术领域
本发明涉及数据压缩技术领域,具体而言,涉及一种基于层级结构的用电信息采集系统通信报文的压缩方法。
背景技术
在电力系统的日常运行中,为了对用户电能消耗情况进行有效监测与分析,电力公司需对大量用户的用电数据进行采集和处理。随着智能电网的大规模建设,智能电表取代人工抄表逐渐普及。相比传统的电表数据,智能电表产生的数据具有采集频率高、传输数据多、报文结构复杂等特点。大量的电力数据在传输和处理的过程中,数据分布不均匀,故不可避免地带来了数据的冗余,冗余的数据不仅仅占用带宽,影响传输速度,增大资费开销,同时也给信息的检索带来了不必要的时间开销。数据压缩技术不仅可以消除数字的信息冗余,还能保证传输数据的质量,减少电力通信系统的负荷,节省带宽,提高运行效率。
现有的对电力数据进行压缩处理的研究,往往仅采用一种算法将封装好的协议数据整体进行压缩。这种方式笼统粗糙,并没有结合协议详细解析数据的内部结构,压缩效果往往不够理想。解决数据的压缩和存储问题迫在眉睫,只有寻找到一种恰当的数据压缩方法才能最大程度地减少数据冗余。
发明内容
为解决上述技术问题,本发明提供一种基于层级结构的用电信息采集系统通信报文的压缩方法。
为实现上述目的,本发明所采用的具体技术方案如下:
一种基于层级结构的用电信息采集系统通信报文的压缩方法,其关键在于,包括以下步骤:
S1:在第一层数据架构中,用电数据采集终端将采集到的用电协议数据拆分成控制型数据和数值型数据,且对所述数值型数据进行解析分类得到原始电压数据、原始电流数据、原始电能及费率数据和原始功率数据;
S2:利用差分编码数据压缩算法对原始电能及费率数据进行压缩处理,得到第一压缩数据,且利用原始电压数据和原始电流数据训练得到自编码神经网络模型;
S3:进入第二层数据架构,利用已训练好的自编码神经网络模型对原始电压数据和原始电流数据进行处理,得到第二压缩数据和数据异常位置;
S4:根据所述第一压缩数据、第二压缩数据以及数据异常位置进行数据修正,得到第三压缩数据;
S5:进入第三层数据架构,将所述第三压缩数据、所述原始功率数据以及所述控制型数据按协议中原有的时间戳重新排列得到待压缩数据,利用无损压缩算法进行压缩处理从而得到第四压缩数据;
S6:电数据采集终端将所述第四压缩数据传送给主站。
进一步地,所述自编码神经网络模型中包括编码网络和解码网络,所述编码网络用于输出第二压缩数据,所述解码网络用于输出数据异常位置。
进一步地,所述编码网络设有四层,其神经元个数依次为64、32、24、16;
所述解码网络设有四层,其神经元个数依次为16、24、32、64。
进一步地,所述原始电压数据和所述原始电流数据各种独立训练分别得到第一自编码神经网络模型和第二自编码神经网络模型,所述第一自编码神经网络模型用于确定原始电压数据的第二压缩数据及其数据异常的位置,所述第二自编码神经网络模型用于确定原始电流数据的第二压缩数据及其数据异常的位置。
进一步地,所述原始电压数据和所述原始电流数据先进行归一化和数据增强后,再输入所述自编码神经网络模型。
进一步地,将所述第一自编码神经网络模型的解码输出数据与对应的电压输入数据进行比较生成第一拟合曲线,利用该第一拟合曲线确定原始电压数据中数据异常的位置;
将所述第二自编码神经网络模型的解码输出数据与对应的电流输入数据进行比较生成第二拟合曲线,利用该第二拟合曲线确定原始电流数据中数据异常的位置。
进一步地,获取第一自编码神经网络模型在一段时间范围内的多条输出数据,针对输出数据中的每一位置点生成该时间范围内的电压数据解码曲线,基于电压数据解码曲线和预设的电压异常阈值确定出原始电压数据中数据异常的位置;
获取第二自编码神经网络模型在一段时间范围内的多条输出数据,针对输出数据中的每一位置点生成该时间范围内的电流数据解码曲线,基于电流数据解码曲线和预设的电压异常阈值确定出原始电流数据中数据异常的位置。
进一步地,所述对原始电压数据进行归一化处理包括:将原始电压数据归一化至215~235,并将结果保留3位小数;
所述对原始电流数据进行归一化处理包括:将原始电流数据归一化至0~25,并将结果保留3位小数。
进一步地,步骤S5包括:
S51:使用游程编码算法去除所述待压缩数据中的重复字符得到第四压缩数据的一级数据;
S52:用统一字符替换第四压缩数据的一级数据中的帧头帧尾,并在此基础上使用Huffman算法进行编码得到第四压缩数据的二级数据;
S53:使用LZ77算法再对第四压缩数据的二级数据进行编码得到最终的待发送给主站的压缩数据。
进一步地,步骤S4包括:
当原始电压数据或原始电流数据存在数据丢失时,根据数据丢失点附近的电压数值或电流数值确定丢失的电压数据或电流数据,并将该丢失的电压数据或电流数据添加至原始电压数据或原始电流数据中的相应位置构成完整数据,重新输入自编码神经网络模型得到所述第三压缩数据。
本发明提供的基于层级结构的用电信息采集系统通信报文的压缩方法针对不同电力数据具有不同特性,可以很好地考虑到协议数据的整体结构和内部数值相关性,显著地提高压缩率的同时又对控制帧和地址帧等不允许出错的信息予以了保护。利用数值相关性对一些异常数据的标记与修正补偿,保证了用电信息采集系统的稳定性。末层进行的整合压缩符合原本传输系统的规则,提高了传输效率,节省了传输时间。
附图说明
下面将结合附图及实施例对本发明作进一步说明,附图中:
图1为本发明实施例提供的基于层级结构的用电信息采集系统通信报文的压缩方法的流程示意图;
图2为本发明的数据架构图;
图3为自编码神经网络的结构示意图;
图4为利用第一自编码神经网络输出的拟合曲线示意图;;
图5-1为进行纵向比较时电压数据的峰值异常示意图;
图5-2为进行纵向比较时电压数据的波谷异常示意图;
图6-1为利用第二自编码神经网络输出的第一拟合曲线示意图;
图6-2为利用第二自编码神经网络输出的第二拟合曲线示意图;
图6-3为利用第二自编码神经网络输出的第三拟合曲线示意图;
图7为进行纵向比较时电流数据的峰值异常示意图;
图8-1为采集终端采集的电能数据;
图8-2为对图8-1中的电能数据进行修正后得到的数据图。
具体实施方式
为了使本发明要解决的技术问题、技术方案和优点更加清楚,下面将结合附图及具体实施例进行详细描述,应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
本实施例提供一种基于层级结构的用电信息采集系统通信报文的压缩方法,请参见图1所示,包括以下步骤:
S1:在第一层数据架构中,用电数据采集终端将采集到的用电协议数据拆分成控制型数据和数值型数据,且对所述数值型数据进行解析分类得到原始电压数据、原始电流数据、原始电能及费率数据和原始功率数据;
在数据压缩前,对采集得到的完整协议数据进行解析,拆分成“控制”和“数值”两部分,并对“数值”数据进行分类,进行完整协议数据的解析与拆分,本实施例以DL/T698.45协议的电力协议数据为例进行具体说明,具体的请参见图2所示,发送端(也即采集终端)原始的用电协议数据被初步拆分成数值型数据和控制型数据,数值型数据根据属性类别被拆分成电流数据、电压数据、电能及费率数据和功率数据功率数据。
DL/T 698.45协议的电力数据分为主站对集中器的下发指令和集中器对主机的上报响应,来保证主站和终端之间稳定收发。面向对象的DL/T 698.45协议的帧格式如表1所示。
表1
对发送和响应数据的帧头帧尾进行提取可以看到,包括长度域L、控制域C、地址域A、帧头校验HCS和帧校验FCH,它们格式固定、字节长度固定,不存在相邻数据间的规律性和相似性,要求不能出错且信息完整。对这些数据,统称为“控制信息”,对这些数据应避开前两层的处理,直接在末层进行整体的无损压缩。
链路用户数据(应用层)包含居民用电关键数据,从中可以拆解出所记录的电表真实数值型数据,包含不同的类别。统称这些数据为“数值信息”,本实施例提供的方法中基于数据相关性进行压缩,通过损失一定的精度来提高整体的压缩效果。
S2:利用差分编码数据压缩算法对原始电能及费率数据进行压缩处理,得到第一压缩数据,且利用原始电压数据和原始电流数据训练得到自编码神经网络模型;
在训练和使用自编码神经网络模型过程中,通常需要对数据进行归一化处理和数据增强处理,本实施例中可采用现有的归一化算法,也可以通过如下方式进行归一化处理:
将原始电压数据归一化至215~235,并将结果保留3位小数,将原始电流数据归一化至0~25,并将结果保留3位小数。
S3:进入第二层数据架构,利用已训练好的自编码神经网络模型对原始电压数据和原始电流数据进行处理,得到第二压缩数据和数据异常位置;
S4:根据所述第一压缩数据、第二压缩数据以及数据异常位置进行数据修正,得到第三压缩数据;
当原始电压数据或原始电流数据存在数据丢失时,根据数据丢失点附近的电压数值或电流数值确定丢失的电压数据或电流数据,并将该丢失的电压数据或电流数据添加至原始电压数据或原始电流数据中的相应位置构成完整数据,重新输入自编码神经网络模型得到所述第三压缩数据。
S5:进入第三层数据架构,将所述第三压缩数据、所述原始功率数据以及所述控制型数据按协议中原有的时间戳重新排列得到待压缩数据,利用无损压缩算法进行压缩处理从而得到第四压缩数据;
具体而言,步骤S5可以按以下步骤进行:
S51:使用游程编码算法去除所述待压缩数据中的重复字符得到第四压缩数据的一级数据;
S52:用统一字符替换第四压缩数据的一级数据中的帧头帧尾,并在此基础上使用Huffman算法进行编码得到第四压缩数据的二级数据;
S53:使用LZ77算法再对第四压缩数据的二级数据进行编码得到最终的待发送给主站的压缩数据。
S6:电数据采集终端将所述第四压缩数据传送给主站。
具体实施时,可以将电压输入数据和电流输入数据分别输入经训练得到的第一自编码神经网络和第二自编码神经网络,根据第一自编码神经网络的输出数据确定原始电压数据中异常数据的位置,并根据第二自编码神经网络的输出数据确定原始电流数据中异常数据的位置。
本实施例中的第一自编码神经网络用于对电压输入数据进行编码后对该电压编码结果进行解码输出,第二自编码神经网络用于对电流输入数据进行编码后对该电流编码结果进行解码输出。
应当说明的是,本实施例中的第一自编码神经网络可以是基于增强电压数据进行训练测试得到的网络,其训练测试的过程包括:获取多条用于进行训练的原始电压数据进行电压数据增强处理,在增强处理的基础上进行归一化处理后输入神经网络进行训练得到一自编码神经网络;
第二自编码神经网络可以是基于增强电流数据进行训练测试得到的网络,其训练测试的过程包括:获取多条用于进行训练的原始电流数据进行电流增强处理,在增强处理的基础上进行归一化处理后输入神经网络进行训练得到二自编码神经网络。
本实施例中每一自编码神经网络可以由四层编码子网络和四层解码子网络构成。可选的,每一自编码神经网络中最低维度处的输出神经元的个数为16或24。
这里对根据自编码神经网络的输出数据确定原始数据中异常数据的位置这一过程进行具体说明:
在第一种示例中,可以将第一自编码神经网络的输出数据与对应的电压输入数据进行比较生成第一自编码神经网络的第一拟合曲线,利用该第一拟合曲线确定原始电压数据中异常数据的位置,并将第二自编码神经网络的输出数据与对应的电流输入数据进行比较生成第二自编码神经网络的第二拟合曲线,利用该第二拟合曲线确定原始电流数据中异常数据的位置。
在第二种示例中,可以获取第一自编码神经网络在一段时间范围内的多条输出数据,针对输出数据中的每一位置点生成该时间范围内的电压数据解码曲线,基于电压数据解码曲线和预设的电压异常阈值确定出原始电压数据中异常数据的位置;获取第二自编码神经网络在一段时间范围内的多条输出数据,针对输出数据中的每一位置点生成该时间范围内的电流数据解码曲线,基于电流数据解码曲线和预设的电压异常阈值确定出原始电流数据中异常数据的位置。
在第三种示例中,可以结合上述两种示例中的方法,也即可以先根据第一拟合曲线确定出原始电压数据中异常数据的位置,然后再根据电压数据解码曲线和预设的电压异常阈值确定出原始电压数据中异常数据的位置,将这两种位置的并集作为原始电压数据中实际出现异常的位置;对于电流数据,则先根据第一拟合曲线确定原始电流数据中异常数据的位置,若确定出的异常数据达到原始电流总数据的80%或90%或预设的其他百分比,则根据电流数据解码曲线和预设的电流异常阈值确定出原始电流数据中异常数据的位置。
具体的,对于原始费率数据中的异常数据点,可以计算该异常数据点前后正常值的平均值,将该平均值作为该异常数据点处修正后的数据。比如可以计算该异常数据点前一个数据与后一个数据的平均值,或者可以计算该异常数据点前两个或多个与后一个、后两个或后多个数据的平均值。
本实施例中先使用游程编码方法去除数据中存在的重复字符,之后考虑每条数据的帧头帧尾都是固定的,可以统一使用*符号全部替代。经以上初步处理,先使用了Huffman编码算法,再进行LZ77方法压缩。其原因是因为Huffman算法在压缩后往往把数据从原有的16进制格式变为了崭新的二进制格式,相当于对数据结构进行了整理,使得原有的复杂结构开始变单一,有利于下一步基于局部数据结构的LZ77编码。
经多次测试,不论对低压上行还是专变上行,本实施例所提供的组合压缩方法效果都比单一方式有所提高。
为了验证本实施例提供的方法的有效性,按照上述方法进行了相关实验。实验中所采用的是从某省智能电表上采集到且符合DL/T 698.45协议的电力数据,记录了某一整天每隔一分钟或五分钟采样点采集的电能消耗数据,共计8820条。选取该天一个固定终端的响应数据值,每条数据分别表示:有功功率、无功功率、电压、电流以及电表的总及费率电能量(也即上述的费率数据)。去掉帧头帧尾的链路用户数据中的数值型数据解析如表2。考虑到不同数据的特性不同,拆解出的这四类数值型数据分别存放,进行下一步基于数据相关性算法的压缩实验。
表2
本实验中的第一自编码神经网络模型和第二自编码神经网络模型都采用四层编码与四层解码网络,结构如图3所示。解析分类好的DL/T 698数据,得到以96个数据点为一条的多条数据集。这96个点代表一天24小时每间隔15分钟采集一次数据所得到的所有值(电压或电流)。
96维原始数据输入后,先通过自编码子网络减小维度,之后解码子网络增大维度恢复为96维输出。网络结构最低维度处是编码网络的解码结果,分别设计了64、32、24、16个神经元,各代表着近2/3、1/3、1/4和1/6数据压缩率。
对实验过程中使用的用电数据按DL/T 698协议进行数据解析分类,得到728条数据。先将数据按电压、电流和功率属性分类,去除明显异常或部分丢失的数据,最终得到了数据集:电压77条,电流62条,功率81条。由于每条数据有96个点,实际一共得到7392个电压值,5952个电流值以及7776个功率值。
观察不同类型数据的散点图发现:电压的数据分布较集中均匀,电流和功率则分布随机一些。电压和电流这两类数据的浮动区间都比较小,而功率数据,其最大可达七八千左右,最小却在零点徘徊。在神经网络训练之前对输入数据进行批量归一化处理的,电压和电流浮动区间小处理合理,而功率则相反。所设计网络很难去捕捉功率数据规律,曲线特征失衡,结果误差大,所以在本发明提供的方法中无需捕捉功率数据的规律,而是直接将其放在第三层中进行数据拼接形成完成的待压缩数据后对该完整的待压缩进行无损压缩。
本实验中在进行自编码神经网络训练之前,先按照上述方法对数据进行归一化处理。对于电压数据,采用215到235间进行数据归一化处理,结果保留3位小数。对于电流数据,采用0到25间进行归一化,结果为0到1的浮点数,保留3位小数。
据机器学习经验,网络训练的数据量是十分重要的,数据集需要达到上千条以上。为让所设计网络效果良好,本实验中也对数据进行了增强处理。具体的,对于电压,每条原始数据(归一化之前的数据)加了一个3位小数的-0.5到0.5的随机数,循环29次,最终产生2310条训练数据,取整去掉10条,以100条为一个batch,23个batch构成一个epoch。对电流,每条原始数据加了一个3位小数的-0.6到0.6的随机数,循环29次,最终产生1860条训练数据,取整去掉60条,以100条为一个batch。
首先对三相电压数据进行压缩。取数据增强并归一化好的2300条电压输入数据,主要将网络结构分为四大类来进行训练测试,分别对应网络编码器的输出神经元个数为16、24、32和64个。经多次反复测试与分析,需在已有的网络结构基础上,为每种编码器类型的网络设置一组不同的最优参数。
使用设置的最优参数和所设计好的网络结构,实际中采用一台CPU电脑对四类网络进行分别数小时的训练。训练基本在1000次迭代以内损失就大幅下降并达到平稳。依然需要一直训练数万次,这是因为实验中观测到数万次迭代中损失依然在缓慢波动下降,同时这也利于对这四类网络的训练结果做出客观评价。不同类型的自编码神经网络的结果如表3所示:
表3
对比实验过程中四种不同网络结构的拟合图可发现,随着编码器输出神经元的个数增加,拟合效果会变得越好,这符合自编码网络自身特点。考虑若对数据准确度要求不是特别严格,可选16或24神经元编码器的网络,使得压缩率较高的情况下精度损失不会太多。
取1800条电流输入数据,仍将网络结构分为四类来进行训练测试,对应编码器的输出神经元个数为16、24、32和64。通过相同流程可以得到电流数据的恢复曲线,结果表明电流数据的拟合结果和电压的不同。对于某些电流数据,曲线拟合效果接近饱和,但一些数据拟合效果却会非常差。这是由于不同电流数据的规律各不相同,与电压数据符合一个整体的规律不同。具体内容比对表4所示:
表4
在实际国家电网召测抄表过程中,往往会出现一些数据丢失、数据不全的情况。对于出现的一条真实96点数据只有90个点等的情况,利用自编码神经网络学习到的数据相关性对实际数据进行恢复。先取召测不全的数据与数据丢失点处的平均值构成完整数据,利用完整数据输入到一个已经训练好的自编码神经网络中,最终解码输出,解解归一化的结果就是所得到、预测的恢复数据。
在验证实验中,电压数据的解码恢复相当成功,拟合恢复曲线可以基本学到原始数据曲线的全部规律。通过与原有数据对比,就可找出一些真实数据的异常情况。以32个神经元编码器输出的自编码神经网络为例,采集终端对电压数据进行了异常分析。具体的请参见图4所示,图4中方框所代表的是根据上述方法找出的异常电压数据,实际是一些拟合效果不好的部分。可看出,大部分差异出在了原始数据的微小峰值变化上。对于这些真实数据中的异常数据,可以在实际数据压缩过程中回传这些数据的标记。
在横向的数据比较分析基础上,还可以采用纵向的比较,对96个点逐点分析(每点包含77个数值情况)。其中,观察这96个电压数据点的规律发现了两类数据异常,图5-1和图5-2中的方框分别表示了“峰值异常”和“波谷异常”。在制定好异常阈值后标记下这些点随着压缩数据一起发送传输,提供给主站的数据中心进行预警。具体的异常判断结果如图5-1和图5-2所示。
通过前面的分析可知电流数据的解码拟合看似良好,但实际效果大相径庭。不同电流数据的曲线趋势大不相同,这和电压数据截然相反,仅仅用自编码神经网络的输出作为异常数据的判断标准已不再适用。如图6-1、图6-2和图6-3所示,方框代表曲线的一些差异,可以看出,对电流数据来讲,曲线拟合恢复的好坏出现了两极分化。图6-1和图6-3的数据拟合效果非常好,异常情况极少,而对于图6-2,则全程异常。这种情况很可能是由于神经网络在训练过程中学习到了一种“波动”的机制,记“波动”为合理,导致当有一些平稳线段出现时,测试效果会突然变差。但无论如何,绝对错误和绝对正确都对数据异常分析非常不利。由于所给数据集有限,这种过拟合的案例被所设计的网络习得了,若想得到更好的结果,考虑需要使用更多、更富特点的电流数据来使训练出的网络更具鲁棒性。为了进一步优化,对于电流数据,进行完横向比较后可以继续采用纵向比较,96个点逐点分析(每点包含62个数值情况)。和电压的分析结果不同,实验中只观察到了“峰值异常”,具体案例如图7。和电压方法一样,设立阈值,超出该阈值的“峰值点”判定为“峰值异常”。
根据总及费率数据的定义,可知正常情况下电能数据是持续上升的。但在实际召测过程中,往往因为一些特殊原因,导致终端所采集来的某些电能数据存在异常。如图8-1为一条异常的数据,方框表示具体的异常数据点。此时需对这些异常的数据点进行修复。具体修正方法可以是在异常点的附近取前后正常值的平均来替代。在压缩过程中修正异常值,解压时回传一条恢复好的数据,异常恢复结果如图8-2所示。
通过以上内容,将已拆分开并相关性压缩好的数值型数据按协议中的标记与时间戳重新有序排列完整。此时排列好的数据中仍存在控制帧、地址帧等不允许在传输过程中出现丢失或出错的数据,它们实际上也存在着冗余。最后采集终端采用无损压缩算法对待压缩的完整数据进行压缩处理后发送给主站,实验证明,通过本发明提供的方法进行数据压缩不会丢失信息、可靠性大。
本实施例所提供的用电信息采集系统的数据压缩方法,总共分为三层。首先将用户侧采集到的每条电力协议数据拆分为控制型数据和数值型数据两部分。控制型数据,可认为这些数据是不允许出差错的,且几乎找不到彼此相关性,所以不对它进行第一、二层的处理。至于数值型数据,以DL/T 698.45协议为实验,将其解析分类,分为四种,根据它们各自特性分别采用自编码网络、差分编码等方法进行压缩。由于这些相关性算法可以得到数据间的相互规律,利用这些规律,可对数据异常和缺失做出标记与补偿,使接收端收到的解压数据更加合理可靠。最后一层时,利用协议中的标记与时间戳等信息重新拼接数值型、控制型数据,参考三种传统压缩算法的原理,设计了一套适合于用电协议数据结构的整体压缩方案。
上面结合附图对本发明的实施例进行了描述,但是本发明并不局限于上述的具体实施方式,上述的具体实施方式仅仅是示意性的,而不是限制性的,本领域的普通技术人员在本发明的启示下,在不脱离本发明宗旨和权利要求所保护的范围情况下,还可做出很多形式,这些均属于本发明的保护之内。