信息论基础第三章~第七章
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
3.4 算术码 香农—费诺码
在3.2节中我们证明了码长取为1()log
()l x p x ⎡⎤
=⎢⎥⎢⎥
时满足克莱夫特不等式,因此可用来构造唯一可译码。本节要介绍一种利用累积分布函数来分配码字的构造编码方法,通常称为香农—费诺方法。设信源随机变量X 取值于字符集{1,2,...,}m χ=,不失一般性,设对所有x χ∈ 有()0p x >定义累积分布函数
()()a x
F x p a ≤=∑
和修正的累积分布函数
1
()()()2
a x
F x p a p x <=+
∑ 我们称()p x 为()F x 的步长。 这两个函数计算示意图见图3.4.1.
图3.4.1 香农---费诺码的累积分布函数
因为所有字母x 都有正概率, 因此当(,)x y x y χ≠∈时有()()F x F y ≠。如果知道了
()F x 就可以找到对应的x ,这就提示我们可以用()F x 作为x 的码字,比如用()F x 的二
进小数表示。但通常()F x 是实数,它未必能用有限多位二进制小数来表出,那么能否用近似表示呢? 如用()F x 的二进制小数表示中前()l x 位来近似表示,我们把它记为()
()l x F x ⎢⎥⎣⎦ ,
则它和()F x 的差距应满足以下不等式.
()
()1()()2l x l x F x F x ⎢⎥-<
⎣⎦
比如取1()log
1()l x p x ⎡⎤
=+⎢⎥⎢⎥
时有
()
1log ()11
1
()()(1)
2
2
22
l x p x p x F x F x ⎡⎤⎢⎥⎢⎥
≤<=-- 因此
()()l x F x ⎢⎥⎣⎦位于对应x 的步长之内,可见用()l x 比特来描述x 足够了。也就是
说如果
12()()1()0.......
l x l x F x a a a a +=(其中
01i a =或),则可取
12()(...)l x a a a 作为的码字。
事实上,每一个码字对应的区间长度为
()
2()(1)l x F x F x -<--,区间的左端点
12()0....l x a a a 位于对应x 的步长的左半部(即小的那一半),而右端点
12()()
10....2l x l x a a a +
位于步长顶端的下方,这说明整个区间
12()12()()1[0...., 0....]
2
l x l x l x a a a a a a +
全部落在累积分布函数中对应x 的步长
之内,从而对应不同码字的区间是不相交的,因此此码是即时码。
因为码字长
1
()log1
()
l x
p x
⎡⎤
=+
⎢⎥
⎢⎥
则码的平均码长为
1
()()()(log1)()2
()
x x
L p x l x p x H X
p x
⎡⎤
==+<+
⎢⎥
⎢⎥
∑∑
比理论的最做优值---信源熵H(X)只多2个比特。以下我们举2个例子来说明这种编码方法。
在3.3节中讨论哈夫曼码时,我们曾提到要进一步提高编码效率,需对长的信源序列来
编码,这对香农---费诺码也是对的,即对信源输出的n 长符号列
12(,,...,)n n x x x x =用香农---费诺方法进行编码,这种编码称算术码。其基本方法是要找一个计算n
x 的概率分布
()n p x 和累积分布函数()n F x 的快速算法,然后用香农---费诺方法对n x 进行编码。实际上
就是用区间
(()(),()]n n n
F x p x F x -中的一个数的二进制数字表示作为n x 的码字。由于对不同的
n x ,这样的区间是不相交的,因此它们对应的码字也不同,但这样选取的
码字集不能保证一定是即时码。如果利用四舍五入到1log
1()n p x ⎡⎤
+⎢⎥⎢
⎥
比特来表示n x ,可以保证得到即时码。
以下我们介绍一个简化的计算程序来理解算术码编译码的基本要点,不失一般性,我们仅考虑二进信源,即信源字母集为{0,1}χ=。我们要对n 长的信源字母列
12(,,...,)n n x x x x χ=∈进行编码。
1)先对所有n n x χ∈,计算概率12()(,,...,)n n p x p x x x =;
2)在n χ上建立一个字典序,对
1212(,,...,),(,,...,)n n n n x x x x y y y y χ==∈,称
n n x y >,如果在第一个满足i i x y ≠的第i 个分量上1,0i i x y ==,这个条件等价于
22i i
i i i
i
x y -->∑∑,也等价于它们对应的二进小数12120....0....n n x x x y y y >。
我们用()n x i 表示n χ中在字典序下第i 个n 长向量。
3)用一个二叉树来表示{:}n n n x x χ∈(见图3.4.2),A 为根结点,每个n
x 对应第n 层上一个结点,从根结点到该结点的路上经过的边上的符号就是12...n x x x ,如图中B 代表
4(0011)B x =,C 代表4(1010)C x =,显然按字典如果n n x y >,其充要条件是n x 对应之结点在n
y 对应的结点的右边,如上44C B
x y >。
图3.4.2 算术码的树图 4)计算()()n n
n
n y x F x p y ≤=
∑
,即要计算树上在n x 结点左边的的所有n y 之概率和,用
11...0k x x T -表示由对应121...0k x x x -的中间结点以下的子树(例见图中00T 为结点(00)D 以下之
子树).
这个子树的概率为
111...011111...()(...0...)(...0)k k n
x x k k n k y y p T p x x y y p x x -+-+-=
=∑
于是
11,0
()()()(...0)n n
n k n
k k n x y x T x F x p y p T p x x -≤=≤=
=
=
∑∑
∑
子树在左边
假设12......n X X X 为无记忆信源,服从公共分布为贝努里分布,(1),(0)1p p θθ==-.则