1 研究背景恒虚警率(Constant False Alarm Rate, CFAR)检测是雷达自动目标检测中的基础技术。在实际雷达工作环境中,接收机输出的杂波功率随距离、方位、时间动态变化。若采用固定检测门限,杂波背景功率升高时虚警率急剧增大,降低时检测灵敏度严重退化。CFAR 技术的核心原理是:对每个距离单元,利用其邻近参考单元的功率水平自适应地估计背景强度,据此设定检测门限,使得虚警概率在不同杂波条件下保持恒定。不同的背景估计策略衍生出一系列 CFAR 变体算法,在均匀环境、杂波边缘、多目标干扰等场景下各有优劣。本文在原 CFAR 算法合集项目的基础上,开发了一个增强型分析工具,涵盖参数统一管理、韦布尔杂波建模、非均匀环境评估、算法效率分析、检测过程可视化等功能,为 CFAR 算法的对比研究和工程选型提供系统化的仿真分析平台。2 算法概述项目涉及的 CFAR 算法及其背景估计策略如下表所示。算法全称背景估计策略CA-CFARCell Averaging双侧参考窗均值GO-CFARGreatest Of左右窗均值取最大SO-CFARSmallest Of左右窗均值取最小OS-CFAROrdered Statistics排序后取第K个有序统计量OSGO-CFAROS + GO左右窗各取有序统计量后取最大OSSO-CFAROS + SO左右窗各取有序统计量后取最小TM-CFARTrimmed Mean排序后两端截尾取均值CMLD-CFARCensored Mean Level Detector剔除最大值后取均值ICCA-CFARIterative Censoring CA迭代剔除超门限样本后CA估计ICOS-CFARIterative Censoring OS迭代剔除超门限样本后OS估计3 增强内容3.1 与原项目的对比改进项原项目状态增强版实现参数管理散落在多个脚本中统一cfg结构体集中管理杂波模型指数分布、对数正态分布新增韦布尔(Weibull)分布算法覆盖ICCA/ICOS 未参与性能对比全部 11 种算法纳入框架非均匀环境评估无新增杂波边缘场景测试OS-CFAR K值固定经验值增加K值优化分析模块性能评价维度单一 Pd 曲线增加雷达图多维度综合评估计算效率无分析增加各算法耗时基准测试检测过程可视化无增加滑动窗与自适应门限动态展示参数敏感度无增加参考窗长度对性能影响分析可复现性无固定随机种子统一随机种子,结果可复现3.2 模块组成增强版工具包含以下10个功能模块,各部分独立可在 MATLAB 编辑器中按 Section(%%标记)分段运行。模块1— 统一配置与路径管理:自动添加所有算法子目录,通过cfg结构体管理全部仿真参数。模块2— 门限因子计算:调用原项目的*_threhold函数,批量获取8种算法的标称因子。模块3— 韦布尔杂波模型:通过逆变换法生成韦布尔分布杂波序列。韦布尔分布的概率密度函数为f(x) = (β/λ)(x/λ)^(β-1)exp(-(x/λ)^β),其中 β 为形状参数(β=1 退化为指数分布,β=2 为瑞利分布),λ 为尺度参数。与指数分布对比展示不同模型的统计特性差异。模块4— 检测过程可视化:在含多目标的模拟回波数据上运行 CA-CFAR 滑动窗检测,绘制信号幅度与自适应门限曲线的对比图,并标注正确检出、漏检和虚警位置,直观展示 CFAR 工作机理。模块5— 全算法 Pd-SNR 对比:在均匀指数杂波+干扰目标场景下,采用统一蒙特卡洛框架(10000次仿真),对比8种算法的检测概率-信噪比曲线。模块6— 杂波边缘分析:构造参考窗两侧功率相差10dB的非均匀场景,分别测试目标位于低功率区和高功率区时,CA/GO/SO/OS 四种算法的检测概率变化。模块7— OS-CFAR K值优化:扫描K值从0.5N到0.95N,结合不同SNR条件下的检测概率,绘制K值-检测概率热力图,给出最优K值建议。模块8— 算法耗时对比:对2048点数据、64点参考窗的配置,每种算法重复50次取平均耗时,以柱状图展示。模块9— 性能雷达图:从均匀环境性能、抗干扰能力、抗杂波边缘能力、计算效率、参数鲁棒性五个维度,以1-10分制对9种算法进行综合评分。模块10— 参考窗长度敏感度:扫描窗长 N=16/32/48/64/96/128,分析 CA-CFAR 和 OS-CFAR 在固定 SNR=15dB 条件下检测概率的变化规律。4 关键实现4.1 参数配置结构体cfg=struct();cfg.NSlide=64;% 参考窗长度cfg.ProCell=8;% 保护单元数cfg.Pfa=1e-4;% 虚警概率cfg.OS_rate=3/4;% OS 有序样本比例cfg.OS_k=round(cfg.OS_rate*cfg.NSlide);% 全窗K值(48)cfg.OS_half_k=round(cfg.OS_rate*cfg.NSlide/2);% 半窗K值(24), 用于OSGO/OSSOcfg.MonteNum=1e4;% 蒙特卡洛次数cfg.rng_seed=2024;% 随机种子半窗K值的引入是基于原项目func_cfar_osgo.m和func_cfar_osso.m的内部逻辑:这些算法对左右半窗分别取有序统计量,因此K值必须基于半边窗长度计算(K = round(rate * NSlide/2)),否则将导致索引越界。同时,门限公式OSGO_Pfa.m和OSSO_Pfa.m内部也使用k = ceil(N * rate / 2),与半窗K值一致。4.2 韦布尔杂波生成利用逆变换法从均匀分布生成韦布尔分布:gen_weibull=@(N,beta,scale)scale.*(-log(rand(1,N))).^(1/beta);4.3 统一检测器框架将各算法的核心统计量计算封装为匿名函数句柄,实现统一的蒙特卡洛调用接口:detector_CA=@(test,ref,alpha,N,p)test/mean(ref);detector_GO=@(test,ref,alpha,N,p)test/max(mean(ref(1:N/2)),mean(ref(N/2+1:N)));detector_OS=@(test,ref,alpha,N,k)test/ref_sort_k(ref,k);detector_OSGO=@(test,ref,alpha,N,k)test/max(ref_sort_k(ref(1:N/2),k),...ref_sort_k(ref(N/2+1:N),k));其中ref_sort_k和ref_sort_trim为辅助子函数,解决旧版 MATLAB 中函数调用结果不能直接索引的兼容性问题。4.4 门限因子计算结果在 Pfa=1e-4, N=64 条件下,各算法的标称因子 α 如下:CA 9.906047 GO 9.164810 SO 11.445236 OS 7.553482 OSGO 7.242203 OSSO 9.291458 TM 11.738968 CMLD 99.9996195 使用说明5.1 运行环境MATLAB R2018b 及以上版本需要 Statistics Toolbox操作系统不限(Windows/Linux/macOS)5.2 文件结构项目目录/ ├── CFAR_Enhanced_Demo.m # 主程序 ├── Binary_Solution/ # 二分法求解器(原项目) ├── CA_CFAR/ GO_CFAR/ SO_CFAR/ ├── OS_CFAR/ OSGO_CFAR/ OSSO_CFAR/ ├── TM_CFAR/ CMLD_CFAR/ IC_CFAR/ └── enhanced_results/ # 输出图片5.3 运行方式在 MATLAB 命令窗口执行:CFAR_Enhanced_Demo或在编辑器中打开该文件,点击"运行"。脚本自动添加子目录到路径,无需手动配置。运行完成后,全部结果图片保存在enhanced_results/目录下。如需调整参数,修改脚本开头的cfg结构体即可。减小cfg.MonteNum可加快运行速度(曲线平滑度相应降低)。6 实验结果以下为脚本运行生成的8组分析图表。6.1 杂波模型概率密度对比指数分布与韦布尔分布(β=1.5)的PDF对比。韦布尔分布在低幅度区域的概率密度更高,拖尾衰减更快,适用于模拟低海况下的海杂波统计特性。6.2 CFAR检测过程可视化上图为含4个目标的模拟回波数据与CA-CFAR自适应门限曲线。红色门限线随噪底起伏自适应调整。下图标注检测结果:正确检出(绿色)、漏检(黑色)、虚警(红色)。6.3 全算法Pd-SNR对比均匀指数杂波+2个干扰目标条件下,8种CFAR算法在SNR 1-35dB范围内的检测概率对比。可以观察到:CA-CFAR在纯均匀环境中检测概率最高,OS系列和CMLD算法在多干扰条件下展现出更强的抗干扰能力。6.4 杂波边缘环境性能参考窗两侧杂波功率相差10dB的杂波边缘场景。左图为目标位于低功率区的检测概率(期望低虚警),右图为目标位于高功率区的检测概率(期望高灵敏度)。GO-CFAR在低功率区虚警控制最优;SO-CFAR在高功率区检测灵敏度最高,符合理论预期。6.5 OS-CFAR K值优化OS-CFAR中K值(有序统计量序号)对检测性能的影响。左图为不同SNR条件下K值-检测概率热力图;右图为K值对平均检测概率的影响曲线,红色星号标注最优K值。对于3个干扰目标的场景,最优K值约为75%N。6.6 算法耗时对比数据长度2048点、参考窗长度64点条件下,各算法单次运行的平均耗时。CA-CFAR耗时最短(无排序操作);ICCA-CFAR耗时最长(需迭代收敛至多30次);OS系列居中(需排序操作)。该结果可作为实时系统算法选型的参考依据。6.7 多维性能雷达图9种算法在均匀环境性能、抗干扰能力、抗杂波边缘能力、计算效率、参数鲁棒性五个维度的综合评分雷达图。CA-CFAR在均匀环境下性能最优但抗干扰能力弱;GO-CFAR在杂波边缘场景下表现突出;ICCA-CFAR抗干扰能力最强但计算效率最低;OS-CFAR各维度较为均衡。6.8 参考窗长度敏感度固定SNR=15dB条件下,参考窗长度N从16到128变化时,CA-CFAR和OS-CFAR检测概率的变化趋势。N在48-96范围内性能较为稳定;N过小导致背景估计方差增大,检测概率下降;N过大可能包含非均匀杂波,同样降低性能。7 算法选型建议基于本实验分析结果,给出以下场景选型建议:应用场景推荐算法依据均匀杂波CA-CFAR统计效率最高,在均匀杂波中为最优线性无偏估计杂波边缘GO-CFAR取双窗最大值有效抑制边缘引起的虚警多目标干扰OS-CFAR有序统计量对干扰目标具有天然鲁棒性密集多目标OSSO-CFAR / TM-CFAR取最小值/截尾均值,多目标环境下检测概率保持率高未知干扰数ICCA-CFAR迭代自适应剔除干扰,无需预知干扰目标数量实时性要求高CA-CFAR / OS-CFAR计算复杂度低,适合工程实时处理8 代码获取完整 MATLAB 代码见附件。运行CFAR_Enhanced_Demo.m即可复现本文全部实验结果。%% =========================================================================% CFAR 恒虚警检测算法 — 增强版综合分析工具箱% =========================================================================% 功能概述:% 在原项目9种CFAR算法基础上,新增以下增强功能:% 1) 统一参数配置与路径管理% 2) 韦布尔(Weibull)分布杂波模型% 3) 杂波边缘非均匀环境性能评估% 4) 自适应 OS-CFAR K 值优化% 5) 全11种算法(含ICCA/ICOS)综合对比% 6) 检测过程可视化(滑动窗/阈值曲线)% 7) 算法耗时性能分析% 8) 多维度性能雷达图% 9) 参考窗长度参数敏感度分析% 10) 一键运行全部实验 + 自动保存图片%% 运行环境:MATLAB R2018b 及以上(需要 Statistics Toolbox)% 使用方法:直接运行本脚本或在命令行输入 CFAR_Enhanced_Demo% =========================================================================clc;clear;close all;%% =========================== 第0步:路径配置 =============================% 自动添加所有算法子目录到 MATLAB 搜索路径root_dir=fileparts(mfilename('fullpath'));subdirs={'Binary_Solution','CA_CFAR','CMLD_CFAR','GO_CFAR',...'IC_CFAR','OS_CFAR','OSGO_CFAR','OSSO_CFAR','SO_CFAR','TM_CFAR'};fori=1:length(subdirs)addpath(fullfile(root_dir,subdirs{i}));endfprintf(' 路径配置完成,已添加 %d 个算法子目录。\n',length(subdirs));% 创建结果保存目录result_dir=fullfile(root_dir,'enhanced_results');if~exist(result_dir,'dir')mkdir(result_dir);end%% =========================== 第1步:统一参数配置 ==========================% 将所有仿真参数集中在一个结构体中,便于管理和修改cfg=struct();% --- CFAR 检测器参数 ---cfg.NSlide=64;% 参考窗总长度cfg.ProCell=8;% 保护单元数cfg.Pfa=1e-4;% 目标虚警概率% --- OS 类算法参数 ---cfg.OS_rate=3/4;% OS-CFAR 有序样本比例(默认选第 3N/4 个)cfg.OS_k=round(cfg.OS_rate*cfg.NSlide);% OS 全窗有序统计量序号cfg.OS_half_k=round(cfg.OS_rate*cfg.NSlide/2);% OSGO/OSSO 半窗有序统计量序号% --- TM-CFAR 参数 ---cfg.TM_rate1=1/32;% 左截尾比例cfg.TM_rate2=1/16;% 右截尾比例% --- CMLD-CFAR 参数 ---cfg.CMLD_rate=1/4;% 剔除比例% --- 蒙特卡洛仿真参数 ---cfg.MonteNum=1e4;% 蒙特卡洛仿真次数(越大曲线越平滑)cfg.rng_seed=2024;% 随机种子(保证可复现性)% --- SNR 参数 ---cfg.SNR_dB=1:2:35;% 信噪比扫描范围(步长2dB)cfg.SNR_lin=10.^(cfg.SNR_dB/10);% --- 杂波参数 ---cfg.clutter_len=1024;% 杂波序列长度cfg.clutter_model='exponential';% 可选: 'exponential' | 'weibull' | 'lognormal'% 韦布尔分布参数(形状参数 beta=1 退化为指数分布;beta=2 为瑞利分布)cfg.weibull_beta=1.5;% 韦布尔形状参数cfg.weibull_scale=1.0;% 韦布尔尺度参数fprintf(' 统一参数配置完成。\n');fprintf(' 参考窗=%d, 保护单元=%d, Pfa=%.0e, 蒙特卡洛=%d次\n',...cfg.NSlide,cfg.ProCell,cfg.Pfa,cfg.MonteNum);%% =================== 第2步:门限因子批量计算 =============================% 使用原项目的门限计算函数,统一获取所有算法的标称因子 alphafprintf('\n 正在计算各算法门限因子...\n');thresholds=struct();thresholds.CA=ca_threhold(cfg.Pfa,cfg.NSlide);thresholds.GO=go_threhold(cfg.Pfa,cfg.NSlide);thresholds.SO=so_threhold(cfg.Pfa,cfg.NSlide);thresholds.OS=os_threhold(cfg.Pfa,cfg.NSlide,cfg.OS_rate);thresholds.OSGO=osgo_threhold(cfg.Pfa,cfg.NSlide,cfg.OS_rate);thresholds.OSSO=osso_threhold(cfg.Pfa,cfg.NSlide,cfg.OS_rate);thresholds.TM=tm_threhold(cfg.Pfa,cfg.NSlide,cfg.TM_rate1,cfg.TM_rate2);thresholds.CMLD=cmld_threhold(cfg.Pfa,cfg.NSlide,cfg.CMLD_rate);% 打印门限因子汇总表fprintf('\n %-12s %-12s\n','算法','门限因子 α');fprintf(' %s\n',repmat('-',1,28));alg_names=fieldnames(thresholds);fori=1:length(alg_names)fprintf(' %-12s %12.6f\n',alg_names{i},thresholds.(alg_names{i}));end%% ================ 第3步:增强杂波模型 —— 韦布尔分布生成器 =================fprintf('\n 生成不同杂波模型数据...\n');% 3.1 韦布尔分布杂波生成函数(内嵌实现,无需外部依赖)% 韦布尔分布 PDF: f(x) = (beta/scale)*(x/scale)^(beta-1)*exp(-(x/scale)^beta)% 生成方法:利用逆变换法,Weibull(scale, beta) = scale*(-ln(U))^(1/beta)gen_weibull=@(N,beta,scale)scale.*(-log(rand(1,N))).^(1/beta);% 3.2 指数分布杂波(原项目方法)gen_exponential=@(N,lambda)-log(rand(1,N))*lambda;% 可视化不同杂波模型的概率密度分布figure('Name','杂波模型对比','NumberTitle','off','Position',[100,400,500,400]);N_sample=1e5;% 大量采样用于绘制 PDFx_range=linspace(0,8,200);% 指数分布exp_data=gen_exponential(N_sample,1);[y_exp,~