微信公众号获取更多FPGA相关源码:
1.原理概述
非线性调频信号(NLFM)脉冲压缩原理:即采用非线性调频信号的代替线性调频信号,目的是在脉压后获得更好的主副瓣比,更小的信号损失。由于其信号处理方法同LFM信号一样,所以其方法的核心是如何设计NLFM信号,主要的方法是相位逗留法:
原理比较复杂,感兴趣的可以自己去搜资料看公式推导,我们主要讲怎么在Matlab里面实现。
2.相位逗留法设计NLFM
2.1 原理分析
令非线性信号
S
(
t
)
S(t)
S(t)的频谱为
S
(
ω
)
S(ω)
S(ω),则脉压后信号
y
(
t
)
y(t)
y(t)的频谱
Y
(
ω
)
Y(ω)
Y(ω):
Y
(
ω
)
=
∣
S
(
ω
)
∣
2
e
j
φ
Y(ω)=|S(ω)|^2 e^jφ
Y(ω)=∣S(ω)∣2ejφ
上式中
∣
S
(
ω
)
∣
2
|S(ω)|^2
∣S(ω)∣2决定了脉压后信号波形,
e
j
φ
e^jφ
ejφ由多普勒频率和时延决定,脉压性能主要由$|S(ω)|^2 $决定。
简单窗函数法中,用常见的窗函数 W ( f ) W(f) W(f)来代替 ∣ S ( ω ) ∣ 2 |S(ω)|^2 ∣S(ω)∣2,通过逗留相位原理和数字计算就可以得到 y ( t ) y(t) y(t),其步骤如下:
- 选取窗函数 W ( f ) W(f) W(f):海明窗、汉宁窗、高斯窗等。
- 计算群延迟函数
T
(
f
)
T(f)
T(f):由于积分上下限涉及无穷,没办法直接计算,数字信号处理里面,积分其实就是求和,此处对序列采用求和进行计算求即可。
T ( f ) = K T ∫ − ∞ f W ( v ) d v T(f)=K_T ∫_{-∞}^fW(v)dv T(f)=KT∫−∞fW(v)dv
K T = T / ( ∫ − ∞ + ∞ W ( v ) d v ) K T K_T=T/(∫_{-∞}^{+∞}W(v)dv) K_T KT=T/(∫−∞+∞W(v)dv)KT - 计算频率函数$f(t):f(t)
是
是
是T(f)$反函数,反函数没有显式表达式,故只能采用数值计算方法:插值求得。
f ( t ) = T − 1 ( f ) f(t)=T^{-1} (f) f(t)=T−1(f) - 计算相位函数
θ
(
t
)
θ(t)
θ(t):
θ ( t ) = 2 π ∫ − ∞ t f ( v ) d v θ(t)=2π∫_{-∞}^tf(v)dv θ(t)=2π∫−∞tf(v)dv - 得到NLFM信号
s
(
t
)
s(t)
s(t):
s ( t ) = e j θ ( t ) s(t)=e^{jθ(t)} s(t)=ejθ(t)
2.2 Matlab实现
以汉明窗(hamming)为窗函数,带宽 B = 8 M H z , T = 64 u s B = 8MHz,T = 64us B=8MHz,T=64us,8倍插值为例,matlab代码如下:
close all
clear all
clc
B = 8e6;
T = 64e-6;
int_num = 8;%插值数
ts = 1/(B);
N = T/ts;
t = 0:ts:T-ts;
t1 = t-T/2;
u= B/T;
BT = B*T;
fs = 1/ts;
fbin = fs/N;
f = 0:fbin:fs-fbin;
f1= f-fs/2;
%% windows
wa = hamming(N);
Nwin = length(f1);
wa_interp = interp(wa,int_num);
f1_interp = interp(f1,int_num);
t1_interp = interp(t1,int_num);
%% Tg(f)
K = T/sum(wa_interp);
for i = 1:length(wa_interp)
Tg(i) = K*sum(wa_interp(1:i))-T/2;
end
interp_coe = 4;
t2_interp = interp(t1_interp,interp_coe);
%%f(t)
fq1 = interp1(Tg,f1_interp,t2_interp);
fq = fq1(2:interp_coe:end);
% fq = interp1(Tg,f1_interp,t1_interp,'cubic');
%% phase
for i = 1:length(fq)
phase_w(i) = 2*pi*sum(fq(1:i))*ts/int_num;
end
figure;
subplot(221);plot(f1_interp,wa_interp);title('window interp');xlabel('f:Hz');
subplot(222);plot(f1_interp,Tg);title('Group delay');xlabel('f:Hz');
subplot(223);plot(t1_interp,fq);title('frequency func');xlabel('t:s');
subplot(224);plot(t1_interp,phase_w);title('Phase');xlabel('t:s');
%% signal
xt = exp(1i*phase_w(1:end));
Num = length(xt);
xt_LFM = exp(1i*2*pi*u*t1_interp.^2);
figure
subplot(211);plot(t1_interp,real(xt_LFM));title('NLFM signal:time');xlabel('t:s');
fbin2 = int_num*fs/Num;
ff = 0:fbin2:fs*int_num-fbin2;
f2= ff-fs*int_num/2;
fft_xt = 20*log10(fftshift(abs(fft(xt))));
fft_xt = fft_xt - max(fft_xt);
subplot(212);plot(f2,fft_xt);title('NLFM signal:frequency');xlabel('f:Hz');
%% 脉冲压缩
fil_xt = conj(fliplr(xt));
yt = conv(fil_xt,xt);
figure
plot(20*log10(abs(yt)));
窗函数、群延迟函数、调频曲线、相位曲线如下图所示:
所设计的NLFM时域和频谱图如下:
脉冲压缩结果如下:
NLFM信号主副瓣比大概式40dB左右。
实际上直接对非线性调频信号进行匹配滤波,在合理
选取窗函数和其他雷达参数的情况下,最终的主副瓣比也只能达到-40dB 左右,因此研究如何进一步降低信号的旁瓣电平很有实际意义。而且非线性调频信号还是多普勒敏感信号,即探测目标如果有速度,其主副瓣比还会变高。
微信公众号获取更多FPGA相关源码: