【MATLAB源码】OTFS-SCMA:链路仿真平台
🚀 OTFS-SCMA 下行链路仿真平台
完整双层接收机链路复现 · OTFS + SCMA + MMSE + MPA · 中文工程化文档支持完整 BER 仿真、快速演示、8 张深度可视化图自动生成
📌 为什么选择本仿真平台?
很多 OTFS/SCMA 示例代码存在同类问题:链路不完整、函数耦合重、文档缺失、图像输出散乱。 本项目目标是把“能跑通”升级为“可讲解、可复现、可扩展”的工程级平台。
|
|
|
|---|---|
|
|
|
|
|
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统计
📐 默认参数(项目基线)
|
|
|
|---|---|
|
|
N=8, M=8 |
|
|
J=6, K=4, M_mod=4 |
|
|
taps=4, delay_taps=0:3, Doppler_taps=0:3 |
|
|
n_ite=10, cf=10000 |
|
|
5:5:30 dB |
|
|
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) |
|
otfs_demodulation |
N,M,r(MN×1) |
y(N×M) |
|
otfs_channel_gen |
N,M,taps |
chan_coef(1×taps) |
|
otfs_channel_output |
delay/Doppler/chan_coef/sigma_2/s |
r |
|
build_otfs_channel_matrix |
delay_taps,Doppler_taps,chan_coef,M,N |
H_rect(MN×MN) |
|
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_mpa_detect |
yr,sigma_2,h_matrix,max_iter,C,K,N,M,cf |
symbol_indices_hat |
|
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.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 对比










夜雨聆风
