CFAR原理详解及其matlab代码实现

引言:恒虚警检测算法在雷达目标识别中应用的比较多,最简单的有CA-CFAR啥啥的。其实该算法的应用很简单,只需要根据想要的虚警概率去计算\alpha,再利用周围参考单元的值去估计待测单元的噪声功率,进而就能得到门限=\alpha *\beta ^{2}(其中\beta为噪声功率)。

应用简单但是原理确实有些不好理解,故在此解释原理思路。

CFAR原理思路解释

CFAR其实可以归结为《信号检测与估计》中的内容,意为恒虚警检测,基于奈曼-皮尔逊准则。在雷达目标检测当中应用广泛。但是在使用其的时候,总是会思考为什么?为什么门限=\alpha *\beta ^{2}?为什么\alpha可以限定p_{f}(虚警概率)?为什么\beta ^{2}可以由周围的参考单元去求得?为什么不直接求自身的单元进而求\beta ^{2}?

文献[1]中指出: 精确已知干扰功率是准确设定检测门限的前提条件,但是对一般雷达系统而言,干扰功率未知。为使雷达系统具有恒定的虚警概率,可以实时地从数据中估计实际干扰噪声功率电平,从而相应地调整雷达检测门限。恒虚警处理过程中所使用的方法基于两个主要假设:
1、待检测单元的杂波统计特性与临近单元所含杂波特性一致,临近单元所含杂波对于与潜在目标进行竞争的杂波具有代表性。
2、临近单元仅存在干扰噪声,不包含任何目标。
在上述主要假设下,可以从临近单元的数据中估计得到待检测单元的干扰杂波统计特性。待估计的干扰杂波统计特性由完成恒虚警概率门限检测所需要的量决定。

 从上述讲述可以看出CFAR的思路:CFAR研究的是:待测单元未知、参考位置没有目标的情况。因为待测单元未知,故需要用周围参考单元的功率(没有目标,因此是噪声功率)去估计待测单元的噪声功率。而为了精准的设计出自适应门限,恰恰需要的就是噪声功率,只要得到了噪声功率之后,乘以\alpha(一般\alpha>>1)得到门限,之后将待测单元的值和这个门限比较若大于门限,也就意味着有目标。

至于为什么要乘\alpha,和\alpha的取值与什么有关?关于为什么要乘\alpha这是因为噪声功率的分布是忽高忽低的,可能这一单元的功率高,下一单元你的功率就低。而前面估计出的是平均噪声功率,这样出现虚警的概率就会达到惊人的50%,很显然不是我们想要的。因此我们需要去乘以一个远远大于1的数去将这个概率降低,这里是有一个\alphap_{f}的公式的,代码中有可以看一下,在这里不在写了。如下图所示乘以\alpha之后使得虚警概率也会大大降低(红线左边的区域)。

在这篇文章就不再填写公式只是探讨一下思路。以上大思路讲解完了,提一下具体的不同算法的操作。

1、CA-CFAR是利用周围参考单元的平均值去估计的待测单元的噪声功率。

2、还有其他的什么最小、最大是将周围参看单元排序之后取最大或最小的值去估计。

关于这几种算法有什么优缺点在此不多叙述,前者可以更稳定但是会有遮蔽效应,后者解决了遮蔽效应但...

一维CA-CFARmatlab演示及其代码[2]:

 下面对一维CA-CFAR进行仿真:

 结果不错。很有效的降低了噪声干扰。

 代码:

%% 初始化
close all;
clc;
tarR = [10 20];    %目标距离
tarV = [-3 10];     %目标速度
c = 3*10^8;
f0 = 24.25*10^9;
T = 0.0002;   %chirp Sweep Time
B = 400*10^6; %chirp bandwidth
L = 128;            %slow-time dimension,num of chirps
N = 128;           %fast-time dimension,num of samples
Npad = 1;          
Lpad = 1;         
%% 生成回波信号
S1 = zeros(L,N);
for l = 1:L
    for n = 1:N
          S1(l,n) = 500*exp(1i*2*pi*((2*B*(tarR(1)+tarV(1)*T*l)/(c*T)+(2*f0*tarV(1))/c)*T/N*n+((2*f0)*(tarR(1)+     tarV(1)*T*l     ))/c));
    end
end
S1 = awgn(S1,20);
S2 = zeros(L,N);
for l = 1:L
    for n = 1:N
          S2(l,n) = 500*exp(1i*2*pi*((2*B*(tarR(2)+tarV(2)*T*l)/(c*T)+(2*f0*tarV(2))/c)*T/N*n+((2*f0)*(tarR(2)+tarV(2)*T*l))/c));
    end
end
S2 = awgn(S2,20);
sigReceive = S1+S2;
%% 距离维FFT
hanning1 = hanning(N,'periodic');
sigRWin = zeros(L,N);
for ii = 1:L
    sigRWin(ii,:) = hanning1'.*sigReceive(ii,:);
end
sigRfft = zeros(L,N*Npad);
for ii = 1:L
    sigRfft(ii,:) = fft(sigRWin(ii,:),N*Npad);
    %第一行做fft
end
%% LFMCW雷达的信号序列。由于再次仅仅那只是模拟一维CA-CFAR故只分析其中一行
Rres = c/(2*B*Npad);
sigRfft1=sigRfft(1,:);
plot(Rres*(1:N*Npad),10*log(abs(sigRfft1))),title('Range Mesure')
xlabel('Range/m'),ylabel('Db');
hold on
%% 一维CA-CFAR
Pfa = 10^(-6);
Rres_rdm = c/(2*B);
Range_Dim = Rres_rdm*(1:N);
Range_Map = abs(sigRfft1);
referCell_num = 9;
proCell_num = 5;
proCell = zeros(proCell_num,1);
[r,c] = size(Range_Map);
CFAR_Map_num = 128 - (referCell_num-1);
CFAR_Map = zeros(CFAR_Map_num,1);
referCell = referCell_num;
alpha = referCell*(Pfa^(-1/referCell) - 1);
for i = 1:CFAR_Map_num
        referWindow = Range_Map(i:i+referCell_num-1);
        proCell = referWindow(1+(referCell_num - proCell_num)/2:referCell_num - (referCell_num - proCell_num)/2);
        Beta = (sum(referWindow) - sum(proCell))/(referCell);
        CFAR_Map(i) = alpha*Beta;
end
cha=referCell_num-proCell_num;
plot(Rres*(1+cha:N*Npad-cha),10*log(CFAR_Map));

参考文献:

[1]严鑫. 毫米波雷达多目标检测与参数估计算法研究[D].东南大学,2017.

[2]FMCW雷达距离多普勒(RDM)处理方法中距离分辨率和速度分辨率的推导_GtJason_1998的博客-CSDN博客_多普勒分辨率https://blog.csdn.net/qq_41248471/article/details/104276739

  • 28
    点赞
  • 229
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 14
    评论
下面给出一个简单的MATLAB代码示例,用于实现基于CA-CFAR(Cell Averaging CFAR)算法的目标检测。假设雷达回波数据存储在一个矩阵 `R` 中,大小为 $M\times N$,其中 $M$ 表示距离维(即一帧数据中的点数),$N$ 表示时间维(即一帧数据中的采样点数)。 ```matlab % CFAR目标检测算法 M = size(R, 1); % 距离维大小 N = size(R, 2); % 时间维大小 K = 20; % 每个子窗口的长度 G = 10; % 保护间隔(guard interval)的长度 Pfa = 1e-6; % 假警率 Np = 100; % 计算阈值时使用的噪声点数 Nt = round(K/2); % 目标点所在的索引 Np_half = round(Np/2); % 计算噪声分布的参数 noise = sort(R(:)); noise_mean = mean(noise(1:Np)); noise_var = mean((noise(1:Np)-noise_mean).^2); % 按照CA-CFAR算法进行目标检测 RD = zeros(M, N); for i = 1:N % 计算当前子窗口的起始和结束索引 j_start = max(1, i-K-G); j_end = min(N, i+K+G); % 计算当前子窗口内的噪声均值和方差 noise_window = noise(j_start:j_end); noise_mean_sub = mean(noise_window); noise_var_sub = mean((noise_window-noise_mean_sub).^2); % 计算当前子窗口的阈值 threshold = noise_mean_sub + sqrt(2*noise_var_sub*log(1/Pfa)); % 判断目标是否存在 if R(Nt, i) > threshold RD(Nt, i) = R(Nt, i) - threshold; end end % 可视化检测结果 figure; imagesc(10*log10(RD)); title('CA-CFAR Detection Result'); xlabel('Time (samples)'); ylabel('Range (samples)'); colorbar; ``` 上面的代码中,我们首先计算了整个雷达回波数据的噪声分布参数(即均值和方差),然后按照CA-CFAR算法对每个子窗口进行处理,得到目标检测结果。最后,我们使用MATLAB的 `imagesc()` 函数将检测结果可视化出来。需要注意的是,这个代码示例并不包括目标距离和速度的计算,这些需要根据具体的雷达系统和目标情况进行进一步处理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

请叫我7plus

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值