-
Notifications
You must be signed in to change notification settings - Fork 53
/
RDA_imaging.m
408 lines (360 loc) · 13.7 KB
/
RDA_imaging.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 正侧视
% RDA
% 点目标仿真
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% 截止到 2014.10.10. 17:10 p.m.
% 点目标仿真
%%
clear;
close all;
clc;
%%
% --------------------------------------------------------------------
% 定义参数
% --------------------------------------------------------------------
R_nc = 20e3; % 景中心斜距
Vr = 150; % 雷达有效速度
Tr = 2.5e-6; % 发射脉冲时宽
Kr = 20e12; % 距离调频率
f0 = 5.3e9; % 雷达工作频率
BW_dop = 80; % 多普勒带宽
Fr = 60e6; % 距离采样率
Fa = 200; % 方位采样率
Naz = 1024; % 距离线数(即数据矩阵,行数)——这里修改为1024。
Nrg = 320; % 距离线采样点数(即数据矩阵,列数)
sita_r_c = (0*pi)/180; % 波束斜视角,0 度,这里转换为弧度
c = 3e8; % 光速
R0 = R_nc*cos(sita_r_c); % 与R_nc相对应的最近斜距,记为R0
Nr = Tr*Fr; % 线性调频信号采样点数
BW_range = Kr*Tr; % 距离向带宽
lamda = c/f0; % 波长
fnc = 2*Vr*sin(sita_r_c)/lamda; % 多普勒中心频率,根据公式(4.33)计算。
La_real = 0.886*2*Vr*cos(sita_r_c)/BW_dop; % 方位向天线长度,根据公式(4.36)
beta_bw = 0.886*lamda/La_real; % 雷达3dB波束
La = beta_bw*R0; % 合成孔径长度
a_sr = Fr / BW_range; % 距离向过采样因子
a_sa = Fa / BW_dop; % 方位向过采样因子
Mamb = round(fnc/Fa); % 多普勒模糊
NFFT_r = Nrg; % 距离向FFT长度
NFFT_a = Naz; % 方位向FFT长度
% --------------------------------------------------------------------
% 设定仿真点目标的位置
% 以距离向作为x轴正方向
% 以方位向作为y轴正方向
% --------------------------------------------------------------------
delta_R0 = 0; % 将目标1的波束中心穿越时刻,定义为方位向时间零点。
delta_R1 = 120; % 目标1和目标2的方位向距离差,120m
delta_R2 = 50; % 目标2和目标3的距离向距离差,50m
% 目标1
x1 = R0; % 目标1的距离向距离
y1 = delta_R0 + x1*tan(sita_r_c); % 目标1的方位向距离
% 目标2
x2 = x1; % 目标2和目标1的距离向距离相同
y2 = y1 + delta_R1; % 目标2的方位向距离
% 目标3
x3 = x2 + delta_R2; % 目标3和目标2有距离向的距离差,为delta_R2
y3 = y2 + delta_R2*tan(sita_r_c); % 目标3的方位向距离
% 定义以下数组,便于处理
x_range = [x1,x2,x3];
y_azimuth = [y1,y2,y3];
% 计算三个目标各自的波束中心穿越时刻
nc_1 = (y1-x1*tan(sita_r_c))/Vr; % 目标1的波束中心穿越时刻。
nc_2 = (y2-x2*tan(sita_r_c))/Vr; % 目标2的波束中心穿越时刻。
nc_3 = (y3-x3*tan(sita_r_c))/Vr; % 目标3的波束中心穿越时刻。
nc_target = [nc_1,nc_2,nc_3]; % 定义该数组,便于处理。
%%
% --------------------------------------------------------------------
% 距离(方位)向时间,频率相关定义
% --------------------------------------------------------------------
% 距离
tr = 2*x1/c + ( -Nrg/2 : (Nrg/2-1) )/Fr; % 距离时间轴
fr = ( -NFFT_r/2 : NFFT_r/2-1 )*( Fr/NFFT_r ); % 距离频率轴
% 方位
ta = ( -Naz/2: Naz/2-1 )/Fa; % 方位时间轴
fa = fnc + ( -NFFT_a/2 : NFFT_a/2-1 )*( Fa/NFFT_a ); % 方位频率轴
% 生成距离(方位)时间(频率)矩阵
tr_mtx = ones(Naz,1)*tr; % 距离时间轴矩阵,大小:Naz*Nrg
ta_mtx = ta.'*ones(1,Nrg); % 方位时间轴矩阵,大小:Naz*Nrg
%%
% --------------------------------------------------------------------
% 生成点目标原始数据
% --------------------------------------------------------------------
s_echo = zeros(Naz,Nrg); % 用来存放生成的回波数据
A0 = 1; % 目标回波幅度,都设置为1.
for k = 1:1 % 生成k个目标的原始回波数据
R_n = sqrt( (x_range(k).*ones(Naz,Nrg)).^2 + (Vr.*ta_mtx-y_azimuth(k).*ones(Naz,Nrg)).^2 );% 目标k的瞬时斜距
w_range = ((abs(tr_mtx-2.*R_n./c)) <= ((Tr/2).*ones(Naz,Nrg))); % 距离向包络,即距离窗
% =====================================================================
% 方位向包络,也就是 天线的双程方向图作用因子。
%{
% 方式1
% sinc平方型函数,根据公式(4.31)计算
sita = atan( Vr.*(ta_mtx-nc_target(k).*ones(Naz,Nrg))/x_range(k) );
w_azimuth = (sinc(0.886.*sita./beta_bw)).^2;
% 用每个目标对应的 波束中心穿越时刻,而不是之前参数中的nc。
%}
%
% 方式2
% 利用合成孔径长度,直接构造矩形窗(其实这里只是限制数据范围,没有真正加窗)
w_azimuth = (abs(ta - nc_target(k)) <= (La/2)/Vr); % 行向量
w_azimuth = w_azimuth.'*ones(1,Nrg); % 生成Naz*Nrg的矩阵
%}
% =====================================================================
s_k = A0.*w_range.*w_azimuth.*exp(-(1j*4*pi*f0).*R_n./c).*exp((1j*pi*Kr).*(tr_mtx-2.*R_n./c).^2);
% 上式就是生成的某一个点目标(目标k)的回波信号。
% 经过几次循环,生成几个点目标的回波信号,相加即可。
if k == 1
s_1 = s_k; % 目标1的回波信号
end
if k == 2
s_2 = s_k; % 目标2的回波信号
end
if k == 3
s_3 = s_k; % 目标3的回波信号
end
s_echo = s_echo + s_k; % 所有点目标回波信号之和
end
% s_echo 就是我们需要的原始数据,点目标回波信号。
% 作图
% 图1——原始数据
figure;
subplot(2,2,1);
imagesc(real(s_echo));
title('(a)实部');
xlabel('距离时域(采样点)');
ylabel('方位时域(采样点)');
text(300,-60,'图1,原始数据'); % 给图1进行文字说明
% text 函数:在图像的指定坐标位置,添加文本框
subplot(2,2,2);
imagesc(imag(s_echo));
title('(b)虚部');
xlabel('距离时域(采样点)');
ylabel('方位时域(采样点)');
subplot(2,2,3);
imagesc(abs(s_echo));
title('(c)幅度');
xlabel('距离时域(采样点)');
ylabel('方位时域(采样点)');
subplot(2,2,4);
imagesc(angle(s_echo));
title('(d)相位');
xlabel('距离时域(采样点)');
ylabel('方位时域(采样点)');
% colormap(gray);
figure;
subplot(2,2,1);
imagesc(abs(fft(s_echo,[],1)));
title('RD 频谱幅度');
subplot(2,2,2);
imagesc(angle(fft(s_echo,[],1)));
title('RD 频谱相位');
subplot(2,2,3);
imagesc(abs(fft2(s_echo)));
title('二维频谱幅度');
subplot(2,2,4);
imagesc(angle(fft2(s_echo)));
title('二维频谱相位');
% colormap(gray);
%%
% --------------------------------------------------------------------
% 距离压缩
% --------------------------------------------------------------------
S_range = fft(s_echo,NFFT_r,2); % 进行距离向傅里叶变换,零频在两端。
%
% 作图
% 图2——距离频域,方位时域,频谱(未距离压缩)
figure;
subplot(1,2,1);
imagesc(real(S_range));
title('(a)实部');
xlabel('距离频域(采样点)');
ylabel('方位时域(采样点)');
text(280,-60,'图2,距离频域'); % 给图2进行文字说明
text(340,-10,'未压缩');
subplot(1,2,2);
imagesc(abs(S_range));
title('(b)幅度');
xlabel('距离频域(采样点)');
ylabel('方位时域(采样点)');
%}
% 生成距离向匹配滤波器
% ====================================================
% 采用方式2
% 时域复制脉冲,末端补零,fft,再取复共轭。
t_ref = ( -Nr/2 : (Nr/2-1) )/Fr; % 用来生成距离MF的距离时间轴
t_ref_mtx = ones(Naz,1)*t_ref; % 矩阵形式
w_ref = kaiser(Nr,2.5); % 距离向,构建Kaiser窗,此为列向量。
w_ref = ones(Naz,1)*(w_ref.'); % 构成矩阵形式,每一行都相同的加窗。
s_ref = exp((1j*pi*Kr).*((t_ref_mtx).^2)); % 复制(发射)脉冲,未加窗。
% s_ref = w_ref.*exp((1j*pi*Kr).*((t_ref_mtx).^2)); % 复制(发射)脉冲,加了窗。
s_ref = [s_ref,zeros(Naz,Nrg-Nr)]; % 对复制脉冲,后端补零。
S_ref = fft(s_ref,NFFT_r,2); % 复制脉冲的距离傅里叶变换,零频在两端。
H_range = conj(S_ref); % 距离向匹配滤波器,零频在两端。
S_range_c = S_range.*H_range; % 乘以匹配滤波器,零频在两端。
s_rc = ifft(S_range_c,[],2); % 完成距离压缩,回到二维时域。
% s_rc的长度为:Naz*Nrg。未去除弃置区。
% 对s_rc进行去除弃置区的操作
% 弃置区长度为:2*(Nr-1)
% 我们截取的长度:(Nrg-Nr+1),记为 N_rg。
N_rg = Nrg-Nr+1; % 完全卷积的长度
s_rc_c = zeros(Naz,N_rg); % 用来存放去除弃置区后的数据
s_rc_c = s_rc(:,1:N_rg); % 取前 N_rg列。
% ====================================================
%
% 作图
% 图3——距离频域,方位时域,频谱(已距离压缩)
figure;
subplot(1,2,1);
imagesc(real(S_range_c));
title('(a)实部');
xlabel('距离频域(采样点)');
ylabel('方位时域(采样点)');
text(280,-60,'图3,距离频域'); % 给图3进行文字说明
text(340,-10,'已压缩');
subplot(1,2,2);
imagesc(abs(S_range_c));
title('(b)幅度');
xlabel('距离频域(采样点)');
ylabel('方位时域(采样点)');
%}
%
% 作图
% 图4——二维时域(完成距离压缩)
figure;
subplot(1,2,1);
imagesc(real(s_rc_c)); % 这及其以下,都直接使用去除弃置区后的结果
title('(a)实部');
xlabel('距离时域(采样点)');
ylabel('方位时域(采样点)');
text(150,-60,'图4,二维时域'); % 给图4进行文字说明
text(172,-10,'完成压缩');
subplot(1,2,2);
imagesc(abs(s_rc_c));
title('(b)幅度');
xlabel('距离时域(采样点)');
ylabel('方位时域(采样点)');
%}
%%
% --------------------------------------------------------------------
% 变换到距离多普勒域,进行距离徙动校正
% --------------------------------------------------------------------
s_rc_c = s_rc_c.*exp(-1j*2*pi*fnc.*(ta.'*ones(1,N_rg))); % 数据搬移
S_rd = fft(s_rc_c,NFFT_a,1); % 方位向傅里叶变换,到距离多普勒域
% ====================================================================
% 设置方位频率轴——关键点!!!
fa = fnc + fftshift(-NFFT_a/2:NFFT_a/2-1)/NFFT_a*Fa; % 方位频率轴如此设置。
% =====================================================================
% 下面这个是改进的,每一个最近斜距(R0)都随着距离门的不同而改变。
tr_RCMC = 2*x1/c + ( -N_rg/2 : (N_rg/2-1) )/Fr; % 在新的距离线长度下的时间轴。
R0_RCMC = (c/2).*tr_RCMC; % 随距离线变化的R0,记为R0_RCMC,用来计算RCM和Ka。
delta_Rrd_fn = lamda^2.*((fa.').^2)*(R0_RCMC)/(8*Vr^2);
num_range = c/(2*Fr); % 一个距离采样单元,对应的长度
delta_Rrd_fn_num = delta_Rrd_fn./num_range; % 每一个方位向频率,其RCM对应的距离采样单元数
R = 8; % sinc插值核长度
S_rd_rcmc = zeros(NFFT_a,N_rg); % 用来存放RCMC后的值
for p = 1 : NFFT_a
for q = 1 : N_rg % 此时距离向的长度是 (Nrg-Nr+1)=N_rg
delta_Rrd_fn_p = delta_Rrd_fn_num(p,q);
Rrd_fn_p = q + delta_Rrd_fn_p;
Rrd_fn_p_zheng = ceil(Rrd_fn_p); % ceil,向上取整。
ii = ( Rrd_fn_p-(Rrd_fn_p_zheng-R/2):-1:Rrd_fn_p-(Rrd_fn_p_zheng+R/2-1) );
rcmc_sinc = sinc(ii);
rcmc_sinc = rcmc_sinc/sum(rcmc_sinc); % 插值核的归一化
% ii 是sinc插值过程的变量;
% g(x)=sum(h(ii)*g_d(x-ii)) = sum(h(ii)*g_d(ll));
% 由于S_rd只有整数点取值,且范围有限。因此插值中要考虑它的取值溢出边界问题。
% 这里我采取循环移位的思想,用来解决取值溢出问题。
if (Rrd_fn_p_zheng-R/2) > N_rg % 全右溢
ll = (Rrd_fn_p_zheng-R/2-N_rg:1:Rrd_fn_p_zheng+R/2-1-N_rg);
else
if (Rrd_fn_p_zheng+R/2-1) > N_rg % 部分右溢
ll_1 = (Rrd_fn_p_zheng-R/2:1:N_rg);
ll_2 = (1:1:Rrd_fn_p_zheng+R/2-1-N_rg);
ll = [ll_1,ll_2];
else
if (Rrd_fn_p_zheng+R/2-1) < 1 % 全左溢(不可能发生,但还是要考虑)
ll = (Rrd_fn_p_zheng-R/2+N_rg:1:Rrd_fn_p_zheng+R/2-1+N_rg);
else
if (Rrd_fn_p_zheng-R/2) < 1 % 部分左溢
ll_1 = (Rrd_fn_p_zheng-R/2+N_rg:1:N_rg);
ll_2 = (1:1:Rrd_fn_p_zheng+R/2-1);
ll = [ll_1,ll_2];
else
ll = (Rrd_fn_p_zheng-R/2:1:Rrd_fn_p_zheng+R/2-1);
end
end
end
end
rcmc_S_rd = S_rd(p,ll);
S_rd_rcmc(p,q) = sum( rcmc_sinc.*rcmc_S_rd );
end
end
% S_rd_rcmc 就是RCMC后的距离多普勒域频谱。
% 作图
% 图5——距离多普勒域(未RCMC)
figure;
subplot(1,2,1);
imagesc(real(S_rd));
title('(a)实部');
xlabel('距离时域(采样点)');
ylabel('方位频域(采样点)');
text(150,-60,'图5,距离多普勒域'); % 给图5进行文字说明
text(172,-10,'未RCMC');
subplot(1,2,2);
imagesc(abs(S_rd));
title('(b)幅度');
xlabel('距离时域(采样点)');
ylabel('方位频域(采样点)');
% 作图
% 图6——距离多普勒域,RCMC后的结果
figure;
subplot(1,2,1);
imagesc(real(S_rd_rcmc));
title('(a)实部');
xlabel('距离时域(采样点)');
ylabel('方位频域(采样点)');
text(150,-60,'图6,距离多普勒域'); % 给图6进行文字说明
text(172,-10,'已RCMC');
subplot(1,2,2);
imagesc(abs(S_rd_rcmc));
title('(b)幅度');
xlabel('距离时域(采样点)');
ylabel('方位频域(采样点)');
%}
%%
% --------------------------------------------------------------------
% 方位压缩
% --------------------------------------------------------------------
fa_azimuth_MF = fa; % 方位频率轴,采用和RCMC中所用的频率轴相同。
Ka = 2*Vr^2*(cos(sita_r_c))^3./(lamda.* R0_RCMC); % 方位向调频率,是随最近斜距R0变化的。
Ka_1 = 1./Ka; % 为了方便计算,先取倒数。
Haz = exp( -1j*pi.*(((fa_azimuth_MF).').^2*Ka_1) ); % 方位向匹配滤波器
% 这里要注意,生成的MF的零频既不是在两端,也不是在中心的。
% 考虑下频率轴是什么样的,间断点在哪里。注意fa的构成。
% 这里的频率轴和距离多普勒域的方位频谱是对应的。
S_rd_c = S_rd_rcmc.*Haz; % 乘以匹配滤波器
s_ac = ifft(S_rd_c,[],1); % 完成方位压缩,变到图像域。结束。
% 作图
% 图7——成像结果
figure;
imagesc(abs(s_ac));
title('点目标成像');
xlabel('距离时域(采样点)');
ylabel('方位时域(采样点)');
%%
% 下面通过调用函数,得到三个点目标各自的切片,并进行升采样
% 同时对点目标中心做距离向切片,方位向切片
% 计算出相应的指标:PSLR,ISLR,IRW
NN = 16;
% 分别得到每个点目标的切片放大;行切片、列切片;和相应的指标
% 目标1,点目标中心在 ((Naz/2+1),86)
target_1 = target_analysis( s_ac((Naz/2+1)-NN:(Naz/2+1)+NN,86-NN:86+NN),Fr,Fa,Vr);
% 目标2,点目标中心在 ((Naz/2+1+delta_R1/Vr*Fa),86)
tg_2_delatx = (Naz/2+1 + delta_R1/Vr*Fa);
% target_2 = target_analysis( s_ac(tg_2_delatx-NN:tg_2_delatx+NN,86-NN:86+NN),Fr,Fa,Vr);
% 目标3
tg_3_delatx = tg_2_delatx + delta_R2*tan(sita_r_c)/Vr*Fa;
tg_3_delaty = 2*delta_R2/c*Fr;
% target_3 = target_analysis( s_ac(tg_3_delatx-NN:tg_3_delatx+NN,86+tg_3_delaty-NN:86+tg_3_delaty+NN),Fr,Fa,Vr);