68 lines
3.0 KiB
Matlab
68 lines
3.0 KiB
Matlab
%% 请了解:什么是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
|