雷达信号处理——恒虚警检测(CFAR)
上图展示的是同时在距离维和多普勒维进行恒虚警检测的原理,如果只是在距离维或多普勒维做CFAR,检测单元的左右两侧均有设定好数量的保护单元和参考单元。不同的CFAR检测器适用于不同的场景,CA-CFAR算法适用于均匀环境中的单目标或彼此相距较远的多目标环境,在邻近多目标环境会发生目标的遮蔽效应,在杂波边缘会发生杂波边缘效应。从图中也可以看到,根据阈值的选择不同,有不同的检测器,其中CA-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。
虚警概率的设置
关于虚警概率、判决门限、检测概率的关系就不再展开了,可以自行查阅相关资料,实际系统中为了实现较好的检测效果,虚警概率设置为 1 0 12 10^{12} 1012量级。
恒虚警检测算法——CA-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_cell
tmp_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 :sigLen
centNum = 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 :sigLen
centNum = 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
下面是仿真结果:
对目标峰值部分局部放大后
选小SO-CFAR
当参考单元内存在一个强目标的时候,CA-CFAR检测门限会提高,这会导致信号较弱的目标难以被检测到。这种情况下SO-CAFR比较适用。如下图,一个弱目标的右侧存在一个强目标,SO-CFAR能够将两个顺利的检测出来。
适用场景:
选大GO-CFAR
当杂波严重不均匀的时候,采用CA-CFAR检测杂波边缘会产生虚警。图5左侧表示有些距离单元处杂波幅度比较大,超过了门限,导致了虚警。右图是采用GO-CFAR检测的结果。GO-CFAR将左右两侧的杂波的平均功率进行单独计算,并且取其中较大的估计值作为待检测单元杂波的平均功率来计算门限。因此它的适用场景是:非均匀杂波。
有序OS-CFAR
当参考单元内存在多个强干扰目标时,多个目标会导致估计的杂波的平均功率过高,从而抬高检测门限、导致虚警。这种情况下,OS-CFAR将各参考单元的回波功率进行排序,选取中间的某个值作为待检测单元杂波平均功率来计算门限。
附录
二维CFAR 仿真代码地址:https://github.com/tooth2/2D-CFAR
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)