rd算法与cs算法


%%================================================================

%%文件名:SAR.m

%%功能:合成孔径雷达距离多普勒算法点目标成像

%%================================================================

clear;clc;close all;

%%================================================================

%%常数定义

C=3e8;                            %光速

%%雷达参数

Fc=1e9;                          %载频1GHz

lambda=C/Fc;                     %波长

%%目标区域参数

Xmin=0;                          %目标区域方位向范围[Xmin,Xmax]

Xmax=50;                 

Yc=10000;                      %成像区域中线

Y0=500;                          %目标区域距离向范围[Yc-Y0,Yc+Y0]

                                       %成像宽度为2*Y0

%%轨道参数

V=100;                            %SAR的运动速度100 m/s

H=5000;                          %高度 5000 m

R0=sqrt(Yc^2+H^2);               %最短距离

%%天线参数

D=4;                                %方位向天线长度

Lsar=lambda*R0/D;  %SAR合成孔径长度,《合成孔径雷达成像——算法与实现》P.100

Tsar=Lsar/V;                   %SAR照射时间

%%慢时间域参数

Ka=-2*V^2/lambda/R0;   %多普勒频域调频率P.93

Ba=abs(Ka*Tsar);           %多普勒频率调制带宽

PRF=Ba;                         %脉冲重复频率,PRF其实为多普勒频率的采样率,又为复频率,所以等于Ba.P.93

PRT=1/PRF;                   %脉冲重复时间

ds=PRT;                         %慢时域的时间步长

Nslow=ceil((Xmax-Xmin+Lsar)/V/ds); %慢时域的采样数,ceil为取整函数,结合P.76的图理解

Nslow=2^nextpow2(Nslow);              %nextpow2为最靠近2的幂次函数,这里为fft变换做准备

sn=linspace((Xmin-Lsar/2)/V,(Xmax+Lsar/2)/V,Nslow);%慢时间域的时间矩阵

PRT=(Xmax-Xmin+Lsar)/V/Nslow;    %由于Nslow改变了,所以相应的一些参数也需要更新,周期减小了

PRF=1/PRT;

ds=PRT;

%%快时间域参数设置

Tr=5e-6;                         %脉冲持续时间5us

Br=30e6;                        %chirp频率调制带宽为30MHz

Kr=Br/Tr;                        %chirp调频率

Fsr=2*Br;                        %快时域采样频率,为3倍的带宽

dt=1/Fsr;                         %快时域采样间隔

Rmin=sqrt((Yc-Y0)^2+H^2);

Rmax=sqrt((Yc+Y0)^2+H^2+(Lsar/2)^2);

Nfast=ceil(2*(Rmax-Rmin)/C/dt+Tr/dt);%快时域的采样数量

Nfast=2^nextpow2(Nfast);                   %更新为2的幂次,方便进行fft变换

tm=linspace(2*Rmin/C,2*Rmax/C+Tr,Nfast); %快时域的离散时间矩阵

dt=(2*Rmax/C+Tr-2*Rmin/C)/Nfast;    %更新间隔

Fsr=1/dt;

%%分辨率参数设置

DY=C/2/Br;                           %距离向分辨率

DX=D/2;                                %方位向分辨率

%%点目标参数设置

Ntarget=5;                            %点目标的数量

%点目标格式[x,y,反射系数sigma]

Ptarget=[Xmin,Yc-50*DY,1               %点目标位置,这里设置了5个点目标,构成一个矩形以及矩形的中心

              Xmin+50*DX,Yc-50*DY,1

             Xmin+25*DX,Yc,1

             Xmin,Yc+50*DY,1

             Xmin+50*DX,Yc+50*DY,1]; 

disp('Parameters:')   %参数显示

disp('Sampling Rate in fast-time domain');disp(Fsr/Br)

disp('Sampling Number in fast-time domain');disp(Nfast)

disp('Sampling Rate in slow-time domain');disp(PRF/Ba)

disp('Sampling Number in slow-timedomain');disp(Nslow)

disp('Range Resolution');disp(DY)

disp('Cross-range Resolution');disp(DX)    

disp('SAR integration length');disp(Lsar)    

disp('Position of targets');disp(Ptarget)

%%================================================================

%%生成回波信号

K=Ntarget;                                %目标数目

N=Nslow;                                  %慢时域的采样数

M=Nfast;                                  %快时域的采样数

T=Ptarget;                                %目标矩阵

Srnm=zeros(N,M);                          %生成零矩阵存储回波信号

for k=1:1:K                               %总共K个目标

   sigma=T(k,3);                        %得到目标的反射系数

   Dslow=sn*V-T(k,1);                   %方位向距离,投影到方位向的距离

   R=sqrt(Dslow.^2+T(k,2)^2+H^2);       %实际距离矩阵

   tau=2*R/C;                           %回波相对于发射波的延时

   Dfast=ones(N,1)*tm-tau'*ones(1,M);   %(t-tau),其实就是时间矩阵,ones(N,1)和ones(1,M)都是为了将其扩展为矩阵

   phase=pi*Kr*Dfast.^2-(4*pi/lambda)*(R'*ones(1,M));%相位,公式参见P.96

   Srnm=Srnm+sigma*exp(j*phase).*(0

end

%%================================================================

%%距离-多普勒算法开始

%%距离向压缩

tic;

tr=tm-2*Rmin/C;

Refr=exp(j*pi*Kr*tr.^2).*(0

Sr=ifty(fty(Srnm).*(ones(N,1)*conj(fty(Refr))));

Gr=abs(Sr);

Sa_RD = ftx(Sr);   

Kp=1;                                

h = waitbar(0,'Sinc插值');

P=4;%4点sinc插值

RMCmaxtix = zeros(N,M);

for n=1:N

    for m=P:M

       delta_R =(1/8)*(lambda/V)^2*(R0+(m-M/2)*C/2/Fsr)*((n-N/2)*PRF/N)^2;

      RMC=2*delta_R*Fsr/C;         %距离徒动了几个距离单元

       delta_RMC= RMC-round(RMC);  %距离徒动量的小数部分

       for i = -P/2:P/2-1

           ifm+RMC+i>M              %判断是否超出边界

               RMCmaxtix(n,m)=RMCmaxtix(n,m)+Sa_RD(n,M)*sinc(pi*(-i+RMC));

           else

               RMCmaxtix(n,m)=RMCmaxtix(n,m)+Sa_RD(n,m+round(RMC)+i)*sinc(pi*(-i+delta_RMC));

           end

       end

    end

    waitbar(n/N)

end

close(h)

%========================

Sr_rmc=iftx(RMCmaxtix);   %%距离徙动校正后还原到时域

Ga = abs(Sr_rmc);

%%方位向压缩

ta=sn-Xmin/V;

Refa=exp(j*pi*Ka*ta.^2).*(abs(ta)

Sa=iftx(ftx(Sr_rmc).*(conj(ftx(Refa)).'*ones(1,M)));

Gar=abs(Sa);

toc;

%%================================================================

%%绘图

colormap(gray);

figure(1)

subplot(211);

row=tm*C/2-2008;col=sn*V-26;

imagesc(row,col,255-Gr);           %距离向压缩,未校正距离徙动的图像

axis([Yc-Y0,Yc+Y0,Xmin-Lsar/2,Xmax+Lsar/2]);

xlabel('距离向'),ylabel('方位向'),

title('距离向压缩,未校正距离徙动的图像'),

subplot(212);

imagesc(row,col,255-Ga);          %距离向压缩,校正距离徙动后的图像

axis([Yc-Y0,Yc+Y0,Xmin-Lsar/2,Xmax+Lsar/2]);

xlabel('距离向'),ylabel('方位向'),

title('距离向压缩,校正距离徙动后的图像'),

figure(2)

colormap(gray);

imagesc(row,col,255-Gar);          %方位向压缩后的图像

axis([Yc-Y0,Yc+Y0,Xmin-Lsar/2,Xmax+Lsar/2]);

xlabel('距离向'),ylabel('方位向'),

title('方位向压缩后的图像'),

 

 

 

%% Chirp Scaling算法

clear all;clc;

%%距离向参数range:x domain

Tr=200;%时宽200m

Br=1;%带宽1

Kr=Br/Tr;%调频斜率

Fc=4;%载频4

Nfast=512;%为了快速运算

Xc=1200;X0=150;%定义距离向范围

x=Xc+linspace(-X0,X0,Nfast);%x域序列:Xc-X0~Xc+X0

dx=2*X0/Nfast;%定义步长

kx=linspace(-1/dx/2,1/dx/2,Nfast);%kx域序列

 

%%方位向参数cross-range:y domain

Ta=300;%时宽300m,合成孔径长度

Ba=1;%带宽1(1/m)

Ka=Fc/Xc;%调频斜率Ka=Ba/Ta=Fc/Xc

Nslow=1024;%为了快速运算

Y0=200;

y=linspace(-Y0,Y0,Nslow);%y域序列:-Y0~Y0

dy=2*Y0/Nslow;

ky=linspace(-1/dy/2,1/dy/2,Nslow);%ky域序列

 

%%目标几何关系target geometry

%x坐标,y坐标,复后向散射系数

Ptar=[Xc,0,1+0j             

         Xc+50,-50,1+0j

         Xc+50,50,1+0j

         Xc-50,-50,1+0j

         Xc-50,50,1+0j];

     

disp('Position of targets');disp(Ptar)

%%生成SAR正交解调后的回波数据

Srnm=zeros(Nfast,Nslow);

N=size(Ptar,1);%目标个数

h = waitbar(0,'SAR回波生成');

for i=1:1:N

   xn=Ptar(i,1);yn=Ptar(i,2);sigma=Ptar(i,3);%提取每个目标的信息

   X=x.'*ones(1,Nslow);%扩充为矩阵

   Y=ones(Nfast,1)*y;%扩充为矩阵

   DX=sqrt(xn^2+(Y-yn).^2);%中间变量

   phase=pi*Kr*(X-DX).^2-2*pi*Fc*DX;%回波相位

   Srnm=Srnm+sigma*exp(j*phase).*(abs(X-DX)

    waitbar(i/N)

end

close(h)

tic;

%%数据准备

phi0=-x'*sqrt(Fc^2-ky.^2);

phi1=-Fc*x'*(1./sqrt(Fc^2-ky.^2));

phi2=1/2*x'*(ky.^2./(Fc^2-ky.^2).^1.5);

Cs=ones(Nfast,1)*(Fc./sqrt(Fc^2-ky.^2)-1);

Ks=1./(1/Kr-2*phi2);

 

%%CSA:7步  开始

s_xky=fftshift(fft(fftshift(Srnm).')).';

scs_xky=s_xky.*exp(j*pi*Cs.*Ks.*(x'*ones(1,Nslow)-Xc*(1+Cs)).^2);%ChirpScaling

s1=ifty(scs_xky);%为显示存储数据

scs_kxky=fftshift(fft(fftshift(scs_xky)));Ks...

                    +j*2*pi*Xc*Cs.*(kx'*ones(1,Nslow)));

f_xky=srmc_xky.*exp(-j*pi*Ks.*Cs.*(1+Cs).*((x-Xc).^2'*ones(1,Nslow))...

          -j*2*pi*phi0);

f_xy=fftshift(ifft(fftshift(f_xky).')).';

%%CSA:

toc;

p0_x=exp(j*pi*Kr*(x-Xc).^2).*(abs(x-Xc)

p0_kx=fftshift(fft(fftshift(p0_x)));

p0_y=exp(-j*pi*Ka*y.^2).*(abs(y)

p0_ky=fftshift(fft(fftshift(p0_y)));

 

s_kxy=fftshift(fft(fftshift(s1)));%距离向FFT

sxc_kxy=s_kxy.*(conj(p0_kx).'*ones(1,Nslow));

sxc_kxky=fftshift(fft(fftshift(sxc_kxy).')).';%距离压缩后的2D频域信号

sxc_xy=fftshift(ifft(fftshift(sxc_kxy)));%距离压缩后的信号

sxc_xky=fftshift(fft(fftshift(sxc_xy).')).';%距离压缩后,距离-多普勒域

%%结果显示

figure(1)

colormap(gray);

imagesc(255-abs(Srnm));

xlabel('方位向'),ylabel('距离向'),

title('仿真出来的信号');

 

figure(2)

colormap(gray);

imagesc(255-abs(sxc_xy));

xlabel('方位向'),ylabel('距离向'),

title('Chirp Scaling后、经过距离向压缩,距离徙动一致');

 

figure(3)

colormap(gray);

imagesc(255-abs(srmc_xky));

xlabel('方位向'),ylabel('距离向'),

title('消除距离徙动后的信号');

 

figure(4)

colormap(gray);

imagesc(255-abs(f_xky));

xlabel('方位向'),ylabel('距离向'),

title('相位校正后的信号');

 

figure(5)

colormap(gray);

imagesc(255-abs(f_xy));

xlabel('方位向'),ylabel('距离向'),

title('生成的点目标');


 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(SAR成像)