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
# A function for plotting the radar output response and threshold value
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(["Impulse # $(i)" for i in 1:num_plot],1,num_plot)
xlabel_text = [reshape(repeat([""],1,num_plot-1),1,num_plot-1) "Time, from"]
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(["Power, dBW"],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; # The speed of propagation
max_range = 8000; # maximum range
prf = prop_speed/(2*max_range) # HSI
print("New pulse repetition rate: $(round(prf*1e-3;sigdigits=5)) kHz")
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; # number of accumulation pulses
pfa = 1e-6; # the probability of a false alarm
snr_min = shnidman(0.9,pfa,num_pulse_int,2) # calculation of the SNR
print("Minimum SNR: $(round(snr_min;sigdigits=5)) dB")
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; # carrier frequency
lambda = prop_speed/fc; # wavelength
peak_power = ((4*pi)^3*noisepow(1/waveform.PulseWidth)*max_range^4*
DSP.db2pow(snr_min))/(DSP.db2pow(2*transmitter.Gain)*1*lambda^2) # calculation of peak power
print("Peak power of the transmitter: $(round(peak_power*1e-3;sigdigits=5)) kW")
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; # range resolution
pulse_bw = prop_speed/(2*range_res); # the width of the LFM signal spectrum
pulse_width = 20/pulse_bw; # pulse duration of the LFM signal
fs = 2*pulse_bw; # sampling rate
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("Peak power of the transmitter: $(round(peak_power*1e-3;sigdigits=5)) kW")
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]]; # components of the initial position of goals
tgtvel = [[0;0;0] [0;0;0] [0;0;0]]; # speed components of goals
tgtmotion = EngeePhased.Platform(InitialPosition=tgtpos,Velocity=tgtvel); # goal movement model
tgtrcs = [2.2 1.1 1.05]; # EPR goals
fc = radiator.OperatingFrequency; # carrier frequency
target = EngeePhased.RadarTarget(
Model="Swerling2", # The fluctuation model
MeanRCS=tgtrcs, # the average EPR value of the goal
OperatingFrequency=fc # carrier frequency
);
Distribution environment
Next, we'll set up a distribution channel between the radar and each target.
channel = EngeePhased.FreeSpace(
SampleRate=waveform.SampleRate, # sampling rate
TwoWayPropagation=true, # bidirectional signal propagation
OperatingFrequency=fc # carrier frequency
);
Signal synthesis
Let's set the initial value for generating noise in the receiver so that we can reproduce the same results.
release!(receiver) # resetting the internal state of an object (modification )
receiver.SeedSource = "Property"; # changing the type of noise generation model
receiver.Seed = 2024; # setting the initial state of the thermal noise generator
fast_time_grid = unigrid(0,1/fs,1/prf,"[)") # The fast time grid
slow_time_grid = (0:num_pulse_int-1)./prf; # slow time grid
# Allocating memory for the resulting data
rxpulses = zeros(ComplexF64,length(fast_time_grid),num_pulse_int);
for m = 1:num_pulse_int
# Updating the radar location and targets
sensorpos,sensorvel = sensormotion(1/prf);
tgtpos,tgtvel = tgtmotion(1/prf);
# Calculating angles based on the range from radar to targets
global tgtrng,tgtang = rangeangle(tgtpos,sensorpos);
# Simulation of signal propagation from radar to targets
pulse = waveform(); # LFM signal generator
txsig,txstatus = transmitter(pulse); # transmitting signal amplifier
txsig = radiator(txsig,tgtang); # the emitter of the generated signal on Wednesday
txsig = channel(txsig,sensorpos,tgtpos,sensorvel,tgtvel); # distribution environment
# Reflection of the signal from targets, taking into account the EPR
tgtsig = target(txsig,true);
# Reception and pre-amplification of the reflected signal
rxsig = collector(tgtsig,tgtang); # receiving antenna
rxpulses[:,m] = receiver(rxsig, .!(txstatus.>0) ); # The preamp
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, the threshold determination is performed based on the 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: $(true_range) m")
range_estimates = round.(range_gates[range_detect];sigdigits=4)
print("Range estimate: $(range_estimates) m")
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.