线性调频雷达回波仿真+脉冲压缩仿真

雷达发射的线性调频信号:
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+μ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(τtt0)expj2πf0t+μ(tt0)2
这样表示在物理含义是正确的,但是我们在仿真的时候,却不能直接用上面的公式来产生,这是因为 t − t 0 t-t_0 tt0在信号处理中的含义是时延,回波仅仅是线性调频信号的时延,只需要在脉冲前补充相应数量的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);%调用函数

仿真结果如下:
可以看到这个线性调频信号的波形似乎不是那么的“完美”,这是由于采样率低造成的,适当增大采样率,会使得信号看上去更加的光滑。
在这里插入图片描述

图1. 线性调频信号
下面是雷达回波的模拟,设定的目标距离为18000m,由光速及波程差可以将时间转化为时延,再由采样率可以计算出脉冲出现的采样点位置,那么在该点之前补零即可。

在这里插入图片描述

图2. R=18000m处的目标回波
下面是进行脉冲压缩的结果,可以看到,去掉暂态点后,脉压的尖峰位置和上面图中线性调频脉冲所处的波门位置是对应的。

在这里插入图片描述

图3. 目标回波的脉压结果
  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
线性调频(LFM)信号脉冲压缩雷达是一种常用的雷达信号处理方法,它通过对于发射信号进行线性调频,再通过对接收信号进行相关运算,实现对于距离和速度目标的高分辨率测量。下面将介绍如何使用MATLAB进行LFM信号脉冲压缩雷达仿真。 首先,在MATLAB中定义LFM信号的频率带宽和脉冲宽度。例如,假设频率带宽为B,脉冲宽度为T,我们可以使用以下代码定义LFM信号: t = -T/2:1/Fs:T/2; % 时间范围 f = linspace(-B/2,B/2,length(t)); % 频率范围 s = exp(1i*pi*K*t.^2); % 定义LFM信号 其中,Fs为采样率,K为斜率。 接下来,生成目标和杂波信号,并将它们与LFM信号进行卷积以模拟雷达回波信号: target = exp(1i*2*pi*tau*fR); % 定义目标信号 clutter = exp(1i*2*pi*fRmax*(t-tau/2)); % 定义杂波信号 received_signal = conv(target, s) + clutter; % 生成回波信号 然后,使用相关运算对接收信号进行脉冲压缩处理,以提取目标信息。具体步骤如下: 1. 对接收信号进行自相关运算:correlation = abs(fftshift(ifft(fft(received_signal) .* conj(fft(s))))); 2. 对自相关结果进行归一化处理:correlation = correlation / max(correlation); 最后,绘制脉冲压缩后的回波信号和相关结果图形,以可以观察到目标的距离和速度信息: figure; subplot(2,1,1); plot(abs(received_signal)); xlabel('Sample'); ylabel('Amplitude'); title('Received Signal'); subplot(2,1,2); plot(correlation); xlabel('Sample'); ylabel('Amplitude'); title('Correlation Result'); 这就是使用MATLAB进行LFM信号脉冲压缩雷达的简单仿真过程。通过对脉冲压缩后的相关结果进行分析,可以获得雷达目标的距离和速度信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

nwsuaf_huasir

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值