首页 / 专利库 / 专利权 / 第I章 / 国际公布 / 提前公布 / 一种动态Huffman编码硬件实现系统及其实现方法

一种动态Huffman编码硬件实现系统及其实现方法

阅读:1006发布:2020-05-14

专利汇可以提供一种动态Huffman编码硬件实现系统及其实现方法专利检索,专利查询,专利分析的服务。并且本 发明 公布了一种动态Huffman编码 硬件 实现系统,该系统包括:数据打包单元, 频率 缓存单元,码字长度缓存单元,三个数据选择器单元,码字值缓存单元,主控状态机,父亲 节点 缓存单元,深度缓存单元,最小堆缓存单元,数据统计单元,加法器单元和乘法器单元。动态Huffman编码 硬件实现 方法,包括:快速的字符统计;建立Huffman树;建立Huffman表;编码输出;频率缓存单元的提前清空等步骤。本发明通过硬件实现了Huffman编码,并在Huffman编码的硬件实现过程中,采用了快速的字符统计方法、频率缓存单元提前清空等技术使得数据吞吐率有了明显的提升。,下面是一种动态Huffman编码硬件实现系统及其实现方法专利的具体信息内容。

1.一种动态Huffman编码硬件实现系统,其特征在于,所述系统包括:
一个频率缓存单元,用于存放数据流中每一个字符出现的频率;
一个最小堆缓存单元,用于维护频率缓冲单元中频率不为0的字符,使得这些字符在存储方式上呈现连续的形式,而这些字符在逻辑关系上呈现二叉树的形式,并且使得这棵二叉树满足:左节点和右节点都大于或者等于其父亲节点,为辅助构造Huffman树的过程做好准备;
一个父亲节点缓存单元,用于存放Huffman树中每一个节点的父亲节点,根节点除外;
一个深度缓存单元,用于存放整个Huffman树中每一个节点的深度,其中根节点的深度最大,叶子节点的深度是0;
一个码字值缓存单元,用于存放每一个字符对应的Huffman编码的值;
一个码字长度缓存单元,用于存放每一个字符对应的Huffman编码值所对应的码字长度;
一个乘法器单元,用于计算对待压缩数据采用动态Huffman编码之后数据块的大小;
一个数据统计单元,用于统计待压缩数据流中每一个字符出现的频率,并将统计的结果存放在频率缓存单元中;
一个主控状态机部分,根据频率缓存单元中存放的每一个字符的频率,通过最小堆缓存单元、父亲节点缓存单元、深度缓存单元来构造Huffman树及Huffman表,分别存放在码字值缓存单元及码字长度缓存单元中;
三个多路选择器单元,分别用于控制频率缓存单元在不同的工作阶段由主控状态机或者是由数据统计单元控制,和码字值缓存单元、码字长度缓存单元在不同的工作阶段分别由主控状态机或者是由数据打包输出单元进行控制;
一个数据打包输出单元,用于查询待编码的数据块中每一个字符,查询码字值缓存单元及码字长度缓存单元得到每一个字符的Huffman编码,并打包输出查询到的数据;
一个加法器单元,用于快速的字符统计,统计结果存放在频率缓存单元中。
2.一种基于权利要求1所述动态Huffman编码硬件实现系统动态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编码硬件实现系统及其实现方法

技术领域

[0001] 本发明涉及数据压缩技术。尤其涉及一种动态Huffman编码硬件实现系统及其实现方法。

背景技术

[0002] 在计算的海量数据处理中,数据的压缩、解压缩是非常重要的手段,可以大幅度的降低数据的存储空间,提升数据传输的吞吐率。
[0003] Huffman一种基于统计模式的无损压缩算法,主要包括以下几个基本的步骤:a)统计字符的频率。b)构造Huffman树。c) 创建Huffman表。d)编码输出。最终,在数据流中出现频率最高的字符给予最短的编码,而出现频率最低的给予最长的编码,这样就可以得到压缩的效果。
[0004] 使用软件结构实现Huffman树的过程中,需要采用二叉树数据结构,因此,我们需要定义一个结构体去表示Huffman 树中的每一个节点,在硬件描述语言Verilog及VHDL中没有数据结构。为了实现动态Huffman编码的结构,因此这里给出了Huffman编码的硬件实现系统并给出了Huffman编码硬件实现方法及加速方法。
[0005] 传统的Huffman实现方式中,一般是基于软件平台的实现方式,编码过程是串行处理的过程,而在Huffman编码的硬件实现过程中,采用了快速的字符统计方法、频率缓存单元提前清空等技术使得数据吞吐率有了明显的提升。

发明内容

[0006] 本发明要解决的一个技术问题是提供了一种动态Huffman编码硬件实现系统及其实现方法,能够利用极少的组合逻辑、时序逻辑以及存储器资源加以实现。
[0007] 本发明为实现上述目的,采用如下技术方案:
[0008] 一种动态Huffman编码硬件实现系统,其特征在于,所述系统包括:
[0009] 一个频率缓存单元,用于存放数据流中每一个字符出现的频率;
[0010] 一个最小堆缓存单元,用于维护频率缓冲单元中出现频率不为0的字符,使得这些字符在存储方式上呈现连续的形式,而这些字符在逻辑关系上呈现二叉树的形式,并且使得这棵二叉树满足:左节点和右节点都大于或者等于本节点,为辅助构造Huffman树的过程做好准备,其中叶子节点除外;
[0011] 一个父亲节点缓存单元,用于存放Huffman树中每一个节点的父亲节点;
[0012] 一个深度缓存单元,用于存放整个Huffman树中每一个节点的深度,其中根节点的深度最大,叶子节点的深度是0;
[0013] 一个码字值缓存单元,用于存放Huffman树中每一个叶子节点对应的Huffman编码的值;
[0014] 一个码字长度缓存单元,用于存放Huffman树中每一个节点对应的Huffman编码的码字长度;
[0015] 一个乘法器单元,用于计算对待压缩数据经过动态Huffman编码之后数据块的大小;
[0016] 一个数据统计单元,用于统计待压缩数据流中每一个字符出现的频率,并将统计的结果存放在频率缓存单元中;
[0017] 一个主控状态机部分,根据频率缓存单元中存放的每一个字符的频率,通过最小堆缓存单元、父亲节点缓存单元、深度缓存单元来构造Huffman树及Huffman表,分别存放在码字值缓存单元及码字长度缓存单元中;
[0018] 三个多路选择器单元,分别用于控制频率缓存单元在不同的工作阶段由主控状态机或者是由数据统计单元控制,和码字值缓存单元、码字长度缓存单元在不同的工作阶段分别由主控状态机或者是由数据打包输出单元进行控制;
[0019] 一个数据打包输出单元,用于查询待编码的数据块中每一个字符查询码字值缓存单元及码字长度缓存单元得到每一个字符的Huffman编码并打包输出;
[0020] 一个加法器单元,用于快速的字符统计,统计结果存放在频率缓存单元中。
[0021] 一种动态Huffman编码硬件实现方法,包括下述步骤:
[0022] (1)扫描待压缩的原始数据,并快速统计每一个字符出现的频率,依次存放在频率缓存单元;
[0023] (2)主控状态机读取频率缓存单元的数据并把出现频率不为0的字符顺序的放进最小堆缓存单元进行维护;
[0024] (3)利用最小堆缓存单元、父亲节点缓存单元、深度缓存单元构造Huffman树,其中Huffman树的信息最终也是存放在最小堆缓存单元中;
[0025] (4)遍历Huffman树,得到Huffman树中每一个叶子节点的码字长度;
[0026] (5)统计每一个非0码字长度字符的数目;
[0027] (6)根据每一个非0码字长度字符的数目去计算出每一个字符的Huffman码字值;
[0028] (7)统计数据块经过Huffman编码之后的数据块的大小;
[0029] (8)主控状态机部分把码字值缓存单元、码字长度缓存单元控制权交给数据打包单元;
[0030] (9)数据打包单元在得到码字值缓存单元及码字长度缓存单元的控制权之后,开始对原始的数据进行Huffman编码,并打包输出;
[0031] (10)主控状态机在进行对新的数据块进行统计之前对频率缓存单元的提前清空。
[0032] 其进一步特征在于:
[0033] 所述步骤(1)中字符快速统计通过加法器和频率缓存单元完成。
[0034] 所述步骤(2)中最小堆缓存单元进行维护过程为把频率缓存单元中的字符出现频率依次顺序的读出,并加以判断,如果不为0,就把该字符放进最小堆缓存单元中,一直到频率缓存单元中所有的叶子节点都读取并判断完毕,如果为0就不放进最小堆缓存单元中,在把字符依次存进最小堆缓存单元中的同时记录最小堆的长度,即最小堆缓存单元中有效的字符的数目,这些字符在逻辑关系上呈现二叉树的形式;
[0035] 从最小堆缓存单元中数据元素个数的一半开始一直到最小堆缓存单元的顶部依次调整这棵二叉树,使得这课二叉树中的每一个节点都满足左节点和右节点都大于或者等于本节点,其中叶子节点除外。
[0036] 所述步骤(3)中构造Huffman树的过程中从最小堆缓存单元的顶部读取第一个元素,并把这个元素存入最小堆缓存单元底部开始的第一个未被占用的单元中,此时最小堆缓存单元的长度减1,并将最小堆缓存单元的最后一个元素放进最小堆缓存单元的第一个元素的位置上,从第一个元素位置开始调整这棵二叉树,使得这棵二叉树中的每一个节点都满足左节点和右节点大于或者等于本节点,其中叶子节点除外;
[0037] 从最小堆缓存单元的顶部再读取第一个元素并把这个元素存入最小堆缓存单元底部开始的第一个未被占用的单元中,把最小堆缓存单元的长度减1,把从最小堆缓存单元中连续读取的元素组合成一个新的节点,这个新的节点的权值为两个连续读取的元素的权值的和,这个的新节点在整个Huffman树中的深度为两个连续读取元素中较大深度加1,并在父亲节点缓存单元中设置好两个连续读取的叶子节点的父亲节点为这个新得到的节点;
[0038] 把新得到的节点放入最小堆缓存单元的顶部,并把最小堆缓存单元的长度加1,从最小堆缓存单元的顶部开始依次调整最小堆中二叉树的节点,使得这棵二叉树满足左节点和右节点大于或者等于本节点,其中叶子节点除外;
[0039] 判断最小堆缓存单元的长度是否为0,若不为0,表示Huffman树未建好,继续Huffman树的建立;若为0,表示Huffman树已经全部建好,把读取的最后一个节点存入最小堆缓存单元底部开始第一个未被占用的单元中。
[0040] 所述步骤(4)遍历Huffman树,得到Huffman树中每一个叶子节点的码字长度过程中Huffman树已经建好,并存放在最小堆缓存单元中,从最小堆缓存单元中最新存入的那个单元开始,并在码字长度缓存单元中设置其对应的码字长度为0,并从Huffman树的根节点开始,依次遍历最小堆缓存单元中存放的Huffman树中剩余的每一个节点,依次设置好每一个叶子节点的码字长度,依次对应存放在码字长度缓存单元中。
[0041] 所述步骤(5)统计每一个非0码字长度字符的数目过程中在遍历Huffman树,得到每一个节点的码字长度时,主控状态机会同时统计出每一个码字长度的节点的个数,为计算Huffman编码的值作好准备。
[0042] 所述步骤(6)根据每一个非0码字长度字符的数目去计算出每一个字符的Huffman码字值的过程是为了得出Huffman树中每一个节点的码字值,统计出了每一个非0码字长度的个数,从Huffman树的最顶层依次向下进行推出Huffman树中每一个节点的码字值,并将叶子节点的码字值保存在码字值缓存单元中。
[0043] 所述步骤(7)统计数据块经过Huffman编码之后的数据块的大小过程是为了在得到每一个叶子节点码字长度的过程中,同时读取对应的频率缓存单元中对应字符的频率信息,通过乘法器单元计算出对频率缓存单元中字符进行Huffman编码之后的长度,同时计算出累计Huffman编码的长度;在得出每一个Huffman叶子节点的码字长度之后,也就得到了固定长度的数据块经过Huffman编码之后总大小。
[0044] 所述步骤(10)Huffman编码统计之前对频率缓存单元的提前清空过程为数据打包单元启动,开始编码输出,同时主控状态机开始把频率缓存单元开始清空处理,为下一个数据块的Huffman编码开始做好准备。
[0045] 本发明通过硬件实现了Huffman编码,并在Huffman编码的硬件实现过程中,采用了快速的字符统计方法、频率缓存单元提前清空等技术使得数据吞吐率有了明显的提升。附图说明
[0046] 图1给出了一种动态Huffman编码硬件实现系统的结构示意图。
[0047] 图2给出了一种动态Huffman编码硬件实现方法的状态转换图。

具体实施方式

[0048] 下面参照附图用本发明的示例性实施例对本发明进行更全面的描述和说明。
[0049] 如图1所示,一种动态Huffman编码硬件实现系统的结构示意图包括:数据打包单元100,数据选择器单元101,频率缓存单元102,数据选择器单元103,码字长度缓存单元104,数据选择器单元105,码字值缓存单元106,主控状态机107,父亲节点缓存单元108,深度缓存单元109,最小堆缓存单元110,数据统计单元111。
[0050] 数据打包单元100,用于把待压缩的数据通过查询码字长度缓存单元104及码字值缓存单元106得到每一个字符的Huffman编码并打包输出。
[0051] 数据选择器单元 101,用于选择频率缓存单元的控制权,在Huffman编码之前,数据选择器单元101选择数据统计单元111去控制频率缓存单元102;在构造Huffman编码过程中,数据选择器单元101选择主控状态机单元107去控制频率缓存单元102的控制权。
[0052] 频率缓存单元102,用于存放Huffman树中每一个叶子节点的频率。
[0053] 数据选择器单元103,用于控制码字长度缓存单元104的控制权,在得到Huffman树中每一个叶子节点的码字长度及码字值之前,数据选择器单元103选择主控状态机单元107去控制码字长度缓存单元104;在得到Huffman树中每一个叶子节点的码字长度及码字值之后,数据选择器单元103选择数据打包单元100去控制码字长度缓存单元104的控制权。
[0054] 码字长度缓存单元104,用于存放Huffman树中每一个叶子节点的码字长度。
[0055] 数据选择单元105,用于控制码字值缓存单元106的控制权,在得到Huffman树中每一个叶子节点的码字长度及码字值之前,数据选择器单元105选择主控状态机单元107去控制码字值缓存单元106;在得到Huffman树中每一个叶子节点的码字长度及码字值之后,数据选择单元105选择数据打包单元100去控制码字值缓存单元106。
[0056] 主控状态机单元107,通过借助父亲节点缓存单元108,深度缓存单元109,最小堆缓存单元110,去构建Huffman树,通过遍历Huffman树,得到Huffman树中每一个节点的码字长度,再根据码字长度去计算Huffman树中所有的叶子节点的码字值存放在码字值缓存单元106中,对应的叶子节点的码字长度存放于码字长度缓存单元104中。
[0057] 父亲节点缓存单元108,用于存放Huffman树中每一个节点的父亲节点,根节点除外。
[0058] 深度缓存单元109,用于存放Huffman树中每一个节点的深度,其中叶子节点的深度是0,根节点的深度最大。
[0059] 最小堆缓存单元110,用于维护Huffman树中所有的节点,使得这些节点在逻辑上构成一棵二叉树,并且满足左节点和右节点大于或者等于本节点,其中叶子节点除外。
[0060] 数据统计单元111,在Huffman主控状态机构造Huffman树之前,由数据统计单元111去统计每一个叶子节点出现的频率,并把这个统计的每一个字符的频率信息存放在频率缓存单元102中。
[0061] 如图2所示,一种动态Huffman编码硬件实现方法的状态转换图,主要状态包括:状态0000~状态0010
[0062] 在状态0000,图1中主控状态机单元107通过数据选择单元101获得频率缓存单元102的控制权,并把频率缓存单元中每一个数据存储单元都清空为0,为数据统计做好准备,并进入状态0001。
[0063] 在状态0001,图1中主控状态机单元107通过数据选择单元101开始释放频率缓存单元102的控制权,此时频率缓存单元102的控制权交给数据统计单元111并进入状态0002。
[0064] 在状态0002,图1中数据统计单元111开始对扫描待压缩的原始数据,并统计每一个字符出现的频率,依次存放在频率缓存单元102中,当原始数据块扫描完毕时,主控状态机单元107通过数据选择单元101回收频率缓存单元102的控制权,并开始进入状态0003。
[0065] 在状态0003,主控状态机单元开始从频率缓存单元102中依次顺序的读取数据,并把出现频率不为0的字符顺序的放进最小堆缓存单元110中,每存放一个元素最小堆的长度就加1,一直到把频率缓存单元中的数据读取完毕为止,在读取的过程中会进行判断如果一个字符没有出现,那么该字符的码字长度为0,此时主控状态机单元107开始把码字长度缓存单元104中对应的单元填写为0;如果出现了那么该字符定是叶子节点其深度为0,此时主控状态机单元开始把深度缓存单元109中对应的单元设置为0,重复执行状态0003,直到所有的节点读取完毕,并开始进入状态0004。
[0066] 在状态0004,主控状态机开始处理最小堆缓存单元110中存放的每一个字符,使得这些字符物理上呈现顺序存放,在逻辑上又构成了一棵二叉树,并且这棵二叉树满足:左节点和右节点大于或者等于本节点,其中叶子节点除外。在状态0004重复处理这个过程,直到最小堆中所有的叶子节点都满足:左节点和右节点大于或者等于本节点,叶子节点除外,最小堆缓存单元110中的数据处理好了之后,主控状态机单元开始进入状态0005。
[0067] 在状态0005,主控状态机开始从最小堆的顶部读取一个字符,此时最小堆缓存单元的长度减1,主控状态机单元107把这个字符从最小堆缓存单元110的底部开始顺序的向顶部存放,并把最小堆的有效字符的最后一个字符放进最小堆的顶部,此时最小堆的长度加1,并开始调整最小堆缓存单元110中的元素,使得最小堆缓存单元110中的每一个元素都满足::左节点和右节点大于或者等于本节点,叶子节点除外,调整好之后,主控状态机单元107再从最小堆缓存单元110中读取一个元素,此时最小堆的长度再次减1,主控状态机单元107再把这个新读取的字符从最小堆缓存单元110的底部顺序的向最小堆的顶部顺序的存放,并把两个连续读取的元素构成一个新的Huffman节点,即中间节点,并开始设置频率缓存单元102中这个新的节点的权值为连续读取的两个元素的权值之和,在深度缓存单元109中开始设置这个新节点的深度为连续读取的两个元素的深度最大值加1,主控状态机单元107此时还会在父亲节点缓存单元中设置之前连续读取元素的父亲节点为这个新得到的节点,处理完之后主控状态机单元107开始判断最小堆的长度是否为0,如果为0就表示Huffman树已经建好并顺序的从最小堆的底部向最小堆的顶部存放,并开始准备进入状态0006,否则就继续进入状态0005重复执行上述过程。
[0068] 在状态0006中,主控状态机单元107把最后一个存进最小堆缓存单元110中的节点读取出来,设置其码字长度为0,进入状态0007。
[0069] 在状态0007中,继续从最小堆缓存单元110中读取出一个元素,并在码字长度缓存单元104中设置其码字长度为其父亲节点的码字长度加1,每设置好一个节点的码字长度的同时主控状态机单元107会判断该节点是不是Huffman树中的叶子节点,如果是叶子节点主控状态机单元107就从频率缓存单元102中把该节点对应的频率读取出来,利用乘法器单元计算出采用Huffman编码待压缩数据块中所有的该节点最后总得长度是多长,重复执行步骤0007,在重复执行的过程中主控状态机单元107同时会统计出每一种码字长度所对应的节点的个数,当设置好Huffman树中所有节点的码字长度后就进入状态0008。
[0070] 在状态0008中,主控状态机单元107根据在状态0007中得出的每一种码字长度的个数去计算出所有节点的码字值,并分别存放在码字值缓存单元106中,并开始进入状态0009。
[0071] 在状态0009中,主控状态机单元107就通过数据选择单元103、105释放对码字长度缓存单元104及码字值缓存单元106的控制权,并把码字长度缓存单元104、码字值缓存单元106的控制权交给数据打包单元100,进入状态0010。
[0072] 在状态0010中,数据打包单元100开始工作,并依次读取原始待压缩数据块中的每一个字符,通过查询图1中码字长度缓存单元104及码字值缓存单元106开始输出压缩之后的数据。在状态0010中,数据打包单元开始工作的同时,主控状态机单元107也把频率缓存单元102中的每一个存储单元给清除。如果编码输出完成并且频率缓存单元102中的每一个单元都被清除那么,主控状态机就通过图1中数据选择单元103、105去获得图1中码字长度缓存单元104、码字值缓存单元106的控制权,并进入状态0000。
[0073] 在发明中,数据存储及数据控制部分构成的一个完成的系统,结构清晰,利于分析和设计,Huffman树及Huffman表的构造过程是由主控状态机去控制存放在各个数据缓存单元中的数据进行的,状态转换过程清晰。
[0074] 尽管本发明此处具体化一些特定的例子示出和描述,然而本发明不限制于所示出的细节,因为在不偏离本发明的精神以及在权利要求的范围和等同范围内,可以作出多种改进和结构变化。因此,宽范围地并且如权利要求中所阐明的在某种意义上与本发明的范围一致地解释附加的权利要求是适当的。
高效检索全球专利

专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

申请试用

分析报告

专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

申请试用

QQ群二维码
意见反馈