PKU-Millimeter-Wave-Radar-T.../main.m

113 lines
3.7 KiB
Mathematica
Raw Normal View History

2024-03-11 21:03:35 +08:00
%% MATLAB仿
%% IWR1843EVM+DCA1000
clc;clear;close all;
Frame =1; %
for frame =1:Frame %
%%
parameter = generateParameter();
parameter.frame = frame;
%%
rawData = generateSignal(parameter);
firstChirp = rawData(1,:,1);
figure(1);
plot(real(firstChirp));
hold on;
plot(imag(firstChirp));
xlabel(''); ylabel('');title('');%1chirp
%%
rangeRes = parameter.c / (2 * parameter.BandwidthValid); %
rangeIndex = (0:parameter.rangeBin-1) * rangeRes;
speedRes = parameter.lambda / (2 * parameter.dopplerBin * parameter.Tr);
dopplerIndex = (-parameter.dopplerBin/2:1:parameter.dopplerBin/2 - 1) * speedRes;
angleRes = parameter.lambda / (parameter.virtualAntenna * parameter.dx) * 180 / pi;
angleIndex = (-parameter.virtualAntenna/2:1:parameter.virtualAntenna/2 - 1) * angleRes;
%% 1D FFT
fft1dData = fft(firstChirp);
figure(2);
plot(rangeIndex,db(abs(fft1dData)./max(abs(fft1dData))));
xlabel('(m)'); ylabel('(dB)');title('FFT');
%% 2D FFT
%% -
channelNum = size(rawData,1);
rangebinNum = size(rawData,2);
dopplerbinNum = size(rawData,3);
fft2dDataPower= zeros(size(rawData));
fft2dDataDB = zeros(size(rawData));
fftRADataPower= zeros(size(rawData));
for chanId = 1:1:channelNum
fft2dDataPower(chanId,:,:) = RDfftMatrix(rawData(chanId,:,:));
end
figure(3);
mesh(dopplerIndex',rangeIndex,db(abs(squeeze(fft2dDataPower(chanId,:,:)))));
view(2);
xlabel('(m/s)'); ylabel('(m)'); zlabel('');
title('-');
mesh(abs(squeeze(fft2dDataPower(chanId,:,:))));
display_static=[30,100,400,300];
set(gcf,'Position',display_static); % [x,y,,]
%% -
for dopplerId = 1:1:dopplerbinNum
fftRADataPower(:,:,dopplerId) = RAfftMatrix(rawData(:,:,dopplerId));
end
figure(4);
imagesc(rangeIndex,angleIndex,(abs(squeeze(fftRADataPower(:,:,dopplerId)))));
view(2);
xlabel('(m)'); ylabel(''); zlabel('');
title('-');
%%
accumulateRD = chan_Accumulate((fft2dDataPower));
figure(5);
imagesc(dopplerIndex',rangeIndex,db(accumulateRD));
view(2);
xlabel('(m/s)'); ylabel('(m)'); zlabel('');
title([' ',num2str(frame),'']);
pause(0.01);
%% CFAR
cfarParameter = generateCfarParameter(); %cfar
[pointList,cfarRD] = cfar(cfarParameter,db(accumulateRD));
figure(6);
mesh(dopplerIndex',rangeIndex,cfarRD);
xlabel('(m/s)'); ylabel('(m)'); zlabel('');
title('cfar');
display_static=[30,100,400,300];
set(gcf,'Position',display_static); % [x,y,,]
%% peakSearch
[RD_pearkSearch,peakSearchList] = peakSearch(cfarRD,pointList);
detectPointNum = size(peakSearchList,2);
%% DOA
for targetIdx = 1:detectPointNum
rangeBin = peakSearchList(1,targetIdx);
speedBin = peakSearchList(2,targetIdx);
range = (rangeBin - 1) * rangeRes;
speed = (speedBin - parameter.dopplerBin/2 - 1) * speedRes;
ant = squeeze(fft2dDataPower(:,rangeBin,speedBin));
[angle,doa_abs] = doa(parameter,ant);
figure(7);
angleIndex = asin((-512:1:512-1)/512) * 180 / pi;
hold on;
plot(angleIndex,doa_abs);grid on
title('');
xlabel('');ylabel('');
fprintf('%d%f,%f,%f\n',targetIdx,range,speed,angle);
end
end