完整链路逐模块实现 · MATLAB 纯基础函数实现 · 教学与工程双场景可复现* 支持 FMCW 主链路 + 脉冲多普勒 + 相参/非相参积累对比
想讲清楚雷达处理链路时,常见问题是“公式和代码脱节、模块耦合重、结果不稳定、图像不好复现”。 本平台围绕 可解释、可运行、可验证 设计,主打从信号到点云的完整闭环。
| 常见痛点 | 本平台方案 |
|---|---|
| 🔴 只有单点算法演示,链路不完整 | ✅ 完整闭环:
chirp -> IF -> data cube -> RD -> angle -> CFAR -> 点云 |
| 🔴 维度约定混乱,调试困难 | ✅ 明确三维约定:理论
x[m,n,p],存储
[p,n,m] |
| 🔴 代码依赖重,环境迁移难 | ✅ 纯 MATLAB 基础函数实现,尽量减少工具箱依赖 |
| 🔴 只有图,没有可追溯结果 | ✅ 每次自动归档
png+fig+results.mat |
| 🔴 缺少质量闸门 | ✅
checkcode + 冒烟检查 双重验证入口 |
default_config.m 管理关键系统参数,便于敏感性分析。config/core/processing/utils/tests 清晰分层。RadarSignal/ ├── README.md ├── Plan.md ├── 项目文档.md ├── docs/ │ ├── 算法文档.md │ └── 代码文档.md └── matlab/ ├── run_demo_all.m # 一键运行入口 │ ├── config/ │ └── default_config.m # 统一配置中心 │ ├── core/ │ ├── generate_fmcw_chirp.m # FMCW 发射信号生成 │ ├── simulate_fmcw_scene.m # IF 场景建模与噪声注入 │ └── build_data_cube.m # 三维 Data Cube 组织 │ ├── processing/ │ ├── range_doppler_fft.m # 距离-多普勒处理 │ ├── angle_estimation_fft.m # 阵元维角度估计 │ ├── cfar_2d_ca.m # 二维 CA-CFAR │ ├── build_point_cloud.m # 检测点 -> 点云映射 │ ├── pulse_doppler_demo.m # 脉冲多普勒演示 │ └── coherent_integration_demo.m # 相参/非相参积累对比 │ ├── utils/ │ ├── make_output_dir.m # 输出目录管理 │ ├── save_figure_auto.m # 图像自动保存 │ └── plot_helpers.m # 绘图风格设置 │ ├── tests/ │ └── run_static_checks.m # checkcode + 冒烟检查 │ └── outputs/ └── radar_demo_YYYYMMDD_HHMMSS/ # 结果归档目录
| 指标类别 | 结果 |
|---|---|
| 静态检查文件数 | 15 |
checkcode 消息数 |
0 |
| 冒烟检查 |
smoke_ok = true |
| 修复后点云检测数 |
pc.count = 51 |
| RD 主峰 1 |
R=28.11 m, v=6.08 m/s |
| RD 主峰 2 |
R=44.97 m, v=-4.06 m/s |
| RD 主峰 3 |
R=61.83 m, v=0.00 m/s |
数据来源:
Plan.md中 Gate E 修复后验证记录。
simulate_fmcw_scene.m)% 距离拍频与多普勒频移 f_r = 2 * slope * R / c; f_d = 2 * v / lambda; % 快时间相位项(range beat) % 与“保留正频半谱”策略一致,采用正拍频符号 phase_fast = 2 * pi * f_r .* t_fast; % 慢时间相位项(doppler) phase_slow = 2 * pi * f_d .* t_slow; for p = 1:num_ant phase_ant = 2 * pi * ((p - 1) * d * sin(theta) / lambda); phase_nd = phase_slow + phase_const + phase_ant; phase_2d = bsxfun(@plus, phase_nd(:), phase_fast); target_if = amp * exp(1j * phase_2d); ... end
cfar_2d_ca.m)num_total = (2 * win_r + 1) * (2 * win_d + 1); num_guard = (2 * gr + 1) * (2 * gd + 1); num_train = num_total - num_guard; alpha = num_train * (pfa^(-1 / num_train) - 1); for r = r_start:r_stop for d = d_start:d_stop block = rd_power((r - win_r):(r + win_r), (d - win_d):(d + win_d)); guard = rd_power((r - gr):(r + gr), (d - gd):(d + gd)); noise_sum = sum(block(:)) - sum(guard(:)); noise_mean = noise_sum / num_train; threshold = alpha * noise_mean; thr_map(r, d) = threshold; snr_db = 10 * log10(rd_power(r, d) / (noise_mean + eps)); if rd_power(r, d) > threshold && snr_db >= cfar_cfg.min_snr_db det_mask(r, d) = true; end end end
cd('D:/10_存储库/OneDrive/15.代码归档/01.施工中/RadarSignal/matlab');
run_demo_all;
cd('D:/10_存储库/OneDrive/15.代码归档/01.施工中/RadarSignal/matlab/tests');
report = run_static_checks();
disp(report);
[RadarSignal] 输出目录: .../matlab/outputs/radar_demo_20260306_082736 [RadarSignal] 演示完成,输出已保存。 [RadarSignal] 图像与结果文件:.../radar_demo_20260306_082736 输出文件(共17个): - 01~08 图像: 每类各 1 份 PNG + 1 份 FIG - results.mat: cfg/cube/RD/CFAR/pointcloud/pd/ci 等关键结果
处理流程总览 ┌───────────────────────────────────────────────────────────────┐ │ chirp生成 -> IF建模 -> Data Cube -> Range FFT -> Doppler FFT │ │ -> Angle FFT -> 2D CA-CFAR -> 点云映射 │ └───────────────────────────────────────────────────────────────┘
示例输出图(默认参数):

本文代码仅为核心片段,完整版工程已整理好。 关注公众号 【 3GPP 仿真实验室】进行获取。
[2] M. I. Skolnik, Introduction to Radar Systems, 3rd ed., McGraw-Hill, 2001.
[3] M. A. Richards, J. A. Scheer, and W. A. Holm, Principles of Modern Radar: Basic Principles, SciTech, 2010.
[4] H. Rohling, “Radar CFAR Thresholding in Clutter and Multiple Target Situations,” IEEE Trans. AES, vol. AES-19, no. 4, pp. 608–621, 1983.
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70049237/viewspace-3111776/ ,如需转载,请注明出处,否则将追究法律责任。