用电信息采集系统中远程通信报文的组合压缩方法
技术领域
本发明涉及数据传输技术领域,更具体地说,涉及一种用电信息采集系统中远程通信报文的组合压缩方法。
背景技术
在智能电网中,用电信息采集系统(以下简称用采系统)对分析用户用电行为以及电网运行状态具有重要意义。用电信息监测最重要的是实现无间断的用电信息采集与远程通信,远程通信指用电信息采集系统中采集终端(下文称终端)与采集主站(下文称主站)之间的数据传输。现阶段实际在运的用采系统的远程通信,多采用GPRS/CDMA、专用230MHz等无线通信方式进行数据传输,高强度的监测意味着采集系统会对下属的终端节点进行全天候的数据采集与监控,用电信息的高频率上报会产生大量的数据积压,从而对无线传输造成严重的通信负荷。
数据压缩技术可对数据量进行有效的压缩,以减少存储空间,提高信息数据传输、存储和处理的效率。目前数据压缩技术已经广泛应用于视频、图像、语音等业务。在电力系统中,各类压缩算法的应用也已经有了先例,比如,可以选用合适的小波基将电力数据变换到小波域,然后对高频和低频部分分别进行编码以实现高效压缩;再比如利用电力系统波形数据的周期性、有界性和冗余性特点,在DSP平台上实现波形数据的高效压缩。然而,上述方法都是针对理论上的单一变量的连续测量数据或者波形数据进行压缩,而在实际用电信息采集与通信过程中,传输的不仅有单一的连续电压值或者电流值,还需加入召测、控制等协议信息以组成封装好的数据报文。因此,研究适合实际应用的用电信息采集系统远程通信报文的压缩方法以降低海量报文数据中存在的冗余信息,最大程度地降低数据传输与存储压力已经成为电力行业的迫切需要。
发明内容
为解决上述技术问题,本发明提供一种用电信息采集系统中远程通信报文的组合压缩方法。
为实现上述目的,本发明所采用的具体技术方案如下:
一种用电信息采集系统中远程通信报文的组合压缩方法,包括以下步骤:
S1:用电数据采集终端在采集到用电数据后按照预设的通信协议对该用电数据进行编码得到固定格式的用电数据报文;
S2:去除同一用电数据采集终端获取的多帧用电数据报文之间重复的校验信息得到第一压缩数据;
S3:针对所述第一压缩数据利用LZ77编码算法进行编码得到第二压缩数据;
S4:针对所述第二压缩数据利用Huffman编码算法进行编码得到第三压缩数据;
S5:通过公网传输系统将所述第三压缩数据发送给主站;
S6:所述主站在接收到所述第三压缩数据后,利用Huffman解码算法进行解码恢复得到所述第二压缩数据;
S7:针对所述第二压缩数据,利用LZ77解码算法进行解码恢复得到所述第一压缩数据;
S8:在所述第一压缩数据中添加对应的校验信息恢复出原始的用电数据报文。
可选的,步骤S1之后还包括:
所述用电数据采集终端将编码后的多条数据报文集中存储于本地。
可选的,步骤S2包括:
对于同一用电数据采集终端获取到的N帧用电数据报文,去除N-1帧用电数据报文中的帧头标志符信息、帧尾标志符信息以及终端地址信息中的至少一种,N为大于等于2的整数;
步骤S8包括:
在所述第一压缩数据中添加对应的帧头标志符信息、帧尾标志符信息以及终端地址信息中的至少一种以恢复出原始的用电数据报文。
可选的,步骤S2包括:
对于同一用电数据采集终端获取到的N帧用电数据报文,同时去除N-1帧用电数据报文中的帧头标志符信息、帧尾标志符信息以及终端地址信息。
可选的,步骤S3包括:
S31:针对每一第一压缩数据,设置LZ77编码初始位置为第一压缩数据输入流的开始;
S32:判断当前的搜索缓冲区窗口中是否可以查找到与当前的前向缓冲区窗口中的字符串相匹配的最长字符串,如是,转至S33,否则,转至S34;所述搜索缓冲区窗口用于存储已经压缩的字符,所述前向缓冲区窗口用于存储待压缩的字符;
S33:输出三元数据组(p,l,c),所述搜索缓冲区窗口和所述前向缓冲区窗口均向后移动l+1个单位后转至S35;p表示搜索缓冲区窗口的起始端至其最长匹配字符串首字符的前一个位置的偏移量,l表示最长匹配字符串的长度,c表示最长匹配结束时前向缓冲区的下一字符;
S34:输出当前的前向缓冲区中的首字符,所述搜索缓冲区窗口和所述前向缓冲区窗口向后移动一个单位后转至S35;
S35:判断当前的前向缓冲区窗口是否为空,如是,转至S36,否则转至S32;
S36:根据输出顺序将所有的输出数据进行拼接得到第二压缩数据;
步骤S7包括:
S71:判断第二压缩数据中当前的待解数据是否为三元数据组(p,l,c),如否,转至S72,如是,转至S73;
S72:将当前待解码的单字符拷贝进搜索缓冲区窗口中,并将搜索缓冲区窗口向后移动1个单位;
S73:根据三元组数据(p,l,c)在当前的搜索缓冲区窗口中查找到相应的偏移量p,同时找到长度为l的最长匹配字符串,将该最长匹配字符串拼接在当前已解压出的字符后面,并将c拼接在该最长匹配字符串后面,并将搜索缓冲区窗口向后移动l+1个单位;
S75:判断当前待解压的第二压缩数据是否解压完毕,如是,转至S76,否则,转至S71;
S76:解压完毕得到第一压缩数据。
可选的,所述第一压缩数据的报文长度范围、搜索缓冲区窗口的长度以及前向缓冲区窗口的长度三者之间满足以下关系中的至少一种:
当所述第一压缩数据的报文长度字节范围为[0,50)时,所述搜索缓冲区窗口的长度为30个字符,所述前向缓冲区窗口的长度为4个字符;
当所述第一压缩数据的报文长度字节范围为[50,100)时,所述搜索缓冲区窗口的长度为30个字符,所述前向缓冲区窗口的长度为8个字符;
当所述第一压缩数据的报文长度字节范围为[100,150)时,所述搜索缓冲区窗口的长度为90个字符,所述前向缓冲区窗口的长度为30个字符;
当所述第一压缩数据的报文长度字节范围为[150,200)时,所述搜索缓冲区窗口的长度为100个字符,所述前向缓冲区窗口的长度为30个字符;
当所述第一压缩数据的报文长度字节范围为[200,250)时,所述搜索缓冲区窗口的长度为60个字符,所述前向缓冲区窗口的长度为30个字符;
当所述第一压缩数据的报文长度字节范围为[250,300)时,所述搜索缓冲区窗口的长度为30个字符,所述前向缓冲区窗口的长度为30个字符;
当所述第一压缩数据的报文长度字节范围为[300,350)时,所述搜索缓冲区窗口的长度为200个字符,所述前向缓冲区窗口的长度为30个字符;
当所述第一压缩数据的报文长度字节范围为[350,400)时,所述搜索缓冲区窗口的长度为200个字符,所述前向缓冲区窗口的长度为30个字符;
当所述第一压缩数据的报文长度字节范围为[400,450)时,所述搜索缓冲区窗口的长度为500个字符,所述前向缓冲区窗口的长度为30个字符;
当所述第一压缩数据的报文长度字节范围为[450,500)时,所述搜索缓冲区窗口的长度为500个字符,所述前向缓冲区窗口的长度为30个字符。
可选的,步骤S4包括
S41:统计所述第二压缩数据中各个字符出现的次数得到权值集合{W1,W2,…Wn},Wj表示第j个字符出现的次数,1≤j≤n;
S42:构造n棵只有一个根节点的二叉树,从而得到一个二叉树集合F={T1,T2,…Tn};
S43:从当前的集合F中选取根节点的权值最小的两棵二叉树分别作为左、右子树构造一棵新的二叉树,并将左、右子树根节点的权值之和作为这棵新的二叉树的根节点;
S44:从集合F中删除该左、右子树的两棵二叉树,并将新建立的二叉树加入到F中;
S45:重复步骤S43和步骤S44直至集合F中只剩下一棵二叉树从而得到Huffman树;
S46:将Huffman树编码为比特字符串,并将该比特字符串发送给主站以供主站进行解码;
S47:利用构建的Huffman树对所述第二压缩数据进行编码得到第三压缩数据;
步骤S6包括:
S61:接收Huffman树对应的比特字符串,并进行解码恢复得到Huffman树;
S62:利用该Huffman树对接收到的第三压缩数据进行解码恢复得到第二压缩数据。
本发明提供的用电信息采集系统中远程通信报文的组合压缩方法首先通过去重预处理消除了帧间冗余,其次通过LZ77算法消除了模式冗余,最后通过Huffman算法消除了编码冗余,解决了单种算法无法同时消除报文的三种冗余的问题,通过本发明公开的方案可以得到更好的压缩结果。数据报文的压缩可以极大的缩短报文的传输时间,提高传输效率,降低存储资源消耗,在为用电企业降低成本的同时,为智能电网的多种应用提供了有力的保障。
附图说明
下面将结合附图及实施例对本发明作进一步说明,附图中:
图1为本发明实施例提供的用电信息采集系统中远程通信报文的组合压缩方法的流程示意图;
图2为通信协议中报文结构的示意图;
图3为各个长度范围内数据报文的平均压缩比例随前向缓冲区长度变化的曲线图;
图4为各个长度范围内数据报文的平均压缩比例随搜索缓冲区长度变化的曲线图;
图5为本发明实施例提供的组合压缩流程图。
具体实施方式
为了使本发明要解决的技术问题、技术方案和优点更加清楚,下面将结合附图及具体实施例进行详细描述,应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
用电信息采集系统(以下简称用采系统)包括用电数据采集终端、远程传输系统和采集主站三大部分,如果大量的用电数据通过终端上报给主站将会对公网的传输造成巨大的压力,现阶段实际在运的用采系统的远程通信,多采用GPRS/CDMA、专用230MHz等无线通信方式进行数据传输,高强度的监测意味着采集系统会对下属的终端节点进行全天候的数据采集与监控,用电信息的高频率上报会产生大量的数据积压,从而对无线传输造成严重的通信负荷。而数据压缩技术可对数据量进行有效的压缩,以减少存储空间,提高信息数据传输、存储和处理的效率。目前数据压缩技术已经广泛应用于视频、图像、语音等业务。
因此,本实施例提供了一种用电信息采集系统中远程通信报文的组合压缩方法,以解决公网传输压力大的问题。
由于用采系统远程通信报文通信协议包含控制、互操作等信息,在压缩和恢复的过程中不能对报文结构与内容的完整性产生影响。因此需要采用无损压缩方式对报文进行处理。请参见图1所示,本实施例提供的用电信息采集系统中远程通信报文的组合压缩方法包括以下步骤:
S1:用电数据采集终端在采集到用电数据后按照预设的通信协议对该用电数据进行编码得到固定格式的用电数据报文。
主站与采集终端进行数据传输需要遵循一定的通信协议,通信协议约定了通讯双方在接收报文时的数据格式、编码方法以及传输规则。主站与终端的各种交互及上报信息均以帧为基本组成单位,由多个字节严格按照协议规定顺序排列组成,比如,图2中的国家电网公司Q/GDW 1376.1-2013协议(下文简称376.1协议)中的报文就是以帧为基本组成单位。
S2:去除同一用电数据采集终端获取的多帧用电数据报文之间重复的校验信息得到第一压缩数据。
由于步骤S1中经编码得到的用电数据报文结构之间存在一定的相似性,也即可以理解为其存在帧间冗余,步骤S2中进行去重预处理便可以消除帧间冗余。
具体的,在步骤S2中,对于同一用电数据采集终端获取到的N帧用电数据报文,去除N-1帧用电数据报文中的帧头标志符信息、帧尾标志符信息以及终端地址信息中的至少一种,N为大于等于2的整数;那么对应的,在下面的S8中,就应当在第一压缩数据中添加对应的帧头标志符信息、帧尾标志符信息以及终端地址信息中的至少一种以恢复出原始的用电数据报文。
为了提高压缩比,对于同一用电数据采集终端获取到的N帧用电数据报文,可以同时去除N-1帧用电数据报文中的帧头标志符信息、帧尾标志符信息以及终端地址信息。
帧间冗余体现在数据报文之间结构的相似性上,由于通信协议严格规定了数据报文各个域的组成方式,因此一段时间之内从某个固定的采集终端上报给主站的所有报文中必然有一些信息(如终端地址信息)是相同的,具体的可以参见表1所示,表1是采用国家电网DL/T 698.45-2017协议(下文简称698协议)时,一个固定的终端节点在一天内发出的所有通信报文的一部分。
表1
上述内容中提及的376、698等通信协议实现了对用户数据的封装,通过加入帧头、帧尾、地址、长度等校验信息可以对数据报文进行有效的差错控制,因此也可以在近距离通信中直接应用于链路层。但当通过远程传输系统来传输时,报文实际上是作为远程传输系统通信协议应用层载荷加载到通信协议栈中,由远程通信协议栈负责可靠传输。因此重复发送地址、帧头、帧尾等校验信息就失去了纠错意义,对于信息存储与传输是冗余的,可以适当减少发送次数。根据698协议规定,可将每帧报文写成通用的格式:68+长度校验+控制码+地址+帧头校验码+链路用户数据+校验码+16,由于图3中的报文来自于同一终端节点,因此每帧数据用来表示地址的字节都相同,上述数据中终端地址表示位是从第5个字节开始,内容为05 84 23 00 00 20 15 00,一共8个字节,同时,帧头与帧尾标识符对于每帧数据报文都是固有的并且出现的位置固定,因此可以在传输过程中忽略。
S3:针对第一压缩数据利用LZ77编码算法进行编码得到第二压缩数据。模式冗余的具体报文表现如表2所示
表2
由于通信协议对于数据的编码方式是固定的,所以报文中重复上报的信息,比如时间信息会被编码成许多重复的字符串,也即模式冗余,为消除模式冗余,步骤S3中对第一压缩数据利用LZ77算法进行编码得到第二压缩数据。
S4:针对第二压缩数据利用Huffman编码算法进行编码得到第三压缩数据。
每帧数据报文中各个域的值由上报节点当前物理状态直接决定,因此编码之后的报文在信息学上也存在着冗余,本实施例中称为编码冗余。编码冗余可用信息论中“信息熵”的概念来说明。每条数据的“熵”值越小,代表该数据包含的信息量越少。而信息量少,证明可以使用更少的二进制位来表示该条报文。具体来说,数据报文由不同字符组成,而不同字符在报文中出现的概率不同,根据信息论中对熵的定义,假设报文中包含某一字符S,对应出现的概率为P,则S的信息熵E定义为:E=-log2(P)
式中log2(P)表示以2为底P的对数,单位为bit。由上式可以看出,当符号出现的概率越大,熵值E就越小,即当字符S出现的次数越多,S所包含的信息量就越少。
下面以具体的数据来说明。表3为一个376.1数据报文实例。
表3
对报文中字符次数、出现概率以及对应的熵值做出了统计,结果如表4所示。
表4
可见,理论上完整表示该帧报文只需要494个二进制位,而实际上在传输过程中却需要花费87*8=694个二进制位来表示该帧报文,因此从报文的整体内容来看,可以通过降低高频字符的二进制表示位数来对报文进行压缩。
步骤S4中采用Huffman编码算法进行编码实现对第二压缩数据的压缩,从而解决了编码冗余的问题。
在步骤S4之后,用电数据采集终端可以将处理得到的第三压缩数据存储在本地,由于数据的压缩程度高,节省了存储空间。
S5:通过公网传输系统将第三压缩数据发送给主站。
S6:主站在接收到第三压缩数据后,利用Huffman解码算法进行解码恢复得到第二压缩数据。
S7:针对第二压缩数据,利用LZ77解码算法进行解码恢复得到第一压缩数据。
S8:在第一压缩数据中添加对应的校验信息恢复出原始的用电数据报文。
需要说明的是,当报文数据来自于同一个采集终端时,帧头、帧尾标识以及经过通信协议编码后的地址信息都相同。当通过远程传输进行通信时,去除重复信息对于报文的存储与传输没有影响。因此在对报文进一步压缩之前,可以先进行预处理,去除重复发送的帧头、帧尾以及地址信息,可以消除帧间冗余。由于模式冗余一般出现在报文的链路用户数据区域,预处理操作并不会影响到这个区域的数据,而编码冗余只与报文内部字符出现的频率相关,只要报文内部每个字符出现的频率不符合均匀分布,编码冗余是一定存在的,所以对报文进行预处理操作并不会影响报文的其他冗余性。因此,通过本发明制定的压缩方案,可以在不影响各个冗余独立性的前提下对三种冗余进行全面消除,以此最大限度的缩短报文长度。
下面对步骤S3进行具体说明,包括以下子步骤:
S31:针对每一第一压缩数据,设置LZ77编码初始位置为第一压缩数据输入流的开始;
S32:判断当前的搜索缓冲区窗口中是否可以查找到与当前的前向缓冲区窗口中的字符串相匹配的最长字符串,如是,转至S33,否则,转至S34;所述搜索缓冲区窗口用于存储已经压缩的字符,所述前向缓冲区窗口用于存储待压缩的字符;
S33:输出三元数据组(p,l,c),所述搜索缓冲区窗口和所述前向缓冲区窗口均向后移动l+1个单位后转至S35;p表示搜索缓冲区窗口的起始端至其最长匹配字符串首字符的前一个位置的偏移量,l表示最长匹配字符串的长度,c表示最长匹配结束时前向缓冲区的下一字符;
S34:输出当前的前向缓冲区中的首字符,所述搜索缓冲区窗口和所述前向缓冲区窗口向后移动一个单位后转至S35;
S35:判断当前的前向缓冲区窗口是否为空,如是,转至S36,否则转至S32;
S36:根据输出顺序将所有的输出数据进行拼接得到第二压缩数据;
此时对应的步骤S7包括:
S71:判断第二压缩数据中当前的待解数据是否为三元数据组(p,l,c),如否,转至S72,如是,转至S73;
S72:将当前待解码的单字符拷贝进搜索缓冲区窗口中,并将搜索缓冲区窗口向后移动1个单位;
S73:根据三元组数据(p,l,c)在当前的搜索缓冲区窗口中查找到相应的偏移量p,同时找到长度为l的最长匹配字符串,将该最长匹配字符串拼接在当前已解压出的字符后面,并将c拼接在该最长匹配字符串后面,并将搜索缓冲区窗口向后移动l+1个单位;
S75:判断当前待解压的第二压缩数据是否解压完毕,如是,转至S76,否则,转至S71;
S76:解压完毕得到第一压缩数据。
本实施例中的步骤S4包括
S41:统计第二压缩数据中各个字符出现的次数得到权值集合{W1,W2,…Wn},Wj表示第j个字符出现的次数,1≤j≤n;
S42:构造n棵只有一个根节点的二叉树,从而得到一个二叉树集合F={T1,T2,…Tn};
S43:从当前的集合F中选取根节点的权值最小的两棵二叉树分别作为左、右子树构造一棵新的二叉树,并将左、右子树根节点的权值之和作为这棵新的二叉树的根节点;
S44:从集合F中删除该左、右子树的两棵二叉树,并将新建立的二叉树加入到F中;
S45:重复步骤S43和步骤S44直至集合F中只剩下一棵二叉树从而得到Huffman树;
S46:将Huffman树编码为比特字符串,并将该比特字符串发送给主站以供主站进行解码;
S47:利用构建的Huffman树对所述第二压缩数据进行编码得到第三压缩数据;
此时对应的步骤S6包括:
S61:接收Huffman树对应的比特字符串,并进行解码恢复得到Huffman树;
S62:利用该Huffman树对接收到的第三压缩数据进行解码恢复得到第二压缩数据。
为验证本实施例中所提供的单种算法对于消除报文冗余的有效性,在真实的用电采集系统采集的数据上进行了测试。实验过程中使用的数据来自国家电网某省公司主站真实采集的符合376.1协议专变上行数据报文,共含有10000条数据报文。首先对所有数据报文的长度做了统计,发现大量数据报文集中在[0,50),[50,100)和[250,300)这三个长度区间。
在得到整体报文长度分布之后,使用Huffman算法对每一个长度范围内的所有数据报文进行压缩并统计平均压缩比例,得到的结果如表5所示。
表5
可以看到,Huffman算法对于长度范围处在[450,500)范围内的报文有着最好的压缩效果,而对于长度范围为[0,50)的数据并没有起到很好的压缩效果,原因在于Huffman编码需要在编码的同时写入字符的统计信息,对于长度很短的报文来说,存储字符统计信息所需要的存储空间与原有报文所占用的存储空间基本相同,这在很大程度上会影响Huffman编码的效果。而除了[0,50)长度范围内的短报文,其他所有长度范围内的报文都能被有效压缩。
各个长度范围内数据报文的平均压缩比例随前向缓冲区长度变化的曲线如图3所示。
分别设置10种(10~100,步长为10)不同的前向缓冲区长度进行试验,从实验结果可以明显看出,除了长度范围在[0,50)和[50,100)的数据报文的压缩比例呈现一个整体上升的趋势之外,其他几个长度范围的数据报文的最佳压缩比例对应的前向缓冲区长度均为30个字符。为了验证前两种长度范围的报文在前向缓冲区长度为10个字符时是否已经达到了最佳的压缩比例,对这两种长度范围的报文多增加了5种(2~10步长为2)前向缓冲区的长度并进行实验。长度范围在[0,50)的报文在前项缓冲区长度达到4个字符的时候压缩率最低,长度范围在[50,100)的报文在长度为8的时候压缩率最低。由于LZ77算法的思想是使用三元组来表示源文件中重复出现的字符信息,存储三元组同样需要存储空间,前向缓冲区的长度越长,意味着三元组中用于存储该长度的二进制表示位越多,维护字典的开销也就越大。只有当前向缓冲区长度与文件中前后文能匹配到的最长字符串长度大致相同时,LZ77算法才能达到最佳的效率。
根据上述验证结果,将每个长度范围内报文的前向缓冲区设置为对应的最佳长度,然后分析搜索缓冲区长度对于数据报文压缩比例的影响,得到的结果如图4所示,图4中的X表示搜索缓冲区窗口的长度,Y表示前向缓冲区窗口的长度。
分别设置20种(0~100步长为10与100~1000步长为100)搜索缓冲区长度。搜索缓冲区长度代表着在多大的搜索空间中进行查找与匹配,理论上搜索空间长度越大,匹配到重复信息的可能性也越大,压缩效果也越好,但是从实验结果来看,每个长度范围内的数据报文都存在着最佳的搜索缓冲区长度,是因为在增加搜索缓冲区长度的同时也增加了三元组存储的成本,当压缩文件较小或者重复信息出现较为密集时,一味增加搜索缓冲区的长度并不能很好的提升压缩效果,反而会增加三元组的存储消耗。因此如何使用最小的搜索缓冲区长度来达到最高的压缩效率才是问题的关键。从实验结果可以看到,当前向缓冲区长度和搜索缓冲区长度均达到最优时,LZ77算法对于任何一种长度范围的报文都可以达到压缩的效果,各个长度范围的报文使用LZ77算法能达到的最优压缩效果与对应的两个缓冲区长度如表6所示。
表6
综上,在进行LZ77编码和解码的过程中,优选的,第一压缩数据的报文长度范围、搜索缓冲区窗口的长度以及前向缓冲区窗口的长度三者之间满足以下关系中的至少一种:
当第一压缩数据的报文长度字节范围为[0,50)时,搜索缓冲区窗口的长度为30个字符,前向缓冲区窗口的长度为4个字符;
当第一压缩数据的报文长度字节范围为[50,100)时,搜索缓冲区窗口的长度为30个字符,前向缓冲区窗口的长度为8个字符;
当第一压缩数据的报文长度字节范围为[100,150)时,搜索缓冲区窗口的长度为90个字符,前向缓冲区窗口的长度为30个字符;
当第一压缩数据的报文长度字节范围为[150,200)时,搜索缓冲区窗口的长度为100个字符,前向缓冲区窗口的长度为30个字符;
当第一压缩数据的报文长度字节范围为[200,250)时,搜索缓冲区窗口的长度为60个字符,前向缓冲区窗口的长度为30个字符;
当第一压缩数据的报文长度字节范围为[250,300)时,搜索缓冲区窗口的长度为30个字符,前向缓冲区窗口的长度为30个字符;
当第一压缩数据的报文长度字节范围为[300,350)时,搜索缓冲区窗口的长度为200个字符,前向缓冲区窗口的长度为30个字符;
当第一压缩数据的报文长度字节范围为[350,400)时,搜索缓冲区窗口的长度为200个字符,前向缓冲区窗口的长度为30个字符;
当第一压缩数据的报文长度字节范围为[400,450)时,搜索缓冲区窗口的长度为500个字符,前向缓冲区窗口的长度为30个字符;
当第一压缩数据的报文长度字节范围为[450,500)时,搜索缓冲区窗口的长度为500个字符,前向缓冲区窗口的长度为30个字符。
由于数据报文的三种冗余性之间是相互独立的,单种算法无法同时消除所有的冗余,为了进一步提升报文的压缩效果,本发明实施例采用组合压缩的方式对报文冗余性进行全面消除。报文预处理并不会对另外两种冗余性产生影响,因此将其置于组合压缩中的第一步,Huffman编码会暂时破坏目标文件的内容与结构,如果先进行Huffman编码会使得报文的模式冗余得不到有效处理,因此本实施例在对报文预处理之后首先使用LZ77编码再使用Huffman编码来对报文进行组合压缩,组合压缩流程如图5所示。
实验所用的数据是来自于一个终端节点一天之内上报的所有数据报文,通信协议是698协议,某终端节点上报的17641条数据报文,本文对整个数据文件进行压缩处理并将各个阶段的处理结果与压缩结果进行了统计,结果如表7所示。
表7
为了进一步验证组合压缩顺序对压缩结果的影响,交换了LZ77编码与Huffman编码顺序后重新测试,各个阶段的处理结果与压缩结果如表8所示。
表8
可以看到交换编码顺序后的压缩结果远远比不上交换之前的结果。
智能电网需要以大量用户用电数据分析为基础,随着采集终端的泛在化及采集频率的提高,各终端上报的数据量将大大增加,对数据传输与存储造成严重负担。通过压缩算法来降低数据报文的数据量,提高网络传输效率是电力行业一个亟待解决的问题。本发明实施例有针对性的使用三种方法来消除三种冗余。结果表明,Huffman算法可以有效消除编码冗余,LZ77算法可以有效的消除模式冗余,当报文中含有大量重复上报的信息时,LZ77算法相较于Huffman算法可以达到更好的压缩效果,因此通过对三种冗余各自的特性及相互之间的关系分析,设计了具有时间顺序的组合式压缩方法,得到了更好的压缩结果。通过对数据报文的压缩可以极大的缩短报文的传输时间,提高传输效率,降低存储资源消耗,在为用电企业降低成本的同时,为智能电网的多种应用提供有力的保障。
上面结合附图对本发明的实施例进行了描述,但是本发明并不局限于上述的具体实施方式,上述的具体实施方式仅仅是示意性的,而不是限制性的,本领域的普通技术人员在本发明的启示下,在不脱离本发明宗旨和权利要求所保护的范围情况下,还可做出很多形式,这些均属于本发明的保护之内。