function [output,CPE] = MX_CMLD_CFAR(input,samplepoints,SlidingWin,ProWin,r,T)
% input——输入的待测信号,必须是一个列向量
% samplepoints——input的采样点数
% SlidingWin——设定的前后滑窗宽度
% ProWin——设定的保护窗宽度
% r——设定的筛除掉的较大的参考单元样本数,r不能小于0
% T——设定的标准化因子
% output——input经CFAR检测器后输出的目标位置,输出0表示无目标
% CPE——Clutter Power Estimation杂波功率水平估计
Num_Target = 0;
output = 0;
CPE = zeros(samplepoints,1);
for i = 1:samplepoints
if i-ProWin<=1
Y = sort(input(i+ProWin+1:i+ProWin+SlidingWin));
if r+1<SlidingWin
Y = 1/length(Y)*sum([Y(1:end-r-1);(r+1)*Y(end-r)]);
elseif r+1==SlidingWin
Y = Y(1);
else
Y = 0;
end
Z = Y;
elseif i+ProWin>=samplepoints
X = sort(input(i-ProWin-SlidingWin:i-ProWin-1));
if r+1<SlidingWin
X = 1/length(X)*sum([X(1:end-r-1);(r+1)*X(end-r)]);
elseif r+1==SlidingWin
X = X(1);
else
X = 0;
end
Z = X;
else
X = sort(input(max(1,i-ProWin-SlidingWin):i-ProWin-1));
Y = sort(input(i+ProWin+1:min(samplepoints,i+ProWin+SlidingWin)));
if r+1<SlidingWin
if length(X)<SlidingWin
r0 = floor(r/SlidingWin*length(X));
X = 1/length(X)*sum([X(1:end-r0-1);(r0+1)*X(end-r0)]);
else
X = 1/length(X)*sum([X(1:end-r-1);(r+1)*X(end-r)]);
end
if length(Y)<SlidingWin
r0 = floor(r/SlidingWin*length(Y));
Y = 1/length(Y)*sum([Y(1:end-r0-1);(r0+1)*Y(end-r0)]);
else
Y = 1/length(Y)*sum([Y(1:end-r-1);(r+1)*Y(end-r)]);
end
elseif r+1==length(X)
X = X(1);
Y = Y(1);
else
X = 0;
Y = 0;
end
Z = max(X,Y);
end
CPE(i,1) = T(i)*Z;
if input(i,1) > CPE(i,1)
Num_Target = Num_Target + 1;
output(Num_Target,1) = i;
end
end
评论6