% 名称: 基于RD算法的雷达成像仿真
%}
%---------------------------------start-----------------------------------%
%-------------------------------基本参数设置-------------------------------%
thetaT=0; %T平台波束斜视角
thetaT=thetaT*pi/180; %rad弧度
thetaR=0; %R平台波束斜视角
thetaR=thetaR*pi/180; %rad弧度
%%-----------测绘带区域----------------
X0=[-45,45]; %方位向[-X0,X0],范围有自己根据实际情况确定
Rtc=15000; %载波发射距离
Rrc=15000; %载波接收距离
Rc=(Rtc+Rrc)/2; %载波距离向
R0=600; %距离向[Rc-R0,Rc+R0]
%%-----------距离向(Range),r/t domain---
c=3e8; %光速3*10^8m/s
lambda=3*10^-2; %载波的波长3cm
fc=c/lambda;
Tr=10^-5; %LFM信号脉宽10US
Br=6*10^7; %LFM信号带宽 60MHz
Kr=Br/Tr; %调频斜率
fs=10^8; %采样频率10MHZ
Nr=Tr*fs; %快时间采样点数
%+++++距离域序列+++++
r=Rc+linspace(-R0,R0,Nr); %距离域序列
%{
概念普及:
linspace(-A,A,M):生成一些从—A到+A的M份等间距的数值
举例:
linspace(-5,5,6)
ans =
-5 -3 -1 1 3 5
%}
t=2*r/c; %距离域t值对应
dt=R0*4/c/Nr; %快时间采样周期
%+++++频率域序列+++++
f=linspace(-1/2/dt,1/2/dt,Nr); %f域序列
%%----------方位向(Azimuth,Cross-Range),x/u domain----
%{
概念普及:
合成孔径雷达——SAR
——Synthetic Aperture Radar 的缩写
合成孔径观点: 用运动的小天线合成一个大天线
SAR在方位向是真正的微波全息;
通过PRF进行方位向全息图的采样;
采样间隔必须固定不变,因此要求PRF与地速成正比.
%}
v=150; %SAR 载机移动速度150m/s
Lsar=90; %合成孔径长度 90m
Na=1024; % 慢时间采样点数
%+++++u域序列+++++
x=linspace(-45,45,Na); %u域序列
u=x/v; %u域序列t值对应
du=2*45/v/Na; %慢时间采样间隔
%+++++fu域序列+++++
fu=linspace(-1/2/du,1/2/du,Na);%fu域序列
ftdc=v*sin(thetaT); %SAR-T平台波束速度
ftdr=-(v*cos(thetaT))^2/lambda/Rtc;
frdc=v*sin(thetaR); %SAR-R平台波束速度
frdr=-(v*cos(thetaR))^2/lambda/Rrc;
fdc=ftdc+frdc; %Doppler调频中心频率
fdr=ftdr+frdr; %Doppler调频斜率
%-------目标位置-----------
Ntar=3;%目标个数
Ptar=[ Rrc , 0 , 1 %参数对应:距离向坐标,方位向坐标,sigma
Rrc+50, -50, 1
Rrc+50, 50, 1];
%%-----------LFM产生回波---------
s_ut=zeros(999,1024); %生成m×n的double类零矩阵,设定数值内存
%{
概念普及:
zeros:
zeros(m,n)产生m×n的double类零矩阵,zeros(n)产生n×n的全0方阵。
举例
zeros(2,4)
ans =
0 0 0 0
0 0 0 0
zeros(4)
ans =
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
%}
U=ones(floor(Nr),1)*u; %扩充为矩阵
T=t'*ones(1,Na); % 将快时间拓展为 Na 列
%{
概念普及:
ones:
ones函数——生成全1阵
zeros(m,n)产生m×n的double类零矩阵,zeros(n)产生n×n的全0方阵。
举例
ones(1,6)
ans =
1 1 1 1 1 1
%}
for i=1:1:Ntar
rn=Ptar(i,1); % 目标距离向坐标
xn=Ptar(i,2); % 目标方位向坐标
sigma=Ptar(i,3); % 目标RCS
rtn=rn+Rtc-Rrc;
RT=sqrt(rtn^2+(rtn*tan(thetaT)+xn-v*U).^2); % 发射 目标斜距
RR=sqrt(rn^2+(rn*tan(thetaT)+xn-v*U).^2); % 接收 目标斜距
R=RT+RR;
DT=T-R/c;
% DT=DT*ones(1000,1024); %%%%
phase=pi*Kr*DT.^2-2*pi/lambda*R;
s_ut=s_ut+sigma*exp(1i*phase).*(abs(DT)<Tr/2).*(abs(v*U-xn)<Lsar/2);
%%%二维回波信号
S_UT=fft2(s_ut); %傅里叶变换
margin=(abs(S_UT)); %图像幅度谱,加log便于显示
imshow(margin,[]),title('图像幅度谱');
figure(2)
phase=angle(S_UT);
imshow(phase,[]),title('图像相位谱');
figure(3)
end;
%-------------------------------end---------------------------------------%
%-------------距离压缩-------------
%参考信号
p0_t=exp(1i*pi*Kr*(t-2*Rc/c).^2).*(abs(t-2*Rc/c)<Tr/2); %距离向LFM信号
%P0_t=p0_t'*ones(1,Na);
p0_f=fftshift(fft(fftshift(p0_t))); % 距离向LFM参考信号的快速傅里叶变换
P0_f=p0_f'*ones(1,Na);
%{
概念普及:Matlab fftshift 详解
一. 实信号情况
因为实信号以fs为采样速率的信号在 fs/2 处混叠,所以实信号fft的结果中前半部分对应
[0, fs/2],后半部分对应[ -fs/2, 0]
1)实信号fft的结果前半部分对应[0, fs/2]是正频率的结果,后半部分对应[ -fs/2, 0]是
负频率的结果。大于fs/2的部分的频谱实际上是实信号的负频率加fs的结果。故要得到
正确的结果,只需将视在频率减去fs即可得到频谱对应的真实负频率
2)如果要让实信号fft的结果与[-fs/2, fs/2]对应,则要fft后fftshift一下即可,
fftshift的操作是将fft结果以fs/2为中心左右互换
3)如果实信号fft的绘图频率f从[-fs/2, fs/2],并且没有fftshift,则fft正频谱对应
f在[0, fs/2]的结果将混叠到(f - fs/2)的位置;fft负频谱对应f在[-fs/2, 0]的结果
混叠到 f + fs - fs/2 的位置,注意这里f为负值,也就是说此种情况下fft负频谱对
应的视在频率减去fs/2即可得到频谱对应的真实负频率
二. 复信号情况
1)复信号没有负频率,以fs为采样速率的信号,fft的频谱结果是从[0, fs]的。
2)在 f > fs/2 时,对复信号的fft结果进行fftshift会产生频率混叠(将下面的示例2中
的频率从f=15改为f=85可以验证f=85的谱线在fftshift后跑到 f = -15 = 85 - fs =
85 - 100的位置了),所以复信号也一般要求 f <= fs/2
3)在对雷达的慢时间维(复信号)进行fft后,由于要用doppler = ((0:LFFT-1)/LFFT
- 0.5)*PRF; 计算多普勒频率,所以对该慢时间信号fft后要fftshift下,以便和正确
的频率单元相对应。注意多普勒频率fd < = PRF/2 时才测的准!
%}
%--------------------距离向压缩---------------
s_uf=fftshift(fft(fftshift(s_ut))); %距离向FFT
%{
概念普及: fftshift
作用:将零频点移到频谱的中间
用法:
Y=fftshift(X)
Y=fftshift(X,dim)
描述:fftshift移动零频点到频谱中间,重新排列fft,fft2和fftn的输出结果。将
零频点放到频谱的中间对于观察傅立叶变换是有用的。
%}
src_uf=s_uf.*(conj(p0_f).'*ones(1,Na)); %距离压缩
src_ut=fftshift(ifft(fftshift(src_uf)));% IFFT后得到距离压缩后的信号 %
%--------------------方位向压缩--------------
src_fut=fftshift(fft(fftshift(src_ut).')).'; %距离多普勒域
%二次距离压缩,距离迁移校正原理仿真
src_fuf=fftshift(fft(fftshift(src_uf).')).'; %距离压缩后的二维频谱
F=f'*ones(1,Na);%扩充为矩阵
FU=ones(floor(Nr),1)*fu;
p0_2f=exp(1i*pi/fc^2/fdr*(FU.*F).^2+1i*pi*fdc^2/fc/fdr*F-1i*pi/fc/fdr*FU.^2.*F);
s2rc_fuf=src_fuf.*p0_2f;
s2rc_fut=fftshift(ifft(fftshift(s2rc_fuf)));%距离多普勒域
%方位压缩
p0_2fu=exp(1i*pi/fdr*(FU-fdc).^2);%方位向压缩因子
s2rcac_fut=s2rc_fut.*p0_2fu;%方位压缩
s2rcac_fuf=fftshift(fft(fftshift(s2rcac_fut)));%距离方位压缩后的二维频谱
s2rcac_ut=fftshift(ifft(fftshift(s2rcac_fut).')).';%方位向IFFT
%画图显示结果
subplot(221)
X=20*log10(abs(s_ut)+1e-6);
gm=max(max(X));
gn=gm-40;%显示动态范围40dB
X=255/(gm-gn)*(X-gn).*(X>gn);
imagesc(x,r-Rc,-X),colormap(gray)
grid on,axis tight,
xlabel('Azimuth')
ylabel('Range')
title('(a)原始信号')
subplot(222)
X=20*log10(abs(src_fut)+1e-6);
gm=max(max(X));
gn=gm-40;%显示动态范围40dB
X=255/(gm-gn)*(X-gn).*(X>gn);
imagesc(fu,r-Rc,-X),colormap(gray)
grid on,axis tight,
xlabel('Azimuth')
ylabel('Range')
title('(b)距离多普勒域频谱')
subplot(223)
X=20*log10(abs(s2rc_fut)+1e-6);
gm=max(max(X));
gn=gm-40;%显示动态范围40dB
X=255/(gm-gn)*(X-gn).*(X>gn);
imagesc(fu,r-Rc,-X),colormap(gray)
grid on,axis tight,
xlabel('Azimuth')
ylabel('Range')
title('(c)RMC后的RD域频谱')
% figure(4)
% contour(real(P