CN102983866A - 一种动态Huffman编码硬件实现系统及其实现方法 - Google Patents
一种动态Huffman编码硬件实现系统及其实现方法 Download PDFInfo
- Publication number
- CN102983866A CN102983866A CN201210458012XA CN201210458012A CN102983866A CN 102983866 A CN102983866 A CN 102983866A CN 201210458012X A CN201210458012X A CN 201210458012XA CN 201210458012 A CN201210458012 A CN 201210458012A CN 102983866 A CN102983866 A CN 102983866A
- Authority
- CN
- China
- Prior art keywords
- buffer unit
- huffman
- code word
- node
- unit
- 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.)
- Granted
Links
- 238000000034 method Methods 0.000 title claims abstract description 40
- 230000008569 process Effects 0.000 claims abstract description 29
- 238000012856 packing Methods 0.000 claims abstract description 10
- 238000000151 deposition Methods 0.000 claims description 21
- 238000012423 maintenance Methods 0.000 claims description 4
- 238000007906 compression Methods 0.000 claims description 3
- 230000006835 compression Effects 0.000 claims description 3
- 238000010276 construction Methods 0.000 claims description 3
- 238000012545 processing Methods 0.000 claims description 3
- 238000005516 engineering process Methods 0.000 abstract description 4
- 238000013500 data storage Methods 0.000 description 3
- 210000004027 cell Anatomy 0.000 description 2
- 238000013144 data compression Methods 0.000 description 2
- 238000007619 statistical method Methods 0.000 description 2
- 230000007704 transition Effects 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000015572 biosynthetic process Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000006243 chemical reaction Methods 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 230000006837 decompression Effects 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 238000012958 reprocessing Methods 0.000 description 1
- 238000013179 statistical model Methods 0.000 description 1
- 210000000352 storage cell Anatomy 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
Images
Landscapes
- Compression, Expansion, Code Conversion, And Decoders (AREA)
Abstract
本发明公布了一种动态Huffman编码硬件实现系统,该系统包括:数据打包单元,频率缓存单元,码字长度缓存单元,三个数据选择器单元,码字值缓存单元,主控状态机,父亲节点缓存单元,深度缓存单元,最小堆缓存单元,数据统计单元,加法器单元和乘法器单元。动态Huffman编码硬件实现方法,包括:快速的字符统计;建立Huffman树;建立Huffman表;编码输出;频率缓存单元的提前清空等步骤。本发明通过硬件实现了Huffman编码,并在Huffman编码的硬件实现过程中,采用了快速的字符统计方法、频率缓存单元提前清空等技术使得数据吞吐率有了明显的提升。
Description
技术领域
本发明涉及数据压缩技术。尤其涉及一种动态Huffman编码硬件实现系统及其实现方法。
背景技术
在云计算的海量数据处理中,数据的压缩、解压缩是非常重要的手段,可以大幅度的降低数据的存储空间,提升数据传输的吞吐率。
Huffman一种基于统计模式的无损压缩算法,主要包括以下几个基本的步骤:a)统计字符的频率。b)构造Huffman树。c) 创建Huffman表。d)编码输出。最终,在数据流中出现频率最高的字符给予最短的编码,而出现频率最低的给予最长的编码,这样就可以得到压缩的效果。
使用软件结构实现Huffman树的过程中,需要采用二叉树数据结构,因此,我们需要定义一个结构体去表示Huffman 树中的每一个节点,在硬件描述语言Verilog及VHDL中没有数据结构。为了实现动态Huffman编码的结构,因此这里给出了Huffman编码的硬件实现系统并给出了Huffman编码硬件实现方法及加速方法。
传统的Huffman实现方式中,一般是基于软件平台的实现方式,编码过程是串行处理的过程,而在Huffman编码的硬件实现过程中,采用了快速的字符统计方法、频率缓存单元提前清空等技术使得数据吞吐率有了明显的提升。
发明内容
本发明要解决的一个技术问题是提供了一种动态Huffman编码硬件实现系统及其实现方法,能够利用极少的组合逻辑、时序逻辑以及存储器资源加以实现。
本发明为实现上述目的,采用如下技术方案:
一种动态Huffman编码硬件实现系统,其特征在于,所述系统包括:
一个频率缓存单元,用于存放数据流中每一个字符出现的频率;
一个最小堆缓存单元,用于维护频率缓冲单元中出现频率不为0的字符,使得这些字符在存储方式上呈现连续的形式,而这些字符在逻辑关系上呈现二叉树的形式,并且使得这棵二叉树满足:左节点和右节点都大于或者等于本节点,为辅助构造Huffman树的过程做好准备,其中叶子节点除外;
一个父亲节点缓存单元,用于存放Huffman树中每一个节点的父亲节点;
一个深度缓存单元,用于存放整个Huffman树中每一个节点的深度,其中根节点的深度最大,叶子节点的深度是0;
一个码字值缓存单元,用于存放Huffman树中每一个叶子节点对应的Huffman编码的值;
一个码字长度缓存单元,用于存放Huffman树中每一个节点对应的Huffman编码的码字长度;
一个乘法器单元,用于计算对待压缩数据块经过动态Huffman编码之后数据块的大小;
一个数据统计单元,用于统计待压缩数据流中每一个字符出现的频率,并将统计的结果存放在频率缓存单元中;
一个主控状态机部分,根据频率缓存单元中存放的每一个字符的频率,通过最小堆缓存单元、父亲节点缓存单元、深度缓存单元来构造Huffman树及Huffman表,分别存放在码字值缓存单元及码字长度缓存单元中;
三个多路选择器单元,分别用于控制频率缓存单元在不同的工作阶段由主控状态机或者是由数据统计单元控制,和码字值缓存单元、码字长度缓存单元在不同的工作阶段分别由主控状态机或者是由数据打包输出单元进行控制;
一个数据打包输出单元,用于查询待编码的数据块中每一个字符查询码字值缓存单元及码字长度缓存单元得到每一个字符的Huffman编码并打包输出;
一个加法器单元,用于快速的字符统计,统计结果存放在频率缓存单元中。
一种动态Huffman编码硬件实现方法,包括下述步骤:
(1)扫描待压缩的原始数据,并快速统计每一个字符出现的频率,依次存放在频率缓存单元;
(2)主控状态机读取频率缓存单元的数据并把出现频率不为0的字符顺序的放进最小堆缓存单元进行维护;
(3)利用最小堆缓存单元、父亲节点缓存单元、深度缓存单元构造Huffman树,其中Huffman树的信息最终也是存放在最小堆缓存单元中;
(4)遍历Huffman树,得到Huffman树中每一个叶子节点的码字长度;
(5)统计每一个非0码字长度字符的数目;
(6)根据每一个非0码字长度字符的数目去计算出每一个字符的Huffman码字值;
(7)统计数据块经过Huffman编码之后的数据块的大小;
(8)主控状态机部分把码字值缓存单元、码字长度缓存单元控制权交给数据打包单元;
(9)数据打包单元在得到码字值缓存单元及码字长度缓存单元的控制权之后,开始对原始的数据进行Huffman编码,并打包输出;
(10)主控状态机在进行对新的数据块进行统计之前对频率缓存单元的提前清空。
其进一步特征在于:
所述步骤(1)中字符快速统计通过加法器和频率缓存单元完成。
所述步骤(2)中最小堆缓存单元进行维护过程为把频率缓存单元中的字符出现频率依次顺序的读出,并加以判断,如果不为0,就把该字符放进最小堆缓存单元中,一直到频率缓存单元中所有的叶子节点都读取并判断完毕,如果为0就不放进最小堆缓存单元中,在把字符依次存进最小堆缓存单元中的同时记录最小堆的长度,即最小堆缓存单元中有效的字符的数目,这些字符在逻辑关系上呈现二叉树的形式;
从最小堆缓存单元中数据元素个数的一半开始一直到最小堆缓存单元的顶部依次调整这棵二叉树,使得这课二叉树中的每一个节点都满足左节点和右节点都大于或者等于本节点,其中叶子节点除外。
所述步骤(3)中构造Huffman树的过程中从最小堆缓存单元的顶部读取第一个元素,并把这个元素存入最小堆缓存单元底部开始的第一个未被占用的单元中,此时最小堆缓存单元的长度减1,并将最小堆缓存单元的最后一个元素放进最小堆缓存单元的第一个元素的位置上,从第一个元素位置开始调整这棵二叉树,使得这棵二叉树中的每一个节点都满足左节点和右节点大于或者等于本节点,其中叶子节点除外;
从最小堆缓存单元的顶部再读取第一个元素并把这个元素存入最小堆缓存单元底部开始的第一个未被占用的单元中,把最小堆缓存单元的长度减1,把从最小堆缓存单元中连续读取的元素组合成一个新的节点,这个新的节点的权值为两个连续读取的元素的权值的和,这个的新节点在整个Huffman树中的深度为两个连续读取元素中较大深度加1,并在父亲节点缓存单元中设置好两个连续读取的叶子节点的父亲节点为这个新得到的节点;
把新得到的节点放入最小堆缓存单元的顶部,并把最小堆缓存单元的长度加1,从最小堆缓存单元的顶部开始依次调整最小堆中二叉树的节点,使得这棵二叉树满足左节点和右节点大于或者等于本节点,其中叶子节点除外;
判断最小堆缓存单元的长度是否为0,若不为0,表示Huffman树未建好,继续Huffman树的建立;若为0,表示Huffman树已经全部建好,把读取的最后一个节点存入最小堆缓存单元底部开始第一个未被占用的单元中。
所述步骤(4)遍历Huffman树,得到Huffman树中每一个叶子节点的码字长度过程中Huffman树已经建好,并存放在最小堆缓存单元中,从最小堆缓存单元中最新存入的那个单元开始,并在码字长度缓存单元中设置其对应的码字长度为0,并从Huffman树的根节点开始,依次遍历最小堆缓存单元中存放的Huffman树中剩余的每一个节点,依次设置好每一个叶子节点的码字长度,依次对应存放在码字长度缓存单元中。
所述步骤(5)统计每一个非0码字长度字符的数目过程中在遍历Huffman树,得到每一个节点的码字长度时,主控状态机会同时统计出每一个码字长度的节点的个数,为计算Huffman编码的值作好准备。
所述步骤(6)根据每一个非0码字长度字符的数目去计算出每一个字符的Huffman码字值的过程是为了得出Huffman树中每一个节点的码字值,统计出了每一个非0码字长度的个数,从Huffman树的最顶层依次向下进行推出Huffman树中每一个节点的码字值,并将叶子节点的码字值保存在码字值缓存单元中。
所述步骤(7)统计数据块经过Huffman编码之后的数据块的大小过程是为了在得到每一个叶子节点码字长度的过程中,同时读取对应的频率缓存单元中对应字符的频率信息,通过乘法器单元计算出对频率缓存单元中字符进行Huffman编码之后的长度,同时计算出累计Huffman编码的长度;在得出每一个Huffman叶子节点的码字长度之后,也就得到了固定长度的数据块经过Huffman编码之后总大小。
所述步骤(10)Huffman编码统计之前对频率缓存单元的提前清空过程为数据打包单元启动,开始编码输出,同时主控状态机开始把频率缓存单元开始清空处理,为下一个数据块的Huffman编码开始做好准备。
本发明通过硬件实现了Huffman编码,并在Huffman编码的硬件实现过程中,采用了快速的字符统计方法、频率缓存单元提前清空等技术使得数据吞吐率有了明显的提升。
附图说明
图1给出了一种动态Huffman编码硬件实现系统的结构示意图。
图2给出了一种动态Huffman编码硬件实现方法的状态转换图。
具体实施方式
下面参照附图用本发明的示例性实施例对本发明进行更全面的描述和说明。
如图1所示,一种动态Huffman编码硬件实现系统的结构示意图包括:数据打包单元100,数据选择器单元101,频率缓存单元102,数据选择器单元103,码字长度缓存单元104,数据选择器单元105,码字值缓存单元106,主控状态机107,父亲节点缓存单元108,深度缓存单元109,最小堆缓存单元110,数据统计单元111。
数据打包单元100,用于把待压缩的数据通过查询码字长度缓存单元104及码字值缓存单元106得到每一个字符的Huffman编码并打包输出。
数据选择器单元 101,用于选择频率缓存单元的控制权,在Huffman编码之前,数据选择器单元101选择数据统计单元111去控制频率缓存单元102;在构造Huffman编码过程中,数据选择器单元101选择主控状态机单元107去控制频率缓存单元102的控制权。
频率缓存单元102,用于存放Huffman树中每一个叶子节点的频率。
数据选择器单元103,用于控制码字长度缓存单元104的控制权,在得到Huffman树中每一个叶子节点的码字长度及码字值之前,数据选择器单元103选择主控状态机单元107去控制码字长度缓存单元104;在得到Huffman树中每一个叶子节点的码字长度及码字值之后,数据选择器单元103选择数据打包单元100去控制码字长度缓存单元104的控制权。
码字长度缓存单元104,用于存放Huffman树中每一个叶子节点的码字长度。
数据选择单元105,用于控制码字值缓存单元106的控制权,在得到Huffman树中每一个叶子节点的码字长度及码字值之前,数据选择器单元105选择主控状态机单元107去控制码字值缓存单元106;在得到Huffman树中每一个叶子节点的码字长度及码字值之后,数据选择单元105选择数据打包单元100去控制码字值缓存单元106。
主控状态机单元107,通过借助父亲节点缓存单元108,深度缓存单元109,最小堆缓存单元110,去构建Huffman树,通过遍历Huffman树,得到Huffman树中每一个节点的码字长度,再根据码字长度去计算Huffman树中所有的叶子节点的码字值存放在码字值缓存单元106中,对应的叶子节点的码字长度存放于码字长度缓存单元104中。
父亲节点缓存单元108,用于存放Huffman树中每一个节点的父亲节点,根节点除外。
深度缓存单元109,用于存放Huffman树中每一个节点的深度,其中叶子节点的深度是0,根节点的深度最大。
最小堆缓存单元110,用于维护Huffman树中所有的节点,使得这些节点在逻辑上构成一棵二叉树,并且满足左节点和右节点大于或者等于本节点,其中叶子节点除外。
数据统计单元111,在Huffman主控状态机构造Huffman树之前,由数据统计单元111去统计每一个叶子节点出现的频率,并把这个统计的每一个字符的频率信息存放在频率缓存单元102中。
如图2所示,一种动态Huffman编码硬件实现方法的状态转换图,主要状态包括:状态0000~状态0010
在状态0000,图1中主控状态机单元107通过数据选择单元101获得频率缓存单元102的控制权,并把频率缓存单元中每一个数据存储单元都清空为0,为数据统计做好准备,并进入状态0001。
在状态0001,图1中主控状态机单元107通过数据选择单元101开始释放频率缓存单元102的控制权,此时频率缓存单元102的控制权交给数据统计单元111并进入状态0002。
在状态0002,图1中数据统计单元111开始对扫描待压缩的原始数据,并统计每一个字符出现的频率,依次存放在频率缓存单元102中,当原始数据块扫描完毕时,主控状态机单元107通过数据选择单元101回收频率缓存单元102的控制权,并开始进入状态0003。
在状态0003,主控状态机单元开始从频率缓存单元102中依次顺序的读取数据,并把出现频率不为0的字符顺序的放进最小堆缓存单元110中,每存放一个元素最小堆的长度就加1,一直到把频率缓存单元中的数据读取完毕为止,在读取的过程中会进行判断如果一个字符没有出现,那么该字符的码字长度为0,此时主控状态机单元107开始把码字长度缓存单元104中对应的单元填写为0;如果出现了那么该字符定是叶子节点其深度为0,此时主控状态机单元开始把深度缓存单元109中对应的单元设置为0,重复执行状态0003,直到所有的节点读取完毕,并开始进入状态0004。
在状态0004,主控状态机开始处理最小堆缓存单元110中存放的每一个字符,使得这些字符物理上呈现顺序存放,在逻辑上又构成了一棵二叉树,并且这棵二叉树满足:左节点和右节点大于或者等于本节点,其中叶子节点除外。在状态0004重复处理这个过程,直到最小堆中所有的叶子节点都满足:左节点和右节点大于或者等于本节点,叶子节点除外,最小堆缓存单元110中的数据处理好了之后,主控状态机单元开始进入状态0005。
在状态0005,主控状态机开始从最小堆的顶部读取一个字符,此时最小堆缓存单元的长度减1,主控状态机单元107把这个字符从最小堆缓存单元110的底部开始顺序的向顶部存放,并把最小堆的有效字符的最后一个字符放进最小堆的顶部,此时最小堆的长度加1,并开始调整最小堆缓存单元110中的元素,使得最小堆缓存单元110中的每一个元素都满足::左节点和右节点大于或者等于本节点,叶子节点除外,调整好之后,主控状态机单元107再从最小堆缓存单元110中读取一个元素,此时最小堆的长度再次减1,主控状态机单元107再把这个新读取的字符从最小堆缓存单元110的底部顺序的向最小堆的顶部顺序的存放,并把两个连续读取的元素构成一个新的Huffman节点,即中间节点,并开始设置频率缓存单元102中这个新的节点的权值为连续读取的两个元素的权值之和,在深度缓存单元109中开始设置这个新节点的深度为连续读取的两个元素的深度最大值加1,主控状态机单元107此时还会在父亲节点缓存单元中设置之前连续读取元素的父亲节点为这个新得到的节点,处理完之后主控状态机单元107开始判断最小堆的长度是否为0,如果为0就表示Huffman树已经建好并顺序的从最小堆的底部向最小堆的顶部存放,并开始准备进入状态0006,否则就继续进入状态0005重复执行上述过程。
在状态0006中,主控状态机单元107把最后一个存进最小堆缓存单元110中的节点读取出来,设置其码字长度为0,进入状态0007。
在状态0007中,继续从最小堆缓存单元110中读取出一个元素,并在码字长度缓存单元104中设置其码字长度为其父亲节点的码字长度加1,每设置好一个节点的码字长度的同时主控状态机单元107会判断该节点是不是Huffman树中的叶子节点,如果是叶子节点主控状态机单元107就从频率缓存单元102中把该节点对应的频率读取出来,利用乘法器单元计算出采用Huffman编码待压缩数据块中所有的该节点最后总得长度是多长,重复执行步骤0007,在重复执行的过程中主控状态机单元107同时会统计出每一种码字长度所对应的节点的个数,当设置好Huffman树中所有节点的码字长度后就进入状态0008。
在状态0008中,主控状态机单元107根据在状态0007中得出的每一种码字长度的个数去计算出所有节点的码字值,并分别存放在码字值缓存单元106中,并开始进入状态0009。
在状态0009中,主控状态机单元107就通过数据选择单元103、105释放对码字长度缓存单元104及码字值缓存单元106的控制权,并把码字长度缓存单元104、码字值缓存单元106的控制权交给数据打包单元100,进入状态0010。
在状态0010中,数据打包单元100开始工作,并依次读取原始待压缩数据块中的每一个字符,通过查询图1中码字长度缓存单元104及码字值缓存单元106开始输出压缩之后的数据。在状态0010中,数据打包单元开始工作的同时,主控状态机单元107也把频率缓存单元102中的每一个存储单元给清除。如果编码输出完成并且频率缓存单元102中的每一个单元都被清除那么,主控状态机就通过图1中数据选择单元103、105去获得图1中码字长度缓存单元104、码字值缓存单元106的控制权,并进入状态0000。
在发明中,数据存储及数据控制部分构成的一个完成的系统,结构清晰,利于分析和设计,Huffman树及Huffman表的构造过程是由主控状态机去控制存放在各个数据缓存单元中的数据进行的,状态转换过程清晰。
尽管本发明此处具体化一些特定的例子示出和描述,然而本发明不限制于所示出的细节,因为在不偏离本发明的精神以及在权利要求的范围和等同范围内,可以作出多种改进和结构变化。因此,宽范围地并且如权利要求中所阐明的在某种意义上与本发明的范围一致地解释附加的权利要求是适当的。
Claims (10)
1.一种动态Huffman编码硬件实现系统,其特征在于,所述系统包括:
一个频率缓存单元,用于存放数据流中每一个字符出现的频率;
一个最小堆缓存单元,用于维护频率缓冲单元中频率不为0的字符,使得这些字符在存储方式上呈现连续的形式,而这些字符在逻辑关系上呈现二叉树的形式,并且使得这棵二叉树满足:左节点和右节点都大于或者等于本节点,为辅助构造Huffman树的过程做好准备;
一个父亲节点缓存单元,用于存放Huffman树中每一个节点的父亲节点,根节点除外;
一个深度缓存单元,用于存放整个Huffman树中每一个节点的深度,其中根节点的深度最大,叶子节点的深度是0;
一个码字值缓存单元,用于存放每一个字符对应的Huffman编码的值;
一个码字长度缓存单元,用于存放每一个字符对应的Huffman编码值所对应的码字长度;
一个乘法器单元,用于计算对待压缩数据块采用动态Huffman编码之后数据块的大小;
一个数据统计单元,用于统计待压缩数据流中每一个字符出现的频率,并将统计的结果存放在频率缓存单元中;
一个主控状态机部分,根据频率缓存单元中存放的每一个字符的频率,通过最小堆缓存单元、父亲节点缓存单元、深度缓存单元来构造Huffman树及Huffman表,分别存放在码字值缓存单元及码字长度缓存单元中;
三个多路选择器单元,分别用于控制频率缓存单元在不同的工作阶段由主控状态机或者是由数据统计单元控制,和码字值缓存单元、码字长度缓存单元在不同的工作阶段分别由主控状态机或者是由数据打包输出单元进行控制;
一个数据打包输出单元,用于查询待编码的数据块中每一个字符查询码字值缓存单元及码字长度缓存单元得到每一个字符的Huffman编码并打包输出;
一个加法器单元,用于快速的字符统计,统计结果存放在频率缓存单元中。
2.一种动态Huffman编码硬件实现方法,包括下述步骤:
(1)扫描待压缩的原始数据,并快速统计每一个字符出现的频率,依次存放在频率缓存单元;
(2)主控状态机读取频率缓存单元的数据并把出现频率不为0的字符顺序的放进最小堆缓存单元进行维护;
(3)利用最小堆缓存单元、父亲节点缓存单元、深度缓存单元构造Huffman树,其中Huffman树的信息最终也是存放在最小堆缓存单元中;
(4)遍历Huffman树,得到Huffman树中每一个叶子节点的码字长度;
(5)统计每一个非0码字长度字符的数目;
(6)根据每一个非0码字长度字符的数目去计算出每一个字符的Huffman码字值;
(7)统计数据块经过Huffman编码之后的数据块的大小;
(8)主控状态机部分把码字值缓存单元、码字长度缓存单元控制权交给数据打包单元;
(9)数据打包单元在得到码字值缓存单元及码字长度缓存单元的控制权之后,开始对原始的数据进行Huffman编码,并打包输出;
(10)主控状态机在进行对新的数据块进行统计之前对频率缓存单元的提前清空。
3.根据权利要求2所述的动态Huffman编码硬件实现方法,其特征在于:
所述步骤(1)中字符快速统计通过加法器和频率缓存单元完成。
4.根据权利要求2所述的动态Huffman编码硬件实现方法,其特征在于:所述步骤(2)中最小堆缓存单元进行维护过程为把频率缓存单元中的字符出现频率依次顺序的读出,并加以判断,如果不为0,就把该字符放进最小堆缓存单元中,一直到频率缓存单元中所有的叶子节点都读取并判断完毕,如果为0就不放进最小堆缓存单元中,在把字符依次存进最小堆缓存单元中的同时记录最小堆的长度,即最小堆缓存单元中有效的字符的数目,这些字符在逻辑关系上呈现二叉树的形式;
从最小堆缓存单元中数据元素个数的一半开始一直到最小堆缓存单元的顶部依次调整这棵二叉树,使得这课二叉树中的每一个节点都满足左节点和右节点都大于或者等于本节点,其中叶子节点除外。
5.根据权利要求2所述的动态Huffman编码硬件实现方法,其特征在于:
所述步骤(3)中构造Huffman树的过程中从最小堆缓存单元的顶部读取第一个元素,并把这个元素存入最小堆缓存单元底部开始的第一个未被占用的单元中,此时最小堆缓存单元的长度减1,并将最小堆缓存单元的最后一个元素放进最小堆缓存单元的第一个元素的位置上,从第一个元素位置开始调整这棵二叉树,再次使得这棵二叉树中的每一个节点都满足左节点和右节点大于或者等于本节点,其中叶子节点除外;
从最小堆缓存单元的顶部再读取第一个元素并把这个元素存入最小堆缓存单元底部开始的第一个未被占用的单元中,把最小堆缓存单元的长度减1,把从最小堆缓存单元中连续读取的元素组合成一个新的节点,这个新的节点的权值为两个连续读取的元素的权值的和,这个的新节点在整个Huffman树中的深度为两个连续读取元素中较大深度加1,并在父亲节点缓存单元中设置好两个连续读取的叶子节点的父亲节点为这个新得到的节点,即中间节点或者是根节点;
把得到的新的节点放入最小堆缓存单元的顶部,并把最小堆缓存单元的长度加1,从最小堆缓存单元的顶部开始依次调整最小堆中二叉树的节点,使得这棵二叉树满足左节点和右节点大于或者等于本节点;
判断最小堆缓存单元的长度是否为0,若不为0,表示Huffman树未建好,继续Huffman树的建立;若为0,表示Huffman树已经全部建好,把读取的最后一个节点存入最小堆缓存单元底部开始第一个未被占用的单元中。
6.根据权利要求2所述的动态Huffman编码硬件实现方法,其特征在于:所述步骤(4)遍历Huffman树,得到Huffman树中每一个叶子节点的码字长度过程中Huffman树已经建好,并存放在最小堆缓存单元中,从最小堆缓存单元中最新存入的那个单元开始,并在码字长度缓存单元中设置其对应的码字长度为0,并从Huffman树的根节点开始,依次遍历最小堆缓存单元中存放的Huffman树中剩余的每一个节点,依次设置好每一个叶子节点的码字长度,依次存放在对应的码字长度缓存单元中。
7.根据权利要求2所述的动态Huffman编码硬件实现方法,其特征在于:所述步骤(5)统计每一个非0码字长度字符的数目过程中在遍历Huffman树,得到每一个节点的码字长度时,主控状态机会同时统计出每一个码字长度的节点的个数,为计算Huffman编码的值作好准备。
8.根据权利要求2所述的动态Huffman编码硬件实现方法,其特征在于:所述步骤(6)根据每一个非0码字长度字符的数目去计算出每一个字符的Huffman码字值的过程是为了得出Huffman树中每一个节点的码字值,在统计出了每一个非0码字长度的个数,从Huffman树的最顶层依次向下进行推出Huffman树中每一个节点的码字值,并将叶子节点的码字值保存在码字值缓存单元中。
9.根据权利要求2所述的动态Huffman编码硬件实现方法,其特征在于:所述步骤(7)统计数据块经过Huffman编码之后的数据块的大小过程是为了在得到每一个叶子节点码字长度的过程中,同时读取对应的频率缓存单元中对应字符的频率信息,通过乘法器单元计算出对频率缓存单元中字符进行Huffman编码之后的长度,同时计算出累计Huffman编码的长度;在得出每一个Huffman叶子节点的码字长度之后,也就得到了固定长度的数据块经过Huffman编码之后总大小。
10.根据权利要求2所述的动态Huffman编码硬件实现方法,其特征在于:所述步骤(10)Huffman编码统计之前对频率缓存单元的提前清空过程为数据打包单元启动,开始编码输出,同时主控状态机开始把频率缓存单元开始清空处理,为下一个数据块的Huffman编码开始做好准备。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210458012.XA CN102983866B (zh) | 2012-11-14 | 2012-11-14 | 一种动态Huffman编码硬件实现系统及其实现方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210458012.XA CN102983866B (zh) | 2012-11-14 | 2012-11-14 | 一种动态Huffman编码硬件实现系统及其实现方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102983866A true CN102983866A (zh) | 2013-03-20 |
CN102983866B CN102983866B (zh) | 2015-12-02 |
Family
ID=47857650
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201210458012.XA Expired - Fee Related CN102983866B (zh) | 2012-11-14 | 2012-11-14 | 一种动态Huffman编码硬件实现系统及其实现方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102983866B (zh) |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2015058633A1 (en) * | 2013-10-21 | 2015-04-30 | International Business Machines Corporation | Efficient one-pass cache-aware compression |
CN107094022A (zh) * | 2017-04-25 | 2017-08-25 | 福州大学 | 一种用于VLSI设计的Huffman编码系统及其实现方法 |
CN107294539A (zh) * | 2017-05-23 | 2017-10-24 | 浙江大学 | 一种准动态霍夫曼硬件编码器及编码方法 |
CN107565973A (zh) * | 2017-08-01 | 2018-01-09 | 中国人民解放军国防科学技术大学 | 一种结点可扩展的哈夫曼编码的实现方法及电路结构 |
CN108319454A (zh) * | 2018-03-27 | 2018-07-24 | 武汉中元华电电力设备有限公司 | 一种基于硬件fpga快速实现最优二叉树的方法 |
CN110493167A (zh) * | 2018-07-14 | 2019-11-22 | 北京数安鑫云信息技术有限公司 | 一种高效能深度威胁识别引擎的实现方法及系统 |
CN112698790A (zh) * | 2020-12-31 | 2021-04-23 | 浪潮云信息技术股份公司 | 一种存储系统中处理突发I/O的QoS控制方法及系统 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20050174269A1 (en) * | 2004-02-05 | 2005-08-11 | Broadcom Corporation | Huffman decoder used for decoding both advanced audio coding (AAC) and MP3 audio |
CN1925332A (zh) * | 2005-08-31 | 2007-03-07 | 中国科学院微电子研究所 | 基于关键字的变长解码器及方法 |
CN201966895U (zh) * | 2010-12-30 | 2011-09-07 | 无锡华润矽科微电子有限公司 | 一种jpeg霍夫曼解码电路 |
CN102244518A (zh) * | 2010-05-10 | 2011-11-16 | 百度在线网络技术(北京)有限公司 | 并行解压缩的硬件实现的系统及方法 |
-
2012
- 2012-11-14 CN CN201210458012.XA patent/CN102983866B/zh not_active Expired - Fee Related
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20050174269A1 (en) * | 2004-02-05 | 2005-08-11 | Broadcom Corporation | Huffman decoder used for decoding both advanced audio coding (AAC) and MP3 audio |
CN1925332A (zh) * | 2005-08-31 | 2007-03-07 | 中国科学院微电子研究所 | 基于关键字的变长解码器及方法 |
CN102244518A (zh) * | 2010-05-10 | 2011-11-16 | 百度在线网络技术(北京)有限公司 | 并行解压缩的硬件实现的系统及方法 |
CN201966895U (zh) * | 2010-12-30 | 2011-09-07 | 无锡华润矽科微电子有限公司 | 一种jpeg霍夫曼解码电路 |
Non-Patent Citations (2)
Title |
---|
刘洋等: "基于Huffman树的多类SVM方法", 《计算机工程与设计》, vol. 29, no. 7, 30 April 2008 (2008-04-30), pages 1792 - 1793 * |
武善玉等: "改进的Huffman编码及其应用", 《通信技术》, vol. 42, no. 1, 31 January 2009 (2009-01-31), pages 309 - 311 * |
Cited By (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2015058633A1 (en) * | 2013-10-21 | 2015-04-30 | International Business Machines Corporation | Efficient one-pass cache-aware compression |
US9252807B2 (en) | 2013-10-21 | 2016-02-02 | Globalfoundries Inc. | Efficient one-pass cache-aware compression |
CN107094022A (zh) * | 2017-04-25 | 2017-08-25 | 福州大学 | 一种用于VLSI设计的Huffman编码系统及其实现方法 |
CN107094022B (zh) * | 2017-04-25 | 2023-02-10 | 福州大学 | 一种用于VLSI设计的Huffman编码系统的实现方法 |
CN107294539A (zh) * | 2017-05-23 | 2017-10-24 | 浙江大学 | 一种准动态霍夫曼硬件编码器及编码方法 |
CN107294539B (zh) * | 2017-05-23 | 2020-04-28 | 浙江大学 | 一种准动态霍夫曼硬件编码器及编码方法 |
CN107565973A (zh) * | 2017-08-01 | 2018-01-09 | 中国人民解放军国防科学技术大学 | 一种结点可扩展的哈夫曼编码的实现方法及电路结构 |
CN107565973B (zh) * | 2017-08-01 | 2020-07-14 | 中国人民解放军国防科学技术大学 | 一种结点可扩展的哈夫曼编码的实现方法及电路结构 |
CN108319454A (zh) * | 2018-03-27 | 2018-07-24 | 武汉中元华电电力设备有限公司 | 一种基于硬件fpga快速实现最优二叉树的方法 |
CN110493167A (zh) * | 2018-07-14 | 2019-11-22 | 北京数安鑫云信息技术有限公司 | 一种高效能深度威胁识别引擎的实现方法及系统 |
CN110493167B (zh) * | 2018-07-14 | 2021-06-29 | 北京数安鑫云信息技术有限公司 | 一种高效能深度威胁识别引擎的实现方法及系统 |
CN112698790A (zh) * | 2020-12-31 | 2021-04-23 | 浪潮云信息技术股份公司 | 一种存储系统中处理突发I/O的QoS控制方法及系统 |
Also Published As
Publication number | Publication date |
---|---|
CN102983866B (zh) | 2015-12-02 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102983866B (zh) | 一种动态Huffman编码硬件实现系统及其实现方法 | |
CN104283567B (zh) | 一种名称数据的压缩、解压缩方法及设备 | |
CN103236847B (zh) | 基于多层哈希结构与游程编码的数据无损压缩方法 | |
Moffat | Word‐based text compression | |
CN102970043B (zh) | 一种基于gzip的压缩硬件系统及其加速方法 | |
CN104380267B (zh) | 数据解压/压缩装置 | |
CN105207678B (zh) | 一种改进型lz4压缩算法的硬件实现系统 | |
JP5456903B2 (ja) | メッシュ・モデルを符号化する方法及び装置、符号化されたメッシュ・モデル、並びに、メッシュ・モデルを復号化する方法及び装置 | |
WO2013001535A2 (en) | System, method and data structure for fast loading, storing and access to huge data sets in real time | |
CN104348490A (zh) | 一种基于效果优选的组合数据压缩算法 | |
CN1369970A (zh) | 使用前缀预测的位自适应编码方法 | |
CN104283568A (zh) | 一种基于部分霍夫曼树的数据压缩编码方法 | |
CN108873062A (zh) | 一种基于fpga的多编码器高速地震数据并行无损压缩方法 | |
CN108702160A (zh) | 用于压缩和解压缩数据的方法、设备和系统 | |
JP2003501749A (ja) | トリー構造に基づく機能的メモリ | |
CN116702708B (zh) | 一种道路路面施工数据管理系统 | |
CN117278054A (zh) | 一种智慧电网监控数据存储方法及系统 | |
CN104156990A (zh) | 一种支持特大型数据窗口的无损压缩编码方法及系统 | |
CN105025296B (zh) | 一种高级算术编码器及其实现方法 | |
CN202931291U (zh) | 一种动态Huffman编码硬件实现系统 | |
CN108182198A (zh) | 存储先进控制器运行数据的控制装置和读取方法 | |
CN106790550B (zh) | 一种适用于配电网监测数据压缩的系统 | |
CN116934487B (zh) | 一种金融清算数据优化存储方法及系统 | |
CN100568284C (zh) | 计算机图形数据编码装置、解码装置、编码和解码方法 | |
CN102724505A (zh) | Jpeg_ls游程编码fpga实现方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C53 | Correction of patent of invention or patent application | ||
CB02 | Change of applicant information |
Address after: Room E701 No. 20 building science and Technology Park Liye sensor network university 214135 Jiangsu province Wuxi City District Qingyuan Road Applicant after: WUXI XINXIANG ELECTRONIC TECHNOLOGY Co.,Ltd. Address before: 214135 Jiangsu Province, Wuxi City District Qingyuan Road Branch Park 530 building A room 512 Applicant before: WUXI XINXIANG ELECTRONIC TECHNOLOGY Co.,Ltd. |
|
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20151202 |
|
CF01 | Termination of patent right due to non-payment of annual fee |