ITPub博客

首页 > 数据库 > Oracle > 【MATLAB源码】OTFS-SCMA:链路仿真平台

【MATLAB源码】OTFS-SCMA:链路仿真平台

原创 Oracle 作者:3GPP仿真实验室 时间:2026-03-01 20:32:46 0 删除 编辑

🚀 OTFS-SCMA 下行链路仿真平台

完整双层接收机链路复现 · OTFS + SCMA + MMSE + MPA · 中文工程化文档 支持完整 BER 仿真、快速演示、8 张深度可视化图自动生成

MATLAB OTFS SCMA Detector Channel

📌 为什么选择本仿真平台?

很多 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)
  • 对中间链路有可视化证据,便于回归测试与故障定位

⚡ 技术亮点

🏗️ 完整工程结构

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

🔁 链路级信号流

随机比特
   ↓
 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)

% ISFFT
 X = fft(ifft(x).').'/sqrt(M/N);
 
 % Heisenberg
 s_mat = ifft(X.')*sqrt(M);
 s = s_mat(:);

🚀 片段 2:OTFS 等效信道矩阵索引填充

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 域核心更新

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

🎬 一键运行

% 进入项目根目录后,任选入口执行
 
 % 完整 BER 基线
 >> main_otfs_scma_full
 
 % 快速演示(推荐开发阶段先跑)
 >> main_otfs_scma_demo
 
 % 深度可视化与迭代收敛分析
 >> demo_advanced_visualization

🖼️ 输出产物说明

BER 曲线

  • results/ber_curve_full.png
  • results/ber_curve_demo.png

高级可视化 8 图

  1. fig1_channel_dd_response.png:时延-多普勒信道响应
  2. fig2_scma_factor_graph.png:SCMA 因子图和 F 热力图
  3. fig3_multiuser_superposition.png:多用户叠加过程
  4. fig4_otfs_modulation_flow.png:OTFS 调制流程
  5. fig5_channel_matrix_sparsity.png: H_rect 与 H_eff 稀疏结构
  6. fig6_mmse_equalization.png:均衡前后对比
  7. fig7_mpa_convergence.png:MPA 收敛曲线
  8. fig8_ber_vs_mpa_iterations.png:不同迭代次数 BER 对比

ber<em>curve</em>demo.png ber<em>curve</em>full.png fig1<em>channel</em>dd<em>response.png fig2</em>scma<em>factor</em>graph.png fig3<em>multiuser</em>superposition.png fig4<em>otfs</em>modulation<em>flow.png fig5</em>channel<em>matrix</em>sparsity.png fig6<em>mmse</em>equalization.png fig7<em>mpa</em>convergence.png fig8<em>ber</em>vs<em>mpa</em>iterations.png

🛒 获取方式

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

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70049237/viewspace-3111332/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2026-01-08

  • 博文量
    55
  • 访问量
    48655