Engee documentation
Notebook

A system model of a single-position radar system with multiple targets

The model demonstrates the operation of a simple single-position radar system with multiple targets (4 by default), the coordinates of which are set in the ParamMMT.jl file.

In contrast to the example of modeling a monostatic radar with one целью in the receiving and transmitting path, it is possible to control the geometry of the antenna array, which forms a multi-lobed radiation pattern (DN).

1. Description of the model structure

Let's take a closer look at the structural diagram of the model:

  • Source (Waveform Rectangular): A sequence of rectangular pulses is used as a probing signal;
  • Transmitter: The signal is amplified in the transmitter and the bottom is formed using an antenna array;
  • Distribution Environment (Free Space): The signal propagates to the targets and back to the receiver, undergoing attenuation proportional to the distance to the targets;
  • Target (Radar Target): Reflects the incoming signal and simulates the movement of both targets;
  • Receiver Preamp: The signal reflected from the targets arrives at the receiving antenna array and is amplified by adding the receiver's own thermal noise.
  • Digital Signal processing: Digital processing consists of the following steps: BeamFormer, Matched Felter, Tunable Gain, Incoherent accumulation (Pulse Integrator);

The model's operation scheme is shown in the figure below.

shem_1.jpg

Digital processing consists of the following elements:

image.png

Based on the block diagram, we have developed the radar model shown in the figure below.

image_2.png

2. Initialization of input parameters

To initialize the input parameters of the model, we will connect the file "ParamMMT.jl". If you need to change the parameter values, then open this file and edit the necessary parameters.

In [ ]:
include("$(@__DIR__)/ParamMMT.jl");
paramRadarMT = calcParams();

Flexible configuration of the antenna array of the transmitter and receiver is possible in the model, including: element type, antenna array geometry (an example of setting antenna array parameters is shown in the figure below):

image_2.png

Additionally, it is possible to visualize the ** radiation pattern** of the antenna array (AR) using the function pattern(). Let's build it based on the geometry from the picture above.:

In [ ]:
# setting the antenna element
antenna_element = EngeePhased.IsotropicAntennaElement(FrequencyRange=[0.0 1e20], BackBaffled=false)

# designing the geometry of the antenna array (in our case, ULA is a linear equidistant antenna array)
ULA_Array = EngeePhased.ULA(
    Element=antenna_element, # initialization of the antenna element
    NumElements=4,# number of antenna elements
    ElementSpacing=paramRadarMT.lambda/2, # the distance between the antenna elements
    ArrayAxis="y", # orientation of antenna array elements,
    Taper = 1 # antenna element weight ratio
) 

# building a directional pattern
pattern(ULA_Array,paramRadarMT.fc)
Out[0]:

It can be seen from the bottom that along the y axis AR practically does not emit radiation, but it radiates best in the x-z plane.

3. Launching the model

In [ ]:
function run_model( name_model, path_to_folder ) # defining a function for running the model
    Path = path_to_folder * "/" * name_model * ".engee"
    if name_model in [m.name for m in engee.get_all_models()] # Checking the condition for loading a model into the kernel
        model = engee.open( name_model ) # Open the model
        model_output = engee.run( model, verbose=true ); # Launch the model
        engee.close( name_model, force=true ); # Close the model
    else
        model = engee.load( Path, force=true ) # Upload a model
        model_output = engee.run( model, verbose=true ); # Launch the model
        engee.close( name_model, force=true ); # Close the model
    end
    return model_output
end;
In [ ]:
out = run_model("MonostaticRadarMT", @__DIR__); # launching the model
Building...
Progress 0%
Progress 7%
Progress 16%
Progress 27%
Progress 34%
Progress 42%
Progress 49%
Progress 55%
Progress 60%
Progress 65%
Progress 70%
Progress 76%
Progress 81%
Progress 88%
Progress 95%
Progress 100%
Progress 100%

4. Reading the output data

We calculate the necessary output from the out variable (in our case "out_MR_MT"):

In [ ]:
result = (out["out_MR_MT"]).value;

5. Displaying the results

Let's build the system response at the last step of the model, obtained in the previous paragraph.:

In [ ]:
out_step_end = result[end] # reading the last step of the model
R_engee = paramRadarMT.metersPerSample .* (0:size(out_step_end, 1) - 1) .+ paramRadarMT.rangeOffset # range grid
# plotting a graph
plot(R_engee,abs.(out_step_end)*1e6,title="The output signal of the model after processing from 4 targets",label="",
    xlabel="Distance,m",ylabel="Receiver power, MCW",gridalpha=0.5,lw=2,color=:blue)
Out[0]:

Conclusion

In the example, the operation of a simple single-position radar system was considered. As a result of the radar operation, 4 targets were detected at a previously set distance (1045, 1988, 3532 and 3845 meters).

Blocks used in example