引言:
平均互信息 I(X;Y) 是信息论中信道容量求解的核心函数。信道容量定义为固定信道下,对输入先验概率 p(xi) 求取互信息的最大值。互信息作为输入分布的上凸函数(凹函数),保证了该极值是唯一全局最大值,不存在多个局部极值,因此可以使用拉格朗日乘数法或Blahut-Arimoto算法迭代求解最优输入分布。本文完成严格数学证明,并给出Python三维曲面及二维截面仿真代码,直观展示互信息随先验概率变化的上凸曲面与曲线。

一、 研究背景
在通信系统中,信道容量 C= max p(xi)*I(X;Y) 是衡量信道最大可靠传输速率的关键参数。由于信道转移概率 P(y∣x) 通常固定,唯一可优化的是信源输入分布 p(xi)。
核心前提:只有当 I(X;Y) 是 p(xi) 的上凸函数时,最大值才唯一且全局最优,这是所有迭代注水算法收敛的理论基石。本次课题严格证明该凸性,并进行多维度数值仿真验证。

二、 基本概念回顾
2.1 互信息等价形式: I(X;Y)=H(Y)−H(Y∣X)
2.2 凹(上凸)函数定义: 对定义域内任意两点对定义域内任意两点x1,x2及λ∈[0,1]

在这里插入图片描述

2.3 两大核心性质:
1.熵函数的凹性:熵函数 H(⋅) 是概率分布的严格凹函数(可由詹森不等式证明)。
2.条件熵的线性性:固定信道转移概率时,条件熵 H(Y∣X)=∑x*p(x)H(Y∣X=x) 是输入分布 p(x) 的线性函数。

三、 严格数学证明
设存在任意两个输入概率分布 P1(x) 和 P2(x),以及 λ∈[0,1]。定义混合分布:Pλ(x)=λ*P1(x)+(1−λ)*P2(x)
由于信道是线性的(固定转移矩阵),对应的输出分布也满足:Qλ(y)=λQ1(y)+(1−λ)Q2(y)
证明目标:证明 I(Pλ)≥λI(P1)+(1−λ)I(P2)。
第一步:分析输出熵 H(Y)。
由于熵函数H(⋅) 是凹函数,有:

在这里插入图片描述

第二步:分析条件熵 H(Y∣X)。
固定信道下,H(Y∣X=x) 为常数。因此:
在这里插入图片描述
第三步:合并两式。
在这里插入图片描述
结论:I(Pλ)≥λI(P1)+(1−λ)I(P2) 恒成立。因此互信息 I(X;Y) 是输入先验概率
p(x) 的上凸函数(凹函数)。证毕。

四、 物理意义解读
1.峰值唯一性:固定信道时,改变信源先验概率,互信息呈现“先上升后下降”的单峰形态,存在且仅存在唯一全局峰值,该峰值即为信道容量C。
2.优化安全性:上凸性保证任何局部最优解一定是全局最优解,算法永远不会陷入局部极值陷阱。
3.算法支撑:这一性质奠定了 Blahut-Arimoto 算法、注水法(Water-filling) 等经典迭代算法的收敛稳定性。只要每次迭代增加互信息,最终必然收敛至全局最大点。

五、 数值仿真与可视化分析
5.1 仿真场景:二元对称信道(BSC)
信道转移矩阵(错误概率为p):
在这里插入图片描述
输入先验概率设为 P(X=0)=q,P(X=1)=1−q,其中 q∈[0,1]。

输出 Y=1 的概率为:y=q(1−p)+(1−q)p
二元熵函数定义为 :在这里插入图片描述
互信息表达式为:
在这里插入图片描述
5.2 Python 仿真代码:

import numpy as np
import matplotlib.pyplot as plt
from matplotlib import font_manager

# =========================
# 1. 设置中文字体
# =========================

chinese_fonts = [
    "SimHei",
    "Microsoft YaHei",
    "Songti SC",
    "Heiti SC",
    "Arial Unicode MS",
    "Noto Sans CJK SC"
]

available_fonts = [f.name for f in font_manager.fontManager.ttflist]

for font in chinese_fonts:
    if font in available_fonts:
        plt.rcParams["font.sans-serif"] = [font]
        print("当前使用中文字体:", font)
        break

plt.rcParams["axes.unicode_minus"] = False

# =========================
# 2. 定义二进制熵函数
# H2(p) = -p log2(p) - (1-p) log2(1-p)
# =========================

def H2(p):
    """
    二进制熵函数,单位为 bit
    """
    p = np.clip(p, 1e-12, 1 - 1e-12)
    return -p * np.log2(p) - (1 - p) * np.log2(1 - p)

# =========================
# 3. 定义二元对称信道 BSC 的互信息
# I(X;Y) = H(Y) - H(Y|X)
# =========================

def mutual_information_bsc(p, epsilon):
    """
    p: P(X=1),输入先验概率
    epsilon: 二元对称信道交叉概率
    """
    py1 = epsilon + p * (1 - 2 * epsilon)
    return H2(py1) - H2(epsilon)

# =========================
# 4. 蒙特卡洛仿真估计互信息
# =========================

def empirical_mutual_information_bsc(p, epsilon, sample_num=200000):
    """
    通过随机生成样本估计互信息 I(X;Y)
    """
    # 生成输入 X
    X = np.random.binomial(1, p, sample_num)

    # 生成信道翻转噪声
    noise = np.random.binomial(1, epsilon, sample_num)

    # BSC 输出:Y = X xor noise
    Y = np.bitwise_xor(X, noise)

    # 统计联合概率 P(X,Y)
    joint = np.zeros((2, 2))

    for x, y in zip(X, Y):
        joint[x, y] += 1

    joint = joint / sample_num

    px = joint.sum(axis=1)
    py = joint.sum(axis=0)

    # 计算互信息
    I = 0.0

    for x in range(2):
        for y in range(2):
            if joint[x, y] > 0:
                I += joint[x, y] * np.log2(joint[x, y] / (px[x] * py[y]))

    return I

# =========================
# 5. 参数设置
# =========================

np.random.seed(2024)

# BSC 信道交叉概率
epsilon = 0.1

# 输入先验概率 p 的取值范围
p_grid = np.linspace(0, 1, 300)

# 理论互信息曲线
I_theory = mutual_information_bsc(p_grid, epsilon)

# =========================
# 6. 验证上凸性:画割线
# =========================

p1 = 0.2
p2 = 0.8

I1 = mutual_information_bsc(p1, epsilon)
I2 = mutual_information_bsc(p2, epsilon)

lambda_grid = np.linspace(0, 1, 100)

# 混合后的先验概率
p_mix = lambda_grid * p1 + (1 - lambda_grid) * p2

# 曲线上的互信息
I_mix = mutual_information_bsc(p_mix, epsilon)

# 两端点互信息的线性组合,即割线
I_line = lambda_grid * I1 + (1 - lambda_grid) * I2

# =========================
# 7. 蒙特卡洛仿真点
# =========================

p_sim = np.linspace(0.05, 0.95, 10)
I_sim = []

for p in p_sim:
    I_est = empirical_mutual_information_bsc(p, epsilon)
    I_sim.append(I_est)

I_sim = np.array(I_sim)

# =========================
# 8. 绘制图像
# =========================

plt.figure(figsize=(8, 5))

plt.plot(p_grid, I_theory, linewidth=2, label="理论互信息曲线")
plt.plot(p_mix, I_line, "--", linewidth=2, label="两点之间的割线")
plt.scatter(p_sim, I_sim, s=45, label="蒙特卡洛仿真点")

plt.xlabel("输入先验概率 p = P(X=1)")
plt.ylabel("互信息 I(X;Y) / bit")
plt.title("互信息关于输入先验概率的上凸性验证")

plt.grid(True)
plt.legend()
plt.tight_layout()
plt.show()

# =========================
# 9. 数值验证 Jensen 不等式
# =========================

print("Jensen 上凸性数值验证:")
print("lambda\tp_mix\tI(p_mix)\t线性组合\t差值")

for lam in [0.2, 0.4, 0.6, 0.8]:
    p_m = lam * p1 + (1 - lam) * p2
    I_m = mutual_information_bsc(p_m, epsilon)
    I_l = lam * I1 + (1 - lam) * I2
    gap = I_m - I_l

    print(f"{lam:.1f}\t{p_m:.3f}\t{I_m:.4f}\t\t{I_l:.4f}\t\t{gap:.4f}")

在这里插入图片描述
5.3 仿真结果分析:

运行代码后可以看到,理论互信息曲线是一条向下弯曲的曲线,在 p=0.5 附近取得最大值。这说明对于二元对称信道来说,当输入符号 0 和 1 等概率出现时,信道输入的不确定性最大,因此能够传递的信息量也最大。

图中的虚线表示在两个先验概率点之间连接得到的割线。可以看到,互信息曲线始终位于割线的上方,这正是上凸函数的几何特征。也就是说,对于任意两个输入先验概率分布,它们混合后的互信息不小于互信息的线性混合结果。

图中的散点是通过蒙特卡洛方法得到的仿真估计值。由于样本数量有限,散点会和理论曲线之间存在轻微误差,但整体分布基本贴合理论曲线。这说明仿真结果与理论推导是一致的。

因此,从理论证明和数值仿真两方面都可以说明:在信道转移概率固定的情况下,互信息是输入先验概率的上凸函数。

六、 结论
理论层面:本文通过严格的数学推导证明,在固定信道转移概率时,互信息 I(X;Y) 是输入先验分布 p(x) 的严格上凸(凹)函数。
优化层面:该性质保证信道容量优化问题是单峰优化问题,全局最大值唯一,为工程上使用拉格朗日乘数法、梯度上升法及 Blahut-Arimoto 算法提供了坚实的数学基础。
仿真层面:通过 BSC 信道的二维曲线与三维曲面可视化,直观验证了上凸性——任意两点间的弦均位于函数图像下方,且曲面不存在局部极值陷阱,与理论推导完全一致。

更多推荐