完整数字通信链路仿真(哈夫曼 +(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信息论基础

相关新闻

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

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

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

2026/7/7 3:04:27 阅读更多 →
珍惜作为“牛马”的最后光阴?优必选,抛出了一个公关“核弹”

珍惜作为“牛马”的最后光阴?优必选,抛出了一个公关“核弹”

作者:Evin编辑:刘致呈审核:徐徐出品:互联网江湖这两年,机器人行业发展的非常快。从上春晚秀“舞技”,到跑马拉松破人类记录,再到进入电力、矿山等高危场景完成巡检等任务,机器人的价…

2026/7/7 3:02:26 阅读更多 →
AI视频生成技术在游戏特效制作中的应用实践

AI视频生成技术在游戏特效制作中的应用实践

🚀 30款热门AI模型一站整合,DeepSeek/GLM/Qwen 随心用,限时 5 折。 👉 点击领海量免费额度 这次我们来看一个基于AI视频生成技术的"恐惧魔王 吞噬魔法"特效测试项目。这个项目展示了如何利用AI技术实现游戏角色特效的…

2026/7/7 2:40:13 阅读更多 →

最新新闻

企业微信可信域名配置 2024:3种后端服务校验方案与80端口避坑指南

企业微信可信域名配置 2024:3种后端服务校验方案与80端口避坑指南

企业微信可信域名配置2024:三端技术方案与实战避坑全解析当企业微信成为越来越多组织的协同办公中枢,自建应用的可信域名配置就成了开发者绕不开的"必修课"。不同于简单的文件上传验证,2024年的企业微信生态对域名校验提出了更严格…

2026/7/7 3:57:36 阅读更多 →
Docker镜像传播延迟介绍(Propagation Delay)(GitHub Container Registry - GHCR)manifest、镜像同步、节点同步、最终一致性

Docker镜像传播延迟介绍(Propagation Delay)(GitHub Container Registry - GHCR)manifest、镜像同步、节点同步、最终一致性

在 set -euo pipefail 下,命令替换内 docker buildx imagetools inspect 失败会直接终止脚本,设计好的诊断信息永远不会打印(在 CD 刚变绿、GHCR manifest 尚未传播完成时实际触发过一次静默失败)。给命令替换加 || true 使空 dig…

2026/7/7 3:53:36 阅读更多 →
PgBouncer 的 session 模式详解

PgBouncer 的 session 模式详解

1. 什么是 PgBouncer? PgBouncer 是一个轻量级的 PostgreSQL 连接池工具,主要用于管理和复用数据库连接,减少频繁建立和断开连接的开销,从而提升数据库性能和并发处理能力。 2. PgBouncer 的三种连接池模式 PgBouncer 支持三种主要的连接池模式,每种模式对应不同的会话…

2026/7/7 3:51:36 阅读更多 →
Linux内存Overcommit机制:三种策略、OOM Killer算法与cgroup限制行为的工程化分析

Linux内存Overcommit机制:三种策略、OOM Killer算法与cgroup限制行为的工程化分析

Linux内存Overcommit机制:三种策略、OOM Killer算法与cgroup限制行为的工程化分析 一、为什么Linux允许超额分配内存 物理内存是有限资源,但进程的内存请求远大于实际使用量。典型场景:进程malloc了1GB但只写了100MB,剩余900MB从未…

2026/7/7 3:49:35 阅读更多 →
移动端SoC选购避坑:3个关键参数(CPU/GPU/制程)解读与2024年芯片性能天梯图

移动端SoC选购避坑:3个关键参数(CPU/GPU/制程)解读与2024年芯片性能天梯图

移动端SoC选购避坑:3个关键参数(CPU/GPU/制程)解读与2024年芯片性能天梯图当你在手机卖场被各种"旗舰芯片""性能怪兽"的宣传语包围时,是否真正清楚这些参数背后的含义?本文将带你穿透营销迷雾&…

2026/7/7 3:49:35 阅读更多 →
小程序域名如何进行安全防护?一篇讲透

小程序域名如何进行安全防护?一篇讲透

随着小程序生态的快速发展,越来越多的企业将核心业务迁移到小程序上。然而,小程序同样面临着Web应用常见的各类安全威胁——SQL注入、XSS攻击、恶意爬虫、CC攻击、DDoS攻击等。那么,小程序的域名应该如何进行安全防护呢?本文将为你…

2026/7/7 3:47:35 阅读更多 →

日新闻

鸿蒙新特性:图片画廊与轮播导航——构建沉浸式图片浏览体验

鸿蒙新特性:图片画廊与轮播导航——构建沉浸式图片浏览体验

图片浏览是移动应用中最高频的场景之一。从社交应用的照片流到电商平台的商品图集,从旅游应用的景点相册到摄影作品展示——用户对图片浏览的体验要求不断提高:流畅的切换动画、直观的缩略图导航、便捷的收藏操作、自动播放模式。HarmonyOS NEXT ArkUI 虽…

2026/7/7 0:05:16 阅读更多 →
24V DC-DC降压芯片PW2312B/PW2815,SOT23-6到SOP8-EP方案对比

24V DC-DC降压芯片PW2312B/PW2815,SOT23-6到SOP8-EP方案对比

24V稳压芯片完整选型指南 PW8600 PW75XX PW2815 PW2312B LDODC/DC全方案 一、24V稳压方案概述 24V直流电源在工业自动化、门禁系统、电梯控制、汽车电子、LED驱动、监控设备等场景中应用极广,是最常见的中压直流母线电压。要将24V母线稳定降压至下游MCU、传感器…

2026/7/7 0:05:16 阅读更多 →
RAG+知识图谱混合检索与Graph RAG核心对比

RAG+知识图谱混合检索与Graph RAG核心对比

做企业RAG落地的团队,往往容易卡在一容易踩坑的选型难题: 当需求单纯靠向量RAG搞不定、单纯靠知识图谱也搞不定,必须同时依赖「文本语义理解 实体关系推理」时,到底是做「向量图谱混合检索」就够了,还是必须上「Grap…

2026/7/7 0:07:19 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/6 8:11:50 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/6 8:11:52 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/6 6:52:56 阅读更多 →

月新闻