一、理论基础回顾

BSC(二元对称信道 Binary Symmetric Channel):输入、输出均为二元符号{0,1},信道错误转移概率为p(发送 0 收到 1、发送 1 收到 0 的概率均为p),正确传输概率1—p,信道转移矩阵:

1.1串联信道核心理论依据:马尔可夫无记忆性 + 条件概率链式法则

1 信道无记忆性(最核心前提)

单个 BSC 是离散无记忆信道 (DMC):某时刻输出仅依赖当前时刻输入,与过往输入、输出无关。

当两个 BSC 级联(串联:发送端→BSC 1 →BSC 2→接收端):

设X为总输入,Y为中间节点,Z为总输出,满足马尔可夫链:X→Y→Z

数学等价条件:P(z∣x,y)=P(z∣y)

含义:给定中间随机变量Y,最终输出Z与初始输入X条件独立,第二个 BSC 的传输只由中间码字Y决定,不受原始输入X直接影响。

2串联信道转移概率推导(全概率公式)

总信道输入X,输出Z,联合转移概率:

差错概率差错概率

(1)发送x=0:

P(Z=0∣X=0)​=P(Y=0∣X=0)P(Z=0∣Y=0)+P(Y=1∣X=0)P(Z=0∣Y=1)
=(1−p1​)(1−p2​)+p1​p2​​

P(Z=1∣X=0)=(1−p1​)p2​+p1​(1−p2​)

(2)由对称性(PZ=0X=1)与(PZ=1X=0)相等,因此两个 BSC 串联后依然是一个新的 BSC 信道。

3. 串联后等效差错概率

等效错误概率:

可推广到N个 BSC 级联,利用马尔可夫链逐次卷积转移矩阵得到等效 BSC 参数。

1.2信息论层面理论基础

1数据处理不等式(DPI)

对马尔可夫链

物理意义:BSC 串联相当于对信号做两次噪声处理,信道串联不会增加互信息,总信道容量不大于任意单段 BSC 的信道容量。

BSC 信道容量:为二元熵函数,串联后等效,容量只会下降或不变。

    2信道转移矩阵的矩阵乘法原理

DMC 信道级联等价于信道转移矩阵相乘:

分别为两个 BSC 转移矩阵,串联后总转移矩阵:

=

这是多个 BSC 多级串联的通用计算理论,本质源于条件概率的矩阵表示与马尔可夫条件。

1.3核心前提总结

  1. 每一级 BSC 必须是离散无记忆信道,各级噪声相互独立;
  2. 信道级联满足一阶马尔可夫链条件,中间状态条件隔离前后输入输出;
  3. 二元对称结构保证级联后信道仍满足二元输入、对称差错特性,等效信道依旧为 BSC;
  4. 信息论约束:级联信道互信息递减,信道容量不提升。

二、python代码分析

1.1整体功能概述

该 Python 代码基于二元对称信道 (BSC) 级联理论,实现两类场景仿真:

  1. 多个相同差错概率 p的 BSC 信道串联,计算不同串联级数下的等效误码率Pe与信道容量C,同时绘制变化趋势曲线、格式化输出结果表格;
  2. 多个不同差错概率的 BSC 信道串联,批量计算等效误码率与信道容量;

核心理论依据:BSC 级联等效误码公式、二元熵函数、BSC 信道容量公式。

import math
import matplotlib.pyplot as plt
import numpy as np

# 解决Matplotlib中文乱码、负号显示异常
plt.rcParams["font.family"] = ["SimHei", "WenQuanYi Micro Hei", "Heiti TC"]
plt.rcParams["axes.unicode_minus"] = False
  • math:提供以 2 为底对数计算;
  • numpy:批量生成串联数序列、数组存储结果;
  • matplotlib:绘制容量、等效误码随串联级数变化的双子图;
  • 字体配置:适配 Windows/Linux/macOS 三种系统中文字体,防止图表中文方框乱码
    def binary_entropy(x):
        if x <= 0.0 or x >= 1.0:
            return 0.0
        return -x * math.log2(x) - (1 - x) * math.log2(1 - x)

    实现二元熵函数计算,做边界容错:

  • 当\(x=0\)或\(x=1\)时熵为 0(确定事件,无不确定性),避免log2(0)报错;
  • 熵是 BSC 信道容量计算的核心中间量,表征信道噪声带来的不确定性。
def bsc_series_same(p, N):
    Pe = 0.5 * (1 - (1 - 2 * p) ** N)
    C = 1 - binary_entropy(Pe)
    return Pe, C

原理说明

  1. 公式来源:N 个独立同分布 BSC 级联,利用马尔可夫链转移矩阵相乘推导得出等效误码;
  2. 物理规律:串联级数N越大,越趋近于 0.5,信道噪声趋近随机猜测;
  3. 信道容量由 BSC 经典公式求解;
  4. 返回值:等效误码率、单符号信道容量。
def batch_calc_same(p, N_max):
    N_arr = np.arange(1, N_max + 1)
    Pe_arr = []
    C_arr = []
    for n in N_arr:
        pe, c = bsc_series_same(p, n)
        Pe_arr.append(pe)
        C_arr.append(c)
    return N_arr, np.array(Pe_arr), np.array(C_arr)
  • 生成 1~N_max 连续串联级数;
  • 循环批量计算每一级对应的误码、容量,存入数组,为绘图提供数据源。
plt.subplot(1, 2, 1)  # 左子图:容量-串联数曲线
plt.subplot(1, 2, 2)  # 右子图:等效误码-串联数曲线
  • 画布分为 1 行 2 列双子图:
    • 左图:信道容量随串联级数增大单调递减;
    • 右图:等效误码率随串联级数增大单调递增趋近 0.5;
  • 样式优化:带标记点折线、网格、中文标题坐标轴、紧凑布局防止文字重叠;
  • 直观验证数据处理不等式 DPI:信道级联不会提升互信息,容量逐级衰减。
if __name__ == "__main__":
    p_single = 0.1
    N_test_list = [1, 2, 3, 5, 8, 10, 15, 20, 30, 50]
    N_max_plot = 30

执行三大功能:

  1. 相同 BSC 多组级数表格结果输出;
  2. 自定义多组不同 p 的 BSC 串联算例演示;
  3. 绘制容量、误码变化趋势图。

三、Python代码及仿真结果展示

四、工程意义与学习收获

1、本次BSC信道串联仿真,验证了多级信道传输的噪声累积特性。实际通信的中继转发、多跳传输可等效为BSC串联,串联级数越多,误码率越高、信道容量越小,印证了数据处理不等式。该结果可为通信系统减少信号中转、优化中继部署、设计纠错编码提供理论支撑,同时BSC串联模型可用于多级传输链路的性能预估,具备较强的工程实用价值。

2、本次实验让我掌握了BSC信道无记忆性、级联等效原理及误码率计算公式,直观理解了二元熵与信道容量的变化规律。通过代码仿真,我将抽象的信息论理论与可视化结果结合,明晰了信道串联只会损耗信息、无法提升传输性能的特性,同时提升了通信建模与仿真实操能力,夯实了数字通信的理论基础。

更多推荐