Документация Engee
Notebook

Моделирование сигналов

В этом примере показано, как применить базовый рабочий процесс инструментария к следующему сценарию: Предположим, что у вас есть одна изотропная антенна, работающая на частоте 4 ГГц. Предположим, что антенна расположена в начале глобальной системы координат. В точке (7000,5000,0) первоначально находится цель с не флуктуирующим радиолокационным сечением 0,5 кв. м. Цель движется с постоянным вектором скорости (-15;-10;0). Ваша антенна передает десять прямоугольных импульсов длительностью 1 мкс с частотой повторения импульсов (PRF) 5 кГц. Импульсы распространяются к цели, отражаются от нее, возвращаются к антенне и собираются ею. Антенна работает в моностатическом режиме, принимая сигнал только тогда, когда излучатель неактивен.

Моделирование генератора

Чтобы создать форму волны, используйте системный объект phased.RectangularWaveform™ и установите нужные значения свойств.

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

Моделирование антенного элемента

Для моделирования антенны используется системный объек EngeePhased.IsotropicAntennaElement. Установим диапазон частоты излучения антенны равный 1-10 ГГц. Изотропная антенна излучает энергию равномерно для азимутальных углов от -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) . Предположим, что десять прямоугольных импульсов некогерентно интегрируются в приемнике. Для определения требуемого отношения сигнал/шум (SNR) можно использовать функцию Альбершема.

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

Требуемый SNR составляет примерно 5 дБ. Предположим, что вы хотите установить пиковую мощность передачи, чтобы достичь требуемого SNR для цели на расстоянии до 15 км. Предположим, что коэффициент усиления передатчика составляет 20 дБ. Используйте уравнение радара, чтобы определить требуемую пиковую мощность передачи.

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 ГГц. Для значения свойства Sensor используйте ручку для изотропной антенны. В объекте EngeePhased.Collector установите для свойства Wavefront значение 'Plane', чтобы указать, что форма падающей на антенну волны является плоской.

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

Моделирование приемника

Для моделирования приемника используйте системный объект EngeePhased.ReceiverPreamp. В приемнике вы задаете коэффициент шума и опорную температуру, которые являются ключевыми факторами, влияющими на внутренний шум вашей системы. В этом примере коэффициент шума равен 2 дБ, а опорная температура - 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]: