9信息论基础(第2版)

信息论与网络

多终端信道

多址接入信道广播信道网络信息论

🎯 AI 时代的学习建议:不要只读理论。理解这一章的设计动机(为什么需要这个概念?)和边界条件(什么情况下会失效?)。当 AI 生成的代码涉及这些概念时,你能判断它是否用对了场景。AI 能帮你总结内容,但无法替代你亲手阅读、思考、建立直觉的过程。

第9章 信息论与网络(Information Theory and Networks)

一、导读

9.1 本章学习目标

通过本章的学习,你将能够:

理解多用户信息论的基本问题:掌握多址接入信道、广播信道、中继信道的模型和容量区域

掌握Slepian-Wolf编码定理:理解分布式信源编码如何在不通信的情况下利用相关性

理解Wyner-Ziv问题:掌握有边信息的率失真理论

掌握网络编码的基本思想:理解为什么中间节点可以进行编码而不仅仅是路由

理解干扰信道的处理方法:掌握干扰对齐的概念

能够计算简单多用户信道的容量区域:多址接入信道、广播信道

理解信息论在无线网络中的应用:多用户MIMO、协作通信

能够分析网络中的率-失真-延迟权衡

深入理解多用户信息论的数学基础:包括联合典型性、随机binning等技术

掌握现代通信系统中的网络信息论应用:5G NOMA、大规模MIMO等

9.2 为什么本章如此重要

前八章主要关注点对点通信,但实际通信系统几乎都是多用户的。手机网络中有多个用户共享频谱,卫星广播中一个发送者服务多个接收者,传感器网络中多个节点协作收集数据。网络信息论研究这些多用户场景下的基本极限。

理论重要性:

网络信息论揭示了单用户情况下不存在的现象:多个用户可以互相干扰,也可以互相协作;中间节点的编码可以显著提高网络吞吐量;分布式压缩可以接近集中式压缩的性能。这些发现挑战了传统直觉,拓展了信息论的边界。

多用户信息论的研究推动了概率论、组合数学、优化理论等多个数学分支的发展。例如,Slepian-Wolf定理的证明引入了随机binning技术,这一技术后来被广泛应用于其他信息论问题的研究中。网络信息论中的许多开放问题也激发了数学家们的研究兴趣,如干扰信道容量区域的精确刻画至今仍是未解难题。

实践重要性:

5G/6G移动通信的核心技术(如NOMA、Massive MIMO、协作多点传输)都建立在网络信息论的基础上。网络编码已经在内容分发网络和P2P系统中得到应用。理解这些理论有助于设计更高效的网络协议。

在现代无线通信系统中,频谱资源日益稀缺,如何高效利用有限的频谱成为关键挑战。网络信息论提供了理论基础,指导工程师设计出能够最大化频谱效率的系统架构。例如,非正交多址接入(NOMA)技术允许多个用户在同一时频资源上同时传输,这正是基于多址接入信道理论的实际应用。

数据中心网络是另一个重要应用场景。随着云计算和大数据技术的发展,数据中心内部的通信流量呈指数级增长。网络编码技术可以显著减少数据传输次数,降低网络拥塞,提高整体吞吐量。Google、Facebook等大型互联网公司已经在生产环境中部署了基于网络编码的数据传输协议。

方法论重要性:

网络信息论的证明技巧(如叠加编码、脏纸编码、干扰对齐)是高级信息论分析的核心工具。这些方法在分布式学习、联邦学习等新兴领域也有应用。

叠加编码(Superposition Coding)的思想是将消息分层编码,强接收者可以解码更多层,弱接收者只解码部分层。这种思想不仅用于广播信道,还被应用于功率域NOMA系统中。脏纸编码(Dirty Paper Coding)允许发送者在已知干扰的情况下预消除干扰,这一技术在多用户MIMO下行链路中得到了实际应用。

干扰对齐(Interference Alignment)是近年来最重要的理论突破之一。它表明,通过巧妙的信号设计,可以将多个干扰源的信号"打包"到接收端的同一子空间,从而为期望信号留出更多自由度。这一思想已经扩展到分布式存储、隐私保护等多个领域。

9.3 核心问题引导

在学习本章之前,请思考以下问题:

多个用户共享信道时会发生什么? 他们应该时分复用、频分复用,还是同时传输?哪种方式更高效?

如果两个相关信源分布在不同地点,它们需要分别编码还是可以联合编码? Slepian-Wolf定理给出了令人惊讶的答案。

网络中的中间节点只能转发数据吗? 网络编码表明,让中间节点进行编码可以显著提高吞吐量。

广播信道中,发送者如何同时服务多个接收者? 叠加编码如何实现不同质量的服务?

干扰一定是坏事吗? 干扰对齐表明,巧妙设计的干扰可以被"打包"处理。

有边信息的压缩与普通压缩有什么区别? Wyner-Ziv编码如何利用解码端的额外信息?

多用户MIMO如何提高频谱效率? 空间自由度如何被多个用户共享?

协作通信的原理是什么? 虚拟天线阵列如何形成?


二、核心概念详解

9.1 多址接入信道(MAC)

9.1.1 模型

多址接入信道(Multiple Access Channel, MAC):多个发送者向一个接收者发送信息。这是无线上行链路的抽象模型,例如多个手机用户向同一个基站发送数据。

  • 发送者1:消息 $W_1$,码字 $X_1^n$
  • 发送者2:消息 $W_2$,码字 $X_2^n$
  • 接收者:收到 $Y^n$,译码 $(\hat{W}_1, \hat{W}_2)$

转移概率:$p(y|x_1, x_2)$

速率对:$(R_1, R_2)$,表示每个用户每信道使用能可靠传输的比特数。

可达速率区域:所有可达速率对的集合。如果一个速率对可以通过某种编码方案实现任意小的错误概率,则称其为可达的。

容量区域:所有可达速率对的闭包。容量区域通常是凸集,可以通过时分复用不同的可达速率点来实现区域内的任意点。

在实际系统中,MAC模型对应于蜂窝网络的上行链路、WiFi网络中多个站点向接入点发送数据、卫星通信中多个地面站向卫星发送信号等场景。理解MAC的容量区域对于设计高效的多用户接入协议至关重要。

9.1.2 MAC容量区域

定理(MAC容量区域):对于离散无记忆MAC,容量区域是所有满足以下条件的速率对 $(R_1, R_2)$ 的凸包:

$$\begin{cases}

R_1 \leq I(X_1; Y | X_2) \\

R_2 \leq I(X_2; Y | X_1) \\

R_1 + R_2 \leq I(X_1, X_2; Y)

\end{cases}$$

对所有乘积输入分布 $p(x_1)p(x_2)$ 取并集。

直观解释:

  • 第一个不等式:当接收者已知 $X_2$ 时,$X_1$ 的最大传输速率。这相当于将用户2的信号视为已知,从接收信号中减去其贡献后,用户1能达到的速率。
  • 第二个不等式:对称地,当接收者已知 $X_1$ 时,$X_2$ 的最大传输速率。
  • 第三个不等式:两个用户合作的总速率上限。即使接收者知道两个用户的码本,总的信息量也不能超过联合互信息。

这三个不等式定义了一个五边形区域(包括坐标轴截距)。容量区域是所有这样的五边形的并集的凸包。

证明思路:

正面(可达性):使用随机编码和联合典型译码。

生成 $2^{nR_1}$ 个 $x_1^n$ 码字和 $2^{nR_2}$ 个 $x_2^n$ 码字

发送者各自独立选择码字发送

接收者寻找与接收序列联合典型的码字对

错误分析表明,当速率满足上述不等式时,错误概率随 $n$ 指数衰减。

反面( converse):使用Fano不等式和互信息链式法则,证明任何可靠通信的方案必须满足这些不等式。

代码示例9-1:高斯MAC容量区域

python
import numpy as np
import matplotlib.pyplot as plt

def gaussian_mac_capacity_region(P1, P2, N, n_points=100):
    """
    高斯多址接入信道的容量区域
    
    参数:
        P1, P2: 两个用户的功率约束
        N: 噪声方差
        n_points: 绘图点数
    
    返回:
        R1_values, R2_values: 容量区域边界点
    """
    
    # 单个用户的最大速率
    R1_max = 0.5 * np.log2(1 + P1/N)
    R2_max = 0.5 * np.log2(1 + P2/N)
    R_sum_max = 0.5 * np.log2(1 + (P1+P2)/N)
    
    # 容量区域边界
    # 情况1: R1从0到R1_max, R2 = min(R2_max, R_sum_max - R1)
    R1_values = np.linspace(0, R1_max, n_points)
    R2_values = []
    
    for R1 in R1_values:
        R2_limit = min(R2_max, R_sum_max - R1)
        R2_values.append(max(0, R2_limit))
    
    return R1_values, R2_values, R1_max, R2_max, R_sum_max

# 测试
P1, P2, N = 1, 1, 1
R1_vals, R2_vals, R1_max, R2_max, R_sum_max = gaussian_mac_capacity_region(P1, P2, N)

print("高斯MAC容量区域")
print("=" * 60)
print(f"用户1功率: {P1}, 用户2功率: {P2}, 噪声: {N}")
print(f"R1_max = {R1_max:.4f} bits/use")
print(f"R2_max = {R2_max:.4f} bits/use")
print(f"R_sum_max = {R_sum_max:.4f} bits/use")

# 可视化
plt.figure(figsize=(10, 8))
plt.fill_between(np.concatenate([[0], R1_vals, [R1_max]]), 
                 np.concatenate([[R2_max], R2_vals, [0]]), 
                 alpha=0.3, color='blue', label='容量区域')
plt.plot(R1_vals, R2_vals, 'b-', linewidth=2.5, label='容量边界')

# 标注关键点
plt.plot([0, R1_max], [R2_max, 0], 'ro', markersize=8)
plt.plot([R_sum_max - R2_max, R2_max], [R2_max, R_sum_max - R1_max], 'go', markersize=8)

plt.xlabel('R₁ (bits/use)', fontsize=12)
plt.ylabel('R₂ (bits/use)', fontsize=12)
plt.title(f'高斯MAC容量区域 (P₁={P1}, P₂={P2}, N={N})', fontsize=14)
plt.legend(fontsize=11)
plt.grid(True, alpha=0.3)
plt.xlim(0, R1_max * 1.1)
plt.ylim(0, R2_max * 1.1)
plt.tight_layout()
plt.savefig('mac_capacity.png', dpi=150)
plt.show()

9.1.3 与TDMA/FDMA的比较

TDMA(时分多址):用户轮流使用信道,每个用户占用不同的时间槽。

总速率:$R_{TDMA} = \max_{\alpha} [\alpha C(P_1/\alpha) + (1-\alpha)C(P_2/(1-\alpha))]$

其中 $C(P) = \frac{1}{2}\log_2(1+P/N)$,$\alpha$ 是分配给用户1的时间比例。

FDMA(频分多址):用户占用不同频段,总带宽被分割。

比较:MAC允许同时传输,通常优于TDMA/FDMA,特别是在高SNR时。这是因为MAC可以利用多用户分集增益,并且避免了TDMA/FDMA中的资源碎片化问题。

然而,在实际系统中,TDMA/FDMA仍然广泛使用,主要原因是:

实现简单,不需要复杂的干扰消除技术

避免了多用户之间的干扰

便于资源调度和管理

5G系统中引入的NOMA(非正交多址接入)正是基于MAC理论,通过在功率域或码域上叠加多个用户信号,然后在接收端使用串行干扰消除(SIC)进行分离,从而接近MAC容量区域。

9.1.4 串行干扰消除(SIC)

SIC是实现MAC容量区域的关键技术。其基本思想是:

先解码一个用户的信号(通常是信道条件较好的用户)

从接收信号中减去该用户的贡献

再解码下一个用户的信号

这个过程可以迭代进行,直到所有用户都被解码。SIC的性能取决于解码顺序,最优顺序通常是按照信道增益从高到低排列。

在实际系统中,SIC面临的主要挑战是:

  • 误差传播:如果第一步解码错误,会影响后续所有步骤
  • 计算复杂度:需要多次解码
  • 同步要求:需要精确的时间同步

9.2 广播信道(BC)

9.2.1 模型

广播信道(Broadcast Channel, BC):一个发送者向多个接收者发送信息。这是无线下行链路的抽象模型,例如基站向多个手机用户发送数据,或卫星向多个地面站广播。

  • 发送者:消息 $(W_1, W_2)$,码字 $X^n$
  • 接收者1:收到 $Y_1^n$,译码 $\hat{W}_1$
  • 接收者2:收到 $Y_2^n$,译码 $\hat{W}_2$

转移概率:$p(y_1, y_2 | x)$

广播信道的容量区域一般未知,但对于某些特殊类型的广播信道(如退化广播信道),容量区域已被完全刻画。

9.2.2 退化广播信道

退化BC:$Y_1$ 比 $Y_2$ "更好",即存在马尔可夫链 $X \to Y_1 \to Y_2$。这意味着接收者1可以获得比接收者2更多的信息。

在实际无线通信中,退化程度取决于信道增益。距离基站较近的用户通常具有更好的信道条件。

容量区域(Cover, 1972):

$$\begin{cases}

R_1 \leq I(X; Y_1 | U) \\

R_2 \leq I(U; Y_2)

\end{cases}$$

其中 $U$ 是辅助随机变量,满足 $U \to X \to Y_1 \to Y_2$。

辅助变量 $U$ 可以理解为"公共消息",两个接收者都需要解码它。而 $X|U$ 则是"私有消息",只有强接收者能解码。

9.2.3 叠加编码

思想:将信号分为两层:

  • "云中心" $U$:两个接收者都能解码
  • "云内细节" $X|U$:只有强接收者能解码

这种分层结构使得发送者可以同时服务不同信道条件的接收者。弱接收者只能看到"云"的大致轮廓(解码 $U$),而强接收者可以看到"云"内部的细节(解码 $X$)。

编码:

生成 $2^{nR_2}$ 个 $u^n$ 码字(给弱接收者)

对每个 $u^n$,生成 $2^{nR_1}$ 个 $x^n$ 码字(给强接收者)

发送对应的 $x^n$

译码:

  • 弱接收者:解码 $u^n$,忽略细节
  • 强接收者:先解码 $u^n$(减去干扰),再解码 $x^n$

代码示例9-2:叠加编码示意

python
import numpy as np
import matplotlib.pyplot as plt

def illustrate_superposition_coding():
    """可视化叠加编码"""
    
    fig, ax = plt.subplots(figsize=(10, 8))
    
    # 星座图
    # U的星座(QPSK)
    u_constellation = np.array([[1, 1], [-1, 1], [-1, -1], [1, -1]]) * 2
    
    # 每个u点周围的X星座(BPSK)
    x_offset = 0.5
    
    colors = ['red', 'blue', 'green', 'orange']
    
    for i, u in enumerate(u_constellation):
        # X的两个点
        x1 = u + np.array([x_offset, 0])
        x2 = u - np.array([x_offset, 0])
        
        ax.scatter(*u, c=colors[i], s=200, marker='o', edgecolors='black', 
                  linewidths=2, zorder=5, label=f'U={i}' if i < 4 else None)
        ax.scatter(*x1, c=colors[i], s=100, marker='^', edgecolors='black', linewidths=1)
        ax.scatter(*x2, c=colors[i], s=100, marker='v', edgecolors='black', linewidths=1)
        
        # 连线
        ax.plot([x1[0], x2[0]], [x1[1], x2[1]], 'k--', alpha=0.3)
    
    ax.set_xlabel('同相分量', fontsize=12)
    ax.set_ylabel('正交分量', fontsize=12)
    ax.set_title('叠加编码星座图', fontsize=14)
    ax.legend(fontsize=10)
    ax.grid(True, alpha=0.3)
    ax.axhline(y=0, color='k', linewidth=0.5)
    ax.axvline(x=0, color='k', linewidth=0.5)
    ax.set_aspect('equal')
    
    plt.tight_layout()
    plt.savefig('superposition_coding.png', dpi=150)
    plt.show()

illustrate_superposition_coding()

9.2.4 脏纸编码(Dirty Paper Coding)

脏纸编码是广播信道中的另一种重要技术,特别适用于非退化场景。其核心思想是:如果发送者预先知道将在信道上遇到的"干扰"(比喻为纸上的污渍),它可以预编码信号以抵消这种干扰的影响。

类比:想象你要在一张已经有污渍的纸上写字。如果你知道污渍的位置,你可以调整你的字迹,使得最终读者看到的是清晰的信息。

在多用户MIMO下行链路中,基站知道要发送给每个用户的信号,因此可以将其他用户的信号视为"已知干扰",使用脏纸编码预消除这种干扰。

数学表述:

  • 信道模型:$Y = X + S + Z$,其中 $S$ 是已知干扰,$Z$ 是噪声
  • 容量:$C = \frac{1}{2}\log_2(1 + P/N)$,与没有干扰时相同!

这个惊人的结果表明,如果发送者预先知道干扰,它可以完全消除干扰的影响,不会损失任何容量。

9.3 Slepian-Wolf编码

9.3.1 问题设定

场景:两个相关信源 $X$ 和 $Y$ 分布在不同地点,需要无损传送到共同目的地。

传统方案:分别编码,速率 $R_X \geq H(X)$,$R_Y \geq H(Y)$,总速率 $R_X + R_Y \geq H(X) + H(Y)$。

问题:能否利用相关性降低总速率?如果可以,编码器之间需要通信吗?

直觉:如果两个信源高度相关,它们包含很多冗余信息。如果我们能让它们"协作"编码,应该可以去除冗余。但问题是,编码器分布在异地,无法直接通信。

9.3.2 Slepian-Wolf定理

定理(Slepian-Wolf, 1973):两个相关信源的分布式无损压缩,可达速率区域为:

$$\begin{cases}

R_X \geq H(X|Y) \\

R_Y \geq H(Y|X) \\

R_X + R_Y \geq H(X,Y)

\end{cases}$$

惊人结论:即使两个编码器不能互相通信,总速率仍然可以达到 $H(X,Y)$,与集中式编码相同!

这个结果违背直觉:分布式编码不会损失压缩效率。关键在于解码器拥有两个比特流,可以利用它们之间的相关性进行联合译码。

直观解释:

  • 每个编码器只需要发送"条件熵"部分的信息
  • $H(X|Y)$ 表示已知 $Y$ 时 $X$ 的不确定性,这是编码器X必须发送的最小信息量
  • 解码器利用两个比特流的相关性进行联合译码
  • 这类似于信道编码:每个比特流看作"码字",相关性看作"信道"

类比:想象两个人分别观察同一场景的不同角度。每个人看到的画面有重叠部分(相关性)和独特部分(条件熵)。如果他们分别向第三个人描述,第三人可以利用重叠部分来验证和理解各自的独特部分,从而重建完整场景。

9.3.3 证明思路

正面:使用随机binning技术。

将所有 $x^n$ 序列随机分配到 $2^{nR_X}$ 个bin中

对所有 $y^n$ 序列做同样操作

编码器只发送bin索引

解码器寻找与两个bin索引都一致的联合典型序列对

错误分析类似于信道编码定理:如果速率满足上述不等式,找到错误序列对的概率随 $n$ 指数衰减。

随机Binning的精妙之处:

  • 编码器不需要知道对方的数据,只需将自己的数据映射到bin
  • bin的数量由速率决定
  • 解码器利用相关性(联合典型性)来区分不同的序列对

这种方法将信源编码问题转化为类似信道编码的问题:bin索引是"发送的信号",相关性是"信道",解码器进行"译码"。

代码示例9-3:Slepian-Wolf编码仿真

python
import numpy as np
from collections import Counter

def simulate_slepian_wolf(n, p, R_X, R_Y, n_trials=100):
    """
    简化版Slepian-Wolf编码仿真
    
    参数:
        n: 序列长度
        p: 相关参数 (P(X=Y))
        R_X, R_Y: 编码速率
        n_trials: 试验次数
    
    返回:
        成功译码概率
    """
    successes = 0
    
    for _ in range(n_trials):
        # 生成相关信源
        X = np.random.randint(0, 2, n)
        Y = X.copy()
        # 以概率 (1-p) 翻转
        flips = np.random.rand(n) < (1-p)
        Y[flips] = 1 - Y[flips]
        
        # 简化的"编码":哈希到bin
        bin_X = hash(tuple(X)) % int(2**(n*R_X))
        bin_Y = hash(tuple(Y)) % int(2**(n*R_Y))
        
        # 简化的"译码":检查是否唯一匹配
        # 实际中需要使用更复杂的联合译码
        successes += 1  # 简化:假设总是成功
    
    return successes / n_trials

# 测试
n = 10
p = 0.9  # 高度相关

H_X = 1  # 均匀二元
H_Y_given_X = -p*np.log2(p) - (1-p)*np.log2(1-p)
H_X_given_Y = H_Y_given_X
H_XY = H_X + H_Y_given_X

print("Slepian-Wolf编码")
print("=" * 60)
print(f"H(X) = {H_X:.4f}")
print(f"H(Y|X) = {H_Y_given_X:.4f}")
print(f"H(X,Y) = {H_XY:.4f}")
print()
print("可达速率区域:")
print(f"  R_X ≥ {H_X_given_Y:.4f}")
print(f"  R_Y ≥ {H_Y_given_X:.4f}")
print(f"  R_X + R_Y ≥ {H_XY:.4f}")

9.3.4 实际应用

Slepian-Wolf编码的理论结果虽然优美,但在实际应用中面临挑战:

需要知道信源的统计特性来设计码本

联合译码复杂度高

有限块长下性能可能不如理论预测

尽管如此,Slepian-Wolf的思想影响了多个领域:

  • 分布式视频编码:将计算复杂度从编码器移到解码器,适合资源受限的摄像头
  • 传感器网络:多个传感器节点独立采集数据,汇聚节点进行联合处理
  • DNA序列压缩:利用相关样本之间的相似性进行压缩

9.4 Wyner-Ziv编码

9.4.1 问题设定

Wyner-Ziv问题:信源 $X$ 需要编码,解码端有边信息 $Y$(与 $X$ 相关),但编码器不知道 $Y$。

这是Slepian-Wolf问题的率失真版本:允许有损压缩,且解码端有额外信息。

普通率失真:$R(D) = \min_{p(\hat{x}|x)} I(X;\hat{X})$,其中 $\hat{X}$ 是重构值。

Wyner-Ziv率失真:$R_{WZ}(D) = \min_{p(u|x), f} I(X;U) - I(Y;U)$

其中 $U$ 是辅助变量,$\hat{X} = f(U,Y)$。

关键区别:编码器不知道边信息 $Y$,只能依赖解码端利用 $Y$ 来提高重构质量。

9.4.2 关键结果

定理(Wyner-Ziv, 1976):对于平方误差失真和高斯信源:

$$R_{WZ}(D) = \frac{1}{2}\log_2\left(\frac{\sigma_{X|Y}^2}{D}\right)$$

其中 $\sigma_{X|Y}^2$ 是给定 $Y$ 时 $X$ 的条件方差。

对比:如果编码器也能访问 $Y$,则率失真函数相同。这意味着对于高斯信源,编码器不需要知道边信息!

这个结果同样违背直觉:对于高斯信源,边信息在编码器处是否有价值为零。但对于其他信源类型(如拉普拉斯信源),编码器知道边信息可以带来增益。

直观解释:

  • 高斯信源的对称性使得编码器无法从边信息中获得额外优势
  • 解码端可以利用 $Y$ 来"细化"重构
  • 这类似于量化:编码器发送粗略信息,解码端用边信息进行精细调整

9.4.3 应用

视频编码:当前帧 $X$ 编码,解码端用前一帧 $Y$ 作为边信息进行运动补偿。

传统的视频编码(如H.264)在编码器端进行运动估计和补偿,计算复杂度高。分布式视频编码(DVC)将运动补偿移到解码端,编码器只做简单的帧内编码,适合资源受限的设备。

分布式视频编码标准:

  • DISCUS(Distributed Source Coding Using Syndromes)
  • PRISM(Power-efficient, Robust, hIgh-compression, Syndrome-based Multimedia coding)

其他应用:

  • 多视角视频压缩:多个摄像头拍摄同一场景,利用视角间的相关性
  • 深度图像压缩:RGB图像作为边信息帮助压缩深度图
  • 安全压缩:编码器不访问原始数据,保护隐私

代码示例9-4:Wyner-Ziv编码示意

python
import numpy as np
import matplotlib.pyplot as plt

def wyner_ziv_demo():
    """演示Wyner-Ziv编码原理"""
    
    # 生成相关信源
    n = 1000
    Y = np.random.randn(n)  # 边信息
    X = Y + np.random.randn(n) * 0.5  # 信源,与Y相关
    
    # 计算条件方差
    sigma2_X_given_Y = np.var(X - Y)
    
    print("Wyner-Ziv编码演示")
    print("=" * 60)
    print(f"σ²(X|Y) = {sigma2_X_given_Y:.4f}")
    
    # 不同失真水平下的率失真函数
    D_values = np.linspace(0.01, sigma2_X_given_Y, 50)
    R_WZ = 0.5 * np.log2(sigma2_X_given_Y / D_values)
    
    plt.figure(figsize=(10, 6))
    plt.plot(D_values, R_WZ, 'b-', linewidth=2)
    plt.xlabel('失真 D', fontsize=12)
    plt.ylabel('率 R(D) (bits/sample)', fontsize=12)
    plt.title('Wyner-Ziv率失真函数', fontsize=14)
    plt.grid(True, alpha=0.3)
    plt.xlim(0, sigma2_X_given_Y)
    plt.tight_layout()
    plt.savefig('wyner_ziv_rd.png', dpi=150)
    plt.show()

wyner_ziv_demo()

9.5 网络编码

9.5.1 蝴蝶网络示例

经典例子:两个源要向两个汇发送数据,中间链路容量有限。

考虑以下网络拓扑:

S1 -----> N1 -----> T1
      \      /   \      /
       \    /     \    /
        \  /       \  /
         N2 -----> N3
        /  \       /  \
       /    \     /    \
      /      \   /      \
    S2 -----> N4 -----> T2

假设所有链路容量为1 bit/use。S1想发送a到T1,S2想发送b到T2。

传统路由:中间节点只能复制或转发。由于N1-N3链路是瓶颈,无法同时满足两个需求。

网络编码:N2对数据进行异或操作(a XOR b),发送到N3。T1收到a和(a XOR b),可以恢复b;T2收到b和(a XOR b),可以恢复a。

增益:吞吐量提高50%,从每个汇接收1 bit/use提高到1.5 bit/use(平均)。

9.5.2 线性网络编码

思想:中间节点对输入数据进行线性组合(在有限域上)。

优势:

  • 可以达到多播容量
  • 实现简单(有限域上的线性运算)
  • 分布式算法可以自动找到合适的编码系数

随机线性网络编码:

  • 每个中间节点随机选择编码系数
  • 在数据包头部附加编码向量
  • 接收者收集足够多的线性独立方程后可以解码

应用:内容分发、P2P网络、无线网状网络、卫星通信。

代码示例9-5:蝴蝶网络编码

python
import numpy as np

def butterfly_network_coding():
    """演示蝴蝶网络的网络编码"""
    
    print("蝴蝶网络编码演示")
    print("=" * 60)
    
    # 两个源数据
    a = np.array([1, 0, 1, 1])  # 源1的数据
    b = np.array([0, 1, 1, 0])  # 源2的数据
    
    print(f"源1数据: {a}")
    print(f"源2数据: {b}")
    
    # 中间节点进行异或
    coded = a ^ b
    print(f"\n中间节点编码 (A XOR B): {coded}")
    
    # 接收者1:想要a,已有b,收到coded
    recovered_a = coded ^ b
    print(f"\n接收者1恢复: {recovered_a}")
    print(f"正确? {np.array_equal(recovered_a, a)}")
    
    # 接收者2:想要b,已有a,收到coded
    recovered_b = coded ^ a
    print(f"接收者2恢复: {recovered_b}")
    print(f"正确? {np.array_equal(recovered_b, b)}")

butterfly_network_coding()

9.5.3 实际部署

网络编码已在多个实际系统中得到应用:

  • Microsoft ROBUS:在数据中心网络中使用网络编码提高容错性
  • CDN加速:Akamai等公司使用网络编码优化内容分发
  • 军事通信:利用网络编码提高抗干扰能力
  • 车联网:车辆之间通过编码交换信息,提高安全性

9.6 干扰信道

9.6.1 模型

干扰信道(Interference Channel):两对用户同时通信,互相干扰。

  • 发送者1 → 接收者1:期望信号
  • 发送者2 → 接收者1:干扰
  • 发送者2 → 接收者2:期望信号
  • 发送者1 → 接收者2:干扰

转移概率:$p(y_1, y_2 | x_1, x_2)$

干扰信道的容量区域一般未知,是信息论中最著名的开放问题之一。

9.6.2 干扰对齐

思想:将多个干扰源的信号"对齐"到接收端的同一子空间,从而留出更多空间给期望信号。

K用户干扰信道:可以实现 $K/2$ 的自由度(每用户1/2)。

直观解释:

  • 传统观点:干扰是有害的,应该避免
  • 干扰对齐:如果干扰必须存在,就让它们"挤在一起",减少对期望信号的占用

实现方法:

  • 波束成形:调整发送方向,使干扰在接收端对齐
  • 符号扩展:使用不同的子载波或时隙
  • 格码:利用代数结构实现对齐

应用:蜂窝网络、Ad-hoc网络、认知无线电。

9.7 多用户MIMO

9.7.1 上行链路(多址接入)

多个用户各有多个天线,基站有多个天线。

容量区域:类似标量MAC,但使用矩阵互信息。

关键技术:

  • 空分多址(SDMA):利用空间自由度区分用户
  • 接收波束成形:基站使用阵列增益增强期望信号

9.7.2 下行链路(广播)

基站有多个天线,向多个单天线用户发送。

脏纸编码(Dirty Paper Coding):预消除已知干扰。

块对角化:将多用户信道分解为并行单用户信道。

Massive MIMO:基站配备数百根天线,利用大数定律简化信号处理。


三、程序员的视角

9.1 在实际系统中的应用

5G NOMA(非正交多址接入):基于MAC理论,允许多用户共享相同时频资源。

分布式视频编码:基于Slepian-Wolf和Wyner-Ziv理论。

CDN网络编码:提高内容分发效率。

Massive MIMO:5G基站的核心技术。

9.2 常见陷阱

理想假设:许多理论结果假设完美CSI(信道状态信息),实际中难以获得

复杂度:最优编码/译码方案复杂度可能很高

同步要求:多用户系统需要精确同步

9.3 与其他层级的联系

  • 物理层:调制、编码、波束成形
  • MAC层:调度、资源分配
  • 网络层:路由、拥塞控制

四、代码实战

9.1 多用户信息论计算器

python
import numpy as np

class MultiUserInfoTheory:
    """多用户信息论计算器"""
    
    @staticmethod
    def mac_capacity_gaussian(P1, P2, N):
        """高斯MAC容量区域"""
        R1_max = 0.5 * np.log2(1 + P1/N)
        R2_max = 0.5 * np.log2(1 + P2/N)
        R_sum = 0.5 * np.log2(1 + (P1+P2)/N)
        return R1_max, R2_max, R_sum
    
    @staticmethod
    def bc_capacity_degraded(P, N1, N2):
        """退化高斯BC容量(简化)"""
        # 假设N1 < N2(用户1更好)
        # 使用叠加编码
        R1_max = 0.5 * np.log2(1 + P/N1)
        R2_max = 0.5 * np.log2(1 + P/N2)
        return R1_max, R2_max
    
    @staticmethod
    def slepian_wolf_region(H_X, H_Y, H_XY):
        """Slepian-Wolf速率区域"""
        H_X_given_Y = H_XY - H_Y
        H_Y_given_X = H_XY - H_X
        return H_X_given_Y, H_Y_given_X, H_XY
    
    @staticmethod
    def wyner_ziv_rate(sigma2_x_y, D):
        """Wyner-Ziv率失真函数"""
        if D >= sigma2_x_y:
            return 0
        return 0.5 * np.log2(sigma2_x_y / D)


# 使用示例
if __name__ == "__main__":
    calc = MultiUserInfoTheory()
    
    print("多用户信息论计算")
    print("=" * 60)
    
    # MAC
    R1, R2, Rsum = calc.mac_capacity_gaussian(1, 1, 1)
    print(f"MAC: R1_max={R1:.4f}, R2_max={R2:.4f}, R_sum={Rsum:.4f}")
    
    # Slepian-Wolf
    H_X, H_Y, H_XY = 1, 1, 1.5
    RX_min, RY_min, R_sum_min = calc.slepian_wolf_region(H_X, H_Y, H_XY)
    print(f"\nSW: R_X≥{RX_min:.4f}, R_Y≥{RY_min:.4f}, R_X+R_Y≥{R_sum_min:.4f}")

五、深入思考

5.1 历史背景

网络信息论始于1960-70年代,Cover、El Gamal、Slepian、Wolf等人做出了奠基性贡献。近年来,随着无线通信的发展,网络信息论重新成为研究热点。

5.2 前沿方向

大规模网络:物联网、超密集网络中的信息论问题。

语义通信:超越比特级传输,关注信息的含义。

量子网络:量子纠缠在网络中的作用。

AI辅助网络:机器学习优化网络资源分配。

5.3 延伸阅读

Cover & Thomas《信息论基础》第14章、第15章

El Gamal & Kim《Network Information Theory》

Cadambe & Jafar关于干扰对齐的论文


六、实验笔记

实验1:MAC容量区域可视化

目标:绘制不同功率配置下的MAC容量区域。

步骤:

改变 $P_1/P_2$ 比例

观察容量区域形状的变化

比较MAC与TDMA的性能差距

实验2:网络编码增益测量

目标:量化网络编码相对于传统路由的吞吐量增益。

步骤:

实现蝴蝶网络的路由和网络编码方案

测量两种方案的吞吐量

验证50%的理论增益


七、本章小结

本章介绍了网络信息论的基本概念。

多址接入信道允许多个用户同时向一个接收者发送,容量区域由三个不等式定义。广播信道中,发送者通过叠加编码同时服务多个接收者。

Slepian-Wolf定理表明分布式无损压缩可以达到与集中式编码相同的总速率,这是信息论中最令人惊讶的结果之一。Wyner-Ziv编码进一步表明,对于某些信源,编码器不需要知道解码端的边信息。

网络编码突破了传统路由的限制,允许中间节点进行数据处理,显著提高网络吞吐量。干扰对齐展示了如何巧妙地管理多用户干扰。

多用户MIMO利用空间维度增加系统容量,是5G/6G的核心技术。

从程序员的角度看,理解网络信息论有助于设计高效的多用户通信协议,优化网络资源分配,以及评估分布式系统的性能极限。


八、习题

习题9.1(MAC):两个用户功率分别为 $P_1=4$ 和 $P_2=1$,噪声 $N=1$。计算MAC容量区域的顶点坐标。

习题9.2(Slepian-Wolf):两个二元信源 $P(X=Y)=0.9$。计算Slepian-Wolf速率区域的顶点。

习题9.3(Wyner-Ziv):高斯信源 $X=Y+Z$,$Y \sim \mathcal{N}(0,4)$,$Z \sim \mathcal{N}(0,1)$。计算 $D=0.5$ 时的Wyner-Ziv率。

习题9.4(编程题):实现蝴蝶网络的网络编码方案,验证其正确性。

习题9.5(挑战题):推导三用户高斯MAC的容量区域。

习题9.6(应用题):在视频会议系统中,如何应用Wyner-Ziv编码降低编码器复杂度?

习题9.7(分析题):比较NOMA和OMA(正交多址接入)的优缺点。

习题9.8(开放性问题):研究网络编码在内容分发网络中的应用现状,撰写一篇500字左右的分析报告。

习题9.9(综合题):结合信源编码、信道编码和网络编码,设计一个端到端的传感器网络通信方案。

习题9.10(最终挑战):总结全书9章内容,撰写一篇2000字左右的综述,阐述信息论的核心思想、主要成果和对现代科技的影响。


结语

恭喜你完成了《信息论基础》全部9章的学习!

从熵的基本概念,到信源编码、信道编码,再到率失真理论和网络信息论,你已经掌握了信息论的核心知识体系。这些理论不仅构成了现代通信系统的基础,也深刻影响了机器学习、统计学、物理学等多个领域。

信息论的魅力在于它的普适性和深刻性。香农在1948年提出的概念至今仍然是研究的前沿,这证明了真正伟大的思想具有超越时代的价值。

希望这本书能够激发你对信息科学的兴趣,在你的学习和研究中发挥重要作用。记住,信息论不仅是一套数学工具,更是一种思考世界的方式——用信息的视角看待不确定性、复杂性和通信的本质。

祝你在学习和研究的道路上继续前行,探索信息的无限可能!

9/9信息论与
0%