雷达编程实战之恒虚警率(CFAR)检测

news2024/9/21 23:41:37
在雷达系统中,目标检测是一项非常重要的任务。检测本身非常简单,它将信号与阈值进行比较,超过阈值的信号则认为是目标信号,所以目标检测的真正工作是寻找适当的阈值。由于目标误检的严重后果,因此雷达系统希望有一个检测阈值,该阈值不仅能最大限度地提高检出概率,而且能将误报概率保持在预设水平以下。
有大量的文献对使用多个接收信号样本检测高斯白噪声中的信号的情况进行了分析,并获得了一些众所周知的结果,然而,所有这些经典结果都基于理论概率,并且仅限于具有已知方差与期望的高斯白噪声。在实际应用中,噪声通常是有色的,其功率是未知的 🌒。

本文介绍了雷达编程中常会遇到的目标检测技术---CFAR(Constant False-Alarm Rate),还是笔者的老习惯,先来过一下文中涉及的一些公式以及解释📌。

  1. ,这个公式我们后边称为公式一,它计算具有已知方差与期望的高斯白噪声符合虚警概率为的阈值T。的反函数,erf可在matlab中直接使用,定义是是噪声的标准差,是数学期望,而为阈值。

  1. ,这个公式我们称之为公式二,它反映了阈值与根据给定的检测窗口(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==1
        plot(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;
    end
    if show_out==1
       plot(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=index
        cell_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
end

function [ 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=index
        cell_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
end

function [ 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=index
        cell_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 all


shape=[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 num
        cfarCfg0_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_CFG0
        BB_CFAR_CFG1(CFAR_MAX_NUM,NUM_BYTE32); //interInc
        BB_CFAR_CFG2(bb_prep.cfg2.jumpInc,FFT2D_CACHE_ADDR+USE_RANGE*CFAR_ANT*NUM_BYTE32);//intraInc,intraAddr
        BB_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,wrapAddrB
        BB_CFAR_CFG4(CFAR_CACHE_ADDR);//dstBaseAddr
}

其中searchSize 对应的是训练单元的大小,guardSize是保护单元,等于上面Matlab程序中的alpha,即阈值系数。需要与searchSize保持一致。加速核支持不同算法的选择,这里cfarMode选择的是GO-CFAR。

此平台默认的将采样的窗口滑动的模式配置称为环状,即第一个检测点的左窗由信号末尾部分充当,最后一个检测点的右窗由信号的起始部分充当。

最后,我们可能会针对项目的技术需求调整CFAR的参数,这就需要我们知道这些参数和一些概念相互如何影响,下面简单的总结一些参数调整的影响。

  • 检测单元数N:在相同信噪比下,检测单元数越多的CFAR对应的检测概率越高,但同时计算量加大。

  • 保护单元数:保护单元过大或过小都会使检测概率降低,应不同实验选取适中的保护单元数。

  • 虚警概率:在相同检测单元数目下,虚警概率的越高CFAR对应的检测概率越高,但虚警数也增多。

  • 信噪比SNR:当信噪比不断增加,检测概率也不断增加。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/359298.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Python网络编程】利用Python进行TCP、UDP套接字编程

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

2023最新版本会声会影下载及新增功能详情

会声会影在用户的陪伴下走过23余载,经过上百个版本的优化迭代,已将操作极大简易化,会声会影拥有公认的上手口碑。只需将想要的效果拖拽到轨道上,一拖一放间快速成片。专业工具助力视频剪辑操作简单,功能同样强大&#…

数据库事务AICD以及隔离级别

目录一.事务的ACID二.隔离级别三.并发事务中的问题1.脏写2.脏读3.不可重复读4.幻读四.MVCC机制五.读锁与写锁六.大事务的影响七.事务优化一.事务的ACID 原子性(Atomicity):一个事务中的所有操作,要么全部成功,要么失败全部回滚,不…

什么是压敏电阻

下面的这些都是压敏电阻,常常用在一些电源和信号的浪涌防护电路中。这个是它的电路符号,电路中常用RV表示。当压敏电阻两端电压小于压敏电压时,压敏电阻相当于一个阻值非常大的电阻。当压敏电阻两端电压大于压敏电压时,压敏电阻相…

【数据结构】——环形队列

文章目录一.环形队列的定义及其特点二.使用数组来实现环形队列1.创建一个队列2.初始化队列3. 判断环形队列是否为空4.判断环形队列是否已满5. 向循环队列插入元素,插入成功返回真6.删除环形链表的数据7. 取队头元素8.取队尾元素8.释放空间总结一.环形队列的定义及其…

集算器连接外部库

1. 配置jar包将以下jar包从报表的类路径(【安装根目录】\report\lib或【安装根目录】\report\web\webapps\demo\WEB-INF\lib)中拷贝到集算器目录(【安装根目录】\esProc\ extlib\mongoCli);润乾外部库核心jar为:scu-mo…

AI制药 - TMScore(US-align)、RMSD、Sequence 源码

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://blog.csdn.net/caroline_wendy/article/details/129125467 参考文档:Nature Methods | 蛋白、RNA、DNA及其复合物结构的比对算法US-align 官网地址:https://zhanggroup.org/US-align/ TMScore TMScore,…

【离散数学】2. 集合论

1.数理逻辑 2. 集合论 3. 代数系统 4. 图论 集合论:集合–>关系–>函数 n元组的理解:有n个集合,从每个集合中抽取一个元素,组成一个n元组 笛卡尔积的理解:笛卡尔积是n个集合能构成的所有互不相等的n元组的集合 …

软考考试真题精选

1、( )不属于项目范围说明书的内容A.项目的可交付成果 B.项目的假设条件 C.干系人清单 D.验收标准答案:C2、MPLS根据标记对分组进行交换,其标记中包含 ( ) 。…

使用maven搭建父子工程项目

创建父子工程,可以通过父工程来引入jar,定义统一的版本号等。更方便对整个项目的jar包实现统一化管理,让项目的层次更加清晰。一、创建父工程第一步:file–>new–>project–>maven默认使用jdk1.8,不引入任何j…

2.20计算机如何工作

一.计算机组成1.冯诺依曼体系CPU 中央处理器: 进行算术运算和逻辑判断.存储器: 分为外存和内存, 用于存储数据(使用二进制方式存储)输入设备: 用户给计算机发号施令的设备.输出设备: 计算机个用户汇报结果的设备内存和外存的区别(面试)访问速度:内存快,外存慢存储空间:内存小,外…

AI 看唇语,在嘈杂场景的语音识别准确率高达75%

事实上,研究表明视觉线索在语言学习中起着关键的作用。相比之下,人工智能语言识别系统主要是建立在音频上。而且需要大量数据来训练,通常需要数万小时的记录。 为了研究视觉效果,尤其是嘴部动作的镜头,是否可以提高语…

关于MySQL镜像构建过程中添加自动初始化数据库

需求描述一般而言,我们在拉取了 mysql 镜像并运行之后,其中的并不会存在我们自定义的数据库,都是在镜像运行后,自己主动导入数据库,那么有没有方式可以一运行 mysql 镜像,对应生成的 mysql 容器中就有我们自…

STM32 OTA应用开发——自制BootLoader

STM32 OTA应用开发——自制BootLoader 目录STM32 OTA应用开发——自制BootLoader前言1 环境搭建2 BootLoader工作原理以及常见分区介绍3 BootLoader的制作4 烧录下载配置5 运行测试结束语前言 什么是OTA? 百度百科:空中下载技术(Over-the-Ai…

【Java基础】IO流

IO流 最后一定要关闭流,防止资源泄露 字节流 一次读取1字节,8比特 FileInputStream import org.junit.jupiter.api.Test;import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException;public class CopyBytes {pub…

2023最新网络工程师面试大全,全都答得上offer绝对拿到手软

一、目录 TCP和UDP都可以实现客户端/服务端通信,这两个协议有何区别? 是第几层的协议,其作用是什么? 请说一下FTP,SSH,TELNET,DNS,HTTP,HTTPS,SMTP协议的端口…

我的三周年创作纪念日——学习不止,创作不停

机缘 最开始写文章博客,是为了用输出倒逼自己输入。 从校园离开后,才逐渐意识到学习的不容易。没有写好的教材课程、没有画好的考点重点,没有一起学习的同学,更没有明确的学习方向和路径。 数据分析方向可以学的东西太多了&…

SUMO安装并实现交通仿真Demo

sumo简介sumo是一种开源,微观,多模态的交通模拟仿真软件,每辆车都是明确建模的,有自己的路线,并在网络独立移动下载安装sumo前往sumo官网下载,如下图红色标注所示,一键安装。实现Demo3.1加载道路文件.net.x…

软件工程学习

文章目录前言软件特点分类软件工程软件危机项目管理工具总结前言 本博客仅做学习笔记,如有侵权,联系后即刻更改 科普: 软件 软件的定义 软件不是程序,而是程序、数据以及开发、使用和维护程序需要的所有文档的完整集合。 特点 …

100份简历才找一个合适的,2023,软件测试岗位饱和了吗?

各大互联网公司的接连裁员,政策限制的行业接连消失,让今年的求职雪上加霜,想躺平却没有资本,还有人说软件测试岗位饱和了,对此很多求职者深信不疑,因为投出去的简历回复的越来越少了。 另一面企业招人真的…