68 lines
3.0 KiB
Mathematica
68 lines
3.0 KiB
Mathematica
![]() |
%% 请了解:什么是CFAR,以及什么是2D-CFAR
|
|||
|
|
|||
|
function [pointList,cfarRD] = cfar(parameter,accumulateRD)
|
|||
|
|
|||
|
[rangeLen,dopplerLen] = size(accumulateRD);
|
|||
|
%% doppler维度搜索
|
|||
|
dopplerMethod = parameter.dopplerMethod;
|
|||
|
dopplerSNR = parameter.dopplerSNR;
|
|||
|
dopplerWinGuardLen = parameter.dopplerWinGuardLen;
|
|||
|
dopplerWinTrainLen = parameter.dopplerWinTrainLen;
|
|||
|
|
|||
|
dopplerLeft = accumulateRD(:,dopplerLen - dopplerWinGuardLen - dopplerWinTrainLen + 1:dopplerLen);
|
|||
|
dopplerRight = accumulateRD(:,1:dopplerWinGuardLen+dopplerWinTrainLen);
|
|||
|
dopplercfar = [dopplerLeft accumulateRD dopplerRight];
|
|||
|
dopplerCfarList = [];
|
|||
|
for rangeIdx = 1:rangeLen
|
|||
|
for dopplerIdx = 1:dopplerLen
|
|||
|
dopplerCfarIdx = dopplerIdx + dopplerWinGuardLen + dopplerWinTrainLen;
|
|||
|
leftCell = dopplercfar(rangeIdx,dopplerIdx:dopplerIdx+dopplerWinTrainLen-1);
|
|||
|
rightCell = dopplercfar(rangeIdx,dopplerCfarIdx+dopplerWinGuardLen:dopplerCfarIdx+dopplerWinGuardLen+dopplerWinTrainLen-1);
|
|||
|
leftNoise = mean(leftCell);
|
|||
|
rightNoise = mean(rightCell);
|
|||
|
noise = (leftNoise + rightNoise) / 2;
|
|||
|
indexdb = dopplercfar(rangeIdx,dopplerCfarIdx);
|
|||
|
targetSnr = indexdb - noise;
|
|||
|
if targetSnr > dopplerSNR
|
|||
|
dopplerCfarList = [dopplerCfarList dopplerIdx];
|
|||
|
cfarRDdoppler(rangeIdx,dopplerIdx) = indexdb;
|
|||
|
end
|
|||
|
end
|
|||
|
end
|
|||
|
dopplerCfarList = unique(dopplerCfarList);
|
|||
|
%% range维度搜索
|
|||
|
rangeMethod = parameter.rangeMethod;
|
|||
|
rangeSNR = parameter.rangeSNR;
|
|||
|
rangeWinGuardLen = parameter.rangeWinGuardLen;
|
|||
|
rangeWinTrainLen = parameter.rangeWinTrainLen;
|
|||
|
|
|||
|
rangeUp = accumulateRD(rangeLen - rangeWinGuardLen - rangeWinTrainLen + 1:rangeLen,:);
|
|||
|
rangeDown = accumulateRD(1:rangeWinGuardLen+rangeWinTrainLen,:);
|
|||
|
rangecfar = [rangeUp;accumulateRD;rangeDown];
|
|||
|
rangeCfarList = [];
|
|||
|
cfarRD = zeros(rangeLen,dopplerLen);
|
|||
|
for dopplerIdx = dopplerCfarList
|
|||
|
for rangeIdx = 1:rangeLen
|
|||
|
|
|||
|
rangeCfarIdx = rangeIdx + rangeWinGuardLen + rangeWinTrainLen;
|
|||
|
upCell = rangecfar(rangeIdx:rangeIdx+rangeWinTrainLen-1,dopplerIdx);
|
|||
|
downCell = rangecfar(rangeCfarIdx+rangeWinGuardLen:rangeCfarIdx+rangeWinGuardLen+rangeWinTrainLen-1,dopplerIdx);
|
|||
|
upNoise = mean(upCell);
|
|||
|
downNoise = mean(downCell);
|
|||
|
if rangeMethod == 1
|
|||
|
noise = (upNoise + downNoise) / 2;
|
|||
|
indexdb = rangecfar(rangeCfarIdx,dopplerIdx);
|
|||
|
targetSnr = indexdb - noise;
|
|||
|
if targetSnr > rangeSNR
|
|||
|
rangeCfarList = [rangeCfarList [rangeIdx;dopplerIdx]];
|
|||
|
cfarRD(rangeIdx,dopplerIdx) = indexdb;
|
|||
|
end
|
|||
|
elseif dopplerMethod == 2
|
|||
|
elseif dopplerMethod == 3
|
|||
|
else
|
|||
|
end
|
|||
|
end
|
|||
|
end
|
|||
|
pointList = rangeCfarList;
|
|||
|
end
|