一种基于非完备码表解析码长的哈夫曼解码方法技术

技术编号:4323684 阅读:345 留言:0更新日期:2012-04-11 18:40
本发明专利技术公开了一种基于非完备码表解析码长的哈夫曼解码方法,步骤包括:构建所有用于级别比较解析的码表;确定非完备码表临界码长L;再构建L比特非完备码表;读取最大码长长度的码流数值,在对应的以各级哈夫曼最小码字为前缀的定长码字检索表里检索级别为(L+1)的码字;解析L级之后的首个码字长度;查取其对应符号值,完成码流中首个码字的解析;从当前码流中剔除已经解析的码字,重复上述步骤完成所有哈夫曼码的解码。本发明专利技术可以大大减少存储空间和加快了检测速度;当最大码长为16时,其空间复杂度只有完备码表解析法的,极大地节省了存取空间。

【技术实现步骤摘要】

本专利技术涉及一种哈夫曼解码方法,尤其涉及一种基于非完备码表快速解析码长的哈夫曼解码方法。
技术介绍
哈夫曼算法是一种根据待压縮数据中各元素出现的概率进行编码和解码的算法, 能无损的压縮数据所占用的空间。图1是一个哈夫曼码字生成树的例子,以其码字为叶子, 码字所属层数为级别数。 解析哈夫曼码时,先确定要解析的码流的首个码字长度,将其取出,用哈夫曼编码 提供的符号表就可以找到这个码字所对应的数据元素。除去码流里的首个码字,将剩余的 码流按上述方法逐一解析,即可完成哈夫曼的解码过程。由于哈夫曼编码是变长编码,在整 个解码过程中,必须解决的一个问题是确定哈夫曼码字的长度,以下描述了哈夫曼解码中 码字长度解析的常见解决方案 1、级别比较解析法。基于哈夫曼码字生成树建立一个叶子检索表来指示最近下一 级存在哈夫曼码字的级别(等同码字长度),并将同一级上最小码字作为前缀位,其余位补 O,扩充到最大码长长度。以哈夫曼前缀码所在级别为索引,以这个扩充码为索引值,建一 张各级最小哈夫曼码字为前缀的定长码字检索表。在哈夫曼码码长解析时,按叶子检索表 O级检索下一级别,并以这个下一级别检索定长码字检索表里的码字,取出最大码长长度的 码流数值与之比较,如果这个码流数值不小于定长码字检索表里的码字,叶子检索表的当 前级别用下一级别替换,并用这个新的当前级别检索下一级存在叶子的级别,然后用这个 新的下一级级别检索定长码字检索表里的码字,用码流数值与之比较,直到码流数值小于 定长码字检索表里的码字,此时叶子检索表里当前级别和码流里存在的码字长度相同。 2、完备码表解析法。基于码流中所包含的所有哈夫曼码字生成树的叶子码字,建 立一张完备码长码表。这个完备码长码表的每项索引以哈夫曼码字为前缀、按一定规则扩 展到最大码长长度,其索引值为相应的哈夫曼前缀码码长。对于当前待解析的哈夫曼码流, 按照其待解析码字所属的哈夫曼码字生成树,在定长码字完备码长码表中检索到与这个哈 夫曼码字生成树相对应的码表部分。以最大码字长度截取当前待解析的哈夫曼码流,并将 这个截取出的码流数值作为索引,在当前码流哈夫曼码字生成树对应的码长码表部分检 索,检索到的当前码长码表值即为当前待解析码流中首个码字码长。 得到码长后提取首个码字,在当前哈夫曼码字生成树所对应的符号表中即可解析 到当前码字所对应的数据。从码流中除去已解析的部分,在剩余码流中继续逐个操作,即可 完成所有哈夫曼码的解析。 现有普遍使用的哈夫曼解码算法虽然利用了编码表体现的码字出现的概率,并基 于哈夫曼码生成树各级叶子的存在性对检索算法进行了优化,但对于绝大部分码字,码长 均需要多次才能确定,在总的解码算法中耗时比例较大;基于完备码表解析码长虽然提高 了码长解析速度,但是对于嵌入式系统的硬件存储要求而言,其空间复杂度增加太大,难以满足要求。 在音频、视频领域,基于哈夫曼数据压縮的编码、解码算法在嵌入式系统中应用非 常广泛。在哈夫曼算法中,码字以变长二进制前缀码表示,为了解析一个哈夫曼码字,必须 先解析哈夫曼码字的字长,传统的码长解析算法不是速度过慢就是码表数据量过大,如何 在不增加码表数据量的同时减少码长解析的时间,这对于哈夫曼解码有很重要的意义。
技术实现思路
本专利技术目的在于提供,该方法可 以大大减少码表占用的储存空间和加快解码速度。 本专利技术的目的可以通过以下方案实现一种基于非完备码表的哈夫曼解码方法, 步骤包括 1、按级别比较解析法,构建所有用于级别比较解析的码表,包括叶子检索表和各 级哈夫曼最小码字为前缀的定长码字检索表; 2、确定非完备码表临界码长L :从最小码长和最大码长之间选择一个值L,作为构 建非完备码表的临界码长; 3、基于码流中所包含的所有哈夫曼码字生成树的不超过临界码长L比特的叶子 码字,再构建一个以哈夫曼码字为前缀的L比特非完备码表; 4、按照当前码流中待解析部分所属的哈夫曼码字生成树,读取最大码长长度的码 流数值,以这个码流数值为索引,按照当前待解析码流所属的哈夫曼码字生成树,在对应的 以各级哈夫曼最小码字为前缀的定长码字检索表里检索级别(码长)为(L+l)的码字; 5、比较码流数值与刚检索到的(L+l)级的定长码字,若码流数值小于刚检索到的 码字,以码流数值的前L比特为新的索引,在对应的非完备码长码表部分检索,检索到的值 即为当前码流待解析部分首个码字码长;反之,以旧的码流数值作为比较对象,按照级别比 较解析法,解析其对应的L级之后的首个码字长度; 6、根据已解析的码长,在当前码流中提取其码字,基于码字对应的符号表,查取其 对应符号值,即可完成码流中首个码字的解析; 7、从当前码流中剔除已经解析的码字,将剩余码流重复步骤4、5、6,即可完成所有 哈夫曼码的解码。 所述的非完备码长码表以码流包含的每个哈夫曼码字生成树为单位,按相同的方 式逐一构建;对于每棵哈夫曼码字生成树,以不超过L比特的哈夫曼码字为前缀,其余位由 全0到全1扩展到L比特长度,建立非完备码长码表的索引;索引指向的值为哈夫曼前缀码 码长。 所述的每个哈夫曼码字生成树对应的码长码表部分构建过程首先,按照对应的 哈夫曼码字生成树,构建L比特长度的各个比特位为全O到全1的索引,并将所有索引值 (即码长码表值)初始化为0 ;以哈夫曼生成树的所有不超过L比特叶子码子为前缀,将剩 余码字位以全0到全1填充到L比特长度,将所有同哈夫曼码字前缀的扩充码的码长码表 值以对应哈夫曼前缀码的长度赋值。 本专利技术可以大大减少存储空间和加快了检测速度。例如当最大码长为N( —般为416)时,级别比较解析法的码长解析时间复杂度为o(l>, x/ )—其中Pi为码长为i的码字的统计概率,每个描述符对应的码长码表空间复杂度为N ;完备码表码长解析时间复杂 度为O(l),对应每个描叙符的完备码长码表空间复杂度为(2~N);对比于这两种技术,非完备码表码长解析法的时间复杂度为0(1+^P, XZ'),接近于完备码表马场时间解析复杂度,其对应的每个描述符的空间复杂度为(2'8+N),按普通码长16计算,其空间复杂度只有完 备码表解析法的i ,极大地节省了存取空间。附图说明 图1是现有技术中的哈夫曼码字生成树; 图2是本专利技术的单个哈夫曼码字生成树对应的非完备码长码表生成流程示意图; 图3是本专利技术的码长解析流程示意图。具体实施例方式先构建一个基于级别比较解析法的用于检索定长码字的码表;按现有技术中的级 别比较解析法,构建所有用于级别比较解析的码表,包括叶子检索表和各级哈夫曼最小码 字为前缀的定长码字检索表; 再构建一个以哈夫曼码字为前缀的L比特非完备码表基于码流中所包含的所有 哈夫曼码字生成树的不超过L比特的叶子码字,建立一张非完备码长码表,L为构建非完备 码表的临界码长,从最小码长和最大码长之间选择,对于最大码长为16位的码表,推荐使 用8作为临界码长L。这个非完备码长码表的每项索引以不超过L比特的哈夫曼码字为前 缀、其余由全0到全1扩展到L比特长度,其索引值为相应的哈夫曼前缀码码长。在这个非 完备码长码表的构建过程中,以码流包含的每个哈夫曼码字生成树为单位,按相同的方式 逐一构建。 每个哈夫曼码字生成树对应的码长码表部分构建本文档来自技高网
...

【技术保护点】
一种基于非完备码表解析码长的哈夫曼解码方法,其特征在于,步骤包括:(a)、按级别比较解析法,构建所有用于级别比较解析的码表,包括叶子检索表和各级哈夫曼最小码字为前缀的定长码字检索表;(b)、确定非完备码表临界码长L:从最小码长和最大码长之间选择一个值L,作为构建非完备码表的临界码长;(c)、基于码流中所包含的所有哈夫曼码字生成树的不超过临界码长L比特的叶子码字,再构建一个以哈夫曼码字为前缀的L比特非完备码表;(d)、按照当前码流中待解析部分所属的哈夫曼码字生成树,读取最大码长长度的码流数值,以这个码流数值为索引,按照当前待解析码流所属的哈夫曼码字生成树,在对应的以各级哈夫曼最小码字为前缀的定长码字检索表里检索级别(码长)为(L+1)的码字;(e)、比较码流数值与刚检索到的(L+1)级的定长码字,若码流数值小于刚检索到的码字,以码流数值的前L比特为新的索引,在对应的非完备码长码表部分检索,检索到的值即为当前码流待解析部分首个码字码长;反之,以旧的码流数值作为比较对象,按照级别比较解析法,解析其对应的L级之后的首个码字长度;(f)、根据已解析的码长,在当前码流中提取其码字,基于码字对应的符号表,查取其对应符号值,即可完成码流中首个码字的解析;(g)、从当前码流中剔除已经解析的码字,将剩余码流重复步骤d、e、f,即可完成所有哈夫曼码的解码。...

【技术特征摘要】

【专利技术属性】
技术研发人员:裴少芳苏丹叶广明胡胜发
申请(专利权)人:安凯广州软件技术有限公司
类型:发明
国别省市:81[中国|广州]

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1