雷達無線電系列(三)經典CFAR算法門限因子alpha計算(matlab)


前言 本文匯集CA、SO、GO、OS、雜波圖等恆虛警算法的門限因子求解方法及其函數

 

1,CA-CFAR 【非常簡單,可以直接求解】

%% 均值恆虛警_門限因子計算公式
%% 版本:v1
%% 時間:2019.11.08
%% 終版【不在優化】

function [ alpha ] = form_ALPHA_ca( PFA,N )
%FORM_ALPHA_CA 此處顯示有關此函數的摘要
%   PFA:虛警概率
%   N:參考單元個數

alpha=N.*(PFA.^(-1./N)-1);

end

  

2,SO-CFAR  【這個門限因子求解是一個非常復雜的高階函數,基本上無法通過反函數求解,這里使用二分求解法解決】

PFA計算函數

%% 虛警概率_均值選小
%% 時間:2019.11.27
%% 版本:v1【不在優化】

function [ PFA ] = form_PFA_so( ALPHA,N )
%FORM_PFA_GO 此處顯示有關此函數的摘要
%   ALPHA:門限因子
%   N:參考窗個數

PFA=0;
n=N/2;
for i=0:n-1
    PFA=PFA+2.*gamma(n+i)./gamma(i+1)./gamma(n).*(2+ALPHA./n).^(-(n+i));
end

end

  

2,GO-CFAR

PFA計算函數

%% 虛警概率_均值選大
%% 時間:2019.11.27
%% 版本:v1【不在優化】

function [ PFA ] = form_PFA_go( ALPHA,N )
%FORM_PFA_GO 此處顯示有關此函數的摘要
%   ALPHA:門限因子
%   N:參考窗個數

PFA=0;
n=N/2;
for i=0:n-1
    PFA=PFA-2.*gamma(n+i)./gamma(i+1)./gamma(n).*(2+ALPHA./n).^(-(n+i));
end
PFA=PFA+2.*(1+ALPHA./n).^(-n);

end

  

3,OS-CFAR 

%% 虛警概率_有序
%% 時間:2019.11.27
%% 版本:v1【不在優化】

function [ PFA ] = form_PFA_os( ALPHA,N,Rate )
%FORM_PFA_GO 此處顯示有關此函數的摘要
%   ALPHA:門限因子
%   N:參考窗個數
%   Rate:比例點

k=ceil(N.*Rate);
PFA=gamma(N+1).*gamma(N-k+ALPHA+1)./gamma(N-k+1)./gamma(N+ALPHA+1);

end

  

4,雜波圖

點參數

%% 虛警概率_雜波圖_點參數
%% 時間:2019.11.27
%% 版本:v1【不在優化】

function [ PFA ] = form_PFA_cm_point( ALPHA,m,r )
%FORM_PFA_CM 此處顯示有關此函數的摘要
%   ALPHA:門限因子
%   m:天線旋轉周期

PFA=1;
for n=0:m-1
    PFA=PFA.*(1+ALPHA.*r.*(1-r).^n).^-1;
end

end

 

面參數

%% 虛警概率_雜波圖_面參數
%% 時間:2019.11.27
%% 版本:v1【不在優化】

function [ PFA ] = form_PFA_cm_surface( ALPHA,m,r,M )
%FORM_PFA_CM 此處顯示有關此函數的摘要
%   ALPHA:門限因子
%   m:天線旋轉周期
%   M:參考單元數

PFA=1;
for n=0:m-1
    PFA=PFA.*(1+ALPHA.*r.*(1-r).^n./M).^-1;
end
end

  

5,二分求解法核心函數

%% 二分法求解方程的解
%% 時間:2019.11.27
%% 版本:v1【不在優化】

function [ d1 ] = func_SOLUTION_binary( d1_scope,d2_precision,func,parameter)
%FUNC_SOLUTION_BINARY 此處顯示有關此函數的摘要
%   d1: 已知數值
%   d2: 目標數值
%   d2_scope: 目標初始范圍【小值,大值】
%   d1_precision: 目標數值精度【精度值】
%   func: 公式
%   parameter: 相關參數【類型自定】 1=ALPHA, end=d2

shape=size(parameter);
if shape(2)==2      %只有一個參數額外參數需要輸入
    while 1
        d1=mean(d1_scope);
        d2=func(d1,parameter(1,1));     % 本質上是PFA_pre
        d2_difference=1/d2-1/parameter(1,end);
        if abs(d2_difference)<d2_precision || abs(d1_scope(1,1)-d1_scope(1,2))<0.001
            return;
        elseif d2_difference<0
            d1_scope(1,1)=d1;
        else
            d1_scope(1,2)=d1;
        end
    end
elseif shape(2)==3      % 用於OS_CFAR門限因子的計算
    while 1
        d1=mean(d1_scope);
        d2=func(d1,parameter(1,1),parameter(1,2));     % 本質上是PFA_pre
        d2_difference=1/d2-1/parameter(1,end);
        if abs(d2_difference)<d2_precision || abs(d1_scope(1,1)-d1_scope(1,2))<0.001
            return;
        elseif d2_difference<0
            d1_scope(1,1)=d1;
        else
            d1_scope(1,2)=d1;
        end
    end
end
end

  

6,測試樣例及其輸出結果

clear;

PFA=10^(-4);
N=36;
Rate=0.5;

[ ALPHA ] = form_ALPHA_ca( PFA,N );
[ PFA1 ] = form_PFA_ca( ALPHA,N );

d1_scope=[0,100];
d2_precision=1;
func1=@form_PFA_ca;
func2=@form_PFA_so;
func3=@form_PFA_go;
func4=@form_PFA_os;

func5=@form_PFA_cm_point;

parameter=[N,PFA];
parameter4=[N,Rate,PFA];
parameter5=[100,1./512,PFA];


[ ALPHA1 ] = func_SOLUTION_binary( d1_scope,d2_precision,func1,parameter);
[ ALPHA2 ] = func_SOLUTION_binary( d1_scope,d2_precision,func2,parameter);
[ ALPHA3 ] = func_SOLUTION_binary( d1_scope,d2_precision,func3,parameter);
ALPHA3_1=form_ALPHA_os (N,Rate,PFA);
[ ALPHA4 ] = func_SOLUTION_binary( d1_scope,d2_precision,func4,parameter4);

[ ALPHA5 ] = func_SOLUTION_binary( d1_scope,d2_precision,func5,parameter5);

輸出結果展示:

 

鏈接:https://pan.baidu.com/s/1mQjpBfzgAFYtsQLPPEAe7Q  提取碼:48p6


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM