行业知识
雷达信号处理——恒虚警检测(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 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
下面是进行补零操作的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下面是进行翻转补充首位的操作的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下面是仿真结果:
图2 单目标脉冲压缩结果及CA-CFAR阈值图对目标峰值部分局部放大后
图3 局部放大附录
二维CFAR 仿真代码地址:https://github.com/tooth2/2D-CFAR
上一篇:狐狸服务器怎么停了?
下一篇:魔兽服务器怎么分组?