Engee 文档
Notebook

使用系统对象的单位置雷达系统的模型

该模型演示了一个简单的单位置雷达系统的操作。

系统模型的描述

该模型的特殊之处在于雷达发射器和接收器不包含天线阵列,因此天线相当于一个简单的各向同性元件。

一个矩形脉冲序列被用作探测信号,在发射机中被放大。

然后,从发射器的输出,信号通过自由空间传播到目标。 反射信号发送到接收器。

接收器放大信号并添加其自身的噪声。

采用匹配滤波器作为处理单元,通过增益控制补偿传播损耗。

加工的最后阶段是非相干积累。 模型的方案如图所示

shem_1.jpg

数字处理由以下元素组成:

shem_2.jpg

上面描述的块的实现。

输入参数的验证

In [ ]:
cd( @__DIR__ )
using Pkg; Pkg.add("DSP")
include( "initRadarParam.jl" );
paramRadar = initRadarParam();

矩形信号的定义。

In [ ]:
rectangular = EngeePhased.RectangularWaveform(
    SampleRate = paramRadar.fs, # 字符率
    DurationSpecification = "Pulse width", # 方法
    PulseWidth = 1/paramRadar.pulseBw, # 脉冲宽度
    PRF = paramRadar.prf, 
    FrequencyOffset = 0, # 频率偏移
    OutputFormat = "Pulses", # 输出格式
    NumPulses = 1, # 脉冲数
    PRFOutputPort = false, # PRF输出端口
    CoefficientsOutputPort = false
); # 系数输出端口

确定发射机的参数。

In [ ]:
transmitter = EngeePhased.Transmitter( 
    PeakPower = paramRadar.peakPower, # 峰值功率
    Gain = paramRadar.txGain, # 增益系数
    LossFactor = paramRadar.lossFactor, # 损失比率
    InUseOutputPort = true, # 正在使用输出端口
    CoherentOnTransmit = true); # 传输中的相干性

外部通道的定义。

In [ ]:
free_space_1 = EngeePhased.FreeSpace( 
    SampleRate = paramRadar.fs, # 采样率
    PropagationSpeed = paramRadar.propSpeed, # 传播的速度
    OperatingFrequency = paramRadar.fc, # 工作频率
    TwoWayPropagation = false, # 双向分配
    MaximumDistance = paramRadar.maxRange # 最大距离
);
free_space_2 = EngeePhased.FreeSpace( 
    SampleRate = paramRadar.fs, 
    PropagationSpeed = paramRadar.propSpeed, 
    OperatingFrequency = paramRadar.fc,
    TwoWayPropagation = false, 
    MaximumDistance = paramRadar.maxRange 
);

设置雷达。

In [ ]:
target = EngeePhased.RadarTarget( 
    MeanRCS = paramRadar.target1Rcs, # 平均RCS值
    Model = "Nonfluctuating", # 模型
    PropagationSpeed = paramRadar.propSpeed, # 传播的速度
    OperatingFrequency = paramRadar.fc); # 工作频率

启用信道中的噪声,如果噪声不等于1,则信道中没有噪声。

In [ ]:
noise = 1; # 开/关噪音

noise == 1 ?  print("一种带噪声的接收机")  :  print("接收器是无噪声的")  
receiver = EngeePhased.ReceiverPreamp( 
    Gain = paramRadar.gain, # 增长
    LossFactor = paramRadar.lossFactor, # 损失比率
    NoiseMethod = "Noise temperature", # 噪声方法
    NoiseFigure = 0.2, # 噪音系数
    ReferenceTemperature = noise == 1 ? paramRadar.referenceTemperature : 1e-323, # 参考温度
    SampleRate = paramRadar.fs, # 采样率
    EnableInputPort = true, # 控制输入端口
    PhaseNoiseInputPort = false) # 相位噪声输入端口
Приемник с шумами
Out[0]:
ReceiverPreamp:
    Gain=20
    LossFactor=0
    NoiseMethod=Noise temperature
    NoiseFigure=0.2
    ReferenceTemperature=290
    SampleRate=5.99584916e6
    NoisePower=1.0
    EnableInputPort=true
    PhaseNoiseInputPort=false
    SeedSource=Auto
    Seed=0

过滤器定义

In [ ]:
mfilter = EngeePhased.MatchedFilter(
    CoefficientsSource="Property",
    Coefficients = paramRadar.matchingCoeff, # 系数
    SpectrumWindow = "None", # 频谱窗口
    GainOutputPort = false # 增益输出端口
);

增益随时间变化的确定。

In [ ]:
TVG = EngeePhased.TimeVaryingGain( 
    RangeLoss = paramRadar.rangeLoss, # 失去射程
    ReferenceLoss = paramRadar.referenceLoss # 参考损失
);

脉冲积分器的定义。

In [ ]:
integrator = EngeePhased.PulseIntegrator(
    CoherentFlag = "Noncoherent", # 方法
    NumberPulses = paramRadar.numPulseInt, # 脉冲数
    IntegrationOverlap = 0 
);

动平台的定义。

In [ ]:
platform = EngeePhased.Platform( 
    MotionModel = "Velocity", # 运动模型
    InitialPosition = paramRadar.target1Pos, # 起始位置
    Velocity = paramRadar.target1Vel, # 速度
); # 1/paramRadar.prf

循环执行处理。 上面描述的所有对象被组合成一个系统,并在描述系统随时间的操作的循环中执行。

In [ ]:
N = paramRadar.numPulseInt

for i = 0:9
    rectangular_out = rectangular()
    platform_pos, platform_vel = platform(1/paramRadar.prf) 
    transmitter_out, transmitter_status = transmitter(rectangular_out)
    free_space_1_out = free_space_1(transmitter_out, paramRadar.radar_pos, platform_pos, paramRadar.radar_vel, platform_vel)
    target_out = target(free_space_1_out)
    free_space_2_out = free_space_2(target_out, platform_pos, paramRadar.radar_pos,platform_vel, paramRadar.radar_vel)
    receiver_out = receiver(free_space_2_out, [~transmitter_status[i] for i  eachindex(transmitter_status)])
    filter_out = mfilter(receiver_out)
    TVG_out = TVG(filter_out)
    global integrator_out = integrator(TVG_out)    
end

在0到5000m范围内显示积分器输出

In [ ]:
plot(paramRadar.rangeGates, abs.(integrator_out)*1e6,label="",
    xlabel="范围,m", ylabel="功率,MCW",
    title="一致滤波后的反射信号的响应 ",
    titlefont=font(14,"Computer Modern"),fontfamily="Compute Modern",lw=2,gridalpha=0.2) 
Out[0]:

结论

我们已经审查了一个简单的单位置雷达系统的操作。 积分器输出的最终图表显示系统已经找到了一个峰值,也就是说,它能够在2000米的距离处检测到一个物体。 这意味着这种雷达方法工作正常。