Engee documentation
Notebook

Selecting the type of sounding signal to improve the range of the radar system

This example shows how the waveform affects the detection performance of a radar system. The example considers a situation where a higher detection range requirement is set for an existing radar system design. Since the old design can no longer provide the desired requirement, a new waveform is used. The example also shows how to model off-course targets, simulate a return, and then determine the range to them.

Functions used

In [ ]:
Pkg.add(["DSP"])
   Resolving package versions...
   Installed CUDA_Driver_jll ──── v0.10.4+0
   Installed CUDA_Runtime_jll ─── v0.15.5+0
   Installed MLDataDevices ────── v1.6.11
   Installed MPItrampoline_jll ── v5.5.2+0
   Installed NVTX ─────────────── v0.3.5
   Installed Atomix ───────────── v1.1.0
   Installed NNlib ────────────── v0.9.27
   Installed IntervalArithmetic ─ v0.22.23
   Installed CUDA ─────────────── v5.6.1
  No Changes to `~/.project/Project.toml`
  No Changes to `~/.project/Manifest.toml`
In [ ]:
using DSP
# Функция для построения выходного отклика радара и порогового значения
function RadarPulsePlot(ReceivePulse,threshold,t,tp,num_plot::Int64)
    thresh = sqrt(threshold)*ones(length(t),num_plot)
    ReceivePulse =  Float64.(DSP.db2pow.((abs.(ReceivePulse)).^2))
    ReceivePulse[ReceivePulse.==0] .= eps(0.)
    thresh .=  DSP.db2pow.(thresh.^2)
    t = repeat(t,1,num_plot) .+ tp[1:num_plot]'
    text_title = reshape(["Импульс № $(i)" for i in 1:num_plot],1,num_plot)
    xlabel_text = [reshape(repeat([""],1,num_plot-1),1,num_plot-1) "Время, с"]
    plot(t,ReceivePulse[:,1:num_plot],layout=(num_plot,1),label="",title = text_title,
        fontfamily="Computer Modern", titlefontsize=10, guidefontsize=10, tickfontsize=10,gridalpha=0.3,lw=1.2)
    plot!(t,thresh[:,1:num_plot],layout=(num_plot,1),xlabel=xlabel_text,lw=1.2,
        ylabel = repeat(["Мощность, дБВт"],1,num_plot),label="",ls=:dash) # 
end;

function BasicMonostaticRadarExampleData()
    c = 299_792_458
    waveform = EngeePhased.RectangularWaveform(PulseWidth=100/c, 
        PRF=c/1e4,OutputFormat="Pulses",NumPulses=1,SampleRate= 2c/100);
    antenna = EngeePhased.IsotropicAntennaElement(FrequencyRange=[5e9 1.5e10]);
    radiator = EngeePhased.Radiator(Sensor=antenna,
        PropagationSpeed=c,OperatingFrequency=1e10);
    collector = EngeePhased.Collector(Sensor=antenna,
        PropagationSpeed=c,Wavefront="Plane",
        OperatingFrequency=1e10);
    transmitter = EngeePhased.Transmitter(PeakPower=5226.4791642003665401716716587543,
        Gain=20,LossFactor=0, InUseOutputPort=true,CoherentOnTransmit=true);
    receiver = EngeePhased.ReceiverPreamp(Gain=20,NoiseFigure=0, 
        ReferenceTemperature=290,SampleRate=2*c/100, PhaseNoiseInputPort=false,
        EnableInputPort=true,SeedSource="Property",Seed=1000);
    sensormotion = EngeePhased.Platform(InitialPosition=[0;0;0],Velocity=[0;0;0]);

    return waveform, antenna, radiator, collector, transmitter, receiver, sensormotion
end;

1. tactical and technical characteristics

In the case study "Simulating Test Signals for a Radar Receiver", a monostatic pulse radar simulating test signals for a radar receiver is developed to meet the following requirement:

  1. Minimum effective scattering area (EDA): 1 $м^2$, non-fluctuating;
  2. Maximum range of unambiguous target detection: 5 km;
  3. Probability of Correct Targeting (VPO): 0.9;
  4. False Alarm Probability (FAP): $10^{-6}$.

Load the radar system objects:

In [ ]:
waveform,antenna,radiator,collector,transmitter,receiver,sensormotion = BasicMonostaticRadarExampleData();

New Requirements

Once the radar is deployed, we will add 2 new requirements:

  1. Maximum unambiguous target detection range: 5 kilometres;
  2. Target fluctuation model: "Swerling-2"

Can an existing design be modified to meet a new performance goal? To answer this question, it is necessary to recalculate the parameters affected by the new requirements.

The first parameter affected is the pulse repetition rate (PR). It needs to be recalculated based on the new maximum single digit detection range.

In [ ]:
prop_speed = radiator.PropagationSpeed; # скорость распространения
max_range = 8000; # максимальная дальость
prf = prop_speed/(2*max_range) # ЧСИ
print("Новая частота следования импульсов: $(round(prf*1e-3;sigdigits=5)) кГц")
Новая частота следования импульсов: 18.737 кГц

Compared to the 30 kHz PSF of the existing design, the new PSF is smaller and is 18.737 kHz. Consequently, the inter-pulse interval is longer. Note that this is a trivial change in the radar software and quite cheap in terms of hardware cost.

In [ ]:
waveform.PRF = prf;

Next, since the target is described using the Swerling-2 model, it is necessary to use the Schnidman equation (instead of the Albersham equation) to calculate the required ROS to achieve the given VPO and VLT. The Schnidman equation assumes the use of a quadratic detector with incoherent accumulation. The number of pulses for accumulation is 10.

In [ ]:
num_pulse_int = 10; # количество импульсов накопления
pfa = 1e-6; # вероятность ложной тревоги
snr_min = shnidman(0.9,pfa,num_pulse_int,2) # расчет ОСШ
print("Минимальное ОСШ: $(round(snr_min;sigdigits=5)) дБ")
Минимальное ОСШ: 6.1583 дБ

2. Selecting the signal type

If we were to use the same rectangular waveform in the existing design, the pulse width would remain the same as it is determined by the range resolution. However, our maximum range has increased from 5 km to 8 km and the target model has switched from a fluctuation-free model to a "Swerling-2" model, we need to recalculate the required peak transmit power.

In [ ]:
fc = radiator.OperatingFrequency; # несущая частота
lambda = prop_speed/fc; # длина волны
peak_power = ((4*pi)^3*noisepow(1/waveform.PulseWidth)*max_range^4*
    DSP.db2pow(snr_min))/(DSP.db2pow(2*transmitter.Gain)*1*lambda^2) # расчет пиковой мощности
print("Пиковая мощность передатчика: $(round(peak_power*1e-3;sigdigits=5)) кВт")
Пиковая мощность передатчика: 44.821 кВт

The peak power is about eight times the previous requirement. This hardware improvement is not easy to realise for 2 reasons:

  1. Existing radar equipment is designed to produce a pulse with a peak power of about 5200 watts. While most designs leave some margin above the required power, it is unlikely that the existing system can provide eight times the power;
  2. It is very expensive to replace equipment to output such high power. Consequently, the current design must be modified to meet the new target by using more sophisticated signal processing techniques.

Linear Frequency Modulated (LFM) signal

One way to reduce power consumption is to use a signal other than a rectangular signal. For example, a linear FM signal can use a longer pulse duration than a rectangular signal. As a result, the required peak transmit power is reduced.

Let's look at the details of the LFM signal configuration.

The desired range resolution determines the bandwidth of the signal. For an LFM signal, the bandwidth is equal to its sweep width. However, the pulse width is no longer limited to the inverse of the pulse bandwidth, so much larger pulse widths can be used. We use a pulse width that is 20 times larger and set a sampling rate that is twice the pulse bandwidth.

In [ ]:
range_res = 50; # разрешение по дальности
pulse_bw = prop_speed/(2*range_res); # ширина спектра ЛЧМ-сигнала
pulse_width = 20/pulse_bw; # длительность импульса ЛЧМ-сигнала
fs = 2*pulse_bw; # частота дискретизации

waveform = EngeePhased.LinearFMWaveform(
    SweepBandwidth=pulse_bw,
    PulseWidth=pulse_width,
    PRF=prf,
    SampleRate=fs
);

Now, let's determine the new required transmit power needed to achieve the design requirements.

In [ ]:
peak_power = ((4*pi)^3*noisepow(1/waveform.PulseWidth)*max_range^4*
    DSP.db2pow(snr_min))/(DSP.db2pow(2*transmitter.Gain)*1*lambda^2)
    
print("Пиковая мощность передатчика: $(round(peak_power*1e-3;sigdigits=5)) кВт")
Пиковая мощность передатчика: 2.2411 кВт

This power is well within the capabilities of our existing radar system. We have reached the peak power that can meet the new requirements without modifying the existing equipment.

In [ ]:
release!(transmitter)
transmitter.PeakPower = peak_power;

3. System modelling

Now that we have defined the radar according to the design specifications, let's set up the targets and environment to simulate the whole system.

Targets

As with the above example, we assume that there are 3 targets in the free space environment. However, the target model is now the target fluctuation model, "Swerling-2". Let's set the radar and target positions, and the EPR of the targets

In [ ]:
tgtpos = [[2024.66; 0; 0] [6518.63; 0; 0] [6845.04; 0; 0]];  # компоненты начального положения целей
tgtvel = [[0;0;0] [0;0;0] [0;0;0]]; # компоненты скорости целей
tgtmotion = EngeePhased.Platform(InitialPosition=tgtpos,Velocity=tgtvel); # модель движения целей

tgtrcs = [2.2 1.1 1.05]; # ЭПР целей
fc = radiator.OperatingFrequency; # несущая частота
target = EngeePhased.RadarTarget(
    Model="Swerling2", # модель флуктуации
    MeanRCS=tgtrcs, # среднее значение ЭПР цели
    OperatingFrequency=fc # несущая частота
);

Propagation Environment

Next, configure the propagation channel between the radar and each target.

In [ ]:
channel = EngeePhased.FreeSpace(
    SampleRate=waveform.SampleRate, # частота дискретизации
    TwoWayPropagation=true, # двунаправленное распространение сигнала
    OperatingFrequency=fc # несущая частота
);

Signal synthesis

Let's set a baseline for noise generation in the receiver so we can reproduce the same results.

In [ ]:
release!(receiver) # сброс внутреннего состояния объекта (измненеие )
receiver.SeedSource = "Property"; # изменение тип модели генерации шума
receiver.Seed = 2024; # задание начального состояния генератора тепловых шумов

fast_time_grid =  unigrid(0,1/fs,1/prf,"[)") # сетка быстрого времени
slow_time_grid = (0:num_pulse_int-1)./prf; # сетка медленного времени

# Выделение памяти для результирующих данных
rxpulses = zeros(ComplexF64,length(fast_time_grid),num_pulse_int);

for m = 1:num_pulse_int
    
    # Обновление пложения радара и целей
    sensorpos,sensorvel = sensormotion(1/prf);
    tgtpos,tgtvel = tgtmotion(1/prf);

    # Расчет углов по дальности от радара до целей  
    global tgtrng,tgtang = rangeangle(tgtpos,sensorpos);
    
    # Моделирование распространения сигнала от радара до целей
    pulse = waveform(); # генератор ЛЧМ-сигнала
    txsig,txstatus = transmitter(pulse); # усилитель передающего сигнала
    txsig = radiator(txsig,tgtang); # излучатель сгенерированного сигнала в среду
    txsig = channel(txsig,sensorpos,tgtpos,sensorvel,tgtvel); # среда распространения

    # Отражение сигнала от целей с учетом ЭПР
    tgtsig = target(txsig,true);
    
    # Прием и предварительного усиление отраженного сигнала
    rxsig = collector(tgtsig,tgtang); # приемная антенна
    rxpulses[:,m] = receiver(rxsig, .!(txstatus.>0) ); # предусилитель
end

4. Determining the range estimate

Calculation of detection threshold

The detection threshold is calculated using the noise information given the number of accumulation pulses. Note that in a loaded system, as shown in the above example, the noise bandwidth is half the sampling frequency. We plot the threshold value together with the first two pulses.

In [ ]:
noise_bw = receiver.SampleRate/2;
npower = noisepow(noise_bw,
    receiver.NoiseFigure,receiver.ReferenceTemperature);
threshold = npower * db2pow(npwgnthresh(pfa,num_pulse_int,"noncoherent"));

pulseplotnum = 2;
RadarPulsePlot(rxpulses,threshold,fast_time_grid,slow_time_grid,pulseplotnum)
Out[0]:

The figure shows that the pulses are very wide, which can lead to poor range resolution. In addition, the second and third targets are completely masked by noise.

Consistent filtering

As with the rectangular waveform, the received pulses are first passed through a matched filter to improve the RMS. The matched filter provides a processing gain that further improves the detection threshold. In addition, a further advantage of a matched filter for an LFM signal is that it compresses the waveform in the time domain so that the filtered pulse becomes much narrower, resulting in better range resolution.

In [ ]:
matchingcoeff = getMatchedFilter(waveform);
matchedfilter = EngeePhased.MatchedFilter(
    CoefficientsSource="Property",
    Coefficients=matchingcoeff,
    GainOutputPort=true
);
rxpulses, mfgain = matchedfilter(rxpulses);
threshold = threshold * DSP.db2pow(mfgain);

To compensate for the delay in the matched filter, use the buffer function.

In [ ]:
matchingdelay = size(matchingcoeff,1)-1;
rxpulses = buffer(rxpulses[(matchingdelay+1):end][:,:],size(rxpulses,1));

A time-varying gain is then applied to the signal to use a constant threshold for all ranges.

In [ ]:
range_gates = prop_speed*fast_time_grid/2; 
lambda = prop_speed/fc;

tvg = EngeePhased.TimeVaryingGain(
    RangeLoss=2*fspl(Vector(range_gates),lambda),
    ReferenceLoss=2*fspl(max_range,lambda));
rxpulses = tvg(rxpulses);

Incoherent Accumulation

Now, it is necessary to accumulate the received pulses incoherently to further improve the RMS.

In [ ]:
rxpulses = pulsint(rxpulses,"noncoherent");
RadarPulsePlot(rxpulses,threshold,fast_time_grid,slow_time_grid,1)
Out[0]:

After accumulation, the data is ready for the final stage of detection. From the above graph we can see that there are no false alarms.

Target Range Detections

Finally, threshold detection is performed on the accumulated pulses. The detection circuitry identifies the peaks and then converts their positions into target ranges.

In [ ]:
_,range_detect = findpeaks(rxpulses,"MinPeakHeight",sqrt(threshold));

The true and estimated target ranges are as follows:

In [ ]:
true_range = round.(tgtrng;sigdigits=4)
println("Истинная дальность: $(true_range) м")
Истинная дальность: [2025.0 6519.0 6845.0] м
In [ ]:
range_estimates = round.(range_gates[range_detect];sigdigits=4)
print("Оценка дальности: $(range_estimates) м")
Оценка дальности: [2025.0, 6525.0, 6850.0] м

Note that these range estimates are accurate given the range resolution that can be achieved by the radar system, which in this example is 50 metres.

Conclusion

In this example, we used an LFM signal type for range detection. By using this type of signal, we were able to reduce the required peak transmit power, achieving a longer detection range (of 8 km) for the target fluctuation model, Swerling-2.