Skip to content

ChuyaoFu/DCCM-PROJECT

Repository files navigation

Level 1+2 实现与框架说明

目录结构

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

Level 1 功能对应

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。

Level 2 功能对应

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 通过多线程模拟同时发送,信道串行化队列防冲突。

Level 3 功能对应

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 里提供不同媒介模型。

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages