TomoSAR仿真

基于压缩感知的层析SAR仿真

   层析SA原理:通过多基线(多通道)实现高度向的高分辨。在得到多幅二维SAR图像后,配准、去平地相位,之后利用谱分析或压缩感知的方法重建出目标高度。

只考虑雷达与目标在同一个方位切片的情况。

参数载频
数值10GHz
高度2000m
带宽80MHz
脉冲宽度8㎲
基线间隔1m
通道数5

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

下面展示一些 内联代码片

close all;
H = 2000;
c=3e8;            %光速
Fc=10e9;
lamda=c / Fc;      %波长
Tr=8e-6;    %脉冲宽度
Br=80e6;
Kr=Br/Tr;   %chirp调频率
Yc = 2000;
target  = [0,2000,0;
    0,2100,10;
    0,2200,20];  %目标位置
R0 = sqrt((H-target(1,3))^2 + target(1,2)^2);
R1 = sqrt((H-target(2,3))^2 + target(2,2)^2);
R2 = sqrt((H-target(3,3))^2 + target(3,2)^2);
N = size(target,1);
Nrg = 1024;
tr =linspace(-Tr/2,Tr/2,Nrg)+2*R0/c;
r = tr*c/2;
fsr = 1/(Tr/Nrg);
a = fsr/Br;
dr = c/2/Br;
% 基线设置
del_H = 1;
Npass = 5;
theta_r = atan(2000/H);
dz = lamda * R0 / (2 *(Npass-1)* del_H * sin(theta_r))  * sin(theta_r)    % 0.4m
Hmax = (Npass-1) * dz %最大不模糊高程


%回波信号
s_echo = zeros(Npass,Nrg);
for k = 1:Npass
    for ii = 1:N
        R= sqrt(target(ii,2)^2 + (H+del_H*(k-1)-target(ii,3))^2 ) * ones(1,Nrg);
        tau = tr-2*R/c;
        s = exp(-1j*4*pi*R/lamda) .* exp(1j* pi* Kr*tau.^2) ;
        s_echo(k,:) = s_echo(k,:) + s;
    end
end
clear s
%figure;plot(r,abs(s_echo));xlabel('距离');
rr = sqrt(target(:,2).^2 + (H+del_H*(0:Npass-1)-target(:,3)).^2 );
%距离压缩
tm = tr-2*R0/c;
Refr=exp(1j*pi*Kr*tm.^2);%距离压缩参考函数
F_Refr=fft(Refr);
s_rd = zeros(Npass,Nrg);
for k = 1:Npass
    S_echo = fft(s_echo(k,:));
    s_rd(k,:) = fftshift(ifft(S_echo .* conj(F_Refr)));
end
% figure;plot(r,20*log10(abs(s_rd)));xlabel('距离');
fprintf('配准前的相关系数:');
for k=2:Npass
    cor = abs(corrcoef(abs(s_rd(1,:)),abs(s_rd(k,:))));
    fprintf('%1.2f ',cor(2,1));
end
fprintf('\n');
%% 粗配准
s_rd2 = s_rd;
%基于最大相关系数法像素级配准
s_rd3 = s_rd2;
Nx = 30;
dx = 1;
s1 = s_rd2(1,:);
Coeff = zeros(Npass,Nx);
shift = zeros(1,Npass);
for k = 2:Npass
    for n = 1:Nx
        s2 = s_rd2(k,:);
        S2 = fftshift(fft(s2));
        S2 = S2 .* exp(1j*2*pi*(-Nrg/2:Nrg/2-1)/Nrg * (n -Nx/2-1)*dx);   %搬移
        s2 = ifft(ifftshift(S2));
        Coeff(k,n) = sum(s1 .* conj(s2))/sum(abs(s1).^2) /sum(abs(s2).^2);  
    end
    [temp, indx] = max(Coeff(k,:));
    shift(k) = indx-Nx/2-1;
    s2 = s_rd2(k,:);
    S2 = fftshift(fft(s2));
    S2 = S2 .* exp(1j*2*pi*(-Nrg/2:Nrg/2-1)/Nrg * shift(k)*dx);
    s2 = ifft(ifftshift(S2));
    s_rd3(k,:) = s2;
end
% figure;plot(r,20*log10(abs(s_rd3(1:2,:))));xlabel('距离');
fprintf('粗配准后的相关系数:');
for k=2:Npass
    cor = abs(corrcoef(abs(s_rd3(1,:)),abs(s_rd3(k,:))));
    fprintf('%1.2f ',cor(2,1));
end
fprintf('\n');
%%  基于最大干涉频谱法亚像素级配准
s_rd4 = s_rd3;
Nx = 18;
dx2 = 0.1;
s1 = s_rd3(1,:);
SNR = zeros(Npass,Nx);
shift2 = zeros(1,Npass);
for k = 2:Npass
    for n = 1:Nx
        s2 = s_rd3(k,:);
        S2 = fftshift(fft(s2));
        S2 = S2 .* exp(1j*2*pi*(-Nrg/2:Nrg/2-1)/Nrg * (n -Nx/2-1)*dx2);   %搬移
        s2 = ifft(ifftshift(S2));
        tmp = angle(s1 .* conj(s2));
        tmp =fftshift(fft(exp(1j*tmp)));
        [temp , indx] = max(abs(tmp));
        tmp(indx) = 0;
        SNR(k,n) = temp/mean(abs(tmp));  
    end
    [temp, indx] = max(SNR(k,:));
    shift2(k) = indx-Nx/2-1;
    s2 = s_rd3(k,:);
    S2 = fftshift(fft(s2));
    S2 = S2 .* exp(1j*2*pi*(-Nrg/2:Nrg/2-1)/Nrg * shift2(k)*dx2);
    s2 = ifft(ifftshift(S2));
    s_rd4(k,:) = s2;
end
figure;plot(r,20*log10(abs(s_rd4)));xlabel('距离');title('精配准后');
fprintf('精配准后的相关系数:');
for k=2:Npass
    cor = abs(corrcoef(abs(s_rd4(1,:)),abs(s_rd4(k,:))));
    fprintf('%1.2f ',cor(2,1));
end
fprintf('\n');

%%  去斜
Rn0 = sqrt(ones(Npass,1) * (r.^2 - H^2)  +(H+(0:Npass-1)*del_H)' .^2 * ones(1,Nrg) ) ;
s_rd5 = s_rd4 .* exp(1j*4*pi/lamda * Rn0);

%画图
figure;
subplot(1,2,1);xlabel('距离');title('去斜后相位');
for k=1:Npass
    hold on; plot(r,phase(s_rd5(k,:)));
end
hold off;
subplot(1,2,2);xlabel('距离');title('去斜后的干涉相位');
for k=2:Npass
    hold on; plot(r,phase(s_rd5(1,:) .* conj(s_rd5(k,:))));
end
hold off;
%% CS高程重建
Nz = 128;
s_cs= zeros(Nz,Nrg);
z = linspace(-Hmax/2,Hmax/2,Nz);
z =Hmax*((-Nz/2+1:Nz/2)+20)/Nz;
 %z =((-Nz/2:Nz/2));
K = [1,2,3,4,5];
    for n=1:Nrg
        data = s_rd5(:,n);
        s_cs(:,n) = cs_omp(data,Nz);
    end
for i=1:Nz
    for j=1:Nrg
        if abs(s_cs(i,j))< T*0.4
            s_cs(i,j) = 0;
        end
    end
end
figure,
imagesc(r,z,abs(s_cs));%colormap(gray);
xlabel('斜距');ylabel('高度');axis xy;title('反演结果');
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值