CN101093998A - 解码方法及装置 - Google Patents
解码方法及装置 Download PDFInfo
- Publication number
- CN101093998A CN101093998A CN 200710140980 CN200710140980A CN101093998A CN 101093998 A CN101093998 A CN 101093998A CN 200710140980 CN200710140980 CN 200710140980 CN 200710140980 A CN200710140980 A CN 200710140980A CN 101093998 A CN101093998 A CN 101093998A
- Authority
- CN
- China
- Prior art keywords
- index
- word group
- code
- coded word
- suffix
- 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
Images
Landscapes
- Compression, Expansion, Code Conversion, And Decoders (AREA)
Abstract
一种解码方法及装置。首先,读取编码字组(code word)。接着,计数字首的位数目,并将编码字组予以移位,以移除编码字组的字首及字中位。根据字首的位数目,于索引字组表中查询读取预设的索引字组。根据索引字组的类别符号,判定编码字组所属类别;并进行功能运算,以得到编码字组相关的索引(index)及编码字组长度。最后,根据索引,至多个码表之一查询得到对应的解码字。
Description
技术领域
本发明是有关一种解码方法及装置,特别是一种变长编码(VLC)的解码方法及装置。
背景技术
变长编码(Variable-Length Code,VLC)(例如Huffman编码)是一种根据熵量(entropy)或机率大小而改变编码长度的一种无损(lossless)压缩编码;藉此,传输频宽及储存空间容量需求得以减低,因而极适用于一些高速***的应用,例如高解析电视(HDTV)信号的实时储存、编辑及传送。此种编码也普遍使用于现今一些国际影像/视频的压缩标准中。再者,现今对于无线可携式电子装置的需求趋势,在这些装置中使用嵌入式的特定信号处理器(DSP),使得对存储器空间的使用效率也变得重要。
传统技术中存在多种关于变长编码(VLC)的解码方法。其中一种是以树状算法对编码字组(code word)的位逐个进行解码。解码过程是以树状结构的根部(root)开始,依序根据编码字组的位而逐次进入树状结构的分支(branch)。此种解码方法或装置需要使用对应至树状结构的逻辑及控制电路,用以在树状结构中前进。由于位在树状结构中进行移位(shifting)需要耗费相当的时间,因此速度慢是此种树状算法的最大缺点,特别是对于较长的编码字组。
另一种传统解码方法是以查表(table-lookup)方式来取代树状算法。在此种查表方法中,将待解码的编码字组与单一编码字组表(codeword table)直接作比对,在这个编码字组表中,储存有解码字(decoded word)以及变长编码字组的长度。于解码过程中,当编码字组与编码字组表当中的一项产生匹配(match)时,即可得到相对应的解码字。接着,依据查询得到的编码字组长度,将相对应字符移出位串流,以准备进行下一个解码。此种查表解码方法虽然避免了树状算法的缺点,然而却需要使用一个相当庞大的存储空间来存放其编码字组表。
对于视频标准MPEG-4而言,其使用三种变长编码来对离散余弦转换(DCT)系数作编码-以Table B-16对图框内微区块(INTRA macroblock)作编码,以Table B-17对图框间微区块(INTER macroblock)作编码,以Table B-23对可逆变长编码(RVLC)的微区块作编码。对于另一种常用视频标准H.263而言,其仅使用Table 13来同时对图框内微区块(INTRA macroblock)及图框间微区块(INTER macroblock)作编码,其内容与Table B-17/MPEG-4相同。视频标准MPEG-4的Table B-16/B-17的变长编码长度界于3至13位间,最后一位是符号位(sign bit),由于其不进行解码,因此,最大的解码位数目为12。一般的解码器以下列两种码表来进行变长编码的解码:以DCT3DtabXval来存放MPEG-4的Table B-16/B-17,而以DCT3DtabXlen来存放相对应的编码字组长度。传统查表方法一般使用含有212(=4096)笔项目的DCT3DtabXval及DCT3DtabXlen码表。然而,MPEG-4的Table B-16或B-17仅含有103个有效字组项目,因而得知,DCT3DtabXval及DCT3DtabXlen表中存在非常多的重复(redundancy或duplicate)字组。视频标准H.263的TMN-8解码器使用两个临界值将码表分为三部分。其仅需使用7位(而非传统的12位)来形成各个码表的记载项目。此方法虽然较传统单一码表方式省下不少的储存空间,然而仍然具有不少的重复字组。
为了进一步改善查表解码方法,另有一种传统解码方法提出,其使用前置位“0”(leading zeros)并根据此前置位“0”的数目来区分为多个码表。例如,使用一至八个前置位“0”,因而将码表分为总共九个码表。此解码方法虽然进一步改善传统的解码方法,然而其仍然具有不少的重复字组。再者,其需要在码表中同时储存记载编码字组长度,用以进行解码过程。然而,对于使用***单芯片(SOC)的***而言,其存储器空间通常需要分享于各处理器与硬件电路之间,因此存储器通常会使用单一长度(例如16位)的字组(word)。前述的编码字组长度一般仅需三至四位即足以表示,却必须存放在16位长度的存储器内,造成相当的浪费。
鉴于上述传统各种解码方法所存在的缺点,因此亟需提出一种新的解码方法或装置,不但能减少码表中的重复字组,并能提升存储器空间的使用效率。
发明内容
本发明的目的之一在于提出一种变长编码(VLC)的解码方法与装置,用以减少查表中的重复字组,并提升存储器空间的使用效率。
根据本发明实施例之一的解码方法,首先,读取编码字组(code word),其包含多个位,该编码字组包含字首(prefix)、字中、字尾(suffix)三部分。计数字首的位数目;并将编码字组予以移位,以移除字首及字中的位。根据字首的位数目,于索引字组表中查询读取预设的索引字组,其包含基底索引、类别(class)符号、多个字尾长度。根据类别符号,判定编码字组所属类别;并进行功能运算,以得到编码字组相关的索引(index)及编码字组长度。最后,根据索引,至多个码表之一查询得到对应的解码字。
根据本发明另一实施例的解码装置,位读取装置从位串流读取包含多个位的编码字组(code word),其包含字首(prefix)、字中、字尾(suffix)三部分。字首位数的计数装置计数字首的位数目;而位移位装置将编码字组予以移位,以移除字首及字中的位。索引字组读取装置根据字首的位数目,于索引字组表中查询读取预设的索引字组,其包含基底索引、类别(class)符号、多个字尾长度。类别判定装置根据类别符号,判定编码字组所属类别。段落判定装置检视移位编码字组的最高至少一位,以判定所属段落(part)。索引值及编码字组长度产生装置进行功能运算,以得到编码字组相关的索引(index)及编码字组长度。最后,解码字查询装置根据索引,至多个码表之一查询得到对应的解码字。
附图说明
图1A显示编码字组的组成。
图1B显示索引字组的组成。
图2显示本发明实施例的解码方法的详细流程图。
图3显示应用前述流程以进行解码及得到索引、编码字组长度的三个例子。
图4显示根据本发明实施例的解码装置方块图。
[主要元件标号说明]
20、21、22、23、24、25A、25B、25D、26A1、26A2、26B1、26B2、26B3、26C图2的解码步骤
40、41、42、43、43A、44、45、46、47、47A图3的解码装置组成方块
具体实施方式
本发明实施例的变长编码(Variable-Length Code,VLC)的解码方法/装置是以视频标准MPEG-4的码表(code table或table)B-16/B-17为例,然而其可稍加修改而同样适用于其它视频标准,例如H.263。本发明实施例实施于***单芯片(SOC)的微数字信号处理器(MicroDSP)中,然而,本发明也可以使用软件方式或结合软硬件方式来实施。
根据本实施例,变长编码的码表是区分为九个群组(group),如以下码表table I至IX所示。每一个码表包含有三个主要部分:索引(index)、解码字、编码字组(code或code word);其中,解码字包含有图框内编码(intra)及图框间编码(inter)。各个码表是根据编码字组的前置位“0”(leadingzeros)的数量来分组。例如,如果编码字组不具有前置位“0”,则归类于码表table I(亦即,第一群组(group 1));如果编码字组具有一个前置位“0”,则归类于码表table II(亦即,第二群组(group 2));其余依此类推。
Table I group 1:leading_zeros=0,base_index=0
index | intra | inter | codes | ||||
last | run | level | last | run | level | ||
0 | 0 | 0 | 1 | 0 | 0 | 1 | 10s |
1234 | 0000 | 0010 | 2213 | 0000 | 1120 | 1112 | 110sx110sx1110s1111s |
Table II group 2:leading_zeros=1,base_index=5
index | intra | inter | codes | ||||
last | run | level | last | run | level | ||
56789101112 | 00000000 | 43001022 | 11872611 | 00000000 | 98761055 | 11112311 | 010000s010001s010010s010011s010100s010101s01011sx01011sx |
13141516 | 0011 | 0000 | 5411 | 0011 | 4300 | 1111 | 01100s01101s0111sx0111sx |
Table III group 3:leading_zeros=2,base_index=17
index | intra | inter | codes | ||||
last | run | level | last | run | level | ||
1718192021222324 | 11010000 | 43657210 | 11111239 | 11110000 | 87651211100 | 11111114 | 0010000s0010001s0010010s0010011s0010100s0010101s0010110s0010111s |
25262728 | 1011 | 0521 | 2111 | 1111 | 4321 | 1111 | 001100s001101s001110s001111s |
Table IV group 4:leading_zeros=3,base_index=29
index | intra | inter | codes | ||||
last | run | leve | last | run | leve | ||
2930313233343536 | 00000011 | 10400088 | 516215141311 | 00000011 | 161543001616 | 11227611 | 000100000s000100001s000100010s000100011s000100100s000100101s00010011sx00010011sx |
37383940 | 1110 | 76010 | 1131 | 1111 | 15141312 | 1111 | 00010100s00010101s00010110s00010111s |
4142434445464748 | 00100000 | 98931000 | 11124121110 | 11100000 | 111091413210 | 11111235 | 00011000s00011001s00011010s00011011s00011100s00011101s00011110s00011111s |
Table V group 5:leading_zeros=4,base_index=49
index | intra | inter | codes | ||||
last | run | leve | last | run | leve | ||
4950515253545556 | 00111111 | 00141413131212 | 1817111111 | 00111111 | 00242423232222 | 98111111 | 0000100000s0000100001s000010001sx000010001sx000010010sx000010010sx000010011sx000010011sx |
57585960 | 1111 | 111010 | 1124 | 1111 | 21201918 | 1111 | 000010100s000010101s000010110s000010111s |
6162636465666768 | 00000000 | 1211765321 | 11222336 | 11000000 | 170222120191817 | 12111111 | 000011000s000011001s000011010s000011011s000011100s000011101s000011110s000011111s |
Table VI group 6:leading_zeros=5,base_index=69
index | intra | inter | codes | ||||
last | run | level | last | run | level | ||
6970717273747576 | 01001111 | 0019341516 | 2324822211 | 00001111 | 01232429303132 | 125111111 | 00000100000s00000100001s00000100010s00000100011s00000100100s00000100101s00000100110s00000100111s |
77787980818283848586878889909192 | 0000000001111111 | 000161271405617181920 | 25262793105318221111 | 0000000011111111 | 124561025263334353637383940 | 6433321111111111 | 000001010000s000001010001s000001010010s000001010011s000001010100s000001010101s000001010110s000001010111s000001011000s000001011001s000001011010s000001011011s000001011100s000001011101s000001011110s000001011111s |
93 | Escape | Escape | 0000011s |
Table VII group7:leading_zeros=6,base_index=94
index | intra | inter | codes | ||||
last | run | level | last | run | level | ||
949596979899100101 | 00000000 | 58432100 | 3234472019 | 00000000 | 98765321 | 22222334 | 0000001000s0000001001s0000001010s0000001011s0000001100s0000001101s0000001110s0000001111s |
Table VIII group8:leading_zeros=7,base_index=102
index | intra | inter | codes | ||||
last | run | level | last | run | level | ||
102103104105 | 1110 | 21013 | 2351 | 1111 | 28272625 | 1111 | 0000000100s0000000101s0000000110s0000000111s |
Table IX group 9:leading_zeros=8,base_index=106
index | intra | inter | codes | ||||
last | run | level | last | run | leve | ||
106107108109 | 1100 | 0000 | 762221 | 1100 | 1000 | 231110 | 00000000100s00000000101s00000000110s00000000111s |
接着,将上述九个码表(table I-IX)分为三个类别(class),说明如下:
第一类别(class 1)
包含第一至第三群组(group 1,2,3),其每个群组内的编码字组具有两种编码长度(例如,group 1内的编码字组的编码长度为2或4,符号位s不计算在内)。
第二类别(class 2)
包含第四至第六群组(group 4,5,6),其每个群组内的编码字组具有两种或三种编码长度(例如,group 4内的编码字组的编码长度为8或9,符号位s不计算在内)。
第三类别(class 3)
包含第七至第九群组(group 7,8,9),其每个群组内的编码字组具有单一种编码长度(例如,group 7内的编码字组的编码长度为10,符号位s不计算在内)。
上述每一个码表内的编码字组是由字首(prefix)、字中、字尾(suffix)三部分所组成,如图1A所示。在本实施例中,字首是由位在字中第一个位“1”之前的前置位“0”所构成,字中为第一个位“1”,字尾则是指第一个位“1”之后的位,然符号位s不计算在内。对于第三类别(class 3)的编码字组,各个字尾形成0至2m-1的连续整数,其中m为字尾的长度;至于第一、二类别的编码字组,各个字尾并未构成连续整数。为了让第一、二类别具有规律,因此于第一、二类别(亦即,table I-VI)当中的部分编码字组后面加入随意(don’t care)位x。藉此,对于第一类别的码表,位于第一个位“1”后面的一个位(“0”或“1”)会将所有编码字组分为两个段落(part)--当位为“0”时,属于第一段落;当位为“1”时,属于第二段落。对于每一个段落,各个字尾形成0至2m-1-1的连续整数,其中m为字尾的长度,然第一个位“1”之后的一个位不计算在内。类似的道理,对于第二类别的码表,位于第一个位“1”后面的二个位(“00”、“01”、“10”或“11”)会将所有编码字组分为三个段落(part)--当位为“00”时,属于第一段落;当位为“01”时,属于第二段落;当位为“10”或“11”时,属于第三段落。对于第一段落和第二段落,各个字尾形成0至2m-2-1的连续整数,其中m为字尾的长度,然第一个位“1”之后的二个位不计算在内。对于第三段落,各个字尾形成0至2m-1-1的连续整数,然第一个位“1”之后的一个位不计算在内。
根据上述码表的特性,我们针对每一群组(或table)设定相对应的索引字组index_word,如下表table X所示。每一个索引字组经拆解对应至下列五部分,如图1B所示:基底索引base_index、类别符号class_sign、字尾第一长度suffix_len1、字尾第二长度suffix_len2、字尾第三长度suffix_len3,分别说明如下:
基底索引base_index
代表编码字组所属群组的开头索引值;例如,第二群组(table II)的开头索引为5(index=5),因此第二群组的所有编码字组的基底索引皆等于5(base_index=5)。
由于最后一群组(table IX)的开头索引值为106,因此使用七个位即足以表示基底索引base_index的值。
类别符号class_sign
用以代表编码字组所属的类别;解码器即根据此类别符号class_sign来决定于第一个位“1”后面究竟要检视多少个位,以判定其段落;接着,再根据所检视的位来选择使用相关的索引功能运算(index function)及编码字组长度功能运算(code length function),用以得到索引、解码字、编码字组长度。由于总共有三个类别,因此使用二个位即足以表示类别符号class_sign。
字尾第一长度suffix_len1至字尾第三长度suffix_len3
用以代表编码字组各段落的长度。如果编码字组仅具有一段落,则字尾第二长度suffix_len2、字尾第三长度suffix_len3均设为“0”;如果编码字组仅具有二段落,则字尾第三长度suffix_len3设为“0”。由于码表tableI-IX当中字尾第一长度suffix_len1至字尾第三长度suffix_len3的最大值分别为3、4、3,因此分别使用二、三、二个位即足以分别表示字尾第一长度suffix_len1至字尾第三长度suffix_len3。
Table X索引字组表
group | n | base index | class_sign | suffix_len1 | suffix_len2 | suffix_len3 | index_word |
123456789 | 012345678 | 051729496994102106 | 222333111 | 033333322 | 222224000 | 000330000 | 0000 0001 0000 10000000 1011 0110 10000010 0011 0110 10000011 1011 1110 10110110 0011 1110 10111000 1011 1111 00001011 1100 1110 00001100 1100 1100 00001101 0100 1100 0000 |
上述索引字组表table X当中的n代表前置位“0”的数目,而前述基底索引base_index、类别符号class_sign、字尾第一长度suffix_len1、字尾第二长度suffix_len2、字尾第三长度suffix_len3则总共组成16位的索引字组。在本发明实施例中,索引字组表table X是预先储存于存储器中,当进行解码时,根据前置位“0”的数目n,经查询索引字组表table X因而得到相对应的索引字组;接着,将索引字组予以拆解成五个部分,再根据这些拆解部分经适当功能运算以得到索引值及编码字组长度;最后,根据索引值从码表table I-IX中查询取得解码字。
图2显示本发明实施例的解码方法的流程图,详细说明如下:
读取位(步骤20)
首先,读取数个位,作为待解码的编码字组。在本实施例中,编码字组的最大长度为12个位,因此,每一次是读取12个位(由于符号位s并不会影响解码过程,因此不计算在内)。
计数前置位“0”的数目(步骤21)
接着,计数前置位“0”(亦即,字首)的数目n。在本实施例中,前置位“0”的数目n可以通过数字信号处理器(DSP)的特殊指令(instruction)来得到。除此以外,也可以使用其它方式来得到数值n;例如,以硬件方式,使用移位寄存器(shift register)同样可以得到前置位“0”的数目n。
向左移(n+1)个位(步骤22)
将待解码的编码字组向左移(n+1)个位,用以将所有前置位“0”(字首)及第一个位“1”(字中)予以移除。
读取索引字组并予以拆解(步骤23)
根据数值n,于索引字组表table X中查询读取索引字组,并将此具16位的索引字组予以拆解成五部分--基底索引base_index(A)、类别符号class_sign(B)、字尾第一长度suffix_len1(C)、字尾第二长度suffix_len2(D)、字尾第三长度suffix_len3(E),其对应位的关系如下所示:
A=base_index=index_word(15:9);
B=class_sign=index_word(8:7);
C=suffix_len1=index_word(6:5);
D=suffix_len2=index_word(4:2);
E=suffix_len3=index_word(1:0)
检视数值B以判定类别(步骤24)
根据步骤23中所得到的类别符号class_sign(B)以判定所属类别。根据索引字组表table X,当B值为“10”时,判定为第一类别;当B值为“11”时,判定为第二类别;当B值为“01”时,判定为第三类别;当B值为无效的“00”时,则判定为错误(25D)。
对于第二类别,检视移位编码字组的最高二位(步骤25B)及运算以得到
索引值及编码字组的长度(步骤26B1、26B2、26B3)
当步骤24判定其属于第二类别时,接着以步骤25B检视经移位编码字组的最高二位(意即,移位前的字尾的最高二位),以判定究竟属于哪一个段落。当为“10”或“11”时,判定为第三段落,并接着进行以下式(1)及(2)运算(步骤26B3)以得到相关的索引值index及编码字组长度len:
index=A+(1<<C)+(1<<D)+code(10:11-E) (1)
len=n+2+E (2)
其中,运算符号“<<”代表向左移位,code(:)代表编码字组的部分位。
当为“01”时,判定为第二段落,并接着进行以下式(3)及(4)运算(步骤26B2)以得到相关的索引值index及编码字组长度len:
index=A+(1<<C)+code(9:10-D) (3)
len=n+3+D (4)
当为“00”时,判定为第一段落,并接着进行以下式(5)及(6)运算(步骤26B1)以得到相关的索引值index及编码字组长度len:
index=A+code(9:10-C) (5)
对于第一类别,检视移位编码字组的最高一位(步骤25A)及运算以得到
索引值及编码字组的长度(步骤26A1、26A2)
当步骤24判定其属于第一类别时,接着以步骤25A检视经移位编码字组的最高一位(意即,移位前的字尾的最高一位),以判定究竟属于哪一个段落。当为“1”时,判定为第二段落,并接着进行以下式(7)及(8)运算(步骤26A2)以得到相关的索引值index及编码字组长度len:
index=A+(1<<C)+code(10:11-D) (7)
当为“0”时,判定为第一段落,接着以下式(9)及(10)运算(步骤26A1)以得到相关的索引值index及编码字组长度len:
index=A+code(10:11-C) (9)
对于第三类别,运算以得到索引值及编码字组的长度(步骤26C)
当步骤24判定其属于第三类别时,接着以下式(11)及(12)运算(步骤26C)以得到相关的索引值index及编码字组长度len:
index=A+code(11:12-C) (11)
len=n+1+C (12)
根据上述各步骤得到的索引值index,至码表(table I-IX)查询得到对应的解码字(意即,last、run、level),并从位串流(bitstream)取得符号位s,再依据上述得到的编码字组长度len,将相对应字符移出位串流,以准备进行下一个解码。
图3显示应用前述流程以进行解码及得到索引、编码字组长度的三个例子。
例一
取得的12位编码字组(步骤20)为0100 1101 1101,其前置位“0”共有一个(意即,n=1)(步骤21)。根据数值n查询索引字组表table X(步骤23),得到索引字组为0000 1011 0110 1000。经拆解此索引字组,得到
A=base_index=5;
B=class_sign=“10”(2);
C=suffix_len1=3;
D=suffix_len2=2;
E=suffix_len3=0
将编码字组向左移位共二位(n+1=2)(步骤22),因此得到移位后的编码字组为0011 0111 0100(右边以“0”补充)。由于B=class_sign为“10”,因此判定(步骤24)属于第一类别,因此进行步骤25A以检视移位编码字组的最高一位。经检视为位“0”,判定属于第一段落,因此进入步骤26A1执行式(9)、(10)的运算以得到
index=A+code(10:11-C)=5+3=8;
len=n+2+C=1+2+3=6。
例二
取得的12位编码字组(步骤20)为0000 1100 1001,其前置位“0”共有四个(意即,n=4)(步骤21)。根据数值n查询索引字组表table X(步骤23),得到索引字组为0110 0011 1110 1011。经拆解此索引字组,得到
A=base_index=49;
B=class_sign=“11”(3);
C=suffix_len1=3;
D=suffix_len2=2;
E=suffix_len3=3
将编码字组向左移位共五位(n+1=5)(步骤22),因此得到移位后的编码字组为1001 0010 0000。由于B=class_sign为“11”,因此判定(步骤24)属于第二类别,因此进行步骤25B以检视移位编码字组的最高二位。经检视为位“10”,判定属于第三段落,因此进入步骤26B3执行式(1)、(2)的运算以得到
index=A+(1<<C)+(1<<D)+code(10:11-E)=49+8+4+1=62;
len=n+2+E=4+2+3=9。
例三
取得的12位编码字组(步骤20)为0000 0011 0001,其前置位“0”共有六个(意即,n=6)(步骤21)。根据数值n查询索引字组表table X(步骤23),得到索引字组为1011 1100 1110 0000。经拆解此索引字组,得到
A=base_index=94;
B=class_sign=“01”(1);
C=suffix_len1=3;
D=suffix_len2=0;
E=suffix_len3=0
将编码字组向左移位共七位(n+1=7)(步骤22),因此得到移位后的编码字组为1000 1000 0000。由于B=class_sign为“01”,因此判定(步骤24)属于第三类别,因此进入步骤26C执行式(11)、(12)的运算以得到
index=A+code(11:12-C)=94+4=98;
1en=n+1+C=6+1+3=10。
本发明实施例所使用的码表table I-IX是针对视频标准MPEG-4的码表B-16/B-17,其分别包含有110个(意即,index=0至109)编码字组,因此总共有220字组。在这些编码字组当中,206(=103×2)个是有效编码字组,因此重复字组的个数仅有14个。下表table XI针对传统解码方法与本发明实施例解码方法所使用查表的存储器大小作一比较,显现出本发明实施例对于存储器空间的使用效率大为提升,非常适合应用于携带式电子装置中;且本实施例所使用的功能运算(1)至(12)皆为简单的运算,例如位移位及加法运算,因此,极适合以硬件来实施。
Table XI
method | table size(16-bits word) |
12-b single TLU | 212×(2+1) |
H.263TMNdecoder | ((27-16)+(27-32)+(27-8))×(2+1)=328×(2+1) |
Nine sub-tablesby leading0s | (8+16+16+32+32+64+8+4+4)×(2+1)=184×(2+1) |
proposed method | 110×2 |
图4显示根据本发明实施例的解码装置方块图,其各个组成方块可以使用硬件方式、软件方式或结合软硬件方式来实施。组成方块的功能简要说明如下(与前述解码方法的细节重复者不再赘述):
位读取装置(40)
用以从位串流读取包含数个位的编码字组,准备进行解码。在本实施例中,每一次是读取12个位。
前置佳“0”的计数装置(41)
计数待解码的编码字组的前置位“0”(字首)的数目n。
向左移(n+1)个位装置(42)
将待解码的编码字组向左移(n+1)个位,用以将所有前置位“0”及第一个位“1”予以移除。
索引字组读取及拆解装置(43)
根据数值n,于索引字组表table X(43A)中读取索引字组,并将此具16位的索引字组予以拆解成五部分一基底索引base_index(A)、类别符号class_sign(B)、字尾第一长度suffix_len1(C)、字尾第二长度suffix_len2(D)、字尾第三长度suffix_len3(E),其对应位关系如下所示:
A=base_index=index_word(15:9);
B=class_sign=index_word(8:7);
C=suffix_len1=index_word(6:5);
D=suffix_len2=index_word(4:2);
E=suffix_len3=index_word(1:0)
类别判定装置(44)
根据所得到的类别符号class_sign(B)以判定所属类别。
段落判定装置(45)
对于第一、第二类别,检视经移位编码字组的最高一或二位(意即,移位前的字尾的最高一或二位),以判定究竟属于哪一个段落。
索引值及编码字组长度产生装置(46)
根据所属类别及段落,选择适当功能(1)至(12)进行运算,以产生得到相关的索引值index及编码字组长度len。
解码字查询装置(47)
根据索引值index至码表(table I-IX)(47A)查询得到解码字;最后依据编码字组长度len,将相对应字符移出位串流,以准备进行下一个解码。
以上所述仅为本发明的较佳实施例而已,并非用以限定本发明的权利要求范围;凡其它未脱离本发明所揭示的精神下所完成的等效改变或修饰,均应包含在所述的权利要求范围内。
Claims (10)
1.一种解码方法,包含:
读取编码字组,其包含多个位,该编码字组包含字首、字中、字尾三部分;
计数该字首的位数目;
将该编码字组予以移位,以移除该字首及该字中的位;
根据该字首的位数目,于索引字组表中查询读取预设的索引字组,该索引字组包含基底索引、类别符号、多个字尾长度;
根据该类别符号,判定该编码字组所属类别;
根据该类别进行功能运算,以得到该编码字组相关的索引及编码字组长度;及
根据该索引,于多个码表之一查询得到对应的解码字。
2.根据权利要求1所述的解码方法,其中上述的索引字组index_word可拆解成五部分:该基底索引base_index(A)、该类别符号class_sign(B)、字尾第一长度suffix_len1(C)、字尾第二长度suffix_len2(D)、字尾第三长度suffix_len3(E),根据该索引字组,上述码表分为三个类别。
3.根据权利要求2所述的解码方法,当为第一类别时,检视该移位编码字组code的最高一位,以判定所属段落;
当判定为第一段落时,依下式运算以得到相关的索引index及编码字组长度len:
index=A+code(10:11-C)
当判定为第二段落时,依下式运算以得到相关的索引index及编码字组长度len:
index=A+(1<<C)+code(10:11-D)
其中,运算符号“<<”代表向左移位,code(:)代表该编码字组的部分位,n为该字首的位数目。
4.根据权利要求2所述的解码方法,当为第二类别时,检视该移位编码字组的最高二位,以判定所属段落;
当判定为第一段落时,依下式运算以得到相关的索引值i ndex及编码字组长度len:
index=A+code(9:10-C)
当判定为第二段落时,依下式运算以得到相关的索引值index及编码字组长度len:
index=A+(1<<C)+code(9:10-D)
len=n+3+D
当判定为第三段落时,依下式运算以得到相关的索引值index及编码字组长度len:
index=A+(1<<C)+(1<<D)+code(10:11-E)
len=n+2+E
其中,运算符号“<<”代表向左移位,code(:)代表该编码字组的部分位,n为该字首的位数目。
5.根据权利要求2所述的解码方法,当为第三类别时,依下式运算以得到相关的索引值index及编码字组长度len:
index=A+code(11:12-C)
len=n+1+C
其中,code(:)代表该编码字组的部分位,n为该字首的位数目。
6.一种解码装置,包含:
位读取装置,用以从位串流读取包含多个位的编码字组,该编码字组包含字首、字中、字尾三部分;
字首位数的计数装置,用以计数该字首的位数目;
位移位装置,用以将该编码字组予以移位,以移除该字首及该字中的位;
索引字组读取装置,根据该字首的位数目,于索引字组表中查询读取预设的索引字组,该索引字组包含基底索引、类别符号、多个字尾长度;
类别判定装置,根据该类别符号,判定该编码字组所属类别;
段落判定装置,检视该移位编码字组的最高至少一位,以判定所属段落;
索引值及编码字组长度产生装置,根据该类别及该段落进行功能运算,以得到该编码字组相关的索引及编码字组长度;
解码字查询装置,根据该索引,于多个码表之一查询得到对应的解码字。
7.根据权利要求6所述的解码装置,其中上述的索引字组index_word可拆解成五部分:该基底索引base_index(A)、该类别符号class_sign(B)、字尾第一长度suffix_len1(C)、字尾第二长度suffix_len2(D)、字尾第三长度suffix_len3(E),根据该索引字组,上述码表分为三个类别。
8.根据权利要求7所述的解码装置,当为第一类别时,检视该移位编码字组code的最高一位,以判定所属段落;
当判定为第一段落时,依下式运算以得到相关的索引index及编码字组长度len:
index=A+code(10:11-C)
当判定为第二段落时,依下式运算以得到相关的索引index及编码字组长度len:
index=A+(1<<C)+code(10:11-D)
其中,运算符号“<<”代表向左移位,code(:)代表该编码字组的部分位,n为该字首的位数目。
9.根据权利要求7所述的解码装置,当为第二类别时,检视该移位编码字组的最高二位,以判定所属段落;
当判定为第一段落时,依下式运算以得到相关的索引值index及编码字组长度len:
index=A+code(9:10-C)
当判定为第二段落时,依下式运算以得到相关的索引值index及编码字组长度len:
index=A+(1<<C)+code(9:10-D)
len=n+3+D
当判定为第三段落时,依下式运算以得到相关的索引值index及编码字组长度len:
index=A+(1<<C)+(1<<D)+code(10:11-E)
len=n+2+E
其中,运算符号“<<”代表向左移位,code(:)代表该编码字组的部分位,n为该字首的位数目。
10.根据权利要求7所述的解码装置,当为第三类别时,依下式运算以得到相关的索引值index及编码字组长度len:
index=A+code(11:12-C)
len=n+1+C
其中,code(:)代表该编码字组的部分位,n为该字首的位数目。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2007101409805A CN101093998B (zh) | 2007-08-15 | 2007-08-15 | 解码方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2007101409805A CN101093998B (zh) | 2007-08-15 | 2007-08-15 | 解码方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101093998A true CN101093998A (zh) | 2007-12-26 |
CN101093998B CN101093998B (zh) | 2011-03-30 |
Family
ID=38992068
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2007101409805A Active CN101093998B (zh) | 2007-08-15 | 2007-08-15 | 解码方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101093998B (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101872412A (zh) * | 2010-06-01 | 2010-10-27 | 福建新大陆电脑股份有限公司 | 一种码表生成方法 |
CN102118225A (zh) * | 2010-12-28 | 2011-07-06 | 北京航空航天大学 | 基于多索引表的任意位多项式除法类型编码的编解码方法 |
CN103873036A (zh) * | 2012-12-14 | 2014-06-18 | 普诚科技股份有限公司 | 上电复位电路 |
TWI593946B (zh) * | 2013-03-18 | 2017-08-01 | 精工半導體有限公司 | 受光電路 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1017856B (zh) * | 1990-11-02 | 1992-08-12 | 李翔 | 变长码有序译码法及其可编程电路 |
EP1802141A2 (en) * | 1995-03-15 | 2007-06-27 | Kabushiki Kaisha Toshiba | Moving picture coding and/or decoding systems |
JP3519416B2 (ja) * | 1997-01-29 | 2004-04-12 | 三菱電機株式会社 | 符号化装置及び復号装置 |
-
2007
- 2007-08-15 CN CN2007101409805A patent/CN101093998B/zh active Active
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101872412A (zh) * | 2010-06-01 | 2010-10-27 | 福建新大陆电脑股份有限公司 | 一种码表生成方法 |
CN101872412B (zh) * | 2010-06-01 | 2015-10-07 | 福建新大陆电脑股份有限公司 | 一种条码解码过程使用的码表的生成方法 |
CN102118225A (zh) * | 2010-12-28 | 2011-07-06 | 北京航空航天大学 | 基于多索引表的任意位多项式除法类型编码的编解码方法 |
CN102118225B (zh) * | 2010-12-28 | 2013-08-07 | 北京航空航天大学 | 基于多索引表的任意位多项式除法类型编码的编解码方法 |
CN103873036A (zh) * | 2012-12-14 | 2014-06-18 | 普诚科技股份有限公司 | 上电复位电路 |
CN103873036B (zh) * | 2012-12-14 | 2017-02-22 | 普诚科技股份有限公司 | 上电复位电路 |
TWI593946B (zh) * | 2013-03-18 | 2017-08-01 | 精工半導體有限公司 | 受光電路 |
Also Published As
Publication number | Publication date |
---|---|
CN101093998B (zh) | 2011-03-30 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US5818877A (en) | Method for reducing storage requirements for grouped data values | |
US7751634B2 (en) | Compression system for integrated sensor devices | |
JP4313771B2 (ja) | 画像および/またはビデオ符号器と復号器における変換係数を符号化するための方法と装置および対応するコンピュータプログラムと対応するコンピュータによる読み出し可能な記憶媒体 | |
US5220325A (en) | Hierarchical variable length decoder for digital video data | |
US7411529B2 (en) | Method of decoding bin values using pipeline architecture and decoding device therefor | |
ES2439996T3 (es) | Procedimiento y dispositivo de codificación y descodificación aritméticas de estados binarios y programa informático correspondiente y soporte de almacenamiento correspondiente legible por ordenador | |
CN101242531A (zh) | 为小尺寸或全尺寸播放提供独立编码链的视频编码*** | |
CN104378634B (zh) | 输入符号二值化的方法以及从码字中产生索引值的方法 | |
CN101370138B (zh) | 一种h.264标准cavlc残差系数的解码方法 | |
EP0683568A1 (en) | Variable length code look-up table having separate code length determination | |
US5594435A (en) | Permutation-based data compression | |
CN101093998B (zh) | 解码方法及装置 | |
US20060126743A1 (en) | Variable length code decoder and decoding method for variable length codes | |
JPH1131974A (ja) | 信号復号装置及び信号復号方法並びに信号復号処理をコンピュータに行わせるためのプログラムを記録した記録媒体 | |
JP4181887B2 (ja) | 可変長符号化装置、及びその方法 | |
JP4061104B2 (ja) | コンテキストモデルによるラン・スキップカウントに基づくメモリアクセス及びスキッピング | |
CN101657973B (zh) | 采用位精度的编码装置和编码方法 | |
JPH0787331A (ja) | 画像圧縮符号化方法 | |
CN100466743C (zh) | 一种基于共享存储可编程的熵解码和反量化的方法 | |
KR20030012729A (ko) | 압축 영상 비트 스트림의 부호어 교환을 통한 비트율 변환방법 | |
WO2020258188A1 (zh) | 解码方法、解码器和解码*** | |
JP3559314B2 (ja) | 画像圧縮装置 | |
WO2002051159A2 (en) | Method of compressing data by use of self-prefixed universal variable length code | |
WO2020258189A1 (zh) | 编码方法、编码器和编码*** | |
CN103024380A (zh) | 一种数据的熵编码方法和装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |