一种基于上下文的快速哈夫曼解码方法技术

技术编号:3420857 阅读:208 留言:0更新日期:2012-04-11 18:40
本发明专利技术提出了一种基于上下文的快速哈夫曼解码方法,通过构造码表的结构,将码表构造成基于码值成规律性分布,然后利用构造后的码表来实现对比特流解码,在比特流解码过程中,采用基于上次的搜索结果作为本次搜索的起始位置,然后进行本次搜索来使码表中的每次搜索都对最终的搜索结果做出实质的贡献,来最大限度的减少运算的复杂度。

【技术实现步骤摘要】

本专利技术涉及编解码
,尤其涉及一种通过查表进行哈夫曼解码的方法。
技术介绍
哈夫曼编码是一种变长的无损数据压缩方法,广泛应用于语音,音频,视频,文本和数据等多媒体压缩领域,在MPEG(Moving Picture ExpertsGroup)、AVS(数字视音频编解码技术标准化工作组)、AC(Audio Coding)系列和H.26x(ITU-T视频编码标准)等音视频编码标准中,哈夫曼编码广泛被采用。哈夫曼编码利用了信号源符号的概率分布来确定符号编码的信息量,对于出现概率高的符号,采用短的码字来描述;对于出现概率低的符号,采用长的码字来描述。通过变长编码来消除信息之间的冗余,来实现对信号无损压缩的目的。目前常见的哈夫曼解码方法有线性搜索法、直接查表法、二进制搜索法和分步查表法。其中线性搜索法效率和二进制搜索法的效率较低,不适合实时性要求高的场合;直接查表法效率稍高,但是内存开销较大;分步查表法是二进制搜索法和直接查表法的折衷;但是效率还不是很高。在哈夫曼查表过程中,可以根据前面的搜索结果来进行下面的搜索查表,得到解码的结果,来使每一次的运算都为最终的结果做出贡献,从而最大程度地减少计算的复杂度,同时减少缓冲区的开销,这就是本专利中所提出的基于上下文的快速码字搜索算法。
技术实现思路
本专利技术提出了,每次搜索都对最终的搜索结果做出实质的贡献,最大限度的减少了运算的复杂度。为了达到上述目的,本专利技术提供了,包含以下步骤步骤1、哈夫曼码表的重新构造;步骤1.1、根据哈夫曼码表中码值的大小,按照从小到大的顺序进行排序,将排序后获得的新码值表存储在表Table_val中;步骤1.2、将从原来哈夫曼码值表映射到新码值表Table_val的映射关系存储到表Table_Index中;步骤1.3、按照表Table_Index中映射关系,将原哈夫曼码表中的码长表映射到表Table_len中;此时的表Table_val,Table_len和Table_Index就是步骤1构造成的新哈夫曼码表;步骤2、基于步骤1中所构造的新哈夫曼码表进行基于上下文的快速码字搜索方法步骤2.1、首先从比特流中取出1个比特位,并把读取的值赋值给val变量val=unpack(1);bitCnt=1;m=0;unpack(1)函数表示从码流中提取出一个比特位;bitCnt用来存储从比特流中提取的比特位数;m用来存储前一次在码表中搜索到的位置索引;val用来存储当前读取出bitCnt个比特位数后的值;步骤2.2、不断地从比特流中提取比特数赋值j=1;步骤2.3、若j<Maxbits,进行步骤2.4;其中,Maxbits是从码流中最大提取比特的位数;若j>=Maxbits,说明Maxbits设置错误,退出程序,校正Maxbits值;步骤2.4、查找val变量的当前值在哈夫曼码值表Table_val中的位置,该查找方法是基于上一次的查找结果m基础上的单调递增值,满足下面的关系Table_val<val<=Table_valm>0val<=Table_valm=0]]>步骤2.4.1、对码值表中的值进行逐个取值; 步骤2.4.2、判断当前值val是否小于等于表Table_val中的一个值Table_val,其中,i<Size,Size表示码表的大小;若是,更新变量后进行步骤2.5,若否,返回步骤2.4.1继续取值;步骤2.6、变量赋值n=(m+Rg);k=m;其中,Rg表示的是哈夫曼码值表中具有相同码值最多的个数;步骤2.7、判断当前值val和所对应的比特数bitCnt是否是要解码步骤2.7.1、判断当前从码流中共读取的位数bitCnt是否等于Table_len,其中,k≤n,如果是,进行步骤2.7.2;如果否,进行步骤2.7.3;步骤2.7.2、Table_Index和bitCnt即为解码得到的信息,结束运算;步骤2.7.3、将k的值加1k=k+1;步骤2.7.4、判断val的值是否不等于Table_val,如果是,进行步骤2.8。步骤2.8、将val值向左平移1位,val=val<<1;从比特流中读取一位unpack(1),并将结果累加到val值上,val=val+unpack(1);所提取的比特数增加1,bitCnt=bitCnt+1;则j++,返回进行步骤2.3;本专利技术提出了,通过构造码表的结构,将码表构造成具有基于码值成规律性分布,然后利用构造后的码表来实现对比特流解码,在比特流解码过程中,采用基于上次的搜索结果作为本次搜索的起始位置,然后进行本次搜索来使码表中的每次搜索都对最终的搜索结果做出实质的贡献,来最大限度的减少运算的复杂度。附图说明图1是本专利技术提供的中步骤2的步骤流程图。具体实施例方式以下根据图1,具体说明本专利技术的较佳实施方式如图1所示,本专利技术提供了,包含以下步骤 步骤1、哈夫曼码表的重新构造;步骤1.1、根据哈夫曼码表中码值的大小,按照从小到大的顺序进行排序,将排序后获得的新码值表存储在表Table_val中;步骤1.2、将从原来哈夫曼码值表映射到新码值表Table_val的映射关系存储到表Table_Index中;步骤1.3、按照表Table_Index中映射关系,将原哈夫曼码表中的码长表映射到表Table_len中;此时的表Table_val,Table_len和Table_Index就是步骤1构造成的新哈夫曼码表;步骤2、基于步骤1中所构造的新哈夫曼码表进行基于上下文的快速码字搜索方法步骤2.1、首先从比特流中取出1个比特位,并把读取的值赋值给val变量val=unpack(1);bitCnt=1;m=0;unpack(1)函数表示从码流中提取出一个比特位;bitCnt用来存储从比特流中提取的比特位数;m用来存储前一次在码表中搜索到的位置索引;val用来存储当前读取出bitCnt个比特位数后的值;步骤2.2、不断地从比特流中提取比特数赋值j=1;步骤2.3、若j<Maxbits,进行步骤2.4;其中,Maxbits是从码流中最大提取比特的位数;若j>=Maxbits,说明Maxbits设置错误,退出程序,校正Maxbits值;步骤2.4、查找val变量的当前值在哈夫曼码值表Table_val中的位置,该查找方法是基于上一次的查找结果m基础上的单调递增值,满足下面的关系Table_val<val<=Table_valm>0val<=Table_valm=0]]>步骤2.4.1、赋值i=m;若i<Size,进行步骤2.4.2;Size表示码表的大小;若i>=Size,说明Size设置错误,退出程序,校正Size值; 步骤2.4.2、判断当前值val是否小于等于表Table_val中的一个值Table_val,若是,将索引i值存储到变量m中,并且跳出步骤2.4,进行步骤2.5;若否,则i++,返回步骤2.4.1;步骤2.5、判断当前值val是否等于Table_val,若是,进行步骤2.6,若否,进行步骤2.8;步骤2.6、变量赋值n=(m+Rg);k=m;其中,Rg表示的是哈夫曼码值表中具有相同码值最多的个数本文档来自技高网...

【技术保护点】
一种基于上下文的快速哈夫曼解码方法,其特征在于,包含以下步骤:步骤1、哈夫曼码表的重新构造;步骤2、基于步骤1中所构造的新哈夫曼码表进行基于上下文的快速码字搜索方法。

【技术特征摘要】

【专利技术属性】
技术研发人员:谭建国
申请(专利权)人:上海广电集团有限公司中央研究院
类型:发明
国别省市:31[中国|上海]

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

1