【通信原理 入坑之路】——信息论部分 之 离散无记忆信源的等长编码

课本上的讲解公式实在是太多啦!看得人头大,那么本文试图从繁杂的公式中梳理一下几种等长编码的方法,并在最后给出一些解题技巧。我们开始吧!

离散无记忆信源的等长编码

首先,我们记离散信源的符号集为: { S : S i , i = 1 , 2 , ⋯   , L } \{S:S_i, i=1,2,\cdots,L\} {S:Si,i=1,2,,L}它包含了L种不同的符号;信源的输出符号序列我们可以表示为: { X 1 , X 2 , ⋯   , X n } \{X_1, X_2, \cdots, X_n\} {X1,X2,,Xn}其中, X k ∈ { S : S i , i = 1 , 2 , ⋯   , L } X_k∈\{S:S_i, i=1,2,\cdots,L\} Xk{S:Si,i=1,2,,L}.

接下来,我们对这个离散信源进行分组( J J J个为一组),那么根据排列组合的知识我们知道,最多可以得到: L J L^J LJ种组合。我们看其中的某一组 α α α(里面有 J 个符号): { X 1 , X 2 , ⋯   , X J } \{X_1, X_2, \cdots, X_J\} {X1,X2,,XJ}

我们现在要做的,就是对这一共 L J L^J LJ 个组合进行编码。那么我们来看看用于编码的码元集 C C C { C 1 , C 2 , ⋯   , C D } \{C_1, C_2, \cdots, C_D\} {C1,C2,,CD}
这里的 D D D表示我们的码元集是 D 进制的。例如:如果 D = 2 D = 2 D=2,那么 C = { 0 , 1 } C = \{0, 1\} C={0,1};如果 D = 4 D = 4 D=4,那么 C = { 0 , 1 , 2 , 3 } C = \{0, 1, 2, 3\} C={0,1,2,3}。诸如此类。

同时,我们设置的码元集中每一个符号都是等概率出现的,因此,根据前面的知识我们知道:码元集中的每一个符号的平均信息量可以写成: H = l o g   D H = log\space D H=log D

而因为我们的码元集一共才只有 D 个元素,那可能是不够给 L J L^J LJ 来编码的,因此我们对于码元集,也是以 n J n_J nJ个为一组来对信源组合进行编码的。比如上面的 α α α组,我们就可以编码为: C 1 C 2 ⋯ C n J C_1C_2\cdots C_{n_J} C1C2CnJ

那么,为了保证 L J L^J LJ种组合里面每一种组合都可以被唯一地编码,我们要求: D n J ≥ L J D^{n_J} ≥ L^J DnJLJ

OK!至此,其实我们的编码已经完成了,还有一件事情 —— 我们管编码完成的那个序列叫做码字。那么每一个码字所包含的平均信息量可以写成: n J l o g   D n_Jlog\space D nJlog D

那么因为 C 1 C 2 ⋯ C n J C_1C_2\cdots C_{n_J} C1C2CnJ 这个序列唯一地表示 { X 1 , X 2 , ⋯   , X J } \{X_1, X_2, \cdots, X_J\} {X1,X2,,XJ},所以相当于编码每一个信源符号所需要的平均信息量就是 n J l o g   D J \frac{n_Jlog\space D}{J} JnJlog D
上式我们也称之为编码速率,用 R R R 表示: R = n J l o g   D J R = \frac{n_Jlog\space D}{J} R=JnJlog D

最后我们直接给出编码效率的表达式: η = H ( X ) R η = \frac{H(X)}{R} η=RH(X)
我们从直观上理解一下这个表达式的物理意义:分子 H ( X ) H(X) H(X)是信源种每一个符号所包含的平均信息量。而分母是编码一个信源符号所需要的平均信息量。那么很自然地,我们通信不就是为了信息不丢失地传输吗,那肯定没理由编码完了之后信源符号的信息量都给丢失了。也就是说:用于编码的信息量至少要包含信源符号的平均信息量。即: R ≥ H ( X ) R ≥ H(X) RH(X)
所以编码效率始终是≤1的


1.1 单符号等长编码

这很简单,所谓单符号,就是 J = 1 J = 1 J=1,那么为了保证唯一编码,有: D n J ≥ L D^{n_J} ≥ L DnJL
即: n J ≥ l o g   L l o g   D n_J ≥ \frac{log\space L}{log \space D} nJlog Dlog L
为了保证 n J n_J nJ 是整数,我们直接给他加上一个调整系数 α 1 α_1 α1 n J = l o g   L l o g   D + α 1 n_J = \frac{log\space L}{log \space D} +α_1 nJ=log Dlog L+α1
所以 R = l o g   L + α 1 l o g   L R = log\space L + α_1log\space L R=log L+α1log L
即编码效率为: η = H ( X ) l o g   L + α 1 l o g   L η = \frac{H(X)}{log\space L + α_1log\space L} η=log L+α1log LH(X)

1.2 联合编码

所谓联合编码,只不过就是 J J J不等于1了,那么还是一样:为了保证编码的唯一性,有: D n J ≥ L J D^{n_J} ≥ L^J DnJLJ
解得: n J ≥ J l o g   L l o g   D n_J ≥ J\frac{log \space L}{log \space D} nJJlog Dlog L

同样加上一个调整系数 α 2 α_2 α2,得: n J = J l o g   L l o g   D + α 2 n_J= J\frac{log \space L}{log \space D} + α_2 nJ=Jlog Dlog L+α2
那么,也可以得到编码速率和编码效率为: R = l o g   L + α 2 l o g   D J R = log\space L + \frac{α_2log\space D}{J} R=log L+Jα2log D
η = H ( X ) l o g   L + α 2 l o g   D J η = \frac{H(X)}{log\space L + \frac{α_2log\space D}{J}} η=log L+Jα2log DH(X)
J → ∞ J\to∞ J时,有: η = H ( X ) l o g   L η = \frac{H(X)}{log\space L} η=log LH(X)
很明显,我们可以看出,联合编码的编码效率是比单符号等长编码的效率高的。

1.3 典型序列编码

首先我们来讲讲啥是典型序列:
还是一样,对于信源 { X 1 , X 2 , ⋯   , X n } \{X_1, X_2, \cdots, X_n\} {X1,X2,,Xn}
我们仍然以 J 个一组划分,得到 L J L^J LJ 个序列,其中某一个为: { X 1 , X 2 , ⋯   , X J } \{X_1, X_2, \cdots, X_J\} {X1,X2,,XJ}

我们设这一组J个符号的序列的信息量是: I ( X J ˉ ) I(\bar{X_J}) I(XJˉ),那么每一个符号的平均信息量就是: I ( X J ˉ ) J \frac{I(\bar{X_J})}{J} JI(XJˉ)
那么如果存在一个整数 ε ε ε,有: P { J [ H ( X ) − ε ] ≤ I ( X J ˉ ) ≤ J [ H ( X ) + ε ] } P\{J[H(X) - ε] ≤ I(\bar{X_J})≤ J[H(X) + ε]\} P{J[H(X)ε]I(XJˉ)J[H(X)+ε]}

那么我们就说这个 J个符号的序列是典型序列。上式的物理意义就是这个序列里面每一个符号的平均信息量逼近信源的熵。 那么,显然,不满足上式的就是非典型序列。

好的,下面我们看看典型序列编码:
我们把信源一共 L J L^J LJ 种序列划分为典型序列和非典型序列。然后,我们只对典型序列进行编码,而对非典型序列均用某一个码字来代替。

经过课本blabla的一顿数学推导,我们得到了下面一个重要结论:

当J 足够大时,典型序列的个数 ∣ T S ∣ |T_S| TS满足: 2 J [ H ( X ) − ε ] ≤ ∣ T S ∣ ≤ 2 J [ H ( X ) + ε ] 2^{J[H(X) - ε]}≤ |T_S|≤2^{J[H(X) + ε]} 2J[H(X)ε]TS2J[H(X)+ε]

那么,同样为了满足编码的唯一性,我们要求: D n J ≥ 2 J [ H ( X ) + ε ] D^{n_J} ≥ 2^{J[H(X) + ε]} DnJ2J[H(X)+ε]
得到: n J ≥ J [ H ( X ) + ε ] l o g   D n_J ≥ \frac{J[H(X) + ε]}{log\space D} nJlog DJ[H(X)+ε]
即: n J = J [ H ( X ) + ε ] l o g   D + α 3 n_J = \frac{J[H(X) + ε]}{log\space D} + α_3 nJ=log DJ[H(X)+ε]+α3
η = H ( X ) J [ H ( X ) + ε ] + α 3 l o g   D J η = \frac{H(X)}{J[H(X) + ε] + \frac{α_3log\space D}{J}} η=J[H(X)+ε]+Jα3log DH(X)
当 J 足够大时,编码效率是可以趋近于1 的。

最后一点我们要说的是:本节介绍的典型序列编码的方法是只对典型序列编码,而非典型序列只是用某一码字代替。那么这种代替码字在译码时就会出现错误。那么这个译码错误的概率我们应该如何表示呢?—— 对了!就是用非典型序列出现的概率就OK了, 如下: P E = P [ ∣ I ( X J ˉ ) J − H ( X ) ∣ > ε ] P_E = P[|\frac{I(\bar{X_J})}{J} - H(X)| > ε] PE=P[JI(XJˉ)H(X)>ε]
【值得注意是:信源的所有组合中,除了典型序列,剩下的就是非典型序列了】

而经过数学证明我们可以得到下面的重要式子: P 非 典 型 序 列 的 概 率 = P [ ∣ I ( X J ˉ ) J − H ( X ) ∣ > ε ] < σ I 2 J ε 2 P_{非典型序列的概率} = P[|\frac{I(\bar{X_J})}{J} - H(X)| > ε] < \frac{σ_I^2}{J ε^2} P=P[JI(XJˉ)H(X)>ε]<Jε2σI2

这个式子有什么用呢?—— 如果题目给定了所要求的误码率 P E P_E PE,那么我们就可以计算得到满足该误码率所需要的 J J J

值得注意的是:当信源给定之后,我们有如下定理:
R > H ( X ) R > H(X) R>H(X) 则这个编码速率是可达的;如果 R < H ( X ) R < H(X) R<H(X) 那么这个编码速率是不可达的。
所谓的“可达”就是指如果存在一个码长 J 0 J_0 J0 和一个任意的 ε > 0 ε>0 ε>0,使得 J > J 0 J > J_0 J>J0 时, P E < ε P_E < ε PE<ε


解题宝典:典型序列辨析

下面关于比较容易出错的典型序列,博主整理了一下相关的容易混淆的概念:
在这里插入图片描述

我们还是对信源输出序列按照 J 个一组划分,那么我们记第 k k k 个典型序列为 X k X_k Xk。那么典型序列有下面的性质:

【1】整个输出符号组的集合由典型序列和非典型序列组成。
【2】千万不要以为出现概率大的就是典型序列,典型序列集中各码组出现的概率几乎相等,为: P ( X k ) = 2 − J H ( S ) P(X_k) = 2^{-JH(S)} P(Xk)=2JH(S)
【3】典型序列集码组中每一个符号所含的信息量近似等于信源的熵。
【4】在输出序列里面典型序列集所占的概率趋近于1

雷区:1. 个别典型序列出现的概率并不一定比典型序列出现的概率低。 2. 非典型序列总的概率很小,但非典型序列集中的码组数目并不一定小!

下面我们看两个例子,充分理解典型序列的辨析:
某二元信源服从二项分布: S 0 : P ( S 0 ) = 0.8 S 1 : P ( S 1 ) = 0.2 S_0:P(S_0)=0.8\quad S_1:P(S_1)=0.2 S0:P(S0)=0.8S1:P(S1)=0.2
(1)假如取:J=4, ε = 0.5 ε=0.5 ε=0.5,求相应的典型序列集。


首先,我们可以很容易计算出信源的熵为: H ( S ) = 0.7219 H(S) = 0.7219 H(S)=0.7219,下面根据典型序列的定义: H ( S ) − ε ≤ I ( X J ˉ ) J ≤ H ( S ) + ε H(S)-ε≤\frac{I(\bar{X_J})}{J}≤H(S)+ε H(S)εJI(XJˉ)H(S)+ε
因为 J=4,所以我们就是把信源符号按照4个为一组的组合,我们来看看这4个符号的组合的信息量,然后验证是否满足上面的式子。所以我们把所有4个符号一组的可能情况都列出来:

在这里插入图片描述

下面我们就看不同的序列集,他们序列中平均每个符号的信息量是否在区间: [ H ( S ) − ε , H ( S ) + ε ] = [ 0.2219 , 1.2219 ] [H(S)-ε, H(S)+ε]=[0.2219, 1.2219] [H(S)ε,H(S)+ε]=[0.2219,1.2219]里面,如果是,那么该序列就是典型序列,反之。

经过筛选,我们就发现也只有4个序列是典型序列: S 0 S 0 S 0 S 1 , S 0 S 0 S 1 S 0 , S 0 S 1 S 0 S 0 , S 1 S 0 S 0 S 0 S_0S_0S_0S_1, S_0S_0S_1S_0, S_0S_1S_0S_0, S_1S_0S_0S_0 S0S0S0S1,S0S0S1S0,S0S1S0S0,S1S0S0S0,但是我们发现就这四个序列,他们出现的概率的和居然是 0.8192,相比之下,尽管非典型序列有11个之多,但是他们总共出现的概率之和才是 0.1808. 所以,尽管非典型序列占据了较大比例的排序组合,但是其出现仍然是小概率事件。

下面我们更加深入一点探讨典型序列编码:

问:如果信源还是上面的分布,如果我们要求误码率是 P E = 1 0 − 4 P_E = 10^{-4} PE=104,且编码效率 η = 0.9 η = 0.9 η=0.9,问所需编码得符号码组长度 J 是多少?

首先,我们知道,编码效率可以写成: η = H ( S ) R η = \frac{H(S)}{R} η=RH(S)
而因为是典型序列编码, H ( S ) H(S) H(S)是很接近 R R R 的,所以我们设: R = H ( S ) + ε R = H(S)+ε R=H(S)+ε,那么编码效率进一步表示成: η = H ( S ) H ( S ) + ε = 0.9 η = \frac{H(S)}{H(S)+ε}=0.9 η=H(S)+εH(S)=0.9
H ( S ) H(S) H(S) 我们刚刚已经算出来是 0.7219,所以,我们算出来 ε = 0.0802 ε=0.0802 ε=0.0802

下面我们回顾典型序列编码的误码率公式: P E = σ I 2 J ε 2 P_E = \frac{σ_I^2}{Jε^2} PE=Jε2σI2

我们下面计算符号自信息量的方差 σ I 2 σ_I^2 σI2,由公式: σ I 2 = ∑ i = 1 L p ( S i ) [ I ( S i ) − H ( S ) ] 2 σ_I^2 = \sum_{i=1}^Lp(S_i)[I(S_i)-H(S)]^2 σI2=i=1Lp(Si)[I(Si)H(S)]2

我们可以算出来: σ I 2 = 0.64 σ_I^2 = 0.64 σI2=0.64,最终带入公式,我们发现所需要的 J J J 居然是 1 0 5 10^5 105 数量级的,实际中要用这么长的序列编码显然是不现实的。因此就引入了我们后面的霍夫曼编码。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值