2007 合成孔径雷达成像算法与实现 各figure的matlab实现(第三章 - 图3.14 和 图3.15 )

说明:
(1)本程序使用的是频域匹配滤波,书本上的可能是时域匹配滤波,所以结果有一些出入;但是趋势是一样的,能够用来理解书本内容
(2)程序添加了迭代画图的功能,能够以动画的形式得到图3.15的结果
(3)程序可以设置基带和非基带信号,改tc就行; 后面贴图给的是非基带信号的结果

matlab程序代码如下:

function figure3_14_15()

%% initial matlab workspace
% figure 3.14 and figure 3.15 ; page 64 and page 65
clc
clear
close all

% 设置时间宽度T 和 TBP
T   = 7.2e-6;
TBP = 42;

% 设置tc 和 时延t0; 总时间为t0+T,时间范围是-T/2~t0+T/2
tc = 10e-6;
t0 = 3e-6;

% 是否添加噪声
add_noise_flag = 0;
snr            = 2.5;

% 是否加kaiser窗
add_kaiser_window_flag = 1;
beta                   = 2.5;

% 提取ISLR用到的alpha
alpha = 2.8;

% 由设置的参数 计算其他参数
% 计算B和K
B = TBP/T;
K = B/T;

% 设置fs和dt, Nh为T时间宽度内的抽样点数
fs = 1.2*B;
dt = 1/fs;
Nh = ceil( T/dt );
Nh = 2^( ceil( log2(Nh) ) );
dt = T/Nh;
fs = 1/dt;

% 设置回波信号的时间序列tr; Nr为回波信号数据长度
tr = -T/2:dt:t0+T/2-dt;
Nr = length(tr);

% 计算DFT频点
fre = (0:Nr-1)*fs/Nr;

% 确定中心频点fc;
fc = - K * tc;
df = fs/Nr;

% 确定fc-fs/2对应的位置fre_real_left_loc
fre_real_left_loc = round( ( fc-fs/2 )/df ) ;
% 如果是傅里叶变换 回波信号每个频点所在的位置序号 fre_real_loc ; 以及对应的频点值fre_real
fre_real_loc = (0:Nr-1) + fre_real_left_loc;
fre_real     = fre_real_loc * df;
% 因为DFT的循环特性,确定loc_real在0~Nr内的位置fre_real_loc_in_main; 并确定在0-Nr之内每个频点实际频点fre_real_in_main
fre_real_loc_in_main                         = mod( fre_real_loc, Nr );
fre_real_in_main                             = zeros(1,Nr);
fre_real_in_main( fre_real_loc_in_main + 1 ) = fre_real;

% 加窗
if add_kaiser_window_flag == 1
    wk             = kaiser( Nr, beta );
    wk_in_main( fre_real_loc_in_main + 1 ) = wk;
end

% 模拟信号 根据设置添加噪声
% 模拟接收信号sr;
sr = exp( 1i.*pi.*K.*(tr-t0-tc).^2 ).*( tr-t0<=T./2 & tr-t0>=-T/2 )  ;     sr0 = sr; % sr0用于画图

% 添加噪声
if add_noise_flag == 1
    sr = awgn( sr, snr );
end


% 回波信号时域shift
sr = [ sr(Nh/2+1:end), sr(1:Nh/2) ];

% 计算回波信号频谱
sr_f =  fft( sr ) * dt;  % *dt 转化为傅里叶变换结果

%% 循环
% 设置所有需要计算的 调频率误差dk,即△K
dk_all = linspace( -K/12, K/12, 101 );
Ndk    = length( dk_all );

% 初始化IRW PSLR ISLR QPE
IRW  = zeros( 1, Ndk );
PSLR = zeros( 1, Ndk );
ISLR = zeros( 1, Ndk );
QPE  = zeros( 1, Ndk );
t0_d = zeros( 1, Ndk );  
  • 4
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值