本博参考 合成孔径雷达-算法与实现 3.4节 匹配滤波器的实现。如有错漏,还请各位大佬指正
1、LFM信号
线性调频信号在SAR系统中十分重要,其频率是时间的线性函数。这种信号用于发射,以得到均匀的信号带宽,其在接收信号中则来自传感器运动。
时域表达式为:
频谱的简略表达式为(忽略常数振幅和相位正负pi/4):
2、匹配滤波器的实现
2.1 基本方式
匹配滤波器的生成方法一般有如下几种(基于基带信号):
- 将时间反褶后的复制脉冲(发射复制脉冲)取复共轭,计算补零DFT;
- 复制脉冲补零后进行DFT,对结果取复共轭(无时间反褶);
- 根据设定的线性调频特性,直接在频域生成匹配滤波器。
前两种方式中复制信号在进行FFT前要补零至选定的长度(Nfft),由于弃置区等于复制信号长度(减1),Nfft的长度应倍数于信号长度。SAR中的匹配滤波器一般比较长,通常在频域实现。
弃置区位置
- 方式1:在复制信号末端补零,则循环卷积中弃置区位于IDFT输出序列的起始;
- 方式2:同样在复制信号末端补零,但其循环卷积中弃置区位于IDFT输出序列的末端;
- 方式3:弃置区分则于IDFT输出序列的两则。
2.2 MATLAB实现
方式1:将发射信号时间反褶后取共轭得到h(t),再与信号补零后的FFT在频域相乘,最后取IFFT。
// 方式1
ht=conj(fliplr(st));
Hf=fft(ht,Nfft);
Sf=fft(st,Nfft);
s=ifft(Hf.*Sf);
方式2:将发射脉冲补零后进行FFT,再取共轭(无需反褶),与信号补零后的FFT在频域相乘,最后IFFT。
// 方式2
Hf=conj(fft(st,Nfft));
Sf=fft(st,Nfft);
s=ifft(Hf.*Sf);
方式3:直接在频域生成匹配滤波器
// 方式三
Hf=exp(1i*pi*f.^2/K);
Sf=fft(st,Nfft);
s=ifft(Hf.*Sf);
注: conv函数计算的是两个序列的线性卷积,而fft计算的是序列的循环卷积,Nfft满足下式时可以无差别地使用循环卷积计算线性卷积。
,
N1、N2分别表示两个信号删去左右两边零值后的长度。
MATLAB 实现示例
// Match_filter
close all;clear all;clc
%%线性调频信号
T=42e-6;
B=17.2e6;
Fs=18.5e6;
K=B/T;
N=round(T/(1/Fs));
t=linspace(-T/2,T/2,N);
st=( abs(t) < T/2 ) .*exp(1j*pi*K.*t.^2);
%%时域匹配滤波
ht=conj(fliplr(st));
y1=conv(st,ht);
Nfft=N+N-1;
t1=linspace(-T/2,T/2,Nfft);
figure(1);
subplot(311),plot(t,real(st));
subplot(312),plot(t,imag(st));
subplot(313),plot(t1,abs(y1));
%%方式1
Nfft2=2*N;
freqz=linspace(-Fs/2,Fs/2,Nfft2);
t2=linspace(-T/2,T/2,Nfft2);
Hf1=fftshift(fft(ht,Nfft2));
Sf1=fftshift(fft(st,Nfft2));
y2=ifft(Hf1.*Sf1);
figure(2);
subplot(311),plot(freqz,abs(Hf1));
subplot(312),plot(freqz,abs(Sf1));
subplot(313),plot(freqz,abs(y2));
%%方式2
Hf2=fftshift(conj(fft(st,Nfft2)));
y3=fftshift(ifft(Sf1.*Hf2));
figure(3);
plot(t2,abs(y3));
仿真结果
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/05e65b454a33a60b9077dea67f5b38bd.png)
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/28b588d46e1edacca318db039cedd4fd.png)