雷达信号处理——恒虚警检测(CFAR)

雷达信号处理的流程

雷达信号处理的一般流程:ADC数据——1D-FFT——2D-FFT——CFAR检测——测距、测速、测角。

雷达目标检测

首先要搞清楚什么是检测,检测就是判断有无。雷达在探测的时候,会出现很多峰值,这些峰值有可能是目标、噪声和干扰,那么就需要进行一种判决,来决定它是否属于目标。
雷达目标检测问题是利用信号的统计特性和噪声的统计特性解决在受噪声干扰的观测中,信号有无的判决问题。其数学基础就是统计判决理论,又称假设检验理论。假设检验是进行统计判决的重要工具,信号检测相当于数理统计中的假设检验。

恒虚警检测概念

假设就是检验对象的可能情况或状态。对于雷达检测来说,可以选用两个假设,即目标存在或不存在。用 H 0 H_0 H0 H 1 H_1 H1分别表示接收机的无信号输入和有信号输入的假设,用 D 0 D_0 D0 D 1 D_1 D1和分别表示检测器作出无信号和有信号的判决结果。于是接收机的输入与检测器的判决将有四种情况:
(1) H 0 H_0 H0为真,判为 D 0 D_0 D0,即接收机无信号输入, 检测器判为无信号, 其概率称为正确不发现概率 P a n P_{an} Pan
(2) H 0 H_0 H0为真, 判为 D 1 D_1 D1, 即接收机无信号输入, 检测器判为有信号, 其概率称为虚警概率 P f a P_{fa} Pfa
(3) H 1 H_1 H1为真, 判为 D 0 D_0 D0,即接收机有信号输入, 检测器判为无信号, 其概率称为漏警概率 P l a P_{la} Pla
(4) H 1 H_1 H1为真, 判为 D 1 D_1 D1,即接收机有信号输入, 检测器判为有信号, 其概率称为正确检测概率 P d P_{d} Pd
我们希望的是正确不发现概率 P a n P_{an} Pan和真确检测概率 P d P_{d} Pd越高越好,而虚警概率 P f a P_{fa} Pfa和漏警概率 P l a P_{la} Pla越低越好。
恒虚警检测,又称CFAR,全称是Constant False Alarm Rate Detector,是雷达目标检测的一种常见的手段。CFAR检测算法属于信号检测中的自动检测算法,在雷达信号处理中主要应用的有四种,即CA-CFAR、SO-CFAR、GO-CFAR、WCA-CFAR。

恒虚警检测算法

首先,指定一个距离多普勒单元,称为检测单元(CUT, cell under test),为了判断检测单元处是否存在目标,需要设定一个阈值 T T T,当检测单元处的检测值 Y Y Y大于 T T T时,判断为有目标,否则判断为没有目标:
d ( Y ) = { 有目标, Y ≥ T 无目标, Y < T . d(Y)= \left\{ \begin{array}{ll} 有目标,Y\geq T\\ 无目标,Y< T. \end{array} \right. d(Y)={有目标,YT无目标,Y<T.
具体的做法是先在测试单元的周围放置保护单元,以消除信号在测试单元周围的多余能量,然后再保护单元的周围选择参考单元:
在这里插入图片描述

图1 恒虚警检测的单元分布

上图展示的是同时在距离维和多普勒维进行恒虚警检测的原理,如果只是在距离维或多普勒维做CFAR,检测单元的左右两侧均有设定好数量的保护单元和参考单元。
恒虚警检测选择均值类自适应门限 CFAR 检测技术,其中单元平均方式(CA-CFAR)、两侧单元平均 选大方式(GO-CFAR)、两侧单元平均选小方式 (SO-CFAR) 三种方法在主瓣多目标的背景下,检测性能都有所下降,容易出现漏警和漏检小信号源。单限切除恒虚警概率方法
(E-CFAR),在主瓣多目标的背景下,具有较好的检 测性能。E-CFAR 方法是在进行单元平均之前设置切 除上限,切除信号的强分量,从而避免对小信号源 漏检,防止对信源数目的估计出现偏差。
如果是CA-CFAR,则取左右两边的参考单元的均值再取平均值,然后与 α \alpha α相乘( α \alpha α计算公式如下方公式),再将结果与阈值相比较。如果大于阈值则代表有目标,否则认为无目标。
在这里插入图片描述

图2 一维恒虚警检测的阈值计算方法

从上图可以看到,由于待检单元左侧还有几个单元,所以做完恒虚警检测之后会使得序列变短,这个和深度学习中的卷积类似。要想使得不变短的话可以采取补零法或者翻转法来实现。
从图中也可以看到,根据阈值的选择不同,有不同的检测器,其中CA-CFAR是取的参考单元的均值,SO-CFAR取的是参考单元的最小值,而GO-CFAR是取的参考单元的最大值。
其中最重要的是门限因子 α \alpha α的计算方法:
α = N ( P f a − 1 N − 1 ) \alpha = N(P_{fa}^{-\frac{1}{N}}-1) α=N(PfaN11)

恒虚警检测matlab编程

不同的CFAR检测器适用于不同的场景,CA-CFAR算法适用于均匀环境中的单目标或彼此相距较远的多目标环境,在邻近多目标环境会发生目标的遮蔽效应,在杂波边缘会发生杂波边缘效应。
下面是不进行补零操作的CA-CFAR的程序:

function [position, threshold, start_cell, stop_cell] = cacfar(signal, Pfa, ref_num, guard_num)
% ======>INPUT:
% signal: Data of signal(include signal and noise).[DATATYPE: row vector]
% Pfa: Probability of false alarm.[DATATYPE: scalar]
% ref_num: Number of reference cell.[DATATYPE: scalar]
% guard_num: Number of guard cell.[DATATYPE: scalar]
% ======>OUTPUT:
% position: positions of target.[DATATYPE: row vector]
% threshold: CFAR threshold of input signal.[DATATYPE: row vector]
position = [];
left_num = guard_num + ref_num;
start_cell = left_num + 1;
stop_cell = length(signal) - left_num;
N = 2*ref_num;
alpha = N * (Pfa ^ (-1/N) - 1);
threshold = zeros(1, stop_cell - start_cell + 1);
for ii = start_cell : stop_celltmp_data = [signal(ii-left_num : ii-guard_num-1), ...signal(ii+guard_num+1 : ii+left_num)];mean(tmp_data);tmp = mean(tmp_data) * alpha;% threshold(ii - left_num)tmp;threshold(ii - left_num) = tmp;if tmp < signal(ii)position = [position, ii];end
end
return

下面是进行补零操作的CA-CFAR的程序:

function [position, threshold] = MYCACFAR(signal, Pfa, ref_num, guard_num)
% 该函数用于进行CA-FAR恒虚警检测,在信号首位两端进行补零,使得输出的阈值序列和信号长度一致
% ======>INPUT:
% signal: Data of signal(include signal and noise).[DATATYPE: row vector]
% Pfa: Probability of false alarm.[DATATYPE: scalar]
% ref_num: Number of reference cell.[DATATYPE: scalar]
% guard_num: Number of guard cell.[DATATYPE: scalar]
% ======>OUTPUT:
% position: positions of target.[DATATYPE: row vector]
% threshold: CFAR threshold of input signal.[DATATYPE: row vector]
position = []; %存储高于检测门限的信号区域的位置
left_num = guard_num + ref_num; %检测单元两边的单元数
sigLen = length(signal); %信号长度
tempSig = zeros(1,sigLen+2*left_num); %补零后的信号向量
tempSig((left_num + 1) :(sigLen + left_num)) = signal; %对中间部分进行信号的赋值,首位两端各有left_num个零值
N = 2*ref_num; %参考单元总数
alpha = N * (Pfa ^ (-1/N) - 1); %门限因子,横虚警概率越小,参考单元数越多,因子越大,检测阈值也越大
threshold = zeros(1, sigLen); %用于储存检测阈值
for ii = 1 : 1 :sigLencentNum = ii+left_num; %对应的检测单元下标tmp_data = [tempSig((centNum-left_num):(centNum-guard_num-1)), ...tempSig((centNum+guard_num+1):(centNum+left_num))]; %取检测单元的值tmp = mean(tmp_data) * alpha; %与门限因子相乘得到检测阈值threshold(ii) = tmp; %进行存储if tmp < signal(ii) %阈值小于信号position = [position, ii];  %存储被检测到的下标end
end
return

下面是进行翻转补充首位的操作的CA-CFAR的程序:

function [position, threshold] = MYCACFAR2(signal, Pfa, ref_num, guard_num)
% 该函数用于进行CA-FAR恒虚警检测,在信号首位两端进行翻转,使得输出的阈值序列和信号长度一致
% ======>INPUT:
% signal: Data of signal(include signal and noise).[DATATYPE: row vector]
% Pfa: Probability of false alarm.[DATATYPE: scalar]
% ref_num: Number of reference cell.[DATATYPE: scalar]
% guard_num: Number of guard cell.[DATATYPE: scalar]
% ======>OUTPUT:
% position: positions of target.[DATATYPE: row vector]
% threshold: CFAR threshold of input signal.[DATATYPE: row vector]
position = []; %存储高于检测门限的信号区域的位置
left_num = guard_num + ref_num; %检测单元两边的单元数
sigLen = length(signal); %信号长度
tempSig = zeros(1,sigLen+2*left_num); %补零后的信号向量
tempSig(1:left_num) = signal(1:left_num);
tempSig(sigLen + left_num+1:end) = signal(sigLen-left_num+1:end);
tempSig((left_num + 1) :(sigLen + left_num)) = signal; %对中间部分进行信号的赋值,首位两端各有left_num个零值
N = 2*ref_num; %参考单元总数
alpha = N * (Pfa ^ (-1/N) - 1); %门限因子,横虚警概率越小,参考单元数越多,因子越大,检测阈值也越大
threshold = zeros(1, sigLen); %用于储存检测阈值
for ii = 1 : 1 :sigLencentNum = ii+left_num; %对应的检测单元下标tmp_data = [tempSig((centNum-left_num):(centNum-guard_num-1)), ...tempSig((centNum+guard_num+1):(centNum+left_num))]; %取检测单元的值tmp = mean(tmp_data) * alpha; %与门限因子相乘得到检测阈值threshold(ii) = tmp; %进行存储if tmp < signal(ii) %阈值小于信号position = [position, ii];  %存储被检测到的下标end
end
return

下面是仿真结果:
在这里插入图片描述

图2 单目标脉冲压缩结果及CA-CFAR阈值图

对目标峰值部分局部放大后
在这里插入图片描述

图3 局部放大

附录

二维CFAR 仿真代码地址:https://github.com/tooth2/2D-CFAR

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

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

相关文章

C++学习笔记(三十三):c++ 宏定义

本节对c的宏定义进行描述。c使用预处理器来对宏进行操作&#xff0c;我们可以写一些宏来替换代码中的问题&#xff0c;c的宏是以#开头&#xff0c;预处理器会将所有的宏先进行处理&#xff0c;之后在通过编译器进行编译。宏简单说就是文本替换&#xff0c;可以替换代码中的任何…

Rhinoceros 8(犀牛8)中文授权版支持Win/Mac

Rhinoceros 8&#xff0c;也称为犀牛8&#xff0c;是一款专业的三维建模软件&#xff0c;深受设计师们的喜爱。这款软件为设计师提供了无限的创意空间和强大的工具&#xff0c;无论他们是产品设计师、建筑师还是工业设计师。 Rhinoceros 8采用了先进的NURBS建模技术&#xff0c…

基于JavaWeb+BS架构+SpringBoot+Vue+Hadoop短视频流量数据分析与可视化系统的设计和实现

基于JavaWebBS架构SpringBootVueHadoop短视频流量数据分析与可视化系统的设计和实现 文末获取源码Lun文目录前言主要技术系统设计功能截图订阅经典源码专栏Java项目精品实战案例《500套》 源码获取 文末获取源码 Lun文目录 目  录 目  录 I 1绪 论 1 1.1开发背景 1 1.2开…

k8s集群配置NodeLocal DNSCache

一、简介 当集群规模较大时&#xff0c;运行的服务非常多&#xff0c;服务之间的频繁进行大量域名解析&#xff0c;CoreDNS将会承受更大的压力&#xff0c;可能会导致如下影响&#xff1a; 延迟增加&#xff1a;有限的coredns服务在解析大量的域名时&#xff0c;会导致解析结果…

Python 语言基础

目录 Python 语言基础语法特点注释缩进规范编写规则命名规范 变量保留字与标识符Python中的变量定义变量 基本数据类型数字字符串Bool类型数据类型转换 输入和输出input&#xff08;&#xff09;输入print 输出 Python 语言基础 语法特点 注释 单行注释&#xff0c;语法如下…

transbigdata笔记:数据栅格化

1 area_to_grid 在边界或形状中生成矩形栅格 1.1 主要使用方法 transbigdata.area_to_grid(location, accuracy500, methodrect, paramsauto) 1.2 主要参数 location (bounds(List) or shape(GeoDataFrame) 生成栅格的位置。 如果边界为 [lon1&#xff0c; lat1&#xff0…

从传统训练到预训练和微调的训练策略

目录 前言1 使用基础模型训练手段的传统训练策略1.1 随机初始化为模型提供初始点1.2 目标函数设定是优化性能的关键 2 BERT微调策略: 适应具体任务的精妙调整2.1 利用不同的representation和分类器进行微调2.2 通过fine-tuning适应具体任务 3 T5预训练策略: 统一任务形式以提高…

[BJDCTF2020]ZJCTF,不过如此

题目源码&#xff1a; <?phperror_reporting(0); $text $_GET["text"]; $file $_GET["file"]; if(isset($text)&&(file_get_contents($text,r)"I have a dream")){echo "<br><h1>".file_get_contents($tex…

数据分析基础之《pandas(1)—pandas介绍》

一、pandas介绍 1、2008年Wes McKinney&#xff08;韦斯麦金尼&#xff09;开发出的库 2、专门用于数据分析的开源python库 3、以numpy为基础&#xff0c;借力numpy模块在计算方面性能高的优势 4、基于matplotlib能够简便的画图 5、独特的数据结构 6、也是三个单词组合而…

使用numpy处理图片——图片拼接

大纲 左右拼接上下拼接 在《使用numpy处理图片——图片切割》一文中&#xff0c;我们介绍了如何使用numpy将一张图片切割成4部分。本文我们将反其道而行之&#xff0c;将4张图片拼接成1张图片。 基本的思路就是先用两张图以左右结构拼接成上部&#xff0c;另外两张图也以左右拼…

ansible从入门到精通(完整篇)

文章目录 01 Ansible介绍与安装1. 介绍 Ansible1.1 什么是 Ansible?1.2 Ansible 无需代理1.3 Ansible 方式 2. 安装 Ansible2.1 控制节点2.2 受管主机2.3 基于Windows的受管主机2.4 受管网络设备2.5 安装Ansible 02 部署Ansible1. 构建Ansible清单1.1 定义清单1.2 使用静态清单…

Ubuntu20.04下A-LOAM配置安装及测试教程(包含报错问题踩坑)

参考文章&#xff1a; ubuntu20.04下ros运行A-LOAM Ubuntu20.04下运行LOAM系列&#xff1a;A-LOAM、LeGO-LOAM、SC-LeGO-LOAM、LIO-SAM 和 LVI-SAM 需要学习源码的同学可以下载LOAM论文 LOAM论文链接 1.需要安装的库文件 1.1Eigen 3.3 可以直接使用apt命令安装&#xff0c;或…

芯课堂 | 如何配置SWM系列系统时钟?

如何配置SWM系列 系统时钟&#xff1f; 华芯微特科技有限公司SWM系列芯片可通过软件配置改变时钟的速度&#xff0c;可以让我们的设计更加灵活,频率可选空间也更加广泛&#xff0c;用户可以根据自己的实际需求配置需要的系统时钟。为了让用户能够更简单的使用这一功能&#xf…

android studio使用总结

gradle是项目构建的工具&#xff0c;在gradle-wrapper.properties这个文件中设置&#xff0c; 然后就会下载相应版本的安装包到这个路径C:\Users\ly.gradle\wrapper\dists&#xff0c;例如这里是7.0.2&#xff0c; gradle和studio中的jdk版本需要对应&#xff0c;否则无法构建项…

无代码DIY图像检索

软件环境准备 可参见《HuggingFists-低代码玩转LLM RAG-准备篇》中的HuggingFists安装及Milvus安装。 流程环境准备 图片准备 进入HuggingFists内置的文件系统&#xff0c;数据源->文件系统->sengee_fs_settings_201创建Image文件夹将事先准备的多张相同或不同种类的图…

那么多编程语言,我为什么选择了Python?

我为什么选择了Python 目前&#xff0c;Python语言的发展势头在国内国外都是不可阻挡的&#xff0c;Python凭借其简单优雅的语法&#xff0c;强大的生态圈从众多语言中脱颖而出&#xff0c;如今已经是稳坐编程语言排行榜前三的位置&#xff0c;而且在GitHub和IEEE发布的最受欢…

Jenkins使用随笔

1、如果要部署的springboot程序和jenkins在同一台linux上&#xff0c;需要增加一条 export BUILD_IDtomcat_mobile_build_id 如下图&#xff1a; 原因是&#xff1a;jenkins在执行sh脚本的时候&#xff0c;如果脚本中有启动后台进程的情况&#xff0c;例如tomcat的关闭和启动…

C#上位机与欧姆龙PLC的通信11----【再爆肝】上位机应用开发(WPF版)

1、先上图 继上节完成winform版的应用后&#xff0c;今天再爆肝wpf版的&#xff0c;看看看。 可以看到&#xff0c;wpf的确实还是漂亮很多&#xff0c;现在人都喜欢漂亮的&#xff0c;颜值高的&#xff0c;现在是看脸时代&#xff0c;作为软件来说&#xff0c;是交给用户使用的…

Linux之Iptables简易应用

文档形成时期&#xff1a;2009-2024年 和iptables打交道有15年了&#xff0c;经过无数实践后&#xff0c;形成一个简易应用文档。 文档主题是简易应用&#xff0c;所以其原理不详述了。 因软件世界之复杂和个人能力之限&#xff0c;难免疏漏和错误&#xff0c;欢迎指正。 文章目…

C语言理解

目录 计算机语言算法C项目创建C程序框架经典实例 计算机语言 程序是用特殊的编程语言&#xff08;这里是C语言&#xff09;写出来表达如何解决问题的不是用编程语言来和计算机交谈&#xff0c;而是描述要求它如何做事情的过程或方法程序是问题的载体&#xff0c;程序的执行就是…