L次扩展离散无记忆信道容量完整推导及Python仿真可视化

一、作业摘要

离散无记忆信道(DMC)的L次扩展信道,指连续传输L个独立符号构成的序列传输模型。本文先推导单符号DMC信道容量,再严格证明L次扩展信道容量为单符号容量的L倍;通过互信息凸性、信道容量可达性完成理论证明;最后使用Python实现二元对称信道BSC的L次扩展数值仿真,绘制互信息随输入分布变化曲线,直观验证扩展信道容量规律,完成理论推导+仿真验证闭环。

二、基础概念铺垫

2.1 单符号离散无记忆信道DMC

信道输入字母集X={x1,x2,…,xM},输出字母集 Y={y1,y2,…,yN},信道转移矩阵 P(Y|X)=[p(yj|xi)]M×N。
输入随机变量 X,输出 Y,互信息定义:
I(X;Y)=i=1Mj=1Np(xi)p(yj|xi)logp(yj|xi)p(yj)
单符号信道容量:输入分布遍历所有概率分布时,互信息的最大值
C=maxp(x)I(X;Y)

2.2 L次扩展离散无记忆信道定义

对原DMC做L次扩展,输入为长度L的序列 X=(X1,X2,…,XL),输出序列
Y=(Y1,Y2,…,YL)。
离散无记忆特性:序列转移概率可分解为单符号乘积
p(y|x)=k=1Lp(yk|xk)
输入序列独立同分布:p(x)=k=1Lp(xk)

三、L次扩展信道互信息与容量数学推导

3.1 L长序列互信息分解

序列互信息 I(X;Y)=H(Y)−H(Y|X)
1.条件熵分解(无记忆信道)

H(Y|X)=k=1LH(Yk|Xk)

2.输出熵上界

H(Y)≤k=1LH(Yk)

等号当且仅当Y1,Y2,…,YL 相互独立成立。

联立得互信息不等式:

I(X;Y)≤k=1LH(Yk)−H(Yk|Xk)=k=1LI(Xk;Yk)
当输入各符号独立同分布时,等号取到:
I(X;Y)=k=1LI(Xk;Yk)=L⋅I(X;Y)

3.2 L次扩展信道容量定理

设单符号DMC容量为 C,其L次扩展信道容量 C_L 满足:
CL=L⋅C
证明:

1.上界证明
任意输入序列分布下:
I(X;Y)≤L⋅maxp(x)I(X;Y)=LC2. 可达性证明
取输入序列各符号独立同分布,且单符号分布取达到容量的最优输入分布p∗(x),此时:
I(X;Y)=L⋅Imax(X;Y)=LC因此扩展信道能达到上界,容量CL=LC。

2.物理意义

1.无记忆信道多次扩展后,最大每序列传输信息量线性随长度L增长;
2.单位符号平均容量不变:CLL=C,多次传输不会提升单符号极限传输速率;
3.最优输入策略:序列各符号独立、采用单符号最优输入分布。

3.经典实例:二元对称信道BSC

BSC转移概率:p(0|0)=p(1|1)=1−p, p(1|0)=p(0|1)=p单符号容量公式:
CBSC=1−H§, H§=−plog2p−(1−p)log2(1−p)L次扩展BSC容量:
CL=L⋅1−H§

四、Python仿真完整代码

仿真目标

1.绘制BSC单符号互信息随输入分布P(X=0)=q 变化曲线,标出容量最大值;
2.分别计算L=1,2,3次扩展信道容量,验证CL=L⋅C;
3.绘制不同L下扩展信道容量对比柱状图,直观展示线性关系。

import numpy as np
import matplotlib.pyplot as plt


plt.rcParams["font.family"] = "SimHei"       
plt.rcParams["axes.unicode_minus"] = False  
plt.rcParams["figure.dpi"] = 100           


def binary_entropy(p):
    if p <= 1e-10 or p >= 1 - 1e-10:
        return 0.0
    return -p * np.log2(p) - (1 - p) * np.log2(1 - p)

def bsc_mutual_info(q, p_err):
   
    py0 = q * (1 - p_err) + (1 - q) * p_err
    py1 = 1 - py0
    hy = binary_entropy(py0)
    h_y_given_x = binary_entropy(p_err)
    return hy - h_y_given_x

def bsc_single_capacity(p_err):
   
    return 1 - binary_entropy(p_err)

def bsc_L_ext_capacity(L, p_err):
    
    C_single = bsc_single_capacity(p_err)
    return L * C_single


p_error = 0.1  
L_list = [1, 2, 3]
q_range = np.linspace(0, 1, 300)
mi_curve = [bsc_mutual_info(q, p_error) for q in q_range]
C1 = bsc_single_capacity(p_error)


plt.figure(figsize=(10, 4))
plt.plot(q_range, mi_curve, c="#1f77b4", linewidth=2, label=f"BSC p_err={p_error} 互信息I(X;Y)")
plt.axhline(y=C1, c="red", linestyle="--", label=f"单符号容量 C={C1:.4f} bit")
plt.scatter(0.5, C1, c="red", s=90, zorder=5, label="最优输入分布 q=0.5")
plt.xlabel("输入分布 q = P(X=0)")
plt.ylabel("互信息 I(X;Y) / bit")
plt.title("二元对称信道单符号互信息随输入分布变化曲线")
plt.grid(alpha=0.3)
plt.legend()



cap_list = [bsc_L_ext_capacity(L, p_error) for L in L_list]
plt.figure(figsize=(7, 4))
bars = plt.bar([f"L={l}" for l in L_list], cap_list, color="#2ca02c", width=0.5)
# 在柱子上方标注数值
for bar, val in zip(bars, cap_list):
    plt.text(bar.get_x()+bar.get_width()/2, bar.get_height()+0.02, f"{val:.4f}", ha="center")
plt.ylabel("扩展信道容量 C_L / bit")
plt.title("L=1,2,3次扩展BSC信道容量对比")
plt.grid(axis="y", alpha=0.3)

print("==== L次扩展BSC信道容量数值验证 ====")
for L in L_list:
    CL = bsc_L_ext_capacity(L, p_error)
    print(f"L={L} 次扩展信道容量 C_L = {CL:.4f} bit")
print(f"单符号基础容量 C = {C1:.4f} bit,满足 C_L = L * C")


plt.show()

五、仿真结果分析

BSC单符号互信息变化曲线

L次扩展BSC信道容量对比柱状图

L次扩展BSC信道容量数值验证截图

5.1 曲线结果解读

1.互信息曲线顶点出现在 q=0.5,即输入等概率分布时互信息取最大值,对应BSC最优输入;
2.偏离 q=0.5 时互信息单调下降,输入分布越不均衡,信道可传输信息量越少。

5.2 L次扩展容量数值验证

以代码中perr=0.1为例:
单符号容量 C=1−H(0.1)≈0.5310 bit

L=1:C1=0.5310-
L=2: C2=1.0620=2×C
L=3:C3=1.5930=3×C
完全匹配定理CL=LC

5.3 柱状图结论

扩展信道容量随序列长度L严格线性增长,无记忆信道多次串行扩展仅增加总传输信息量,单位符号容量保持恒定。

六、作业总结

1.理论层面:通过互信息分解严格证明L次扩展DMC信道容量满足 C_L = L \cdot C,最优输入为各符号独立、单符号最优分布。

2.仿真层面:以二元对称信道BSC为实例,用Python绘图与数值计算两方面验证定理。

3.工程价值:通信分组传输场景下,序列最大传输信息量随分组长度线性增长,指导分组码设计与输入符号概率分配。

4.概念深化:通过仿真与推导区分有无记忆信道的容量规律,巩固互信息、信道容量、扩展信道等信息论核心知识点。

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐