发布时间:2026/9/4 9:16:23
BSC信道下重复码纠错性能仿真 P124302178 李云徽 BSC信道下重复码纠错性能仿真 P124302178 李云徽摘要本实验通过Python仿真实现了二进制对称信道BSC下重复码的纠错性能分析。重复码是一种简单的纠错编码方案其基本思想是将每个信息比特重复nnn次发送接收端通过大数判决来纠正错误。实验对比了不同重复次数3次、5次、7次的误码率性能并与理论值进行了比较。结果表明重复码在信道误码率较低时能够显著降低解码后的误码率且重复次数越多纠错能力越强但编码效率越低。仿真结果与理论值高度吻合验证了理论分析的正确性和仿真实现的准确性。一、基本原理1.1 二进制对称信道BSC二进制对称信道是一种离散无记忆信道其特点是输入符号0 或 1输出符号0 或 1错误概率P(0∣1)P(1∣0)pP(0|1) P(1|0) pP(0∣1)P(1∣0)p即每个比特独立地以概率ppp发生翻转1.2 重复码编码原理对于(n,1)(n,1)(n,1)重复码每个信息比特被重复nnn次发送输入d∈{0,1}d \in \{0, 1\}d∈{0,1}编码输出d,d,...,d⏟n次\underbrace{d, d, ..., d}_{n \text{次}}n次d,d,...,d​​例如对于3次重复码输入 0 → 编码输出 000输入 1 → 编码输出 1111.3 大数判决解码原理接收端对每个码组进行大数判决统计码组中0和1的个数如果1的个数多于0则判决为1如果0的个数多于1则判决为0对于奇数n2t1n 2t 1n2t1重复码可以纠正最多ttt个错误。1.4 理论误码率公式(n,1)(n,1)(n,1)重复码的理论误码率为Pe∑kt1n(nk)pk(1−p)n−k P_e \sum_{kt1}^{n} \binom{n}{k} p^k (1-p)^{n-k}Pe​kt1∑n​(kn​)pk(1−p)n−k其中t⌊(n−1)/2⌋t \lfloor (n-1)/2 \rfloort⌊(n−1)/2⌋是最大可纠正错误数。二、代码实现2.1 整体结构├── generate_binary_data()# 生成随机二进制数据├── repetition_encode()# 重复码编码├── bsc_channel()# BSC信道模型├── majority_decode()# 大数判决解码├── calculate_bit_error_rate()# 计算误码率├── simulate_bsc_repetition_code()# 仿真主函数├── theoretical_ber()# 理论误码率计算└── plot_ber_curves()# 绘制BER曲线2.2 核心函数详解2.2.1 BSC信道模型defbsc_channel(encoded_data,p_error):noisenp.random.rand(len(encoded_data))p_error receivednp.logical_xor(encoded_data,noise).astype(int)returnreceived该函数通过生成均匀分布的随机数来模拟信道噪声当随机数小于错误概率ppp时对应比特发生翻转。2.2.2 大数判决解码defmajority_decode(received_data,n_repeats):data_lengthlen(received_data)//n_repeats decodednp.zeros(data_length,dtypeint)foriinrange(data_length):starti*n_repeats endstartn_repeats chunkreceived_data[start:end]decoded[i]1ifnp.sum(chunk)n_repeats//2else0returndecoded该函数将接收数据按码组分割对每个码组统计1的个数通过比较1的个数是否超过半数来进行判决。2.2.3 理论误码率计算deftheoretical_ber(n_repeats,p_error):t(n_repeats-1)//2ber0forkinrange(t1,n_repeats1):bermath.comb(n_repeats,k)*(p_error**k)*((1-p_error)**(n_repeats-k))returnber该函数根据二项分布计算超过纠错能力的错误概率之和。三、仿真结果3.1 仿真参数参数值重复次数3, 5, 7信道误码率范围0.0001 ~ 1.0数据长度100000 bit信道误码率采样点数203.2 仿真数据信道误码率ppp3次重复码BER5次重复码BER7次重复码BER0.00010.0000e000.0000e000.0000e000.00040.0000e000.0000e000.0000e000.00181.0000e-050.0000e000.0000e000.00781.7000e-041.0000e-050.0000e000.03363.3900e-034.3000e-045.0000e-050.14385.6130e-022.3510e-021.0500e-020.61586.7102e-017.0943e-017.3995e-013.3 BER曲线四、结果分析4.1 纠错性能对比从仿真结果可以看出低误码率区域p0.1p 0.1p0.1重复码表现出显著的纠错效果误码率相比未编码情况降低了几个数量级。重复次数越多纠错效果越好。中等误码率区域0.1p0.50.1 p 0.50.1p0.5重复码仍然有效但优势逐渐减小。此时7次重复码的优势最为明显。高误码率区域p0.5p 0.5p0.5当信道误码率超过0.5时重复码的性能反而恶化误码率超过0.5。这是因为此时噪声占主导大数判决反而更容易出错。4.2 仿真与理论对比仿真结果与理论曲线几乎完全重合验证了仿真实现的正确性。这表明BSC信道模型的实现是准确的大数判决解码算法是正确的理论公式的推导是正确的4.3 复杂度与性能权衡重复次数编码效率最大纠错能力适用场景31/31 bit信道质量较好51/52 bits信道质量一般71/73 bits信道质量较差重复码的缺点是编码效率较低随着重复次数增加传输效率线性下降。因此在实际应用中需要在纠错能力和传输效率之间进行权衡。五、结论本实验通过Python仿真实现了BSC信道下重复码的纠错性能分析得出以下结论重复码是有效的纠错编码方案在信道误码率较低时能够显著降低解码后的误码率。重复次数与纠错能力正相关重复次数越多纠错能力越强但编码效率越低。仿真结果与理论值高度吻合验证了理论分析的正确性和仿真实现的准确性。适用范围有限重复码仅在信道误码率低于0.5时有效且编码效率较低实际应用中通常采用更高效的编码方案如汉明码、卷积码等。六、源码importnumpyasnpimportmatplotlib.pyplotaspltimportmathdefgenerate_binary_data(length):returnnp.random.randint(0,2,length)defrepetition_encode(data,n_repeats):encodednp.repeat(data,n_repeats)returnencodeddefbsc_channel(encoded_data,p_error):noisenp.random.rand(len(encoded_data))p_error receivednp.logical_xor(encoded_data,noise).astype(int)returnreceiveddefmajority_decode(received_data,n_repeats):data_lengthlen(received_data)//n_repeats decodednp.zeros(data_length,dtypeint)foriinrange(data_length):starti*n_repeats endstartn_repeats chunkreceived_data[start:end]decoded[i]1ifnp.sum(chunk)n_repeats//2else0returndecodeddefcalculate_bit_error_rate(original,decoded):errorsnp.sum(original!decoded)returnerrors/len(original)defsimulate_bsc_repetition_code(n_repeats_list,p_error_list,data_length100000):ber_results{}forn_repeatsinn_repeats_list:ber_values[]forp_errorinp_error_list:datagenerate_binary_data(data_length)encodedrepetition_encode(data,n_repeats)receivedbsc_channel(encoded,p_error)decodedmajority_decode(received,n_repeats)bercalculate_bit_error_rate(data,decoded)ber_values.append(ber)ber_results[n_repeats]ber_valuesreturnber_resultsdeftheoretical_ber(n_repeats,p_error):t(n_repeats-1)//2ber0forkinrange(t1,n_repeats1):bermath.comb(n_repeats,k)*(p_error**k)*((1-p_error)**(n_repeats-k))returnberdefplot_ber_curves(p_error_list,ber_results,n_repeats_list):plt.rcParams[font.sans-serif][SimHei,Microsoft YaHei,DejaVu Sans]plt.rcParams[axes.unicode_minus]Falseplt.figure(figsize(10,6))colors[blue,red,green,orange,purple]markers[o,s,^,D,v]foridx,n_repeatsinenumerate(n_repeats_list):plt.semilogy(p_error_list,ber_results[n_repeats],colorcolors[idx],markermarkers[idx],linestyle-,linewidth2,markersize6,labelf{n_repeats}次重复码(仿真))theoretical_values[theoretical_ber(n_repeats,p)forpinp_error_list]plt.semilogy(p_error_list,theoretical_values,colorcolors[idx],linestyle--,linewidth1.5,labelf{n_repeats}次重复码(理论))plt.semilogy(p_error_list,p_error_list,k--,linewidth2,label未编码(理论))plt.xlabel(信道误码率 $p$,fontsize12)plt.ylabel(解码后误码率 BER,fontsize12)plt.title(BSC信道下重复码纠错性能仿真,fontsize14,fontweightbold)plt.grid(True,whichboth,linestyle--,alpha0.7)plt.legend(fontsize10,locupper left)plt.xlim([min(p_error_list),max(p_error_list)])plt.ylim([1e-10,1])plt.tight_layout()plt.savefig(ber_curves.png,dpi300,bbox_inchestight)plt.show()defmain():np.random.seed(42)n_repeats_list[3,5,7]p_error_listnp.logspace(-4,0,20)print(*60)print(BSC信道下重复码纠错性能仿真)print(*60)print(f\n仿真参数)print(f 重复次数{n_repeats_list})print(f 信道误码率范围{p_error_list[0]:.4f}~{p_error_list[-1]:.4f})print(f 数据长度100000 bit)print(f\n正在进行仿真...)ber_resultssimulate_bsc_repetition_code(n_repeats_list,p_error_list)print(f\n仿真结果)print(f{信道误码率:15},end)forninn_repeats_list:print(f|{n}次重复码BER,end)print()print(-*60)fori,pinenumerate(p_error_list[::3]):print(f{p:15.4f},end)forninn_repeats_list:print(f|{ber_results[n][i*3]:15.4e},end)print()print(f\n绘制BER曲线...)plot_ber_curves(p_error_list,ber_results,n_repeats_list)print(f\n仿真完成结果图已保存为 ber_curves.png)print(*60)if__name____main__:main()

相关新闻

2026/9/3 18:31:55

Edalize高级技巧:自定义工具配置和参数传递的最佳实践

Edalize高级技巧:自定义工具配置和参数传递的最佳实践 【免费下载链接】edalize An abstraction library for interfacing EDA tools 项目地址: https://gitcode.com/gh_mirrors/ed/edalize 想要在EDA工具集成中实现高效的工作流?掌握Edalize的自…

2026/9/5 2:24:56

STM32智能家居语音控制系统:从外设开发到仿真调试全解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/5 2:24:56

AI编程工作流实战:三层架构搭建与自动化提效指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/5 2:24:56

一阶低通滤波截止频率怎么选?从物理意义到工程实践全解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/5 2:24:55

Kubuntu 26 中文输入法配置指南:Fcitx5 从安装到实战

1. 背景 kubuntu26安装系统后,无法使用中文输入法飞书、谷歌浏览器等应用无法使用中文输入法 2. 安装 # 安装 Fcitx5 核心、拼音引擎、所有前端支持及配置工具 sudo apt install fcitx5 fcitx5-chinese-addons fcitx5-frontend-gtk2 fcitx5-frontend-gtk3 fcitx5-fr…

2026/9/5 2:19:55

手写数字识别毕业设计全流程指南:从模型构建到工程部署

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/3 18:28:26

vSound小提琴数字处理器实操指南:从接线到演出的完整配置

电小提琴或者原声小提琴插电演出,第一个绕不开的坎就是声音难听。原声琴的共鸣和空气感一旦进了拾音器,出来的往往是一坨干瘪、发尖、带着奇怪塑料味的信号。我当初第一次把琴接上乐队调音台,直接被主唱吐槽"你这声音像在锯钢丝"。…

2026/9/3 14:29:47

传感器接口IC如何攻克生物化学传感的微弱信号难题?

1. 从电极到比特流:为什么生物化学传感必须依赖专用接口IC 做生物化学传感的人都有过类似的经历:明明传感器本身性能很好,信号输出却一塌糊涂——噪声大、漂移明显、重复性差,怎么调都达不到预期。很多时候问题并不在传感器&#…

2026/9/3 14:30:35

STM32F411CEU6多通道ADC采集:扫描模式+DMA实现详解

1. 多通道 ADC 的用武之地把“Multichannel ADC”和“STM32F411CEU6”这两个关键字放在一起,其实就是嵌入式开发里最常遇到的一类需求:用一块不算贵的 MCU,同时采集多路模拟信号。STM32F411CEU6 是 48 引脚的 Cortex-M4F 主控,主频…

2026/9/5 0:04:47

流式背压机制:避免前端渲染卡死与内存暴涨的滑动窗口限流

流式背压机制:避免前端渲染卡死与内存暴涨的滑动窗口限流在大模型流式输出(Streaming)与智能体实时推流的架构中,生产环境中经常出现一种“上下游生产消费速率严重失衡”的极端情况: 生产端极速产出:大模型…

2026/9/3 20:43:36

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/3 17:51:43

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/3 21:06:57

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…