完整数字通信链路仿真(哈夫曼 +(7,4) 汉明码 + BSC 信道)【P124302151陈明】

发布时间:2026/7/17 23:25:09

完整数字通信链路仿真(哈夫曼 +(7,4) 汉明码 + BSC 信道)【P124302151陈明】
一、摘要本文搭建一套端到端简易数字通信系统完整流程随机信源序列→哈夫曼无损压缩信源编码→(7,4) 汉明码信道纠错编码→BSC 二进制对称信道加噪声传输→汉明译码纠错→哈夫曼译码恢复原始信源。通过改变 BSC 信道交叉概率统计不同噪声强度下系统整体传输正确率对比有无信道编码两种场景的性能差异分析信源编码、信道编码、噪声信道对通信可靠性的影响。实验融合信息论两大核心模块无损信源压缩与差错控制编码兼具理论推导与程序仿真完整复现现代数字通信底层流程。关键词信息论哈夫曼编码汉明码BSC 信道通信链路仿真二、实验目的掌握离散无记忆信源熵、哈夫曼最优前缀编码原理与编解码实现掌握 (7,4) 汉明码生成矩阵、校验矩阵构造、校验子纠错机制理解 BSC 二进制对称信道噪声模型搭建串联式完整通信链路区分信源编码与信道编码的不同作用定量分析信道噪声强度对传输正确率的影响验证信道编码的纠错增益学会通过仿真数据、对比曲线完成实验分析完成标准化课程大作业。三、理论基础3.1 哈夫曼信源编码离散信源熵哈夫曼自底向上合并最小概率节点生成最优二元前缀码实现无损压缩降低传输比特量。译码时利用前缀特性唯一还原原始符号。3.2 (7,4) 汉明码(7,4) 汉明码4 位信息位3 位校验位码长 7可纠正1 位随机错码。 标准生成矩阵 G校验矩阵 HS0无错码S0校验子对应 H 矩阵列定位错误比特并翻转纠错。3.3 BSC 二进制对称信道信道交叉概率p比特传输时以概率p翻转0↔11−p正确传输。 p越大信道噪声越强误码越多。3.4 完整通信系统链路原始信源符号 → 哈夫曼编码压缩→ 比特流分组 → (7,4) 汉明编码加校验纠错→ BSC 信道加噪声 → 汉明译码纠错 → 比特流拼接 → 哈夫曼译码 → 恢复原始符号 对比实验组去掉汉明编码模块仅哈夫曼编码直传作为无纠错对照组。四、系统整体设计与代码实现import math import random import matplotlib.pyplot as plt import numpy as np plt.rcParams[font.sans-serif] [SimHei] plt.rcParams[axes.unicode_minus] False random.seed(2026) np.random.seed(2026) # 1. 哈夫曼编码模块 class HuffNode: def __init__(self, sym, prob): self.sym sym self.prob prob self.left None self.right None def huffman_encode(src_dict): nodes [HuffNode(s, p) for s, p in src_dict.items()] while len(nodes) 1: nodes.sort(keylambda x: x.prob) n1 nodes.pop(0) n2 nodes.pop(0) new_node HuffNode(None, n1.prob n2.prob) new_node.left n1 new_node.right n2 nodes.append(new_node) code_map {} def traverse(node, code): if node.sym is not None: code_map[node.sym] code return traverse(node.left, code 0) traverse(node.right, code 1) if nodes: traverse(nodes[0], ) # 拼接完整比特流 bit_stream for sym in src_seq: bit_stream code_map[sym] return code_map, bit_stream def huffman_decode(bit_stream, code_map): reverse_map {v: k for k, v in code_map.items()} res [] temp for bit in bit_stream: temp bit if temp in reverse_map: res.append(reverse_map[temp]) temp return res # 2. (7,4)汉明码模块 G np.array([ [1,0,0,0,1,1,0], [0,1,0,0,1,0,1], [0,0,1,0,0,1,1], [0,0,0,1,1,1,1] ]) H np.array([ [1,1,0,1,1,0,0], [1,0,1,1,0,1,0], [0,1,1,1,0,0,1] ]) def hamming_encode(info_bits): info np.array(info_bits, dtypeint) codeword info G % 2 return codeword.tolist() def hamming_decode(receive_code): r np.array(receive_code, dtypeint) S (r H.T) % 2 if np.all(S 0): return r[:4].tolist() # 查找错误列 for col_idx in range(7): if np.array_equal(S, H[:, col_idx]): r[col_idx] ^ 1 break return r[:4].tolist() # 3. BSC信道加噪声 def bsc_channel(bits, p): out [] for b in bits: if random.random() p: out.append(1 - b) else: out.append(b) return out # 4. 全局参数与仿真主函数 # 生成信源 src_dict {A:0.4, B:0.3, C:0.2, D:0.1} src_seq [A,B,A,C,A,B,D,A,C,B] def full_system_simulation(p, use_hammingTrue): # 1.信源编码 code_map, bit_str huffman_encode(src_dict) raw_bits [int(c) for c in bit_str] if not use_hamming: rx_bits bsc_channel(raw_bits, p) rx_bitstr .join([str(x) for x in rx_bits]) decode_sym huffman_decode(rx_bitstr, code_map) match sum(1 for a,b in zip(src_seq, decode_sym)) acc match / len(src_seq) return acc # 带汉明编码流程 encoded_blocks [] idx 0 while idx len(raw_bits)-4: block raw_bits[idx:idx4] encoded_blocks.append(hamming_encode(block)) idx 4 # 信道传输 rx_blocks [] for blk in encoded_blocks: noisy_blk bsc_channel(blk, p) rx_blocks.append(noisy_blk) # 汉明译码 recover_bits [] for blk in rx_blocks: info hamming_decode(blk) recover_bits.extend(info) # 截断对齐原始比特长度 recover_bits recover_bits[:len(raw_bits)] rx_bitstr .join([str(x) for x in recover_bits]) decode_sym huffman_decode(rx_bitstr, code_map) match sum(1 for a,b in zip(src_seq, decode_sym)) acc match / len(src_seq) return acc # 5. 多噪声点仿真绘图 if __name__ __main__: p_list [0, 0.01, 0.02, 0.05, 0.08, 0.1, 0.15, 0.2] acc_hamming [] acc_no_hamming [] for p in p_list: a1 full_system_simulation(p, use_hammingTrue) a2 full_system_simulation(p, use_hammingFalse) acc_hamming.append(a1) acc_no_hamming.append(a2) print(f交叉概率p{p:.2f} | 带汉明正确率:{a1:.3f} | 无汉明正确率:{a2:.3f}) # 绘图 plt.figure(figsize(10,6)) plt.plot(p_list, acc_hamming, markero, linewidth2, label带(7,4)汉明纠错编码) plt.plot(p_list, acc_no_hamming, markers, linewidth2, label仅哈夫曼无信道纠错) plt.xlabel(BSC信道交叉概率 p) plt.ylabel(端到端符号传输正确率) plt.title(不同信道噪声下完整通信系统传输正确率对比) plt.legend() plt.grid(True) plt.show()五、仿真结果输出示例曲线规律直观现象无噪声 p0两种方案正确率均 100%噪声轻微上升无汉明方案正确率断崖下跌加入汉明码后系统容错能力大幅提升同等噪声下正确率显著更高噪声极强p0.15时信道出现 2 位及以上错码汉明码无法纠正正确率同步下滑。六、实验结果深度分析6.1 信源编码与信道编码分工差异哈夫曼信源编码只负责压缩数据、减少传输比特总量无任何抗噪声能力。一旦比特流中任意 1 位出错前缀码译码直接错位后续所有符号全部译码失败因此无纠错模块时信道轻微噪声就会导致系统崩溃。(7,4) 汉明码信道编码通过增加冗余校验比特换取纠错能力能定位并修复单比特错误。代价是码率降低原始 4bit 信息占用 7bit 传输带宽开销上升但极大提升通信可靠性。6.2 噪声强度对系统的影响低噪声区间 (p0.05)大部分错码为单比特汉明码可完全修复传输正确率保持高位高噪声区间 (p0.1)一个 7 比特码字内大概率出现 2 位及以上错误校验子无法区分错误位置纠错失效系统正确率持续下降。6.3 工程权衡仅做信源压缩节省带宽但完全不耐信道噪声仅适用于无损理想信道光纤近距离无干扰传输信源 信道编码串联现代通信标准通用架构压缩减少流量、冗余校验对抗无线噪声在带宽开销与可靠性之间折中汉明码局限仅纠正单错无法应对突发多比特干扰工程中会搭配交织码、卷积码使用。七、实验结论哈夫曼编码可实现信源无损压缩但不具备抗干扰能力单独使用时通信系统鲁棒性极差(7,4) 汉明码通过引入校验冗余可纠正单比特信道错误显著提升 BSC 噪声信道下的传输正确率完整数字通信链路必须同时配置信源编码与信道编码二者各司其职信源编码优化传输效率信道编码保障传输可靠性信道噪声强度越高纠错编码带来的性能增益越明显但噪声超过纠错码容错上限后系统可靠性仍会快速恶化。八、参考文献[1] 傅祖芸。信息论基础第 3 版[M]. 电子工业出版社[2] 樊昌信。通信原理 [M]. 国防工业出版社[3] Cover T M. Elements of Information Theory信息论基础

相关新闻

如何快速掌握JPEXS Free Flash Decompiler:5分钟终极免费Flash反编译指南

如何快速掌握JPEXS Free Flash Decompiler:5分钟终极免费Flash反编译指南

2026/7/15 0:24:06

如何快速掌握JPEXS Free Flash Decompiler:5分钟终极免费Flash反编译指南 【免费下载链接】jpexs-decompiler JPEXS Free Flash Decompiler 项目地址: https://gitcode.com/gh_mirrors/jp/jpexs-decompiler 你是否曾为Flash内容的消失而感到焦虑?…

别再等别人盖章了:成年人最顶级的自由,是自己给自己打分

别再等别人盖章了:成年人最顶级的自由,是自己给自己打分

2026/7/8 17:23:17

高铁穿过一段长长的隧道,车厢里暗了下来。车窗变成了一面模糊的镜子。我盯着镜子里那张略显疲惫的脸看了两秒,然后按熄了手机屏幕。就在刚刚,我还在反复刷新微信,等着下午刚汇报完的客户大老板给个反馈。十分钟没回,我…

基于kvcache的RAG系统

基于kvcache的RAG系统

2026/7/15 8:37:07

本片博客介绍一下最近做的一个实验,基于大模型的kvcache来做数据库的语义化检索。不过实验不成功,因为该方法的目的可以在当前RAG实现的基础上,以一种更简单、成本更低的方法来实现。 项目地址:https://github.com/hhk-png/faq-k…

C++实现AI模型INT4量化:从理论到生产环境的十大关键技术

C++实现AI模型INT4量化:从理论到生产环境的十大关键技术

2026/7/17 23:22:00

1. 项目概述:为什么C是INT4量化落地的“硬核”选择最近在搞一个边缘设备上的AI推理项目,模型是ResNet-50,客户要求推理延迟必须压在10毫秒以内,同时内存占用不能超过50MB。一开始我们用FP32的模型,别说10毫秒了&#x…

Linux C语言系统文件IO编程实战:从标准库到内核调用的深度解析

Linux C语言系统文件IO编程实战:从标准库到内核调用的深度解析

2026/7/17 23:22:00

1. 项目概述:为什么要在Linux下用C语言啃文件IO这块硬骨头? 如果你正在学习C语言,或者已经是一名嵌入式、后台开发的准从业者,那么“系统文件IO”这个主题,你迟早得正面硬刚。尤其是在Linux环境下,这几乎是…

C++创意编程中Cinder与Cairo集成实现矢量图形与3D渲染融合

C++创意编程中Cinder与Cairo集成实现矢量图形与3D渲染融合

2026/7/17 23:22:00

1. 项目概述:当C创意编程遇上专业级图形渲染 如果你是一名C开发者,同时又在创意编程、数据可视化或交互艺术领域深耕,那你一定遇到过这样的困境:想要实现细腻的矢量图形绘制(比如生成可无限放大的Logo、复杂的UI元素或…

基于TensorFlow和PyQt5的物体识别桌面工具:支持CNN与MobileNet双模型、热力图解释及15张实测图

基于TensorFlow和PyQt5的物体识别桌面工具:支持CNN与MobileNet双模型、热力图解释及15张实测图

2026/7/17 23:22:00

本文还有配套的精品资源,点击获取 简介:直接运行就能用的物体分类桌面程序,用TensorFlow 2.3(CPU版)训练好两个模型——轻量级MobileNet和自定义CNN,都已打包为.h5文件(mobilenet_fv.h5、cnn…

C++分布式系统构建:7大关键技术点与高可用架构实战

C++分布式系统构建:7大关键技术点与高可用架构实战

2026/7/17 23:22:00

1. 项目概述:为什么C分布式系统是硬核挑战?聊到分布式系统,很多人第一反应可能是Java生态的Spring Cloud、Go语言的微服务框架,或者是Python的各种异步库。但当你把目光投向对性能、延迟和资源控制有极致要求的领域——比如高频交…

C++实现控制网平差算法:从最小二乘法到工业级应用

C++实现控制网平差算法:从最小二乘法到工业级应用

2026/7/17 23:11:59

1. 项目概述:从测绘到代码的桥梁“控制网平差”这五个字,对于测绘工程、地理信息科学甚至土木工程领域的朋友来说,再熟悉不过了。它几乎是所有高精度测量工作的基石。简单来说,我们通过仪器(如全站仪、GPS接收机&#…

Unity游戏文本翻译架构深度解析:XUnity.AutoTranslator的技术实现与工程实践

Unity游戏文本翻译架构深度解析:XUnity.AutoTranslator的技术实现与工程实践

2026/7/17 10:50:47

Unity游戏文本翻译架构深度解析:XUnity.AutoTranslator的技术实现与工程实践 【免费下载链接】XUnity.AutoTranslator 项目地址: https://gitcode.com/gh_mirrors/xu/XUnity.AutoTranslator XUnity.AutoTranslator作为Unity游戏社区中最成熟的文本翻译解决方…

openEuler Raspberry Pi Kernel设备驱动开发指南:为树莓派硬件添加支持

openEuler Raspberry Pi Kernel设备驱动开发指南:为树莓派硬件添加支持

2026/7/17 17:34:09

openEuler Raspberry Pi Kernel设备驱动开发指南:为树莓派硬件添加支持 【免费下载链接】raspberrypi-kernel It provides openEuler kernel source for Raspberry Pi 项目地址: https://gitcode.com/openeuler/raspberrypi-kernel 前往项目官网免费下载&…

openEuler系统集成测试实战:基于smoke-test套件的环境验证技巧

openEuler系统集成测试实战:基于smoke-test套件的环境验证技巧

2026/7/16 14:18:17

openEuler系统集成测试实战:基于smoke-test套件的环境验证技巧 【免费下载链接】integration-test The repo contains test suits for system integration test 项目地址: https://gitcode.com/openeuler/integration-test 前往项目官网免费下载:…

Cursor终端插件生态避坑指南:23个实测低效插件黑名单,附3个自研轻量替代方案

Cursor终端插件生态避坑指南:23个实测低效插件黑名单,附3个自研轻量替代方案

2026/7/17 0:00:57

更多请点击: https://intelliparadigm.com 第一章:Cursor终端插件生态避坑指南概览 Cursor 作为基于 VS Code 内核构建的 AI 原生编辑器,其终端插件生态虽活跃,但存在兼容性断层、权限策略突变与调试链路断裂等典型风险。开发者常…

ChatGPT写作提示词效率革命:单条提示词响应质量提升3.8倍的关键变量(附可复用提示词矩阵表)

ChatGPT写作提示词效率革命:单条提示词响应质量提升3.8倍的关键变量(附可复用提示词矩阵表)

2026/7/17 0:00:57

更多请点击: https://codechina.net 第一章:ChatGPT写作提示词效率革命:单条提示词响应质量提升3.8倍的关键变量(附可复用提示词矩阵表) 提示词工程已从经验试错迈入变量驱动的科学阶段。实证研究表明,影响…

DeepSeek V4替换Codex底座模型的实践与优化

DeepSeek V4替换Codex底座模型的实践与优化

2026/7/17 0:00:57

1. 为什么选择用DeepSeek V4替换Codex的底座模型去年我在开发一个智能代码补全工具时,发现Codex的默认底座模型在复杂业务逻辑场景下表现不尽如人意。经过多次测试对比,DeepSeek V4在以下几个关键指标上展现出明显优势:代码补全准确率&#x…