System model of bistatic radar with two targets
In the example, consider modelling a bistatic radar system with two targets. The transmitter and receiver of the bistatic radar are located differently and move along different trajectories.
1. description of the model structure
Let's take a closer look at the functional structure of the model:
- Source (Linear FM): a continuous linear frequency modulated signal is used as the probing signal (the bandwidth is 3 MHz, which corresponds to 50 metres of range resolution);
- ** *Radar Transmitter: Amplifies the pulse and simulates the movement of the transmitter;
- *FreeSpace: The signal propagates to the targets and back to the receiver, with attenuation proportional to the distance to the target;
- ** *Radar Targets: Reflects the incident signal and simulates the movement of both targets;
- ** Radar Receiver: Receives the reflected signal from the target, adds receiver noise and simulates motion;
- Filtering (Range Doppler Processing): The processing unit uses a buffer to accumulate 64 pulses and a processor to perform matched filtering for range estimation and FFT for Doppler shift (velocity) estimation;
The schematic of the model is shown in the figure below.

Digital processing consists of the following elements:

A model of the radar is shown in the figure below.

2 Initialisation of input parameters
To initialise the input parameters of the model we connect the file "ParamBistatic.jl". If you need to change the values of parameters, open this file and edit the necessary parameters
include("$(@__DIR__)/ParamBistatic.jl")
paramBistatic = calc_param_BistaticRadar();
In the model the receiver and transmitter are separated and move on different trajectories. There are 3 models of motion: uniform, equal-accelerated and user (trajectory is defined pointwise). An example of setting the transmitter's uniform motion is shown below:

3. Running the model
function run_model( name_model, path_to_folder ) # определение функции для прогона модели
Path = path_to_folder * "/" * name_model * ".engee"
if name_model in [m.name for m in engee.get_all_models()] # Проверка условия загрузки модели в ядро
model = engee.open( name_model ) # Открыть модель
model_output = engee.run( model, verbose=true ); # Запустить модель
else
model = engee.load( Path, force=true ) # Загрузить модель
model_output = engee.run( model, verbose=true ); # Запустить модель
engee.close( name_model, force=true ); # Закрыть модель
end
return model_output
end;
out = run_model( "BistaticRadar", @__DIR__); # Запустить модель
4. Reading output data
Read the required output (in our case "out_bistatic") from the out variable:
out_bistatic_engee = zeros(ComplexF64,size(out["out_bistatic"].value[1],1),size(out["out_bistatic"].value[2],2),length(out["out_bistatic"].value))
[out_bistatic_engee[:,:,i] = collect(out["out_bistatic"].value[i]) for i in eachindex(out["out_bistatic"].value)];
5. Displaying the results
Let us plot the velocity and range response of the system obtained in the previous paragraph:
abs_out_map = abs.(out_bistatic_engee[:,:,2]).+eps(1.0)
range_doppler_map = 10log10.(abs.(abs_out_map).^2)
x_speed = range(-5000,5000;length = length(range_doppler_map[1,:]))
y_range = range(0,45;length = length(range_doppler_map[:,1]))
Plots.heatmap(x_speed, y_range, range_doppler_map,ylabel="Дальность,км ",
xlabel="Скорость км/ч", title="Карта доплеровских и временных задержек", colorbar_title="Мощность, дбВт",
color=:viridis,size = (600,400), margin = 5*Plots.mm)
Conclusion
The example examined the operation of a bistatic radar system with two targets. As a result of radar operation, a map of Doppler responses (in velocity) and time delays (range) was constructed, which was used to determine the position and velocities of two targets.