雷达信号处理——恒虚警检测(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)={有目标,Y≥T无目标,Y<T.
具体的做法是先在测试单元的周围放置保护单元,以消除信号在测试单元周围的多余能量,然后再保护单元的周围选择参考单元:

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

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

对目标峰值部分局部放大后

附录
二维CFAR 仿真代码地址:https://github.com/tooth2/2D-CFAR
相关文章:
雷达信号处理——恒虚警检测(CFAR)
雷达信号处理的流程 雷达信号处理的一般流程:ADC数据——1D-FFT——2D-FFT——CFAR检测——测距、测速、测角。 雷达目标检测 首先要搞清楚什么是检测,检测就是判断有无。雷达在探测的时候,会出现很多峰值,这些峰值有可能是目标…...
k8s的yaml文件中的kind类型都有哪些?(详述版Part1/2)
目录 综述 分块详述 1、Pod 2、Deployment 3、Service 4、DaemonSet 5、ReplicaSet 6、ServiceAccount 7、PodDisruptionBudget 8、PersistentVolumeClaim 9、PersistentVolume 10、Job 11、CronJob 12、StatefulSet 综述 通过yaml文件中的kind可以大致了解kube…...
企业培训系统源码:构建智能、可扩展的学习平台
企业培训系统在现代企业中扮演着至关重要的角色。本文将通过深度解析企业培训系统的源码,介绍如何构建一个智能、可扩展的学习平台,涉及关键技术和代码实例。 1. 技术栈选择与项目初始化 在构建企业培训系统之前,选择适当的技术栈是至关重…...
设计模式—行为型模式之状态模式
设计模式—行为型模式之状态模式 状态(State)模式:对有状态的对象,把复杂的“判断逻辑”提取到不同的状态对象中,允许状态对象在其内部状态发生改变时改变其行为。 状态模式包含以下主要角色: 环境类&am…...
Linux习题3
解析: grep:查找文件内的内容 gzip:压缩文件,文件经压缩后会增加 gz:扩展名 find:在指定目录下查找文件 解析: A hosts文件是Linux系统上一个负责ip地址与域名快速解析的文件,以…...
SpringBoot+策略模式实现多种文件存储模式
一、策略模式 背景 针对某种业务可能存在多种实现方式;传统方式是通过传统if…else…或者switch代码判断; 弊端: 代码可读性差扩展性差难以维护 策略模式简介 策略模式是一种行为型模式,它将对象和行为分开,将行…...
细说DMD芯片信号-DLP3
1, Block diagram 2. 信号介绍 2.1, LS interface: LD_Data_P/N(i), LD_CLK_P/N(i), LS_RDATA_A_BIST(O) 2.2, 视频信号: HSSI(High speed serial interface) High speed Differential Data pair lan A0~7 P/N, High speed Differential Clock A High…...
MySQL从0到1全教程【1】MySQL数据库的基本概念以及MySQL8.0版本的部署
1 MySQL数据库的相关概念 1.1 数据库中的专业术语 1.1.1 数据库 (DB) 数据库是指:保存有组织的数据的容器(通常是一个文数据库 (database)件或一组文件)。 1.1.2 数据库管理系统 (DBMS) 数据库管理系统(DBMS)又称为数据库软件(产品),用于管理DB中的数据 注意:…...
grep常用命令
1. grep常用参数 -i忽略大小写-w精准匹配整词-v结果取反(匹配指定的字符串以外的内容)-A关键字所在行的后几行也一起显示-B关键字所在行的前几行也一起显示-C关键字所在行的前后几行行一起显示 2. 常用命令 2.1 从文件中查找关键词 # 精准匹配 grep linux test.txt# 从多个…...
Spring Data JPA 使用总结
本文记录了Spring data JPA 的一些细碎的规则。 findBy语法规则 :findOOXXByName 实际上等价 > findByName 比如: User findFirstByOrderByLastnameAsc();User findTopByOrderByAgeDesc();Page<User> queryFirst10ByLastname(String lastname, Pageable pageable);…...
融云 CEO 董晗荣获 51CTO 「2023 年度科技影响力人物奖」
(👆点击获取《社交泛娱乐出海作战地图》) 1 月 5 日,由知名 IT 技术媒体 51CTO 主办的第十八届“中国企业年终评选”正式揭晓榜单,融云 CEO 董晗荣获“2023 年度科技影响力人物奖”。关注【融云全球互联网通信云】了解…...
数据洞察力,驱动企业财务变革
我们不得不面对一个现实,就是数据量的剧增。加上大部分企业并不愿意删除历史数据,以防未来预测分析时需要,这造成数据就像一个雪球,越滚越大。然而,过多的数据和数据不足一样会成为企业发展和理解分析的障碍。从海量数…...
Postgresql常见(花式)操作完全示例
案例说明 将Excel数据导入Postgresql,并实现常见统计(数据示例如下) 导入Excel数据到数据库 使用Navicat工具连接数据库,使用导入功能可直接导入,此处不做过多介绍,详细操作请看下图: 点击“下…...
【Docker】数据管理
🥳🥳Welcome 的Huihuis Code World ! !🥳🥳 接下来看看由辉辉所写的关于Docker的相关操作吧 目录 🥳🥳Welcome 的Huihuis Code World ! !🥳🥳 前言 一.数据卷 示例演示 示例剖析…...
认识异常及异常处理机制之try-catch
异常类 什么是异常?就像人会犯错一样,程序在运行的过程中也会犯错。程序中的错误有两类,一类称为Error(错误),另一类称为Exception(异常)。Error类和Exception类都为Throwable的子类…...
html学习之路:简述html文档头部 <meta> 的 http-equiv 属性
🧋当输入网址打开网页时,设置html头部meta的http-equiv属性,可以帮助浏览器更加精确和正常却的显示网页内容,比如设置网页多久自动刷新,设置网页在浏览器缓存中的时限,设置多少事件跳转到指定的网页地址&am…...
逆矩阵计算
目录 一、逆矩阵的定义 核心:AB BA E 1)定义 2)注意 3)逆矩阵存在的条件|A| ! 0 二、核心公式: 三、求逆矩阵(核心考点) 1、伴随矩阵法 2、初等变换法(重点掌握ÿ…...
《豫鄂烽火燎原大小焕岭》:一部穿越时空的历史史诗
《豫鄂烽火燎原大小焕岭》:一部穿越时空的历史史诗 一部赓续红色血脉的生动教材 一部讴歌时代英雄和人民精神宝典 当历史的烽烟渐渐远去,留下的是一页页泛黄的记忆和无数英雄的壮丽诗篇。李传铭的力作《豫鄂烽火燎原大小焕岭》正是这样一部深情的回望&am…...
浅研究下 DHCP 和 chrony
服务程序: 1.如果有默认配置,请先备份,再进行修改 2.修改完配置文件,请重启服务或重新加载配置文件,否则不生效 有些软件,安装包的名字和系统里服务程序的名字不一样(安装包名字:…...
【算法】动态中位数(对顶堆)
题目 依次读入一个整数序列,每当已经读入的整数个数为奇数时,输出已读入的整数构成的序列的中位数。 输入格式 第一行输入一个整数 P,代表后面数据集的个数,接下来若干行输入各个数据集。 每个数据集的第一行首先输入一个代表…...
未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?
编辑:陈萍萍的公主一点人工一点智能 未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战,在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…...
从零实现富文本编辑器#5-编辑器选区模型的状态结构表达
先前我们总结了浏览器选区模型的交互策略,并且实现了基本的选区操作,还调研了自绘选区的实现。那么相对的,我们还需要设计编辑器的选区表达,也可以称为模型选区。编辑器中应用变更时的操作范围,就是以模型选区为基准来…...
【Java学习笔记】Arrays类
Arrays 类 1. 导入包:import java.util.Arrays 2. 常用方法一览表 方法描述Arrays.toString()返回数组的字符串形式Arrays.sort()排序(自然排序和定制排序)Arrays.binarySearch()通过二分搜索法进行查找(前提:数组是…...
多场景 OkHttpClient 管理器 - Android 网络通信解决方案
下面是一个完整的 Android 实现,展示如何创建和管理多个 OkHttpClient 实例,分别用于长连接、普通 HTTP 请求和文件下载场景。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas…...
Golang dig框架与GraphQL的完美结合
将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用,可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器,能够帮助开发者更好地管理复杂的依赖关系,而 GraphQL 则是一种用于 API 的查询语言,能够提…...
家政维修平台实战20:权限设计
目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系,主要是分成几个表,用户表我们是记录用户的基础信息,包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题,不同的角色…...
postgresql|数据库|只读用户的创建和删除(备忘)
CREATE USER read_only WITH PASSWORD 密码 -- 连接到xxx数据库 \c xxx -- 授予对xxx数据库的只读权限 GRANT CONNECT ON DATABASE xxx TO read_only; GRANT USAGE ON SCHEMA public TO read_only; GRANT SELECT ON ALL TABLES IN SCHEMA public TO read_only; GRANT EXECUTE O…...
OkHttp 中实现断点续传 demo
在 OkHttp 中实现断点续传主要通过以下步骤完成,核心是利用 HTTP 协议的 Range 请求头指定下载范围: 实现原理 Range 请求头:向服务器请求文件的特定字节范围(如 Range: bytes1024-) 本地文件记录:保存已…...
从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(九)
设备树移植 和uboot设备树修改的内容同步到kernel将设备树stm32mp157d-stm32mp157daa1-mx.dts复制到内核源码目录下 源码修改及编译 修改arch/arm/boot/dts/st/Makefile,新增设备树编译 stm32mp157f-ev1-m4-examples.dtb \stm32mp157d-stm32mp157daa1-mx.dtb修改…...
ios苹果系统,js 滑动屏幕、锚定无效
现象:window.addEventListener监听touch无效,划不动屏幕,但是代码逻辑都有执行到。 scrollIntoView也无效。 原因:这是因为 iOS 的触摸事件处理机制和 touch-action: none 的设置有关。ios有太多得交互动作,从而会影响…...
