CN100423453C - 通过查表实现的算术编解码方法 - Google Patents
通过查表实现的算术编解码方法 Download PDFInfo
- Publication number
- CN100423453C CN100423453C CNB2005100243042A CN200510024304A CN100423453C CN 100423453 C CN100423453 C CN 100423453C CN B2005100243042 A CNB2005100243042 A CN B2005100243042A CN 200510024304 A CN200510024304 A CN 200510024304A CN 100423453 C CN100423453 C CN 100423453C
- Authority
- CN
- China
- Prior art keywords
- line segment
- bit
- output
- decoding
- low
- 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.)
- Expired - Fee Related
Links
Landscapes
- Compression, Expansion, Code Conversion, And Decoders (AREA)
Abstract
本发明为一种通过查表实现的算术编解码方法。算术编解码是对非等概率的数据进行压缩和解压缩的有效方法。算术编解码过程中都需要将线段不断地细化,由于在有限精度的情况下,无法将线段无限细化,所以实现过程中需要将缩小的线段放大和平移,这称为更新,在编码端还要同时将更新信息作为输出的编码码字,在解码端还要更新Value。本方法通过判断更新前线段两端的位置得到“数据表”中的索引信息,快速高效得更新线段和完成其它操作,从而大大节省编解码时需要的运算量,尤其是避免了大量判断和跳转的次数。试验结果证明,该方法为了存放“数据表”增加了有限内存空间,但是可以大大加快算术编解码的速度,提高硬件实现的效率。
Description
技术领域
本发明属于数据压缩技术领域,具体涉及一种通过查表实现的算术编解码方法。
背景技术
算术编码是一种无失真的编码方法,能有效地压缩信源冗余度,属于熵编码的一种,适用于非等概率的数据的压缩。算术编码的基本原理是:根据编码数据中不同符号的概率,把线段划分为互不重叠的子线段,子线段的宽度恰好是各符号的概率。编码一个符号就是找到对应的子线段,然后再对该线段划分得到下一级的子线段,对下一个符号编码。在最后的子线段中的任意实数都可以用来表示对应的符号序列,这个数就是该符号序列所对应的码字。显然,一串符号序列发生的概率越大,对应的子线段就越宽,要表达它所用的比特数就减少,因而相应的码字就越短。算术解码的过程是算术编码的逆过程,通过码字得到线段中的某一个点,称为Value,判断该点位于哪一个子线段中,从而得到与该子线段相应的符号。
但是在具体实现中往往无法做到线段无限细划的精度。在有限精度的条件下,就需要在编码一些符号后,对线段进行放大和平移,保证下一次线段划分精度。而线段放大和平移的信息就是输出码字。其中需要对线段不同的情况做出不同的操作,所以如何减少运算次数和判断跳转次数成了本领域研究的一个热点。
发明内容
本发明的目的是提出一种通过查表实现的算术编解码方法。在编码过程中可以快速的判断当前线段的情况,并且更新线段得到输出码字,大大减少运算量,同时减少判断和跳转操作次数;在解码中,可以用该方法快速的更新子线段更新Value的值。
本发明提出的通过查表实现算术编解码方法,是根据算术编解码中线段的信息查表,得到线断更新和其他操作的信息,从而高效的实现算术编解码。具体来说,是根据更新前线段两端的位置信息,在预存的“数据表”中得到相应的数据。然后,在编码端根据从“数据表”中查得的数据,其中包括线段放大倍数和平移大小,输出码流的信息。在解码端根据从“数据表”中查得的数据,其中包括线段放大倍数和平移大小,更新Value的信息。本发明可以定义不同长度的“数据表”,“数据表”越长,算术编解码越高效。具体表现在运算数度加快,判断跳转次数减少。
本发明提出的通过查表实现的算术编解码方法,编码的具体步骤如下:
(1)首先对一个符号编码,得到新的线段;
(2)然后根据新的线段两端的位置,得到表格中Index;
(3)读取表中的相应数据,该数据中包含更新线段和输出码字的信息;
(4)最后更新线段和输出码字;
(5)判断新的线段是否可以对下一个符号编码,如为真,从步骤(1)开始,对下一个符号编码,否则从步骤(2)开始,继续查表,更新线段并且输出码字。
本发明提出的通过查表实现的算术编解码方法,解码的具体步骤如下:
(1)根据码字得到线段中一点的位置,称为Value,该点位于某个子线段,解码的符号为该子线段对应的符号;
(2)然后根据子线段两端的位置,得到表格中Index;
(3)读取表中的相应数据,该数据中包含更新线段的信息;
(4)最后更新线段,并且同时更新Value;
(5)判断新的线段是否可以对下一个符号解码,如为真,从步骤(1)开始,对下一个符号解码,否则从步骤(2)开始,继续查表,更新线段和Value。
与通常的算术编解码的过程相比,主要的改进在于引入了“数据表”,通过查表得到线段更新和输出码字的信息。该“数据表”可以设置成不同的大小,“数据表”越长,占用的空间越大,但是编解码的效率也越高。
下面举例为8*8的“数据表”。约定:线段初始化为“1”,线段的两端一次定义为Low和High,并且满足Low≤High。当对一个符号编码后,新的线段是原线段的子线段,此时得到新的Low和High。将单位长度“l”的线段等分为8段,根据Low和High所处的位置会有64种项,其中因为要满足Low≤High的条件所以一共有36种可能,如表一。
用于编码端的“数据表”中每一项都对应于Low和High的位置,其中包括了所有输出码字的信息、Low和High放大倍数和偏移量以及线段更新结束的标志。输出码字的信息包括直接放入输出码字的比特和所谓Bit_to_follow个数,Bit_to_follow个数是指当前不输出,直到得到下一个输出比特后才能确定的输出比特个数。例如,当前累加的Bit_to_follow个数为3,下一次查表,要求输出的比特为“010”,那么,由于第一个确定比特为“0”,所以在这个“0”后面要加上3个“1”得到的输出比特为“011110”;反之,如果当前累加的Bit_to_follow个数为3,下一次查表,要求输出的比特为“110”,那么,由于第一个确定比特为“1”,所以在这个“1”后面要加上3个“0”得到的输出比特为“100010”。Low和High的放大倍数是指Low和High左移的比特数,左移后High的低位“0”要变为“1”。由于左移后Low和High的范围往往会超出原来的范围,所以还要减去相应的偏移量,使得Low和High回到原来的范围内。另外,如果Low和High的差值,也就是线段的长度足够大的话,就不需要更新线段;如果Low和High经过一次查表和更新过程,它们的差值仍然太小,就需要再进行下一次查表操作,这需要一个标志来标示。
用于解码端的“数据表”只需要记录更新Low、High和Value的信息,即Low、High和Value放大倍数和偏移量。Low左移后低位填“0”,High左移后低位填“1”,Value左移后低位填入待解码码字的比特,然后减去偏移量,所以可以保证Low≤Value≤High,并且处于有效范围内。,如果Low和High的差值,也就是线段的长度足够大的话,就不需要更新线段;如果Low和High经过一次查表和更新过程,它们的差值仍然太小,就需要再进行下一次查表操作,这需要一个标志来标示。
要求Low和High的差值足够大是为了保证设下一个符号的概率为p,那么(High-Low)next=[(High-Low)·p]-1≥0,要使上式在p=pmin时也成立,就要求High-Low足够大,即
表一
本发明提出的通过查表实现算术编解码方法,大大节省了算术编解码的运算量,主要表现在:
(1)通过查表,编码端可以在一次更新线段的时候得到多个输出比特和Bit_to_follow信息,而不是一次更新线段只得到一个输出比特或Bit_to_follow增加1。解码端可以在一次更新线段的时候将多个输入比特放入Value中。
(2)通过查表,可以直接得到线段的信息,而避免了大量的判断和跳转操作。
具体实施方式
本发明的重点在于数据表的设计和查表、更新线段的操作,现分别进一步具体介绍如下:
一、“数据表”的设计
编码端“数据表”的内容有:
(1)单位“1”线段划分段数;
(2)数据表的表长;
(3)线段是否需要更新标志(比特);
(4)线段更新时有无输出比特标志(比特);
(5)线段更新时输出的第一个比特(比特);
(6)线段更新后是否需要再次更新标志(比特);
(7)线段放大后的偏移量(比特);
(8)线段更新时输出的比特(比特);
(9)线段更新时输出比特数(比特);
(10)Bit to follow的比特数(比特);
(11)数据表中每一项合计的比特数(比特)。
随着对单位“1”线段划分的增多,“数据表”长度增长,同时“数据表”中每一项需要的比特数也增多。通常线段划分的段数取为2n,取n为2-16。
表2为n取2、3、4时“数据表”形式。
单位“1”线段划分段数 | 数据表的表长 | 线段是否需要更新标志(比特) | 线段更新时有无输出比特标志(比特) | 线段更新时输出的第一个比特(比特) | 线段更新后是否需要再次更新标志(比特) | 线段放大后的偏移量(比特) | 线段更新时输出的比特(比特) | 线段更新时输出比特数(比特) | Bittofollow的比特数(比特) | 数据表中每一项合计的比特数(比特) |
4 | 16 | 1 | 1 | 1 | 1 | 3 | 2 | 2 | 1 | 12 |
8 | 64 | 1 | 1 | 1 | 1 | 4 | 3 | 2 | 2 | 15 |
16 | 256 | 1 | 1 | 1 | 1 | 5 | 4 | 3 | 2 | 18 |
表二
解码端“数据表”的内容有:
(1)单位“1”线段划分段数;
(2)数据表的表长;
(3)线段是否需要更新标志(比特);
(4)线段更新后是否需要再次更新标志(比特);
(5)线段放大的左移位数(比特);
(6)线段放大后的偏移量(比特);
(7)数据表中每一项合计的比特数(比特)。
同样的随着对单位“1”线段划分的增多,“数据表”长度增长,同时“数据表”中每一项需要的比特数也增多。表3为n取2、3、4时“数据表”形式。
单位“1”线段划分段数 | 数据表的表长 | 线段是否需要更新标志(比特) | 线段更新后是否需要再次更新标志(比特) | 线段放大的左移位数(比特) | 线段放大后的偏移量(比特) | 数据表中每一项合计的比特数(比特) |
4 | 16 | 1 | 1 | 2 | 3 | 7 |
8 | 64 | 1 | 1 | 2 | 4 | 8 |
16 | 256 | 1 | 1 | 3 | 5 | 10 |
表三
二、查表和更新线段的操作
查表就是根据当前线段Low和High的位置得到相应的Index,然后得到“数据表”的信息。如果Low和High都用16个比特标示,单位“1”线段为0到65535,将线段分为8段,那么将Low和High的最高3比特组成Index,即
Index=Low15Low14Low13High15High14High13。
然后在“数据表”中得到数据。
编码的操作如下:
(1)如果“线段是否需要更新标志”为“非”,那么操作完成;反之,进行下一步操作;
(2)如果“线段更新时有无输出比特标志”为“是”,那么进行步骤(3)操作;反之进行步骤(4)操作;
(3)判断编码器之前累加的Bit_to_follow是否大于0。如果为“是”,则将“线段更新时输出的第一个比特”放入输出码字中,然后将Bit_to_follow个取反的“线段更新时输出的第一个比特”也放入输出码字中,再将剩余的“线段更新时输出的比特”放入输出码字中;如果为“非”,则将“线段更新时输出的比特”直接放入输出码字中;
(4)如果“数据表”中得到的“Bit_to_follow的比特数”不为0,则将其累加到编码器的Bit_to_follow中;
(5)“线段更新时输出的比特数”和“Bit_to_follow的比特数”之和为Low和High左移的位数,左移后将High的低位置为“1”,然后减去偏移量。偏移量是通过“线段放大后的偏移量”得到的,由于不同情况下偏移量的若干低位都是“0”,“线段放大后的偏移量”只记录了偏移量的高位,所以要通过左移得到实际需要的偏移量;
(6)如果“线段更新后是否需要再次更新标志”为“是”,则根据新得到的Low和High重新查表,然后从步骤(1)开始继续操作;反之,则完成当前操作,可以对下一个符号进行编码了。
解码的操作如下:
(1)如果“线段是否需要更新标志”为“非”,那么操作完成;反之,进行下一步操作;
(2)Low、High和Value左移“线段放大的左移位数”,Low左移后低位填“0”,High左移后低位填“1”,Value左移后低位填入待解码码字的比特,然后减去偏移量;和编码端一样,偏移量是通过“线段放大后的偏移量”得到的;
(3)如果“线段更新后是否需要再次更新标志”为“是”,则根据新得到的Low和High重新查表,然后从步骤(1)开始继续操作;反之,则完成当前操作,可以对下一个符号进行编码了。
三、与改进前算术编解码效果的比较
在标准视频流Salesman、Claire、Miss American中各选择一帧,分别进行一下操作。先对其进行梯度自适应预测(GAP),得到非等概率分布的符号集合,符号包括0到255,所以用8比特表示。任意选取64511个预测结果符号,统计预测结果各符号的概率,根据概率可以将线段划分为256个子线段,每个线段对应一个符号。Low和High都用16个比特表示,初始值Low=0,High=65535。
以下比较改进前和改进后算术编码的效率。
表四
显然,使用查表的方法,可以使得计算的次数大大降低,其中减少判断和跳转的次数还意味着减少流水线排空的次数。这些都将大大提高算术编解码的效率。
Claims (3)
1. 一种通过查表实现的算术编解码方法,其特征在于编码的具体步骤如下:
(1)首先对一个符号编码,得到新的线段;
(2)然后根据新的线段两端的位置,得到表格中Index;
(3)读取表中的相应数据,该数据中包含更新线段和输出码字的信息;
(4)最后更新线段和输出码字;
(5)判断新的线段是否可以对下一个符号编码,如为真,从步骤(1)开始,对下一个符号编码,否则从步骤(2)开始,继续查表,更新线段并且输出码字;
解码的具体步骤如下:
(1)根据码字得到线段中一点的位置,称为Value,该点位于某个子线段,解码的符号为该子线段对应的符号;
(2)然后根据子线段两端的位置,得到表格中Index;
(3)读取表中的相应数据,该数据中包含更新线段的信息;
(4)最后更新线段,并且同时更新Value;
(5)判断新的线段是否可以对下一个符号解码,如为真,从步骤(1)开始,对下一个符号解码,否则从步骤(2)开始,继续查表,更新线段和Value;
其中,所述编码中更新线段的操作步骤如下:
(1)如果“线段是否需要更新标志”为“非”,那么操作完成;反之,进行下一步操作;
(2)如果“线段更新时有无输出比特标志”为“是”,那么进行步骤(3)操作;反之进行步骤(4)操作;
(3)判断编码器之前累加的Bit_to_follow是否大于0,如果为“是”,则将“线段更新时输出的第一个比特”放入输出码字中,然后将Bit_to_follow个取反的“线段更新时输出的第一个比特”也放入输出码字中,再将剩余的“线段更新时输出的比特”放入输出码字中;如果为“非”,则将“线段更新时输出的比特”直接放入输出码字中;
(4)如果“数据表”中得到的“Bit_to_follow的比特数”不为0,则将其累加到编码器的Bit_to_follow中;
(5)“线段更新时输出的比特数”和“Bit_to_follow的比特数”之和为Low和High左移的位数,左移后将High的低位置为“1”,然后减去偏移量;
(6)如果“线段更新后是否需要再次更新标志”为“是”,则根据新得到的Low和High重新查表,然后从步骤(1)开始继续操作;反之,则完成当前操作,对下一个符号进行编码;
所述解码中更新线段的操作步骤如下:
(1)如果“线段是否需要更新标志”为“非”,那么操作完成;反之,进行下一步操作;
(2)Low、High和Value左移“线段放大的左移位数”,Low左移后低位填“0”,High左移后低位填“1”,Value左移后低位填入待解码码字的比特,然后减去偏移量;
(3)如果“线段更新后是否需要再次更新标志”为“是”,则根据新得到的Low和High重新查表,然后从步骤(1)开始继续操作;反之,则完成当前操作,对下一个符号进行编码。
2. 根据权利要求1所述的算术编解码方法,其特征在于用于编码端的“数据表”中每一项都对应于Low和High的位置,其中包括了所有输出码字的信息、Low和High放大倍数和偏移量以及线段更新结束的标志,输出码字的信息包括直接放入输出码字的比特和所谓Bit_to_follow个数,Bit_to_follow个数是指当前不输出,直到得到下一个输出比特后才能确定的输出比特个数。
3. 根据权利要求1所述的算术编解码方法,其特征在于用于解码端的“数据表”只需要记录更新Low、High和Value的信息,即Low、High和Value放大倍数和偏移量。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB2005100243042A CN100423453C (zh) | 2005-03-10 | 2005-03-10 | 通过查表实现的算术编解码方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB2005100243042A CN100423453C (zh) | 2005-03-10 | 2005-03-10 | 通过查表实现的算术编解码方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1658513A CN1658513A (zh) | 2005-08-24 |
CN100423453C true CN100423453C (zh) | 2008-10-01 |
Family
ID=35007803
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNB2005100243042A Expired - Fee Related CN100423453C (zh) | 2005-03-10 | 2005-03-10 | 通过查表实现的算术编解码方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN100423453C (zh) |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101901588B (zh) * | 2009-05-31 | 2012-07-04 | 比亚迪股份有限公司 | 一种嵌入式***的图像平滑显示方法 |
CN103096062A (zh) * | 2011-11-01 | 2013-05-08 | 珠海扬智电子科技有限公司 | 算术解码方法 |
CN102664636B (zh) * | 2012-05-16 | 2016-03-23 | 苏州大学 | 一种变长编码、解码方法及装置 |
US9871595B2 (en) * | 2016-04-27 | 2018-01-16 | Industrial Technology Research Institute | Decoding device and method for absolute positioning code |
CN112636765B (zh) * | 2019-09-24 | 2022-07-12 | 无锡江南计算技术研究所 | 基于数据压缩存储的细粒度并行查表方法 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1228556A (zh) * | 1999-02-02 | 1999-09-15 | 罗平候 | 一种线符的编码方法 |
US6298087B1 (en) * | 1998-08-31 | 2001-10-02 | Sony Corporation | System and method for decoding a variable length code digital signal |
JP2002141807A (ja) * | 2000-11-02 | 2002-05-17 | Matsushita Electric Ind Co Ltd | 可変長復号化器 |
US6404362B1 (en) * | 1999-09-21 | 2002-06-11 | Unisys Corporation | Method and apparatus for reducing the time required for decompressing compressed data |
CN1585482A (zh) * | 2004-05-27 | 2005-02-23 | 复旦大学 | 一种三维小波等级树集合划分算法的视频压缩编码方法 |
-
2005
- 2005-03-10 CN CNB2005100243042A patent/CN100423453C/zh not_active Expired - Fee Related
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6298087B1 (en) * | 1998-08-31 | 2001-10-02 | Sony Corporation | System and method for decoding a variable length code digital signal |
CN1228556A (zh) * | 1999-02-02 | 1999-09-15 | 罗平候 | 一种线符的编码方法 |
US6404362B1 (en) * | 1999-09-21 | 2002-06-11 | Unisys Corporation | Method and apparatus for reducing the time required for decompressing compressed data |
JP2002141807A (ja) * | 2000-11-02 | 2002-05-17 | Matsushita Electric Ind Co Ltd | 可変長復号化器 |
CN1585482A (zh) * | 2004-05-27 | 2005-02-23 | 复旦大学 | 一种三维小波等级树集合划分算法的视频压缩编码方法 |
Non-Patent Citations (2)
Title |
---|
一种改进Miller编解码的实现方法. 邱祖江,郭亚炜,杨莲兴.微电子学,第30卷第3期. 2000 |
一种改进Miller编解码的实现方法. 邱祖江,郭亚炜,杨莲兴.微电子学,第30卷第3期. 2000 * |
Also Published As
Publication number | Publication date |
---|---|
CN1658513A (zh) | 2005-08-24 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN100423453C (zh) | 通过查表实现的算术编解码方法 | |
US5748122A (en) | Data processing apparatus and data processing method | |
US7817069B2 (en) | Alternative encoding for LZSS output | |
US7688233B2 (en) | Compression for deflate algorithm | |
US7663511B2 (en) | Dynamic character encoding | |
US20080256332A1 (en) | Processes and devices for compression and decompression of executable code by a microprocessor with a RISC architecture | |
CN103326732A (zh) | 压缩数据的方法、解压数据的方法、编码器和解码器 | |
CN101261825B (zh) | 一种移动终端***的字库管理方法 | |
US9094039B2 (en) | Efficient deflate decompression | |
KR20090021149A (ko) | 세트 연관 캐시 매핑 기술에 의거한 고속 데이터 압축 | |
CN1675842B (zh) | 算术编码的方法、设备以及相应解码方法 | |
US20080162517A1 (en) | Method and system for creating an in-memory physical dictionary for data compression | |
JP2011250431A (ja) | データ圧縮装置および方法 | |
CN100442670C (zh) | 可变长度解码装置和可变长度解码方法以及再现*** | |
CN104869397A (zh) | 一种基于slwe概率估计模型的自适应区间编码方法及解码方法 | |
CN101414830B (zh) | 平行处理至少两个二进制值的方法与相应算术编码*** | |
CN116934487B (zh) | 一种金融清算数据优化存储方法及*** | |
CN117827463A (zh) | 用于进行注意力运算的方法、设备和存储介质 | |
US20130332433A1 (en) | Computer product, generating apparatus, and generating method | |
CN108880559B (zh) | 数据压缩方法、数据解压缩方法、压缩设备及解压缩设备 | |
US6489903B2 (en) | Data encoding method, data encoding apparatus, data decoding method, and data decoding apparatus | |
CN110021349B (zh) | 基因数据的编码方法 | |
US9171032B2 (en) | Radix sort with read-only key | |
JP4191438B2 (ja) | データ圧縮方法およびデータ伸長方法、該方法を実施するためのコンピュータプログラム製品と電子システム | |
US7612692B2 (en) | Bidirectional context model for adaptive compression |
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 | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20081001 Termination date: 20150310 |
|
EXPY | Termination of patent right or utility model |