Selection of the type of probing signal in order to improve the range of the radar system
This example shows how the waveform affects the detection characteristics of a radar system. The example considers a situation where higher detection range requirements are set for the existing radar system design. Since the old design can no longer provide the desired performance, a new waveform is used. The example also shows how to simulate targets with a deviation from the course, simulate a return, and then determine the range to them.
Functions used
Pkg.add(["DSP"])
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 example "Simulation of test signals for radar приемника" A monostatic pulse radar has been developed that simulates test signals for a radar receiver to meet the following requirements:
- Minimum effective Scattering area (ESR): 1 , non - fluctuating;
- Maximum unambiguous target detection range: 5 km;
- Probability of correct overloading: 0.9;
- The probability of a false alarm (VLT): .
Download the RADAR system objects:
waveform,antenna,radiator,collector,transmitter,receiver,sensormotion = BasicMonostaticRadarExampleData();
New requirements
After the radar is deployed, we will add 2 new requirements:
- Maximum unambiguous target detection range: 5 km;
- The goal fluctuation model: "Swerling-2"
Is it possible to modify the existing design to achieve a new performance goal? To answer this question, it is necessary to recalculate the parameters that are affected by the new requirements.
The first parameter affected is the pulse repetition rate (HSI). It needs to be recalculated based on the new maximum single-digit detection range.
prop_speed = radiator.PropagationSpeed; # скорость распространения
max_range = 8000; # максимальная дальость
prf = prop_speed/(2*max_range) # ЧСИ
print("Новая частота следования импульсов: $(round(prf*1e-3;sigdigits=5)) кГц")
Compared to the 30 kHz HSI of the existing design, the new HSI has become smaller and is equal to 18.737 kHz. Therefore, the interval between pulses is longer. Please note that this is a trivial change to the radar software and is quite cheap in terms of hardware cost.
waveform.PRF = prf;
Further, since the goal is described using the Swerling-2 model, it is necessary to use the ** Shnidman equation** (instead of the Albersham equation) to calculate the required SNR to achieve the specified VPO and VLT. The Shnidman equation assumes the use of a quadratic detector with incoherent accumulation. The number of pulses to accumulate is 10.
num_pulse_int = 10; # количество импульсов накопления
pfa = 1e-6; # вероятность ложной тревоги
snr_min = shnidman(0.9,pfa,num_pulse_int,2) # расчет ОСШ
print("Минимальное ОСШ: $(round(snr_min;sigdigits=5)) дБ")
2. Select the signal type
If we had used the same rectangular waveform in the existing design, the pulse width would have remained the same, since 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 transmission power.
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)) кВт")
The peak power is about eight times higher than the previous requirement. Such an improvement in equipment is not so easy to implement for 2 reasons:
- The existing radar equipment is designed to receive a pulse with a peak power of about 5,200 watts. Although most designs leave some margin above the required power, it is unlikely that the existing system can provide eight times more power.;
- It is very expensive to replace equipment for the output of such high power. Therefore, the current design must be modified to meet the new goal by using more sophisticated signal processing techniques.
Linear frequency modulation (LFM) signal
One way to reduce power consumption is to use a signal other than a rectangular one. For example, a linear FM signal may use a longer pulse than a rectangular one. As a result, the required peak transmission power is reduced.
Let's look at the details of the configuration of the LFM signal.
The desired range resolution determines the bandwidth of the signal. For an LFM signal, the bandwidth is equal to its scan width. However, the pulse width is no longer limited by the inverse of the pulse bandwidth, so a much larger pulse width can be used. We use a pulse width that is 20 times larger and set a sampling rate that is twice the bandwidth of the pulse.
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 define the new required transmission power required to achieve the design requirements.
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)) кВт")
This power is fully consistent with the capabilities of our existing radar system. We have reached a peak capacity that can meet new requirements without modifying existing equipment.
release!(transmitter)
transmitter.PeakPower = peak_power;
3. System modeling
Now that we have identified the radar according to the design specifications, we will set up targets and the environment to simulate the entire system.
Goals
As with the above example, we assume that there are 3 goals in the free space environment. However, now the target model is the target fluctuation model - "Swerling-2". We will set the positions of the radar and targets, and the EPR targets
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 # несущая частота
);
Distribution environment
Next, we'll set up a distribution channel between the radar and each target.
channel = EngeePhased.FreeSpace(
SampleRate=waveform.SampleRate, # частота дискретизации
TwoWayPropagation=true, # двунаправленное распространение сигнала
OperatingFrequency=fc # несущая частота
);
Signal synthesis
Let's set the initial value for generating noise in the receiver so that we can reproduce the same results.
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 the detection threshold
The detection threshold is calculated using noise information, taking into account 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.
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)
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 in the case of a rectangular waveform, the received pulses are first passed through a matched filter to improve the SNR. The matched filter provides a gain during processing, which further increases the detection threshold. In addition, an additional advantage of a matched filter for a high-frequency signal is that it compresses the waveform in the time domain, so that the filtered pulse becomes much narrower, resulting in better range resolution.
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.
matchingdelay = size(matchingcoeff,1)-1;
rxpulses = buffer(rxpulses[(matchingdelay+1):end][:,:],size(rxpulses,1));
A time-varying gain is then applied to the signal in order to use a constant threshold for all ranges.
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 SNR.
rxpulses = pulsint(rxpulses,"noncoherent");
RadarPulsePlot(rxpulses,threshold,fast_time_grid,slow_time_grid,1)
After accumulation, the data is ready for the final stage of detection. From the graph above, we can see that there are no false positives.
Zeroing out the range of targets
Finally, threshold determination is performed based on accumulated pulses. The detection circuit identifies the peaks, and then converts their positions into ranges to targets.
_,range_detect = findpeaks(rxpulses,"MinPeakHeight",sqrt(threshold));
The true and estimated target ranges are as follows:
true_range = round.(tgtrng;sigdigits=4)
println("Истинная дальность: $(true_range) м")
range_estimates = round.(range_gates[range_detect];sigdigits=4)
print("Оценка дальности: $(range_estimates) м")
Please note that these range estimates are accurate based on the range resolution that can be achieved by the radar system, which in this example is 50 m.
Conclusion
In this example, we used the type of signal from the LFM to determine the range. Using this type of signal, it was possible to reduce the required peak transmission power, achieving a longer detection range (8 km) for the target fluctuation model - Swerling-2.