最近还有同学问我这种图怎么画,这里给他们分享一下。
两个目标,距离分别为1m和2m,角度分别为30°和-30°,速度都是0。
效果如下图所示:
代码:
clc;clear;close all;
%% 目标和系统参数更新
disp(strcat(['=====','设置目标和系统参数','====='])); % 单板雷达模式
tarOut = ConfigureTarget; % 生成目标信息
cfgOut = ConfigureParameter(tarOut); % 生成毫米波雷达系统参数
%% 雷达采集数据
disp(strcat(['=====','雷达数据生成','=====']));
[RawData] = GenerateSigIQ(tarOut, cfgOut);
%% 物理参数更新
c = physconst('LightSpeed'); % 光速
fc = cfgOut.fc; % 载频 Hz
lambda = c / fc; % 波长
ADCNum = cfgOut.ADCNum; % ADC采样数目
ChirpNum = cfgOut.ChirpNum; % 每帧发射Chirp数目
numTx = cfgOut.numTx; % 发射天线数目
numRx = cfgOut.numRx; % 接收天线数目
% arr = cfgOut.array; % 阵元排列[初阶版本的阵列]
virtual_array = cfgOut.virtual_array; % 虚拟阵列struct
arr = virtual_array.virtual_arr;
arrNum = numTx * numRx; % 阵元数目
arrDx = cfgOut.arrdx; % 方位向阵元间距
arrDy = cfgOut.arrdx; % 俯仰向阵元间距
validB = cfgOut.validB; % 有效带宽
range_res = c / (2 * validB); % 距离分辨率
TF = cfgOut.Tc * (numTx * ChirpNum);
doppler_res = lambda / (2 * TF); % 多普勒分辨率
Frame = cfgOut.Frame; % 帧数
% 距离索引和速度索引
velocityIndex = (-ChirpNum / 2 : 1 : ChirpNum / 2 - 1) * doppler_res;
rangeIndex = (0 : ADCNum - 1) * range_res;
RawData = reshape(RawData, ADCNum, ChirpNum, [], arrNum);
disp(strcat(['雷达信号的维度为:',num2str(size(RawData))]));
for frame_id = 1 : Frame
adcData = squeeze(RawData(:, :, frame_id, :));
%% 距离维FFT
disp(strcat(['=====','Range-Profile生成','=====']));
fftOut1 = rangeFFT(adcData);
rangeFFTOut = fftOut1.rangeFFT;
rangeFFTOutX = squeeze(rangeFFTOut(:,1,1));
[~,rangeFFTOutIndex] = max(rangeFFTOutX);
figure(1);
set(gcf,'unit','centimeters','position',[20,12,10,10])
plot(rangeIndex, 10*log10(abs(rangeFFTOut(:,1,1))));
xlabel('Range(m)');ylabel('Amplitude(dB)');
title(strcat(['第',num2str(frame_id),'帧-目标距离分布']));grid minor;
scale = -90:0.5:90; %扫面范围
%% 距离-方位图生成
X = [squeeze(rangeFFTOut(:,1,1:4)),squeeze(rangeFFTOut(:,1,5:8))];
for m=1:size(rangeFFTOut,1)
RAM(m,:) = fftshift(fft(X(m,:),361));
end
figure(2);
subplot(121);
set(gcf,'unit','centimeters','position',[30,12,10,10])
[theta,rho] = meshgrid(scale, rangeIndex); % 网格化
xaxis = rho .* cosd(theta); % 横坐标
yaxis = rho .* sind(theta); % 纵坐标
surf(yaxis,xaxis,abs(RAM)*1e3,'EdgeColor','none');
view(2);colormap('jet');
xlabel('X-Range(m)','fontsize',15,'fontname','Times New Roman');ylabel('Y-Range(m)','fontsize',15,'fontname','Times New Roman');grid on; axis xy
title(strcat(['第',num2str(frame_id),'帧-距离方位FFT谱图']));grid minor;
set(gca,'GridLineStyle','- -');
set(gca,'GridAlpha',0.2);
set(gca,'LineWidth',1.5);
set(gca,'xminortick','on');
set(gca,'ygrid','on','GridColor',[0 0 0]);
colorbar;
%%多目标定位:CaponBF测角算法
M=8; %阵元单元
d = 0:lambda/2:(M-1)*lambda/2;%阵列天线
N = size(rangeFFTOut,1);
Rx =rangeFFTOut(:,:,1:8);
for r =1:size(Rx,1)
Y =squeeze( Rx(r,:,:)).';
R = (Y*Y')/size(Y,2);
R_inv = pinv(R);
idx = 1;
for i=scale
steeringVector = (exp(1j*2*pi/lambda*d*sind(i))).'; %转向矢量转置
P_Capon(idx,r) = 1/(steeringVector'*R_inv*steeringVector); %Capon算法
idx = idx + 1;
end
end
subplot(122);
set(gcf,'unit','centimeters','position',[30,12,10,10])
[theta,rho] = meshgrid(scale, rangeIndex); % 网格化
xaxis = rho .* cosd(theta); % 横坐标
yaxis = rho .* sind(theta); % 纵坐标
surf(yaxis,xaxis,10*log10(abs(P_Capon.')),'EdgeColor','none');
view(2);colormap('jet');
xlabel('X-Range(m)','fontsize',15,'fontname','Times New Roman');ylabel('Y-Range(m)','fontsize',15,'fontname','Times New Roman');grid on; axis xy
title(strcat(['第',num2str(frame_id),'帧-距离方位CaponBF谱图']));grid minor;
set(gca,'GridLineStyle','- -');
set(gca,'GridAlpha',0.2);
set(gca,'LineWidth',1.5);
set(gca,'xminortick','on');
set(gca,'ygrid','on','GridColor',[0 0 0]);
colorbar;
end
链接: https://pan.baidu.com/s/1QWCC0g156k0ERE3a-hECFQ?pwd=kqzc 提取码: kqzc
加雷达群(备注单位+研究方向)、产品推广、品牌推广、招生招聘宣传、活动宣传、推文撰写和代发、转载开白、技术交流、年度会员、付费咨询、代码仿真、资料代找、企业引流、公众号互推、文章投稿、其他合作或问题,请扫描下方二维码。
喜欢文章可以一键四连【分享】【收藏】【在看】【点赞】,有疑问可以在文章最下方【写留言】给我留言!