CN116471337A - 一种基于bwt和lzw的报文压缩与解压缩方法及设备 - Google Patents
一种基于bwt和lzw的报文压缩与解压缩方法及设备 Download PDFInfo
- Publication number
- CN116471337A CN116471337A CN202310332682.5A CN202310332682A CN116471337A CN 116471337 A CN116471337 A CN 116471337A CN 202310332682 A CN202310332682 A CN 202310332682A CN 116471337 A CN116471337 A CN 116471337A
- Authority
- CN
- China
- Prior art keywords
- message
- character
- bwt
- lzw
- compression
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000007906 compression Methods 0.000 title claims abstract description 82
- 230000006835 compression Effects 0.000 title claims abstract description 81
- 238000000034 method Methods 0.000 title claims abstract description 51
- 230000006837 decompression Effects 0.000 title claims abstract description 33
- 238000006243 chemical reaction Methods 0.000 claims abstract description 40
- 238000004422 calculation algorithm Methods 0.000 claims abstract description 27
- 238000007781 pre-processing Methods 0.000 claims abstract description 26
- 230000009466 transformation Effects 0.000 claims abstract description 17
- 230000009467 reduction Effects 0.000 claims abstract description 10
- 239000011159 matrix material Substances 0.000 claims description 35
- 238000012163 sequencing technique Methods 0.000 claims description 10
- 238000012545 processing Methods 0.000 claims description 9
- 238000011084 recovery Methods 0.000 claims description 3
- 230000001131 transforming effect Effects 0.000 claims description 3
- 238000011946 reduction process Methods 0.000 claims description 2
- 230000008569 process Effects 0.000 description 15
- 238000013144 data compression Methods 0.000 description 5
- 238000004364 calculation method Methods 0.000 description 4
- 238000013507 mapping Methods 0.000 description 4
- 230000005540 biological transmission Effects 0.000 description 3
- 238000013461 design Methods 0.000 description 3
- 238000005516 engineering process Methods 0.000 description 3
- 238000007619 statistical method Methods 0.000 description 3
- 241000234295 Musa Species 0.000 description 2
- 235000018290 Musa x paradisiaca Nutrition 0.000 description 2
- 238000013459 approach Methods 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- 230000007246 mechanism Effects 0.000 description 2
- 238000009825 accumulation Methods 0.000 description 1
- 238000004458 analytical method Methods 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 125000004122 cyclic group Chemical group 0.000 description 1
- 230000003111 delayed effect Effects 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 238000010586 diagram Methods 0.000 description 1
- 230000007774 longterm Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000005622 photoelectricity Effects 0.000 description 1
- 230000035945 sensitivity Effects 0.000 description 1
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L69/00—Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
- H04L69/04—Protocols for data compression, e.g. ROHC
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L69/00—Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
- H04L69/22—Parsing or analysis of headers
Landscapes
- Engineering & Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Compression, Expansion, Code Conversion, And Decoders (AREA)
Abstract
本发明公开了一种基于BWT和LZW的报文压缩与解压缩方法,包括以下步骤:步骤1、对待压缩的报文进行预处理;步骤2、对预处理后的报文进行BWT正变换;步骤3、对BWT正变换后的报文进行LZW算法压缩;步骤4、对压缩后的报文进行LZW解压缩还原;步骤5、对经LZW解压缩后的报文进行BWT逆变换,得到解码后的报文;步骤6,对解码后的报文添加标识信息,得到原报文。本发明通过对报文数据结构进行分析,选择了使用预处理、BWT和LZW算法组合压缩的方式,比传统压缩进一步提升压缩率。
Description
技术领域
本发明涉及计算机技术领域,具体涉及一种基于BWT和LZW的报文压缩与解压缩方法及设备。
背景技术
随着以雷达、光电、卫星等各型传感器技术的发展与普及,我们获得大量传感器实时报文数据。由于这类数据的敏感性,往往对数据传输的完整性和实时性要求较高;与此同时,为了便于技术人员事后分析研判,我们对报文数据的记录存储也有长期性需求。随着报文数据的急剧增加,这对硬件设备的传输、存储能力提出了很大的挑战,因此为缓解硬件设备压力,减少对硬件设备性能的依赖,需对报文进行压缩。
数据压缩是指在不丢失信息的前提下,按照一定的算法对报文数据进行重新组织,以减少存储空间,提高信息数据传输、存储和处理效率的一种技术方法。目前数据压缩技术已广泛应用于视频、图像等业务。数据压缩的方法很多,按数据重建的完整性,过程数据的压缩方法可分为有损压缩和无损压缩两类,对于传感器数据,必须要保证压缩、解压缩后数据信息无误,因此只能采取无损压缩的方式。
无损压缩能保留原始数据完整的信息,准确反映动态过程的原始特性,目前无损压缩技术主要分为统计方法与字典方法两大类。统计方法主要有Huffman编码、游程编码等;字典方法众多,LZ(Lemple-Ziv)系列算法包括LZ77、LZW、LZSS等是其中应用最为广泛的。在对报文压缩的实际编程过程中发现,不论是统计方法还是字典方法运行过程中压缩速度较慢,时延较长。
发明内容
为了解决上述问题,本发明提出了一种基于BWT和LZW的报文压缩与解压缩方法,包括以下步骤:
步骤1、对待压缩的报文进行预处理:
对待压缩的报文进行报文格式化,判断当前报文是否符合预处理模块预设的报文结构;若符合,则删除匹配信息后重新组合成新的报文,若不符合则保持当前报文不变,在报文的最后增加一位标识,用于标记该报文是否删除字符;
步骤2、对预处理后的报文进行BWT正变换;即对处理后的报文的字符串轮转后得到的字符矩阵进行排序和变换;
步骤3、对BWT正变换后的报文进行LZW算法压缩:提取BWT正变换后的报文数据中的不同字符,基于这些字符创建一个编译表,然后用编译表中的字符索引来替代原始数据中的相应字符,从而实现压缩;
步骤4、对压缩后的报文进行LZW解压缩还原;
步骤5、对经LZW解压缩后的报文进行BWT逆变换,得到解码后的报文;
步骤6,对解码后的报文添加标识信息,得到原报文。
进一步地,对于长度为n的报文字符串S,BWT正变换将其改序成另一个字符串L,新的字符串L按如下步骤生成:
步骤2.1、构造一个n*n的矩阵M,矩阵的第一行等于S,从第二行开始,每一行都是上一行循环左移一位所得,直到第n行,刚好完成一次对原字符串的轮转;
步骤2.2、对矩阵M的所有行按照字母表顺序进行排序,第一列的排序首字母最小,其次第二列,直到最后一列,得到矩阵M’;
步骤2.3、输出M’矩阵的第一列转置F,最后一列转置L。
进一步地,步骤3具体包括以下步骤:
步骤3.1、将字典初始化为包含所有可能的单字符,当前前缀P初始化为空;
步骤3.2、读取被压缩数据的第一个字符,作为前缀串P;
步骤3.3、读取下一个字符作为当前字符C,并判断P+C是否在当前字典内:如果“是”,则用C扩展P,即让P=P+C;如果“否”,则输出与当前前缀P相对应的码字W,将P+C存入字典,并令P=C;
步骤3.4、判断压缩数据中是否还有字符未译:如果“是”,重复步骤3.3;如果“否”,输出P的字典索引。
进一步地,步骤4具体包括以下步骤:
步骤4.1,将字典初始化为包含所有可能的单字符,先前码字pW和当前码字cW初始化为空;
步骤4.2,读入第一个的字符cW,解码输出;
步骤4.3,令pW=cW,读入下个字符cW;
步骤4.4,在字典里查找是否存在cW,如果“是”,解码cW,即输出原字符串Str(cW),令当前前缀P=Str(pW),当前字符C=Str(cW)原字符串的第一个字符,在字典里为P+C添加新的字符映射;如果“否”,令P=Str(pW),C=Str(pW)的第一个字符,在字典中为P+C添加新的字符映射,这个新的字符为cW,输出P+C;
步骤4.5,返回重复步骤4.4,直至读完所有字符。
进一步地,步骤5具体包括以下步骤:
步骤5.1、找到转换后的排序字符串,即找到矩阵M’第一列的转置F,这里只要把L进行排序就能得到;
步骤5.2、找到每个字符的前序字符数组;遍历L和F构造一个行向量T,假定字符在L中的顺序为i,L[i]在F中的位置为j,则L序列和F序列中字符对应关系的转换向量T满足T[j]=i,且保持了相同字符之间的相对次序不变,以便在原报文的恢复过程中,能对已恢复的字符查找它的前序;
步骤5.3、根据向量T,循环迭代Ti输出原始报文的每个字符;其中T0=T[0],
Ti+1=T[Ti]。
进一步地,步骤1中通过匹配这些字段报文数据的起始字符、结束字符和报文长度的数值判断判断当前报文是否符合预处理模块预设的报文结构。
进一步地,步骤6具体为:
根据解码报文的末尾标记判断是否去除信息标识,如果“是”,根据预设的报文结构还原原始报文;如果“否”则不处理,最后删除报文最后的标志位即得到原始报文,所述信息标识包括帧头和帧尾。
还提供了一种基于BWT和LZW的报文压缩与解压缩设备,所述设备基于上述方法实现,包括报文预处理模块、BWT正变换模块、LZW压缩模块、LZW解压缩模块、BWT逆变换模块和报文还原模块;
报文预处理模块,当接收到待压缩报文数据时,判断当前报文是否符合预处理模块预设的报文结构;若符合,则删除起始字符、结束字符、报文长度信息后重新组合成新的报文,若不符合则保持当前报文不变,在报文的最后增加一位标识,用于标记该报文是否删除字符;
BWT正变换模块,通过BWM矩阵形式实现BWT算法;BWT算法包括对序列循环移位,按照字母表顺序重新排列得到新的字符矩阵,使得相同的字符位置连续或相邻;
LZW压缩模块,根据LZW算法对已经进行过BWT正变换的字符串进行LZW压缩;
LZW解压缩模块,对进行过LZW压缩后的字符串进行解压缩操作;在进行LZW解压缩时,同样需要建立字典并初始化,这一环节与压缩时的字典建立及初始化完全相同;通过查找输入数据在字典中有无编码值进行解压,解压缩完成时,会生成一个和压缩环节一样的字典表,根据字典表即可解压缩成压缩前的数据;
BWT逆变换模块,实现对字符串的还原过程,通过构建索引数组T来记录L列与F列中相对元素之间的对应关系,通过L列和F列所对应的关系,依次根据L列元素找到之前的字符;
报文还原模块,根据解码报文的末尾标记判断是否去除信息标识,如果“是”,根据预设的报文结构还原原始报文;如果“否”则不处理,最后删除报文最后的标志位即得到原始报文。
本发明和现有技术相比,具有以下效果:
(1)压缩效率更高,压缩时间更短。本发明通过对报文数据结构进行分析,选择了使用预处理、BWT和LZW算法组合压缩的方式,比传统压缩进一步提升压缩率;通过预处理减少报文间的冗余,通过BWT转换得到排列更有序的报文,从而进行LZW压缩时能够获取更长的字典字符串,提高压缩率,减少压缩时间;应用在报文中有效节省了网络和存储资源,提高了计算效率。
(2)可扩展性强。本发明中所有流程模块化设计,可扩展至根据报文内容自由选择所需模块,从而提高整个流程的使用效率,进一步提升计算效率,实现压缩和复杂度的平衡。
附图说明
图1是本发明实施例方法的流程。
图2是本发明实施例提供的一种报文结构体的示意图。
图3是本发明实施例的报文预处理模块的方法流程示意图。
图4是本发明实施例的BWT正变换模块的方法流程示意图。
图5为本发明实施例的LZW压缩模块的方法流程示意图。
图6是本发明实施例的LZW解压缩模块的方法流程示意图。
图7是本发明实施例的BWT逆变换模块的方法流程示意图。
图8是本发明实施例的报文还原模块的方法流程示意图。
具体实施方式
本发明支持自由组合应用在传输和记录应用程序中。以下结合附图对本发明的一种基于BWT和LZW的报文压缩与解压缩方法及设备的具体实施方式做详细说明。
如图1所示,本申请实施例第一方面提供了基于BWT和LZW的报文压缩与解压缩方法,包括:对报文进一步压缩之前,先进行预处理去除重复发送的帧头、帧尾以及长度信息等,减少冗余;在进行LZW压缩前使用BWT正变换,该方法能使得基于处理字符串中连续重复字符的技术的编码更容易被压缩;对BWT正变换后的报文进行LZW压缩,提高字典中长字符串所占比例,从而缩短压缩时间,提高压缩效率;对压缩后的报文进行解压缩,解压缩是压缩过程的逆过程即可以实现还原出BWT正变换后的报文;根据映射关系对进行过BWT正变换的报文进行逆变换还原出预处理后的报文;将预处理后的报文与删除的帧头、帧尾以及长度信息等拼接完成完整原始数据;
更具体地,包括以下步骤:
步骤1、对待压缩的报文进行预处理:
对待压缩的报文进行报文格式化,获取该报文数据的起始字符、结束字符和报文长度等字段;通过匹配这些字段的数值判断当前报文是否符合预处理模块预设的报文结构;若符合,则删除匹配信息后重新组合成新的报文,若不符合则保持当前报文不变,在报文的最后增加一位标识,用于标记该报文是否删除字符。
步骤2、对预处理后的报文进行BWT正变换;即对处理后的报文的字符串轮转后得到的字符矩阵进行排序和变换;
对于长度为n的报文字符串S,BWT正变换将其改序成另一个字符串L,新的字符串L按如下步骤生成:
步骤2.1、构造一个n*n的矩阵M,矩阵的第一行等于S,从第二行开始,每一行都是上一行循环左移一位所得,直到第n行,刚好完成一次对原字符串的轮转;
步骤2.2、对矩阵M的所有行按照字母表顺序进行排序,第一列的排序首字母最小,其次第二列,直到最后一列,得到矩阵M’;
步骤2.3、输出M’矩阵的第一列转置F,最后一列转置L。
步骤3、对BWT正变换后的报文进行LZW算法压缩:提取BWT正变换后的报文数据中的不同字符,基于这些字符创建一个编译表,然后用编译表中的字符索引来替代原始数据中的相应字符,从而实现压缩;具体包括以下步骤:
步骤3.1、将字典初始化为包含所有可能的单字符(常用ASCII码表),当前前缀P初始化为空;
步骤3.2、读取被压缩数据的第一个字符,作为前缀串P;
步骤3.3、读取下一个字符作为当前字符C,并判断P+C是否在当前字典内:如果“是”,则用C扩展P,即让P=P+C;如果“否”,则输出与当前前缀P相对应的码字W,将P+C存入字典,并令P=C。
步骤3.4、判断压缩数据中是否还有字符未译:如果“是”,重复步骤3.3;如果“否”,输出P的字典索引。
步骤4、对压缩后的报文进行LZW解压缩还原:
步骤4.1,将字典初始化为包含所有可能的单字符,先前码字pW和当前码字cW初始化为空;
步骤4.2,读入第一个的字符cW,解码输出;
步骤4.3,令pW=cW,读入下个字符cW;
步骤4.4,在字典里查找是否存在cW,如果“是”,解码cW,即输出原字符串Str(cW),令当前前缀P=Str(pW),当前字符C=Str(cW)原字符串的第一个字符,在字典里为P+C添加新的字符映射;如果“否”,令P=Str(pW),C=Str(pW)的第一个字符,在字典中为P+C添加新的字符映射,这个新的字符为cW,输出P+C;
步骤4.5,返回重复步骤4.4,直至读完所有字符。
步骤5、对经LZW解压缩后的报文进行BWT逆变换,得到解码后的报文:
步骤5.1、找到转换后的排序字符串,即找到矩阵M’第一列的转置F,这里只要把L进行排序就能得到;
步骤5.2、找到每个字符的前序字符数组;遍历L和F构造一个行向量T,假定字符在L中的顺序为i,L[i]在F中的位置为j,则L序列和F序列中字符对应关系的转换向量T满足T[j]=i,且保持了相同字符之间的相对次序不变,以便在原报文的恢复过程中,能对已恢复的字符查找它的前序;
步骤5.3、根据向量T,循环迭代Ti输出原始报文的每个字符;其中T0=T[0],Ti+1=T[Ti]。
步骤6,对解码后的报文添加帧头帧尾标识等信息。
基于本申请实施例的第一方面,本申请实施例第二方面提供了基于BWT和LZW的报文压缩与解压缩设备,如图1所示,包括报文预处理模块、BWT正变换模块、LZW压缩模块、LZW解压缩模块、BWT逆变换模块和报文还原模块组成。
首先,本实施例的第二方面的效果的理论支撑如下:
BWT变换的最大特点是能够将相同的字符集中起来,改变文件的数据特征,若结合LZW算法,可以提升LZW算法的压缩效率。这里需要引入经验熵的概念,它表征的是单个字符或一组字符出现的机率。假设k≥0,Hk(S)就是字符串S的k阶经验熵。
假设字符串S的长度为n,字母表A={a1,…,ah},ni表示字母ai在字符串S中出现的次数,则字符串0阶经验熵可以表示为:
在S中定义一个长度为k的词w∈Ak,wS表示字符串S中词w的前面一个字符串联而成的字符串。字符串S的k阶经验熵可以表示为:
并且对于任何字符串S有Hk+1(S)≤Hk(S)。
如果有一个理想的算法A,对s字符串的任何一个部分s1s2…st有:
成立,由(1)和(2)可得:
A(BWT(S))≤|S|Hk(S) (4)
使用BWT变换后,再进行数据压缩,就可以使输出的压缩比率接近k阶经验熵。LZW算法是基于字典的数据压缩算法,整个字符串S都可以看成s1s2…st是这样t个部分词条的组合,只要LZW压缩的文本满足:
经过BWT变换后,新的字符串BWT(S)同样满足下式的特性:
LZW(BWT(S))≤|S|Hk(S) (6)
因此,理论上字符串经过BWT变换和LZW算法压缩的文件可以接近k阶经验熵,压缩率会得到提高。
基于上述理论基础,本实施例的第二方面的各模块的详细处理流程描述如下:
1、报文预处理模块
根据图2提供的报文结构,报文预处理模块对待压缩报文的处理流程如图3所示,更具体地为:通过判断起始字符Start num、结束字符End num和报文长度Length字段判断当前报文是否符合预设报文;若当前报文符合,则删除起始字符Start num、结束字符Endnum、信源信息Source等信息后重新组合成只含有正文Message和日志信息Log的新报文,若不符合则保持当前报文不变;输出处理后报文,输出的报文应包含以下两个要素,处理后报文字符串S,是否去除帧头、帧尾等信息标识B,B用于报文后续还原处理操作。
2、BWT正变换模块
BWT正变换模块主要通过BWM矩阵形式实现BWT算法,流程图如图4所示。BWT算法的主要思想是对序列循环移位,按照字母表顺序重新排列得到新的字符矩阵,使得相同的字符位置连续或相邻。待处理的序列记为S’,一般在S’序列末尾加上一个结束符“$”,构成新序列为S,定义该字符比序列S’中所有字符都要小。N为序列S的长度。下面以字符串S=banana$为例进行BWT正变换的实施说明。
步骤2.1,用字符串S所有字符循环移位,构造得到一个N*N的矩阵M(本例中字符串S共有7个字符即N=7),在矩阵M中标记每行Si(0≤i≤N-1)。
步骤2.2,比较M各行字符串,将比较结果按照所字典表次序排序得到M’矩阵,在M’矩阵中,S0是原序列,S1是第一次位移后的序列。
步骤2.3,在矩阵M’中,选取第一列的转置即为按字典表顺序排列的字符串,记为F=[$a a a b n n],最后一列的转置记为L=[a n n b$a a]。
该模块中M和M’矩阵只是变换过程中产生的中间临时变量,而M’矩阵的最后一列才是BWT(S)的最终结果。
3、LZW压缩模块
LZW压缩模块主要是根据LZW算法对已经进行过BWT正变换的字符串进行LZW压缩,其具体流程如图5所示。LZW的编码思想是不断地从字符流中提取新的字符串,通俗地理解为新“词条”,然后用“代号”也就是码字表示这个“词条”。这样一来,对字符流的编码就变成了用码字去替换字符流,生成码字流,从而达到压缩数据的目的。LZW编码是围绕称为字典的转换表来完成的。LZW编码器通过管理这个词典完成输入与输出之间的转换。LZW编码器的输入是字符流,字符流可以是用8位ASCII字符组成的字符串,而输出是用n位表示的码字流。下面以经过BWT变换的字符串F=[$a a a b n n]为例(去掉添加的符号$),给出详细的实施步骤。
步骤3.1,以ASCII码为基础字典(其中a、b、n的ASCII码分为别a=97,b=98,n=110),初始化前缀P=空。
步骤3.2,读取当前字符,有C=a,则P+C=a,因为字符串a包含在字典表中,则P=a。
步骤3.3,读取第2个字符,有C=a,则P+C=aa,该字符串不包含在字典表中,则添加P+C到字典表中,有256=aa,且同时输出P(也就是a)的索引97到编码流,然后修改P=a。
步骤3.4,读取下一个字符,有C=a,则P+C=aa,该字符串包含在字典表中,且256=aa,修改P=aa。
步骤3.5,读取下一个字符,有C=b,则P+C=aab,该字符串不包含在字典表中,则添加到字典表中,有257=aab,输出P的索引256到编码流,修改P=b。
步骤3.6,读取下一个字符,有C=n,则P+C=bn,该字符串不包含在字典表中,则添加到字典表中,有258=bn,输出P的索引98到编码流,修改P=n。
步骤3.7,读下一个字符,有C=n,则P+C=nn,该字符串不包含在字典表中,则添加到字典表中,有259=nn,输出P的索引110到编码流,修改P=n。
步骤3.8,再一次读取字符时发现字符读取完毕,即没有需要压缩的数据,则输出P的值n的索引110到编码流。
步骤3.9,编码结束,输出结果:97 256 98 110 110。
至此,完成了对字符串F的压缩,将字符串“aaabnn”压缩为了输出码流“97 25698110 110”。
4、LZW解压缩模块
LZW解压缩模块主要实现对进行过LZW压缩后的字符串进行解压缩操作,其具体流程如图6所示。在进行LZW解压缩时,同样需要建立字典并初始化,这一环节与压缩时的字典建立及初始化完全相同。但建立字典的过程相对于压缩时要延缓一部,这是因为建表所需要的未匹配字符要在解压缩的下一个输入码字后才可以获得。通过查找输入数据在字典中有无编码值进行解压,解压过程中读入的码字cW代表字典的当前码字,pW代表前缀码字。如果cW大于字典当前已包含的码字,则说明字典的索引还没有扩充到cW,只有当码字刚加入字典时就被用于编码才会出现这一情况,则下一个字符与上一个码字构成新加入字典的码字,并与后面字符共同编码为这一码字,故而这一字符与上一个码字的头个字符相同,所以将前缀pW的编码值加上pW编码值的首字符输出并添加到字典且赋值给pW。如果当前字典包含cW则输出cW的编码值,并将pW的编码值加上cW编码值的首字符添加到字典同时将cW赋值给pW。解压缩完成时,会生成一个和压缩环节一样的字典表,根据字典表即可解压缩成压缩前的数据。下面以压缩后的输出码流“97 256 98 110 110”为例来说明解压缩模块的具体实现步骤:
步骤4.1,初始化前缀码字pW、当前码字cW为空,初始化基础ASCII码字典(0~255)。
步骤4.1,读取第一个码字赋值给cW,cW=97,在基础字典,str(cW)=a,cW解码为a,pW=97。
步骤4.2,读取下一个码字,cW=256,不在基础字典,所以
str(cW)=str(pW)+str(pW).first()=aa,cW解码为aa,发现aa,添加到字典aa=256,pW=256。
步骤4.3,读取下一个码字,cW=98,在基础字典,str(cW)=b,cW解码为b,发现str(pW)+str(cW).first()=aab,可知aab=257,pW=98。
步骤4.4,读取下一个码字,cW=110,在基础字典,str(cW)=n,cW解码为n,发现str(pW)+str(cW).first()=bn,可知bn=258,pW=110。
步骤4.5,读取下一个码字,cW=110,在基础字典,str(cW)=n,cW解码为n,发现str(pW)+str(cW).first()=nn,可知nn=259,pW=110。
步骤4.6,解码结束,将码流“97 256 98 110 110”解析为字符串“aaabnn”,字典表跟压缩时字典表一致。
5、BWT逆变换模块
BWT逆变换模块主要是实现对字符串F的还原过程,想要根据F还原L只要依据的一个非常特殊的性质就是“LF Mapping”,即保证BWT逆变换可以正常执行的一个性质,其实就是L列第i次出现的字符与F列中第j次出现的该字符是对应关系,具体流程如图7所示。
下面对L和F中任两个相同字符的相对次数相同的性质给出一个一般化证明:
√假设在M的第一列中,有任意两个字符M[i,1]=M[j,1],1≤i≤j≤N,根据BWT的排序机制,他们在M’的F中的相对次数是由M[i,2:n]和M[j,2:n]的大小关系决定的;
√由M的定义可知,M[i,1]与M[i+1,n],M[j,1]与M[j+1,n]每队表示的都是字符串S的同一个字符;
√根据BWT排序机制,同样可知字符M[i,1]和M[j,1],即M[i+1,n]和M[j+1,n]在
M’的L中的相对次序又是由M[i+1,1:n-1]和M[j+1,1:n-1]的大小关系决定的;
√由M的定义可知,M[i+1,1:n-1],M[j+1,1:n-1]=M[j,2:n];
因此,在字符串S中对于任意两个相同字符的相对次序在F和L中是不变的,可以通过构建索引数组T来记录L列与F列中相对元素之间的对应关系,具体如下:
已知结果L=[a n n b$a a],将L内字符进行顺序排序得到F=[$a a a b nn],根据轮转矩阵的生成过程可知,L中的每个字符是从F列的同一行开始的字符串的前缀字符,且L中的所有字符串在F中以相同的顺序出现,但不一定在同一行中。现假设索引数组T,i为字母在L中的位置,j为字母在F中的位置,则转换变量T满足T[j]=i,其映射关系如表1所示。由表1可知,T={4,0,5,6,3,1,2}。
表1索引数组T的构建过程
以L列L[T[T0]]为起点,通过L列和F列所对应的关系,按照下列规则依次根据L列元素找到结束符$前N-1个字符(除结束符外):
S[i]=L[T[Ti]]0≤i≤N-1
其中T0=T[0],Ti+1=T[Ti]。累加i,循环迭代Ti结果如下:
i=0,T[T0]=T[4]=3,S[0]=L[3]=b;
i=1,T[T1]=T[3]=6,S[1]=L[6]=a;
i=2,T[T2]=T[6]=2,S[2]=L[2]=n;
i=3,T[T3]=T[2]=5,S[3]=L[5]=a;
i=4,T[T4]=T[5]=1,S[4]=L[1]=n;
i=5,T[T5]=T[1]=0,S[5]=L[0]=a;
i=6,T[T6]=T[0]=4,S[5]=L[4]=$;
得到S=banana$。
6、报文还原模块
对解码后的报文添加帧头、帧尾标识等信息。根据是否去除帧头、帧尾等信息标识B和图2所示的报文结构逐个字段还原起始字符Start num、结束字符End num和报文长度Length字段等字段,最后删除信息表示B还原原始报文,具体流程如图8所示。
1.一种基于BWT和LZW的报文压缩与解压缩方法,其特征在于,所述方法包括:
报文预处理模块,当接收到报文数据时,通过匹配这些字段的数值判断当前报文是都符合预处理模块预设的报文结构。若当前报文符合预设格式,则删除起始字符、结束字符、报文长度等信息后重新组合成新的报文,若不符合则保持当前报文不变,在报文的最后增加一位标识,用于标记该报文是否删除字符,以便进行后续的处理。
BWT正变换模块,以单条报文数据为基本压缩元素,对预处理后的报文进行BWT正变换,对进行变换后的报文数据进行缓存。BWT正变换模块主要通过BWM矩阵形式实现BWT算法。BWT算法的主要思想是对序列循环移位,按照字母表顺序重新排列得到新的字符矩阵,使得相同的字符位置连续或相邻。它本身不会减少数据量,但是变换后的数据更易于压缩。
LZW压缩模块,LZW压缩模块主要是根据LZW算法对已经进行过BWT正变换的字符串进行LZW压缩。LZW的编码思想是不断地从字符流中提取新的字符串,通俗地理解为新“词条”,然后用“代号”也就是码字表示这个“词条”。这样一来,对字符流的编码就变成了用码字去替换字符流,生成码字流,从而达到压缩数据的目的。LZW编码是围绕称为字典的转换表来完成的。LZW编码器通过管理这个词典完成输入与输出之间的转换。LZW编码器的输入是字符流,字符流可以是用8位ASCII字符组成的字符串,而输出是用n位表示的码字流。
LZW解压缩模块,LZW解压缩模块主要实现对进行过LZW压缩后的字符串进行解压缩操作。在进行LZW解压缩时,同样需要建立字典并初始化,这一环节与压缩时的字典建立及初始化完全相同。通过查找输入数据在字典中有无编码值进行解压,解压缩完成时,会生成一个和压缩环节一样的字典表,根据字典表即可解压缩成压缩前的数据。
BWT逆变换模块,BWT逆变换模块主要是实现对字符串的还原过程,想要根据F还原L只要依据的一个非常特殊的性质就是“LF Mapping”,即保证BWT逆变换可以正常执行的一个性质,字符串S中对于任意两个相同字符的相对次序在F和L中是不变的,可以通过构建索引数组T来记录L列与F列中相对元素之间的对应关系,过L列和F列所对应的关系,依次根据L列元素找到之前的字符。
报文还原模块,根据解码报文的末尾标记判断是否去除帧头、帧尾等信息标识,如果“是”,根据预设的报文结构还原原始报文;如果“否”则不处理,最后删除报文最后的标志位即得到原始报文。
本发明通过对报文数据结构进行分析,选择了使用预处理、BWT和LZW算法组合压缩的方式,比传统压缩进一步提升压缩率。
本发明通过预处理减少报文间的冗余,通过BWT转换得到排列更有序的报文,从而进行LZW压缩时能够获取更长的字典字符串,提高压缩率,减少压缩时间,应用在报文中能有效节省网络和存储资源,提高了计算效率;压缩及解压缩的设计实现验证了方法的高效性和可行性。
本发明中所有流程模块化设计,可扩展至根据报文内容自由选择所需模块,从而提高整个流程的使用效率,进一步提升计算效率,从而实现压缩和复杂度的平衡。
以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (8)
1.一种基于BWT和LZW的报文压缩与解压缩方法,其特征在于,包括以下步骤:
步骤1、对待压缩的报文进行预处理:
对待压缩的报文进行报文格式化,判断当前报文是否符合预处理模块预设的报文结构;若符合,则删除匹配信息后重新组合成新的报文,若不符合则保持当前报文不变,在报文的最后增加一位标识,用于标记该报文是否删除字符;
步骤2、对预处理后的报文进行BWT正变换;即对处理后的报文的字符串轮转后得到的字符矩阵进行排序和变换;
步骤3、对BWT正变换后的报文进行LZW算法压缩:提取BWT正变换后的报文数据中的不同字符,基于这些字符创建一个编译表,然后用编译表中的字符索引来替代原始数据中的相应字符,从而实现压缩;
步骤4、对压缩后的报文进行LZW解压缩还原;
步骤5、对经LZW解压缩后的报文进行BWT逆变换,得到解码后的报文;
步骤6,对解码后的报文添加标识信息,得到原报文。
2.根据权利要求1所述的基于BWT和LZW的报文压缩与解压缩方法,其特征在于,对于长度为n的报文字符串S,BWT正变换将其改序成另一个字符串L,新的字符串L按如下步骤生成:
步骤2.1、构造一个n*n的矩阵M,矩阵的第一行等于S,从第二行开始,每一行都是上一行循环左移一位所得,直到第n行,刚好完成一次对原字符串的轮转;
步骤2.2、对矩阵M的所有行按照字母表顺序进行排序,第一列的排序首字母最小,其次第二列,直到最后一列,得到矩阵M’;
步骤2.3、输出M’矩阵的第一列转置F,最后一列转置L。
3.根据权利要求2所述的基于BWT和LZW的报文压缩与解压缩方法,其特征在于,步骤3具体包括以下步骤:
步骤3.1、将字典初始化为包含所有可能的单字符,当前前缀P初始化为空;
步骤3.2、读取被压缩数据的第一个字符,作为前缀串P;
步骤3.3、读取下一个字符作为当前字符C,并判断P+C是否在当前字典内:如果
“是”,则用C扩展P,即让P=P+C;如果“否”,则输出与当前前缀P相对应的码字W,将P+C存入字典,并令P=C;
步骤3.4、判断压缩数据中是否还有字符未译:如果“是”,重复步骤3.3;如果
“否”,输出P的字典索引。
4.根据权利要求3所述的基于BWT和LZW的报文压缩与解压缩方法,其特征在于,步骤4具体包括以下步骤:
步骤4.1,将字典初始化为包含所有可能的单字符,先前码字pW和当前码字cW初始化为空;
步骤4.2,读入第一个的字符cW,解码输出;
步骤4.3,令pW=cW,读入下个字符cW;
步骤4.4,在字典里查找是否存在cW,如果“是”,解码cW,即输出原字符串Str(cW),令当前前缀P=Str(pW),当前字符C=Str(cW)原字符串的第一个字符,在字典里为P+C添加新的字符映射;如果“否”,令P=Str(pW),C=Str(pW)的第一个字符,在字典中为P+C添加新的字符映射,这个新的字符为cW,输出P+C;
步骤4.5,返回重复步骤4.4,直至读完所有字符。
5.根据权利要求4所述的基于BWT和LZW的报文压缩与解压缩方法,其特征在于,步骤5具体包括以下步骤:
步骤5.1、找到转换后的排序字符串,即找到矩阵M’第一列的转置F,这里只要把L进行排序就能得到;
步骤5.2、找到每个字符的前序字符数组;遍历L和F构造一个行向量T,假定字符在L中的顺序为i,L[i]在F中的位置为j,则L序列和F序列中字符对应关系的转换向量T满足T[j]=i,且保持了相同字符之间的相对次序不变,以便在原报文的恢复过程中,能对已恢复的字符查找它的前序;
步骤5.3、根据向量T,循环迭代Ti输出原始报文的每个字符;其中T0=T[0],Ti+1=T[Ti]。
6.根据权利要求5所述的基于BWT和LZW的报文压缩与解压缩方法,其特征在于,步骤1中通过匹配这些字段报文数据的起始字符、结束字符和报文长度的数值判断判断当前报文是否符合预处理模块预设的报文结构。
7.根据权利要求6所述的基于BWT和LZW的报文压缩与解压缩方法,其特征在于,步骤6具体为:
根据解码报文的末尾标记判断是否去除信息标识,如果“是”,根据预设的报文结构还原原始报文;如果“否”则不处理,最后删除报文最后的标志位即得到原始报文,所述信息标识包括帧头和帧尾。
8.一种基于BWT和LZW的报文压缩与解压缩设备,其特征在于,所述设备基于权利要求1-7任一权利要求实现,包括报文预处理模块、BWT正变换模块、LZW压缩模块、LZW解压缩模块、BWT逆变换模块和报文还原模块;
报文预处理模块,当接收到待压缩报文数据时,判断当前报文是否符合预处理模块预设的报文结构;若符合,则删除起始字符、结束字符、报文长度信息后重新组合成新的报文,若不符合则保持当前报文不变,在报文的最后增加一位标识,用于标记该报文是否删除字符;
BWT正变换模块,通过BWM矩阵形式实现BWT算法;BWT算法包括对序列循环移位,按照字母表顺序重新排列得到新的字符矩阵,使得相同的字符位置连续或相邻;
LZW压缩模块,根据LZW算法对已经进行过BWT正变换的字符串进行LZW压缩;
LZW解压缩模块,对进行过LZW压缩后的字符串进行解压缩操作;在进行LZW解压缩时,同样需要建立字典并初始化,这一环节与压缩时的字典建立及初始化完全相同;通过查找输入数据在字典中有无编码值进行解压,解压缩完成时,会生成一个和压缩环节一样的字典表,根据字典表即可解压缩成压缩前的数据;
BWT逆变换模块,实现对字符串的还原过程,通过构建索引数组T来记录L列与F列中相对元素之间的对应关系,通过L列和F列所对应的关系,依次根据L列元素找到之前的字符;
报文还原模块,根据解码报文的末尾标记判断是否去除信息标识,如果“是”,根据预设的报文结构还原原始报文;如果“否”则不处理,最后删除报文最后的标志位即得到原始报文。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310332682.5A CN116471337A (zh) | 2023-03-30 | 2023-03-30 | 一种基于bwt和lzw的报文压缩与解压缩方法及设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310332682.5A CN116471337A (zh) | 2023-03-30 | 2023-03-30 | 一种基于bwt和lzw的报文压缩与解压缩方法及设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116471337A true CN116471337A (zh) | 2023-07-21 |
Family
ID=87183504
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310332682.5A Pending CN116471337A (zh) | 2023-03-30 | 2023-03-30 | 一种基于bwt和lzw的报文压缩与解压缩方法及设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116471337A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117200805A (zh) * | 2023-11-07 | 2023-12-08 | 成都万创科技股份有限公司 | 一种mcu的低内存占用的压缩和解压方法及装置 |
-
2023
- 2023-03-30 CN CN202310332682.5A patent/CN116471337A/zh active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117200805A (zh) * | 2023-11-07 | 2023-12-08 | 成都万创科技股份有限公司 | 一种mcu的低内存占用的压缩和解压方法及装置 |
CN117200805B (zh) * | 2023-11-07 | 2024-02-02 | 成都万创科技股份有限公司 | 一种mcu的低内存占用的压缩和解压方法及装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108768403B (zh) | 基于lzw的无损数据压缩、解压方法及lzw编码器、解码器 | |
JP3273119B2 (ja) | データ圧縮・伸長装置 | |
CN110021369B (zh) | 基因测序数据压缩解压方法、系统及计算机可读介质 | |
CN108810553B (zh) | 一种基于稀疏化处理的移动节点监测数据序列压缩方法 | |
JPS6356726B2 (zh) | ||
CN116471337A (zh) | 一种基于bwt和lzw的报文压缩与解压缩方法及设备 | |
JP3241788B2 (ja) | データ圧縮方式 | |
CN110602498B (zh) | 一种自适应有限状态熵编码的方法 | |
KR100906041B1 (ko) | 폰트 압축 및 검색 방법 및 장치 | |
Yang et al. | Universal lossless data compression with side information by using a conditional MPM grammar transform | |
Jacob et al. | Comparative analysis of lossless text compression techniques | |
CN104682966A (zh) | 列表数据的无损压缩方法 | |
Ghuge | Map and Trie based Compression Algorithm for Data Transmission | |
JP3241787B2 (ja) | データ圧縮方式 | |
CN102891730B (zh) | 基于bcd码卫星短报文的编码方法和装置 | |
US9843341B1 (en) | Methods and devices for sparse data compression through dimension coding | |
Kaur et al. | Lossless text data compression using modified Huffman Coding-A review | |
Tsai et al. | An Improved LZW Algorithm for Large Data Size and Low Bitwidth per Code | |
Prasetyo et al. | Comparison of Text Data Compression Using Run Length Encoding, Arithmetic Encoding, Punctured Elias Code and Goldbach Code | |
CN117465471A (zh) | 一种针对文本文件的无损压缩系统及其压缩方法 | |
JPH05152971A (ja) | データ圧縮・復元方法 | |
Zia et al. | Two-level dictionary-based text compression scheme | |
Sidhu et al. | An Advanced Text Encryption & Compression System Based on ASCII Values & Arithmetic Encoding to Improve Data Security | |
JPH0644038A (ja) | データ圧縮方法、データ復元方法、データ圧縮/復元方法 | |
JPH0738447A (ja) | ハフマン符号の符号化でのランレングス抽出方法、ハフマン符号変換方法およびmh符号化処理方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |