多个BSC信道串联后的信道容量以及python仿真(P124302088 刘仁杰 P124302082 冯志国 P124302115 李宗尧 P124302100 徐满)
一、理论基础回顾
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)+p1p2
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核心前提总结
- 每一级 BSC 必须是离散无记忆信道,各级噪声相互独立;
- 信道级联满足一阶马尔可夫链条件,中间状态条件隔离前后输入输出;
- 二元对称结构保证级联后信道仍满足二元输入、对称差错特性,等效信道依旧为 BSC;
- 信息论约束:级联信道互信息递减,信道容量不提升。
二、python代码分析
1.1整体功能概述
该 Python 代码基于二元对称信道 (BSC) 级联理论,实现两类场景仿真:
- 多个相同差错概率 p的 BSC 信道串联,计算不同串联级数下的等效误码率Pe
与信道容量C,同时绘制变化趋势曲线、格式化输出结果表格; - 多个不同差错概率的 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
原理说明
- 公式来源:N 个独立同分布 BSC 级联,利用马尔可夫链转移矩阵相乘推导得出等效误码;
- 物理规律:串联级数N越大,
越趋近于 0.5,信道噪声趋近随机猜测; - 信道容量由 BSC 经典公式
求解; - 返回值:等效误码率、单符号信道容量。
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
执行三大功能:
- 相同 BSC 多组级数表格结果输出;
- 自定义多组不同 p 的 BSC 串联算例演示;
- 绘制容量、误码变化趋势图。
三、Python代码及仿真结果展示







四、工程意义与学习收获
1、本次BSC信道串联仿真,验证了多级信道传输的噪声累积特性。实际通信的中继转发、多跳传输可等效为BSC串联,串联级数越多,误码率越高、信道容量越小,印证了数据处理不等式。该结果可为通信系统减少信号中转、优化中继部署、设计纠错编码提供理论支撑,同时BSC串联模型可用于多级传输链路的性能预估,具备较强的工程实用价值。
2、本次实验让我掌握了BSC信道无记忆性、级联等效原理及误码率计算公式,直观理解了二元熵与信道容量的变化规律。通过代码仿真,我将抽象的信息论理论与可视化结果结合,明晰了信道串联只会损耗信息、无法提升传输性能的特性,同时提升了通信建模与仿真实操能力,夯实了数字通信的理论基础。
更多推荐
所有评论(0)