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

Модель однопозиционной радиолокационной системы с применением системных объектов

Данная модель демонстрирует работу простой однопозиционной радиолокационной системы.

Описание системной модели

Особенность модели в том, что передатчик и приемник радара не содержат антенную решетку, таким образом, антенна эквивалентна простому изотропному элементу.

В качестве зондирующего сигнала используется последовательность прямоугольных импульсов, которые усиливаются в передатчике.

Далее с выхода передатчика сигнал распространяется к цели через свободное пространство. Отраженный сигнал поступает на приемник.

Приемник усиливает сигнал, а также добавляет собственные шумы.

В качестве блока обработки применяется согласованный фильтр, потери при распространении компенсируются за счет регулировки усиления.

Заключительным этапом обработки является некогерентное накопление. Схема работы модели представлена на рисунке

shem_1.jpg

Цифровая обработка состоит из следующих элементов:

shem_2.jpg

Реализация блоков описанных выше.

Валидация входных параметров

In [ ]:
cd( @__DIR__ )
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); # Рабочая частота

Включение шума в канал, если noise не равен 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 до 5000 м

In [ ]:
plot(paramRadar.rangeGates, abs.(integrator_out)*1e6,label="",
    xlabel="Дальность, м", ylabel="Мощность, мкВт",
    title="Отклик отраженного сигнала после согласованной фильтрации ",
    titlefont=font(14,"Computer Modern"),fontfamily="Compute Modern",lw=2,gridalpha=0.2)
Out[0]:

Вывод

Мы рассмотрели работу простой однопозиционной радиолокационной системы. На итоговом графике выхода интегратора видно, что система нашла пик, то есть смогла детектировать объект на расстоянии 2000 метров. Это означает, что данный метод радиолокации работает корректно.