Engee 文档
Notebook

雷达情景模拟

此示例演示如何将工具包的基本工作流程应用于以下场景:假设您有一个工作频率为4GHz的各向同性天线。 假设天线位于全局坐标系的原点。 在点(7000,500,0),最初有一个非波动雷达横截面为0.5sq的目标。 m.目标以恒定速度矢量(-15;-10;0)移动。 您的天线发射十个1微秒持续时间的矩形脉冲,脉冲重复率(PRF)为5kHz。 脉冲传播到目标,反射掉它,返回到天线,并被它收集。 天线工作在单稳态模式,仅在发射器不活动时接收信号。

发电机的仿真

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

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

天线元件的建模

EngeePhased系统对象用于对天线进行建模。IsotropicAntennaElement。 让我们将天线辐射的频率范围设置为1-10GHz。 各向同性天线发射能量均匀为方位角从-180到180度和仰角从-90到90度。

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

目标建模

要对目标建模,请使用EngeeRadar系统对象。RadarTarget. 目标有一个
0.5平方米的有效散射面积的非波动模型,并且入射到目标上的电磁波具有4GHz的载波频率。 反射掉目标的波以=299792458的光速传播。 让我们设置定义目标系统对象时考虑的参数。

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

天线和目标运动仿真

要模拟天线和目标的位置和移动,请使用EngeePhased。平台对象。 在这种情况下,天线是静止的,位于全局坐标系的原点。 目标最初位于(7000,500,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系统对象。发射器。 发射机仿真中的关键参数是峰值发射功率。 为了确定发射机的峰值功率,假设期望的检测概率为0.9并且虚警的最大允许概率为10^(-6)
. 假设十个矩形脉冲在接收器中不连贯地集成。 Albersham函数可用于确定所需的信噪比(SNR)。

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

所需的SNR约为5dB。 假设您希望设置峰值传输功率,以实现距离最远15公里的目标所需的SNR。 假设发射机的增益为20dB。 使用雷达方程确定所需的峰值发射功率。

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系统对象。散热器。 要对窄带信号接收器建模,请使用EngeePhased系统对象。收藏家。 要收集宽带信号,请使用EngeePhased系统对象。[医]宽幅收集器

在这个例子中,脉冲满足窄带信号的假设。 载波频率为4GHz。 要设置传感器属性,请使用各向同性天线旋钮。 在EngeePhased对象中。收集器将波前属性设置为"平面",以指示入射到天线上的波的形状是平坦的。

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

接收机仿真

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

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

对分销渠道进行建模

要对分发环境建模,请使用EngeePhased对象。自由空间。 您可以通过设置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]: