完整双层接收机链路复现 · 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/,接口清晰,便于替换算法模块 |
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 |
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。| 函数 | 主要输入 | 主要输出 | 核心职责 |
| --------------------------------- | ----------------------------------------------- | -------------------------- | ---------------------- |
|
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 域迭代检测 |
码本文件
data/codebook_J6_K4.mat 中矩阵
C 是全链路核心静态资源:
extract_indicator_matrix 自动生成
F(K×J)scma_mpa_detect 利用同一码本做组合似然推断这保证了“发端码本结构”和“收端因子图结构”天然一致。
% ISFFT X = fft(ifft(x).').'/sqrt(M/N); % Heisenberg s_mat = ifft(X.')*sqrt(M); s = s_mat(:);
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;
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
results/ber_curve_full.pngresults/ber_curve_demo.pngfig1_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 仿真实验室】进行获取。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70049237/viewspace-3111332/ ,如需转载,请注明出处,否则将追究法律责任。