Модель однопозиционной радиолокационной системы с применением системных объектов¶
Данная модель демонстрирует работу простой однопозиционной радиолокационной системы.
Описание системной модели¶
Особенность модели в том, что передатчик и приемник радара не содержат антенную решетку, таким образом, антенна эквивалентна простому изотропному элементу.
В качестве зондирующего сигнала используется последовательность прямоугольных импульсов, которые усиливаются в передатчике.
Далее с выхода передатчика сигнал распространяется к цели через свободное пространство. Отраженный сигнал поступает на приемник.
Приемник усиливает сигнал, а также добавляет собственные шумы.
В качестве блока обработки применяется согласованный фильтр, потери при распространении компенсируются за счет регулировки усиления.
Заключительным этапом обработки является некогерентное накопление. Схема работы модели представлена на рисунке
Цифровая обработка состоит из следующих элементов:
Реализация блоков описанных выше.¶
Валидация входных параметров
cd( @__DIR__ )
include( "initRadarParam.jl" );
paramRadar = initRadarParam();
Определение прямоугольного сигнала.
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
); # Порт вывода коэффициентов
Определение параметров передатчика.
transmitter = EngeePhased.Transmitter(
PeakPower = paramRadar.peakPower, # Пик мощности
Gain = paramRadar.txGain, # коэффициент усиления
LossFactor = paramRadar.lossFactor, # Коэффициент потерь
InUseOutputPort = true, # Используется выходной порт
CoherentOnTransmit = true); # Когерентный при передаче
Определение внешнего канала.
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
);
Настройка радара.
target = EngeePhased.RadarTarget(
MeanRCS = paramRadar.target1Rcs, # Среднее значение RCS
Model = "Nonfluctuating", # Модель
PropagationSpeed = paramRadar.propSpeed, # Скорость распространения
OperatingFrequency = paramRadar.fc); # Рабочая частота
Включение шума в канал, если noise не равен 1, то шум в канале отсутствует.
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) # Входной порт фазового шума
Определение фильтра
mfilter = EngeePhased.MatchedFilter(
CoefficientsSource="Property",
Coefficients = paramRadar.matchingCoeff, # Коэффициенты
SpectrumWindow = "None", # Окно спектра
GainOutputPort = false # Выходной порт усиления
);
Определение изменения коэффициента усиления во времени.
TVG = EngeePhased.TimeVaryingGain(
RangeLoss = paramRadar.rangeLoss, # Потеря дальности
ReferenceLoss = paramRadar.referenceLoss # Эталонные потери
);
Определение импульсного интегратора.
integrator = EngeePhased.PulseIntegrator(
CoherentFlag = "Noncoherent", # Метод
NumberPulses = paramRadar.numPulseInt, # Число импульсов
IntegrationOverlap = 0
);
Определение движущейся платформы.
platform = EngeePhased.Platform(
MotionModel = "Velocity", # Модель движения
InitialPosition = paramRadar.target1Pos, # Исходное положение
Velocity = paramRadar.target1Vel, # Скорость
); #1/paramRadar.prf
Выполнение обработки в цикле. Все выше описанные объекты объединяются в одну систему и выполняются цикле описывая работу системы во времени.
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 м
plot(paramRadar.rangeGates, abs.(integrator_out)*1e6,label="",
xlabel="Дальность, м", ylabel="Мощность, мкВт",
title="Отклик отраженного сигнала после согласованной фильтрации ",
titlefont=font(14,"Computer Modern"),fontfamily="Compute Modern",lw=2,gridalpha=0.2)
Вывод¶
Мы рассмотрели работу простой однопозиционной радиолокационной системы. На итоговом графике выхода интегратора видно, что система нашла пик, то есть смогла детектировать объект на расстоянии 2000 метров. Это означает, что данный метод радиолокации работает корректно.