🚀 OTFS-SCMA 下行链路仿真平台
完整双层接收机链路复现 · OTFS + SCMA + MMSE + MPA · 中文工程化文档 支持完整 BER 仿真、快速演示、8 张深度可视化图自动生成
📌 为什么选择本仿真平台?
很多 OTFS/SCMA 示例代码存在同类问题:链路不完整、函数耦合重、文档缺失、图像输出散乱。 本项目目标是把"能跑通"升级为"可讲解、可复现、可扩展"的工程级平台。
| 常见痛点 | 本项目解决方案 |
|---|---|
| 🔴 仅有单段算法示例,缺少端到端链路 | ✅ 发送端到接收端全链路闭环:SCMA 编码 →OTFS 调制 → 信道 →MMSE→MPA→BER |
| 🔴 中间变量不可视化,难以验证过程正确性 | ✅demo_advanced_visualization.m 输出 8 张机制图,覆盖信道、因子图、收敛行为 |
| 🔴 参数散落、脚本职责不清晰 | ✅ 三入口脚本职责明确:full、demo、advanced 分层定位 |
| 🔴 码本与因子图关系不透明 | ✅ 从 codebook_J6_K4.mat 自动提取 F,结构与检测器直接对齐 |
| 🔴 难以快速二次开发 | ✅ 核心函数拆分到 functions/,接口清晰,便于替换算法模块 |
🎯 核心价值
🔬 学术研究价值
- 完整实现 OTFS-SCMA 下行链路双层接收机:线性 MMSE + 图推断 MPA
- 可直接用于过载稀疏多址场景中的检测性能研究
- 提供算法文档与代码文档双文档体系,便于论文与工程对照
- 支持迭代次数、SNR 范围、误码统计门限等关键实验控制参数
💼 工程应用价值
- 模块化函数设计,低耦合,便于插拔替换
- 内置结果产物规范化输出(
results/*.png) - 对中间链路有可视化证据,便于回归测试与故障定位
⚡ 技术亮点
🏗️ 完整工程结构
bash
OTFS_SCMA_downlink_refactored/
├── main_otfs_scma_full.m # 完整 BER 蒙特卡洛仿真
├── main_otfs_scma_demo.m # 快速演示仿真
├── demo_advanced_visualization.m # 高级可视化 + 收敛分析
├── data/
│ └── codebook_J6_K4.mat # SCMA 码本
├── functions/
│ ├── otfs_modulation.m # OTFS 调制
│ ├── otfs_demodulation.m # OTFS 解调
│ ├── otfs_channel_gen.m # 多径系数生成
│ ├── otfs_channel_output.m # 信道传播与噪声叠加
│ ├── build_otfs_channel_matrix.m # OTFS 等效信道矩阵
│ ├── otfs_mmse_detect.m # MMSE 均衡
│ ├── extract_indicator_matrix.m # 因子图指示矩阵提取
│ ├── build_scma_channel_matrix.m # SCMA 结构化信道矩阵
│ └── scma_mpa_detect.m # LLR 域 MPA 检测
├── results/ # 图像输出目录
└── docs/
├── 算法文档.md
└── 代码文档.md
🔁 链路级信号流
ini
随机比特
↓
SCMA码字映射(J=6, K=4)
↓
多用户叠加到DD网格
↓
OTFS调制(ISFFT + Heisenberg)
↓
时延-多普勒多径信道 + AWGN
↓
OTFS解调(Wigner + SFFT)
↓
OTFS等效信道矩阵构建 H_rect
↓
MMSE一级均衡
↓
SCMA结构映射 H_eff
↓
MPA二级多用户检测(LLR域迭代)
↓
符号恢复 / BER统计
📐 默认参数(项目基线)
| 参数 | 值 |
|---|---|
| OTFS 网格 | N=8, M=8 |
| SCMA 配置 | J=6, K=4, M_mod=4 |
| 多径模型 | taps=4, delay_taps=0:3, Doppler_taps=0:3 |
| MPA 参数 | n_ite=10, cf=10000 |
| 完整仿真 SNR | 5:5:30 dB |
| 快速仿真 SNR | 5:5:25 dB |
🧠 模块深度解读
1) 入口脚本分层
main_otfs_scma_full.m定位:高置信 BER 曲线生成。 机制:每个 SNR 点采用"错误比特累计到阈值再停止"。 产物:results/ber_curve_full.png。main_otfs_scma_demo.m定位:快速功能验证。 机制:缩小 SNR 范围与错误门限,优先速度。 产物:results/ber_curve_demo.png。demo_advanced_visualization.m定位:可解释性分析。 机制:单帧深度图(图 1~7)+ 小规模多参数 BER 对比(图 8)。 产物:results/fig1~fig8_*.png。
2) 函数职责总览
| 函数 | 主要输入 | 主要输出 | 核心职责 |
|---|---|---|---|
otfs_modulation |
N,M,x(N×M) |
s(MN×1) |
DD→TF→ 时域变换 |
otfs_demodulation |
N,M,r(MN×1) |
y(N×M) |
时域 →TF→DD 逆变换 |
otfs_channel_gen |
N,M,taps |
chan_coef(1×taps) |
瑞利多径系数生成 |
otfs_channel_output |
delay/Doppler/chan_coef/sigma_2/s |
r |
多径传播 +AWGN |
build_otfs_channel_matrix |
delay_taps,Doppler_taps,chan_coef,M,N |
H_rect(MN×MN) |
DD 等效矩阵构建 |
otfs_mmse_detect |
yr,H,sigma_2,N,M |
x_est(N×M) |
一级线性均衡 |
extract_indicator_matrix |
C,J,K |
F(K×J) |
从码本提取因子图 |
build_scma_channel_matrix |
H_rect,F,J,K,M,N |
H_eff |
SCMA 结构化映射 |
scma_mpa_detect |
yr,sigma_2,h_matrix,max_iter,C,K,N,M,cf |
symbol_indices_hat |
LLR 域迭代检测 |
3) 数据与图结构绑定
码本文件 data/codebook_J6_K4.mat 中矩阵 C 是全链路核心静态资源:
- 发送端:索引到码字完成 SCMA 映射
- 中间层:
extract_indicator_matrix自动生成F(K×J) - 接收端:
scma_mpa_detect利用同一码本做组合似然推断
这保证了"发端码本结构"和"收端因子图结构"天然一致。
💻 核心代码展示
🔥 片段 1:OTFS 调制(ISFFT + Heisenberg)
scss
% ISFFT
X = fft(ifft(x).').'/sqrt(M/N);
% Heisenberg
s_mat = ifft(X.')*sqrt(M);
s = s_mat(:);
🚀 片段 2:OTFS 等效信道矩阵索引填充
ini
eff_ele2 = mod(ele2-1 + Doppler_taps(tap_no), N) + 1;
new_chan = add_term * add_term1 * chan_coef(tap_no);
H_rect(N*(eff_ele1-1) + eff_ele2, N*(ele1-1) + ele2) = new_chan;
📡 片段 3:MPA LLR 域核心更新
scss
U_sum(abs(U_sum) >= cf) = cf * sign(U_sum(abs(U_sum) >= cf));
U((k-1)*M_mod + m, pr_j) = log(sum(exp(U_sum)));
...
if check_value < 0.0001
break;
end
🎬 一键运行
shell
% 进入项目根目录后,任选入口执行
% 完整 BER 基线
>> main_otfs_scma_full
% 快速演示(推荐开发阶段先跑)
>> main_otfs_scma_demo
% 深度可视化与迭代收敛分析
>> demo_advanced_visualization
🖼️ 输出产物说明
BER 曲线
results/ber_curve_full.pngresults/ber_curve_demo.png
高级可视化 8 图
fig1_channel_dd_response.png:时延-多普勒信道响应fig2_scma_factor_graph.png:SCMA 因子图和F热力图fig3_multiuser_superposition.png:多用户叠加过程fig4_otfs_modulation_flow.png:OTFS 调制流程fig5_channel_matrix_sparsity.png:H_rect与H_eff稀疏结构fig6_mmse_equalization.png:均衡前后对比fig7_mpa_convergence.png:MPA 收敛曲线fig8_ber_vs_mpa_iterations.png:不同迭代次数 BER 对比










🛒 获取方式
本文代码仅为核心片段,完整版工程已整理好。 关注公众号 【3GPP 仿真实验室】进行获取。