d1 = zeros(num_ant, Nn, Np);
d1(k,n,p) = 10*exp(1i*2*pi*(((2*K*R1)/c+ fd1)*(n*Ts) + fd1*p*T + (2*fc*R1)/c))*exp(1i*(2*pi/lambda)*d*(k-1)*sin(theta(1,1)*pi/180))...
+ 5*exp(1i*2*pi*(((2*K*R2)/c+ fd2)*(n*Ts) + fd2*p*T + (2*fc*R2)/c))*exp(1i*(2*pi/lambda)*d*(k-1)*sin(theta(1, 2)*pi/180))...
+ 1*exp(1i*2*pi*(((2*K*R3)/c+ fd3)*(n*Ts) + fd3*p*T + (2*fc*R3)/c))*exp(1i*(2*pi/lambda)*d*(k-1)*sin(theta(1, 2)*pi/180));
d1 = awgn(d1, 10, 'measured');
signal1 = abs(fft2(squeeze(d1(1, :, :))));
signal2 = abs(fft2(squeeze(d1(:,1,:))));
signal3 = abs(fft2(squeeze(d1(:,:,1))));
signal1 = fftshift(signal1, 2);
signal2 = fftshift(fftshift(signal2, 1), 2);
signal3 = fftshift(signal3, 1);
cfar2D = phased.CFARDetector2D('GuardBandSize',5,'TrainingBandSize',10 ,...
'ProbabilityFalseAlarm',1e-5);
hrdresp = phased.RangeDopplerResponse(...
'DopplerFFTLengthSource','Property',...
'DopplerFFTLength',1024,...
[resp,rng_grid,dop_grid] = step(hrdresp,abs(fft2(squeeze(d1(1, :, :)))),[1;1]);
rs = RandStream('mt19937ar','Seed',5);
resp = resp + npow/sqrt(2)*(randn(rs,size(resp)) + 1i*randn(rs,size(resp)));
[~,rangeIndx] = min(abs(rng_grid-[0 40]));
[~,dopplerIndx] = min(abs(dop_grid-[-30 30]));
[columnInds,rowInds] = meshgrid(dopplerIndx(1):dopplerIndx(2),...
rangeIndx(1):rangeIndx(2));
CUTIdx = [rowInds(:) columnInds(:)]';
detections = cfar2D(resp,CUTIdx);
detectionMap = zeros(size(resp));
detectionMap(rangeIndx(1):rangeIndx(2),dopplerIndx(1):dopplerIndx(2)) = ...
reshape(double(detections),rangeIndx(2)-rangeIndx(1)+1,dopplerIndx(2)-dopplerIndx(1)+1);
h = imagesc(dop_grid/128,rng_grid/512,detectionMap);
xlabel('Doppler (Hz)'); ylabel('Range (m)'); title('Range Doppler CFAR Detections');
h.Parent.YDir = 'normal';