面向太赫兹通感一体化的工程化仿真平台
统一参数体系驱动感知与通信协同评估
【THz ISAC】【链路级仿真】【感知通信一体】【工程验证平台】
该项目面向太赫兹 MIMO ISAC 场景,覆盖从参数构建、链路执行到结果评估的完整流程。平台同时支持 GUI 与脚本入口,兼顾交互演示与批量实验。核心目标是让感知与通信在统一框架内实现可复现、可对标、可追踪。
| 痛点 | 方案 |
|---|---|
| 参数管理分散 | 统一配置构建器集中管理通用参数与信号参数 |
| 感知通信流程割裂 | 联合流程先感知后通信并提供感知辅助挂接 |
| 工具链依赖敏感 | 兼容层提供
random/unifrnd 最小替代实现 |
| 结果语义不统一 | 输出统一
*_input/*_output/*_ref/*_diff 命名族 |
| 验收口径不一致 | 提供快速演示、全量演示、静态检查与三场景对标脚本 |
该平台形成了可复现实验链路,适合用于通感一体化算法验证与指标分析。
该平台提供可直接运行的模块化代码结构,适合工程团队协作与持续交付。
| 特性 | 传统方案 | 本方案 |
| ---------- | ---------------- | --------------------------------------- |
| 参数管理 | 分散脚本配置 | 统一
build_thz_isac_config 参数域 |
| 链路调度 | 单链路独立调用 | 感知/通信/联合流程统一编排 |
| 数据契约 | 指标命名不统一 |
输入/输出/参考/差异 全量命名族 |
| 运行入口 | 单脚本演示 | GUI、快速脚本、全量脚本三入口 |
| 验证体系 | 人工口径验证 | 静态检查 + 单测 + 三场景对标闭环 |
数据来源:
run_quick_demo.m、run_full_demo.m、run_parity_benchmarks.m最近一次实测输出。
| 场景 | 基线 | 本方案 | 结论 |
| ------------------ | ---------------------------------- | ------------------------------ | ------ |
| 快速演示场景 | 工程目标:BER≤0.05,EVM≤-12 dB | BER=0.031947,EVM=-15.780 dB | 达标 |
| 全量演示场景 | 工程目标:BER≤0.02,EVM≤-20 dB | BER=0.017337,EVM=-23.769 dB | 达标 |
| 默认对标场景 | 一致性判据:相对偏差 ≤1% | 对标流程通过,ALL\_PASS=true | 通过 |
| 高阶调制对标场景 | 一致性判据:相对偏差 ≤1% | 对标流程通过,ALL\_PASS=true | 通过 |
感知链路覆盖距离、速度、角度与位置四类输出,并提供成像结果与误差统计。
| 参数 | 配置 | 性能 |
| ---------- | ------------------------------ | ---------------------- |
| 距离估计 | 带宽 2.16 GHz,OFDM 频域处理 | 绝对误差约 0.021 m |
| 速度估计 | 慢时间 FFT + 2D CA-CFAR | 绝对误差约 1.589 m/s |
| 角度估计 | 扫描角
-60:1:60 波束形成 | 绝对误差约 0.000 deg |
项目面向 MATLAB 环境设计,可在常规开发机完成演示与测试流程。
thz_isac/ ├── src/ # 核心源代码 │ ├── sensing/ # 感知链路与CFAR检测 │ ├── comm/ # 通信链路与指标统计 │ └── channel/ # 分子吸收与MIMO信道建模 ├── tests/ # 测试与检查脚本 │ ├── test_all.m # 单元测试总入口 │ └── test_full_chain.m # 联合流程完整性测试 └── docs/ # 工程文档目录 ├── 算法文档.md # 算法原理与公式推导 └── 代码文档.md # 代码结构与接口说明
文档体系覆盖“算法原理 + 代码实现 + 项目说明”三层信息,便于研究与工程同步推进。
说明感知链路、通信链路、信道建模与指标定义的完整公式推导。
docs/算法文档.md
说明入口脚本、模块职责、调用关系、数据结构契约与测试体系。
docs/代码文档.md
该模块负责收敛关键参数并生成派生参数,作为全工程唯一配置入口。
cfg.general = struct(); cfg.general.project_root = project_root; cfg.general.data_dir = fullfile(project_root, "data", "molecular_absorption"); cfg.general.output_dir = fullfile(project_root, "outputs"); cfg.general.verbose = true; cfg.general.random_seed = 20260320; cfg.general.scenario_name = "default"; cfg.general.enable_parallel = false; cfg.signal = struct(); cfg.signal.fc_hz = 252e9; cfg.signal.bandwidth_hz = 2.16e9; cfg.signal.waveform_type = "OFDM"; cfg.signal.mod_order = 16; cfg.signal.num_subcarriers = 4096; cfg.signal.num_symbols = 2048; cfg.signal.cp_ratio = 1 / 4; cfg.signal.channel_coding = "Convolutional"; cfg.signal.code_rate = "7/8"; cfg.signal.equalizer = "MMSE"; cfg.signal.num_pilots = 8; cfg.signal.guard_ratio = 0.04; cfg = merge_struct_recursive(cfg, user_input); cfg = derive_parameters(cfg); rng(cfg.general.random_seed, "twister");
该模块负责从回波立方体构建到目标参数估计的完整处理链路。
log_step(cfg, "感知链路进行距离-速度二维处理。"); range_cube = ifft(ifftshift(signal_cube, 1), n_sc, 1); doppler_cube = fftshift(fft(range_cube, n_sym, 2), 2); rv_power = squeeze(sum(abs(doppler_cube) .^ 2, 3)); rv_power = rv_power ./ max(rv_power(:) + eps); rv_db = to_db(rv_power, cfg.cfar.output_floor_db); log_step(cfg, "感知链路进行 2D CA-CFAR 检测。"); [cfar_map_db, detection_mask] = apply_cfar2d_ca(rv_power, ... cfg.cfar.guard_size, cfg.cfar.training_size, cfg.cfar.pfa, cfg.cfar.output_floor_db); log_step(cfg, "感知链路进行距离-角度成像。"); angle_grid = cfg.sensing.angle_scan_deg(:).'; range_angle_power = zeros(n_sc, numel(angle_grid)); range_doppler_slice = squeeze(doppler_cube(:, vel_idx, 1:n_virtual)); for r_idx = 1:n_sc snapshot = range_doppler_slice(r_idx, :).'; for a_idx = 1:numel(angle_grid) steering = exp(1j * pi * (0:(n_virtual - 1)).' * sind(angle_grid(a_idx))) / sqrt(n_virtual); range_angle_power(r_idx, a_idx) = abs(steering' * snapshot) .^ 2; end end sense_out.RngVelPowIncoInt = rv_db; sense_out.RngVelCFAR = cfar_map_db; sense_out.RngAngPow = range_angle_db; sense_out.RngEstimate = rng_est; sense_out.VelEstimate = vel_est; sense_out.AngEstimate = ang_est; sense_out.PosError = pos_error;
该模块负责编码调制、MIMO 传输均衡、解调译码与通信指标评估。
log_step(cfg, "通信链路进行编码与调制。"); for stream_idx = 1:n_stream coded_len_need = numel(data_idx) * n_sym * bits_per_symbol; info_len = max(120, floor(coded_len_need * cfg.signal.code_rate_value)); info_bits = randi([0, 1], info_len, 1); [coded_bits, code_meta] = channel_encode_bits(info_bits, cfg); coded_bits = local_expand_or_trim(coded_bits, coded_len_need); tx_symbols = map_bits_to_qam(coded_bits, mod_order); tx_symbols = local_expand_or_trim(tx_symbols, numel(data_idx) * n_sym); tx_symbols_mat = reshape(tx_symbols, numel(data_idx), n_sym); tx_grid(data_idx, :, stream_idx) = tx_symbols_mat; end log_step(cfg, "通信链路进行 MIMO 传输与均衡。"); for sc_idx = 1:n_sc h_k = h_ue(:, :, sc_idx); if strcmpi(cfg.signal.equalizer, "MMSE") w_k = (h_k' * h_k + noise_var * eye(n_tx)) \ (h_k'); else w_k = pinv(h_k); end end log_step(cfg, "通信链路进行解调与解码。"); ber_avg = mean(ber_values); rms_evm_db = 20 * log10(mean(evm_values) + eps); se = n_stream * bits_per_symbol * cfg.signal.code_rate_value * (numel(data_idx) / n_sc); eff_rate = se * cfg.signal.bandwidth_hz; comm_out.BER = ber_avg; comm_out.rmsEVMdB = rms_evm_db; comm_out.SE = se; comm_out.effDateRate = eff_rate;
run("run_quick_demo.m")
run("run_full_demo.m")
launch_thz_isac_gui
运行后可得到感知三图、通信三图以及 MAT 结果文件,支持脚本与 GUI 双路径复核。 图示包括距离-速度图、CFAR 检测图、距离-角度图、发射接收星座图与 NLoS 时延响应图。
典型输出图覆盖感知与通信两大结果面板,便于直观核验链路行为。

本文代码仅为核心片段,完整版工程已整理好。 关注公众号 【 3GPP 仿真实验室】进行获取。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70049237/viewspace-3114398/ ,如需转载,请注明出处,否则将追究法律责任。