🌊 OCDM 通感一体化链路级仿真平台
从 OCDM 基础链路到多径均衡、CFO、MIMO、PAPR/OOBE、ISAC 的完整闭环实现扁平工程结构 · 全中文注释 · 固定文件名自动存图 · 结果可复现
📌 为什么选择本项目?
做 OCDM 研究/教学时,常见问题是“有算法没工程、能跑通但不可维护、结果图不稳定难复现”。本项目的目标是:在一个统一代码框架里,把 基础通信链路 + 关键增强模块 全部打通。
|
|
|
|
|
✅ 一套代码覆盖 AWGN、多径均衡、CFO、2×2 MIMO、PAPR/OOBE、ISAC
|
|
|
✅ 统一参数协议 ocdm_param + 明确的列向量/块矩阵约定
|
|
|
✅ rng_seed + 固定文件名 + 自动覆盖落盘
|
|
|
✅ ZF 近零频点保护 + MMSE 正则项 + 参数合法性校验
|
|
|
✅ 提供算法文档 + 代码文档 + 项目文档三层文档体系
|
🎯 核心价值
🔬 研究与教学价值
-
• 从 DFnT/IDFnT 到完整收发、再到多场景扩展,链路完整可讲解
-
-
• 支持 “通信 + 感知” 一体化展示,适合 ISAC 入门与课程演示
-
• 指标体系齐全:BER、EVM、PAPR、OOBE、Range-Doppler
💼 工程与复现价值
⚡ 技术亮点
🏗️ 模块化架构(扁平结构,逻辑分层)
OCDM/├── 【环境与工具】│ ├── chirpcomm_startup.m # 工程路径初始化 + docs/figures 自动创建│ ├── setup_example_env.m # 示例统一入口│ └── save_figure_stable.m # 固定文件名存图(无时间戳)│├── 【核心变换与收发】│ ├── parse_modem_param.m # 参数协议校验│ ├── fast_dfnt.m # DFnT(chirp-FFT-chirp)│ ├── fast_inv_dfnt.m # IDFnT(chirp-IFFT-chirp)│ ├── ocdm_modem_tx.m # OCDM 发射机(加 CP 串行)│ └── ocdm_modem_rx.m # OCDM 接收机(去 CP + 均衡)│├── 【信道与均衡支撑】│ ├── extract_nr_tdl_profile.m # NR-TDL 连续模型离散化│ ├── sanitize_discrete_profile.m # 离散 PDP 清洗│ ├── build_channel_tap_set.m # 固定信道样本集│ └── apply_multipath_and_noise.m # 多径传播 + AWGN│├── 【CFO 模块】│ ├── apply_cfo_to_signal.m # 频偏注入│ ├── estimate_cfo_cp_correlation.m # CP 相关 CFO 估计│ └── compensate_cfo_signal.m # 频偏补偿│├── 【MIMO 模块】│ └── simulate_mimo_ocdm_frame.m # 2x2 MIMO 频域 ZF/MMSE 单帧内核│├── 【指标模块】│ ├── compute_papr_ccdf.m # PAPR/CCDF│ └── compute_oobe_psd.m # OOBE/PSD(支持显式主带口径+去CP)│├── 【ISAC 模块】│ ├── simulate_ocdm_isac_echo.m # 多目标回波生成│ └── estimate_range_doppler_map.m # 距离-速度图估计 + 峰值提取│└── 【示例脚本】 ├── example_ocdm_modem.m ├── example_ocdm_awgn_performance.m ├── example_ocdm_multipath_transmission.m ├── example_ocdm_cfo_estimation.m ├── example_ocdm_mimo_2x2.m ├── example_ocdm_papr_oobe.m └── example_ocdm_isac_comm_sensing.m
🔧 关键工程策略
-
• 统一参数协议:所有核心链路函数共享
Num_GrdIntv/Num_Symbol/Num_Chirp/Num_Block
-
• 防御式编程:
validateattributes + 维度检查 + 明确中文报错
-
• 数值稳定:ZF 近零频点保护、MMSE 正则、谱估计防
log(0) 处理
-
• 统计稳定:固定随机种子 + 自适应停机 + 零误码下限修正
📊 快速模式实测结果(本机回归)
1) 基础链路(example_ocdm_modem.m)
2) CFO 补偿(example_ocdm_cfo_estimation.m)
3) 2×2 MIMO(example_ocdm_mimo_2x2.m)
4) PAPR/OOBE(example_ocdm_papr_oobe.m)
|
|
|
|
|
|
|
|
|
|
|
|
|
OOBE/Main(去 CP,|f|<=0.22)
|
|
|
5) ISAC(example_ocdm_isac_comm_sensing.m)
峰值检测结果(示例):
-
• 峰值1:Range=82.44 m,Velocity=17.94 m/s,Value=0.00 dB
-
• 峰值2:Range=149.90 m,Velocity=-12.11 m/s,Value=-3.07 dB
-
• 峰值3:Range=232.34 m,Velocity=4.93 m/s,Value=-4.45 dB
💻 核心代码片段
🔥 接收端频域均衡(ocdm_modem_rx.m)
% 去 CPr_ocdm_signal_gi = reshape(r_modem_signal, num_chirp + num_grd_intv, num_block);r_ocdm_signal = r_ocdm_signal_gi(num_grd_intv + 1:num_grd_intv + num_chirp, :);% FFT + chirp 相位补偿phase_seq_gamma = exp(-1i * pi * (0:num_chirp - 1) .^ 2 ./ num_chirp).';r_ocdm_symbol = sqrt(1 / num_chirp) .* fft(r_ocdm_signal, num_chirp, 1);r_ocdm_symbol = phase_seq_gamma .* r_ocdm_symbol;% 一拍均衡if mode_ch_equ ~= 0 r_ocdm_symbol = ch_equ_tap .* r_ocdm_symbol;end
🚀 CFO 估计(estimate_cfo_cp_correlation.m)
cp_part = rx_frame(1:cp_len, :);tail_part = rx_frame(fft_len + 1:fft_len + cp_len, :);corr_value = sum(conj(cp_part(:)) .* tail_part(:));cfo_hat = angle(corr_value) / (2 * pi);% 折叠到 [-0.5, 0.5)cfo_hat = cfo_hat - round(cfo_hat);if cfo_hat >= 0.5 cfo_hat = cfo_hat - 1;end
📉 OOBE 统计(compute_oobe_psd.m)
% 支持显式主带边界、去 CP 和分段长度配置cfg = parse_oobe_config(mainband_cfg);signal = preprocess_signal_for_psd(tx_signal(:), cfg);mainband_edge = cfg.MainbandEdge;mainband_mask = abs(freq_axis_norm) <= mainband_edge;oobe_mask = ~mainband_mask;stat.OOBEToMain_dB = 10 * log10((oobe_power + eps) / (mainband_power + eps));
🎬 一键运行
cd D:/03_代码库/04.code4sale/OCDM/OCDM-Refactored% 基础链路run('example_ocdm_modem.m')% AWGN 扫频use_fast_demo = true; run('example_ocdm_awgn_performance.m')% NR-TDL 多径use_fast_demo = true; run('example_ocdm_multipath_transmission.m')% CFOuse_fast_demo = true; run('example_ocdm_cfo_estimation.m')% 2x2 MIMOuse_fast_demo = true; run('example_ocdm_mimo_2x2.m')% PAPR/OOBEuse_fast_demo = true; run('example_ocdm_papr_oobe.m')% ISACuse_fast_demo = true; run('example_ocdm_isac_comm_sensing.m')
🧾 输出文件清单(固定命名)
运行示例后,figures/ 目录将自动更新:
🖥️ 运行环境
-
• MATLAB:R2020a 或更高版本(建议 R2023a+)
-
• 必需工具箱:Communications Toolbox
-
• 可选工具箱:5G Toolbox(用于
nrTDLChannel)
📚 配套文档
-
-
•
docs/代码文档.md:代码结构、接口协议与维护说明
🛒 获取方式