十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

三角波FMCW毫米波雷达目标识别:差频测距与CFAR检测

三角波FMCW毫米波雷达目标识别:差频测距与CFAR检测 简介这里提供的是一份面向本科、硕士阶段雷达信号处理教研学习的MATLAB代码包聚焦线性三角波连续调频毫米波雷达的目标识别处理流程。代码基于MATLAB 2019a编写包含恒虚警检测CFAR、瑞利分布拟合、马库姆分布计算、PDPFA等关键环节的.m脚本并附带多幅结果图像与若干.mat中间数据文件便于对照分析检测性能。整个压缩包共13个文件其中6个.m主程序、4个.png结果图、3个.mat数据文件整体仅153KB轻量便携适合快速开展仿真实验。目前已有289人学习下载。通过阅读代码可掌握线性调频连续波雷达差拍信号处理、目标检测门限设定与虚警概率评估的完整思路有助于理解理论公式与工程实现间的对应关系。1. 三角波FMCW毫米波雷达目标识别差频测距与距离-速度解耦做车载前向雷达或者无人机避障时24GHz/77GHz毫米波雷达的回波经过混频之后留在信号链里的不再是发射波形本身而是发射与回波的差频。线性三角波调频的特别之处在于上扫频和下扫频分别携带距离与速度的耦合信息两条斜率一对照就能把距离和速度解开。这套MATLAB代码包就是把这条链路做成闭环从瑞利/马库姆统计建模到CFAR恒虚警门限再到ROC曲线评估目标识别能力脚本不多但每一段都是实际项目里要面对的问题。适合雷达课程设计、硕士仿真验证也适合刚接手毫米波雷达项目的人快速建立检测流程的整体观。2. 回波统计建模与检测门限推导瑞利、马库姆与对数正态分布2.1 相干检波之后包络先分成两种假设雷达目标检测的底层是二元假设检验H0是只有噪声H1是噪声加目标。毫米波雷达的I/Q两路正交采样来自同一个中频信号每路都近似为高斯分布包络在H0下服从瑞利分布目标存在时正弦信号叠加窄带高斯噪声包络服从莱斯分布检测概率的解析式要用一阶马库姆Q函数来表达。代码包里的rayleigh.m、marcum.m、log_norm.m三个脚本恰好对应这条统计链的三段噪声包络、目标包络、杂波失配修正。很多刚拿到这套代码的人先去看CFAR和ROC其实先花二十分钟把这三个分布的关系理清后面调参才有依据。2.2 rayleigh.m、marcum.m、log_norm.m 各管哪一段matlab脚本数学模型在检测链中的角色rayleigh.mf(r)r/σ²·exp(−r²/(2σ²))H0假设下的包络分布用来标定虚警概率marcum.mQ1(a,b)∫_b^∞ x·exp(−(x²a²)/2)·I0(ax)dxH1假设下的包络分布用来计算检测概率log_norm.m对数正态PDF与CDF非均匀强杂波的幅度拟合评估瑞利模型是否失配瑞利分布只需要噪声功率σ²一个参数门限与虚警概率的关系可以直接写出闭式解这是它被广泛用作基准模型的原因。马库姆Q函数则把正弦信号幅度a和门限b两个参数统一进来a由信噪比决定b由门限决定。对数正态分布不是检测模型而是用来做杂波拟合对比的辅助工具海杂波、建筑密集区的回波幅度经常比瑞利拖尾更重用log_norm.m拟合后对比曲线能直观看出瑞利假设在哪些距离单元已经不成立。2.3 pdpfa.m把概率解析式变成可调用的函数代码包里的pdpfa.m完成的本质上是这样一个计算传入信噪比和归一化门限同时输出检测概率与虚警概率function [pd, pfa] pdpfa(snr_dB, thr_norm) % snr_dB : 目标回波信噪比单位dB % thr_norm : 归一化门限相对噪声均方根幅度的倍数 sigma2 1; % 噪声功率归一化为1 pfa exp(-thr_norm^2 / (2*sigma2)); % 瑞利包络右尾概率 a sqrt(2 * 10^(snr_dB/10)); % 马库姆Q函数第一参数 b thr_norm; % 第二参数即门限 pd marcumq(a, b); % 需要通信工具箱 end第一行pfa用的是瑞利分布的互补累积分布函数。归一化门限从3抬到4即从3倍噪声均方根幅度抬到4倍虚警概率约从1.1e-2下降到3.4e-4这就是恒虚警检测的基本杠杆。marcumq位于通信工具箱若MATLAB 2019a未安装该工具箱直接用代码包里的marcum.m替代即可两者差异只在数值积分精度不影响门限变化趋势。2.4 杂波模型失配时先别调门限CFAR_uneven.mat场景里如果实测虚警数明显高于设定值我一般不会先去增大门限因子而是先做一次杂波分布拟合。用log_norm.m和rayleigh.m分别拟合同一段参考窗的幅度假如对数正态的似然值显著更高说明背景不是瑞利杂波继续用瑞利假设下的CFAR公式虚警失控是必然的。24GHz毫米波雷达模块在40m内做短距探测时地面反射、护栏边缘都会制造这种非均匀背景处理手段通常是换用后面要讲的改进型CFAR而不是死磕门限因子。3. 一维CA-CFAR与改进型恒虚警检测均匀与非均匀杂波下的门限设计3.1 固定门限为什么在雷达里走不通如果整个距离维的噪声功率恒定一个固定门限就够了但实际回波里噪声功率随距离、随地形起伏变化。固定门限要么在噪声强的地方虚警成片要么在噪声弱的地方把目标漏掉。CFAR的思路是用被测单元附近的参考单元实时估计背景功率门限跟着背景走。线性三角波FMCW里CFAR通常先在距离维上做一次一维检测再在速度维上做第二次两次检测输出的点迹再配对测距测速。3.2 CA-CFAR的门限因子推导单元平均CFARCA-CFAR是最常用的基准算法背景功率取左右参考窗的算术平均。门限因子α由参考单元数N和设计虚警概率Pfa决定α N·(Pfa^(−1/N) − 1)。这个公式的来源是N个独立同分布参考单元的均值经过缩放后要让瑞利包络下超过门限的概率精确等于Pfa。实际计算时N64参考单元下Pfa1e-4对应α≈9.9Pfa1e-6对应α≈15.4虚警概率压低两个数量级门限因子只抬高约56%这正是恒虚警检测兼顾灵敏度与稳定性的原因。3.3 一维CA-CFAR的MATLAB实现与参数设置代码包里的cfar.m实现的就是这个滑窗逻辑核心循环可以写成下面这样function det cfar_1d(x, n_ref, n_guard, pfa) % x : 距离维幅度序列 % n_ref : 左右参考单元总数通常取32或64 % n_guard : 左右保护单元总数通常取4到8 % pfa : 设计虚警概率常见1e-4 alpha n_ref * (pfa^(-1/n_ref) - 1); det zeros(size(x)); half_ref n_ref / 2; half_guard n_guard / 2; for k half_ref half_guard 1 : length(x) - half_ref - half_guard win_left x(k - half_ref - half_guard : k - half_guard - 1); win_right x(k half_guard 1 : k half_guard half_ref); noise (sum(win_left) sum(win_right)) / n_ref; det(k) x(k) alpha * noise; end end保护单元是这里最容易忽略的参数。目标经过窗函数后会占据几个相邻距离单元如果不留保护单元目标自身能量会灌进参考窗把背景功率抬高结果是目标单元反而过不了门限这就是自屏蔽。参考单元太少背景估计方差大虚警抖动明显参考单元太多在非均匀杂波里又容易把远处不属于本地的功率平均进来。我一般会先用n_guard6、n_ref32跑一遍再根据目标扩展情况微调。3.4 CFAR_even.mat与CFAR_uneven.mat的门限行为差异CFAR_even.mat对应均匀噪声加少数目标CA-CFAR表现良好虚警率与设定值基本一致。CFAR_uneven.mat对应杂波边缘比如道路护栏或建筑物边界此时CA-CFAR会在边缘右侧产生成片虚警原因是在杂波边缘参考窗一半落在低噪声区、一半落在高噪声区平均背景功率被低估门限偏低。处理这类场景有三种常见改进CFAR变体背景功率估计方式典型使用场景主要弱点CA-CFAR左右参考窗取平均均匀杂波背景边缘虚警、多目标遮蔽GO-CFAR左右参考窗取较大均值杂波边缘弱目标漏检SO-CFAR左右参考窗取较小均值近距离多目标边缘虚警更明显把cfar.m里的noise估计改成noisemax(mean(win_left), mean(win_right))就是GO-CFAR改成min就是SO-CFAR。现在的4D毫米波雷达点云预处理里很多方案就是按照这个思路对CA-CFAR做小改动而不是另起炉灶说明这三个变体已经覆盖了大多数工程场景。3.5 多目标遮蔽怎么判断两个目标距离很近时强目标进入弱目标的参考窗弱目标门限被抬高导致漏检。判断依据是CFAR检测到的目标数量明显少于预期的点迹数量并且被漏的目标旁边总有一个幅度高出一截的强目标。这种情况下减少参考单元数是最快的缓解手段但参考单元太少又会牺牲均匀场景下的恒虚警特性所以实际工程里SO-CFAR比单纯缩减窗口更常用。4. ROC曲线评估与多目标判定从检测输出到识别率统计4.1 为什么目标识别效果要看ROC而不是单个检测率单看一个门限下的检测概率没有意义门限放低检测率上去了虚警也跟着上去了。ROC曲线把门限从低扫到高每一点对应一组(Pfa, Pd)曲线越靠近左上角说明同一虚警水平下检测能力越强。代码包里的ROC.m就是把第2章pdpfa.m计算的(Pfa, Pd)对按门限顺序画出来形成一族以信噪比为参数的曲线。对比不同SNR下的曲线能直接看出这个FMCW检测链在什么信噪比以下基本失效。4.2 ROC.m的循环结构和绘图参数简化后的ROC生成代码如下snr_set [8 10 12 14]; % 信噪比序列单位dB thr_set 0:0.02:3; % 归一化门限扫描范围 for s 1:numel(snr_set) for j 1:numel(thr_set) [pd(s, j), pfa(s, j)] pdpfa(snr_set(s), thr_set(j)); end end figure; plot(pfa., pd., LineWidth, 1.2); set(gca, XScale, log); % 虚警概率用对数坐标更直观 xlabel(虚警概率 Pfa); ylabel(检测概率 Pd);注意第二层循环里thr_set的步长步长太粗曲线不平滑太细计算量翻倍。MATLAB 2019a里XScale设为log之后低虚警区间的曲线形状会清楚很多这也是雷达论文里普遍采用的画法。1.png、2.png这些输出图通常就是不同信噪比下ROC曲线的对比图。4.3 用CFAR_target.mat统计目标识别正确率CFAR_target.mat存的是某一帧含多个目标的距离-多普勒数据以及真实目标位置标注。拿到CFAR检测结果后我一般用最近邻匹配来统计识别率对每个检测点找最近的真实目标位置距离小于一个距离单元就算命中。% cfar_idx: CFAR检测出的目标索引gt_idx: 真实目标索引 if isempty(cfar_idx) tp 0; else tp 0; for g gt_idx if min(abs(cfar_idx - g)) 1 % 距离偏差在1个单元内算命中 tp tp 1; end end end fn numel(gt_idx) - tp; % 漏检数 fp numel(cfar_idx) - tp; % 虚警数这里最容易被忽略的是距离偏差在1个单元内这个容差的选择。目标经过窗函数后峰值会偏移一到两个单元容差给得太小会把命中判成漏检给得太大又会让虚警混进正确识别里。多数24GHz毫米波雷达模块的实测数据里容差取1个距离单元是比较稳的折中。最后把tp、fp、fn组合成混淆矩阵就能配合ROC曲线给出一个完整的性能评估。5. MATLAB 2019a复现FMCW-CFAR仿真时最值得调的四个参数5.1 扫频带宽B决定距离分辨率别和中心频率混淆三角波FMCW的距离分辨率是ΔRc/(2B)B是单边扫频带宽。很多复现卡在两个目标分不开上其实是B给小了。要分辨1m的目标B至少150MHz24GHz模块常见250MHz带宽对应约0.6m分辨率。改参数时要注意B变大后差频频率上限跟着变大中频采样率也要同步提高否则距离维会折叠。5.2 保护单元的数量必须覆盖目标主瓣宽度目标经过FFT和窗函数后在距离维上占据的单元数直接决定保护单元的最小值。用矩形窗时目标占1个单元用Hamming窗时占3到5个单元。n_guard小于这个宽度时自屏蔽会表现为目标越强越检不出来和噪底一点关系都没有。5.3 marcumq不是总能直接用MATLAB 2019a没有安装通信工具箱时pdpfa.m会直接报Undefined function marcumq。代码包里的marcum.m就是为这种情况准备的替换后数值上会有轻微误差但画ROC曲线完全够用。如果自己重写marcum.m注意积分上限截断要取足够大一般取20以上才能保证低虚警区的曲线平滑。5.4 复现时的脚本运行顺序顺序脚本文件作用产出1rayleigh.m / log_norm.m确认背景分布类型杂波拟合对比图2cfar.m对距离/多普勒维做恒虚警检测CFAR_even / CFAR_uneven检测结果3pdpfa.m计算指定信噪比下的Pd和Pfa门限-概率对照数据4ROC.m汇总多组信噪比的检测性能ROC曲线图最后一个要提醒的是门限因子不要跨场景硬套。CFAR_even场景调好的α拿到CFAR_uneven场景里虚警率可能差两个数量级每次改动杂波背景都要用Pfa反推α而不是凭手感微调。本文还有配套的精品资源点击获取
返回列表