【MATLAB源码】OFDM/OTFS-IM:高机动全链路对比仿真平台

3 阅读3分钟

🚄 高机动 OTFS/OFDM/IM 全链路对比仿真平台

时延-多普勒信道深度建模 · 三场景统一评测 · 工程级可复现实验框架覆盖 OTFS vs OFDM、OTFS vs OTFS-IM、OTFS-IM vs OFDM-IM

🔍 为什么这个项目值得用?

高机动场景(高速铁路、车联网、低空高速平台)下,传统 OFDM 会遭遇明显 ICI(子载波间干扰)与信道快速时变问题。多数公开代码常见以下痛点:公式和实现脱节、场景脚本重复、参数口径不统一、结果不可复现。

本项目提供的是一个 可复现、可扩展、可对比 的统一仿真底座。

常见痛点(碎片化脚本)本项目对应方案
🔴 同一功能散落在多个脚本,复用困难✅ 分层架构:run_case/core/channel/im/modulation/utils
🔴 OTFS 与 OFDM 口径不一致,比较不公平✅ 统一 cfg 参数契约与 SNR/帧数/归一化 口径
🔴 IM 索引映射容易越界或不闭环make_index_lut + build_im_grid + detect_im_bits 完整闭环
🔴 结果文件易覆盖,图像保存混乱✅ 自动创建时间戳目录,统一保存 png/fig/mat
🔴 只能跑单场景,难做横向评估✅ 三场景并行:OTFS/OFDM 与 IM 组合一键跑通

🎯 核心价值

📘 学术研究价值

  • 统一比较框架:同一工程下完成 3 类关键基线对比,不再跨工程拼接数据。
  • 高机动信道建模完整:支持多种 TDL/EPA/EVA/ETU 参数,含时延与多普勒离散化。
  • 可直接写论文实验章:BER 曲线、参数表、流程日志、总览图一次性输出。
  • 算法扩展友好:可在 core/im/ 直接插入新均衡器/新检测器。

🏭 工程实现价值

  • 解耦清晰:场景编排与底层算法模块分离,降低维护成本。
  • 结构体契约稳定cfg/runtime/idxInfo/results 语义清晰,便于团队协作。
  • 自动化结果管理:按时间戳归档每轮实验,支持回溯与复验。
  • 质量基线完整:支持 checkcode 静态检查与 quick/full 双档运行。

⚙️ 技术亮点

🧱 模块化架构(重构后)

matlab/
 ├── run_demo_quick.m                  # 快速演示(一键联动三场景)
 ├── run_demo_full.m                   # 完整评测(细SNR网格)
 ├── run_case_otfs_vs_ofdm.m           # 场景1
 ├── run_case_otfs_vs_otfs_im.m        # 场景2
 ├── run_case_otfs_im_vs_ofdm_im.m     # 场景3
 │
 ├── core/                             # 调制解调与均衡核心
 │   ├── otfs_modulate.m / otfs_demodulate.m
 │   ├── ofdm_modulate.m / ofdm_demodulate.m
 │   ├── equalize_otfs.m / equalize_ofdm.m
 │
 ├── channel/                          # 信道与等效矩阵
 │   ├── get_channel_params.m
 │   ├── prepare_channel_runtime.m
 │   ├── build_channel_matrix_G.m
 │   ├── apply_doppler_channel.m
 │   └── apply_frequency_offset.m
 │
 ├── im/                               # 索引调制
 │   ├── make_index_lut.m
 │   ├── make_symbol_combos.m
 │   ├── build_im_grid.m
 │   └── detect_im_bits.m
 │
 ├── modulation/                       # 星座与比特映射
 │   ├── build_constellation.m
 │   ├── mod_bits_to_syms.m
 │   └── demod_syms_to_bits.m
 │
 └── utils/                            # 配置、绘图、保存、辅助
     ├── default_config.m
     ├── prepare_output_dir.m
     ├── save_figure_auto.m
     ├── plot_summary_dashboard.m
     ├── normalize_eq_type.m
     └── bits_from_integers.m

📊 性能实测(Full 模式)

实验配置基线:

  • M=32, N=32
  • Mod_type=QAM, Mod_OTFS=4, Mod_IM=4
  • propModel=TDL-C, maxSpeed=350 km/h, fc=5 GHz
  • eqType=LMMSE
  • SNR = 0:3:30 dB

场景 A:OTFS vs OFDM

SNR(dB)OTFS BEROFDM BER
02.600e-013.358e-01
61.393e-011.991e-01
123.083e-021.034e-01
187.813e-046.590e-02
240.000e+005.615e-02
300.000e+005.329e-02

场景 B:OTFS vs OTFS-IM

SNR(dB)OTFS BEROTFS-IM BER
02.645e-013.048e-01
61.385e-011.541e-01
123.286e-021.812e-02
187.487e-042.170e-05
240.000e+000.000e+00
300.000e+000.000e+00

场景 C:OTFS-IM vs OFDM-IM

SNR(dB)OTFS-IM BEROFDM-IM BER
03.054e-013.541e-01
61.484e-012.151e-01
121.808e-029.473e-02
182.387e-045.417e-02
240.000e+004.299e-02
300.000e+004.034e-02

结论要点:高 SNR 区域 OTFS/OTFS-IM 收敛明显快于 OFDM/OFDM-IM,且误码地板显著更低。

💻 核心代码展示

🔥 信道运行时统一构建(prepare_channel_runtime.m

BW = cfg.M * cfg.df;
 one_delay_tap = 1 / BW;
 [delays, dopplers, pdp] = get_channel_params(cfg.maxSpeed_kmh, cfg.fc, cfg.propModel);chanParams.pathDelays = round(delays ./ one_delay_tap);
 padLen = max(chanParams.pathDelays);T = (cfg.M + padLen) / BW;
 one_doppler_tap = 1 / (cfg.N * T);
 chanParams.pathDopplers = round(dopplers / one_doppler_tap);
 chanParams.pathDopplerFreqs = chanParams.pathDopplers * one_doppler_tap;G = build_channel_matrix_G(cfg.M, cfg.N, chanParams, padLen, cfg.padType);
 GtG = G' * G;

🚀 IM 约束搜索检测(detect_im_bits.m

for pIdx = 1:size(posComb, 1)
     activePos = posComb(pIdx, :);
     estSymIdx0 = zeros(1, k);
     for ii = 1:k
         r = rxGroup(activePos(ii));
         [~, minIdx] = min(abs(r - const).^2);
         estSymIdx0(ii) = minIdx - 1;
     end
 ​
     xCand = zeros(n, 1);
     xCand(activePos) = const(estSymIdx0 + 1).';
     metric = sum(abs(rxGroup - xCand).^2);
     if metric < bestMetric
         bestMetric = metric;
         bestPosIdx = pIdx;
         bestSymIdx0 = estSymIdx0;
     end
 end

🎬 一键运行

cd matlab
 ​
 % 快速演示(小帧数,便于调试)
 run_demo_quick
 ​
 % 完整演示(细SNR网格,正式评测)
 run_demo_full

🖼️ 结果预览(本地输出)

00_summary_dashboard.png01_otfs_vs_ofdm.png![02_otfs_vs_otfs_im.png](openwrite.cn/uploads/202…