Engee documentation
Notebook

A model of a single-position radar system using system objects

This model demonstrates the operation of a simple single-position radar system.

Description of the system model

The special feature of the model is that the radar transmitter and receiver do not contain an antenna array, so the antenna is equivalent to a simple isotropic element.

A sequence of rectangular pulses is used as a probing signal, which are amplified in the transmitter.

Then, from the output of the transmitter, the signal propagates to the target through the free space. The reflected signal is transmitted to the receiver.

The receiver amplifies the signal and also adds its own noise.

A matched filter is used as the processing unit, propagation losses are compensated by gain control.

The final stage of processing is incoherent accumulation. The scheme of the model is shown in the figure

shem_1.jpg

Digital processing consists of the following elements:

shem_2.jpg

Implementation of the blocks described above.

Validation of input parameters

In [ ]:
cd( @__DIR__ )
using Pkg; Pkg.add("DSP")
include( "initRadarParam.jl" );
paramRadar = initRadarParam();

Definition of a rectangular signal.

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
); # Порт вывода коэффициентов 

Determining the parameters of the transmitter.

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

Definition of the external channel.

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 
);

Setting up the radar.

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

Enabling noise in the channel, if noise is not equal to 1, then there is no noise in the channel.

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

Filter Definition

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

Determination of the gain change over time.

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

Definition of the pulse integrator.

In [ ]:
integrator = EngeePhased.PulseIntegrator(
    CoherentFlag = "Noncoherent", # Метод 
    NumberPulses = paramRadar.numPulseInt, # Число импульсов 
    IntegrationOverlap = 0 
);

Definition of a moving platform.

In [ ]:
platform = EngeePhased.Platform( 
    MotionModel = "Velocity", # Модель движения 
    InitialPosition = paramRadar.target1Pos, # Исходное положение 
    Velocity = paramRadar.target1Vel, # Скорость 
); #1/paramRadar.prf

Performing processing in a loop. All the objects described above are combined into one system and executed in a loop describing the operation of the system over time.

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

Displays of the integrator output in the range from 0 to 5000 m

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]:

Conclusion

We have reviewed the operation of a simple single-position radar system. The final graph of the integrator's output shows that the system has found a peak, that is, it was able to detect an object at a distance of 2000 meters. This means that this radar method is working correctly.