【MATLAB源码】OTFS/OCDM/AFDM:高机动 NTN 均衡对比仿真平台
统一信道建模 · 三体制公平对比 · 双检测器性能评估 支持 OTFS / OCDM / AFDM 一键仿真,输出 BER 曲线与结构化结果文件 高机动场景下(高速终端、卫星链路)时延-多普勒扩散显著,传统单波形脚本很难回答“到底哪种体制在当前参数下更稳”。常见问题包括: 数据来源: 当前输出目录: 典型结果文件: 图像示例: 依赖函数: 本文代码仅为核心片段,完整版工程已整理好。 关注公众号 【3GPP 仿真实验室】进行获取。🚀 OTFS/OCDM/AFDM 高机动 NTN 对比仿真平台

📌 为什么需要这个项目?
常见痛点(零散脚本) 本项目解决方式 🔴 参数不统一,体制对比不公平 ✅ 统一 K/L/M/SNR/NTN 参数链,三体制同口径🔴 信道模型拆散在多处,难验证正确性 ✅ 通用 NTN_channels+ 兼容封装 NTN_channels1/2🔴 只有一种检测器,无法比较检测增益 ✅ 同时支持 LMMSE 与 MMSE-SD🔴 输出文件命名混乱、结果难复现 ✅ 固定文件名输出,单目录清晰落盘 🔴 演示与正式仿真混在一起 ✅ demo 与 full 双模式分离,场景明确🎯 核心价值
🔬 研究价值
💼 工程价值
⚡ 技术亮点
🏗️ 完整工程架构
OTFS-OCDM-AFDM/
├── run_unified_comparison.m # 正式仿真入口(full)
├── demo_waveform_showcase.m # 演示入口(demo)
├── src/
│ ├── default_params.m # 参数工厂:full/demo 模式
│ ├── prepare_output_dir.m # 输出目录准备 + 旧结果清理
│ ├── run_ocdm_simulation.m # OCDM 仿真主循环
│ ├── run_afdm_simulation.m # AFDM 仿真主循环
│ ├── run_otfs_simulation.m # OTFS 仿真主循环
│ ├── NTN_channels.m # 通用 NTN 信道矩阵构造
│ ├── NTN_channels1.m # AFDM 兼容信道封装
│ ├── NTN_channels2.m # OCDM(含CP)兼容信道封装
│ ├── mmse_sd_detector_unified.m # MMSE-SD 统一检测器
│ ├── normalize_channel_matrix.m # 信道归一化
│ ├── symbols_to_bits.m # 符号转比特工具
│ ├── plot_comparison_results.m # 曲线绘图与保存
│ └── print_performance_summary.m # 终端摘要与结构化统计
└── docs/
├── 算法文档.md
├── 代码文档.md🧠 统一仿真内核(关键设计)
default_params(mode) 生成全局参数,避免体制参数漂移。NTN_channels 输出时变矩阵,AFDM/OCDM 通过兼容层适配。📊 实测性能(full 模式结果)
outputs/unified_comparison_results.mat(当前项目实测输出)LMMSE BER
SNR (dB) OCDM AFDM OTFS 最优体制 0 3.150e-01 3.073e-01 3.071e-01 OTFS 4 2.299e-01 2.165e-01 2.171e-01 AFDM 8 1.469e-01 1.254e-01 1.268e-01 AFDM 12 7.530e-02 4.730e-02 4.740e-02 AFDM 16 3.080e-02 8.200e-03 7.900e-03 OTFS 20 1.370e-02 9.000e-04 9.000e-04 AFDM/OTFS 并列 MMSE-SD BER
SNR (dB) OCDM AFDM OTFS 最优体制 0 3.154e-01 3.076e-01 3.073e-01 OTFS 4 2.312e-01 2.173e-01 2.179e-01 AFDM 8 1.500e-01 1.272e-01 1.285e-01 AFDM 12 7.880e-02 4.750e-02 4.770e-02 AFDM 16 3.340e-02 5.900e-03 5.800e-03 OTFS 20 1.800e-02 2.000e-04 3.000e-04 AFDM 结论:在当前配置下,AFDM 与 OTFS 在中高 SNR 区间显著优于 OCDM;MMSE-SD 相对 LMMSE 的增益在高 SNR 更明显。
💻 核心实现展示
1) OCDM:Fresnel 域有效信道构造
% 发射端:QAM符号 -> OCDM调制 -> 加循环前缀
s_qam = qammod(x, params.M, 'UnitAveragePower', true);
s_ocdm = IFSnT * s_qam;
s_cp = CP_mtx * s_ocdm;
% 有效信道构造与归一化
Heff = R_mtx * H * CP_mtx;
D = normalize_channel_matrix(FSnT * Heff * IFSnT);2) AFDM:DAFT 域等效信道
% DAFT 变换矩阵
A = D2 * DFT * D1;
AH = A';
% 仿射域信道与检测输入
Y = A * r_time;
H_daft = normalize_channel_matrix(A * HT * AH);3) OTFS:DD 域等效化
% OTFS 变换算子
OP = kron(WH, eye(M));
% 时域信道 -> DD域等效信道
H_eff = normalize_channel_matrix(OP' * HT * OP);
r_dd = H_eff * x + w;4) MMSE-SD:增广系统 + QR 回代
A = [H; reg * eye(n_tx)];
b = [y; zeros(n_tx, 1)];
[Q, R] = qr(A, 0);
z = Q' * b;
for i = n_tx:-1:1
inter = R(i, i+1:end) * x_hat(i+1:end);
rhs = z(i) - inter;
soft_val = rhs / R(i, i);
x_hat(i) = nearest_constellation(soft_val, constellation);
end🔄 端到端调用链
run_unified_comparison / demo_waveform_showcase
↓
default_params(mode)
↓
prepare_output_dir(...)
↓
run_ocdm_simulation
run_afdm_simulation
run_otfs_simulation
↓
plot_comparison_results
print_performance_summary
↓
save(...results, params, summary, plot_paths)🎬 一键运行
% 进入工程目录
cd('D:/03_代码库/04.code4sale/OTFS-OCDM-AFDM')
% 快速演示
run('demo_waveform_showcase.m')
% 正式仿真
run('run_unified_comparison.m')📂 输出预览
outputs/unified_comparison_results.matber_comparison_full.pngber_comparison_full.figdemo_results.matber_comparison_demo.pngdetector_gain_demo.png
🖥️ 运行环境
qammod / qamdemod(通信相关工具箱)physconst(物理常量函数)🛒 获取方式