当前位置:   article > 正文

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

cfar检测原理

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

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

CFAR原理思路解释

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

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

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

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

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

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

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

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

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

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

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

 代码:

  1. %% 初始化
  2. close all;
  3. clc;
  4. tarR = [10 20]; %目标距离
  5. tarV = [-3 10]; %目标速度
  6. c = 3*10^8;
  7. f0 = 24.25*10^9;
  8. T = 0.0002; %chirp Sweep Time
  9. B = 400*10^6; %chirp bandwidth
  10. L = 128; %slow-time dimension,num of chirps
  11. N = 128; %fast-time dimension,num of samples
  12. Npad = 1;
  13. Lpad = 1;
  14. %% 生成回波信号
  15. S1 = zeros(L,N);
  16. for l = 1:L
  17. for n = 1:N
  18. 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));
  19. end
  20. end
  21. S1 = awgn(S1,20);
  22. S2 = zeros(L,N);
  23. for l = 1:L
  24. for n = 1:N
  25. 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));
  26. end
  27. end
  28. S2 = awgn(S2,20);
  29. sigReceive = S1+S2;
  30. %% 距离维FFT
  31. hanning1 = hanning(N,'periodic');
  32. sigRWin = zeros(L,N);
  33. for ii = 1:L
  34. sigRWin(ii,:) = hanning1'.*sigReceive(ii,:);
  35. end
  36. sigRfft = zeros(L,N*Npad);
  37. for ii = 1:L
  38. sigRfft(ii,:) = fft(sigRWin(ii,:),N*Npad);
  39. %第一行做fft
  40. end
  41. %% LFMCW雷达的信号序列。由于再次仅仅那只是模拟一维CA-CFAR故只分析其中一行
  42. Rres = c/(2*B*Npad);
  43. sigRfft1=sigRfft(1,:);
  44. plot(Rres*(1:N*Npad),10*log(abs(sigRfft1))),title('Range Mesure')
  45. xlabel('Range/m'),ylabel('Db');
  46. hold on
  47. %% 一维CA-CFAR
  48. Pfa = 10^(-6);
  49. Rres_rdm = c/(2*B);
  50. Range_Dim = Rres_rdm*(1:N);
  51. Range_Map = abs(sigRfft1);
  52. referCell_num = 9;
  53. proCell_num = 5;
  54. proCell = zeros(proCell_num,1);
  55. [r,c] = size(Range_Map);
  56. CFAR_Map_num = 128 - (referCell_num-1);
  57. CFAR_Map = zeros(CFAR_Map_num,1);
  58. referCell = referCell_num;
  59. alpha = referCell*(Pfa^(-1/referCell) - 1);
  60. for i = 1:CFAR_Map_num
  61. referWindow = Range_Map(i:i+referCell_num-1);
  62. proCell = referWindow(1+(referCell_num - proCell_num)/2:referCell_num - (referCell_num - proCell_num)/2);
  63. Beta = (sum(referWindow) - sum(proCell))/(referCell);
  64. CFAR_Map(i) = alpha*Beta;
  65. end
  66. cha=referCell_num-proCell_num;
  67. 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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/651549
推荐阅读
相关标签
  

闽ICP备14008679号