🚀 Deep Learning for the Physical Layer
基于 PyTorch 的端到端通信系统与自动调制识别研究平台重构物理层:从 Autoencoder 联合优化到 CNN 信号感知


📌 为什么选择本平台?
传统通信系统遵循 "信源编码 信道编码 调制" 的分块设计原则,虽然各模块均可独立优化,但难以达到端到端的全局最优。此外,传统自动调制识别 (AMR) 依赖专家人工提取特征 (Cumulants, Moments),在复杂信道下鲁棒性较差。
本平台基于 O'Shea & Hoydis (IEEE TCCN 2017) 的开创性工作,利用深度学习重塑物理层信号处理:
| |
|---|
分块优化 → 局部最优信源编码、信道编码、调制各模块独立设计,无法实现全局最优 | 端到端联合优化Autoencoder 将 Tx/Rx 视为整体神经网络,梯度回传打破模块壁垒 |
依赖理想信道假设传统算法针对 AWGN 设计,面对非线性失真时性能急剧下降 | 数据驱动信道适应神经网络通过训练自动学习信道特性,无需显式建模 |
调制识别依赖人工特征Cumulants、Moments 等专家特征在低 SNR 下鲁棒性差 | CNN 自动特征提取直接从 I/Q 采样点学习深层表征,抗噪能力强 |
高阶 QAM 识别困难Qpsk/16QAM 星座形状相似,传统分类器易混淆 | 双流架构融合时域卷积 + 统计特征 (Kurtosis),10dB 下准确率 ~100% |
🎯 核心价值
🔬 学术研究价值- 几何星座成形 (Geometric Shaping):可视化 Autoencoder 如何在高斯信道下自发学习到类似 APSK 的同心圆星座分布。
- 可解释性研究:对比神经网络学习到的编码策略与传统线性分组码 (Hamming) 的差异。
- 特征工程融合:展示了如何将传统信号统计量 (Kurtosis) 融入深度网络以提升 QAM 识别率。
| 💼 工程应用价值- 在线数据生成 (On-the-fly):实现无限数据流生成器,极大降低内存占用并杜绝过拟合。
- 高鲁棒性识别:在 -4dB 到 18dB 宽信噪比范围内训练,模型具备极强的环境适应性。
- 模块化设计:发射机、接收机、信道层完全解耦,易于替换为 Rayleigh 或 Rician 信道。
- 完整评估体系:集成 BLER 曲线绘制、混淆矩阵分析、星座图可视化等全套工具。
|
⚡ 技术亮点
🧠 1. Autoencoder 通信系统 (M=16, n=7)
将通信过程建模为去噪自动编码器,通过归一化层满足物理层功率约束:
Input (s) Transmitter (Encoder) Channel (Noise) Receiver (Decoder)[One-hot] ──> [Dense -> Norm(Energy=1)] ──> [y = x + z] ──> [Dense -> Softmax] ──> Output M 2n 2n M
- 编码增益:在 配置下,Autoencoder 相比传统 Hamming(7,4)+硬判决译码,获得约 1-2 dB 的性能增益。
- 星座学习:自适应学习出旋转且能量分布最优的星座图结构。
👁️ 2. 增强型调制识别 CNN
针对 16QAM 与 64QAM 容易混淆的难题,设计了 双流 (Dual-Stream) 架构:
┌──> [Conv1d Block] ──> [ResBlock] ──> [GlobalPool] ──┐Input (2, 128) ─┤ cat ──> [FC] ──> Type └──> [Statistical Feature Extraction (Kurtosis...)] ──┘
📊 性能指标 (实测数据)
📉 误块率 (BLER) 对比
(Autoencoder (7,4) vs Hamming (7,4) + BPSK)
| | | |
|---|
| 0.0 | | | |
| 4.0 | | | |
| 6.0 | | 0.0022 | AE 逼近传统编码 |
| Gain | | | 非线性编码增益显现 |
🎯 调制识别准确率 (混合 SNR)
🖥️ 运行环境
💻 核心代码展示
🔥 若要复现 Autoencoder 训练
from models.autoencoder import AutoEncoder# 初始化模型:16种消息,7次信道使用 (Rate = 4/7)model = AutoEncoder(M=16, n_channel=7, training_ebno_db=7.0)# 定义物理层功率约束# 核心代码位于 models/autoencoder.py -> Encoder._normalize# x = sqrt(n) * x / ||x||_2
🚀 若要进行调制识别预测
# predict_demo.pyfrom models.modulation_cnn import EnhancedModulationCNN# 加载双流 CNN 模型net = EnhancedModulationCNN(num_classes=4)net.load_state_dict(torch.load('best_modulation_cnn.pth'))# 输入 I/Q 信号 (Batch, 2, 128)prediction = net(iq_samples)print(f"Predicted Modulation: {['BPSK', 'QPSK', '8PSK', '16QAM'][prediction]}")
🎬 快速开始
1️⃣ 安装依赖
pip install -r requirements.txt
2️⃣ 运行全自动测试
我们提供了一键测试脚本,自动训练模型并绘制所有图表:
python visualize/run_scenarios.py
输出将保存在根目录下,包含 bler_curve.png, constellation.png, confusion_matrix.png 等。
📂 项目结构
Deep-Learning-Physical-Layer/├── docs/ # 📚 完整文档│ ├── 算法文档.md # 理论推导与数学模型│ └── 代码文档.md # API 详解与实现细节│├── models/ # 🧠 深度模型│ ├── autoencoder.py # Autoencoder (Encoder/Decoder)│ └── modulation_cnn.py # Enhanced ResNet CNN│├── train/ # 🎓 训练脚本│ ├── train_autoencoder.py # 联合优化训练│ └── train_modulation.py # 分类器训练│├── evaluate/ # � 评估与测试│ └── eval_bler.py # BLER 曲线仿真│└── utils/ # 🔧 工具链 ├── channel.py # AWGN 信道与噪声生成的数学实现 └── modulation.py # 传统 BPSK/QAM 基线实现
📄 文档体系
本项目提供 理论与实践并重 的双文档系统:
📘 算法文档
包含系统模型 的端到端建模、交叉熵损失函数的物理层解释、以及 CNN 统计特征流的数学定义。
📕 代码文档
面向开发者的 API 参考手册,详细说明了如何使用 On-the-fly 数据生成器以及如何扩展新的信道模型。