熵编码之区间编码

#part of project

1.编解码大致过程--编码一个符号

  对于给定符号s,将其编为某一区间内的一个值。将一个可写为b的w次幂的整数R作为初始区间大小,即初始区间范围。设初始区间为[L,H],则R=H-L+1。另外还需要准备的量有:所有符号的总计频度T,符号S的频度fs,符号S的累计频度Fs。注:累计频度为所有符号值小于S的其他符号的频度之和。计算公式:

  例:现有由四个符号组成的信息,符号分别为A,B,C,D,先对D编码:

①编码前初始化:所有符号初始的频度都为1,初始区间范围R=b^{^{w}},设b=10,w=2,即R=100,区间[0,99]。根据区间映射公式(如下),可计算得到各个符号的相关信息如下表:

若对符号D编码,即取符号D映射区间的一个值V即可,假设取V=80,该值属于[75,99]。V可以分解V=8*10^{_{1}}即8*b^{_{1}},此时可以仅输出8作为符号D的编码值。

②解码:解码前的初始化必须与编码前的初始化完全一致,即初始频度、区间范围必须一致。仅输入例子中编码得到的8,根据下表可推断出符号累积频度,根据累计频度可估计出对应符号。

输入8,对应V为80,计算出频度为3.2,估为3,对应符号为D。

2.编解码大致过程--编码两个符号

  当编码一个符号后的映射区间足够大,可以对这个区间进行继续划分进而编码下一个符号。相应的,当编码符号过多时,为了有足够大的映射区间应加大初始化时的区间范围

例:编码符号DC:

  设初始w=3,初始区间范围R=1000,映射区间的计算结果如下:

***初始时所有符号的频度都设为1,输入一个符号,计算了这个符号的映射区间后需将该符号的频度加1.在编码第一个符号时使用的是初始区间,编码第二个符号时需要使用的是第一个符号的映射区间***。在当前的例子中,最后可以输出850(区间850~900内),省略后为85,即DC的编码结果就是85。  在编码的时候,没必要将每个符号的映射区间都计算出来。只需要计算当前输入符号的映射区间即可。

3.正规化

以上是理论层面,实际上,每次编码后映射区间都会在上一次的基础上压缩,极限情况下会导致映射区间范围趋向0。解决方法是对映射区间正规化,即每次区间满足一定条件时,将一些不必要的数字从区间中移出,并对区间进行一次扩展。  

区间大小本身是有范围的,设为[Rmin(计算b^{^{w-1}}),Rmax(计算b^{^{w}})]。设b=10,w=3,则Rmin=100,Rmax=1000。假设有一个区间[1319314,1320105],我们可以将这个区间分为三个部分:

第一部分都是13,即完全相同的高位数字,后续细分区间中该部分数字也不会发生变化,故称为不变数字,用c表示;第二部分19,20,仅差1,这两个数字可以用公式(d + 1) * bn - 1 - 1(d + 1) * bn - 1来表示。我们称d为延迟数字,称n为延迟长度。在这个例子里:d = 1n = 2

n = 0d = 0。当出现延迟数字时,即:n ≠ 0,表明区间的上沿和下沿靠的很近。如果区间的上下沿靠的过近,即R偏小,会严重的影响运算精度。所以此时,也需要将延迟数字移出区间但是,当出现延迟数字时,我们通常无法知道区间的变化是趋向d还是趋向d + 1。所以延迟数字暂时不能输出。当区间的变化趋势可以确定时,再输出延迟数字

区间的第3个部分,是两个长度为w的数字。该部分可以作为映射区间,用于下一次编码。

根据上面的描述我们可以发现,不变数字c和延迟数字d都是可以移出区间的那么我们可以确定的一个移出数字xx可以由下述公式进行计算。x = c * bn + (d + 1) * bn - 1现在我们可以将区间[L,H]转换为c,(d,n),[L”,H”]的形式。其中的数学关系如下所示。

根据上面的公式,我们可以将区间[1319314,1320105]转换为13不变数字c,(1,2)延迟数字,延迟长度,[-686,105]根据公式计算得到的L'' H'')的形式。这样,我们就可以使用一个较小的区间[L”,H”]来模拟无限区间[L,H]上的运算。每当区间满足条件时,就将数字从区间中移出。现在我们仍就对数据“DCBDDDAADCB”进行压缩,不过这次将使用正规化。压缩前设Rmax = 1000Rmin = 100,初始区间范围R = Rmax。编码时映射区间的变化,以及正规化操作如表所示。

正规化的映射区间并不是逐步变小的

正规化的操作只有在R ≤ Rmin时进行每编码完一个符号,都要检查是否需要进行正规化操作。正规化的时候要先检查是否有延迟数字,然后再检查是否有不变数字

总结几个要点:

初始区间大小满足基的整数次幂;

区间映射,编码区间跟随映射区间;

编解码前的初始化必须一致,解码根据估算的频度估计得到对应符号;

当区间大小不满足范围时需要对当前区间正规化,移出一些不变数字、延迟数字(输入至码流中),再对区间进行扩展;;每编完一个符号都要检查是否需要正规化。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值