📡 FMCW 雷达信号处理教科书级仿真平台
完整链路逐模块实现 · MATLAB 纯基础函数实现 · 教学与工程双场景可复现* 支持 FMCW 主链路 + 脉冲多普勒 + 相参/非相参积累对比
📌 为什么选择本仿真平台?
想讲清楚雷达处理链路时,常见问题是“公式和代码脱节、模块耦合重、结果不稳定、图像不好复现”。 本平台围绕 可解释、可运行、可验证 设计,主打从信号到点云的完整闭环。
| 常见痛点 | 本平台方案 |
|---|---|
| 🔴 只有单点算法演示,链路不完整 | ✅ 完整闭环:chirp -> IF -> data cube -> RD -> angle -> CFAR -> 点云 |
| 🔴 维度约定混乱,调试困难 | ✅ 明确三维约定:理论 x[m,n,p],存储 [p,n,m] |
| 🔴 代码依赖重,环境迁移难 | ✅ 纯 MATLAB 基础函数实现,尽量减少工具箱依赖 |
| 🔴 只有图,没有可追溯结果 | ✅ 每次自动归档 png+fig+results.mat |
| 🔴 缺少质量闸门 | ✅checkcode + 冒烟检查 双重验证入口 |
🎯 核心价值
🔬 学术研究价值
- 链路完整:FMCW 主处理、脉冲多普勒、积累增益三条演示链路并存。
- 公式可对齐:关键相位项、FFT 维度、CFAR 门限均可映射到标准雷达信号处理表达。
- 教学友好:一键脚本生成 8 类关键图,适合课堂讲解与实验报告。
- 参数集中化:
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 修复后验证记录。
💻 核心代码展示
🔥 多目标 IF 建模(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
🚀 二维 CA-CFAR 检测(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 -> 点云映射 │
└───────────────────────────────────────────────────────────────┘
示例输出图(默认参数):



🖥️ 运行环境
- MATLAB 版本:R2020a 或更高版本(建议 R2025b 及以上)
- 依赖工具箱:无强依赖(核心流程使用基础 MATLAB 函数)
- 操作系统:Windows / Linux / macOS 均可
🛒 获取方式
本文代码仅为核心片段,完整版工程已整理好。 关注公众号 【3GPP 仿真实验室】进行获取。
📚 参考文献
[1] Fuwei Li, “Radar Signal Processing: A Tutorial,” 2024-12-26. livey.github.io/posts/2024-…
[2] M. I. Skolnik, Introduction to Radar Systems, 3rd ed., McGraw-Hill, 2001.
[3] M. A. Richards, J. A. Scheer, and W.