摘 要:为解决用电信息采集系统中数据高频上报引起的通信及存储问题,首先通过协议分析将远程通信报文的冗余性分为了帧间冗余、模式冗余以及编码冗余,并分别采用报文预处理方法、LZ77 算法与 Huffman 算法压缩其冗余;然后针对单种算法无法同时对报文的三种冗余进行压缩的问题,通过对三种冗余各自的特性及相互间关系的分析,提出了一种组合压缩的方式,实验结果表明,该方法可以有效的缩短远程通信报文的长度,从而减少存储消耗、提高网络的传输效率。
关键词:用电信息采集;远程通信报文;冗余性分析;数据压缩;组合压缩
0 引 言
在智能电网中,用电信息采集系统(以下简称用采系统)对分析用户用电行为以及电网运行状态具有重要意义。用电信息监测最重要的是实现无间断的用电信息采集与远程通信,远程通信指用电信息采集系统中采集终端(下文称终端)与采集主站(下文称主站)之间的数据传输。现阶段实际在运的用采系统的远程通信,多采用 GPRS/CDMA、专用 230MHz 等无线通信方式进行数据传输[1],高强度的监测意味着采集系统会对下属的终端节点进行全天候的数据采集与监控,用电信息的高频率上报会产生大量的数据积压,从而对无线传输造成严重的通信负荷。
数据压缩技术可对数据量进行有效的压缩,以减少存储空间,提高信息数据传输、存储和处理的效率[2]。目前数据压缩技术已经广泛应用于视频、图像、语音等业务。在电力系统中,各类压缩算法的应用也已经有了先例[3-8]。文献[6]针对电力系统数据周期性的特点,选用合适的小波基将电力数据变换到小波域,然后对高频和低频部分分别进行编码以实现高效压缩。文献[7]针对电力系统故障信号波形在特定时间段内的自相似性,提出了一种基于分形插值的数据压缩与还原算法,有效的提升了故障录波数据的压缩倍数。文献[8]充分利用了电力系统波形数据的周期性、有界性和冗余性特点,在 DSP 平台上实现了波形数据的高效压缩。然而,上述方法都是针对理论上的单一变量的连续测量数据或者波形数据进行压缩,而在实际用电信息采集与通信过程中,传输的不仅有单一的连续电压值或者电流值,还需加入召测、控制等协议信息以组成封装好的数据报文。因此,研究适合实际应用的用电信息采集系统远程通信报文的压缩方法以降低海量报文数据中存在的冗余信息,最大程度地降低数据传输与存储压力已经成为电力行业的迫切需要。
用采系统分为终端采集系统,远程传输系统和采集主站三大部分,考虑到大量的用电数据通过终端采集上报给主站会对公网的传输造成巨大的压力,因此,文中首先详细分析了数据报文冗余性的产生来源,以此为基础对其进行针对性压缩。由于用采系统远程通信报文通信协议包含控制、互操作等信息,在压缩和恢复的过程中不能对报文结构与内容的完整性产生影响。因此将采用无损压缩方式对报文进行处理。然后,针对数据报文的三种冗余来源:帧间冗余、模式冗余以及编码冗余,分别采用报文预处理、LZ77 算法、Huffman 算法对数据报文进行压缩,并在此基础上提出了一种组合压缩的方式,实验证明该方法可以最大限度压缩报文长度,提高传输效率。
1 用采系统远程通信报文结构与冗余分析
1.1 用采系统远程通信报文结构
主站与终端进行数据传输需要遵循一定的通信协议,通信协议约定了通讯双方在接收报文时的数据格式、编码方法以及传输规则。以图 1 所示国家电网公司 Q/GDW 1376.1-2013 协议(下文简称 376.1 协议)报文帧结构为例,可见主站与终端的各种交互及上报信息均以帧为基本组成单位,由多个字节严格按照协议规定顺序排列组成。帧中各个域的长度与含义详见文献[9]。
1.2 用采系统远程通信报文冗余分析
数据能够被压缩的前提条件是数据报文内部与报文之间存在的冗余性。首先,报文必须按规定帧格式通信意味着报文结构间存在一定的相似性(帧间冗余);其次,由于通信协议对于数据的编码方式是固定的,因此报文中重复上报的信息(时间信息)会被编码成许多重复的字符串(模式冗余);最后,每帧数据报文中各个域的值由上报节点当前物理状态直接决定,因此编码之后的报文在信息学上也必然存在着冗余(编码冗余)。
帧间冗余体现在数据报文之间结构的相似性上,由于通信协议严格规定了数据报文各个域的组成方式,因此一段时间之内从某个固定的采集终端上报给主站的所有报文中必然有一些信息(如终端地址信息)是相同的。表 1 是一个固定的终端节点在一天内发出的所有通信报文的一部分(采用国家电网 DL/T 698.45-2017[10]协议,下文称 698 协议)。
376、698 等通信协议实现了对用户数据的封装,通过加入帧头、帧尾、地址、长度等校验信息可以对数据报文进行有效的差错控制,因此也可以在近距离通信中直接应用于链路层。但当通过远程传输系统来传输时,报文实际上是作为远程传输系统通信协议应用层载荷加载到通信协议栈中,由远程通信协议栈负责可靠传输。因此重复发送地址、帧头、帧尾等校验信息就失去了纠错意义,对于信息存储与传输是冗余的,可以适当减少发送次数。根据 698 协议规定,可将每帧报文写成通用的格式: 68+长度校验+控制码+地址+帧头校验码+链路用户数据+校验码+16,由于表 2 中的报文来自于同一终端节点,因此每帧数据用来表示地址的字节都相同,上述数据中终端地址表示位是从第 5 个字节开始,内容为05 84 23 00 00 20 15 00,一共8个字节,同时,帧头与帧尾标识符对于每帧数据报文都是固有的并且出现的位置固定,因此可以在传输过程中忽略。
模式冗余是指由于节点重复上报与通信协议编码方式固定导致的在报文内部形成的大量重复的字符串。如终端在上报某些电能信息之前总是会将当前的时间一同上报,于是相同的时间标识就会形成一种固定的“模式”在报文中多次出现,具体表现如表 2 所示。
编码冗余可用信息论中“信息熵”的概念来说明。每条数据的“熵”值越小,代表该数据包含的信息量越少。而信息量少,证明可以使用更少的二进制位来表示该条报文。
可见,理论上完整表示该帧报文只需要 494 个二进制位,而实际上在传输过程中却需要花费 87*8=694 个二进制位来表示该帧报文,因此从报文的整体内容来看,可以通过降低高频字符的二进制表示位数来对报文进行压缩。
2 用电信息压缩算法及其实现原理
由第二节的分析可以看到,帧间冗余、模式冗余以及编码冗余是对用电信息远程通信报文压缩的可行性基础,文中针对这三种冗余分别进行处理,以达到缩短报文长度,减少数据传输量的目的,整体的处理流程如图 2 所示。
2.1 帧间冗余压缩
根据第二节对报文帧间冗余的分析,当报文数据来自于同一个采集终端时,帧头、帧尾标识以及经过通信协议编码后的地址信息都相同。当通过远程传输进行通信时,去除重复信息对于报文的存储与传输没有影响。因此在对报文进一步压缩之前,先进行预处理,去除重复发送的帧头、帧尾以及地址信息,可以消除帧间冗余。由于模式冗余一般出现在报文的链路用户数据区域,预处理操作并不会影响到这个区域的数据,而编码冗余只与报文内部字符出现的频率相关,只要报文内部每个字符出现的频率不符合均匀分布,编码冗余是一定存在的,因此对报文进行预处理操作并不会影响报文的其他冗余性。
2.2 模式冗余压缩
由第二节分析可知,模式冗余表现为报文内部形成的大量重复字符串。LZ77 算法对于存在大量重复内容的文件有良好的压缩效率,因此文中将用 LZ77 算法来消除报文中存在的模式冗余。LZ77 编码方法是基于字典的无损压缩算法,它的核心思想是基于数据结构的重复,在编码过程中通过在已经出现的数据中查找重复出现的内容来去除这种冗余,以此实现数据的压缩。
2.2.1 LZ77 算法的编码
LZ77 算法将数据中重复出现的长字符串用字典索引来表示,这需要一个滑动窗口,它包括两部分,分别为搜索缓冲区以及前向缓冲区。在编码时首先将文件中的字符读入滑动窗口中的前向缓冲区中,然后再通过搜索缓冲区。搜索缓冲区中的数据作为建立字典索引的依据,前向缓冲区中的数据与搜索缓冲区中的数据进行比较,查找最长的字符串匹配。编码流程图如图 3 所示:
2.2.2 LZ77 算法的解码
LZ77 算法的解压缩过程同样需要用到滑动窗口,窗口大小与编码时的搜索缓冲区长度相同,通过解码标记和保持滑动窗口中的符号来更新解压数据。当解码单个字符标记时,将标记解码成字符拷贝到滑动窗口中,解码元组标记时,在滑动窗口中查找相应的偏移量,同时找到指定长度的字符串进行替换。
2.3 编码冗余压缩
由第二节分析可知,只要报文中字符出现频率不符合均匀分布,就会存在编码冗余。而 Huffman 编码可以根据使用频率最大化节省字符的存储空间,因此我们用 Huffman 算法来消除报文中存在的编码冗余。Huffman 是变长编码方法,以数据中各个字符出现概率的大小为基础对字符赋予不同长度的代码,是一种优化静态编码方法,产生的二叉树具有最小的加权长之和∑𝑊𝑗𝐿𝑗,其中𝑊𝑗表示某个符号出现的频率,𝐿𝑗表示该字符的编码长度。
(3)重复步骤(2),直到森林中只剩下一棵树。
Huffman 算法根据构建的 Huffman 树来对字符进行编码,在 Huffman 树中,待编码字符必定是叶子节点,编码从根节点开始依次寻找叶子节点,在树有了分叉时,向左的路径记为代码 0,向右的记为代码 1,直至找到原始的文件的字符,即实现了对该字符的编码。
2.3.2 Huffman 算法的解码
Huffman 算法解码需要利用 Huffman 树,因此,在压缩文件时必须要将构建 Huffman 树的一些必要的统计信息(字符总数,每个字符出现的频率)写入压缩文件中,这样才能完成解压。解压过程是压缩过程的反操作,首先根据读取的压缩文件的二进制数据流,开始遍历 Huffman 树,从根节点开始,当读取到 0 时,取根节点的左子树,读取到 1 的时候,取根节点的右子树,然后重复上述操作,直到访问到的节点是一个叶子节点,读取该叶子节点表示的字符,即完成一个字符的解码。
3 仿真实验及结果分析
为验证前文的冗余性分析及压缩方法,我们在真实的用电采集系统采集的数据上进行了测试,并进一步探究了 LZ77 算法中搜索区域长度与前向缓冲区长度对报文压缩比例的影响,分析了各个长度范围内数据报文压缩的最佳参数组合。之后在单种算法压缩的基础上,通过对三种冗余各自的特性与相互关系的分析,提出了一种组合压缩方式来进一步提升压缩效果。
3.1 使用 Huffman 算法消除编码冗余
本节使用的数据来自国家电网某省公司主站真实采集的符合 376.1 协议专变上行数据报文,共含有 10000 条数据报文。我们首先对所有数据报文的长度做了统计,如图 4 所示。可见大量数据报文集中在[0, 50),[50, 100)和[250, 300)这三个长度区间。
在得到整体报文长度分布之后,使用 Huffman 算法对每一个长度范围内的所有数据报文进行压缩并统计平均压缩比例,得到的结果如表 5 所示。可以看到,Huffman 算法对于长度范围处在[450, 500)范围内的报文有着最好的压缩效果,而对于长度范围为[0, 50)的数据并没有起到压缩效果,原因在于 Huffman 编码需要在编码的同时写入字符的统计信息,对于长度很短的报文来说,存储字符统计信息所需要的存储空间与原有报文所占用的存储空间基本相同,这在很大程度上会影响 Huffman 编码的效果。而除了[0, 50)长度范围内的短报文,其他所有长度范围内的报文都能被有效压缩。
3.2 使用 LZ77 算法消除模式冗余
由于 LZ77 算法的缓冲区长度对于压缩效果有极大影响,因此文中就两个窗口长度对报文压缩比例的影响进行了探究。由于所使用的数据报文最长的长度没有超过 500 个字节(1000 个字符),因此先将搜索缓冲区的长度设定为最长报文长度的一半(500 个字符),改变前向缓冲区的长度对每条报文进行压缩,得到各个长度范围内数据报文的平均压缩比例随前向缓冲区长度变化的曲线如图 5 所示。
分别设置 10 种(10~100,步长为 10)不同的前向缓冲区长度进行试验,从实验结果可以明显看出,除了长度范围在[0, 50)和[50, 100)的数据报文的压缩比例呈现一个整体上升的趋势之外,其他几个长度范围的数据报文的最佳压缩比例对应的前向缓冲区长度均为 30 个字符。为了验证前两种长度范围的报文在前向缓冲区长度为 10 个字符时是否已经达到了最佳的压缩比例,对这两种长度范围的报文多增加了 5 种(2~10 步长为 2)前向缓冲区的长度并进行实验。长度范围在[0, 50)的报文在前项缓冲区长度达到 4 个字符的时候压缩率最低,长度范围在[50, 100)的报文在长度为 8 的时候压缩率最低。由于 LZ77 算法的思想是使用三元组来表示源文件中重复出现的字符信息,存储三元组同样需要存储空间,前向缓冲区的长度越长,意味着三元组中用于存储该长度的二进制表示位越多,维护字典的开销也就越大。只有当前向缓冲区长度与文件中前后文能匹配到的最长字符串长度大致相同时, LZ77 算法才能达到最佳的效率。
根据上述实验结果,将每个长度范围内报文的前向缓冲区设置为对应的最佳长度,然后分析搜索缓冲区长度对于数据报文压缩比例的影响,得到的实验结果如图 6 所示。
分别设置 20 种(0~100 步长为 10 与 100~1000 步长为 100)搜索缓冲区长度。搜索缓冲区长度代表着在多大的搜索空间中进行查找与匹配,理论上搜索空间长度越大,匹配到重复信息的可能性也越大,压缩效果也越好,但是从实验结果来看,每个长度范围内的数据报文都存在着最佳的搜索缓冲区长度,是因为在增加搜索缓冲区长度的同时也增加了三元组存储的成本,当压缩文件较小或者重复信息出现较为密集时,一味增加搜索缓冲区的长度并不能很好的提升压缩效果,反而会增加三元组的存储消耗。因此如何使用最小的搜索缓冲区长度来达到最高的压缩效率才是问题的关键。从实验结果可以看到,当前向缓冲区长度和搜索缓冲区长度均达到最优时,LZ77 算法对于任何一种长度范围的报文都可以达到压缩的效果,各个长度范围的报文使用 LZ77 算法能达到的最优压缩效果与对应的两个缓冲区长度如表 6 所示。
在得到每个长度范围内的报文最佳压缩比例之后,我们将 LZ77 算法与 Huffman 算法做了一个比较,结果如图 7 所示。其中,圆标线表示 Huffman 算法的压缩结果,星标线代表 LZ77 算法的压缩结果,可以看到 LZ77 算法整体优于 Huffman 编码,而且对于较短的数据报文 LZ77 算法依旧可以起到压缩效果。但在长度范围为[400,450)范围内, Huffman 压缩的效果要优于 LZ77,通过进一步分析,该范围内的报文中包含大量的连续字符‘0’,而且连续长度远远超出了设定的前向缓冲区长度 30 (最长为 140 个字符),但是报文前后文中并没有像其他报文一样出现明显重复的时间信息,重复信息分布过于集中,这种情况下 LZ77 算法相当于只对报文中某一块区域起到了压缩效果,对其他区域却起不到压缩效果。而 Huffman 算法是基于报文内部字符的统计信息进行压缩,并不注重报文的内部结构,因此针对这种情况,Huffman 算法有着更好的压缩效果。
3.3 用电信息采集远程通信报文组合压缩探究
由于数据报文的三种冗余性之间是相互独立的,单种算法无法同时消除所有的冗余,为了进一步提升报文的压缩效果,文中采用组合压缩的方式对报文冗余性进行全面消除。根据第三节的分析,报文预处理并不会对另外两种冗余性产生影响,因此将其置于组合压缩中的第一步,考虑到 Huffman 编码会暂时破坏目标文件的内容与结构,如果先进行 Huffman 编码会使得报文的模式冗余得不到有效处理,因此本文在对报文预处理之后首先使用 LZ77 编码再使用 Huffman 编码来对报文进行组合压缩,组合压缩流程如图 8 所示。
实验所用的数据是来自于一个终端节点一天之内上报的所有数据报文,通信协议是 698 协议,该数据集中统计了 2019 年 8 月 5 日某终端节点上报的 17641 条数据报文,文中对整个数据文件进行压缩处理并将各个阶段的处理结果与压缩结果进行了统计,结果如表 7 所示。
为了进一步验证组合压缩顺序对压缩结果的影响,本文交换了 LZ77 编码与 Huffman 编码顺序后从新测试,各个阶段的处理结果与压缩结果如表 8 所示。可以看到交换编码顺序后的压缩结果远远比不上交换之前的结果。
4 结束语
智能电网需要以大量用户用电数据分析为基础,随着采集终端的泛在化及采集频率的提高,各终端上报的数据量将大大增加,对数据传输与存储造成严重负担。通过压缩算法来降低数据报文的数据量,提高网络传输效率是电力行业一个亟待解决的问题。文中通过对用采系统远程通信报文的分析,从报文的帧间冗余、模式冗余以及编码冗余三个方面讨论了数据报文可以被压缩的现实基础,并有针对性的使用三种方法来消除三种冗余。结果表明, Huffman 算法可以有效消除编码冗余,但是其在数据报文较短(<50B)的情况下起不到压缩效果; LZ77 算法可以有效的消除模式冗余,当报文中含有大量重复上报的信息时,LZ77 算法相较于 Huffman 算法可以达到更好的压缩效果。文中同时对 LZ77 算法中两种缓冲区的长度对于报文压缩比例的影响做了相应探究,找到了每个长度范围内报文的最佳压缩参数。由于单种算法无法同时消除报文的三种冗余,因此通过对三种冗余各自的特性及相互之间的关系分析,设计了具有时间顺序的组合式压缩方法,得到了更好的压缩结果。通过对数据报文的压缩可以极大的缩短报文的传输时间,提高传输效率,降低存储资源消耗,在为用电企业降低成本的同时,为智能电网的多种应用提供有力的保障。——论文作者:郑国权 1,窦健 1,卢继哲 1,郄爽 1,叶方彬 2,胡浩星 3
参 考 文 献
[1] 郭志华, 王作政, 厉娜, 等. 多种通信方式在青海电网用电信息采集系统中的应用与实践[J]. 青海电力, 2016, 35(4): 14-17. Guo Zhihua, Wang Zuozheng, LI Na, et al. Application and practice of various communication modes in electricity information acquisition system of Qinghai electric power network[J]. Qinghai Electric Power, 2016, 35(4): 14-17.
[2] 王健. 探讨数据压缩在用电信息采集远程通信中的应用[J]. 通讯世界, 2017, 0(13): 181-182. Wang Jian. Exploring the application of data compression in remote communication of electricity information collection[J]. Telecom Worldm, 2017, 0(13): 181-182.
[3] 马士强, 郑常宝, 曾野, 等. 基于信号周期相似性和 LZW 编码的数据压缩方法[J]. 电测与仪表, 2014, 51(06): 95-100. Ma Shiqiang, Zheng Changbao, Zeng Ye. et al. Data Compression Based on Signal Periodic Similarity and LZW Encoding[J]. Electrical Measurement & Instrumentation, 2014, 51(06): 95-100.
[4] 于华楠, 代芳琳, 邹潇. 三相电能质量扰动信号压缩方法研究[J]. 电测与仪表, 2014, 51(23): 60-63. Yu Huanan, Dai Fanglin, Zou Xiao. Research on Three-Phase Power Quality Disturbance Signal Compression Method[J]. Electrical Measurement & Instrumentation, 2014, 51(23): 60-63.
[5] 鄢海舟, 胥布工, 李海滨, 等. 小波去噪与压缩在电厂设备中的应用[J]. 电测与仪表, 2017, 54(11): 110-115. Yan Haizhou, Xu Bugong, Li Haibin, et al. Application of wavelet denoising and compression in the equipment of power plant[J]. Electrical Measurement & Instrumentation, 2017, 54(11): 110-115.
[6] 许晓飞, 陈亮. 应用整数小波变换的 LZ77 电力数据压缩算法[J]. 西北纺织学院学报, 2018, 32(3): 337-342. Xu Xiaofei, Cheng Liang. LZ77 power data compression algorithm based on integer wavelet transform[J]. Journal of Xi’an Polytechnic University, 2018, 32(3): 337-342.
* 稍后学术顾问联系您