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


    雷达发射的线性调频信号
    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81

    主程序

    %% 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
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

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

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

    在这里插入图片描述

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

    在这里插入图片描述

    图3. 目标回波的脉压结果
  • 相关阅读:
    大数据技术之Zookeeper案例总结
    Matlab optimtool优化阵列天线的幅相激励
    跨界技术:SOCKS5代理在电商、爬虫与游戏领域的应用
    【MindSpore易点通】数据处理之Numpy数组的广播计算
    【Vue面试题十一】、Vue组件之间的通信方式都有哪些?
    GZ038 物联网应用开发赛题第9套
    RabbitMQ消息中间件
    windows安装mysql-8.0.35
    django regroup对象是外键时无法正常使用
    剑指offer面试题29 数组中出现次数超过一半的数字
  • 原文地址:https://blog.csdn.net/wzz110011/article/details/133133771