雷达编程实战之恒虚警率(CFAR)检测
在雷达系统中,目标检测是一项非常重要的任务。检测本身非常简单,它将信号与阈值进行比较,超过阈值的信号则认为是目标信号,所以目标检测的真正工作是寻找适当的阈值。由于目标误检的严重后果,因此雷达系统希望有一个检测阈值,该阈值不仅能最大限度地提高检出概率,而且能将误报概率保持在预设水平以下。
有大量的文献对使用多个接收信号样本检测高斯白噪声中的信号的情况进行了分析,并获得了一些众所周知的结果,然而,所有这些经典结果都基于理论概率,并且仅限于具有已知方差与期望的高斯白噪声。在实际应用中,噪声通常是有色的,其功率是未知的🌒。
本文介绍了雷达编程中常会遇到的目标检测技术---CFAR(Constant False-Alarm Rate),还是笔者的老习惯,先来过一下文中涉及的一些公式以及解释📌。
,这个公式我们后边称为公式一,它计算具有已知方差与期望的高斯白噪声符合虚警概率为
的阈值T。
是
的反函数,erf可在matlab中直接使用,定义是
,
是噪声的标准差,
是数学期望,而
为阈值。
,这个公式我们称之为公式二,它反映了阈值与根据给定的检测窗口(CUT)估计出来的噪声功率
以及虚警概率之间的关系。
常为检测窗口的均值,表示为
。假设传入检测系统的脉冲为单个脉冲(不涉及脉冲积分),则
,其中
为虚警概率,N为估计检测窗口的大小。
恒定阈值即指提前对传入检测系统的噪声参数进行估计,并根据一定的虚警概率计算出一个恒定的阈值,在目标检测时大于预设的阈值即判断为有目标。然而,当雷达接收机输出到检测系统的噪声发生变化时(比如功率的变化),检测系统无法做出适当的调整,将会导致实际的虚警率发生了变化。
在雷达信号检测中,当外界噪声强度变化时,雷达能自动调整其目标检测阈值,使雷达的虚警概率保持不变,具有这种特性的检测手段称为恒虚警率检测。
基础理论知识
检测的作用就是在含有噪声的情况下确定目标的存在和不存在。在我们不知道目标是否存在的情况下,目标检测的工作就变成了针对两种可能假设的概率,来对当前的信号做出判决。
一种叫原假设,也叫零假设,用H0表示,我们针对雷达系统理解为噪声,另外一种叫备择假设,用H1表示,理解为目标。表示当功率x为噪声的功率,
表示当输入信号功率x为信号的概率。Critial value为决策边界(判断阈值),大于边界(阈值)的我们认为是目标,而小于阈值的我们认为是噪声。因为我们的原假设是噪声,所以对应的接受区域在下图左侧,拒绝区域在下图右侧。对应的假拒绝概率(虚警概率)与假接收概率(漏检概率)如下图所示。

从雷达接收机输入到检测系统的信号是目标信号+噪声,如下图中的实线,我们可以计算噪声回波信号的统计特性,将噪声的概率密度函数也画出,如下图的虚线,然后根据确定的虚警概率,我们就可以知道检测阈值的大小,这也是恒定阈值法的基本思路。

我们假设噪声是高斯白噪声,功率表现符合高斯分布。通过计算噪声的统计特性之后,就可以通过公式一计算出相关的阈值。这个是恒定阈值的目标检测。而我们的噪声一般是有色的(不是纯的随机数,有一定相关性),功率的期望也是未知的。为了解决这个问题,我们先复习一下高斯分布与标准差之间的关系。

我们可以将这种有色,功率未知的噪声信号理解成很多个符合正态分布,但是具有不同统计特性的噪声拼接而成。我们根据上图可以看出,符合高斯分布的噪声概率分布与噪声的统计特性诸如标准差和数学期望
都有关系,也就是说,我们可以根据噪声的统计特性来表示一个符合确定虚警率的阈值,
,这就是我们公式公式2的由来,我们通过把噪声切割成具有一定尺寸的窗口来获得当前检测单元的阈值,即每一个检测单元都对应一个根据周围单元估算出的噪声统计特性再乘以一个由虚警概率确定的
算出的判决阈值。所以对于CFAR,我们的阈值不是个定值,而是如下图一个蓝色曲线。

雷达一维恒虚警多算法Matlab实现
背景噪声生成函数
下面这个function主要实现了根据输入的统计特性输出符合高斯分布的均匀背景噪声矩阵,输入的参数包括标准差,噪声点数,平均dB,以及是否将噪声画出来的开关量。输出噪声一维矩阵。
在这里先说明一个dB的概念,dB表示的是系统的输出功率相对输入功率的增益。这里dB的引入是为了把乘除关系变换为加减,便于工程中的运算。,后边的Matlab程序传递的参数,都将功率值转换为了dB.
%均匀背景噪声
function [ xc ] = env_uniform(variance, shape, power_db, show_out)c=10^(power_db/10); % power_db这里是幅度对应功率tes=random('Normal',0,variance,1,shape);xc=c + tes; if show_out==1plot(10.*log10(abs(xc)));end
end
下面这个function也是输出噪声矩阵,只不过输出的噪声类型是杂波边缘背景噪声,即由多个不同均值的的噪声拼接而成,因此输入的平均dB也是一个具有多个元素的一维向量。
%杂波边缘背景噪声
function [ xc ] = env_edge(variance, shape, power_db, show_out)c=10.^(power_db./10); % 这里是幅度——功率xc=random('Normal',0,variance,1,shape(1,end)); xc(1,1:end)=xc(1,1:end)+c(1,1);index=1;for i=1:length(power_db)xc(1,index:shape(1,i))=xc(1,index:shape(1,i)).*c(1,i)./c(1,1);index=shape(1,i)+1;endif show_out==1plot(20.*log10(abs(xc)));end
end
恒虚警率算法
到了最重要的CFAR算法实现了,本篇文章讨论最常见的均值类算法,核心思想是通过对参考窗内采样数据取平均来估计背景噪声功率。被检测单元由保护单元与训练单元所包围,保护单元不参与计算噪声平均功率。算法利用保护单元计算平均功率,然后再乘以用虚警概率确定的系数
,最终得出针对当前检测单元的判决阈值。

CA-CFAR、GO-CFAR、SO-CFAR算法这三个是最经典的均值类CFAR算法,后续有其变形log-CFAR算法但是原理是相同的👀。

下面是这三种算法的Matlab实现,输入信号,训练单元数,保护单元数,以及恒定的虚警概率,输出与信号尺寸一样的阈值曲线。
function [ index, XT ] = cfar_ac( xc, N, pro_N, PAF)alpha=N.*(PAF.^(-1./N)-1);index=1+N/2+pro_N/2:length(xc)-N/2-pro_N/2;XT=zeros(1,length(index));for i=indexcell_left=xc(1,i-N/2-pro_N/2:i-pro_N/2-1);cell_right=xc(1,i+pro_N/2+1:i+N/2+pro_N/2);Z=(sum(cell_left)+sum(cell_right))./N;XT(1,i-N/2-pro_N/2)=Z.*alpha;end
endfunction [ index, XT ] = cfar_go( xc, N, pro_N, PAF)alpha=N.*(PAF.^(-1./N)-1);index=1+N/2+pro_N/2:length(xc)-N/2-pro_N/2;XT=zeros(1,length(index));for i=indexcell_left=xc(1,i-N/2-pro_N/2:i-pro_N/2-1);cell_right=xc(1,i+pro_N/2+1:i+N/2+pro_N/2);Z=max([mean(cell_left),mean(cell_right)]);XT(1,i-N/2-pro_N/2)=Z.*alpha;end
endfunction [ index, XT ] = cfar_so( xc, N, pro_N, PAF)alpha=N.*(PAF.^(-1./N)-1);index=1+N/2+pro_N/2:length(xc)-N/2-pro_N/2;XT=zeros(1,length(index));for i=indexcell_left=xc(1,i-N/2-pro_N/2:i-pro_N/2-1);cell_right=xc(1,i+pro_N/2+1:i+N/2+pro_N/2);Z=min([mean(cell_left),mean(cell_right)]);XT(1,i-N/2-pro_N/2)=Z.*alpha;end
end
三种算法在目标检测方面各有优缺点,总结如下表🔢:
算法名称 | 优点 | 缺点 |
CA-CFAR(单元平均恒虚警) | 损失率最少的一种算法 | 多目标遮掩,杂波边缘性能也欠佳 |
GO-CFAR(最大选择恒虚警) | 杂波边缘区域虚警概率降低 | 多目标遮掩 |
SO-CFAR(最小选择恒虚警) | 多目标效果有改进; | 杂波边缘区域虚警概率提升 |
算法测试程序
最后要讲述的Matlab程序,是一段针对这三个算法其中一个算法的测试程序。程序模拟单目标,使用均匀噪声背景,噪声20dB,目标的信噪比是15dB。程序使用之前介绍的Function,最终画出信号曲线与阈值曲线。
clc
clear all
close allshape=[200];
variance=200;
noise_db=20;
noise_p=10.^(noise_db./10);
show_out=0;
[ xc ] = env_uniform(variance, shape, noise_db,show_out);SNR1=15; signal1_p=10.^(SNR1./10).*noise_p;
xc(1,90)=signal1_p;
N=36;
pro_N=2;
PAF=10^(-4);
[ index, XT ] = cfar_so( abs(xc), N, pro_N, PAF);
%[ index, XT ] = cfar_go( abs(xc), N, pro_N, PAF);
%[ index, XT ] = cfar_ac( abs(xc), N, pro_N, PAF);figure(3);
plot(10.*log10(abs(xc))),hold on;
plot(index,10.*log10(abs(XT))),hold on;
legend('噪声pdf','信号pdf')
Matlab程序执行结果如下:

我们还可以针对杂波边缘背景噪声来试验不同算法在杂波的边缘的性能,我们也可以往噪声中多叠加一些不同信噪比的目标来观察不同算法在多目标情况下的效果。点击这里跳转到一个github上一个利用MATLAB GUI设计平台,设计多算法雷达一维恒虚警检测CFAR可视化界面的项目代码。
加速核嵌入式软件配置
下面的某平台针对Cfar加速核的配置代码段:
void BB_CFAR_Init(void){cfarCfg0_st.wrapDirA = CFAR_CFG0_WRAPDIR_INC;cfarCfg0_st.wrapDirB = CFAR_CFG0_WRAPDIR_INC;cfarCfg0_st.sumMode = CFAR_CFG0_SUMMODE_ABS;cfarCfg0_st.interCnt = USE_RANGE;cfarCfg0_st.intraCnt = NUM_VEL;cfarCfg0_st.thresDiv = CFAR_CFG0_THRESDIV4; // = searchSize numcfarCfg0_st.divFac = CFAR_CFG0_DIVFAC1;cfarCfg0_st.mulFac = r2_str.cfarThV;cfarCfg0_st.searchSize = r2_str.cfarThVS;cfarCfg0_st.guardSize = r2_str.cfarThVG;cfarCfg0_st.totalSize = cfarCfg0_st.searchSize+cfarCfg0_st.guardSize;cfarCfg0_st.pdEn = CFAR_CFG0_PEAKDET_DIS; cfarCfg0_st.cfarMode = CFAR_CFG0_CFARMODE_GO;BB_CFAR_CFG0(&cfarCfg0_st); //STRUCT_CFAR_CFG0BB_CFAR_CFG1(CFAR_MAX_NUM,NUM_BYTE32); //interIncBB_CFAR_CFG2(bb_prep.cfg2.jumpInc,FFT2D_CACHE_ADDR+USE_RANGE*CFAR_ANT*NUM_BYTE32);//intraInc,intraAddrBB_CFAR_CFG3((FFT2D_CACHE_ADDR+USE_RANGE*CFAR_ANT*NUM_BYTE32+(NUM_VEL-cfarCfg0_st.totalSize)*bb_prep.cfg2.jumpInc),FFT2D_CACHE_ADDR+USE_RANGE*CFAR_ANT*NUM_BYTE32);//wrapAddrA,wrapAddrBBB_CFAR_CFG4(CFAR_CACHE_ADDR);//dstBaseAddr
}
其中searchSize 对应的是训练单元的大小,guardSize是保护单元,等于上面Matlab程序中的alpha,即阈值系数。
需要与searchSize保持一致。加速核支持不同算法的选择,这里cfarMode选择的是GO-CFAR。
此平台默认的将采样的窗口滑动的模式配置称为环状,即第一个检测点的左窗由信号末尾部分充当,最后一个检测点的右窗由信号的起始部分充当。

最后,我们可能会针对项目的技术需求调整CFAR的参数,这就需要我们知道这些参数和一些概念相互如何影响,下面简单的总结一些参数调整的影响。
检测单元数N:在相同信噪比下,检测单元数越多的CFAR对应的检测概率越高,但同时计算量加大。
保护单元数:保护单元过大或过小都会使检测概率降低,应不同实验选取适中的保护单元数。
虚警概率
:在相同检测单元数目下,虚警概率的越高CFAR对应的检测概率越高,但虚警数也增多。
信噪比SNR:当信噪比不断增加,检测概率也不断增加。
相关文章:

雷达编程实战之恒虚警率(CFAR)检测
在雷达系统中,目标检测是一项非常重要的任务。检测本身非常简单,它将信号与阈值进行比较,超过阈值的信号则认为是目标信号,所以目标检测的真正工作是寻找适当的阈值。由于目标误检的严重后果,因此雷达系统希望有一个检…...

Github隐藏功能:显示自己的README,Github 个人首页的 README,这样玩儿
内容概览 前言创建仓库修改 README 的内容总结前言 大家最近有没有发现这个现象,有些名人的 Github 首页变得更丰富了?尤其是那个夺目的 README 板块!!! 请看,这是 iOS 喵神 的 Github 首页: …...
@JsonSerialize—优雅地封装返回值
1.场景项目开发中给前端提供查询接口时,经常遇到需要将从数据库中取出来的字段值做一层重新封装。比如数据库中存的状态值是数字,返回给前端的时候,前端并不知道这个数值代表什么意思。此时,有两种方式:(1&…...

【Python网络编程】利用Python进行TCP、UDP套接字编程
之前实现了Java版本的TCP和UDP套接字编程的例子,于是决定结合Python的学习做一个Python版本的套接字编程实验。 流程如下: 1.一台客户机从其标准输入(键盘)读入一行字符,并通过其套接字将该行发送到服务器。 2.服务…...

fuzz测试之libfuzzer使用小结
fuzz测试之libfuzzer使用小结背景基本原理使用方法主调DEMO参考资料背景 项目中,为测试算法的鲁棒性,经常会用到fuzz测试进行压力测试。fuzz测试是一种模糊测试方法,本质是通过灌入各种变异的随机数据,去遍历不同函数分支…...

电子标签拣货系统——外接供电版
Power_DC24v 型号:Power_DC24v24V电源适配器级联线:长30cm直径:15mmCK_Wire_V1 型号:CK_Wire_V1连接电源适配器级联线:长30cm公线:长宽厚 14*11*9mm母线:长宽厚 13*5.5*3mmCK_Wire_V2 型号&…...

为什么启动一个线程不用run()方法,而是用start()方法
在使用java多线程时,有三种方式创建线程 复习传送门 当使用继承Thread来实现多线程时, 我们会把线程执行的代码写在run() 方法中, 使用Thread的start()方法来启动一个线程。 代码如下: public class ThreadDemo extends Thread{O…...

Java File相关操作
文章目录File文件操作IO流处理流缓冲流转换流对象流File文件操作 利用File类来操作。 文件操作中常用到相对目录和绝对路径 package org.File; import java.io.File; public class demo01 { public static void main(String[] args) { try{ File file new File("…...

LabVIEW利用矢量量化直方图开发人脸识别
LabVIEW利用矢量量化直方图开发人脸识别通常,人脸识别系统会检查场景的静止图像或视频图像,然后使用存储的人脸数据库识别或验证场景中的一个或多个人。我程序专注于静止图像人脸识别,使用来自众所周知的人脸数据库的人脸图像,用于…...

RK3568工业开发板工控板说明
说明HW356X-GKA是采用中高端的通用型 SOC,一款基于Rockchip公司RK3568处理器的工控主板。主板标配处理器为Cortex-A55四核,最高主频2GHz的RK3568处理器,内置4GB DDR4内存(最大8GB),32GB eMMC存储。集成4核 arm架构 A55 处理器和Ma…...

JavaScript Web API 来构建你不了解的网站
随着技术的日新月异,为开发人员提供了令人难以置信的新工具和API。 但据了解,在100 多个 API中,只有5%被开发人员积极使用。 随着技术的日新月异,为开发人员提供了令人难以置信的新工具和API。但据了解,在100 多个 A…...

KeePass敏感信息明文传输漏洞复现 (CVE-2023-24055)
一、漏洞描述 漏洞简述 KeePass 是一款免费的开源密码管理器,可帮助您以安全的方式管理您的密码。您可以将所有密码存储在一个数据库中,该数据库由一把万能钥匙锁定。因此,您只需记住一个主密钥即可解锁整个数据库。数据库文件使用目前已知…...
Android 11 中的权限更新
官网:https://developer.android.com/about/versions/11/privacy/permissions#audit-by-feature Android 11 使用户能够为位置、麦克风和摄像头指定更精细的权限。此外,系统会重置针对 Android 11 或更高版本的未使用应用程序的权限,如果应用…...

october-cms
环境准备 靶机链接:百度网盘 请输入提取码 提取码:3e4s 虚拟机网络链接模式:桥接模式 攻击机系统:kali linux 2021.1 信息收集 1.探测目标靶机ip。 2.探测靶机开放端口和服务情况。 漏洞探测 1.访问网页 2.用dirsearch扫描…...

抖音怎样报白?报白需要审核哪些资料呢
抖音怎样报白?报白需要审核哪些资料呢 抖音报白需要什么资料,翡翠原石产品如何开通报白#报白#小店报白#小店运营#抖音#抖音小店运营 文/专栏作家百收 随着抖音在国内流行起来,抖音上每天会有大量的视频更新,越来越多的年轻人也加…...
Spring中的AOP
Spring中的AOP 文章目录Spring中的AOPAOP概述相关术语总结作用AOP概述 AOP(Aspect Programming) 是一种设计思想,是面向切面编程思想 跟OOP(面向对象编程)有什么关系呢? AOP面向切面编程然后是OOP(面向对象编程)的补充和完善。…...

文件系统与动静态库的基本了解
目录文件系统与动静态库的基本了解文件系统了解Access Modify Changeinode硬链接软链接静态库与动态库概念静态库的制作使用静态库动态库的制作使用动态库总结如何制作文件系统与动静态库的基本了解 文件系统 了解Access Modify Change 当文件没有被打开时,他们存…...
netty——IO、NIO、AIO进化之路
IO、NIO、AIO进化之路BIO——同步阻塞IO伪异步阻塞IONIO——同步非阻塞IOAIO——异步IO总结本文会说明各种IO的特点、分别解决了什么样的问题做一个分析阐述,并结合Java代码例子来辅助理解,像这些的历史演进和详细的底层原理网上很多,所以我们…...

AI稳定生成图工业链路打造
前沿这篇文章会以比较轻松的方式,跟大家交流下如何控制文本生成图片的质量。要知道如何控制文本生成质量,那么我们首先需要知道我们有哪些可以控制的参数和模块。要知道我们有哪些控制的参数和模块,我们就得知道我们文本生成图片的这架机器或…...

20230220华南金牌主板u盘启动
20230220华南金牌主板u盘启动 2023/2/20 10:29 百度搜索:华南金牌主板u盘启动 https://www.zhihu.com/question/498121895?utm_id0 华南金牌主板b85u盘启动怎么设置? 华南金牌主板b85u盘启动怎么设置 海的那边 上小学后才发现还是幼儿园好混…… 华南一般是F7和F1…...

【JavaWeb】Docker项目部署
引言 之前学习了Linux操作系统的常见命令,在Linux上安装软件,以及如何在Linux上部署一个单体项目,大多数同学都会有相同的感受,那就是麻烦。 核心体现在三点: 命令太多了,记不住 软件安装包名字复杂&…...

C++ Visual Studio 2017厂商给的源码没有.sln文件 易兆微芯片下载工具加开机动画下载。
1.先用Visual Studio 2017打开Yichip YC31xx loader.vcxproj,再用Visual Studio 2022打开。再保侟就有.sln文件了。 易兆微芯片下载工具加开机动画下载 ExtraDownloadFile1Info.\logo.bin|0|0|10D2000|0 MFC应用兼容CMD 在BOOL CYichipYC31xxloaderDlg::OnIni…...

Springboot社区养老保险系统小程序
一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,社区养老保险系统小程序被用户普遍使用,为方…...

算法笔记2
1.字符串拼接最好用StringBuilder,不用String 2.创建List<>类型的数组并创建内存 List arr[] new ArrayList[26]; Arrays.setAll(arr, i -> new ArrayList<>()); 3.去掉首尾空格...

基于SpringBoot在线拍卖系统的设计和实现
摘 要 随着社会的发展,社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。 在线拍卖系统,主要的模块包括管理员;首页、个人中心、用户管理、商品类型管理、拍卖商品管理、历史竞拍管理、竞拍订单…...
华为OD最新机试真题-数组组成的最小数字-OD统一考试(B卷)
题目描述 给定一个整型数组,请从该数组中选择3个元素 组成最小数字并输出 (如果数组长度小于3,则选择数组中所有元素来组成最小数字)。 输入描述 行用半角逗号分割的字符串记录的整型数组,0<数组长度<= 100,0<整数的取值范围<= 10000。 输出描述 由3个元素组成…...
flow_controllers
关键点: 流控制器类型: 同步(Sync):发布操作会阻塞,直到数据被确认发送。异步(Async):发布操作非阻塞,数据发送由后台线程处理。纯同步(PureSync…...
统计学(第8版)——统计抽样学习笔记(考试用)
一、统计抽样的核心内容与问题 研究内容 从总体中科学抽取样本的方法利用样本数据推断总体特征(均值、比率、总量)控制抽样误差与非抽样误差 解决的核心问题 在成本约束下,用少量样本准确推断总体特征量化估计结果的可靠性(置…...

【见合八方平面波导外腔激光器专题系列】用于干涉光纤传感的低噪声平面波导外腔激光器2
----翻译自Mazin Alalus等人的文章 摘要 1550 nm DWDM 平面波导外腔激光器具有低相位/频率噪声、窄线宽和低 RIN 等特点。该腔体包括一个半导体增益芯片和一个带布拉格光栅的平面光波电路波导,采用 14 引脚蝶形封装。这种平面波导外腔激光器设计用于在振动和恶劣的…...
编程笔记---问题小计
编程笔记 qml ProgressBar 为什么valuemodel.progress / 100 在QML中,ProgressBar的value属性用于表示进度条的当前进度值,其范围通常为0到1(或0%到100%)。当使用model.progress / 100来设置value时,这样做的原因是为…...