📡 PyTorch 3GPP NR OFDM 教学仿真平台
PyTorch 深度学习与无线通信的完美融合 · 3GPP 标准逐行复现从 Tensor 基础到 Autograd 信道估计 · 探索 AI for Science 的通信基石




📌 为什么通过本项目学习 PyTorch?
对着 PyTorch 文档 里的 backward() 发愁?只知道调库 import torch.nn 却不懂底层微分原理?想做 AI 通信 (AI-RAN) 却发现传统 MATLAB 仿真无法平滑迁移?
本平台提供了一套 教科书级 的 PyTorch 通信仿真教程,将抽象的张量操作映射到具象的物理层信号处理。
| |
|---|
| 🔴 张量操作抽象 (dim, broadcast) | ✅ 通信场景化:用 [Batch, Ant, Subcarrier] 解释维度,秒懂广播机制 |
| ✅ 物理意义解构:用“信道估计”演示梯度下降,backward 就是求导 |
| ✅ 3GPP 标准复现:用 PyTorch Tensor 重写 TS 38.211,对标 MATLAB 写法 |
| ✅ 标准 OFDM 流程:完美处理 fftshift、CP、子载波映射,符合 5G 标准 |
🎯 核心价值
🔬 学术研究价值 (AI for Comm)- 可微分通信:全链路 Tensor 实现,支持端到端反向传播
- 梯度下降信道估计:深入理解 MSE Loss 与 SGD 在物理层的作用
- 高性能仿真:利用 GPU 加速大规模并行 OFDM 仿真
- 3GPP 对标:严格遵循 TS 38.211 Numerology 定义
| 💼 工程应用价值 (5G NR)- 模块解耦:Numerology / Modulator / Channel 均模块化设计
- 工业级实现:支持 BPSK 到 1024QAM 全阶调制
- 代码规范:类型提示 (Type Hint) + 详细中文注释
|
⚡ 技术亮点
🏗️ 课程阶段架构 (Staged Arch)
src/├── 【阶段一:Tensor 与基础信号处理】│ ├── tensor_basics.py # 张量基础:广播、视图、复数操作│ ├── modulation.py # 3GPP 调制:BPSK/QPSK/16QAM...1024QAM (Gray Mapping)│ ├── nr_ofdm.py # [TS 38.211] NRNumerology & NROFDMModulator│ └── nr_ofdm_system.py # E2E 系统:BER 仿真链路│├── 【阶段二:Autograd 与信道估计】│ └── channel_estimation.py # 🔥 自动求导核心演示:基于梯度的信道估计│├── 【通用模块】│ └── channel.py # AWGN 信道模型│ └── 【演示与可视化】 ├── examples/ │ ├── demo_nr_ofdm_ber.py # 阶段一:OFDM 星座图与 BER 曲线 │ └── src/channel_estimation.py ... (直接运行模块)
📊 性能实测
阶段一:OFDM BER (3GPP Compliance)
阶段二:自动求导信道估计 (h_true = 0.8 + 0.6j)
💻 核心代码展示
🔥 3GPP OFDM 调制 (src/nr_ofdm.py)
def modulate(self, freq_grid: torch.Tensor, symbol_idx: int = 0) -> torch.Tensor: """ 频域 → 时域 (IFFT + CP) [TS 38.211] """ # 1. IFFT (PyTorch 原生 FFT 支持) # 输入为标准 FFT 格式 (DC at index 0) time_signal = torch.fft.ifft(freq_grid) # 2. 添加 Cyclic Prefix (CP) cp_length = self.numerology.get_cp_samples(self.n_fft, symbol_idx) time_signal_with_cp = torch.cat([time_signal[-cp_length:], time_signal]) return time_signal_with_cp
🚀 自动求导信道估计 (src/channel_estimation.py)
# 核心逻辑:利用 backward() 自动计算 ∂Loss/∂hh_hat.requires_grad = True # 告诉 PyTorch 追踪梯度for i in range(n_iterations): y_pred = h_hat * x # 前向传播 (Forward) loss = torch.mean(torch.abs(y - y_pred) ** 2) # 计算 MSE loss.backward() # 反向传播 (Backward) -> 自动计算 h_hat.grad with torch.no_grad(): # 参数更新 h_hat -= lr * h_hat.grad h_hat.grad.zero_() # 梯度清零
🎬 一键运行
# 安装依赖pip install -r requirements.txt# --- 阶段一:OFDM 系统演示 ---# 生成标准星座图、频谱图、BER 曲线python examples/demo_nr_ofdm_ber.py# --- 阶段二:Autograd 信道估计 ---# 演示梯度下降在通信中的应用python src/channel_estimation.py
输出预览
============================================================Stage 2: Autograd Channel Estimation Demo============================================================True channel h = (0.8000+0.6000j)--- SGD Optimizer ---Iter 10: Loss=0.021901, h_hat=0.7299+0.5556jIter 50: Loss=0.010527, h_hat=0.8026+0.6003jFinal h_hat = 0.8026+0.6003j, Error = 0.0026