算术编码工作原理

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

算术编码工作原理
在给定符号集和符号的情形下,算术编码能够给出接近最优的编码结果。

利用算术编码的紧缩算法通常先要对输入符号的概率进行估量,然后再编码。

那个估量越准,编码结果就越接近最优的结果。

例: 对一个简单的信号源进行观看,取得的模型如下:
60% 的机遇显现符号中性
20% 的机遇显现符号阳性
10% 的机遇显现符号阴性
10% 的机遇显现符号数据终止符. (显现那个符号的意思是该信号源'内部中止',在进行数据紧缩时如此的情形是很常见的。

当第一次也是唯一的一次看到那个
符号时,解码器就明白整个信号流都被解码完成了。

)
算术编码能够处置的例子不止是这种只有四种符号的情形,更复杂的情形也能够处置,包括高阶的情形。

所谓高阶的情形是指当前符号显现的概率受之前显现符号的阻碍,这时之前显现的符号,也被称为上下文。

比如在英文文档编码的时候,例如,在字母Q 或q显现以后,字母u显现的概率就大大提高了。

这种模型还能够进行自适应的转变,即在某种上下文下显现的的估量随着每次这种上下文显现时的符号而自适应更新,从而加倍符合实际的概率散布。

不管编码器利用如何的模型,解码器也必需利用一样的模型。

一个简单的例子以下用一个符号串行如何被编码来作一个例子:假设有一个以A、B、C三个显现机遇均等的符号组成的串行。

假设以简单的分组编码会十分浪费地用2 bits 来表示一个符号:其中一个符号是能够不用传的(下面能够见到符号B正是如此)。


此,那个串行能够三进制的0和2之间的有理数表示,而且每位数表示一个符号。

例如,“ABBCAB”那个串行能够变成(base3)(即0为A, 1为B, 2为C)。

用一个定点二进制数字去对那个数编码使之在恢复符号表示时有足够的精度,譬如(base2) –只用了9个bit,比起简单的分组编码少(1 –9/12)x100% = 25%。

这关于长串行是可行的因为有高效的、适当的算法去精准地转换任意进制的数字。

编码进程的每一步,除最后一步,都是相同的。

编码器通常需要考虑下面三种数据:下一个要编码的符号
当前的(在编第一个符号之前,那个区间是[0,1), 可是以后每次编码区间都会转
变)
模型中在这一步可能显现的各个符号的概率散布(像前面提到的一样,高阶或自适应的模型中,每一步的概率并没必要须一样)
编码其将当前的区间分成假设干子区间,每一个子区间的长度与当前上下文下可能显现的对应符号的概率成正比。

当前要编码的符号对应的子区间成为在下一步编码中的初始区间。

例: 关于前面提出的4符号模型:
中性对应的区间是[0,
阳性对应的区间是[,
阴性对应的区间是[,
数据终止符对应的区间是[, 1)
当所有的符号都编码完毕,最终取得的结果区间即唯一的确信了已编码的符号串行。

任何人利用该区间和利用的模型参数即能够解码重建取得该符号串行。

事实上咱们并非需要传输最后的结果区间,事实上,咱们只需要传输该区间中的一个小数即可。

在有效中,只要传输足够的该小数足够的位数(不论几进制),以保证以这些位数开头的所有小数都位于结果区间就能够够了。

例: 下面对利用前面提到的4符号模型进行编码的一段信息进行解码。

编码的结果是(为了容易明白得,那个地址利用十进制而不是二进制;咱们也假设咱们取得的结果的位数恰好够咱们解码。

下面会讨论这两个问题)。

像编码器所作的那样咱们从区间[0,1)开始,利用相同的模型,咱们将它分成编码器所必需的四个子区间。

分数落在NEUTRAL坐在的子区间[0,;这向咱们提示编码器所读的第一个符号必然是NEUTRAL,如此咱们就能够够将它作为消息的第一个符号记下来。

然后咱们将区间[0,分成子区间:
中性的区间是[0, -- [0, 的60%
阳性的区间是[, -- [0, 的20%
阴性的区间是[, -- [0, 的10%
数据终止符的区间是[, . -- [0, 的10%
咱们的分数.538 在[, 区间;因此消息的第二个符号必然是NEGATIVE。

咱们再一次将当前区间划分成子区间:
中性的区间是[,
阳性的区间是[,
阴性的区间是[,
数据终止符的区间是[, .
咱们的分数.538 落在符号END-OF-DATA 的区间;因此,这必然是下一个符号。

由于它也是内部的终止符号,这也就意味着编码已经终止。

(若是数据流没有内部终止,咱们需要从其它的途径明白数据流在何处终止——不然咱们将永久将解码进行下去,错误地将不属于实际编码生成的数据读进来。


一样的消息能够利用一样短的分数来编码实现如.534、.53五、.53六、.537或是.539,这说明利用十进制而不是二进制会带来效率的降低。

这是正确的选项是因为三位十进制数据能够表达的信息内容大约是;咱们也能够将一样的信息利用二进制分数表示为.(等同于),它仅需8位。

这稍稍大于信息内容本身或消息的,可能是概率为%的位信息熵。

(注意最后一个0必需在二进制分数中表示,不然消息将会变得不确信起来。

)[]精度和再正规化
上面对算术编码的说明进行了一些简化。

尤其是,这种写法看起来仿佛算术编码第一利用无穷精度的数值计算整体上表示最后节点的分数,然后在编码终止的时候将那个分数
转换成最终的形式。

许多算术编码器利用优先精度的数值计算,而不是尽可能去模拟无穷精度,因为它们明白解码器能够匹配、而且将所计算的分数在那个精度四舍五入到对应值。

一个例子能够说明一个模型要将距离[0,1]分成三份而且利用8位的精度来实现。

注意既然精度已经明白,咱们能用的二进制数值的范围也已经明白。

一个称为再归一化的进程使有限精度再也不是能够编码的字符数量的限制。

当范围减小到范围内的所有数值共享特定的数字时,那些数字就送到输出数据中。

尽管运算机能够处置许多位数的精度,编码所用位数少于它们的精度,如此现存的数据进行左移,在右面添加新的数据位以尽可能扩展能用的数据范围。

注意如此的结果出此刻前面三个例子中的两个里面。

[]算术编码和其他紧缩方式的联系
[]哈夫曼编码
在算术编码和之间有专门大的相似性-- 事实上,哈夫曼编码只是算术编码的一个特例-- 可是由于算术编码将整个消息翻译成一个表示为b,而不是将消息中的每一个符号翻译成一系列的以b为基数的数字,它通常比哈夫曼编码更能达到最优。

[]区间编码
算术编码与有很深的相似渊源,它们如此相似以至于通常以为它们的性能是相同的,若是确实有什么不同的话也只是区间编码仅仅掉队几个位的值罢了。

区间编码与算术编码不同,通常以为它不被任何公司的专利所涵盖。

区间编码的原理是如此的,它没有像算术编码那样从[0,1]开始并依照每一个字符显现的概率把它分成相应的不同的小区间,它从如000,000,000,000到999,999,999,999如此一个专门大的非负整数区间开始,而且依照每一个字符的概率划分成小的子区间。

当子区间小到必然程度最后结果的开头数字显现的时候,那些数字就能够够“左移”出整个运算,而且用“右边”的数字替换--每次显现移位时,就大体相当于最初区间的一个回归放大(retroactive multiplication)。

[]关于算术编码的美国专利
许多算术编码所用的不同方式受美国的爱惜。

其中一些专利关于实现一些国际标准中概念的算术编码算法是很关键的。

在这种情形下,这些专利通常依照一种合理和非歧视()授权协议利用(至少是作为标准委员会的一种策略)。

在一些闻名的案例中(包括一些涉及IBM的专利)这些授权是免费的,而在另外一些案例中,那么收取必然的授权费用。

RAND条款的授权协议不必然能够知足所有打算利用这项技术的用户,因为关于一个打算生产拥有所有权软件的公司来讲这项费用是“合理的”,而关于和项目来讲它是不合理的。

在算术编码领域做了很多开辟性工作并拥有很多专利的一个闻名公司是。

一些分析人士感到那种以为没有一种有效而且有效的算术编码能够在不触犯IBM和其它公司拥有的专利条件下实现只是数据紧缩界中的一种持续的(尤其是当看到有效的算术编码已经利用了很长时刻最初的专利开始到期)。

但是,由于专利法没有提供“明确界限”测试因此一种威慑心理总让人忧虑法庭将会找到触犯专利的特殊应用,而且随着关于专利范围的详细审查将会发觉一个不行的裁决将带来专门大的损失,这些技术的专利爱惜但是对它们的应用产生了一种阻止的成效。

至少一种重要的紧缩软件,出于关于专利状况的担忧,故意停止了算术编码的利用而转向Huffman编码。

关于算术编码的美国专利列在下面。

Patent 4,122,440 —(IBM) 提交日期March 4, 1977, 批准日期Oct 24, 1978 (此
刻已经到期)
Patent 4,286,256 —(IBM) 批准日期Aug 25, 1981 (可能已经到期)
Patent 4,467,317 —(IBM) 批准日期Aug 21, 1984 (可能已经到期)
Patent 4,652,856 —(IBM) 批准日期Feb 4, 1986 (可能已经到期)
Patent 4,891,643 —(IBM) 提交时刻1986/09/15, 批准日期1990/01/02 Patent 4,905,297 —(IBM) 批准日期Feb 27, 1990
Patent 4,933,883 —(IBM) 批准日期Jun 12, 1990
Patent 4,935,882 —(IBM) 批准日期Jun 19, 1990
Patent 4,989,000 —(???) 提交时刻1989/06/19, 批准日期1991/01/29 Patent 5,099,440
Patent 5,272,478 —(Ricoh)。

相关文档
最新文档