CN115189696A - 一种基于Huffman解码表的硬件压缩解压方法 - Google Patents
一种基于Huffman解码表的硬件压缩解压方法 Download PDFInfo
- Publication number
- CN115189696A CN115189696A CN202210914667.7A CN202210914667A CN115189696A CN 115189696 A CN115189696 A CN 115189696A CN 202210914667 A CN202210914667 A CN 202210914667A CN 115189696 A CN115189696 A CN 115189696A
- Authority
- CN
- China
- Prior art keywords
- length
- matching
- data
- code word
- address
- 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
Images
Classifications
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M7/00—Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
- H03M7/30—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
- H03M7/3084—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction using adaptive string matching, e.g. the Lempel-Ziv method
- H03M7/3086—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction using adaptive string matching, e.g. the Lempel-Ziv method employing a sliding window, e.g. LZ77
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M7/00—Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
- H03M7/30—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
- H03M7/40—Conversion to or from variable length codes, e.g. Shannon-Fano code, Huffman code, Morse code
- H03M7/42—Conversion to or from variable length codes, e.g. Shannon-Fano code, Huffman code, Morse code using table look-up for the coding or decoding process, e.g. using read-only memory
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Compression, Expansion, Code Conversion, And Decoders (AREA)
Abstract
本发明公开了一种基于Huffman解码表的硬件压缩解压方法,原始数据首先在PC端进行压缩,在压缩过程中会动态生成Huffman解码表和压缩后的数据,将这两部分烧录至硬件存储器件中;解压过程在嵌入式系统中进行,嵌入式系统会发出相应的指令和地址到硬件解压模块,解压模块会针对相应指令进行寻址并查找Huffman解码表对压缩后的数据进行解压,解压后的数据送入嵌入式系统。本发明对开源的Gzip压缩代码进行改进,使其在压缩过程中生成适用于本发明硬件解压模块的动态Huffman解码表,并按照相应格式存放,从而在解压过程中直接使用该解码表,很大程度上提高了解压效率和准确率。
Description
技术领域
本发明属于硬件数据处理领域,特别涉及一种基于Huffman解码表的硬件压缩解压方法。
背景技术
在一些嵌入式系统中,系统的工作或系统间的通信都需要大量的数据支持,数据量的大小和系统间通信的传输速度往往会影响到系统的工作效率,因此数据压缩可以提高系统的工作效率。众所周知,现有的众多压缩方式都是采用的Deflate压缩算法的思想,而Deflate压缩算法中最关键的部分在于LZ77压缩和Huffman压缩,通过改进这两个部分会大大提高压缩效率。LZ77压缩算法是一种基于字典查找的压缩算法,在一段数据中会存在大量重复出现的字符串,LZ77压缩会将这些重复的字符串放入一个Hash链表之中,后续出现相同的字符串时会查找Hash链表进行匹配,从而消除大量重复字符串,采用匹配距离加匹配长度的方式来代替这些重复的字符串,达到一个压缩的效果,所以建立一个高效的Hash链表就可以提升LZ77的压缩比。经过LZ77压缩后的数据相比原始数据已经达到了一个很好的压缩效果,但是仍然可以进一步压缩,Deflate压缩算法采用Huffman压缩对LZ77压缩后的数据进行进一步压缩,这里涉及到动态编码和静态编码的思想,静态编码就是采用Gzip自己预先定义好的一组或多组编码进行压缩,解压缩的时候也用这套编码,但是针对不同的原始数据采用相同的压缩编码会出现压缩比不同且不高的情况,并且静态编码会对某些未出现的字符、匹配长度或匹配距离进行编码,浪费了大量资源,若将其存储在硬件存储器件中,还会占用许多额外的存储空间,从而影响了压缩和解压缩的效率;而动态编码就是针对本次LZ77压缩的结果统计各字符或匹配长度和距离出现的频率进行重新编码,对出现频率高的数据进行码长较短的编码,对出现频率低的数据进行码长较长的编码,并且不会对未出现的字符、匹配长度或匹配距离进行编码,节省了一定的资源,不同的原始数据生成的Huffman tree不同,利用动态生成的Huffman tree对LZ77压缩后的数据进行进一步编码,生成最终的压缩结果。无疑是最适用的编码,并且压缩效果较好。
现有技术中一种软件压缩硬件解压的方式,该方案的压缩方式是PC端采用软件压缩,在压缩过程中保证数据的准确性。首先原始数据通过LZ77压缩,然后采用静态Huffman压缩方法将数据进一步压缩,利用提前预定义好的Huffman编码对LZ77压缩后的结果进行编码。压缩完成后将压缩后的数据烧录至硬件系统中的存储器件如flash等。至此完成了数据的压缩与存储。而解压过程是采用硬件解压,将压缩后的数据首先通过静态Huffman解压模块解压,然后通过LZ77解压模块还原为原始数据。
现有技术的技术方案一般都是采用静态Huffman压缩的方式,一方面静态Huffman压缩需要将多组提前生成的Huffman tree和Huffman解码表保存在硬件存储模块中,占据了大量存储资源,在压缩过程中所有Huffman tree同时进行压缩,选择压缩率最高的一组作为最终结果,无疑耗费了大量的时间,效率会很低,同时静态压缩的方式对于大数据量的文本压缩比不高,压缩后的数据就需要占据更多的存储空间;另一方面压缩数据和Huffman解码表的结构不是适用于当前硬件解压的存储结构,在解压过程利用该格式的解码表效率不高,不能有效的利用硬件解压的优势,并且还要在多组解码表中选择与压缩过程相对应的解码表,解压过程就变得非常繁琐,从而导致解压速度和效率很低。
发明内容
有鉴于此,本发明主要解决现有硬件Gzip压缩方式压缩比不高,占用硬件存储资源过多,以及解压过程解码速率较慢等技术问题。具体提供了一种基于Huffman解码表的硬件压缩方法,包括以下步骤:
S11,将输入的原始数据读入到一个滑动窗口中;
S12,在滑动窗口中将每3个字节输入到一个Hash函数中进行计算,作为Hash值;前三个字节相同的字符串的Hash值是相同的,将其链成一条链,构成一个Hash链表,即字典;
S13,更新字典并查找是否有匹配字符串,存在匹配字符串则查看是否为最佳匹配;
S14,动态统计LZ77压缩过程中未匹配的字符、匹配距离+匹配长度出现的频率,并对动态统计的结果进行动态Huffman tree的建立,对出现频率多于预设范围的字符进行码长短的编码,对出现次数少于预设范围的字符进行码长长的编码;
S15,动态生成适用于硬件解压的Huffman解码表,按照码字长度、起始地址指针、解压数据存储区间的格式;
S16,利用动态生成的Huffman tree对LZ77压缩后的结果进行编码,生成最终压缩结果,压缩结果后存放Huffman解码表,将该压缩结果一起烧录至硬件存储器件中。
优选地,所述S13具体包括每新输入三个字节就更新一次字典信息,首先将原字节也加入对应的链上,并且通过查找Hash链的方式查看当前输入的字符串是否有匹配字符串,并进行遍历是否为最佳匹配字符串,若为匹配字符串,则用一对匹配信息来描述这串字符串;将所有数据处理完成后原始数据就变成了字符literal、匹配距离+匹配长度,即distance+length,这两种形式,即完成LZ77压缩。
优选地,所述匹配信息为距离和匹配长度的组合。
优选地,所述Huffman解码表的结构为:令0x00为起始地址,地址0x00开始存储字符或匹配长度的码字长度,动态生成的Huffman tree按照码字长度从短到长的顺序存储,有几种码字长度就存储几种;
地址0x10开始存储字符或匹配长度的码字长度对应的地址指针,该地址指针指向当前码字长度对应的存放字符或匹配长度解码后的数据的起始地址;
地址0x2000开始存放字符或匹配长度的解码后的数据,按照码字长度从短到长的顺序依次存放;
地址0x4000开始存储匹配距离的码字长度,动态生成的Huffman tree按照码字长度从短到长的顺序存储,有几种码字长度就存储几种;
地址0x4010开始存放码字长度对应的地址指针,该地址指针指向当前码字长度对应的存放字符或匹配长度解码后的数据的起始地址;
地址0x6000开始存放匹配距离解码后的数据,按照码字长度从短到长的顺序依次存放;
该Huffman解码表是对LZ77压缩后的结果进行动态统计后,按照硬件存储格式和地址动态生成,并且是对应当前压缩数据的一组表。
基于上述目的,本发明还提供了一种基于Huffman解码表的硬件解压方法,与上述压缩方法对应的,解压方法包括以下步骤:
S31,采用动态查找的方式,针对当前的二进制编码的码字长度,找到对应的指针信息;
S32,根据指针信息找到该码字长度对应的存放解码数据起始地址;遍历对应码字长度的解码数据的区间,将该二进制编码还原成字符、匹配长度或匹配距离,将所有二进制编码还原完成后,当前数据就解压为字符和匹配长度加匹配距离的格式;
S33,将这两部分数据送入到LZ77解压模块,将匹配长度和匹配距离进行遍历,对应还原为相应的字符串,即完成LZ77解压,生成原始数据。
本发明的有益效果在于:本发明在压缩方面采用了动态压缩的方式,很大程度上提高了压缩比,节约了存储空间,同时动态生成适用于硬件解压的Huffman解码表,不需要将多组压缩Huffman tree和解码表同时存储在硬件存储模块中,节约了大量存储资源。解压过程则正好利用压缩过程生成的解码表,采用动态查找的方式,避免了逐字查找解码表,提高了解压效率和解压正确率。
附图说明
为了使本发明的目的、技术方案和有益效果更加清楚,本发明提供如下附图进行说明:
图1为本发明实施例的一种基于Huffman解码表的硬件压缩解压方法的结构示意图;
图2为本发明实施例的一种基于Huffman解码表的硬件压缩方法的步骤流程图;
图3为本发明实施例的一种基于Huffman解码表的硬件压缩解压方法的Huffman解码表结构示意图;
图4为本发明实施例的一种基于Huffman解码表的硬件解压方法的步骤流程图。
具体实施方式
下面将结合附图,对本发明的优选实施例进行详细的描述。
参见图1,所示为本发明实施例的一种基于Huffman解码表的硬件压缩解压方法的结构示意图,包括以下步骤:
S10,在PC端进行压缩,在压缩过程中会动态生成Huffman解码表和压缩后的数据;
S20,将上述两部分烧录至硬件存储器件中;
S30,解压过程在嵌入式系统中进行,嵌入式系统会发出相应的指令和地址到硬件解压模块,解压模块会针对相应指令进行寻址并查找Huffman解码表对压缩后的数据进行解压;
S40,解压后的数据送入嵌入式系统。
压缩过程在PC端压缩完成的,这里本发明对开源的Gzip压缩代码进行改进,使其在压缩过程中生成适用于本发明硬件解压模块的动态Huffman解码表,并按照相应格式存放,从而在解压过程中直接使用该解码表,很大程度上提高了解压效率和准确率。
压缩具体实施例
参见图2,压缩方法包括以下步骤:
S11,将输入的原始数据读入到一个4k的滑动窗口中;
S12,在滑动窗口中将每3个字节输入到一个Hash函数中进行计算,作为Hash值;前三个字节相同的字符串的Hash值是相同的,将其链成一条链,构成一个Hash链表,即字典;
S13,每新输入三个字节就更新一次字典信息,首先将自己也加入对应的链上,并且通过查找Hash链的方式查看当前输入的字符串是否有匹配字符串,并进行遍历是否为最佳匹配字符串,若为匹配字符串,则用一对匹配信息(距离和匹配长度的组合)来描述这串字符串;将所有数据处理完成后原始数据就变成了字符(literal)、匹配距离+匹配长度(distance+length)这两种形式,就完成了LZ77压缩;
S14,动态统计LZ77压缩过程中未匹配的字符、匹配距离+匹配长度出现的频率,并对动态统计的结果进行动态Huffman tree的建立,对出现频率多于预设范围的字符进行码长短的编码,对出现次数少于预设范围的字符进行码长长的编码;这里的码长是按照未匹配的字符、匹配距离+匹配长度的出现频率来进行编码的,要按照出现频率从高到低的顺序依次排列,对出现频率高的进行较短编码如001,对出现频率低的进行较长编码如01010101,这是一个根据当前压缩数据的动态过程,码长短与长是相对的,不同压缩数据码长编码不同。
S15,动态生成适用于硬件解压的Huffman解码表,按照码字长度、起始地址指针、解压数据存储区间的格式;
S16,利用动态生成的Huffman tree对LZ77压缩后的结果进行编码,生成最终压缩结果,压缩结果后存放Huffman解码表,将该压缩结果一起烧录至硬件存储器件中。
无疑动态生成的Huffman tree和Huffman解码表是最适合本次压缩的,因此其压缩比一定是最高的。
适用于硬件解压缩而生成的Huffman解码表及压缩后的数据存储结构参见图3。令0x00为起始地址,地址0x00开始存储字符或匹配长度的码字长度,动态生成的Huffmantree按照码字长度从短到长的顺序存储,有几种码字长度就存储几种;
地址0x10开始存储字符或匹配长度的码字长度对应的地址指针,该地址指针指向当前码字长度对应的存放字符或匹配长度解码后的数据的起始地址;
地址0x2000开始存放字符或匹配长度的解码后的数据,按照码字长度从短到长的顺序依次存放;
地址0x4000开始存储匹配距离的码字长度,动态生成的Huffman tree按照码字长度从短到长的顺序存储,有几种码字长度就存储几种;
地址0x4010开始存放码字长度对应的地址指针,该地址指针指向当前码字长度对应的存放字符或匹配长度解码后的数据的起始地址;
地址0x6000开始存放匹配距离解码后的数据,按照码字长度从短到长的顺序依次存放;
该Huffman解码表是对LZ77压缩后的结果进行动态统计后,按照硬件存储格式和地址动态生成,并且是对应当前压缩数据的一组表。因此不存在在多组表中选择的情况,相对提高了其解压效率,更加实用且高效。
基于上述目的,本发明还提供了一种基于Huffman解码表的硬件解压方法,与上述压缩方法对应的,需要处理的数据是完整的压缩数据包,每一段不同的二进制编码可能都对应着一个字符、匹配长度或匹配距离,每遇到一段二进制编码就按照压缩过程生成的动态Huffman解码表的结构进行查表,由于该解码表避免了对未出现的字符、匹配长度或距离进行编码,并且采用了适用于硬件的存储结构,故查找效率更高。
具体解压方法参见图4,包括以下步骤:
S31,采用动态查找的方式,针对当前的二进制编码的码字长度,找到对应的指针信息;
S32,根据指针信息找到该码字长度对应的存放解码数据起始地址;遍历对应码字长度的解码数据的区间,将该二进制编码还原成字符、匹配长度或匹配距离,将所有二进制编码还原完成后,当前数据就解压为字符和匹配长度加匹配距离的格式;
S33,将这两部分数据送入到LZ77解压模块,将匹配长度和匹配距离进行遍历,对应还原为相应的字符串,即完成LZ77解压,生成原始数据。
本发明压缩过程采用动态压缩的方式。压缩过程可动态生成硬件存储格式的Huffman解码表,并将解码表存储至压缩结果之后,只需要存储一组解码表,解压缩方式采用动态查找。
最后说明的是,以上优选实施例仅用以说明本发明的技术方案而非限制,尽管通过上述优选实施例已经对本发明进行了详细的描述,但本领域技术人员应当理解,可以在形式上和细节上对其作出各种各样的改变,而不偏离本发明权利要求书所限定的范围。
Claims (5)
1.一种基于Huffman解码表的硬件压缩方法,其特征在于,包括以下步骤:
S11,将输入的原始数据读入到一个滑动窗口中;
S12,在滑动窗口中将每3个字节输入到一个Hash函数中进行计算,作为Hash值;前三个字节相同的字符串的Hash值是相同的,将其链成一条链,构成一个Hash链表,即字典;
S13,更新字典并查找是否有匹配字符串,存在匹配字符串则查看是否为最佳匹配;
S14,动态统计LZ77压缩过程中未匹配的字符、匹配距离+匹配长度出现的频率,并对动态统计的结果进行动态Huffman tree的建立,对出现频率多于预设范围的字符进行码长短的编码,对出现次数少于预设范围的字符进行码长长的编码;
S15,动态生成适用于硬件解压的Huffman解码表,按照码字长度、起始地址指针、解压数据存储区间的格式;
S16,利用动态生成的Huffman tree对LZ77压缩后的结果进行编码,生成最终压缩结果,压缩结果后存放Huffman解码表,将该压缩结果一起烧录至硬件存储器件中。
2.根据权利要求1所述的基于Huffman解码表的硬件压缩方法,其特征在于,所述S13具体包括每新输入三个字节就更新一次字典信息,首先将原字节也加入对应的链上,并且通过查找Hash链的方式查看当前输入的字符串是否有匹配字符串,并进行遍历是否为最佳匹配字符串,若为匹配字符串,则用一对匹配信息来描述这串字符串;将所有数据处理完成后原始数据就变成了字符literal、匹配距离+匹配长度,即distance+length,这两种形式,即完成LZ77压缩。
3.根据权利要求2所述的基于Huffman解码表的硬件压缩方法,其特征在于,所述匹配信息为距离和匹配长度的组合。
4.根据权利要求1所述的基于Huffman解码表的硬件压缩方法,其特征在于,所述Huffman解码表的结构为:令0x00为起始地址,地址0x00开始存储字符或匹配长度的码字长度,动态生成的Huffman tree按照码字长度从短到长的顺序存储,有几种码字长度就存储几种;
地址0x10开始存储字符或匹配长度的码字长度对应的地址指针,该地址指针指向当前码字长度对应的存放字符或匹配长度解码后的数据的起始地址;
地址0x2000开始存放字符或匹配长度的解码后的数据,按照码字长度从短到长的顺序依次存放;
地址0x4000开始存储匹配距离的码字长度,动态生成的Huffman tree按照码字长度从短到长的顺序存储,有几种码字长度就存储几种;
地址0x4010开始存放码字长度对应的地址指针,该地址指针指向当前码字长度对应的存放字符或匹配长度解码后的数据的起始地址;
地址0x6000开始存放匹配距离解码后的数据,按照码字长度从短到长的顺序依次存放;
该Huffman解码表是对LZ77压缩后的结果进行动态统计后,按照硬件存储格式和地址动态生成,并且是对应当前压缩数据的一组表。
5.一种基于Huffman解码表的硬件解压方法,其特征在于,与权利要求1-4之一的压缩方法对应的,解压方法包括以下步骤:
S31,采用动态查找的方式,针对当前的二进制编码的码字长度,找到对应的指针信息;
S32,根据指针信息找到该码字长度对应的存放解码数据起始地址;遍历对应码字长度的解码数据的区间,将该二进制编码还原成字符、匹配长度或匹配距离,将所有二进制编码还原完成后,当前数据就解压为字符和匹配长度加匹配距离的格式;
S33,将这两部分数据送入到LZ77解压模块,将匹配长度和匹配距离进行遍历,对应还原为相应的字符串,即完成LZ77解压,生成原始数据。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210914667.7A CN115189696A (zh) | 2022-08-01 | 2022-08-01 | 一种基于Huffman解码表的硬件压缩解压方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210914667.7A CN115189696A (zh) | 2022-08-01 | 2022-08-01 | 一种基于Huffman解码表的硬件压缩解压方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115189696A true CN115189696A (zh) | 2022-10-14 |
Family
ID=83521301
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210914667.7A Pending CN115189696A (zh) | 2022-08-01 | 2022-08-01 | 一种基于Huffman解码表的硬件压缩解压方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115189696A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117200805A (zh) * | 2023-11-07 | 2023-12-08 | 成都万创科技股份有限公司 | 一种mcu的低内存占用的压缩和解压方法及装置 |
CN117195005A (zh) * | 2023-11-03 | 2023-12-08 | 山东四季车网络科技有限公司 | 基于智慧洗车的信息数据管理系统 |
-
2022
- 2022-08-01 CN CN202210914667.7A patent/CN115189696A/zh active Pending
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117195005A (zh) * | 2023-11-03 | 2023-12-08 | 山东四季车网络科技有限公司 | 基于智慧洗车的信息数据管理系统 |
CN117195005B (zh) * | 2023-11-03 | 2024-01-26 | 山东四季车网络科技有限公司 | 基于智慧洗车的信息数据管理系统 |
CN117200805A (zh) * | 2023-11-07 | 2023-12-08 | 成都万创科技股份有限公司 | 一种mcu的低内存占用的压缩和解压方法及装置 |
CN117200805B (zh) * | 2023-11-07 | 2024-02-02 | 成都万创科技股份有限公司 | 一种mcu的低内存占用的压缩和解压方法及装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9223765B1 (en) | Encoding and decoding data using context model grouping | |
US5229768A (en) | Adaptive data compression system | |
CN115189696A (zh) | 一种基于Huffman解码表的硬件压缩解压方法 | |
US8356060B2 (en) | Compression analyzer | |
US10187081B1 (en) | Dictionary preload for data compression | |
US6597812B1 (en) | System and method for lossless data compression and decompression | |
CN101350624B (zh) | 一种支持ansi编码的中文文本的压缩方法 | |
US7688233B2 (en) | Compression for deflate algorithm | |
US10224957B1 (en) | Hash-based data matching enhanced with backward matching for data compression | |
US10735025B2 (en) | Use of data prefixes to increase compression ratios | |
US10897270B2 (en) | Dynamic dictionary-based data symbol encoding | |
US20100127902A1 (en) | Lossless data compression with separated index values and literal values in output stream | |
CN113300715B (zh) | 一种数据处理方法、装置、硬件压缩设备以及介质 | |
CN101534124B (zh) | 一种用于短小自然语言的压缩算法 | |
JPS6356726B2 (zh) | ||
CN116015311A (zh) | 基于滑动字典实现的Lz4文本压缩方法 | |
WO2007050018A1 (en) | Method and system for compressing data | |
CN113630125A (zh) | 数据压缩、编码解压缩方法、装置、电子设备及存储介质 | |
CN116683914A (zh) | 数据压缩方法、装置和系统 | |
CN108829872B (zh) | 无损压缩文件的快速处理方法、设备、系统及存储介质 | |
KR100494876B1 (ko) | 2바이트 문자 데이터 압축 방법 | |
Ghuge | Map and Trie based Compression Algorithm for Data Transmission | |
US20180373808A1 (en) | Techniques for random operations on compressed data | |
CN114301468A (zh) | 一种fse编码方法、装置、设备及存储介质 | |
JP2005521324A (ja) | 損失のないデータの圧縮および圧縮解除方法および装置 |
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 |