-
Notifications
You must be signed in to change notification settings - Fork 53
/
CSA_imaging.m
331 lines (275 loc) · 11.2 KB
/
CSA_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
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 正侧视
% CSA
% 点目标仿真
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% 该程序截止到 2014.10.29. 15:48 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长度
R_ref = R0; % 参考目标选在场景中心,其最近斜距为 R_ref
fn_ref = fnc; % 参考目标的多普勒中心频率
% --------------------------------------------------------------------
% 设定仿真点目标的位置
% 以距离向作为x轴正方向
% 以方位向作为y轴正方向
% --------------------------------------------------------------------
delta_R0 = 0; % 将目标1的波束中心穿越时刻,定义为方位向时间零点。
delta_R1 = 120; % 目标1和目标2的方位向距离差,120m
delta_R2 = 80; % 目标2和目标3的距离向距离差,80m
% 目标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*R0/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 + fftshift( -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
fr_mtx = ones(Naz,1)*fr; % 距离频率轴矩阵,大小:Naz*Nrg
fa_mtx = fa.'*ones(1,Nrg); % 方位频率轴矩阵,大小:Naz*Nrg
%%
% --------------------------------------------------------------------
% 生成点目标原始数据
% --------------------------------------------------------------------
s_echo = zeros(Naz,Nrg); % 用来存放生成的回波数据
A0 = 1; % 目标回波幅度,都设置为1.
for k = 1:3 % 生成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_azimuth1 = (sinc(0.886.*sita./beta_bw)).^2;
% w_azimuth1是天线双程方向图。
% 下面的 w_azimuth2 是和方式2的矩形窗相同的构造方法,目的是:对天线双程
% 方向图进行数据限制:限制为 1.135 个合成孔径长度。
w_azimuth2 = (abs(ta - nc_target(k)) <= (1.135*La/2)/Vr);
w_azimuth2 = w_azimuth2.'*ones(1,Nrg); % 用来对 w_azimuth1 的天线双程方向图作数据限制。
% 下面将两者相乘,得到仿真中所用的天线加权
w_azimuth = w_azimuth1.*w_azimuth2; % 两者相乘,得到仿真中所用的天线加权
clear w_azimuth1;
clear w_azimuth2;
%}
%
% 方式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,-70,'图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);
%%
% --------------------------------------------------------------------
% 变换到距离多普勒域,进行“补余RCMC”
% --------------------------------------------------------------------
s_rd = s_echo.*exp(-1j*2*pi*fnc.*(ta.'*ones(1,Nrg))); % 数据搬移
S_RD = fft(s_rd,NFFT_a,1); % 进行方位向傅里叶变换,得到距离多普勒域频谱
D_fn_Vr = sqrt(1-lamda^2.*(fa.').^2./(4*Vr^2)); % 徙动因子,列向量
D_fn_Vr_mtx = D_fn_Vr*ones(1,Nrg); % 形成矩阵,大小:Nrg*Naz
D_fn_ref_Vr = sqrt(1-lamda^2*fn_ref^2/(4*Vr^2)); % 参考频率fn_ref处的徙动因子,是常数。
K_src = 2*Vr^2*f0^3.*D_fn_Vr.^3./(c*R_ref*(fa.').^2); % 列向量,使用R_ref处的值
K_src_mtx = K_src*ones(1,Nrg); % 形成矩阵
Km = Kr./(1-Kr./K_src_mtx); % 矩阵,这是变换到距离多普勒域的距离调频率。
% 使用 R_ref 处的值
% 下面生成 变标方程 s_sc
s_sc = exp(1j*pi.*Km.*(D_fn_ref_Vr./D_fn_Vr_mtx-1).*(tr_mtx-2*R_ref./(c.*D_fn_Vr_mtx)).^2);
% 下面将距离多普勒域的信号与变标方程相乘,实现“补余RCMC”
S_RD_1 = S_RD.*s_sc; % 相位相乘,实现“补余RCMC”
% 作图
figure;
imagesc(abs(S_RD));
title('原始数据变换到距离多普勒域,幅度');
figure;
imagesc(abs(S_RD_1));
title('距离多普勒域,补余RCMC后,幅度');
%%
% --------------------------------------------------------------------
% 变换到二维频域,进行“距离压缩,SRC,一致RCMC”
% --------------------------------------------------------------------
S_2df_1 = fft(S_RD_1,NFFT_r,2); % 进行距离向FFT,变换到二维频域。距离零频在两端
% 完成距离压缩,SRC,一致RCMC这三者相位补偿的滤波器为:
H1 = exp(1j*pi.*D_fn_Vr_mtx./(D_fn_ref_Vr.*Km).*fr_mtx.^2)...
.*exp(1j*4*pi/c.*(1./D_fn_Vr_mtx-1/D_fn_ref_Vr).*R_ref.*fr_mtx);
% 上面的H1距离零频在中心
W_ref = ones(Naz,1)*(kaiser(Nrg,3).'); % 距离向,构建Kaiser窗,此为矩阵形式,距离零频在中心。
% H1 = W_ref.*H1; % 加入距离平滑窗,以抑制旁瓣,距离零频在中心。
% 下面通过fftshift将H1的距离零频调整到两端
H1 = fftshift(H1,2); % 左右半边互换,距离零频在两端。
S_2df_2 = S_2df_1.*H1; % 在二维频域,相位相乘,实现距离压缩,SRC,一致RCMC
S_RD_2 = ifft(S_2df_2,NFFT_r,2); % 进行距离IFFT,回到距离多普勒域,完成所有距离处理。
% 作图
figure;
imagesc(abs(S_2df_1));
title('变换到二维频域');
figure;
imagesc(abs(S_2df_2));
title('相位相乘,实现距离压缩,SRC,一致RCMC后,二维频域');
figure;
imagesc(abs(S_RD_2));
title('完成距离压缩,SRC,一致RCMC后,距离多普勒域');
%%
% --------------------------------------------------------------------
% 距离多普勒域,完成“方位压缩”和“附加相位校正”
% --------------------------------------------------------------------
R0_RCMC = (c/2).*tr; % 随距离线变化的R0,记为R0_RCMC,用来计算方位MF。
% 生成方位向匹配滤波器
Haz = exp(1j*4*pi.*(D_fn_Vr*R0_RCMC).*f0./c); % 方位MF
% 附加相位校正项
H2 = exp(-1j*4*pi.*Km./(c^2).*(1-D_fn_Vr_mtx./D_fn_ref_Vr)...
.*((1./D_fn_Vr)*R0_RCMC-R_ref./D_fn_Vr_mtx).^2); % 附加相位校正项
% 下面进行相位相乘,在距离多普勒域,同时完成方位MF和附加相位校正
S_RD_3 = S_RD_2.*Haz.*H2; % 距离多普勒域,相位相乘
% 最后通过IFFT回到图像域,完成方位处理
s_image = ifft(S_RD_3,NFFT_a,1); % 完成成像过程,得到成像结果为:s_image
% 作图
figure;
imagesc(abs(S_RD_3));
title('距离多普勒域,进行了相位相乘后(方位MF和附加相位校正)');
figure;
imagesc(abs(s_image));
title('成像结果');
%%
% 下面通过调用函数,得到三个点目标各自的切片,并进行升采样
% 同时对点目标中心做距离向切片,方位向切片
% 计算出相应的指标:PSLR,ISLR,IRW
NN = 20;
% 分别得到每个点目标的切片放大;行切片、列切片;和相应的指标
% 目标1,点目标中心在 ( tg_1_x,tg_1_y )
% 由于这里是正侧视,因此有两种方法来计算方位向的位置:
% =========================================================================
% 方式1
% tg_1_x = round(Naz/2); % 正侧视,目标A的方位向位置就在图像中心。
% 方式2
% 在有斜视角时,方位向位置要通过以下的方式计算。以下程序对于正侧视也兼容,如下:
tg_1_x = rem( R0*tan(sita_r_c)/Vr*Fa , Naz );
if tg_1_x < Naz/2
tg_1_x = tg_1_x + (Naz/2+1);
else
tg_1_x = tg_1_x - (Naz/2+1);
end
tg_1_x = round(tg_1_x); % 四舍五入,得到整数值,作为点目标的方位中心坐标。
% 这里得到的 tg_1_x 即是点目标中心方位向的位置(坐标)。
% =========================================================================
tg_1_y = round(Nrg/2);
target_1 = target_analysis( s_image(tg_1_x-NN:tg_1_x+NN,tg_1_y-NN:tg_1_y+NN),Fr,Fa,Vr);
% 目标2,点目标中心在 (tg_2_x,target_2_y)
tg_2_x = tg_1_x + delta_R1/Vr*Fa;
tg_2_y = tg_1_y;
target_2 = target_analysis( s_image(tg_2_x-NN:tg_2_x+NN,tg_2_y-NN:tg_2_y+NN),Fr,Fa,Vr);
% 目标3,点目标中心在(tg_3_x,tg_3_y)
tg_3_x = tg_2_x + delta_R2*tan(sita_r_c)/Vr*Fa;
tg_3_x = fix(tg_3_x);
tg_3_y = tg_2_y + 2*delta_R2/c*Fr;
target_3 = target_analysis( s_image(tg_3_x-NN:tg_3_x+NN,tg_3_y-NN:tg_3_y+NN),Fr,Fa,Vr);