FMCW MIMO雷达距离角度扇形谱图生成仿真代码

科技   2024-10-30 10:32   江苏  

点击下方卡片,关注“调皮连续波
一起学习和科普雷达技术!
【正文】
编辑|雷达小助理  审核|调皮哥 

最近还有同学问我这种图怎么画,这里给他们分享一下。

两个目标,距离分别为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; % 载频 Hzlambda = c / fc; % 波长
ADCNum = cfgOut.ADCNum; % ADC采样数目ChirpNum = cfgOut.ChirpNum; % 每帧发射Chirp数目
numTx = cfgOut.numTx; % 发射天线数目numRx = cfgOut.numRx; % 接收天线数目% arr = cfgOut.array; % 阵元排列[初阶版本的阵列]virtual_array = cfgOut.virtual_array; % 虚拟阵列structarr = 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 

推荐阅读

  4D毫米波雷达 :RADIal雷达数据分享(附下载链接)

(四十八)高分辨率4D成像汽车雷达系统中车辆移动方向和尺寸的估计

【本期结束】

加雷达群(备注单位+研究方向)、产品推广、品牌推广、招生招聘宣传、活动宣传、推文撰写和代发、转载开白、技术交流、年度会员、付费咨询、代码仿真、资料代找、企业引流、公众号互推、文章投稿、其他合作或问题,请扫描下方二维码

喜欢文章可以一键四连【分享】【收藏】【在看】【点赞】,有疑问可以在文章最下方写留言给我留言!

调皮连续波
做好雷达科普,与大家一起成长!
 最新文章