communication/
├── __init__.py # 导出公共接口
├── constants.py # 全局参数(采样、前导码、地址宽度等)
├── encoding.py # 字符串/字节/比特互转与 8 位校验
├── frame.py # 帧结构:前导码、源/目的地址、长度、校验
├── modem.py # NRZ 调制/解调
├── medium.py # 基于 Cable 的共享信道,实现转发与排队
├── host.py # 主机实体:封装收发流程、诊断信息
├── protocol.py # 应用层协议定义(Level 3)
├── application.py # 应用层客户端和服务器(Level 3)
├── wireless.py # 无线信道模型:WirelessChannel、MIMOChannel(Level 3)
└── wireless_medium.py # 无线媒介:WirelessMedium、MIMOMedium(Level 3)
cable.py # 课程提供的物理信道模拟
README.md # 原始需求 + Level1/2 实现说明
README_LEVEL3.md # Level 3 扩展指南
README_IMPLEMENTATION.md # 本文件
requirements.txt # 依赖(numpy、matplotlib)
tests/
├── level1_demo.py # Level 1 评分点 Demo
├── level2_demo.py # Level 2 评分点 Demo
├── level3_demo.py # Level 3 传输层+信道编码 Demo
├── level3_application_demo.py # Level 3 应用层协议 Demo
├── level3_modulation_performance.py # Level 3 多调制方案性能对比 Demo
└── level3_wireless_demo.py # Level 3 无线通信 Demo
| Requirement |
实现位置 |
说明 |
| 数据→比特流 |
communication/encoding.py:string_to_bits |
UTF-8 字符串转比特,供帧封装。 |
| 比特流→数据 |
communication/encoding.py:bits_to_string |
接收端重建字符串。 |
| 调制 |
communication/modem.py:NRZModem.modulate |
NRZ,1/0 分别映射为高/低电平,固定采样点。 |
| Cable 传输 |
communication/medium.py:SharedMedium.transmit |
所有发送都进入共享信道,经 Cable.transmit 传播。 |
| 解调 |
communication/modem.py:NRZModem.demodulate |
基于采样均值与门限还原比特。 |
| 错误检测 |
communication/frame.py + communication/encoding.py |
帧体附带 CRC-16;失败时 Host 记录诊断/NACK。 |
| Requirement |
实现位置 |
说明 |
| 主机区分 |
communication/frame.py:Frame.to_bits / Host.address |
帧头包含源/目的地址;Host.accepts 筛选。 |
| 寻址/路由 |
communication/medium.py:SharedMedium.register_host |
信道维护地址→Host 映射,广播给所有主机,由各自过滤。 |
| 转发/共享信道 |
communication/medium.py |
FIFO 队列 + 锁,保证多主机顺序发送;可插入干扰钩子。 |
| 同时传输处理 |
tests/level2_demo.py:demo_simultaneous_transmissions |
通过多线程模拟同时发送,信道串行化队列防冲突。 |
| Requirement |
实现位置 |
说明 |
| 可靠传输 (ACK/NACK) |
Host.send_text(reliable=True) / Host.send_text_reliable |
Stop-and-Wait ARQ,自动 ACK、NACK 与重传。 |
| 序列号与流控 |
Frame.seq / Host._expected_sequence |
8 位循环序列号 + 广告窗口,防止接收端溢出。 |
| Hamming 纠错 |
encoding.hamming_encode/decode |
Payload 统一做 Hamming(7,4) 编码,可修正单比特错误。 |
| CRC 检测 |
encoding.compute_crc_bits |
CRC-16-CCITT,检测大部分突发错误并触发 NACK。 |
| 应用层协议 |
protocol.py + application.py |
键值存储协议,支持 GET/PUT/DELETE/LIST,请求-响应模式。 |
| 多调制方案 |
modem.py: NRZ/ASK/FSK/PSK |
四种调制方案实现与性能对比。 |
| 无线通信 |
wireless.py + wireless_medium.py |
无线信道、MIMO、波束成形、信道容量计算。 |
| Demo |
tests/level3_*.py |
传输层、信道编码、应用层、性能对比、无线通信测试。 |
Host.send_text()/send_text_reliable()
└─ encoding.string_to_bits()
└─ Frame.to_bits() -> 附加地址/序号/窗口,payload 做 Hamming 编码,末尾附 CRC
└─ NRZModem.modulate()
└─ SharedMedium.transmit() -> Cable.transmit()
└─ Host._receive_analog()
└─ NRZModem.demodulate()
└─ Frame.from_bits() -> Hamming 解码 + CRC 检测 + ACK/NACK
└─ encoding.bits_to_string()
在仓库根目录运行:
python tests/level1_demo.py # 简单字符串、长消息、错误检测
python tests/level2_demo.py # 主机区分、正确路由、同时发送
python tests/level3_demo.py # 可靠传输、Hamming 纠错、CRC 拦截
python tests/level3_application_demo.py # 应用层协议:GET/PUT/DELETE/LIST
python tests/level3_modulation_performance.py # 多调制方案性能对比
python tests/level3_wireless_demo.py # 无线通信:信道模型、MIMO、波束成形
脚本输出格式为 [LevelX-项目] PASS/FAIL - 详情,与 README 中的评分点一一对应。若在某些沙箱环境中 Python 运行不稳定,可在命令前加入 python -X faulthandler 获取崩溃回溯。
Host.fetch_diagnostics():返回最近一次解析失败/纠错的原因。
Host.send_text_reliable():直接进入可靠模式,包含 ACK/NACK、超时与流控。
SharedMedium.set_interference_hook(func):可注入自定义噪声/干扰函数,用于测试错误检测或 Level 3 的纠错策略。
Cable 参数:通过 SharedMedium(cable=Cable(...)) 调整长度、衰减、噪声,观察系统鲁棒性。
communication/constants.py:集中定义采样点、高低电平、阈值等,可方便地对调制方案进行全局调整。
- 传输层:当前 Stop-and-Wait 可扩展为 Go-Back-N/Selective Repeat、拥塞控制等。
- 信道编码:Hamming+CRC 架构可进一步替换为 Reed-Solomon、LDPC 等更强方案。
- 应用层协议:在
Host 外封装更高层 API,解析 payload 里的自定义协议字段。
- 多调制/无线:在
modem.py 新增类;medium.py 里提供不同媒介模型。