Add example
This commit is contained in:
@@ -0,0 +1,311 @@
|
||||
clc
|
||||
clear
|
||||
% rng(1)
|
||||
|
||||
%% 参数设置
|
||||
B = 5e6; % 信号带宽5MHz
|
||||
Tp = 20e-6; % 脉宽100us
|
||||
fs = 2 * B; % 采样频率
|
||||
Ts = 1 / fs; % 采样周期
|
||||
K = B / Tp; % 线性调频率
|
||||
fc = 1.25e9; % 载波频率1.25GHz
|
||||
PRF = 5000; % 脉冲重复频率
|
||||
Tr = 1 / PRF; % 脉冲重复间隔
|
||||
|
||||
numP = 64; % 脉冲数量
|
||||
|
||||
t = 0: 1 / fs: Tr - 1 / fs;
|
||||
tP = 0: 1 / fs: Tr * numP - 1 / fs;
|
||||
|
||||
c = 3e8; % 光速
|
||||
|
||||
%%
|
||||
sigma_n = 0.1; % 噪声标准差
|
||||
alpha_prop = 0.8; % 目标散射点强度
|
||||
|
||||
SNR = 50; % 信噪比(积累后信噪比)
|
||||
|
||||
% rou >= c / 2B = 15(m)
|
||||
|
||||
slow_len = 128; % 多普勒维采样点
|
||||
|
||||
% 是否有目标,0无目标,1有目标
|
||||
has_target = 1;
|
||||
|
||||
%% 产生发射信号
|
||||
% t=-Tp/2:1/fs:Tp/2-1/fs;
|
||||
N = Tr * fs;
|
||||
N_high = Tp * fs;
|
||||
|
||||
signal_t = zeros(1, N * numP);
|
||||
for j = 1: numP
|
||||
for i = 1: N_high
|
||||
tp = ((j - 1) * N + i) * (1 / fs);
|
||||
signal_t(1, i + (j-1)*N) = exp(1j * 2 * pi * (fc * tp + 0.5 * K * tp .^ 2));
|
||||
end
|
||||
end
|
||||
|
||||
% signal_t = zeros(1, N);
|
||||
% for i = 1:N_high
|
||||
% tp = (i - 1) * (1 / fs);
|
||||
% signal_t(1, i) = exp(1j*2*pi*(fc*tp+0.5*K*tp.^2));
|
||||
% end
|
||||
|
||||
figure(1);
|
||||
subplot(311)
|
||||
plot(tP,real(signal_t));
|
||||
xlabel('时间/t');ylabel('幅度');
|
||||
title('发射信号');
|
||||
|
||||
%%
|
||||
% 距离匹配滤波增益
|
||||
multiple_r = signal_t(1, 1: N) * signal_t(1, 1: N)';
|
||||
|
||||
% 多普勒匹配滤波增益
|
||||
F_ori = dftmtx(slow_len);
|
||||
F = F_ori(1:numP,:);
|
||||
multiple_d = F(:,1)' * F(:,1);
|
||||
|
||||
%% 设置目标 1
|
||||
distance1 = 18000;
|
||||
v1 = 187.5;
|
||||
|
||||
tau1 = distance1 * 2 / c; % 时延
|
||||
n_tau1 = round(tau1 * fs); % 对应采样点
|
||||
|
||||
f_d1 = 2 * fc * v1 / c; % 多普勒频率
|
||||
|
||||
% 根据 SNR 设置回波散射强度
|
||||
if has_target
|
||||
alpha1 = alpha_prop * sqrt(10^(SNR/10) * sigma_n^2 / (multiple_r * multiple_d));
|
||||
else
|
||||
alpha1 = 0;
|
||||
end
|
||||
|
||||
% 生成目标 1 回波
|
||||
signal_r1 = zeros(1, N * numP);
|
||||
for j = 1: numP
|
||||
for i = 1: N
|
||||
temp = i - n_tau1;
|
||||
if temp >= 1 && temp <= N_high
|
||||
% tp = (temp - 1) * (1 / fs);
|
||||
tp = ((j - 1) * N + i - n_tau1) * (1 / fs);
|
||||
signal_r1(1, i + (j-1)*N) = alpha1 * exp(1j*2*pi*((fc - f_d1) * tp + 0.5 * K * tp .^ 2));
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
% signal_r1 = zeros(1, N);
|
||||
% for i = 1:N
|
||||
% temp = i - n_tau1;
|
||||
% if temp >= 1 && temp <= N_high
|
||||
% signal_r1(1, i) = alpha1 * signal_t(1, temp);
|
||||
% end
|
||||
% end
|
||||
|
||||
%% 生成回波
|
||||
signal_r = signal_r1;
|
||||
figure(1);
|
||||
subplot(312)
|
||||
plot(tP, real(signal_r));
|
||||
% plot(real(signal_r));
|
||||
xlabel('时间/t');
|
||||
ylabel('幅度');
|
||||
title('回波信号');
|
||||
|
||||
|
||||
%% 噪声处理
|
||||
noise = random('Normal', 0, sigma_n/sqrt(2), 1, N * numP) + 1j * random('Normal', 0, sigma_n/sqrt(2), 1, N * numP);
|
||||
signal_r_n = signal_r + noise;
|
||||
|
||||
figure(1);
|
||||
subplot(313)
|
||||
plot(tP, real(signal_r_n));
|
||||
xlabel('时间/t');
|
||||
ylabel('幅度');
|
||||
title('回波+噪声信号');
|
||||
|
||||
|
||||
%% 对回波求多普勒频移
|
||||
% s_R_slow = zeros(1, slow_len);
|
||||
%
|
||||
% slow_freqs = ((0:slow_len - 1) .* (1 / Tr)) / slow_len;
|
||||
%
|
||||
% init_idx = 1;
|
||||
% while abs(signal_r_n(init_idx)) == 0
|
||||
% init_idx = init_idx + 1;
|
||||
% end
|
||||
%
|
||||
% for i = 0:numP - 1
|
||||
% s_R_slow(i + 1) = signal_r_n(init_idx + i * N + 1);
|
||||
% end
|
||||
%
|
||||
% s_R_fft = fftshift(fft(s_R_slow));
|
||||
|
||||
% figure(3)
|
||||
% plot(real(s_R_fft))
|
||||
|
||||
% [~, max_index_s_R] = max(s_R_fft);
|
||||
% freq_s_R = slow_freqs(max_index_s_R);
|
||||
%
|
||||
% f_d = 1 / Tr - freq_s_R;
|
||||
% v = f_d * c / (2 * (fc - B / 2))
|
||||
|
||||
|
||||
%% 距离匹配滤波——按Tr划分
|
||||
Srange = zeros(N, numP);
|
||||
|
||||
for i = 1: numP
|
||||
sr = signal_r_n(1, 1 + (i - 1) * N: i * N);
|
||||
st = signal_t(1, 1 + (i - 1) * N: i * N);
|
||||
|
||||
% % 匹配滤波
|
||||
% A = generate_matrix(transpose(st), 1);
|
||||
% mf = A' * transpose(sr);
|
||||
% filterred_rf_r = mf ./ multiple;
|
||||
|
||||
% 匹配滤波
|
||||
rf_r_fft_conj = conj(fft(st));
|
||||
filterred_rf_r = ifft(fft(sr) .* rf_r_fft_conj);
|
||||
filterred_rf_r = filterred_rf_r ./ multiple_r;
|
||||
|
||||
% figure(2000)
|
||||
% plot(abs(filterred_rf_r))
|
||||
|
||||
Srange(:,i) = filterred_rf_r';
|
||||
|
||||
end
|
||||
|
||||
figure(101)
|
||||
mesh(abs(Srange))
|
||||
title('按Tr进行匹配滤波结果')
|
||||
|
||||
%% R匹配滤波——分布验证
|
||||
% Before MF
|
||||
% a+bi
|
||||
% a~N(0,sigma_n^2 / 2)
|
||||
% b~N(0,sigma_n^2 / 2)
|
||||
|
||||
% After MF
|
||||
% a+bi
|
||||
% a~N(0,sigma_n^2 / 2 / multiple_r)
|
||||
% b~N(0,sigma_n^2 / 2 / multiple_r)
|
||||
% a^2 + b^2 ~ chi^2(2) * sigma_n^2 / 2 / multiple_r
|
||||
|
||||
% stat_R = abs(Srange).^2;
|
||||
% P_fa = 0.1;
|
||||
% kd = sigma_n^2 * chi2inv(1 - P_fa, 2) / 2 / multiple;
|
||||
% sum(sum(stat_R>kd))/numel(stat_R)
|
||||
|
||||
%% 多普勒滤波
|
||||
Srd = zeros(N, slow_len);
|
||||
for i = 1: N
|
||||
% for i = 1201: 1201 % 目标点
|
||||
% Srd(i, :) = fftshift(fft([Srange(i, :),zeros(1,slow_len-numP)]));
|
||||
% x_slow = [Srange(i, :),zeros(1,slow_len-numP)];
|
||||
% % y' = F * x'
|
||||
% y_slow2 = F * transpose(x_slow);
|
||||
y_slow2 = transpose(F) * transpose(Srange(i, :))./ multiple_d;
|
||||
% figure(444)
|
||||
% plot(abs(y_slow2))
|
||||
|
||||
Srd(i, :) = fftshift(transpose(y_slow2));
|
||||
end
|
||||
|
||||
%% D匹配滤波——分布验证
|
||||
% Before MF
|
||||
% a+bi
|
||||
% a~N(0,sigma_n^2 / 2 / multiple)
|
||||
% b~N(0,sigma_n^2 / 2 / multiple)
|
||||
|
||||
% After MF
|
||||
% a+bi
|
||||
% a~N(0,sigma_n^2 / 2 / multiple_r / multiple_d)
|
||||
% b~N(0,sigma_n^2 / 2 / multiple_r / multiple_d)
|
||||
% a^2 + b^2 ~ chi^2(2) * sigma_n^2 / 2 / multiple_r / multiple_d
|
||||
|
||||
% 虚警率计算
|
||||
stat_D = abs(Srd).^2;
|
||||
P_fa = [1e-4, 5e-4, 1e-3, 5e-3, 1e-2, 5e-2, 1e-1, 5e-1, 1];
|
||||
kd = sigma_n^2 * chi2inv(1 - P_fa, 2) / 2 / multiple_r / multiple_d;
|
||||
count_Pfa = zeros(1,length(P_fa));
|
||||
for i = 1:length(P_fa)
|
||||
count_Pfa(i) = sum(sum(stat_D>kd(i)))/numel(stat_D);
|
||||
end
|
||||
figure(4000)
|
||||
loglog(P_fa,count_Pfa)
|
||||
xlabel('P_fa Set')
|
||||
ylabel('Actual P_fa')
|
||||
title('P_fa')
|
||||
%%
|
||||
% Srd_bf_mf = zeros(N, slow_len);
|
||||
% for i = 1: N
|
||||
% Srd_bf_mf(i, :) = fftshift(fft([Srange_bf_mf(i, :),zeros(1,slow_len-numP)]));
|
||||
% end
|
||||
|
||||
% figure(102)
|
||||
% mesh(abs(Srd))
|
||||
|
||||
% figure(105)
|
||||
% mesh(abs(Srd_bf_mf))
|
||||
|
||||
% figure(1)
|
||||
% subplot(414)
|
||||
% t2 = 0: (c / fs / 2) : (Tr * numP * c / 2 - c / fs / 2);
|
||||
% plot(tP, abs(filterred_rf_r) ./ N_high)
|
||||
% % plot(abs(filterred_rf_r))
|
||||
% xlabel('距离')
|
||||
% title('匹配滤波')
|
||||
|
||||
% distance_temp = (0:N - 1) * fs * c / N / 2 / K;
|
||||
|
||||
%% RD 绘制
|
||||
Srd = Srd';
|
||||
|
||||
lambda = c / fc;
|
||||
|
||||
distance_temp = 0: (c / fs / 2) : (Tr * c / 2 - c / fs / 2);
|
||||
speed_temp = (-PRF / 2: PRF / slow_len: PRF / 2 - PRF / slow_len) * lambda / 2 ;
|
||||
% speed_temp = (-numP / 2: numP / slow_len: numP / 2 - numP / slow_len) * lambda / Tr / numP / 2 ;
|
||||
|
||||
figure(5)
|
||||
[X, Y] = meshgrid(distance_temp, speed_temp);
|
||||
mesh(X, Y, abs(Srd));
|
||||
xlabel('距离(m)');
|
||||
ylabel('速度(m/s)');
|
||||
zlabel('信号幅值');
|
||||
title('2维RD图');
|
||||
|
||||
figure(6)
|
||||
imagesc(distance_temp, speed_temp, abs(Srd));
|
||||
title('Range-Doppler Image');
|
||||
xlabel('Range (m)');
|
||||
ylabel('Speed (m/s)');
|
||||
set(gca, 'FontSize', 18);
|
||||
set(gcf, 'position', [200, 300, 800, 600]);
|
||||
set(gca,'fontsize',20,'fontname','Times');
|
||||
|
||||
figure(7)
|
||||
sence = zeros(1,N);
|
||||
sence(n_tau1) = 0.8;
|
||||
plot(distance_temp,sence,'Linewidth', 2);
|
||||
legend('Target')
|
||||
title('Target Scene');
|
||||
xlabel('Range (m)');
|
||||
ylabel('Target Scattering Intensity');
|
||||
ylim([0,1]);
|
||||
set(gca, 'FontSize', 18);
|
||||
set(gcf, 'position', [200, 300, 800, 600]);
|
||||
set(gca,'fontsize',20,'fontname','Times');
|
||||
|
||||
% save test_Rmf_Dmf.mat ...
|
||||
% distance_temp...
|
||||
% speed_temp...
|
||||
% Srd...
|
||||
% Srange...
|
||||
% tP...
|
||||
% signal_t...
|
||||
% signal_r...
|
||||
% signal_r_n...
|
||||
% F...
|
||||
% slow_len;
|
||||
Reference in New Issue
Block a user