Engee 文档
Notebook

雷达场景建模

本示例展示了如何将工具包的基本工作流程应用于以下场景: 假设有一个在 4 GHz 频率下工作的各向同性天线。假设天线位于全球坐标系的原点。在点(7000,5000,0)处最初有一个雷达截面为 0.5 平方米的非波动目标。目标以恒定的速度矢量(-15;-10;0)移动。您的天线发射 10 个持续时间为 1 µs 的矩形脉冲,脉冲重复频率 (PRF) 为 5 kHz。脉冲传播到目标,在目标上反射,返回天线,并被天线收集。天线以单稳态模式工作,只有在发射器不工作时才接收信号。

发生器模型

要创建波形,请使用 EngeePhased.RectangularWaveform 系统对象并设置所需的属性值。

In [ ]:
Pkg.add(["DSP"])
In [ ]:
using DSP
waveform = EngeePhased.RectangularWaveform(PulseWidth=1e-6, 
    PRF=5e3,OutputFormat="Pulses",NumPulses=1);

天线元件建模

EngeePhased.IsotropicAntennaElement 系统对象用于天线建模。我们将天线的辐射频率范围设定为 1-10 GHz。各向同性天线在方位角 -180 至 180 度和位置角 -90 至 90 度范围内均匀地辐射能量。

In [ ]:
antenna = EngeePhased.IsotropicAntennaElement(FrequencyRange=[1e9 10e9]);

目标建模

使用 EngeeRadar.RadarTarget 系统对象为目标建模。目标的非波动 模型有效散射面积等于 0.5 平方米,入射到目标上的电磁波的载波频率为 4 千兆赫。从目标反射的波以光速传播,传播速度=299792458。让我们在定义目标的系统对象时设置所考虑的参数。

In [ ]:
target = EngeePhased.RadarTarget(Model="Nonfluctuating",MeanRCS=0.5, 
    PropagationSpeed=299792458,OperatingFrequency=4e9);

天线和目标的运动建模

使用 EngeePhased.Platform 对象来模拟天线和目标的位置和运动。在这种情况下,天线静止不动,位于全局坐标系的原点。目标最初位于 (7000,5000,0),并以恒定速度矢量 (-15,-10,0) 移动。

In [ ]:
antennaplatform = EngeePhased.Platform(InitialPosition=[0;0;0],Velocity=[0;0;0]);
targetplatform = EngeePhased.Platform(InitialPosition=[7000; 5000; 0],Velocity=[-15;-10;0]);

使用 rangeangle 函数确定天线与目标之间的距离和角度。

In [ ]:
tgtrng,tgtang = rangeangle(targetplatform.InitialPosition,
    antennaplatform.InitialPosition);

发射机建模

使用 EngeePhased.Transmitter 系统对象来模拟发射机特性。发射机建模的关键参数是峰值发射功率。要确定发射机的峰值发射功率,假定期望检测概率为 0.9,最大允许误报概率为 10^(-6) .假设在接收器中对 10 个矩形脉冲进行非相干积分。阿尔伯沙函数可用于确定所需的信噪比 (SNR)。

In [ ]:
Pd = 0.9;
Pfa = 1e-6;
numpulses = 10;
SNR = albersheim(Pd,Pfa,N = 10);

所需的信噪比约为 5 dB。假设您要设置峰值发射功率,以达到 15 千米外目标所需的信噪比。假设发射机增益为 20 dB。使用雷达方程确定所需的峰值发射功率。

In [ ]:
maxrange = 1.5e4;
B = 1.380649e-23;
c = 299_792_458
lambda = c/target.OperatingFrequency;
tau = waveform.PulseWidth;
Ts = 290;
rcs = 0.5;
Gain = 20;
dbterm = db2pow(SNR - 2*Gain);
Pt = (4*pi)^3*B*Ts/tau/rcs/lambda^2*maxrange^4*dbterm;

所需的峰值发射功率约为 45 千瓦。为确保可靠性,在对发射机建模时请使用 50 千瓦的峰值发射功率。为了保持脉冲信号的相位不变,请将CoherentOnTransmit属性设置为true。由于发射机在单静态模式(发射-接收)下运行,因此将 InUseOutputPort 属性设置为 true,以记录发射机状态。

In [ ]:
transmitter = EngeePhased.Transmitter(PeakPower=50e3,Gain=20,LossFactor=0, 
    InUseOutputPort=true,CoherentOnTransmit=true);

接收和发射天线建模

使用EngeePhased.Radiator系统对象建立波辐射模型。使用EngeePhased.Collector系统对象为窄带接收器建模。使用EngeePhased.WidebandCollector系统对象来收集宽带信号。

在本例中,脉冲满足窄带信号的假设。载波频率为 4 GHz。对于传感器属性值,使用各向同性天线的句柄。在EngeePhased.Collector对象中,将波阵面属性设置为 "平面",以表示入射到天线上的波形是平面的。

In [ ]:
radiator = EngeePhased.Radiator(Sensor=antenna,
    PropagationSpeed=c,OperatingFrequency=4e9);
collector = EngeePhased.Collector(Sensor=antenna,
    PropagationSpeed=c,Wavefront="Plane",
    OperatingFrequency=4e9);

接收器建模

要为接收器建模,请使用 EngeePhased.ReceiverPreamp 系统对象。在接收器中,您可以设置噪声系数和参考温度,它们是影响系统内部噪声的关键因素。在本例中,噪声系数为 2 dB,参考温度为 290 开尔文。为了获得可重复的结果,请为随机数发生器设置一个固定值。

In [ ]:
receiver = EngeePhased.ReceiverPreamp(Gain=20,NoiseFigure=2, 
    ReferenceTemperature=290,SampleRate=1e6, 
    EnableInputPort=true,SeedSource="Property",Seed=1000);

传播通道建模

使用 EngeePhased.FreeSpace 对象来模拟传播环境。您可以通过设置TwoWayPropagation属性来模拟单向或双向传播。在本例中,要模拟单向传播,请将此属性设置为 false

In [ ]:
channel = EngeePhased.FreeSpace(
    PropagationSpeed = c, OperatingFrequency=4e9,
    TwoWayPropagation=false, SampleRate=1e6);

实现基本雷达模型

在对所有必要的场景组件进行参数化之后,就可以生成脉冲、向目标传播和从目标接收回波。

以下代码准备了主模拟循环。脉冲之间的时间步长用下面的代码设定:

In [ ]:
T = 1/waveform.PRF;
# Положение антенны
txpos = antennaplatform.InitialPosition;
# Выделение памяти для приемного эхо-сигнала
rxsig = zeros(ComplexF64,Int(waveform.SampleRate*T),numpulses);

您可以使用以下代码执行主模拟循环:

In [ ]:
for n = 1:numpulses
    # Обновление положения цели
    tgtpos,tgtvel = targetplatform(T);
    # Вычисление дальности и угла направления на цель
    tgtrng,tgtang = rangeangle(tgtpos,txpos);
    # Формируем импульсы передающего сигнала
    sig = waveform();
    # Усиление входных импульсов сигнала в передатчике
    sig,txstatus = transmitter(sig);
    # Излучение импульсов в направлении цели
    sig = radiator(sig,tgtang);
    # Распространение излученных сигналов в среде 
    sig = channel(sig,txpos,tgtpos,[0;0;0],tgtvel);
    # Формирование отраженных импульсов от цели
    sig = target(sig);
    # Распространение отраженного сигнала от цели в среде
    sig = channel(sig,tgtpos,txpos,tgtvel,[0;0;0]);
    # Прием отраженного сигнала от цели
    sig = collector(sig,tgtang);
    # Предварительное усиление в МШУ
    rxsig[:,n] = receiver(sig,xor.(txstatus,1));
end

然后,对获得的回波进行非相干积分,计算测距矢量并绘制曲线图。图中红色垂直线代表目标的距离。

In [ ]:
int_out = pulsint(rxsig,"noncoherent")*1e6;
t = (0:1/receiver.SampleRate:T-1/receiver.SampleRate);
rangegates = t.*(c/2);
plot(rangegates./1e3,int_out,lab="")
plot!([tgtrng[1]/1e3,tgtrng[1]/1e3],[minimum(int_out)/2,maximum(int_out)*1.2],lab="")
xlabel!("Дальность, (км)")
ylabel!("Мощность, мкВт")
Out[0]: