CN107623524B - 一种基于硬件的Huffman编码方法及系统 - Google Patents
一种基于硬件的Huffman编码方法及系统 Download PDFInfo
- Publication number
- CN107623524B CN107623524B CN201710529129.5A CN201710529129A CN107623524B CN 107623524 B CN107623524 B CN 107623524B CN 201710529129 A CN201710529129 A CN 201710529129A CN 107623524 B CN107623524 B CN 107623524B
- Authority
- CN
- China
- Prior art keywords
- coding
- identification
- register group
- unit
- bit
- 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.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 25
- 238000009825 accumulation Methods 0.000 claims abstract description 11
- 238000003825 pressing Methods 0.000 claims abstract description 8
- 230000008569 process Effects 0.000 claims description 4
- 238000012163 sequencing technique Methods 0.000 claims description 2
- 238000007906 compression Methods 0.000 description 11
- 230000006835 compression Effects 0.000 description 11
- 230000005540 biological transmission Effects 0.000 description 4
- 230000006870 function Effects 0.000 description 4
- 230000009286 beneficial effect Effects 0.000 description 2
- 238000013144 data compression Methods 0.000 description 2
- 230000006837 decompression Effects 0.000 description 2
- 238000010586 diagram Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004044 response Effects 0.000 description 2
- 230000001133 acceleration Effects 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 230000001360 synchronised effect Effects 0.000 description 1
Images
Landscapes
- Compression, Expansion, Code Conversion, And Decoders (AREA)
Abstract
本发明涉及一种基于硬件的Huffman编码方法,包括以下步骤:将所有的编码元素按照其权值的大小进行排序;将权值最小及次小的两个编码元素A1、A2的权值做加法操作,得到合并后的权值;使用合并后的A1的权值进行替换;将A2的权值赋值为二进制的全1,即最大值;根据A1的标识,找出标识与其相应的寄存器组,调用编码单元以压栈的方式在其编码位中添加编码1,然后调用累加单元在其码长位中加1,标识位保持不变;根据A2的标识,找出标识与其相应的寄存器组,调用编码单元以压栈的方式在其编码位中添加编码0,然后调用累加单元在其码长位中加1,标识位保持不变;使用A1的标识替换找出的所有寄存器组的标识。
Description
技术领域
本发明涉及压缩编码技术领域,更具体地,涉及一种基于硬件的Huffman编码方法及系统。
背景技术
当今社会信息化发展迅速,海量的信息存储和传递对压缩技术和传输技术提出了更高的要求。Huffman编码是一种无损的压缩编码方式,在数据压缩、数据传输以及图像处理领域有着非常广泛的应用。传统Huffman编码的软件实现由于编码过程需要顺序执行,其编码速度已经不能满足一些需要快速反应或者是大数据处理的需求。
目前,数据压缩技术可以分为无损压缩和有损压缩两种。对于文本数据、程序和特殊应用场合的图像数据的压缩,因为需要保证数据完整无任何丢失,必须采用无损压缩。
根据香农定理的编码思想,Huffman于1952年提出了一种不定码长编码的无损压缩方法,被称为Huffman编码。其核心思想是根据数据符号发生的概率进行编码,即概率越高编码越短。理论研究证实,Huffman编码是一种非常接近压缩比上限的编码方法,因此称之为最优编码。
传统的Huffman编码是通过软件在计算机上实现,靠CPU和内存进行编码解码等。由于编码原理并不复杂,所以对于软件工程师来说比较容易。但是,在计算机中运行Huffman编码,会过多消耗CPU资源,并且由于CPU自身的工作方式,串行处理Huffman编码的速度也非常慢。特别是解压或者是压缩海量数据的时候,耗时极长。尽管现在计算机性能已经提升了很多,但是对于一些快速反应,实时传输,或者是实时压缩解压的任务,普通计算机的性能就不能满足时间要求。
在硬件上实现Huffman编码可以解决上述缺点。提高编码速度,增强实时性处理能力,节省宝贵的CPU资源。但是目前硬件上应用Huffman编码的多为一些图像或者是视频的解压压缩芯片,功能固定且应用范围单一。在进行一个新的项目,或系统的研发时,往往难以获得一个能灵活应用的Huffman实现方案。因此,如何实现Huffman编码硬件化和并行化具有很好的实用价值。
发明内容
本发明为解决以上现有技术提供的Huffman编码方法编码速度不快、实时性较弱的技术缺陷,提供了一种基于硬件的Huffman编码方法。
为实现以上发明目的,采用的技术方案是:
一种基于硬件的Huffman编码方法,包括以下步骤:
S1.将所有的编码元素按照其权值的大小进行排序,然后将排序后的编码元素按照从小到大的顺序分别存储在若干个寄存器组中,寄存器组的数量与编码元素的数量一致;所述寄存器组包括Huffman编码位、码长位和标识位;为每个寄存器组的标识位初始化一个标识数值;
S2.将权值最小及次小的两个编码元素所在的寄存器组分别记为寄存器组1与寄存器组2,然后对两个编码元素的权值做加法操作,得到合并后的权值;
S3.使用合并后的权值对寄存器组1的编码元素的权值进行替换;将寄存器组2的编码元素的权值赋值为二进制的全1,即最大值;
S4.根据寄存器组1的标识,调用标识判断器从所有的寄存器组中找出标识与其相应的寄存器组;
S5.对步骤S4找出的寄存器组,调用编码单元以压栈的方式在其编码位中添加编码1,然后调用累加单元在其码长位中加1,标识位保持不变;
S6.根据寄存器组2的标识,调用标识判断器从所有的寄存器组中找出标识与其相应的寄存器组;
S7.对步骤S6找出的寄存器组,调用编码单元以压栈的方式在其编码位中添加编码0,然后调用累加单元在其码长位中加1,标识位保持不变;
S8.调用标识单元使用步骤S2中寄存器组1的标识替换步骤S7中找出的所有寄存器组的标识;
S9.循环执行步骤S1~步骤S8共t次,t为编码元素的个数;
S10.执行完毕步骤S9后,t个寄存器组中分别存储了各个编码元素的编码和码长,即Huffman编码需要用到的编码表,根据编码表完成Huffman编码输出。
上述方案中,使用本发明提供的方法进行Huffman编码,可简化编码流程,大幅提高编码效率及信息吞吐量,非常适合使用硬件实现进一步加速。
与现有技术相比,本发明的有益效果是:
1.本发明提供的技术方案,是基于硬件特性设计的,非常有利于硬件的实现。
2.本发明提供的编码方法能很好的利用硬件特性,并由于编码方法本身的优势,能使得Huffman的编码速度大大提高。本发明的一个实施例中,设排序需要a个时钟周期,编码元素为n个,则完成一次合并仅需要(a+2)个时钟周期,循环次数为(n-1)次,一共仅需(n-1)*(a+2)个时钟周期即可完成编码表的生成,算法复杂度为O(n),相比现有的软件实现方案,有着非常显著的提升。
附图说明
图1为Huffman编码硬件实现的系统框图。
图2为Huffman硬件实现中编码模块的详细结构图,
图3为本发明提供的方法的流程图。
具体实施方式
附图仅用于示例性说明,不能理解为对本专利的限制;
以下结合附图和实施例对本发明做进一步的阐述。
实施例1
对于上述的发明内容,本实施例针对一种格式的原始数据的具体实施进行说明。原始数据中,为0-4的数字随机分布,数据类型为3位二进制,总数是256个。其中数字0占52个,1~4各51个,权值以数据个数代替,个数越多,权值越大。
对于上述的数据,参考图2,本实施例中独立的寄存器组中的权值位为9位,标识位为3位。压栈编码单元中的寄存器组,编码位为5位,码长为3位,标识占3位。
根据图1,实现Huffman编码模块周边的辅助模块,分别为时钟模块,输入模块,和输出模块,以上模块与本发明的发明内容无关,其实现略过。
上述时钟模块,功能为产生稳定的100Mhz同步时钟,供整个系统使用。
上述输入模块,功能为检测输入的256个数据,并进行统计,统计的最终结果存储于独立寄存器组中,供后续的Huffman编码模块使用。
上述输出模块,功能为调用Huffman编码模块生成的编码表进行原始数据的编码输出。用于调试。
根据图2,在FPGA上实现Huffman编码模块。
其中,每个寄存器组存储一个编码元素的编码、码长和标识信息。每个寄存器组的寄存器个数及位数如上文确定,寄存器组从高位到低位,依次为编码、码长和标识信息。这里的标识信息采取2进制编码表示。所述标识判别器用于根据控制单元提供的标识,在数个寄存器组中选通相同标识的寄存器组。所述编码单元用于在根据标识选通寄存器组后,在寄存器组的编码位以压栈的方式添加一位编码。所述累加单元用于在编码单元添加编码后对相应的码长位进行加一处理。所述标识单元用于哈夫曼编码合并节点过程中每个寄存器组标识的修改。对于每2个需要合并的节点,在进行编码以及合并生成新的节点后,会对压栈编码单元中相应寄存器组的标识进行一次修改,目的是将两个需要的合并的节点进行统一,在后续对合并后新节点的编码中能统一编码。所述控制单元进行流程的控制,将权值最小节点进行合并,调用压栈编码单元进行编码,调用标识单元进行标识修改,为新的节点进行下一轮的节点合并和编码准备。
编码表生成流程如图3所示。
具体的编码步骤如下:
步骤1:调用排序模块将所有编码元素根据权值大小进行排序,排序结果按照从小到大存储在上述独立的数个寄存器组中,个数与编码元素个数相等。(由于排序模块为借鉴他人成果,不属于本发明范围,故不详细介绍)。
步骤2:将地址最低的两个寄存器组,即权值最小与次小元素所在的寄存器组,分别记为寄存器组1与寄存器组2,将其权值部分做加法操作,得到合并后的权值。
步骤3:用步骤2的计算结果覆盖寄存器组1的权值。
步骤4:将寄存器组2的权值赋值为全1,即最大值。
步骤5:根据寄存器组1的标识,调用压栈编码单元中的标识判别器,找到压栈编码单元中相应的寄存器组,结果可能为一个或多个。
步骤6:对步骤5中定位到的寄存器组,调用编码单元以压栈的方式添加编码1,码长位置在原来的数据上加1。标识位保持不变。多个寄存器组并行执行相同操作。
步骤7:根据寄存器组2的标识,调用压栈编码单元中的标识判别器,找到压栈编码单元中相应的寄存器组。结果可能为一个或多个。
步骤8:对步骤7中定位到的寄存器组,调用编码单元以压栈的方式添加编码0,码长位置在原来的数据上加1。多个寄存器组并行执行相同操作。
步骤9:调用标识单元,用步骤2中寄存器组1的标识,替换步骤8中定位的所有寄存器组的标识。多个寄存器组并行执行相同操作。
步骤10:控制循环的总计数器减1,(总循环计数器的初始值为编码元素个数)。
步骤11:若计数器不为0,返回步骤1循环进行。若计数器为0,则进行步骤12。
步骤12:压栈编码单元中的多个寄存器组,分别存储了各个节点的编码和码长,即哈夫曼编码需要用到的编码表。
步骤13:输出模块根据编码表进行编码输出。
各循环结束时的编码表如下所示:
编码|标识 | 循环1 | 循环2 | 循环3 | 循环4 | 最终编码表 |
元素0 | xxxxx|0 | xxxxx|0 | xxxx1|0 | xxx01|0 | 01|3 |
元素1 | xxxx1|1 | xxxx1|1 | xxx01|1 | xx001|0 | 001|3 |
元素2 | xxxx0|2 | xxxx0|1 | xxx00|1 | xx000|0 | 000|3 |
元素3 | xxxxx|3 | xxxx1|3 | xxxx1|3 | xxx11|3 | 11|3 |
元素4 | xxxxx|4 | xxxx0|4 | xxxx0|3 | xxx10|3 | 10|3 |
显然,本发明的上述实施例仅仅是为清楚地说明本发明所作的举例,而并非是对本发明的实施方式的限定。对于所属领域的普通技术人员来说,在上述说明的基础上还可以做出其它不同形式的变化或变动。这里无需也无法对所有的实施方式予以穷举。凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明权利要求的保护范围之内。
Claims (7)
1.一种基于硬件的Huffman编码方法,其特征在于:包括以下步骤:
S1.将所有的编码元素按照其权值的大小进行排序,然后将排序后的编码元素按照从小到大的顺序分别存储在若干个寄存器组中,寄存器组的数量与编码元素的数量一致;所述寄存器组包括Huffman编码位、码长位和标识位;为每个寄存器组的标识位初始化一个标识数值;
S2.将权值最小及次小的两个编码元素所在的寄存器组分别记为寄存器组1与寄存器组2,然后对两个编码元素的权值做加法操作,得到合并后的权值;
S3.使用合并后的权值对寄存器组1的编码元素的权值进行替换;将寄存器组2的编码元素的权值赋值为二进制的全1,即最大值;
S4.根据寄存器组1的标识,调用标识判断器从所有的寄存器组中找出标识与其相应的寄存器组;
S5.对步骤S4找出的寄存器组,调用编码单元以压栈的方式在其编码位中添加编码1,然后调用累加单元在其码长位中加1,标识位保持不变;
S6.根据寄存器组2的标识,调用标识判断器从所有的寄存器组中找出标识与其相应的寄存器组;
S7.对步骤S6找出的寄存器组,调用编码单元以压栈的方式在其编码位中添加编码0,然后调用累加单元在其码长位中加1,标识位保持不变;
S8.调用标识单元使用步骤S2中寄存器组1的标识替换步骤S7中找出的所有寄存器组的标识;
S9.循环执行步骤S1~步骤S8共t次,t为编码元素的个数;
S10.执行完毕步骤S9后,t个寄存器组中分别存储了各个编码元素的编码和码长,即Huffman编码需要用到的编码表,根据编码表完成Huffman编码输出。
2.根据权利要求1所述的基于硬件的Huffman编码方法,其特征在于:所述码长和标识采用2进制编码表示。
3.根据权利要求1所述的基于硬件的Huffman编码方法,其特征在于:所述寄存器组中,从高位到低位依次为Huffman编码位、码长位和标识位。
4.一种实现权利要求1~3任一项所述方法的系统,其特征在于:包括若干个寄存器组、标识判断器、编码单元、累加单元和标识单元。
5.根据权利要求4所述的系统,其特征在于:所述系统还包括有控制单元,所述控制单元用于协调寄存器组、标识判断器、编码单元、累加单元和标识单元的工作处理过程,以及步骤S2对权值的合并。
6.根据权利要求4所述的系统,其特征在于:所述系统还包括有排序单元,所述排序单元用于将所有的编码元素按照其权值的大小进行排序。
7.根据权利要求4所述的系统,其特征在于:所述系统还包括有输出单元,所述输出单元用于根据编码表完成Huffman编码输出。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710529129.5A CN107623524B (zh) | 2017-07-01 | 2017-07-01 | 一种基于硬件的Huffman编码方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710529129.5A CN107623524B (zh) | 2017-07-01 | 2017-07-01 | 一种基于硬件的Huffman编码方法及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107623524A CN107623524A (zh) | 2018-01-23 |
CN107623524B true CN107623524B (zh) | 2020-07-31 |
Family
ID=61087191
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710529129.5A Active CN107623524B (zh) | 2017-07-01 | 2017-07-01 | 一种基于硬件的Huffman编码方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107623524B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109979540B (zh) * | 2018-11-29 | 2023-05-05 | 天津大学 | 一种dna信息存储编码方法 |
CN112003625A (zh) * | 2020-08-14 | 2020-11-27 | 山东云海国创云计算装备产业创新中心有限公司 | 一种霍夫曼编码方法、系统及设备 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102141903A (zh) * | 2011-03-22 | 2011-08-03 | 杭州中天微系统有限公司 | 用于16/32位混合指令的对称编码装置与译码装置 |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CA2156889C (en) * | 1994-09-30 | 1999-11-02 | Edward L. Schwartz | Method and apparatus for encoding and decoding data |
JPH0936749A (ja) * | 1995-07-21 | 1997-02-07 | Hitachi Ltd | 符号化復号化装置およびこれに用いられる符号化方法 |
CN102176750B (zh) * | 2011-03-10 | 2012-12-26 | 西安电子科技大学 | 高性能自适应二进制算术编码器 |
CN102438145A (zh) * | 2011-11-22 | 2012-05-02 | 广州中大电讯科技有限公司 | 一种基于Huffman编码的图片无损压缩方法 |
CN103428227B (zh) * | 2013-09-05 | 2016-03-30 | 中国科学技术大学苏州研究院 | 基于Huffman编码的IP隐秘通信方法 |
-
2017
- 2017-07-01 CN CN201710529129.5A patent/CN107623524B/zh active Active
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102141903A (zh) * | 2011-03-22 | 2011-08-03 | 杭州中天微系统有限公司 | 用于16/32位混合指令的对称编码装置与译码装置 |
Also Published As
Publication number | Publication date |
---|---|
CN107623524A (zh) | 2018-01-23 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110222048B (zh) | 序列生成方法、装置、计算机设备及存储介质 | |
CN113572479B (zh) | 一种有限状态熵编码表的生成方法及系统 | |
US20150262064A1 (en) | Parallel decision tree processor architecture | |
US20150262062A1 (en) | Decision tree threshold coding | |
CN108628898B (zh) | 数据入库的方法、装置和设备 | |
CN111694643B (zh) | 一种面向图神经网络应用的任务调度执行系统及方法 | |
CN101282121B (zh) | 一种基于条件概率的哈夫曼解码的方法 | |
CN105302915B (zh) | 基于内存计算的高性能数据处理系统 | |
Howard et al. | Parallel lossless image compression using Huffman and arithmetic coding | |
CN107623524B (zh) | 一种基于硬件的Huffman编码方法及系统 | |
CN101022552A (zh) | 一种实现霍夫曼译码的方法和装置 | |
US20150262063A1 (en) | Decision tree processors | |
CN107565974B (zh) | 一种静态哈夫曼并行全编码实现方法 | |
CN111787325A (zh) | 一种熵编码器及其编码方法 | |
CN108829930B (zh) | 三维数字化工艺设计mbd模型的轻量化方法 | |
CN108092670B (zh) | 编码方法和装置 | |
CN106649836B (zh) | 一种基于硬件查找表的模式字符的查找方法 | |
CN113381769B (zh) | 一种基于fpga的译码器 | |
US9697899B1 (en) | Parallel deflate decoding method and apparatus | |
CN114860192A (zh) | 一种基于fpga的图神经网络高乘法器利用率的稀疏稠密矩阵乘法阵列 | |
Chen et al. | A hardware design method for canonical huffman code | |
CN114095036B (zh) | 一种动态哈夫曼编码的码长生成装置 | |
Li et al. | BAH: A bitmap index compression algorithm for fast data retrieval | |
CN104899447B (zh) | 电力大数据预处理的属性约简方法 | |
CN112911314B (zh) | 一种熵编码器的编码方法及熵编码器 |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |