说明:
(1)如果是非基带信号,频域匹配滤波的关键在于找到DFT一个宽度内的实际频率值
(2)图3.9和图3.12的结果,可以对比一下时域插值后的情况,旁瓣降低
matlab代码如下:
% initial matlab workspace
% figure 3.9 and figure 3.12 ; page 57 and page 62
clc
clear
close all
%% 参数设置
% 设置时间宽度T 和 TBP
T = 7.2e-6;
TBP = 42;
% 设置tc 和 时延t0; 总时间为t0+T,时间范围是-T/2~t0+T/2
tc = 0e-6;
t0 = 0e-6;
% 是否添加噪声
add_noise_flag = 0;
snr = 2.5;
% 是否加kaiser窗
add_kaiser_window_flag = 1;
beta = 2.5;
%% 由设置的参数 计算其他参数
% 计算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