赞
踩
在雷达应用中经常会用到恒虚警算法,本文介绍经典的算法及用matlab实现程序,本文参考相关文章博文整理汇总而成,感谢各位博主的无私分享。
统计检测理论是利用信号的统计特性和噪声的统计特性等信息来建立最佳判决的数学理论。主要解决在受噪声干扰的观测中,信号有无的判决问题。其数学基础就是统计判决理论,又称假设检验理论。 假设检验是进行统计判决的重要工具,信号检测相当于数理统计中的假设检验。 假设就是检验对象的可能情况或状态。对于雷达或声呐检测来说,可以选用两个假设,即目标存在或不存在。
由于噪声的存在及观察样本数或样本长度的限制,在检测过程中,不可避免地会产生判决错误。问题是怎样尽可能地减少这些错误,这就是检测系统的最佳化问题。错误一般分为两种,一种是漏报,一种是虚警,在不同的工作情况下,这两种错误所造成的后果并不一样,因此可能对不同的错误有不同的重视程度,这就引入了最佳准则问题。不同的准则下有不同的判决规则(如选取的判决门限不同),使得检测系统有不一样的虚警错误和漏报错误分配。 这样的准则有最小平均风险准则(又称Bayes准则)、极大极小准则(又称安全平均风险准则)和Neyman-Pearson准则(又称检测概率最大准则)等。
Bayes 准则需知道先验概率和代价函数,极大极小准则需知道代价函数。Neyman-Pearson 准则则是解决二者均不知的判决问题,该方法是确定虚警概率或漏报概率中的一种,再去求使另一种达到极小的判决,也就是假定有一类错误最重要,因而作出严格的限制,再去确定使其它类错误最小的判决界。一般对虚警要求较高,所以,先限定虚警,再去求最小漏报或最大检测,所以 N-P 准则有时也叫恒虚警检测。 恒虚警检测技术(CFAR,Constant False-Alarm Rate)是雷达系统在保持虚警概率恒定条件下对接收机输出的信号与噪声作判别以确定目标信号是否存在的技术。
均值类-统计有序类-自适应-杂波图-变换域-压缩感知-神经网络
恒虚警检测技术(CFAR)是指雷达系统在保持虚警概率恒定条件下对接收机输出的信号与噪声作判别以确定目标信号是否存在的技术。
前提:由于接收机输出端中肯定存有噪声(包括大气噪声、人为噪声、内部噪声和杂波等),而信号一般是叠加在噪声上的。这就需要在接收机输出的噪声或信号加噪声条件下,采用检测技术判别是否有目标信号。
误差概率:任何形式的判决必然存在着两种误差概率:发现概率和虚警概率。当接收机输出端存在目标回波信号,而判决时判为有目标的概率为Pd,判为无目标的概率为1-Pad。当接收机输出端只有噪声时,而判为有目标的概率为Pfa。由于噪声是随机变量,其特征可用概率密度函数表示,因此信号加噪声也是一随机变量。
具体过程:恒虚警检测器首先对输入的噪声进行处理后确定一个门限,将此门限与输入端信号相比,如输入端信号超过了此门限,则判为有目标,否则,判为无目标。
信号接收机输出端的信号用
x
(
t
)
x(t)
x(t)表示,这里存在两种情况:
1.噪声和信号同时存在:
x
(
t
)
=
s
(
t
)
+
n
(
t
)
x(t)=s(t)+n(t)
x(t)=s(t)+n(t)
2.只有噪声存在:
x
(
t
)
=
n
(
t
)
x(t)=n(t)
x(t)=n(t)
用
H
0
H_0
H0和
H
1
H_1
H1分别表示接收机的无信号输入和有信号输入的假设;
用
D
0
D_0
D0和
D
1
D_1
D1分别表示检测器作出无信号和有信号的判决结果。
于是接收机的输入与检测器的判决将有四种情况:
H
0
H_0
H0为真,判为
D
0
D_0
D0,即接收机无信号输入,检测器判为无信号,称为正确不发现;
H
0
H_0
H0为真,判为
D
1
D_1
D1,即接收机无信号输入,检测器判为有信号,称为虚警;
H
1
H_1
H1为真,判为
D
0
D_0
D0,即接收机有信号输入,检测器判为无信号,称为漏警;
H
1
H_1
H1为真,判为
D
1
D_1
D1,即接收机有信号输入,检测器判为有信号,称为正确检测;
其中第一种情况和第四种情况属于正确判决,其余两种属于错误判决。
用
p
(
z
∣
H
0
)
p(z∣H_0)
p(z∣H0)和
p
(
z
∣
H
1
)
p(z∣H_1)
p(z∣H1)分别表示无信号输入和有信号输入接收机时,接收机输出端的信号电平的概率密度函数;
用
Z
0
Z_0
Z0和
Z
1
Z_1
Z1分别表示检测器作出无信号和有信号判决的判决区域,当输入的电平在
Z
0
Z_0
Z0区域判为无信号,在Z1区域判为有信号。
更多推导及定义见第一个参考文章恒虚警检测(Constant False Alarm Rate, CFAR)以及MathWorks官方文章Constant False Alarm Rate (CFAR) Detection。
CA-CFAR、GO-CFAR、SO-CFAR算法这三个是最经典的均值类CFAR算法,后续有其变形log-CFAR算法但是原理是相同的。
均值类CFAR检测器原理图
CA-CFAR(单元平均恒虚警)
优点:损失率最少的一种算法;
缺点:多目标遮掩,杂波边缘性能也欠佳;
cfar_ac.m
function [ index, XT ] = cfar_ac( xc, N, pro_N, PAD) % 假设回波服从高斯分布 % alpha=N.*(PAD.^(-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
test_cfar_ca.m
%% 程序初始化 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; % % 多目标 % SNR1=20;signal1_p=10.^(SNR1./10).*noise_p; % xc(1,90)=signal1_p; % SNR2=15;signal2_p=10.^(SNR2./10).*noise_p; % xc(1,102)=signal2_p; %% 杂波边缘背景噪声(单目标&多目标) shape=[100,200]; variance=200; noise_db=[20,30]; noise_p=10.^(noise_db./10); show_out=0; [ xc ] = env_edge(variance, shape, noise_db,show_out); % 多目标 SNR1=15;signal1_p=10.^(SNR1./10).*noise_p(1,end); SNR2=12;signal2_p=10.^(SNR2./10).*noise_p(1,end); SNR3=8;signal3_p=10.^(SNR3./10).*noise_p(1,end); SNR4=5;signal4_p=10.^(SNR4./10).*noise_p(1,end); loc1=randi([43,44],1,1); xc(1,loc1)=signal1_p; loc2=randi([46,48],1,1); xc(1,loc2)=signal3_p; loc3=randi([50,53],1,1); xc(1,loc3)=signal2_p; loc4=randi([55,58],1,1); xc(1,loc4)=signal1_p; loc5=randi([90,93],1,1); %接近杂波区,但是依然在 % xc(1,loc5)=signal1_p; xc(1,loc5)=signal2_p; %这种杂波边缘有目标的情况,还需要优化 % xc(1,loc5)=signal3_p; loc6=randi([102,108],1,1); xc(1,loc6)=signal3_p; %% 算法结果&图谱显示 N=36; pro_N=2; PAD=10^(-4); [ index, XT ] = cfar_ac( xc, N, pro_N, PAD); figure; plot(10.*log(abs(xc))./log(10)),hold on; plot(index,10.*log(abs(XT))./log(10)),hold on;
CA-CFAR效果图
GO-CFAR(最大选择恒虚警)
优点:杂波边缘区域虚警概率降低
缺点:多目标遮掩
cfar_go.m
function [ index, XT ] = cfar_go( xc, N, pro_N, PAD) % 假设回波服从高斯分布 % alpha赋值有些问题,一个比较复杂的高次函数 alpha=N.*(PAD.^(-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
test_cfar_go.m
%% 程序初始化 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; % % 多目标 % SNR1=20;signal1_p=10.^(SNR1./10).*noise_p; % xc(1,90)=signal1_p; % SNR2=15;signal2_p=10.^(SNR2./10).*noise_p; % xc(1,102)=signal2_p; %% 杂波边缘背景噪声(单目标&多目标) shape=[100,200]; variance=200; noise_db=[20,30]; noise_p=10.^(noise_db./10); show_out=0; [ xc ] = env_edge(variance, shape, noise_db,show_out); % 多目标 SNR1=15;signal1_p=10.^(SNR1./10).*noise_p(1,end); SNR2=12;signal2_p=10.^(SNR2./10).*noise_p(1,end); SNR3=8;signal3_p=10.^(SNR3./10).*noise_p(1,end); SNR4=5;signal4_p=10.^(SNR4./10).*noise_p(1,end); loc1=randi([43,44],1,1); xc(1,loc1)=signal1_p; loc2=randi([46,48],1,1); xc(1,loc2)=signal3_p; loc3=randi([50,53],1,1); xc(1,loc3)=signal2_p; loc4=randi([55,58],1,1); xc(1,loc4)=signal1_p; % loc5=randi([90,93],1,1); %接近杂波区,但是依然在 % xc(1,loc5)=signal1_p; % xc(1,loc5)=signal2_p; %这种杂波边缘有目标的情况,还需要优化 % xc(1,loc5)=signal3_p; loc6=randi([102,108],1,1); xc(1,loc6)=signal3_p; %% 算法结果&图谱显示 N=36; pro_N=2; PAD=10^(-4); [ index, XT ] = cfar_go( abs(xc), N, pro_N, PAD); figure; plot(10.*log(abs(xc))./log(10)),hold on; plot(index,10.*log(abs(XT))./log(10)),hold on;
GO-CFAR效果图
SO-CFAR(最小选择恒虚警)
优点:多目标效果有改进;
缺点:杂波边缘区域虚警概率提升;
cfar_so.m
function [ index, XT ] = cfar_so( xc, N, pro_N, PAD) % 假设回波服从高斯分布 % alpha赋值有些问题,一个比较复杂的高次函数 alpha=N.*(PAD.^(-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
test_cfar_so.m
%% 程序初始化 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; % % 多目标 % SNR1=20;signal1_p=10.^(SNR1./10).*noise_p; % xc(1,90)=signal1_p; % SNR2=15;signal2_p=10.^(SNR2./10).*noise_p; % xc(1,102)=signal2_p; %% 杂波边缘背景噪声(单目标&多目标) shape=[100,200]; variance=200; noise_db=[20,30]; noise_p=10.^(noise_db./10); show_out=0; [ xc ] = env_edge(variance, shape, noise_db,show_out); % 多目标 SNR1=15;signal1_p=10.^(SNR1./10).*noise_p(1,end); SNR2=12;signal2_p=10.^(SNR2./10).*noise_p(1,end); SNR3=8;signal3_p=10.^(SNR3./10).*noise_p(1,end); SNR4=5;signal4_p=10.^(SNR4./10).*noise_p(1,end); loc1=randi([43,44],1,1); xc(1,loc1)=signal1_p; loc2=randi([46,48],1,1); xc(1,loc2)=signal3_p; loc3=randi([50,53],1,1); xc(1,loc3)=signal2_p; loc4=randi([55,58],1,1); xc(1,loc4)=signal1_p; % loc5=randi([90,93],1,1); %接近杂波区,但是依然在 % xc(1,loc5)=signal1_p; % xc(1,loc5)=signal2_p; %这种杂波边缘有目标的情况,还需要优化 % xc(1,loc5)=signal3_p; loc6=randi([102,108],1,1); xc(1,loc6)=signal3_p; %% 算法结果&图谱显示 N=36; pro_N=2; PAD=10^(-4); [ index, XT ] = cfar_so( abs(xc), N, pro_N, PAD); figure; plot(10.*log(abs(xc))./log(10)),hold on; plot(index,10.*log(abs(XT))./log(10)),hold on;
SO-CFAR效果图
OS-CFAR检测器原理图
OS-CFAR(有序统计恒虚警)
优点:多目标检测性能很好;
缺点:杂波边缘区域虚警概率提高;
cfar_os.m
function [ index, XT ] = cfar_os( xc, N, k, pro_N, PAD) % 假设回波服从高斯分布 % alpha赋值有些问题,一个比较复杂的高次函数 %% 计算alpha % syms alpha PFA; % PFA(alpha)=gamma(N-1).*gamma(N-k+alpha-1)./gamma(N-k-1)./gamma(N+alpha-1); % [alpha,~,~]=solve(PFA(alpha)==PAD,'ReturnConditions', true) ; alpha=N.*(PAD.^(-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); cell_all=cat(2,cell_left,cell_right); cell_sort=sort(cell_all); Z=cell_sort(1,k); XT(1,i-N/2-pro_N/2)=Z.*alpha; end end
test_cfar_os.m
%% 程序初始化 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; % % 多目标 % SNR1=20;signal1_p=10.^(SNR1./10).*noise_p; % xc(1,90)=signal1_p; % SNR2=15;signal2_p=10.^(SNR2./10).*noise_p; % xc(1,102)=signal2_p; %% 杂波边缘背景噪声(单目标&多目标) shape=[100,200]; variance=200; noise_db=[20,30]; noise_p=10.^(noise_db./10); show_out=0; [ xc ] = env_edge(variance, shape, noise_db,show_out); % 多目标 SNR1=15;signal1_p=10.^(SNR1./10).*noise_p(1,end); SNR2=12;signal2_p=10.^(SNR2./10).*noise_p(1,end); SNR3=8;signal3_p=10.^(SNR3./10).*noise_p(1,end); SNR4=5;signal4_p=10.^(SNR4./10).*noise_p(1,end); loc1=randi([43,44],1,1); xc(1,loc1)=signal1_p; loc2=randi([46,48],1,1); xc(1,loc2)=signal3_p; loc3=randi([50,53],1,1); xc(1,loc3)=signal2_p; loc4=randi([55,58],1,1); xc(1,loc4)=signal1_p; loc5=randi([90,93],1,1); %接近杂波区,但是依然在 % xc(1,loc5)=signal1_p; xc(1,loc5)=signal2_p; %这种杂波边缘有目标的情况,还需要优化 % xc(1,loc5)=signal3_p; loc6=randi([102,108],1,1); xc(1,loc6)=signal3_p; %% 算法结果&图谱显示 N=36; pro_N=2; k=2.*N./4; PAD=10^(-4); [ index, XT ] = cfar_os( abs(xc), N, k, pro_N, PAD); figure; plot(10.*log(abs(xc))./log(10)),hold on; plot(index,10.*log(abs(XT))./log(10)),hold on;
OS-CAFR效果图
HCE-CFAR检测器原理图
VI-CFAR检测器原理图
杂波图CFAR检测器原理图
优点:通过提高累积帧数,杂波背景噪声功率趋近于理论值
缺点:对于慢移动目标有自遮掩效果
cfar_tc.m
function [ index, XT, xc_tpn ] = cfar_tc( xc, xc_tp, N, pro_N, PAD) % 假设回波服从高斯分布 % xc_tc=zeros(1,length(xc)); alpha=N.*(PAD.^(-1./N)-1); xc_tc(1,2:end-1)=xc_tp(1,2:end-1)./3+xc(1,1:end-2)./3+xc(1,3:end)./3; xc_tpn=xc_tp(1,1:end)./2+xc(1,1:end)./2; xc_tc(1,1)=xc_tpn(1,1); xc_tc(1,end)=xc_tpn(1,end); 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_tc(1,i-N/2-pro_N/2:i-pro_N/2-1); cell_right=xc_tc(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
test_cfar_tc.m
%% 程序初始化 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; % % 多目标 % SNR1=20;signal1_p=10.^(SNR1./10).*noise_p; % xc(1,90)=signal1_p; % SNR2=15;signal2_p=10.^(SNR2./10).*noise_p; % xc(1,102)=signal2_p; %% 杂波边缘背景噪声(单目标&多目标) shape=[100,200]; variance=200; noise_db=[20,30]; noise_p=10.^(noise_db./10); show_out=0; % [ xc ] = env_edge(variance, shape, noise_db, show_out); % 多目标 SNR1=15;signal1_p=10.^(SNR1./10).*noise_p(1,end); SNR2=12;signal2_p=10.^(SNR2./10).*noise_p(1,end); SNR3=8;signal3_p=10.^(SNR3./10).*noise_p(1,end); SNR4=5;signal4_p=10.^(SNR4./10).*noise_p(1,end); % loc1=randi([43,44],1,1); % xc(1,loc1)=signal1_p; % loc2=randi([46,48],1,1); % xc(1,loc2)=signal3_p; % loc3=randi([50,53],1,1); % xc(1,loc3)=signal2_p; % loc4=randi([55,58],1,1); % xc(1,loc4)=signal1_p; % loc5=randi([90,93],1,1); %接近杂波区,但是依然在 % xc(1,loc5)=signal1_p; % xc(1,loc5)=signal2_p; %这种杂波边缘有目标的情况,还需要优化 % xc(1,loc5)=signal3_p; % loc6=randi([102,108],1,1); % xc(1,loc6)=signal3_p; %% 迭代算法实现(杂波图) N=36; u=0.001; PAD=10^(-4); alpha=N.*(PAD.^(-1./N)-1); xtp=zeros(1,shape(end)); d0=0; d1=[0]; for i=1:1:4000 [ xc ] = env_edge(variance, shape, noise_db,show_out); loc1=randi([43,44],1,1); xc(1,loc1)=signal1_p; loc2=randi([46,48],1,1); xc(1,loc2)=signal3_p; loc3=randi([50,53],1,1); xc(1,loc3)=signal2_p; loc4=randi([55,58],1,1); xc(1,loc4)=signal1_p; loc6=randi([102,108],1,1); xc(1,loc6)=signal3_p; xtp=xtp.*(1-u)+xc.*u; d0=d0.*(1-u)+u; d1=cat(2,d1,d0); if mod(i,100)==0 %% 图谱显示 figure; plot(10.*log(abs(xc))./log(10)),hold on; plot(10.*log(abs(xtp.*alpha./d0))./log(10)),hold on; end end
杂波图CFAR效果图
env_uniform.m
function [ xc ] = env_uniform(variance, shape, power_db, show_out)
%UNIFORM_EN 此处显示有关此函数的摘要
% 此处显示详细说明
if (nargin==3)
show_out=0;
end
c=10^(power_db/10); % 这里是幅度——功率
xc=c + random('Normal',0,variance,1,shape);
if show_out==1
figure;plot(10.*log(abs(xc))./log(10));
end
end
env_edge.m
function [ xc ] = env_edge(variance, shape, power_db, show_out) %UNIFORM_EN 此处显示有关此函数的摘要 % 此处显示详细说明 if (nargin==3) show_out=0; end 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 figure;plot(20.*log(abs(xc))./log(10)); end end
检测单元数:在相同信噪比下,检测单元数越多的CFAR对应的检测概率越高,但同时计算量加大。
虚警概率:在相同检测单元数目下,虚警概率的越高CFAR对应的检测概率越高,但虚警数也增多。
信噪比:当信噪比不断增加,检测概率也不断增加。
保护单元数:保护单元过大或过小都会使检测概率降低,应不同实验选取适中的保护单元数。
理想情况下的CFAR算法:
①多目标检测性能很好,几乎互不影响;
②杂波边缘区域,突变很快,虚警率稳定;
③慢移动目标自遮掩改善;
④算法实用,复杂度适中,理论可实现;
雷达信号的检测总是在干扰背景下进行的,这些干扰包括接收机内部的热噪声,以及地物、雨雪、海浪等杂波干扰,有时还有敌人施放的有源和无源干扰。杂波和敌人施放干扰的强度常比接收机内部噪声电平高得多。因此,在强干扰中提取信号,不仅要求有一定的信噪比,而且必须对信号作恒虚警处理。
恒虚警检测(Constant False Alarm Rate, CFAR)https://blog.csdn.net/weixin_42647783/article/details/89449048
多算法雷达一维恒虚警检测CFAR(基于MATLAB GUI的开发)https://blog.csdn.net/qq_42679573/article/details/106103729
雷达无线电系列(二)经典CFAR算法图文解析与实现(matlab)https://www.cnblogs.com/Mufasa/p/10900334.html
万分感谢以上博主的无私分享。
写于关雎
新浪微博:https://weibo.com/tianzhejia
CSDN博客:https://blog.csdn.net/qq_35605018
博客网站:http://www.zhijiadeboke.xyz
GitHub:https://github.com/ZhijiaTian
QQ邮箱:2461824656@qq.com
126邮箱:tianzhejia@126.com
Outlook邮箱:tianzhejia@outlook.com
以上均可与本人取得联系,欢迎探讨。^ v ^
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。