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

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

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

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

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

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

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

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

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

shem_1.jpg

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

shem_2.jpg

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

Подключение библиотек и файлов.

using .EngeePhased, Plots;
plotlyjs();
cd( @__DIR__ )
include( "initRadarParam.jl" );
paramRadar = initRadarParam();

Определение прямоугольного сигнала.

rectangular = RectangularWaveform(
    SampleRate              = paramRadar.fs, # Символьная скорость
    Method                  = "Pulse width", # Метод
    PulseWidth              = 1/paramRadar.pulseBw, # Ширина импульса
    PRF                     = paramRadar.prf,
    FrequencyOffset         = 0, # Смещение частоты
    OutputFormat            = "Pulses", # Выходной формат
    NumPulses               = 1, # Число импульсов
    PRFOutputPort           = false, # Выходной порт PRF
    CoefficientsOutputPort  = false
    ); # Порт вывода коэффициентов

Определение параметров передатчика.

transmitter = Transmitter(
    PeakPower = paramRadar.peakPower, # Пик мощности
    Gain = paramRadar.txGain, # коэффициент усиления
    LossFactor = paramRadar.lossFactor, # Коэффициент потерь
    InUseOutputPort = true, # Используется выходной порт
    CoherentOnTransmit = true); # Когерентный при передаче

Определение внешнего канала.

free_space_1 = FreeSpaceChannel(
    InheritSampleRate = false, # Наследовать частоту дискретизации
    SampleRate = paramRadar.fs, # Частота дискретизации
    Propagationspeed = paramRadar.propSpeed, # Скорость распространения
    OperatingFrequency = paramRadar.fc, # Рабочая частота
    TwoWayPropagation = false, # Двустороннее распространение
    MaximumDistance = paramRadar.maxRange # Максимальное расстояние
);
free_space_2 = FreeSpaceChannel(
    InheritSampleRate = false,
    SampleRate              = paramRadar.fs,
    Propagationspeed = paramRadar.propSpeed,
    OperatingFrequency = paramRadar.fc,
    TwoWayPropagation = false,
    MaximumDistance = paramRadar.maxRange
);

Настройка радара.

target = RadarTarget(
    MeanRCS = paramRadar.target1Rcs, # Среднее значение RCS
    Model = "Nonfluctuating", # Модель
    PropagationSpeed = paramRadar.propSpeed, # Скорость распространения
    OperatingFrequency = paramRadar.fc); # Рабочая частота

Включение шума в канал, если nise не равен 1, то шум в канале отсутствует.

noise = 0; # Шум Вкл/Выкл

if noise == 1
print("Приемник с шумами")
receiver = ReceiverPreamp(
     Gain = paramRadar.gain, # Прирост
     LossFactor = paramRadar.lossFactor, # Коэффициент потерь
     NoiseMethod = "Noise temperature", # Шумовой метод
     NoiseFigure = 0.2, # Коэффициент шума
     ReferenceTemperature = paramRadar.referenceTemperature, # Эталонная температура
     InheritSampleRate = false, # Наследовать частоту дискретизации
     SampleRate              = paramRadar.fs, # Частота дискретизации
     EnableInputPort = true, # Входной порт управления
     PhaseNoiseInputPort = false) # Входной порт фазового шума
else
print("Приемник без шумов")
    receiver = ReceiverPreamp(
    Gain = paramRadar.gain,
    LossFactor = paramRadar.lossFactor,
    NoiseMethod = "Noise power",
    NoisePower = 0,
    InheritSampleRate = false,
    SampleRate              = paramRadar.fs,
    EnableInputPort = true,
    PhaseNoiseInputPort = false)
end
Приемник без шумов
ReceiverPreamp(20, 0.0, "Noise power", 0, 290, 5.99584916e6, 0, false, true, false)

Определение фильтра

filter = MatchedFilter(
    Coefficients = paramRadar.matchingCoeff, # Коэффициенты
    SpectrumWindow = "None", # Окно спектра
    GainOutputPort = false # Выходной порт усиления
);

Определение изменения коэффициента усиления во времени.

TVG = TimeVaryingGain(
    RangeLoss = paramRadar.rangeLoss, # Потеря дальности
    ReferenceLoss = paramRadar.referenceLoss # Эталонные потери
);

Определение импульсного интегратора.

integrator = PulseIntegrator(
    Method = "Noncoherent", # Метод
    NumPulses = paramRadar.numPulseInt, # Число импульсов
    Overlap = 0
);

Определение движущейся платформы.

platform = MotionPlatform(
    MotionModel = "Velocity", # Модель движения
    InitialPosition = paramRadar.target1Pos, # Исходное положение
    Velocity = paramRadar.target1Vel, # Скорость
    SourceOfElapsedSimulationTime = "Derive from reference input port",
    InheritSampleRate = false, # Наследовать частоту дискретизации
    SampleRate = 1/paramRadar.prf # Частота дискретизации
);

Выполнение обработки в цикле. Все выше описанные объекты объединяются в одну систему и выполняются цикле описывая работу системы во времени.

N = paramRadar.numPulseInt

for i = 1:N
    global rectangular_out     = EngeePhased.step(rectangular)
    global platform_pos, platform_vel = EngeePhased.step(platform, Ref = 1)
    global transmitter_out     , transmitter_status = EngeePhased.step(transmitter, X = rectangular_out)
    global free_space_1_out    = EngeePhased.step(free_space_1, X = transmitter_out, Pos1 = paramRadar.radar_pos, Pos2 = platform_pos, Vel1 = paramRadar.radar_vel, Vel2 = platform_vel)
    global target_out          = EngeePhased.step(target, X = free_space_1_out)
    global free_space_2_out    = EngeePhased.step(free_space_2, X = target_out, Pos1 = platform_pos, Pos2 = paramRadar.radar_pos, Vel1 = platform_vel, Vel2 = paramRadar.radar_vel)
    global receiver_out        = EngeePhased.step(receiver, X = free_space_2_out, EnableInput = [~transmitter_status[i] for i ∈ eachindex(transmitter_status)])
    global filter_out          = EngeePhased.step(filter, X = receiver_out)
    global TVG_out             = EngeePhased.step(TVG, X = filter_out)
    global integrator_out      = EngeePhased.step(integrator, X = TVG_out)
end

## Отображения выхода интегратора в диопозоне от 0 до 5000
plot(paramRadar.rangeGates, abs.(integrator_out))

interactive-scripts/images/radars_MonostaticRadar/4c04ea4e9cd1c46343621849477042a82760ac37

Вывод

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