CN103905054B - 构建码表的方法和装置,编码、解码方法和装置 - Google Patents

构建码表的方法和装置,编码、解码方法和装置 Download PDF

Info

Publication number
CN103905054B
CN103905054B CN201210573145.1A CN201210573145A CN103905054B CN 103905054 B CN103905054 B CN 103905054B CN 201210573145 A CN201210573145 A CN 201210573145A CN 103905054 B CN103905054 B CN 103905054B
Authority
CN
China
Prior art keywords
code
code word
information
list item
bit number
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
Application number
CN201210573145.1A
Other languages
English (en)
Other versions
CN103905054A (zh
Inventor
王森
林福辉
罗小伟
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Spreadtrum Communications Shanghai Co Ltd
Original Assignee
Spreadtrum Communications Shanghai Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Spreadtrum Communications Shanghai Co Ltd filed Critical Spreadtrum Communications Shanghai Co Ltd
Priority to CN201210573145.1A priority Critical patent/CN103905054B/zh
Publication of CN103905054A publication Critical patent/CN103905054A/zh
Application granted granted Critical
Publication of CN103905054B publication Critical patent/CN103905054B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • Compression, Expansion, Code Conversion, And Decoders (AREA)

Abstract

一种构建码表的方法和装置,编码、解码方法和装置。所述构建码表的方法包括:将变长编码的所有码字按高位对齐后进行排序;对排序后的每个码字簇执行至少一步表项构造处理直至所有码字对应的标识信息均为叶子节点;所述表项构造处理包括:为所述码字簇确定下一步要读取的比特数;当码字的码长小于或等于已读取的比特数总和,则对应构造第一信息为对应该码字的信息、第二信息为当前读取的比特数中有效的比特数以及标识信息为叶子节点的表项;当码字的码长大于已读取的比特数总和,则对应构造第一信息为对应该码字的下一表项的位置信息、第二信息为下一步要读取的比特数以及标识信息为中间节点的表项。本发明技术方案提高了解码效率。

Description

构建码表的方法和装置,编码、解码方法和装置
技术领域
本发明涉及编解码技术领域,特别涉及一种构建码表的方法和装置、编码方法和装置,基于码表的解码方法和装置。
背景技术
哈夫曼编码(Huffman Coding)是一种变长的无损数据压缩方法,利用信号源符号的概率分布来确定符号编码的信息量,对出现概率高的符号,采用短的码字描述,对于出现概率低的符号,采用长的码字来描述。
在多媒体压缩领域,哈夫曼编码是一种被广泛应用的算法。根据应用环境的不同,对哈夫曼解码的速度和解码时需要储存的码表大小有不同的要求。如在高清视频解码时,由于码率很高,解码速度要求很高;并且,由于码表一般储存在片上,对码表大小也有一定要求。
现有的解码方法包括线性搜索法、直接查表法、级别比较解析法和分步查表法等。
线性搜索法,按码字非减的顺序将码本排成一个表,每次读进一个比特,然后看排序的表中是否有完全匹配,如有则找到索引,没有则继续查找。这种方法的优点是所用的表比较小,但是读取每一位后都进行检索,解码速度太慢。
直接查表法,基于码字建立一张完备码长码表,这个完备码长码表的每项索引以哈夫曼码字为前缀,按一定规则扩展到最大码长长度,其索引值为相应哈夫曼前缀码码长。解码时,以最大码字长度截取码流,并将这个截取出的码流值作为索引,在码长码表中检索,得到码字码长。这种方法每解析一个码字只需一次查表,但对于最大码字长度为n的码表,需要2n个表项,当n比较大时,其码表的空间开销过大。
级别比较解析法,由于哈夫曼码字树并不一定每一级都有叶子,级别比较解析在线性搜索法的基础上,用一个叶子检索表来指示最近下一级存在哈夫曼码字的级别,并将同一级上最小码字作为前缀位,其余位补0,扩充到最大码长长度,用这个码建成一张定长码字检索表。解码时,将码流中取出的最大码字长度的数值与定长码字检索表里的码字从头开始逐步比较,直到码流数值小于定长码字检索表的码字,此时叶子检索表里当前级别数和码字长度相同。级别比较解析法相比线性搜索法能减少一定的检索次数,但这种减少依赖于哈夫曼码字树本身的结构,如果哈夫曼树有叶子节点的级别很多,则这种算法带来的效果改善就很小,其速度可能无法满足要求。
分步查表法,在码表中加入索引来指明下一次查表的位置,这样查表工作就被分为若干次完成,每次读入固定的比特数,如果命中则输出解码值,否则根据当前位置索引值去码表进行下一步搜索。分步查表法将查表过程分为多步,在一定程度上取得解码速度与码表大小的平衡,但每一步读取固定长度码流,使得码表中存在着大量冗余表项,增大了不必要的码表大小。
发明内容
本发明技术方案要解决的技术问题是现有的解码方法难以很好的满足解码速度和码表大小的要求。
为解决上述技术问题,本发明技术方案提供一种构建码表的方法,包括:
将变长编码的所有码字按高位对齐后进行排序;
对排序后的每个码字簇执行至少一步表项构造处理直至所有码字对应的标识信息均为叶子节点,所述码字簇为具有相同前缀的码字,所述前缀的比特数为第一步要读取的比特数;
所述表项构造处理包括:
为所述码字簇确定下一步要读取的比特数;
当所述码字簇中的码字的码长小于或等于已读取的比特数总和,则对应构造第一信息为对应该码字的信息、第二信息为当前读取的比特数中有效的比特数以及标识信息为叶子节点的表项;
当所述码字簇中的码字的码长大于已读取的比特数总和,则对应构造第一信息为对应该码字的下一表项的位置信息、第二信息为下一步要读取的比特数以及标识信息为中间节点的表项。
可选的,所述排序为从小到大排序。
可选的,在所述表项构造处理中,若码字簇中连续多个码字的码长均大于已读取的比特数总和,则仅对其中第一个码字构造对应的表项。
可选的,在所述表项构造处理中,当码字的码长小于已读取的比特数总和,还构造与该码字对应的表项相同的冗余表项。
可选的,所述前缀的比特数满足:码字簇的数量小于或等于2L0,其中L0为前缀的比特数。
可选的,所述下一步要读取的比特数满足:下一步读取到的Li比特的码字数据在[0,2Li-1]的范围内,其中Li为下一步要读取的比特数。
可选的,所述下一步要读取的比特数满足:下一步读取到的Li比特的码字数据尽量多地覆盖[0,2Li-1]的范围。
可选的,所述变长编码为哈夫曼编码。
为解决上述技术问题,本发明技术方案还提供一种编码方法,包括:
采用变长编码方式进行信息编码,以获得变长码码表,所述变长码码表的表项包括变长编码的码字及其对应的信息;
采用所述构建码表的方法对所述变长码码表进行重构。
为解决上述技术问题,本发明技术方案还提供一种基于码表的解码方法,所述码表采用所述的构建码表的方法构建,所述解码方法包括:
将码表位置偏移vld_table_offset和码字长度flush_bits初始化为0,将应读码流长度nbits初始化为所述第一步要读取的比特数;
重复执行表项检索步骤直至得到的表项的标识信息为叶子节点;
所述表项检索步骤包括:读取码流数据的前nbits数据nbits_data;以(vld_table_offset+nbits_data)为索引检索所述码表;当得到的表项的标识信息为中间节点,则将所述码流数据左移nbits,令flush_bits=flush_bits+nbits,vld_table_offset=该表项的第一信息,nbits=该表项的第二信息;
当得到的表项的标识信息为叶子节点,输出当前码字的解码结果,所述解码结果包括:码字对应的信息为该表项的第一信息,码字长度等于flush_bits与该表项的第二信息之和。
可选的,所述码流数据为从码流中读取的N比特数据,N大于或等于最大码字长度。
可选的,所述码流为音频码流或视频码流。
与现有技术相比,本发明技术方案提出的每一步读取比特数可调整的分步式查表法是基于传统的分步式查表法,在保留分步式查表法能够平衡解码速度和码表大小的优点的同时,不仅每一步读取的比特数可调整,对不同码字,每一步解码读取的比特数也不一样,这样可以有效的减少码表中的冗余项,进一步减少码表大小。并且,所构建的码表包括解码过程中的全部信息,解码过程中无需其他表的辅助,从而提高解码效率。
附图说明
图1是本发明实施例的构建码表的方法的流程示意图;
图2是原始的哈夫曼码表的实例示意图;
图3是图2所示的哈夫曼码表中的码字扩充并排序后的实例示意图;
图4是图3所示的实例经第一步表项构造处理得到的表项示意图;
图5是图3所示的实例经第二步表项构造处理得到的表项示意图;
图6是图3所示的实例经第三步表项构造处理得到的表项示意图;
图7是图3所示的实例经三步表项构造处理后得到的码表示意图;
图8是本发明实施例的编码方法的流程示意图;
图9是本发明实施例的基于码表的解码方法的流程示意图;
图10是本发明实施例的构建码表的装置的结构示意图;
图11是本发明实施例的编码装置的结构示意图;
图12是本发明实施例的基于码表的解码装置的结构示意图。
具体实施方式
下面结合实施例和附图对本发明技术方案进行详细说明。
如图1所示,本实施例的构建码表的方法首先执行步骤S11,将所有码字按高位对齐后进行排序。所述码字为经变长编码处理得到的码字,本实施例所述的变长编码为哈夫曼编码,本领域技术人员可以理解,本发明技术方案也可适用于其他类型的变长编码。
本实施例中,将所有码字按高位对齐可以是将原始的哈夫曼码表(或者哈夫曼生成树)中所有码字按如下方式扩充到码字长度(码长)均为最大码长的码字:info_left_aligned=info<<(max_length-length),其中,info为原始的哈夫曼码表中的码字,length为该码字对应的码长,max_length为哈夫曼表中最长码字的码长(即最大码长),info_left_aligned为扩充后的码字(简称扩充码字),<<为左移操作,左移后其余位可以补0。然后,对扩充码字进行排序,一般是从小到大排序。以原始的哈夫曼码表为图2所示为例,原始的哈夫曼码表的每一表项包括码字及其对应的信息(信号源符号),码字扩充并按从小到大排序后如图3所示,其中,扩充码字中粗体部分代表原始的码字。
执行步骤S11后,对排序后的每个码字簇执行至少一步表项构造处理直至所有码字对应的标识信息均为叶子节点,具体包括步骤S12~S16。
步骤S12,为每个码字簇确定下一步要读取的比特数。
步骤S13,对每个码字簇中的码字,判断码字的码长是否大于已读取的比特数总和,若是则执行步骤S14,若否则执行步骤S15。
步骤S14,对应码长大于已读取的比特数总和的码字,构造第一信息为对应该码字的下一表项的位置信息、第二信息为下一步要读取的比特数以及标识信息为中间节点的表项。
步骤S15,对应码长小于或等于已读取的比特数总和的码字,构造第一信息为对应该码字的信息、第二信息为当前读取的比特数中有效的比特数以及标识信息为叶子节点的表项。
步骤S16,判断是否所有码字对应的标识信息均为叶子节点,若是则完成码表构建,若否则执行步骤S12。
下面结合图3至图7进一步详细说明。码字簇是由具有相同前缀的码字组成,其中,前缀的比特数大于1,可以综合解码速度和码表大小的要求而确定。通常,可以根据下述条件来确定前缀的比特数:码字簇的数量小于或等于2L0,L0为前缀的比特数。结合图3所示的实例,考虑到L0太小会增加解析步数,影响解码速度;L0太大会增加码表的冗余表项,影响码表大小,可以设定L0=3,那么码字簇的数量为5个,分别是以000为前缀的码字簇,包括4个码字;以001为前缀的码字簇,包括1个码字;以010为前缀的码字簇,包括8个码字;以011为前缀的码字簇,包括11个码字;以1xx为前缀的码字簇,包括1个码字。前缀的比特数也称为第一步要读取的比特数,即在解码时第一步应读取的码流长度。
构建码表就是为每个码字构造至少一个对应的表项,每个表项包括第一信息I、第二信息M和标识信息F,通过多步表项构造处理完成码表的构建。
第一步表项构造处理:
执行步骤S12,对于以000为前缀的码字簇,确定下一步要读取的比特数L1(000)为2;对于以010为前缀的码字簇,确定下一步要读取的比特数L1(010)为3;对于以011为前缀的码字簇,确定下一步要读取的比特数L1(011)为4。
这里需要说明的是,下一步要读取的比特数只要大于0都可以实施本方案,但较好地是,在确定每个码字簇的下一步要读取的比特数时,要综合考虑对解码速度和码表大小的影响,具体来说,如果下一步要读取的比特数Li太小,则会使得解析步骤过多,影响解码速度;如果Li太大,则会使得码表的冗余表项过多,影响码表大小;其中,i为当前表项构造处理的步数,如L1表示在第一步表项处理中确定的第二步要读取的比特数,L2表示在第二步表项构造处理中确定的第三步要读取的比特数。
通常,可以根据下述条件确定Li:在一个码字簇中,所有下一步读取到的Li比特的码字数据在[0,2Li-1]的范围内。举例来说,以000为前缀的码字簇,L1(000)=2,第二步读取到的码字数据为00、01、10、11,以十进制表示也就是从[0,3];以010为前缀的码字簇,L1(010)=3,第二步读取到的码字数据为000、001、010、011、100,这些数据落在了[0,7]的范围内。
进一步,在码字簇中,所有下一步读取到的Li比特的码字数据应当尽量多地覆盖[0,2Li-1]的范围。举例来说,以011为前缀的码字簇,L1(011)=4,第二步读取到的码字数据为0000、0001、0010、0011、0100、0101、0110、0111,有8个数据落在了[0,15]的范围内;如果将L1(011)设为5,那么有9个数据落在了[0,31]的范围内;如果将L1(011)设为3,那么有4个数据落在了[0,7]的范围内。相比之下,L1(011)设为3或4最大程度地覆盖了[0,2Li-1]的范围,进一步考虑到对解码速度的影响,因此将L1(011)设为4。
接着执行步骤S13~S15,对每个码字簇中的码字,判断码字的码长是否大于已读取的比特数总和,若是则对应构造第一信息I为对应该码字的下一表项的位置信息、第二信息M为下一步要读取的比特数Li以及标识信息F为中间节点的表项;若否则对应构造第一信息I为对应该码字的信息、第二信息M为当前读取的比特数中有效的比特数以及标识信息F为叶子节点的表项。
其中已读取的比特数总和表示为∑Lj,其中j=0~(m-1),m为当前表项构造处理的步数,如在第一步表项处理时,已读取的比特数总和为L0;在第二步表项构造处理时,已读取的比特数总和为(L0+L1);在第三步表项处理时,已读取的比特数总和为(L0+L1+L2)。
图3所示的实例在经过第一步表项构造处理后,得到图4所示的表项,其中,码字中的粗体部分表示当前读取的码字数据,当前读取的码字数据的比特数就是当前读取的比特数中有效的比特数,表项的位置信息以索引表示。
在以000为前缀的码字簇中,由于连续的4个码字的码长均大于L0,可以只对第一个码字即00000构造一个表项,这样可以减小表项的数量,从而减少码表大小。在对应码字00000的表项中,I为对应00000的下一表项的位置信息(用粗体表示该信息需要在第二步表项构造处理后才能确定),M=L1(000)=2,F=0,本实施例中以F=0表示中间节点,以F=1表示叶子节点,在其他实施例中也可以是以F=1表示中间节点,以F=0表示叶子节点。同样地,以010为前缀的码字簇中连续的8个码字的码长均大于L0,仅对第一个码字010000构造一个表项,I为对应010000的下一表项的位置信息,M=L1(010)=3,F=0。以011为前缀的码字簇中连续的11个码字的码长均大于L0,仅对第一个码字0110000构造一个表项,I为对应0110000的下一表项的位置信息,M=L1(011)=4,F=0。
以001为前缀的码字簇中仅包含一个码字,码字001的码长等于L0,则构造对应码字001的表项包括I=A1,M=3,F=1。
以1xx为前缀的码字簇中仅包含一个码字,码字1的码长小于L0,则构造对应码字1的表项包括I=A0,M=1,F=1。需要说明的是,当码字的码长小于已读取的比特数总和时,还需再构造与该码字对应的表项相同的冗余表项,冗余表项的数量根据该码字当前读取的码字数据确定。通常,冗余表项的数量可以根据下述方式确定:如果该码字是其所属码字簇的最后一个码字,则x=D2-D1,x为冗余表项的数量,D2为该码字中当前读取的码字数据按当前步读取的比特数补1后得到的数值,D1为该码字中当前读取的码字数据按当前步读取的比特数补0得到的数值,例如,对于图4所示的码字1,D2=111(二进制)=7(十进制),D1=100=4,对应的冗余表项的数量为3,索引为5、6、7对应的表项为对应码字1的冗余表项。如果该码字不是其所属码字簇的最后一个码字,则x=D3-D1-1,D3为该码字的后一码字中当前读取的码字数据按当前步读取的比特数补0得到的数值,举例来说,码字000 0的后一码字为000 100,读取000后,当前步读取的比特数为3,那么D3=100=4,D1=000=0对应码字000 0的冗余表项的数量为3;码字000 0的后一码字为000 01,读取000后,当前步读取的比特数为3,那么D3=010=2,D1=000=0对应码字000 0的冗余表项的数量为1。
在对每个码字簇中的码字构造一次表项后,继续执行步骤S16,判断是否所有码字对应的标识信息均为叶子节点,图4中码字00000、010000、0110000对应的标识信息均为F=0,则再次执行步骤S12,即进行第二步表项构造处理。
第二步表项构造处理的原理及过程与第一步表项构造处理基本相同,其中,对于以010为前缀的码字簇,确定下一步要读取的比特数L2(010)为2;对于以011为前缀的码字簇,确定下一步要读取的比特数L2(011)为2。经第二步表项构造处理得到的表项如图5所示,其中码字00000对应的索引、码字010000对应的索引、码字0110000对应的索引分别为第一步表项处理中对应码字00000的I、对应码字010000的I、对应码字0110000的I,索引为17、18、19对应码字0101的冗余表项。图5中码字01001000、011001000对应的标识信息均为F=0,则再次执行步骤S12,即进行第三步表项构造处理。
第三步表项构造处理的原理及过程与第一步表项构造处理基本相同,但在执行步骤S12时判断出已经不存在下一步要读取的码字数据,也就是每个码字簇的下一步要读取的比特数均为0。经第三步表项构造处理得到的表项如图6所示,其中码字01001000对应的索引、码字011001000对应的索引分别为第二步表项处理中对应码字01001000的I、对应码字011001000的I。执行步骤S16,图6中所有码字对应的标识信息均为F=1,则完成码表构建。
通过上述过程,最终得到的码表可以如图7所示。其中,以000为前缀的码字簇进行了两步表项构造处理,以001为前缀的码字簇进行了一步表项构造处理,以010为前缀的码字簇进行了三步表项构造处理,以011为前缀的码字簇进行了三步表项构造处理,以1xx为前缀的码字簇进行了一步表项构造处理。
基于上述构建码表的方法,本实施例的编码方法如图8所示,包括:步骤S21,采用变长编码方式进行信息编码,以获得变长码码表,所述变长码码表的表项包括变长编码的码字及其对应的信息;步骤S22,采用所述构建码表的方法对所述变长码码表进行重构。以图2所示的变长码表为例,重构后得到的新码表如图7所示。
基于上述构建码表的方法,本实施例的基于码表的解码方法如图9所示,包括:
步骤S31,将码表位置偏移vld_table_offset和码字长度flush_bits初始化为0,将应读码流长度nbits初始化为所述第一步要读取的比特数L0;然后,重复执行表项检索步骤直至得到的表项的标识信息为叶子节点;具体地,所述表项检索步骤包括步骤S32~S34。
步骤S32,读取码流数据bsm_data的前nbits数据nbits_data;以(vld_table_offset+nbits_data)为索引检索所述码表;
步骤S33,判断得到的表项的标识信息F是否为中间节点,若是则执行步骤S34,若否则执行步骤S35;
步骤S34,当得到的表项的标识信息为中间节点,则将所述码流数据bsm_data左移nbits,令flush_bits=flush_bits+nbits,vld_table_offset=该表项的第一信息I,nbits=该表项的第二信息M;
步骤S35,当得到的表项的标识信息为叶子节点,输出当前码字的解码结果,所述解码结果包括:码字对应的信息为该表项的第一信息I,码字长度等于flush_bits与该表项的第二信息M之和。
下面以码流数据bsm_data=01100101001001000010100011为例,结合图7所示的码表,对解码过程进行详细说明。其中,所述码流数据可以是从编码后的音频码流或视频码流中读取的N比特数据,N大于或等于最大码字长度。
1)执行步骤S31,vld_table_offset=0,flush_bits=0,nbits=L0=3;
2)执行步骤S32,nbits_data=011(二进制表示)=3(十进制表示);以vld_table_offset+nbits_data=3为索引,检索图7所示的码表,得到I=20、M=4、F=0;F=0则执行步骤S34;
3)执行步骤S34,bsm_data=00101001001000010100011,flush_bits=flush_bits+3=3,vld_table_offset=I=20,nbits=M=4;
5)执行步骤S32,nbits_data=0010=2;以vld_table_offset+nbits_data=22为索引,检索图7所示的码表,得到I=32、M=2、F=0;
6)执行步骤S34,bsm_data=1001001000010100011,flush_bits=flush_bits+4=7,vld_table_offset=I=32,nbits=M=2;
7)执行步骤S32,nbits_data=10=2;以vld_table_offset+nbits_data=34为索引,检索图7所示的码表,得到I=A23、M=2、F=1;F=1则执行步骤S35;
8)执行步骤S35,码字对应的信息为A23,码字长度为flush_bits+M=9。
可以继续将码流数据bsm_data左移nbits,bsm_data=01001000010100011,重复上述步骤1)至8),解析得到后一码字对应的信息为A17;通过类似的过程可以依次得到后续的码字对应的信息为A2,A6。
本实施例的构建码表的装置如图10所示,包括排序单元10和处理单元11。排序单元10适于将变长编码的所有码字按高位对齐后进行排序;处理单元11适于对排序后的每个码字簇执行至少一步表项构造处理直至所有码字对应的标识信息均为叶子节点,所述码字簇为具有相同前缀的码字,所述前缀的比特数为第一步要读取的比特数。
处理单元11进一步包括确定子单元110、第一构造子单元111和第二构造子单元112。确定子单元110适于为所述码字簇确定下一步要读取的比特数;第一构造子单元111适于当所述码字簇中的码字的码长小于或等于已读取的比特数总和,则对应构造第一信息为对应该码字的信息、第二信息为当前读取的比特数中有效的比特数以及标识信息为叶子节点的表项;第二构造子单元112适于当所述码字簇中的码字的码长大于已读取的比特数总和,则对应构造第一信息为对应该码字的下一表项的位置信息、第二信息为下一步要读取的比特数以及标识信息为中间节点的表项。
所述构建码表的装置可以集成在编码装置中,也可以集成在解码装置中。
本发明实施例的编码装置如图11所示,包括编码单元20和重构单元21。编码单元20适于采用变长编码方式进行信息编码,以获得变长码码表,所述变长码码表的表项包括变长编码的码字及其对应的信息;重构单元21适于对所述变长码码表进行重构。
重构单元21进一步包括排序单元10和处理单元11。排序单元10适于将变长编码的所有码字按高位对齐后进行排序;处理单元11适于对排序后的每个码字簇执行至少一步表项构造处理直至所有码字对应的标识信息均为叶子节点,所述码字簇为具有相同前缀的码字,所述前缀的比特数为第一步要读取的比特数。
处理单元11进一步包括确定子单元110、第一构造子单元111和第二构造子单元112。确定子单元110适于为所述码字簇确定下一步要读取的比特数;第一构造子单元111适于当所述码字簇中的码字的码长小于或等于已读取的比特数总和,则对应构造第一信息为对应该码字的信息、第二信息为当前读取的比特数中有效的比特数以及标识信息为叶子节点的表项;第二构造子单元112适于当所述码字簇中的码字的码长大于已读取的比特数总和,则对应构造第一信息为对应该码字的下一表项的位置信息、第二信息为下一步要读取的比特数以及标识信息为中间节点的表项。
本发明实施例的基于码表的解码装置如图12所示,所述码表采用上述的构建码表的装置构建,所述解码装置包括初始化单元30、控制单元31和输出单元32,控制单元31进一步包括读取子单元310、检索子单元311和设置子单元312。
初始化单元30适于将码表位置偏移vld_table_offset和码字长度flush_bits初始化为0,将应读码流长度nbits初始化为所述第一步要读取的比特数;控制单元31适于重复执行表项检索步骤直至得到的表项的标识信息为叶子节点。
读取子单元310适于读取码流数据的前nbits数据nbits_data;检索子单元311适于以(vld_table_offset+nbits_data)为索引检索所述码表;设置子单元312适于当所述检索子单元得到的表项的标识信息为中间节点,则将所述码流数据左移nbits,令flush_bits=flush_bits+nbits,vld_table_offset=该表项的第一信息,nbits=该表项的第二信息。
输出单元32适于当所述检索子单元得到的表项的标识信息为叶子节点,输出当前码字的解码结果,所述解码结果包括:码字对应的信息为该表项的第一信息,码字长度等于flush_bits与该表项的第二信息之和。
综上所述,本发明技术方案提出一种每一步读取比特数可调整的分步式查表法,可根据具体的解码速度及码表大小要求,调整分布查表步数及每步解析码流的长度,使在解码速度达到要求的同时能尽量减少码表大小。并且,所构建的码表包括解码过程中的全部信息,解码过程中无需其他表的辅助,从而提高解码效率。
本发明虽然已以较佳实施例公开如上,但其并不是用来限定本发明,任何本领域技术人员在不脱离本发明的精神和范围内,都可以利用上述揭示的方法和技术内容对本发明技术方案做出可能的变动和修改,因此,凡是未脱离本发明技术方案的内容,依据本发明的技术实质对以上实施例所作的任何简单修改、等同变化及修饰,均属于本发明技术方案的保护范围。

Claims (15)

1.一种构建码表的方法,其特征在于,包括:
将变长编码的所有码字按高位对齐后进行排序;
对排序后的每个码字簇执行至少一步表项构造处理直至所有码字对应的标识信息均为叶子节点,所述码字簇为具有相同前缀的码字,所述前缀的比特数为第一步要读取的比特数;
所述表项构造处理包括:
为所述码字簇确定下一步要读取的比特数;
当所述码字簇中的码字的码长小于或等于已读取的比特数总和,则对应构造第一信息为对应该码字的信息、第二信息为当前读取的比特数中有效的比特数以及标识信息为叶子节点的表项;
当所述码字簇中的码字的码长大于已读取的比特数总和,则对应构造第一信息为对应该码字的下一表项的位置信息、第二信息为下一步要读取的比特数以及标识信息为中间节点的表项。
2.如权利要求1所述的构建码表的方法,其特征在于,所述排序为从小到大排序。
3.如权利要求1所述的构建码表的方法,其特征在于,在所述表项构造处理中,若码字簇中连续多个码字的码长均大于已读取的比特数总和,则仅对其中第一个码字构造对应的表项。
4.如权利要求1所述的构建码表的方法,其特征在于,在所述表项构造处理中,当码字的码长小于已读取的比特数总和,还构造与该码字对应的表项相同的冗余表项。
5.如权利要求1所述的构建码表的方法,其特征在于,所述前缀的比特数满足:码字簇的数量小于或等于2L0,其中L0为前缀的比特数。
6.如权利要求1所述的构建码表的方法,其特征在于,所述下一步要读取的比特数满足:下一步读取到的Li比特的码字数据在[0,2Li-1]的范围内,其中Li为下一步要读取的比特数。
7.如权利要求6所述的构建码表的方法,其特征在于,所述下一步要读取的比特数满足:下一步读取到的Li比特的码字数据尽量多地覆盖[0,2Li-1]的范围。
8.如权利要求1所述的构建码表的方法,其特征在于,所述变长编码为哈夫曼编码。
9.一种编码方法,其特征在于,包括:
采用变长编码方式进行信息编码,以获得变长码码表,所述变长码码表的表项包括变长编码的码字及其对应的信息;
采用权利要求1至8任一项所述构建码表的方法对所述变长码码表进行重构。
10.一种基于码表的解码方法,其特征在于,所述码表采用权利要求1至8任一项所述的构建码表的方法构建,所述解码方法包括:
将码表位置偏移vld_table_offset和码字长度flush_bits初始化为0,将应读码流长度nbits初始化为所述第一步要读取的比特数;
重复执行表项检索步骤直至得到的表项的标识信息为叶子节点;
所述表项检索步骤包括:读取码流数据的前nbits数据nbits_data;以(vld_table_offset+nbits_data)为索引检索所述码表;当得到的表项的标识信息为中间节点,则将所述码流数据左移nbits,令flush_bits=flush_bits+nbits,vld_table_offset=该表项的第一信息,nbits=该表项的第二信息;
当得到的表项的标识信息为叶子节点,输出当前码字的解码结果,所述解码结果包括:码字对应的信息为该表项的第一信息,码字长度等于flush_bits与该表项的第二信息之和。
11.如权利要求10所述的解码方法,其特征在于,所述码流数据为从码流中读取的N比特数据,N大于或等于最大码字长度。
12.如权利要求11所述的解码方法,其特征在于,所述码流为音频码流或视频码流。
13.一种构建码表的装置,其特征在于,包括:
排序单元,适于将变长编码的所有码字按高位对齐后进行排序;
处理单元,适于对排序后的每个码字簇执行至少一步表项构造处理直至所有码字对应的标识信息均为叶子节点,所述码字簇为具有相同前缀的码字,所述前缀的比特数为第一步要读取的比特数;
所述处理单元包括确定子单元、第一构造子单元和第二构造子单元;
所述确定子单元,适于为所述码字簇确定下一步要读取的比特数;
所述第一构造子单元,适于当所述码字簇中的码字的码长小于或等于已读取的比特数总和,则对应构造第一信息为对应该码字的信息、第二信息为当前读取的比特数中有效的比特数以及标识信息为叶子节点的表项;
所述第二构造子单元,适于当所述码字簇中的码字的码长大于已读取的比特数总和,则对应构造第一信息为对应该码字的下一表项的位置信息、第二信息为下一步要读取的比特数以及标识信息为中间节点的表项。
14.一种编码装置,其特征在于,包括:
编码单元,适于采用变长编码方式进行信息编码,以获得变长码码表,所述变长码码表的表项包括变长编码的码字及其对应的信息;
重构单元,适于对所述变长码码表进行重构,所述重构单元包括排序单元和处理单元;
所述排序单元,适于将变长编码的所有码字按高位对齐后进行排序;
所述处理单元,适于对排序后的每个码字簇执行至少一步表项构造处理直至所有码字对应的标识信息均为叶子节点,所述码字簇为具有相同前缀的码字,所述前缀的比特数为第一步要读取的比特数;
所述处理单元包括确定子单元、第一构造子单元和第二构造子单元;
所述确定子单元,适于为所述码字簇确定下一步要读取的比特数;
所述第一构造子单元,适于当所述码字簇中的码字的码长小于或等于已读取的比特数总和,则对应构造第一信息为对应该码字的信息、第二信息为当前读取的比特数中有效的比特数以及标识信息为叶子节点的表项;
所述第二构造子单元,适于当所述码字簇中的码字的码长大于已读取的比特数总和,则对应构造第一信息为对应该码字的下一表项的位置信息、第二信息为下一步要读取的比特数以及标识信息为中间节点的表项。
15.一种基于码表的解码装置,其特征在于,所述码表采用权利要求13所述的构建码表的装置构建,所述解码装置包括:初始化单元、控制单元和输出单元;
所述初始化单元,适于将码表位置偏移vld_table_offset和码字长度flush_bits初始化为0,将应读码流长度nbits初始化为所述第一步要读取的比特数;
所述控制单元,适于重复执行表项检索步骤直至得到的表项的标识信息为叶子节点;所述控制单元包括:读取子单元、检索子单元和设置子单元;
所述读取子单元,适于读取码流数据的前nbits数据nbits_data;
所述检索子单元,以(vld_table_offset+nbits_data)为索引检索所述码表;
所述设置子单元,适于当所述检索子单元得到的表项的标识信息为中间节点,则将所述码流数据左移nbits,令flush_bits=flush_bits+nbits,vld_table_offset=该表项的第一信息,nbits=该表项的第二信息;
所述输出单元,适于当所述检索子单元得到的表项的标识信息为叶子节点,输出当前码字的解码结果,所述解码结果包括:码字对应的信息为该表项的第一信息,码字长度等于flush_bits与该表项的第二信息之和。
CN201210573145.1A 2012-12-25 2012-12-25 构建码表的方法和装置,编码、解码方法和装置 Active CN103905054B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201210573145.1A CN103905054B (zh) 2012-12-25 2012-12-25 构建码表的方法和装置,编码、解码方法和装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201210573145.1A CN103905054B (zh) 2012-12-25 2012-12-25 构建码表的方法和装置,编码、解码方法和装置

Publications (2)

Publication Number Publication Date
CN103905054A CN103905054A (zh) 2014-07-02
CN103905054B true CN103905054B (zh) 2017-05-24

Family

ID=50996228

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201210573145.1A Active CN103905054B (zh) 2012-12-25 2012-12-25 构建码表的方法和装置,编码、解码方法和装置

Country Status (1)

Country Link
CN (1) CN103905054B (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111384967B (zh) * 2018-12-28 2022-12-09 上海寒武纪信息科技有限公司 数据编码方法

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1144583A (zh) * 1994-04-01 1997-03-05 多尔拜实验特许公司 用于编码器/译码器系统的紧凑型源编码表
CN1369970A (zh) * 2001-02-09 2002-09-18 胡笑平 使用前缀预测的位自适应编码方法
CN1826732A (zh) * 2003-09-02 2006-08-30 诺基亚公司 霍夫曼编码和解码

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100486251B1 (ko) * 2002-08-03 2005-05-03 삼성전자주식회사 가변 길이 코드 복호화 장치 및 방법
US7825835B2 (en) * 2008-12-15 2010-11-02 Nvidia Corporation Method and system for encoded video compression

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1144583A (zh) * 1994-04-01 1997-03-05 多尔拜实验特许公司 用于编码器/译码器系统的紧凑型源编码表
CN1369970A (zh) * 2001-02-09 2002-09-18 胡笑平 使用前缀预测的位自适应编码方法
CN1826732A (zh) * 2003-09-02 2006-08-30 诺基亚公司 霍夫曼编码和解码

Also Published As

Publication number Publication date
CN103905054A (zh) 2014-07-02

Similar Documents

Publication Publication Date Title
CN106560010B (zh) Vlsi高效霍夫曼编码设备和方法
KR101049699B1 (ko) 데이터의 압축방법
US9768802B2 (en) Look-ahead hash chain matching for data compression
CN105893337B (zh) 用于文本压缩和解压缩的方法和设备
US9077368B2 (en) Efficient techniques for aligned fixed-length compression
US9223765B1 (en) Encoding and decoding data using context model grouping
US8988257B2 (en) Data compression utilizing variable and limited length codes
US10902937B2 (en) Lossless compression of DNA sequences
CN101783788B (zh) 文件压缩、解压缩方法、装置及压缩文件搜索方法、装置
US20200294629A1 (en) Gene sequencing data compression method and decompression method, system and computer-readable medium
CN112506879B (zh) 数据处理方法及相关设备
CN109981108B (zh) 数据压缩方法、解压缩方法、装置及设备
CN103905054B (zh) 构建码表的方法和装置,编码、解码方法和装置
CN104682966B (zh) 列表数据的无损压缩方法
CN101741392B (zh) 一种快速解析码长的哈夫曼解码方法
Gagie et al. Efficient and compact representations of prefix codes
US7930435B2 (en) Hub and spoke compression
US9697899B1 (en) Parallel deflate decoding method and apparatus
CN105630870B (zh) 搜索请求处理方法及系统
KR20160102593A (ko) 분포데이터의 블럭화를 이용한 허프만 부호화의 효율화 방법 및 그 장치
CN116996077A (zh) 面向时序浮点数据的有损压缩方法、解压方法及设备
Klein et al. Parallel Lempel Ziv Coding
CN118174737A (zh) 基于语义的哈夫曼编码方法、译码方法及相关设备
Mesut et al. ISSDC: Digram coding based lossless data compression algorithm
Kärkkäinen et al. Near in place linear time minimum redundancy coding

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant
TR01 Transfer of patent right

Effective date of registration: 20180418

Address after: 300456 Tianjin Binhai New Area free trade pilot area (Dongjiang Bonded Port Area), Asia Road 6865 financial and Trade Center North District 1 Building 1 door 1802 room -7

Patentee after: Xinji Lease (Tianjin) Co.,Ltd.

Address before: Zuchongzhi road in Pudong Zhangjiang hi tech park Shanghai 201203 Lane 2288 Pudong New Area Spreadtrum Center Building 1

Patentee before: SPREADTRUM COMMUNICATIONS (SHANGHAI) Co.,Ltd.

TR01 Transfer of patent right
EE01 Entry into force of recordation of patent licensing contract

Application publication date: 20140702

Assignee: SPREADTRUM COMMUNICATIONS (SHANGHAI) Co.,Ltd.

Assignor: Xinji Lease (Tianjin) Co.,Ltd.

Contract record no.: 2018990000196

Denomination of invention: Method and device for coding and decoding image signal using image block time and space relationship

Granted publication date: 20170524

License type: Exclusive License

Record date: 20180801

EE01 Entry into force of recordation of patent licensing contract
TR01 Transfer of patent right

Effective date of registration: 20221018

Address after: 201203 Shanghai city Zuchongzhi road Pudong New Area Zhangjiang hi tech park, Spreadtrum Center Building 1, Lane 2288

Patentee after: SPREADTRUM COMMUNICATIONS (SHANGHAI) Co.,Ltd.

Address before: 300456 Tianjin Binhai New Area free trade pilot area (Dongjiang Bonded Port Area), Asia Road 6865 financial and Trade Center North District 1 Building 1 door 1802 room -7

Patentee before: Xinji Lease (Tianjin) Co.,Ltd.

TR01 Transfer of patent right