Range Coder编码比特流

本文简述如何实际应用Range Coder编码比特流

上文中介绍过,Range Coder编码需要预先设定编码符号各自的概率,即全体符号的概率分布。二进制比特流由符号0和符号1构成,作为整体而言,自然是有一个固定的概率分布,以该分布对其进行编码是完全可行的。但是,这种方法编码很难达到理想的压缩效果,原因和解决方法如下:

首先,在实际应用中,待编码比特流往往有着复杂的内部逻辑结构,往往由若干概率分布不同的子比特流嵌合而成————即在同一个子比特流内部,相邻的比特倾向于呈现相同的概率分布,而不同的子比特流的概率分布则可能完全不同。上文提到过,编码时使用的概率分布和实际概率分布越相近,压缩效率就越高;反之就越低。使用整体概率分布对二进制流进行编码时,整体概率可能跟各个同分布子比特流的概率分布都有出入,因此压缩性能可能不尽理想。因此优化的第一步是分析出每个嵌合在待编码比特流中的子流,编码时对每个子流进行独立的Range Coding。

举一个例子:
需要编码如下整数:

2 5 3 1 0

可以将它们写成指数哥伦布编码的形式,即

2: 011
5: 00110
3: 00100
1: 010
0: 1

一共17比特,其中0占10个,概率分布为(10/17, 7/17) 约等于 (0.588, 0.412)
然后,通过观察将该比特流分成两个子比特流:指数(前缀),偏移量(后缀),分别是:
前缀:

01 001 001 01 1

后缀(解码时先解前缀,根据前缀来解码后缀,0没有后缀比特):

1 10 00 0

它们各自的概率分布:
前缀:

(6/11, 5/11) 约等于 (0.545, 0.455)

后缀:

<
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值