RD图绘制-雷达回波模拟-距离多普勒图绘制

生成64个雷达回波,并且绘制RD图,matlab程序

复制代码
%% 参数设置
clear; clc;close all;

fs = 30e6;          % 采样率 (Hz)
Tr = 100e-6;        % 脉冲重复周期 (s)
Tp = 50e-6;         % 脉宽 (s)
B = 10e6;           % 带宽 (Hz)
mu = B / Tp;        % 调频斜率 (Hz/s)

c = 3e8;            % 光速 (m/s)
v = 15;            % 目标径向速度 (m/s),远离为正
f0 = 10e9;          % 载频 (Hz)
lambda = c / f0;    % 波长 (m)
fd = 2 * v / lambda; % 多普勒频移 (Hz)

R0 = 5000;          % 初始距离 (m)
tau0 = 2 * R0 / c;  % 初始时延 (s)

% 离散参数
Npri = round(fs * Tr);      % 每个脉冲周期的采样点数 = 3000
Npulse = round(fs * Tp);    % 脉冲宽度内的采样点数 = 1500
num_pulses = 64;            % 脉冲数

% 快时间轴(仅用于生成 LFM 波形)
t_fast = (0:Npulse-1) / fs;   % 长度 1500

deltaRange = (c/fs)/2;  %相邻采样点的距离差
%% 生成单个 LFM 脉冲(无时延)
lfm_base = exp(1j * pi * mu * t_fast.^2);   % 基带 LFM 信号

figure;
plot(real(lfm_base));
%% 初始化接收矩阵(脉冲数 × 每周期采样点数)
rx_matrix = zeros(num_pulses, Npri, 'like', 1j);
%% 生成每个脉冲的回波
tau = zeros(num_pulses,  1); %存储延时
for k = 0:num_pulses-1
    % 1. 当前脉冲的时延(含距离走动)
    tau_k = tau0 + (2 * v * k * Tr) / c;
    tau(k+1) = tau_k; % 存储第k个脉冲的延时
    % 2. 时延对应的采样偏移(可能非整数,这里简单取整)
    shift = tau_k * fs;
    start_idx = round(shift) + 1;      % MATLAB 索引从1开始
    end_idx = start_idx + Npulse - 1; % Npulse表示一个脉冲的长度
    
    % 3. 多普勒相位(脉冲整体乘常数)
    doppler_phase = exp(1j * 2 * pi * fd * k * Tr);
    
    % 4. 将 LFM 信号放入对应位置并乘以多普勒相位
    if end_idx <= Npri && start_idx >= 1
        rx_matrix(k+1, start_idx:end_idx) = lfm_base * doppler_phase;
    end
end
%% 添加噪声
SNR_dB = 0;              % 信噪比,单位 dB,可调
signal_power = mean(abs(lfm_base).^2);   % 应该等于 1
noise_power = signal_power / (10^(SNR_dB/10));
% 生成复高斯白噪声(均值为0,方差为 noise_power)
noise = sqrt(noise_power/2) * (randn(size(rx_matrix)) + 1j*randn(size(rx_matrix)));
rx_matrix= rx_matrix + noise;


figure;
plot(real(rx_matrix(1,:)));

% rx_matrix 为 64×3000 的复矩阵,每行对应一个脉冲周期内的采样数据
%% 生成距离-多普勒图
mf = conj(fliplr(lfm_base));         % 匹配滤波器
pc_matrix = zeros(num_pulses, Npri); % 存储脉压后的矩阵
for k = 1:num_pulses
    echo = rx_matrix(k,:);           % 取出来第k个脉冲回波
    conv_full = conv(echo, mf);      % 进行卷积
    pc_matrix(k,:) = conv_full(Npulse : Npulse+Npri-1);
end

figure;
plot(abs(pc_matrix(1,:)));
title('第1个脉冲的脉压结果');
%% 多普勒处理
doppler_matrix = fftshift(fft(pc_matrix, num_pulses, 1), 1); %多普勒处理的矩阵
doppler_map = abs(doppler_matrix); % 取绝对值

%% 坐标轴
range_bin = (0:Npri-1)*(c/(2*fs)); % 距离门
f_d = (-num_pulses/2 : num_pulses/2-1)/(num_pulses*Tr); % 多普勒频率
v_axis = f_d*lambda/2; % 
%% 绘图
figure;
imagesc(range_bin, v_axis, 20*log10(doppler_map + eps));
axis xy; colormap(jet);
xlabel('距离 (m)');
ylabel('速度 (m/s)');
title('距离-多普勒图');
colorbar;
% 将幅度转换为 dB(可选,使动态范围更清晰)
doppler_map_db = 20 * log10(doppler_map + eps);  % 避免 log10(0)

%% 绘制三维曲面
% 将幅度转换为 dB(可选,使动态范围更清晰)
%doppler_map = doppler_map./max(doppler_map);
doppler_map_db = 20 * log10(doppler_map + eps);  % 避免 log10(0)
%% 目标出现在1001列
tarN = 1001;
tarecho = doppler_map(:,1001);
figure;
plot(v_axis,abs(tarecho ));
xlabel('速度 (m/s)');
ylabel('幅度');

%% 绘制三维距离-多普勒图
figure;
% 使用 surf 绘制曲面,X=距离,Y=速度,Z=幅度(dB)
surf(range_bin, v_axis, doppler_map_db, 'EdgeColor', 'none'); % 'EdgeColor','none' 去掉网格线,避免过密
xlabel('距离 (m)');
ylabel('速度 (m/s)');
zlabel('幅度 (dB)');
title('三维距离-多普勒图');
colormap(jet);           % 与二维图一致的配色
colorbar;                % 显示颜色条
% 调整视角:方位角 -30°,仰角 30°(可根据需要修改)
view(30, 20);
% 使坐标轴范围紧贴数据
axis tight;
zlim([20 100]);
% 可选:添加光照效果使曲面更具立体感
% lighting gouraud;
% light('Position', [1 0 1], 'Style', 'infinite');


相关推荐
通信小呆呆12 小时前
当算法有了“五感”:多模态数据融合如何向人体感官协同学习?
人工智能·学习·算法·机器学习·机器人
xiao5kou4chang6kai412 小时前
MATLAB机器学习、深度学习--从数据预处理到模型训练
深度学习·机器学习·matlab·数据预处理
benben04412 小时前
强化学习之DQN算法族(基于gymnasium开发)
算法
何以解忧,唯有..14 小时前
Go语言循环语句详解:for、range与循环控制
开发语言·算法·golang
想吃火锅100514 小时前
【leetcode】88.合并两个有序数组js
算法
生成论实验室15 小时前
机器人:一个自主运动的系统
人工智能·算法·语言模型·机器人·自动驾驶·agi·安全架构
Qres82115 小时前
算法复键——树状数组
数据结构·算法
H1785350909615 小时前
SolidWorks第四部分_直接实体建模特征9_替换面原理
线性代数·算法·机器学习·3d建模·solidworks
不会就选b15 小时前
算法日常・每日刷题--<二分查找>3
算法