Add Radar simulation
This commit is contained in:
@@ -0,0 +1,13 @@
|
||||
function y = R_d_func(t, range, velocity)
|
||||
global c f_n T_r;
|
||||
|
||||
ti = t - (2 / c) * r(t, range, velocity);
|
||||
p = rem(ti, T_r); % p = t - nT_r
|
||||
n = round((ti - p) / T_r);
|
||||
|
||||
if (n < 0)
|
||||
n = 0;
|
||||
end
|
||||
|
||||
y = R_x_func(t, range, velocity) * exp(1j * -2 * pi * f_n(n + 1) * (t - n * T_r));
|
||||
end
|
||||
@@ -0,0 +1,5 @@
|
||||
function y = R_x_func(t, range, velocity)
|
||||
global scatter_coef c;
|
||||
ti = t - (2 / c) * r(t, range, velocity);
|
||||
y = scatter_coef * T_x_func(ti);
|
||||
end
|
||||
@@ -0,0 +1,14 @@
|
||||
function y = T_x_func(t)
|
||||
global T_r T_p f_n;
|
||||
p = rem(t, T_r); % p = t - nT_r
|
||||
n = round((t - p) / T_r);
|
||||
|
||||
if (p > T_p)
|
||||
y = 0;
|
||||
elseif (p <= 0)
|
||||
y = 0;
|
||||
else
|
||||
y = exp(1j * 2 * pi * f_n(n + 1) * p);
|
||||
end
|
||||
|
||||
end
|
||||
@@ -0,0 +1,38 @@
|
||||
global M N K d epsilon f_c Delta_f c scatter_coef B f_s T_p T_r lambda delta_t max_t range_t len freqs slow_len num_pulse
|
||||
|
||||
N = 128; % 脉冲个数
|
||||
M = 5; % 频点个数
|
||||
K = 10; % 目标个数
|
||||
d = 32;
|
||||
epsilon = 1e-5; % 误差
|
||||
|
||||
f_c = 10e9; % 初始载频 10GHz
|
||||
Delta_f = 8e6; % 载频步进间隔 8MHz
|
||||
% c = 299792458; % 光速
|
||||
c = 3e8;
|
||||
scatter_coef = 0.3; % 目标散射强度
|
||||
|
||||
B = 64e6; % 带宽 64MHz
|
||||
% B_0 = 1e9;
|
||||
|
||||
T_p = 1e-6 / 3; % 单载频脉冲下的采样周期 / 脉冲宽度
|
||||
f_s = 100 / T_p; % 快时间采样率
|
||||
T_r = T_p * 6;
|
||||
|
||||
lambda = c / f_c; % 雷达工作波长
|
||||
|
||||
% 仿真时间
|
||||
num_pulse = 180;
|
||||
delta_t = 1e-2 * T_p;
|
||||
max_t = num_pulse * T_r;
|
||||
range_t = 0:delta_t:max_t - delta_t;
|
||||
len = round(max_t / delta_t);
|
||||
|
||||
freqs = ((0:len - 1) * f_s) / len;
|
||||
|
||||
% 绘图
|
||||
figure_flag_1 = false;
|
||||
figure_flag_2 = false;
|
||||
figure_flag_3 = false;
|
||||
|
||||
slow_len = 1e4;
|
||||
@@ -0,0 +1,22 @@
|
||||
function [range, range_idx] = get_range(s_T, s_R, r_0)
|
||||
global T_r delta_t len c range_t;
|
||||
|
||||
% 只取第一个 T_r 的数据计算
|
||||
range_N = T_r / delta_t;
|
||||
s_T_first = [s_T(1:range_N), zeros(1, len - range_N)];
|
||||
s_R_first = [s_R(1:range_N), zeros(1, len - range_N)];
|
||||
|
||||
s_T_fft = fft(s_T_first, len);
|
||||
s_R_fft = fft(s_R_first, len);
|
||||
|
||||
% 发射信号和回波信号做相关
|
||||
p = ifft(s_R_fft .* conj(s_T_fft));
|
||||
norm_p = real(p).^2 + imag(p).^2;
|
||||
[~, range_idx] = max(norm_p);
|
||||
|
||||
range = range_t(range_idx) * c / 2;
|
||||
% fprintf("predict range = %f\n", range);
|
||||
% fprintf("origin range = %f\n", r_0);
|
||||
% fprintf("err = %f\n", range - r_0);
|
||||
% fprintf("\n");
|
||||
end
|
||||
@@ -0,0 +1,47 @@
|
||||
function velocity = get_velocity(s_T, s_R, origin_velocity)
|
||||
global T_r delta_t c f_c max_t slow_len;
|
||||
freq_s_T = 1 / T_r;
|
||||
|
||||
slow_freqs = ((0:slow_len - 1) * (1 / T_r)) / slow_len;
|
||||
range_t_slow = 1:slow_len;
|
||||
|
||||
num_slow = max_t / T_r;
|
||||
s_R_slow = zeros(1, slow_len);
|
||||
k = floor(T_r / delta_t);
|
||||
|
||||
idx = 1;
|
||||
|
||||
while abs(s_R(idx)) == 0
|
||||
idx = idx + 1;
|
||||
end
|
||||
|
||||
for i = 0:num_slow - 1
|
||||
|
||||
while abs(s_R(idx + i * k)) == 0
|
||||
idx = idx + 1;
|
||||
end
|
||||
s_R_slow(i + 1) = s_R(idx + i * k);
|
||||
end
|
||||
|
||||
s_R_fft = fft(s_R_slow);
|
||||
[~, max_index_s_R] = max(s_R_fft);
|
||||
freq_s_R = slow_freqs(max_index_s_R);
|
||||
|
||||
% figure(2);
|
||||
% subplot(2, 1, 1);
|
||||
% plot(range_t_slow, abs(s_R_slow));
|
||||
% title(sprintf('s_R'));
|
||||
% subplot(2, 1, 2);
|
||||
% plot(slow_freqs, abs(s_R_fft));
|
||||
% title(sprintf('s_R_fft, freq = %E', freq_s_R));
|
||||
% xlabel('频率 (Hz)');
|
||||
|
||||
f_d = freq_s_T - freq_s_R;
|
||||
velocity = (c * f_d) / (2 * f_c);
|
||||
|
||||
fprintf("predict velocity: %f\n", velocity);
|
||||
fprintf("origin velocity: %f\n", origin_velocity);
|
||||
fprintf("err = %f\n", velocity - origin_velocity);
|
||||
fprintf("\n");
|
||||
|
||||
end
|
||||
@@ -0,0 +1,86 @@
|
||||
%%
|
||||
clc;
|
||||
clear;
|
||||
|
||||
config_parameters;
|
||||
|
||||
range = [250, 140, 167, 128, 12];
|
||||
velocity = [16, 76, 155, 125, 463];
|
||||
|
||||
global C_n f_n;
|
||||
C_n = zeros(M, len);
|
||||
f_n = zeros(M, len);
|
||||
|
||||
for n_idx = 1:M
|
||||
|
||||
for t_idx = 1:len
|
||||
C_n(n_idx, t_idx) = floor(rand * (M - 1));
|
||||
f_n(n_idx, t_idx) = f_c + C_n(n_idx, t_idx) * Delta_f;
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
T_x = zeros(M, len);
|
||||
R_x = zeros(M, len);
|
||||
R_d = zeros(M, len);
|
||||
|
||||
for n_idx = 1:M
|
||||
|
||||
for t_idx = 1:len
|
||||
t = range_t(t_idx);
|
||||
T_x(n_idx, t_idx) = T_x_func(t);
|
||||
R_x(n_idx, t_idx) = R_x_func(t, range(n_idx), velocity(n_idx));
|
||||
R_d(n_idx, t_idx) = R_d_func(t, range(n_idx), velocity(n_idx));
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
save temp.mat
|
||||
|
||||
%%
|
||||
|
||||
clc
|
||||
clear
|
||||
load temp.mat
|
||||
|
||||
pred_range = zeros(1, M);
|
||||
range_idx = zeros(1, M);
|
||||
pred_velocity = zeros(1, M);
|
||||
|
||||
for n_idx = 1:M
|
||||
|
||||
[pred_range(n_idx), range_idx(n_idx)] = get_range(T_x(n_idx, :), R_x(n_idx, :), range(n_idx));
|
||||
pred_velocity(n_idx) = get_velocity(T_x(n_idx, :), R_x(n_idx, :), velocity(n_idx));
|
||||
|
||||
end
|
||||
|
||||
%%
|
||||
r_range = 1:500;
|
||||
v_range = 1:500;
|
||||
|
||||
[X, Y] = meshgrid(r_range, v_range);
|
||||
pred_z = zeros(length(r_range), length(v_range));
|
||||
origin_z = zeros(length(r_range), length(v_range));
|
||||
|
||||
for n_idx = 1:M
|
||||
pred_z(round(pred_range(n_idx)), round(pred_velocity(n_idx))) = 1;
|
||||
origin_z(round(range(n_idx)), round(velocity(n_idx))) = 1;
|
||||
end
|
||||
|
||||
figure(1)
|
||||
subplot(211);
|
||||
mesh(X, Y, pred_z);
|
||||
title("Predict range-velocity reconstruction under M = 5");
|
||||
xlabel("Range (m)");
|
||||
ylabel("Velocity (m/s)");
|
||||
|
||||
subplot(212);
|
||||
mesh(X, Y, origin_z);
|
||||
title("Origin range-velocity data under M = 5");
|
||||
xlabel("Range (m)");
|
||||
ylabel("Velocity (m/s)");
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
function x = r(t, range, velocity)
|
||||
x = range + velocity * t;
|
||||
end
|
||||
Reference in New Issue
Block a user