一,CFRA基础知识介绍算法
简介
恒虚警检测技术是指雷达系统在保持虚警几率恒定条件下对接收机输出的
信号与噪声做判别以肯定目标信号是否存在的技术。
前提
因为接收机输出端中确定存有噪声(包括大气噪声、人为噪声、内部噪声和杂波等),而信号通常是叠加在噪声上的。这就须要在接收机输出的噪声或信号加噪声条件下,采用检测技术判别是否有目标信号。
偏差几率
任何形式的判决必然存在着两种偏差几率:发现几率和虚警几率。当接收机输出端存在目标回波信号,而判决时判为有目标的几率为Pd,判为无目标的几率为1-Pad。当接收机输出端只有噪声时,而判为有目标的几率为Pfa。因为噪声是随机变量,其特征可用几率密度函数表示,所以信号加噪声也是一随机变量
[1]
具体过程
恒虚警检测器首先对输入的噪声进行处理后肯定一个门限,将此门限与输入端信号相比,如输入端信号超过了此门限,则判为有目标,不然,判为无目标。
方法
为了使系统的虚警几率保持恒定,此门限是随输入噪声变化而进行快速的自适应调整的,噪声处理方法是随噪声的不一样分布而异,于是恒虚警检测技术包括恒虚警处理技术和目标检测技术两大部分。恒虚警处理技术包括快门限、慢门限处理技术、目标检测包括似然比检测、二进制检测、序贯检测和非参量检测等
[1]。
二,经典CFAR算法解析与性能图谱展现网络
①均值类CFRAdom
核心思想是经过对参考窗内采样数据取平均来估计背景功率。ide
CA-CFAR、GO-CFAR、SO-CFAR算法这三个是最经典的均值类CFAR算法,后续有其变形log-CFAR算法可是原理是相同的。函数
图1 均值类CFAR检测器原理图性能
②统计有序CFAR优化
核心思想:经过对参考窗内的数据由小到大排序选取其中第K个数值假设其为杂波背景噪声。spa
图2 OS-CFAR检测器原理图3d
③自适应CFARcode
针对不一样的杂波选用不一样的决策方法来进行。
图3 HCE-CFAR检测器原理图
图4 VI-CFAR检测器原理图
④杂波图CFAR
经典的空域杂波图CFAR算法,假设每一个距离元和方位角上的平方率值听从独立同分布,经过对时间维上的数据进行遗忘迭代来拟合杂波背景噪声。
图5 杂波图CFAR检测器原理图
三,CFRA发展示状
均值类-统计有序类-自适应-杂波图-变换域-压缩感知-神经网络
四,经典CFAR算法实现源码(matlab)
cfar_ac.m 单元平均恒虚警算法实现
优势:损失率最少的一种算法;
缺点:多目标遮掩,杂波边缘性能也欠佳;
1 function [ index, XT ] =cfar_ac( xc, N, pro_N, PAD)2 %假设回波服从高斯分布3 %
4 alpha=N.*(PAD.^(-1./N)-1);5 index=1+N/2+pro_N/2:length(xc)-N/2-pro_N/2;6 XT=zeros(1,length(index));7
8 for i=index9 cell_left=xc(1,i-N/2-pro_N/2:i-pro_N/2-1);10 cell_right=xc(1,i+pro_N/2+1:i+N/2+pro_N/2);11 Z=(sum(cell_left)+sum(cell_right))./N;12
13 XT(1,i-N/2-pro_N/2)=Z.*alpha;14 end15
16 end
View Code
test_cfar_ca.m
1 %%程序初始化2 clc;clear all;close all;3
4 %% 均匀背景噪声(单目标&多目标)5 % shape=[200];6 % variance=200;7 % noise_db=20;8 % noise_p=10.^(noise_db./10);9 % show_out=0;10 % [ xc ] =env_uniform(variance, shape, noise_db,show_out);11
12 %单目标13 % SNR1=15; signal1_p=10.^(SNR1./10).*noise_p;14 % xc(1,90)=signal1_p;15 %
16 %多目标17 % SNR1=20;signal1_p=10.^(SNR1./10).*noise_p;18 % xc(1,90)=signal1_p;19 % SNR2=15;signal2_p=10.^(SNR2./10).*noise_p;20 % xc(1,102)=signal2_p;21
22
23 %% 杂波边缘背景噪声(单目标&多目标)24 shape=[100,200];25 variance=200;26 noise_db=[20,30];27 noise_p=10.^(noise_db./10);28 show_out=0;29 [ xc ] =env_edge(variance, shape, noise_db,show_out);30
31 %多目标32 SNR1=15;signal1_p=10.^(SNR1./10).*noise_p(1,end);33 SNR2=12;signal2_p=10.^(SNR2./10).*noise_p(1,end);34 SNR3=8;signal3_p=10.^(SNR3./10).*noise_p(1,end);35 SNR4=5;signal4_p=10.^(SNR4./10).*noise_p(1,end);36
37 loc1=randi([43,44],1,1);38 xc(1,loc1)=signal1_p;39 loc2=randi([46,48],1,1);40 xc(1,loc2)=signal3_p;41 loc3=randi([50,53],1,1);42 xc(1,loc3)=signal2_p;43 loc4=randi([55,58],1,1);44 xc(1,loc4)=signal1_p;45 loc5=randi([90,93],1,1); %接近杂波区,可是依然在46 % xc(1,loc5)=signal1_p;47 xc(1,loc5)=signal2_p; %这种杂波边缘有目标的状况,还须要优化48 % xc(1,loc5)=signal3_p;49
50 loc6=randi([102,108],1,1);51 xc(1,loc6)=signal3_p;52
53 %% 算法结果&图谱显示54 N=36;55 pro_N=2;56 PAD=10^(-4);57 [ index, XT ] =cfar_ac( xc, N, pro_N, PAD);58
59 figure;60 plot(10.*log(abs(xc))./log(10)),hold on;61 plot(index,10.*log(abs(XT))./log(10)),hold on;
View Code
图6 CA-CFAR效果图
cfar_go.m 最大选择恒虚警算法实现
优势:杂波边缘区域虚警几率下降
缺点:多目标遮掩
1 function [ index, XT ] =cfar_go( xc, N, pro_N, PAD)2 %假设回波服从高斯分布3 %alpha赋值有些问题,一个比较复杂的高次函数4 alpha=N.*(PAD.^(-1./N)-1);5
6 index=1+N/2+pro_N/2:length(xc)-N/2-pro_N/2;7 XT=zeros(1,length(index));8
9 for i=index10 cell_left=xc(1,i-N/2-pro_N/2:i-pro_N/2-1);11 cell_right=xc(1,i+pro_N/2+1:i+N/2+pro_N/2);12 Z=max([mean(cell_left),mean(cell_right)]);13
14 XT(1,i-N/2-pro_N/2)=Z.*alpha;15 end16
17 end
View Code
test_cfar_go.m
1 %%程序初始化2 clc;clear all;close all;3
4 %% 均匀背景噪声(单目标&多目标)5 % shape=[200];6 % variance=200;7 % noise_db=20;8 % noise_p=10.^(noise_db./10);9 % show_out=0;10 % [ xc ] =env_uniform(variance, shape, noise_db,show_out);11
12 %单目标13 % SNR1=15; signal1_p=10.^(SNR1./10).*noise_p;14 % xc(1,90)=signal1_p;15 %
16 %多目标17 % SNR1=20;signal1_p=10.^(SNR1./10).*noise_p;18 % xc(1,90)=signal1_p;19 % SNR2=15;signal2_p=10.^(SNR2./10).*noise_p;20 % xc(1,102)=signal2_p;21
22
23 %% 杂波边缘背景噪声(单目标&多目标)24 shape=[100,200];25 variance=200;26 noise_db=[20,30];27 noise_p=10.^(noise_db./10);28 show_out=0;29 [ xc ] =env_edge(variance, shape, noise_db,show_out);30
31 %多目标32 SNR1=15;signal1_p=10.^(SNR1./10).*noise_p(1,end);33 SNR2=12;signal2_p=10.^(SNR2./10).*noise_p(1,end);34 SNR3=8;signal3_p=10.^(SNR3./10).*noise_p(1,end);35 SNR4=5;signal4_p=10.^(SNR4./10).*noise_p(1,end);36
37 loc1=randi([43,44],1,1);38 xc(1,loc1)=signal1_p;39 loc2=randi([46,48],1,1);40 xc(1,loc2)=signal3_p;41 loc3=randi([50,53],1,1);42 xc(1,loc3)=signal2_p;43 loc4=randi([55,58],1,1);44 xc(1,loc4)=signal1_p;45 % loc5=randi([90,93],1,1); %接近杂波区,可是依然在46 % xc(1,loc5)=signal1_p;47 % xc(1,loc5)=signal2_p; %这种杂波边缘有目标的状况,还须要优化48 % xc(1,loc5)=signal3_p;49
50 loc6=randi([102,108],1,1);51 xc(1,loc6)=signal3_p;52
53 %% 算法结果&图谱显示54 N=36;55 pro_N=2;56 PAD=10^(-4);57 [ index, XT ] =cfar_go( abs(xc), N, pro_N, PAD);58
59 figure;60 plot(10.*log(abs(xc))./log(10)),hold on;61 plot(index,10.*log(abs(XT))./log(10)),hold on;
View Code
图7 GO-CFAR效果图
cfar_so.m 最小选择恒虚警算法实现
优势:多目标效果有改进;
缺点:杂波边缘区域虚警几率提高;
1 function [ index, XT ] =cfar_so( xc, N, pro_N, PAD)2 %假设回波服从高斯分布3 %alpha赋值有些问题,一个比较复杂的高次函数4 alpha=N.*(PAD.^(-1./N)-1);5
6 index=1+N/2+pro_N/2:length(xc)-N/2-pro_N/2;7 XT=zeros(1,length(index));8
9 for i=index10 cell_left=xc(1,i-N/2-pro_N/2:i-pro_N/2-1);11 cell_right=xc(1,i+pro_N/2+1:i+N/2+pro_N/2);12 Z=min([mean(cell_left),mean(cell_right)]);13
14 XT(1,i-N/2-pro_N/2)=Z.*alpha;15 end16
17 end
View Code
test_cfar_so.m
1 %%程序初始化2 clc;clear all;close all;3
4 %% 均匀背景噪声(单目标&多目标)5 % shape=[200];6 % variance=200;7 % noise_db=20;8 % noise_p=10.^(noise_db./10);9 % show_out=0;10 % [ xc ] =env_uniform(variance, shape, noise_db,show_out);11
12 %单目标13 % SNR1=15; signal1_p=10.^(SNR1./10).*noise_p;14 % xc(1,90)=signal1_p;15 %
16 %多目标17 % SNR1=20;signal1_p=10.^(SNR1./10).*noise_p;18 % xc(1,90)=signal1_p;19 % SNR2=15;signal2_p=10.^(SNR2./10).*noise_p;20 % xc(1,102)=signal2_p;21
22
23 %% 杂波边缘背景噪声(单目标&多目标)24 shape=[100,200];25 variance=200;26 noise_db=[20,30];27 noise_p=10.^(noise_db./10);28 show_out=0;29 [ xc ] =env_edge(variance, shape, noise_db,show_out);30
31 %多目标32 SNR1=15;signal1_p=10.^(SNR1./10).*noise_p(1,end);33 SNR2=12;signal2_p=10.^(SNR2./10).*noise_p(1,end);34 SNR3=8;signal3_p=10.^(SNR3./10).*noise_p(1,end);35 SNR4=5;signal4_p=10.^(SNR4./10).*noise_p(1,end);36
37 loc1=randi([43,44],1,1);38 xc(1,loc1)=signal1_p;39 loc2=randi([46,48],1,1);40 xc(1,loc2)=signal3_p;41 loc3=randi([50,53],1,1);42 xc(1,loc3)=signal2_p;43 loc4=randi([55,58],1,1);44 xc(1,loc4)=signal1_p;45 % loc5=randi([90,93],1,1); %接近杂波区,可是依然在46 % xc(1,loc5)=signal1_p;47 % xc(1,loc5)=signal2_p; %这种杂波边缘有目标的状况,还须要优化48 % xc(1,loc5)=signal3_p;49
50 loc6=randi([102,108],1,1);51 xc(1,loc6)=signal3_p;52
53 %% 算法结果&图谱显示54 N=36;55 pro_N=2;56 PAD=10^(-4);57 [ index, XT ] =cfar_so( abs(xc), N, pro_N, PAD);58
59 figure;60 plot(10.*log(abs(xc))./log(10)),hold on;61 plot(index,10.*log(abs(XT))./log(10)),hold on;
View Code
图8 SO-CFAR效果图
cfar_os.m 有序统计恒虚警算法实现
优势:多目标检测性能很好;
缺点:杂波边缘区域虚警几率提升;
1 function [ index, XT ] =cfar_os( xc, N, k, pro_N, PAD)2 %假设回波服从高斯分布3 %alpha赋值有些问题,一个比较复杂的高次函数4
5 %%计算alpha6 %syms alpha PFA;7 % PFA(alpha)=gamma(N-1).*gamma(N-k+alpha-1)./gamma(N-k-1)./gamma(N+alpha-1);8 % [alpha,~,~]=solve(PFA(alpha)==PAD,'ReturnConditions', true) ;9
10 alpha=N.*(PAD.^(-1./N)-1);11
12 index=1+N/2+pro_N/2:length(xc)-N/2-pro_N/2;13 XT=zeros(1,length(index));14
15 for i=index16 cell_left=xc(1,i-N/2-pro_N/2:i-pro_N/2-1);17 cell_right=xc(1,i+pro_N/2+1:i+N/2+pro_N/2);18 cell_all=cat(2,cell_left,cell_right);19 cell_sort=sort(cell_all);20
21 Z=cell_sort(1,k);22
23 XT(1,i-N/2-pro_N/2)=Z.*alpha;24 end25
26 end
View Code
test_cfar_os.m
1 %%程序初始化2 clc;clear all;close all;3
4 %% 均匀背景噪声(单目标&多目标)5 % shape=[200];6 % variance=200;7 % noise_db=20;8 % noise_p=10.^(noise_db./10);9 % show_out=0;10 % [ xc ] =env_uniform(variance, shape, noise_db,show_out);11
12 %单目标13 % SNR1=15; signal1_p=10.^(SNR1./10).*noise_p;14 % xc(1,90)=signal1_p;15 %
16 %多目标17 % SNR1=20;signal1_p=10.^(SNR1./10).*noise_p;18 % xc(1,90)=signal1_p;19 % SNR2=15;signal2_p=10.^(SNR2./10).*noise_p;20 % xc(1,102)=signal2_p;21
22
23 %% 杂波边缘背景噪声(单目标&多目标)24 shape=[100,200];25 variance=200;26 noise_db=[20,30];27 noise_p=10.^(noise_db./10);28 show_out=0;29 [ xc ] =env_edge(variance, shape, noise_db,show_out);30
31 %多目标32 SNR1=15;signal1_p=10.^(SNR1./10).*noise_p(1,end);33 SNR2=12;signal2_p=10.^(SNR2./10).*noise_p(1,end);34 SNR3=8;signal3_p=10.^(SNR3./10).*noise_p(1,end);35 SNR4=5;signal4_p=10.^(SNR4./10).*noise_p(1,end);36
37 loc1=randi([43,44],1,1);38 xc(1,loc1)=signal1_p;39 loc2=randi([46,48],1,1);40 xc(1,loc2)=signal3_p;41 loc3=randi([50,53],1,1);42 xc(1,loc3)=signal2_p;43 loc4=randi([55,58],1,1);44 xc(1,loc4)=signal1_p;45 loc5=randi([90,93],1,1); %接近杂波区,可是依然在46 % xc(1,loc5)=signal1_p;47 xc(1,loc5)=signal2_p; %这种杂波边缘有目标的状况,还须要优化48 % xc(1,loc5)=signal3_p;49
50 loc6=randi([102,108],1,1);51 xc(1,loc6)=signal3_p;52
53 %% 算法结果&图谱显示54 N=36;55 pro_N=2;56 k=2.*N./4;57 PAD=10^(-4);58 [ index, XT ] =cfar_os( abs(xc), N, k, pro_N, PAD);59
60 figure;61 plot(10.*log(abs(xc))./log(10)),hold on;62 plot(index,10.*log(abs(XT))./log(10)),hold on;
View Code
图9 OS-CAFR效果图
cfar_tc.m 杂波图恒虚警算法实现
优势:经过提升累积帧数,杂波背景噪声功率趋近于理论值
缺点:对于慢移动目标有自遮掩效果
1 function [ index, XT, xc_tpn ] =cfar_tc( xc, xc_tp, N, pro_N, PAD)2 %假设回波服从高斯分布3 %
4 xc_tc=zeros(1,length(xc));5 alpha=N.*(PAD.^(-1./N)-1);6 xc_tc(1,2:end-1)=xc_tp(1,2:end-1)./3+xc(1,1:end-2)./3+xc(1,3:end)./3;7 xc_tpn=xc_tp(1,1:end)./2+xc(1,1:end)./2;8 xc_tc(1,1)=xc_tpn(1,1);9 xc_tc(1,end)=xc_tpn(1,end);10
11 index=1+N/2+pro_N/2:length(xc)-N/2-pro_N/2;12 XT=zeros(1,length(index));13
14 for i=index15 cell_left=xc_tc(1,i-N/2-pro_N/2:i-pro_N/2-1);16 cell_right=xc_tc(1,i+pro_N/2+1:i+N/2+pro_N/2);17 Z=(sum(cell_left)+sum(cell_right))./N;18
19 XT(1,i-N/2-pro_N/2)=Z.*alpha;20 end21
22 end
View Code
test_cfar_tc.m
1 %%程序初始化2 clc;clear all;close all;3
4 %% 均匀背景噪声(单目标&多目标)5 % shape=[200];6 % variance=200;7 % noise_db=20;8 % noise_p=10.^(noise_db./10);9 % show_out=0;10 % [ xc ] =env_uniform(variance, shape, noise_db,show_out);11
12 %单目标13 % SNR1=15; signal1_p=10.^(SNR1./10).*noise_p;14 % xc(1,90)=signal1_p;15 %
16 %多目标17 % SNR1=20;signal1_p=10.^(SNR1./10).*noise_p;18 % xc(1,90)=signal1_p;19 % SNR2=15;signal2_p=10.^(SNR2./10).*noise_p;20 % xc(1,102)=signal2_p;21
22
23 %% 杂波边缘背景噪声(单目标&多目标)24 shape=[100,200];25 variance=200;26 noise_db=[20,30];27 noise_p=10.^(noise_db./10);28 show_out=0;29 % [ xc ] =env_edge(variance, shape, noise_db, show_out);30
31 %多目标32 SNR1=15;signal1_p=10.^(SNR1./10).*noise_p(1,end);33 SNR2=12;signal2_p=10.^(SNR2./10).*noise_p(1,end);34 SNR3=8;signal3_p=10.^(SNR3./10).*noise_p(1,end);35 SNR4=5;signal4_p=10.^(SNR4./10).*noise_p(1,end);36
37 % loc1=randi([43,44],1,1);38 % xc(1,loc1)=signal1_p;39 % loc2=randi([46,48],1,1);40 % xc(1,loc2)=signal3_p;41 % loc3=randi([50,53],1,1);42 % xc(1,loc3)=signal2_p;43 % loc4=randi([55,58],1,1);44 % xc(1,loc4)=signal1_p;45 % loc5=randi([90,93],1,1); %接近杂波区,可是依然在46 % xc(1,loc5)=signal1_p;47 % xc(1,loc5)=signal2_p; %这种杂波边缘有目标的状况,还须要优化48 % xc(1,loc5)=signal3_p;49
50 % loc6=randi([102,108],1,1);51 % xc(1,loc6)=signal3_p;52
53 %%迭代算法实现(杂波图)54 N=36;55 u=0.001;56 PAD=10^(-4);57 alpha=N.*(PAD.^(-1./N)-1);58 xtp=zeros(1,shape(end));59 d0=0;60 d1=[0];61 for i=1:1:4000
62 [ xc ] =env_edge(variance, shape, noise_db,show_out);63
64 loc1=randi([43,44],1,1);65 xc(1,loc1)=signal1_p;66 loc2=randi([46,48],1,1);67 xc(1,loc2)=signal3_p;68 loc3=randi([50,53],1,1);69 xc(1,loc3)=signal2_p;70 loc4=randi([55,58],1,1);71 xc(1,loc4)=signal1_p;72
73 loc6=randi([102,108],1,1);74 xc(1,loc6)=signal3_p;75
76 xtp=xtp.*(1-u)+xc.*u;77 d0=d0.*(1-u)+u;78 d1=cat(2,d1,d0);79
80 if mod(i,100)==081 %%图谱显示82 figure;83 plot(10.*log(abs(xc))./log(10)),hold on;84 plot(10.*log(abs(xtp.*alpha./d0))./log(10)),hold on;85 end86
87 end
View Code
图10 杂波图CFAR效果图
五,总结
理想状况下的CFAR算法:
①多目标检测性能很好,几乎互不影响;
②杂波边缘区域,突变很快,虚警率稳定;
③慢移动目标自遮掩改善;
④算法实用,复杂度适中,理论可实现;
六,源程序完善[添加环境杂波模拟程序-一维距离元] 2019.08.02
env_uniform.m文件
1 function [ xc ] = env_uniform(variance, shape, power_db, show_out)2 %UNIFORM_EN 此处显示有关此函数的摘要3 % 此处显示详细说明4 if (nargin==3)5 show_out=0;6 end7
8 c=10^(power_db/10); % 这里是幅度——功率9 xc=c + random('Normal',0,variance,1,shape);10 if show_out==111 figure;plot(10.*log(abs(xc))./log(10));12 end13
14 end
View Code
env_edge.m文件
1 function [ xc ] = env_edge(variance, shape, power_db, show_out)2 %UNIFORM_EN 此处显示有关此函数的摘要3 % 此处显示详细说明4 if (nargin==3)5 show_out=0;6 end7
8 c=10.^(power_db./10); % 这里是幅度——功率9 xc=random('Normal',0,variance,1,shape(1,end));10 xc(1,1:end)=xc(1,1:end)+c(1,1);11 index=1;12 for i=1:length(power_db)13 xc(1,index:shape(1,i))=xc(1,index:shape(1,i)).*c(1,i)./c(1,1);14 index=shape(1,i)+1;15 end16
17
18 if show_out==119 figure;plot(20.*log(abs(xc))./log(10));20 end21
22 end
View Code