脉冲压缩/匹配滤波器时雷达信号信号处理最基本的操作之一,本文详细推导了匹配滤波器的基本原理,并给出了matlab的仿真程序。
由于公式太多,所以这里以截图的形式分享给大家。需要word或pdf可留言或私信。
脉冲压缩的基本原理
时域匹配域滤波
频域匹配滤波
匹配滤波的实现方式
《合成孔径雷达成像——算法与实现》介绍了三种匹配滤波的实现方式。相关代码如下
(《合成孔径雷达成像——算法与实现》之【10】仿真图3.13_Destiny0321的专栏-CSDN博客)
% SAR_Figure_3_13
% 2016/08/31
close all;clear all;clc;
T = 10e-6; % 脉冲持续时间
B = 15e6; % 脉冲带宽
K = B/T; % 调频率
ratio = 5; % 过采样率
Fs = ratio*B; % 采样频率
dt = 1/Fs; % 采样间隔
Nr = ceil(T/dt); % 采样点数
t0 = ((0:Nr-1)-Nr/2)/Nr*T; % 基本时间轴
st0 = exp(1i*pi*K*(t0-T/5).^2); % 基本信号
space1 = zeros(1,round(Nr/5)); % 生成空信号
space2 = zeros(1,Nr); % 生成空信号
st = [space1,st0,space2,st0,space2,st0,space1]; % 实际信号
N = length(st); % 实际信号长度
n = 0:N-1; % 样本轴
f = ((0:N-1)-N/2)/N*Fs; % 基本频率轴
Sf = fftshift(fft(st)); % 实际信号的傅里叶变换
Hf1 = fftshift(fft(conj(fliplr(st0)),N)); % 方式1的匹配滤波器:时间反褶后取复共轭,计算N点补零DFT
Hf2 = fftshift(conj(fft(st0,N))); % 方式2的匹配滤波器:补零后计算DFT,对结果取复共轭
Hf3 = exp(1i*pi*f.^2/K); % 方式3的匹配滤波器:直接在频域生成匹配滤波器
out1 = ifft(ifftshift(Sf.*Hf1));
out2 = ifft(ifftshift(Sf.*Hf2));
out3 = ifft(ifftshift(Sf.*Hf3));
figure,set(gcf,'Color','w');
subplot(4,1,1),plot(n,real(st));axis tight
title('(a)输入阵列信号的实部');ylabel('幅度');
subplot(4,1,2),plot(n,abs(out1));axis tight
title('(b)方式1的匹配滤波输出');ylabel('幅度');
subplot(4,1,3),plot(n,abs(out2));axis tight
title('(c)方式2的匹配滤波输出');ylabel('幅度');
subplot(4,1,4),plot(n,abs(out3));axis tight
title('(d)方式3的匹配滤波输出');xlabel('时间(采样点)');ylabel('幅度');
%%
figure, plot(abs(fft(st0)))
%%
NN = length(st);
fr = [0:NN/2-1, -NN/2:-1]/NN*Fs;
Hr = exp(-j*pi*fr.^2/K);
src1 = ifft(fft(st).*Hr);
figure, plot(abs(src1))
上述代码的运行结果如下图所示。
上述仿真存在的问题:在实际雷达信号处理中,我们不能得到上述代码中的st0。
在已知雷达信号波形的前提下,可以在时域或频域进行匹配滤波,但是在实际SAR信号处理中,多选择在频域进行匹配滤波,原因主要有两个:
- 时域需要卷积操作,运算量大;频域只需要进行傅里叶变换和复乘运算,效率高;
- 实际SAR信号的一条脉冲,包含了整个幅宽内目标的发射信号,所以器长度远远大于实际发射信号的长度,为了提高时域匹配滤波的效率,设计的匹配滤波器长度通常与发射信号一致。
综上,假设一帧雷达信号的长度为N,且已知雷达波形,那么我们可以直接在时域或频域构造长度为N的理想信号,然后构造匹配滤波器。代码如下:
close all;clear all;clc;
T = 10e-6; % 脉冲持续时间
B = 15e6; % 脉冲带宽
K = B/T; % 调频率
ratio = 1.2; % 过采样率
Fs = ratio*B; % 采样频率
dt = 1/Fs; % 采样间隔
Nr = 8192;
tr = [-Nr/2:Nr/2-1]/Fs;
st = zeros(1, Nr);
for ii = -15:15
tr1 = tr + ii*T;
st0 = (abs(tr1)<T/2).*exp(-j*pi*K*tr1.^2);
st = st + st0;
end
figure, plot(real(st));
figure, plot(abs(fftshift(fft(st))))
%%
NN = Nr;
fr = [0:NN/2-1, -NN/2:-1]/NN*Fs;
Hr = exp(-j*pi*fr.^2/K);
src1 = ifft(fft(st).*Hr);
figure, plot(abs(src1));
figure, plot(real(st), 'y'); hold on
plot(abs(src1)/12, 'k');
运行上述代码后,得到的结果如下图所示,可以看出,脉冲尖峰处正好对应LFM信号的零频。