雷达发射的线性调频信号:
s
(
t
)
=
r
e
c
t
(
t
τ
)
e
x
p
j
2
π
f
0
t
+
j
π
μ
t
2
s(t)=rect(\frac{t}{\tau})exp{j2\pi f_0t+j\pi \mu t^2}
s(t)=rect(τt)expj2πf0t+jπμt2
不考虑RCS,假设目标回波的幅度不变,那么目标反射回波可以写为:
s
0
(
t
)
=
r
e
c
t
(
t
−
t
0
τ
)
e
x
p
j
2
π
f
0
t
+
j
π
μ
(
t
−
t
0
)
2
s_0(t)=rect(\frac{t-t_0}{\tau})exp{j2\pi f_0t+j\pi \mu (t-t_0)^2}
s0(t)=rect(τt−t0)expj2πf0t+jπμ(t−t0)2
这样表示在物理含义是正确的,但是我们在仿真的时候,却不能直接用上面的公式来产生,这是因为
t
−
t
0
t-t_0
t−t0在信号处理中的含义是时延,回波仅仅是线性调频信号的时延,只需要在脉冲前补充相应数量的0即可。我看到过一些仿真程序,直接拿第二个公式去产生信号,做完脉压之后,尖峰位置所处的波门也和时延对应上了,其实这是有问题的,它产生的线性调频信号的中心频率发生了偏移。
除此之外,时域上做匹配滤波之后得到的信号向量长度会变大,我们需要截掉一定长度的暂态点,截取的长度和匹配滤波器的系数的长度有关,这也是我们需要注意的点。
下面是我编写的产生线性调频信号、雷达回波以及脉冲压缩的程序,由主程序调用函数。
自定义函数
function [LFMPulse,targetEchoPRT,matchedFilterCoeff,pulseNumber,PRTNumber] = GenerateLFMSignal(bandWidth,pulseDuration,PRTDuration,samplingFrequency,signalPower,targetDistece,plotEnableHigh)
% 该函数用于产生线性调频信号,以及雷达的目标反射回波,仅产生单个回波
% Author:huasir 2023.9.21 @Beijing
% Input :
% * bandWidth: 信号带宽 ,参考值:2.0e6 表示2MHz
% * pulseDuration:脉冲持续时间,参考值:40.0e-6 表示40ms
% * PRTDuration:脉冲重复周期,参考值:240ms
% * samplingFrequency:采样频率,参考值:2倍的信号带宽
% * signalPower:信号能量,参考值:1
% * targetDistece:目标距离,最大无模糊距离由脉冲重复周期决定。计算公式:1/2*PRTDuration*光速
% * plotEnableHigh: 绘图控制符,1:打开绘图,0:关闭绘图
% Output :
% * LFMPulse:线性调频信号
% * targetEchoPRT: 目标反射回波
% * matchedFilterCoeff: 匹配滤波器系数
% * pulseNumber:当前采样率下线性调频信号的采样点数
% * PRTNumber:1个PRT对应的采样点数
C = 3.0e8; %光速(m/s)
BandWidth = bandWidth; %雷达发射信号带宽,带宽=B=1/tau,tau是脉冲宽度
TimeWidth = pulseDuration; %雷达发射信号的脉冲时宽
PRT = PRTDuration; %雷达发射脉冲重复周期(s),240us对应1/2*240*300=360000米最大无模糊距离
Fs = samplingFrequency; %采样频率
SampleNumber = fix(Fs*PRT);
%=========================================================================%
% 目标参数设置 %
%=========================================================================%
SigPower = signalPower; %目标功率,无量纲
TargetDistance = targetDistece; %目标距离,单位:m
DelayNumber = fix(Fs*2*TargetDistance/C); %把目标距离换算成采样点(距离门)
%=========================================================================%
% 产生线性调频信号、匹配滤波器 %
%=========================================================================%
number = fix(Fs*TimeWidth); %回波采样点数=脉压系数长度=暂态点数目+1
if rem(number,2)~=0
nember = nember + 1;
end
Chirp = zeros(1,number);
for i = -fix(number/2):fix(number/2)-1
Chirp(i+fix(number/2)+1)=exp(1j*(pi*(BandWidth/TimeWidth)*(i/Fs)^2));%产生复ChIrp信号
end
coeff = conj(fliplr(Chirp)); %把Chirp信号翻转并把复数共轭,产生脉压系数
%=========================================================================%
% 绘制线性调频信号 %
%=========================================================================%
if plotEnableHigh == 1
figure;
plot(real(Chirp)); %绘制线性调频信号
xlabel('Sampling points'); ylabel('Amplitude');title('线性调频信号实部');
end
SignalTemp = zeros(1,SampleNumber); %1个PRT
SignalTemp(DelayNumber+1:DelayNumber+number) = sqrt(SigPower)*Chirp;%将线性调频信号按照距离进行延时
if plotEnableHigh == 1
figure;
plot(real(SignalTemp)); %绘制1个完整的PRT的雷达回波信号
xlabel('Range bin'); ylabel('Amplitude');title('雷达回波的实部');
end
%=========================================================================%
% 进行脉冲压缩 %
%=========================================================================%
Echo = SignalTemp; % 目标回波
pc_time0 = conv(Echo,coeff); % 回波和滤波器卷积的结果
pc_time1 = pc_time0(number:number+SampleNumber-1); %去掉暂态点
realTargetRange = find(abs(pc_time1)==max(abs(pc_time1)))-1; %由脉压结果目标距离
fprintf('The target range bin is %d',realTargetRange);
if plotEnableHigh == 1
figure; %时域脉压结果
subplot(2,1,1);plot(abs(pc_time0),'r-');
xlabel('Range bin'); ylabel('Amplitude');title('时域脉压结果');
subplot(2,1,2);plot(abs(pc_time1),'r-');
xlabel('Range bin'); ylabel('Amplitude');title('去掉暂态点的时域脉压结果');
end
%=========================================================================%
% 返回参数 %
%=========================================================================%
LFMPulse = Chirp; %线性调频信号
targetEchoPRT = SignalTemp; %目标反射回波
matchedFilterCoeff = coeff; %匹配滤波器系数
pulseNumber = number; %线性调频信号的采样点数
PRTNumber = SampleNumber; %目标反射回波的采样点数
end
主程序
%% LFM信号生成,脉压
% 主要内容:线性调频信号的生成、雷达回波的模拟
% Author: zhenhualiu 2023.7.19
%=========================================================================%
% 雷达参数设置 %
%=========================================================================%
clear all;close all;clc;
C = 3.0e8; %光速(m/s)
RF = 3.140e9/2; %雷达射频1.57GHz
Lambda = C/RF; %雷达工作波长
BandWidth = 2.0e6; %雷达发射信号带宽,带宽=B=1/tau,tau是脉冲宽度
TimeWidth = 40.0e-6; %雷达发射信号的脉冲时宽
PRT = 240e-6; %雷达发射脉冲重复周期(s),240us对应1/2*240*300=360000米最大无模糊距离
Fs = 4.0e6; %采样频率
NoisePower = -12; %噪声功率
SigPower = 1; %目标功率,无量纲
TargetDistance = 18000; %目标距离,单位:m
plot_enable_L = 1; %绘图控制符
%=========================================================================%
% 调用函数产生线性调频信号、雷达回波和脉压系数 %
%=========================================================================%
[LFMPulse,targetEchoPRT,matchedFilterCoeff,pulseNumber,PRTNumber] = GenerateLFMSignal(BandWidth,TimeWidth,PRT,Fs,SigPower,TargetDistance,plot_enable_L);%调用函数
仿真结果如下:
可以看到这个线性调频信号的波形似乎不是那么的“完美”,这是由于采样率低造成的,适当增大采样率,会使得信号看上去更加的光滑。