第6章 编码定理证明(Coding Theorem Proofs)
一、导读
6.1 本章学习目标
通过本章的学习,你将能够:
理解随机编码论证的核心思想:掌握为什么随机选择码本可以证明好码的存在性
掌握联合典型性译码的分析方法:能够使用联合典型性进行错误概率分析
理解信源编码定理的完整证明:掌握典型序列编码和Kraft不等式在证明中的应用
理解信道编码定理的完整证明:掌握随机码本构造和Union bound的使用
掌握Fano不等式在反面证明中的应用:理解如何用Fano不等式推导 converse
理解典型序列译码与最大似然译码的关系:比较不同译码准则的性能
能够独立完成简单的信息论证明:培养严谨的信息论推理能力
理解存在性证明与构造性证明的区别:为什么香农的证明是非构造性的
6.2 为什么本章如此重要
编码定理的证明是信息论最精彩的部分之一。香农的伟大洞见在于:与其试图构造一个具体的好码,不如证明随机选择的码本以高概率是好的。这种概率方法彻底改变了人们对编码问题的看法。
理论重要性:
这些证明不仅确立了信息论的基本极限,还引入了许多重要的数学工具:典型序列、联合典型性、随机编码、Union bound、Fano不等式等。这些工具在网络信息论、统计学习理论、组合优化等领域都有广泛应用。
方法论重要性:
随机编码论证是一种强大的存在性证明技术。它告诉我们,虽然可能无法显式构造最优对象,但可以证明这样的对象"几乎总是"存在。这种思路在理论计算机科学中反复出现。
实践启发性:
虽然香农的随机码本在实际中不可行(复杂度太高),但证明中的关键思想启发了后续实用编码方案的设计。LDPC码和Turbo码的成功部分归功于它们近似实现了随机码本的性能。
6.3 核心问题引导
在学习本章之前,请思考以下问题:
为什么要用随机编码? 既然随机码本不实用,为什么还要研究它?
Union bound是什么? 为什么在错误概率分析中经常使用这个看似粗糙的工具?
典型序列译码和最大似然译码有什么区别? 哪个更容易分析?哪个性能更好?
Fano不等式如何用于证明反面? 它如何将错误概率与信息量联系起来?
为什么香农的证明是非构造性的? 存在性证明和构造性证明各有什么优缺点?
错误概率随码长如何变化? 为什么指数级衰减很重要?
随机编码的"平均"性能与"最坏情况"性能有什么关系?
如何从离散信道的证明推广到连续信道? 需要哪些技术调整?
二、核心概念详解
6.1 随机编码论证
6.1.1 基本思想
传统思路:要证明存在一个好码,尝试构造它。
香农的思路:证明随机选择的码本以正概率是好的,因此好码存在。
关键洞察:
- 不需要找到具体的好码,只需要证明好码存在
- 随机码本的平均性能给出了存在性保证
- 如果平均错误概率很小,那么至少有一个码本的错误概率也很小
数学表述:
设 $\mathcal{C}$ 是所有可能码本的集合,$P_e(\mathcal{C})$ 是码本 $\mathcal{C}$ 的错误概率。
如果 $\mathbb{E}_{\mathcal{C}}[P_e(\mathcal{C})] < \epsilon$,则存在某个 $\mathcal{C}^$ 使得 $P_e(\mathcal{C}^) < \epsilon$。
6.1.2 随机码本的生成
对于离散无记忆信道,随机码本生成过程:
选择输入分布 $p(x)$(通常是最优分布 $p^*(x)$)
对于每个消息 $m \in \{1, 2, \ldots, 2^{nR}\}$:
- 独立生成码字 $x^n(m)$,每个符号独立服从 $p(x)$
所有码字构成码本 $\mathcal{C}$
重要性质:
- 不同码字之间独立
- 每个码字的符号之间独立(i.i.d.)
- 码本是随机的,但一旦生成就固定
6.1.3 为什么随机码本有效
直觉解释:
随机码本的码字在序列空间中"均匀散布"。对于给定的接收序列 $y^n$,只有少数码字会与它"看起来相关"(即联合典型)。如果码率不太高,正确码字是唯一联合典型的可能性很大。
几何图像:
想象序列空间是一个高维球体。每个码字周围有一个"典型区域"(与之联合典型的接收序列集合)。如果码字数量不多,这些区域很少重叠,接收端可以准确判断哪个码字被发送。
代码示例6-1:随机码本可视化
import numpy as np
import matplotlib.pyplot as plt
from sklearn.decomposition import PCA
def visualize_random_codebook(n_symbols=2, n_dim=10, n_codewords=16):
"""
可视化随机码本在高维空间中的分布
参数:
n_symbols: 字母表大小
n_dim: 序列长度(维度)
n_codewords: 码字数量
"""
# 生成随机码本
codebook = np.random.randint(0, n_symbols, size=(n_codewords, n_dim))
# 降维到2D以便可视化
pca = PCA(n_components=2)
codebook_2d = pca.fit_transform(codebook.astype(float))
plt.figure(figsize=(10, 8))
plt.scatter(codebook_2d[:, 0], codebook_2d[:, 1],
c=range(n_codewords), cmap='viridis', s=100, edgecolors='black')
for i in range(n_codewords):
plt.annotate(f'{i}', (codebook_2d[i, 0], codebook_2d[i, 1]),
fontsize=8, ha='center', va='center')
plt.xlabel('第一主成分', fontsize=12)
plt.ylabel('第二主成分', fontsize=12)
plt.title(f'随机码本可视化 ({n_codewords}个{n_dim}维码字)', fontsize=14)
plt.colorbar(label='码字索引')
plt.grid(True, alpha=0.3)
plt.tight_layout()
plt.savefig('random_codebook_viz.png', dpi=150)
plt.show()
# 计算最小汉明距离
min_dist = n_dim
for i in range(n_codewords):
for j in range(i+1, n_codewords):
dist = np.sum(codebook[i] != codebook[j])
min_dist = min(min_dist, dist)
print(f"码本参数: {n_codewords}个码字, 长度{n_dim}")
print(f"最小汉明距离: {min_dist}")
print(f"归一化最小距离: {min_dist/n_dim:.4f}")
# 测试
visualize_random_codebook(n_symbols=2, n_dim=20, n_codewords=16)6.2 联合典型性译码
6.2.1 译码规则
联合典型性译码器:
给定接收序列 $y^n$,译码器执行以下步骤:
寻找消息 $m$,使得 $(x^n(m), y^n) \in A_\epsilon^{(n)}$(联合典型集)
如果存在唯一的这样的 $m$,输出 $\hat{m} = m$
否则,报错(error)
与最大似然译码的比较:
最大似然译码:$\hat{m} = \arg\max_m p(y^n | x^n(m))$
- 最大似然译码是最优的(最小错误概率),但分析复杂
- 联合典型性译码次优,但易于分析
- 对于大 $n$,两者性能接近
6.2.2 错误事件定义
定义以下错误事件:
- $E_0$:正确码字与接收序列不联合典型,即 $(x^n(M), Y^n) \notin A_\epsilon^{(n)}$
- $E_i$($i \neq M$):错误码字 $i$ 与接收序列联合典型,即 $(x^n(i), Y^n) \in A_\epsilon^{(n)}$
总错误事件:$E = E_0 \cup \bigcup_{i \neq M} E_i$
6.2.3 错误概率分析
步骤1:分析 $P(E_0)$
由AEP,当 $n$ 足够大时:
$$P(E_0) < \epsilon$$
步骤2:分析 $P(E_i)$ for $i \neq M$
由于码字独立生成,$x^n(i)$ 与 $Y^n$ 独立(当 $i \neq M$)。
由联合典型性引理:
$$P((x^n(i), Y^n) \in A_\epsilon^{(n)}) \leq 2^{-n(I(X;Y) - 3\epsilon)}$$
步骤3:Union bound
$$\begin{align*}
P(E) &= P(E_0 \cup \bigcup_{i \neq M} E_i) \\
&\leq P(E_0) + \sum_{i \neq M} P(E_i) \\
&< \epsilon + (2^{nR} - 1) \cdot 2^{-n(I(X;Y) - 3\epsilon)} \\
&< \epsilon + 2^{nR} \cdot 2^{-n(I(X;Y) - 3\epsilon)} \\
&= \epsilon + 2^{-n(I(X;Y) - R - 3\epsilon)}
\end{align*}$$
当 $R < I(X;Y) - 3\epsilon$ 时,第二项指数级趋于0。
结论:只要 $R < I(X;Y)$,可以选择足够大的 $n$ 使得 $P(E) < \epsilon'$。
代码示例6-2:错误概率仿真
import numpy as np
import matplotlib.pyplot as plt
def simulate_error_probability(n, R, C, n_trials=1000):
"""
模拟错误概率随码长的变化
参数:
n: 码长
R: 传输速率 (bits/use)
C: 信道容量 (bits/use)
n_trials: 试验次数
返回:
估计的错误概率
"""
errors = 0
for _ in range(n_trials):
# 生成随机码本
n_messages = int(2**(n * R))
codebook = np.random.randint(0, 2, size=(n_messages, n))
# 随机选择一个消息
true_msg = np.random.randint(0, n_messages)
true_codeword = codebook[true_msg]
# 通过BSC(0.1)传输
p = 0.1
noise = np.random.rand(n) < p
received = true_codeword ^ noise
# 联合典型性译码(简化版:汉明距离最近)
distances = [np.sum(codebook[m] != received) for m in range(n_messages)]
decoded_msg = np.argmin(distances)
if decoded_msg != true_msg:
errors += 1
return errors / n_trials
# 测试不同码长
C = 0.531 # BSC(0.1)的容量
R = 0.4 # 低于容量
n_values = [5, 10, 15, 20, 25, 30]
error_probs = []
for n in n_values:
pe = simulate_error_probability(n, R, C, n_trials=200)
error_probs.append(pe)
print(f"n={n}: P_e = {pe:.4f}")
# 可视化
plt.figure(figsize=(10, 6))
plt.semilogy(n_values, error_probs, 'bo-', linewidth=2, markersize=8)
plt.xlabel('码长 n', fontsize=12)
plt.ylabel('错误概率 P_e', fontsize=12)
plt.title(f'错误概率 vs 码长 (R={R}, C={C})', fontsize=14)
plt.grid(True, alpha=0.3)
plt.axhline(y=1, color='r', linestyle='--', alpha=0.3, label='上界')
plt.legend()
plt.tight_layout()
plt.savefig('error_prob_vs_n.png', dpi=150)
plt.show()6.3 信源编码定理证明
6.3.1 正面证明(Achievability)
目标:证明对于任意 $R > H(X)$,存在编码方案使得错误概率任意小。
证明:
典型集编码:
- 选择块长 $n$
- 枚举典型集 $A_\epsilon^{(n)}$ 中的序列
- 典型集大小 $|A_\epsilon^{(n)}| \leq 2^{n(H(X)+\epsilon)}$
- 为每个典型序列分配唯一的 $n(H(X)+\epsilon)$ 比特索引
编码:
- 如果 $x^n \in A_\epsilon^{(n)}$,输出其索引($n(H(X)+\epsilon)$ 比特)
- 否则,输出特殊标记 + 原始序列
错误概率:
- 错误发生在 $x^n \notin A_\epsilon^{(n)}$ 时
- 由AEP,$P(x^n \notin A_\epsilon^{(n)}) < \epsilon$(当 $n$ 足够大)
压缩率:
- 典型序列:$n(H(X)+\epsilon)$ 比特 → 每符号 $H(X)+\epsilon$ 比特
- 非典型序列:额外开销,但概率小于 $\epsilon$
- 平均压缩率:$R \approx H(X) + \epsilon$
当 $\epsilon \to 0$,$R \to H(X)$。证毕。
6.3.2 反面证明(Converse)
目标:证明任何压缩率 $R < H(X)$ 的编码方案必然有非零错误概率。
证明(使用Fano不等式):
设编码器 $f: \mathcal{X}^n \to \{1, 2, \ldots, 2^{nR}\}$,译码器 $g$。
定义估计值 $\hat{X}^n = g(f(X^n))$,错误概率 $P_e = P(X^n \neq \hat{X}^n)$。
由Fano不等式:
$$H(X^n|\hat{X}^n) \leq H_b(P_e) + P_e \log_2(|\mathcal{X}|^n - 1) \leq 1 + P_e n \log_2 |\mathcal{X}|$$
另一方面:
$$\begin{align*}
H(X^n) &= H(X^n|\hat{X}^n) + I(X^n;\hat{X}^n) \\
&\leq H(X^n|\hat{X}^n) + H(\hat{X}^n) \\
&\leq 1 + P_e n \log_2 |\mathcal{X}| + nR
\end{align*}$$
由于 $X^n$ 是i.i.d.,$H(X^n) = nH(X)$。因此:
$$nH(X) \leq 1 + P_e n \log_2 |\mathcal{X}| + nR$$
整理得:
$$P_e \geq \frac{n(H(X) - R) - 1}{n \log_2 |\mathcal{X}|} = \frac{H(X) - R - 1/n}{\log_2 |\mathcal{X}|}$$
当 $R < H(X)$ 且 $n \to \infty$ 时,$P_e$ 有正的下界。证毕。
6.4 信道编码定理证明
6.4.1 正面证明(Achievability)
目标:证明对于任意 $R < C$,存在编码方案使得错误概率任意小。
证明(随机编码 + 联合典型性译码):
码本生成:
- 选择最优输入分布 $p^*(x)$
- 生成 $2^{nR}$ 个独立码字,每个符号i.i.d.服从 $p^*(x)$
编码:发送消息 $m$ 对应的码字 $x^n(m)$
译码:联合典型性译码
错误分析(如前所述):
$$P(E) \leq \epsilon + 2^{-n(I(X;Y) - R - 3\epsilon)}$$
当 $R < I(X;Y) = C$ 时,$P(E) \to 0$。
6.4.2 反面证明(Converse)
目标:证明任何速率 $R > C$ 的编码方案必然有非零错误概率。
证明:
设有一个 $(2^{nR}, n)$ 码,消息 $M$ 均匀分布于 $\{1, \ldots, 2^{nR}\}$。
考虑马尔可夫链:$M \to X^n \to Y^n \to \hat{M}$
由数据处理不等式:
$$I(M;Y^n) \leq I(X^n;Y^n)$$
计算右边:
$$\begin{align*}
I(X^n;Y^n) &= H(Y^n) - H(Y^n|X^n) \\
&= H(Y^n) - \sum_{i=1}^n H(Y_i|X_i) \quad (\text{无记忆性})\\
&\leq \sum_{i=1}^n [H(Y_i) - H(Y_i|X_i)] \\
&= \sum_{i=1}^n I(X_i;Y_i) \\
&\leq nC
\end{align*}$$
所以 $I(M;Y^n) \leq nC$。
另一方面,由Fano不等式:
$$H(M|\hat{M}) \leq 1 + P_e nR$$
而:
$$\begin{align*}
H(M) &= H(M|\hat{M}) + I(M;\hat{M}) \\
&\leq 1 + P_e nR + I(M;Y^n) \quad (\text{数据处理})\\
&\leq 1 + P_e nR + nC
\end{align*}$$
由于 $M$ 均匀分布,$H(M) = nR$。因此:
$$nR \leq 1 + P_e nR + nC$$
整理得:
$$P_e \geq 1 - \frac{1}{nR} - \frac{C}{R}$$
当 $R > C$ 且 $n \to \infty$ 时,$P_e \geq 1 - C/R > 0$。证毕。
代码示例6-3:验证Fano不等式在反面证明中的作用
import numpy as np
import matplotlib.pyplot as plt
def fano_converse_bound(R, C, n):
"""
使用Fano不等式的反面上界
参数:
R: 传输速率
C: 信道容量
n: 码长
返回:
错误概率下界
"""
return max(0, 1 - 1/(n*R) - C/R)
# 测试
C = 0.5 # 信道容量
R_values = np.linspace(0.51, 1.5, 50)
plt.figure(figsize=(10, 6))
for n in [10, 50, 100, 500]:
pe_bounds = [fano_converse_bound(R, C, n) for R in R_values]
plt.plot(R_values, pe_bounds, linewidth=2, label=f'n={n}')
plt.xlabel('传输速率 R (bits/use)', fontsize=12)
plt.ylabel('错误概率下界', fontsize=12)
plt.title(f'Fano不等式给出的错误概率下界 (C={C})', fontsize=14)
plt.grid(True, alpha=0.3)
plt.axvline(x=C, color='r', linestyle='--', alpha=0.5, label=f'R=C={C}')
plt.legend()
plt.ylim(0, 1)
plt.tight_layout()
plt.savefig('fano_converse.png', dpi=150)
plt.show()
print("Fano不等式反面证明分析")
print("=" * 60)
print(f"信道容量 C = {C}")
print()
for R in [0.6, 0.8, 1.0, 1.2]:
for n in [10, 100, 1000]:
pe = fano_converse_bound(R, C, n)
print(f"R={R}, n={n}: P_e ≥ {pe:.4f}")
print()6.5 错误指数
6.5.1 定义
错误指数度量了错误概率随码长的衰减速率:
$$E(R) = \lim_{n \to \infty} -\frac{1}{n} \log_2 P_e(n, R)$$
其中 $P_e(n, R)$ 是码长为 $n$、速率为 $R$ 的最优码的最小错误概率。
6.5.2 Gallager边界
Gallager证明了以下上下界:
上界(随机编码上界):
$$P_e \leq 2^{-nE_r(R)}$$
其中 $E_r(R)$ 是随机编码指数。
下界(球包下界):
$$P_e \geq 2^{-nE_{sp}(R)}$$
6.5.3 物理意义
- 当 $R$ 接近 $C$ 时,错误指数趋近于0(衰减很慢)
- 当 $R$ 远离 $C$ 时,错误指数增大(衰减很快)
- 实际系统设计中,需要在速率和可靠性之间权衡
代码示例6-4:错误指数计算
import numpy as np
import matplotlib.pyplot as plt
def random_coding_exponent_bsc(R, C, p):
"""
BSC信道的随机编码指数(简化模型)
参数:
R: 速率
C: 容量
p: 交叉概率
返回:
错误指数估计
"""
if R >= C:
return 0
# 简化模型:线性近似
return (C - R) * np.log2(np.e) * 0.5 # 系数是示意性的
# 测试
p = 0.1
C = 1 - (-p*np.log2(p) - (1-p)*np.log2(1-p))
R_values = np.linspace(0.01, C, 50)
exponents = [random_coding_exponent_bsc(R, C, p) for R in R_values]
plt.figure(figsize=(10, 6))
plt.plot(R_values, exponents, 'b-', linewidth=2.5)
plt.xlabel('传输速率 R (bits/use)', fontsize=12)
plt.ylabel('错误指数 E(R)', fontsize=12)
plt.title(f'BSC信道的随机编码指数 (p={p})', fontsize=14)
plt.grid(True, alpha=0.3)
plt.axvline(x=C, color='r', linestyle='--', alpha=0.5, label=f'C={C:.4f}')
plt.legend()
plt.tight_layout()
plt.savefig('error_exponent.png', dpi=150)
plt.show()
print(f"BSC(p={p}) 错误指数分析")
print(f"容量 C = {C:.4f}")
print()
for R in [0.1, 0.2, 0.3, 0.4, 0.5]:
if R < C:
E = random_coding_exponent_bsc(R, C, p)
print(f"R={R}: E(R)={E:.4f}, 衰减率 ~ 2^(-{E:.4f}n)")三、程序员的视角
6.1 证明技巧的实际应用
Union bound:在系统可靠性分析中广泛使用。例如,分布式系统中多个组件同时失效的概率上界。
随机编码思想:在机器学习中,随机初始化神经网络的权重本质上也是一种"随机编码",证明了好网络的存在。
典型性论证:在大数据处理中,假设数据是"典型的"可以简化算法设计。
6.2 从理论到实践
虽然香农的证明是非构造性的,但它启发了许多实用算法:
- LDPC码:近似实现随机码本的性能,使用稀疏图结构降低复杂度
- Turbo码:通过迭代译码逼近容量
- Polar码:第一个被证明可以达到容量的实用码
6.3 常见陷阱
混淆存在性和构造性:证明好码存在不等于能高效找到它
忽略常数因子:渐近分析可能隐藏重要的常数因子
有限码长效应:理论结果是 $n \to \infty$ 的极限,实际系统 $n$ 有限
四、代码实战
6.1 完整的信道编码定理仿真
import numpy as np
import matplotlib.pyplot as plt
class ChannelCodingSimulation:
"""信道编码定理仿真"""
def __init__(self, channel_type='bsc', channel_param=0.1):
self.channel_type = channel_type
self.channel_param = channel_param
if channel_type == 'bsc':
self.capacity = 1 - (-channel_param*np.log2(channel_param) -
(1-channel_param)*np.log2(1-channel_param))
def generate_random_codebook(self, n, n_messages):
"""生成随机码本"""
return np.random.randint(0, 2, size=(n_messages, n))
def transmit_bsc(self, codeword, p):
"""通过BSC传输"""
noise = np.random.rand(len(codeword)) < p
return codeword ^ noise
def decode_joint_typicality(self, received, codebook, n_messages):
"""
联合典型性译码(简化为最小汉明距离)
"""
distances = [np.sum(codebook[m] != received) for m in range(n_messages)]
return np.argmin(distances)
def simulate(self, n, R, n_trials=100):
"""
仿真通信系统
参数:
n: 码长
R: 速率
n_trials: 试验次数
返回:
错误概率
"""
n_messages = int(2**(n * R))
errors = 0
for _ in range(n_trials):
# 生成码本
codebook = self.generate_random_codebook(n, n_messages)
# 随机选择消息
true_msg = np.random.randint(0, n_messages)
# 传输
received = self.transmit_bsc(codebook[true_msg], self.channel_param)
# 译码
decoded_msg = self.decode_joint_typicality(received, codebook, n_messages)
if decoded_msg != true_msg:
errors += 1
return errors / n_trials
# 运行仿真
if __name__ == "__main__":
sim = ChannelCodingSimulation(channel_type='bsc', channel_param=0.1)
print("信道编码定理仿真")
print("=" * 60)
print(f"信道: BSC(p=0.1), 容量 C = {sim.capacity:.4f} bits/use")
print()
R = 0.4 # 低于容量
n_values = [5, 10, 15, 20, 25, 30]
error_probs = []
for n in n_values:
pe = sim.simulate(n, R, n_trials=200)
error_probs.append(pe)
print(f"n={n:2d}: P_e = {pe:.4f}")
# 可视化
plt.figure(figsize=(10, 6))
plt.semilogy(n_values, error_probs, 'bo-', linewidth=2, markersize=8)
plt.xlabel('码长 n', fontsize=12)
plt.ylabel('错误概率 P_e', fontsize=12)
plt.title(f'错误概率 vs 码长 (R={R}, C={sim.capacity:.4f})', fontsize=14)
plt.grid(True, alpha=0.3)
plt.tight_layout()
plt.savefig('coding_theorem_simulation.png', dpi=150)
plt.show()6.2 Fano不等式验证工具
import numpy as np
def verify_fano_inequality(n_classes, accuracy):
"""
验证Fano不等式
参数:
n_classes: 类别数
accuracy: 分类准确率
返回:
条件熵, Fano上界
"""
p_error = 1 - accuracy
# 计算条件熵 H(Y|Ŷ)
# 假设错误均匀分布在其他类上
h_error = np.log2(n_classes - 1) if n_classes > 1 else 0
h_binary = -p_error * np.log2(p_error + 1e-30) - (1-p_error) * np.log2(1-p_error + 1e-30)
h_conditional = h_binary + p_error * h_error
# Fano上界
fanos_upper = h_binary + p_error * np.log2(n_classes)
return h_conditional, fanos_upper
# 测试
print("Fano不等式验证")
print("=" * 60)
for n_cls in [2, 4, 10, 100]:
for acc in [0.9, 0.95, 0.99]:
h_cond, fanos = verify_fano_inequality(n_cls, acc)
print(f"类别={n_cls:3d}, 准确率={acc}: H(Y|Ŷ)={h_cond:.4f}, Fano上界={fanos:.4f}, 满足={h_cond <= fanos + 1e-6}")
print()五、深入思考
5.1 历史背景
香农的原始证明使用了典型序列和随机编码的思想,但当时的证明不够严格。后续研究者(如Wolfowitz, Feinstein, Gallager等)完善了证明细节。
Gallager在1968年的博士论文中系统地研究了错误指数,建立了随机编码上界和球包下界。这些结果至今仍是编码理论的基础。
5.2 前沿方向
有限块长分析:经典结果是渐近的,现代研究关注有限码长下的精确界限。Polyanskiy等人提出的"正常近似"给出了实用的性能估计。
量子信道编码:量子版本的信道编码定理涉及量子典型子空间和量子联合典型性,证明技术更加复杂。
网络信息论:多用户场景下的编码定理证明需要处理干扰、协作等复杂因素。
5.3 延伸阅读
Cover & Thomas《信息论基础》第7章、第8章
Gallager《Information Theory and Reliable Communication》
Polyanskiy et al. "Channel Coding Rate in the Finite Blocklength Regime"
六、实验笔记
实验1:验证Union bound的紧度
目标:研究Union bound在错误概率分析中的紧度。
步骤:
仿真随机码本的实际错误概率
计算Union bound给出的上界
比较两者的差距
分析差距随码长和速率的变化
预期结果:Union bound在低速率时较松,在高速率时较紧。
实验2:不同译码准则的比较
目标:比较联合典型性译码、最大似然译码和最小距离译码的性能。
步骤:
实现三种译码器
在相同码本和信道条件下测试
比较错误概率和计算复杂度
思考题:
- 哪种译码器最容易分析?
- 哪种性能最好?
- 实际系统中常用哪种?
七、本章小结
本章详细介绍了信源编码定理和信道编码定理的证明。
随机编码论证是信息论证明的核心技术。通过证明随机码本的平均性能良好,我们得出好码存在的结论。这种方法虽然非构造性,但为实用编码方案的设计提供了指导。
联合典型性译码虽然不是最优译码准则,但其易于分析的特性使其成为理论证明的首选。对于大码长,它的性能接近最大似然译码。
Fano不等式在反面证明中起关键作用,它将错误概率与条件熵联系起来,从而推导出速率的下界。
错误指数量化了错误概率的衰减速率,在系统设计中需要在速率和可靠性之间权衡。
理解这些证明不仅有助于掌握信息论的理论基础,还能培养处理复杂概率论证的能力。这些技巧在机器学习、统计学、理论计算机科学等领域都有广泛应用。
八、习题
习题6.1(Union bound):设某系统有10个独立组件,每个组件失效概率为0.01。使用Union bound给出至少一个组件失效的概率上界,并计算精确值。
习题6.2(Fano不等式):对于一个4类分类问题,如果准确率为95%,使用Fano不等式给出条件熵的上界。
习题6.3(随机编码):证明对于BSC信道,随机生成的码本中,任意两个码字的期望汉明距离为 $n/2$。
习题6.4(编程题):实现一个完整的信道编码定理仿真,包括码本生成、传输、译码和错误统计。绘制错误概率随码长变化的曲线。
习题6.5(挑战题):推导BSC信道的随机编码指数 $E_r(R)$ 的表达式。
习题6.6(分析题):比较信源编码定理和信道编码定理的证明思路,指出它们的相似之处和差异。
习题6.7(应用题):在设计一个深空通信系统时,你需要选择码长和速率。已知信道容量为0.5 bits/use,要求错误概率小于 $10^{-6}$。根据编码定理,你会如何选择参数?
习题6.8(证明题):证明对于对称信道,均匀输入分布达到容量。
习题6.9(开放性问题):研究Polar码如何实现对信道容量的逼近,撰写一篇500字左右的分析报告。
习题6.10(综合题):结合信源编码和信道编码,设计一个端到端的通信系统。分析系统的总失真(源失真 + 信道错误引起的失真)与传输速率的关系。