Visualizing a signal in the range-Doppler domain can help you intuitively understand connections among targets. From a range-Doppler map, you can:
See how far away the targets are and how quickly they are approaching or receding.
Distinguish among targets moving at various speeds at various ranges, in particular:
If a transmitter platform is stationary, a range-Doppler map shows a response from stationary targets at zero Doppler.
For targets that are moving relative to the transmitter platform, the range-Doppler map shows a response at nonzero Doppler values.
You can also use the range-Doppler response in nonvisual ways. For example, you can perform peak detection in the range-Doppler domain and use the information to resolve the range-Doppler coupling of an FMCW radar system.
You can use the phased.RangeDopplerResponse
object
to compute and visualize the range-Doppler response of input data. This object
performs range processing in fast time, followed by Doppler processing in slow time.
The object configuration and syntax typically depend on the kind of radar
system.
This procedure is used typically to produce a range-Doppler response for a pulsed radar system. (In the special case of linear FM pulses, the procedure in FMCW Radar Systems is an alternative option.)
Create a phased.RangeDopplerResponse
object, setting the RangeMethod
property to
'Matched Filter'
.
Customize these characteristics, or accept default values for any of them:
Signal propagation speed
Sample rate
Length of the FFT for Doppler processing
Characteristics of the window for Doppler weighting, if any
Doppler domain output preference in terms of radial speed or Doppler shift frequency. (If you select radial speed, also specify the signal carrier frequency.)
Organize your data, x
, into a matrix. The columns
in this matrix correspond to separate, consecutive pulses.
Use plotResponse
to plot the
range-Doppler response or step
to
obtain data representing the range-Doppler response. Include
x
and matched filter coefficients in your syntax
when you call plotResponse
or step
.
For examples, see the step
reference page or
Range-Speed Response Pattern of Target.
This procedure is used typically to produce a range-Doppler response for an FMCW radar system. You can also use this procedure for a system that uses linear FM pulsed signals. In the case of pulsed signals, you typically use stretch processing to dechirp the signal.
Create a phased.RangeDopplerResponse
object, setting the RangeMethod
property to
'Dechirp'
.
Customize these characteristics, or accept default values for any of them:
Signal propagation speed
Sample rate
FM sweep slope
Whether the processor should dechirp or decimate your signal
Length of the FFT for range processing. The algorithm performs an FFT to translate the dechirped data into the beat frequency domain, which provides range information.
Characteristics of the window for range weighting, if any
Length of the FFT for Doppler processing
Characteristics of the window for Doppler weighting, if any
Doppler domain output preference in terms of radial speed or Doppler shift frequency. (If you select radial speed, also specify the signal carrier frequency.)
Organize your data, x
, into a matrix in which the
columns correspond to sweeps or pulses that are separate and
consecutive.
In the case of an FMCW waveform with a triangle sweep, the sweeps
alternate between positive and negative slopes. However, phased.RangeDopplerResponse
is designed to
process consecutive sweeps of the same slope. To apply phased.RangeDopplerResponse
for a
triangle-sweep system, use one of the following approaches:
Specify a positive SweepSlope
property value, with
x
corresponding to upsweeps only. The
true values of Doppler or speed are half of what step
returns or plotResponse
plots.
Specify a negative SweepSlope
property value, with
x
corresponding to downsweeps only. The
true values of Doppler or speed are half of what step
returns or plotResponse
plots.
Use plotResponse
to plot the
range-Doppler response or step
to
obtain data representing the range-Doppler response. Include
x
in the syntax when you call plotResponse
or step
. If your data is not already dechirped, also include
a reference signal in the syntax.
For an example, see the plotResponse
reference
page.
This example shows how to visualize the speed and range of a target in a pulsed radar system that uses a rectangular waveform.
Note: This example runs only in R2016b or later. If you are using an earlier release, replace each call to the function with the equivalent step
syntax. For example, replace myObject(x)
with step(myObject,x)
.
Place an isotropic antenna element at the global origin (0,0,0). Then, place a target with a nonfluctuating RCS of 1 square meter at (5000,5000,10), which is approximately 7 km from the transmitter. Set the operating (carrier) frequency to 10 GHz. To simulate a monostatic radar, set the InUseOutputPort
property on the transmitter to true
. Calculate the range and angle from the transmitter to the target.
antenna = phased.IsotropicAntennaElement(... 'FrequencyRange',[5e9 15e9]); transmitter = phased.Transmitter('Gain',20,'InUseOutputPort',true); fc = 10e9; target = phased.RadarTarget('Model','Nonfluctuating',... 'MeanRCS',1,'OperatingFrequency',fc); txloc = [0;0;0]; tgtloc = [5000;5000;10]; antennaplatform = phased.Platform('InitialPosition',txloc); targetplatform = phased.Platform('InitialPosition',tgtloc); [tgtrng,tgtang] = rangeangle(targetplatform.InitialPosition,... antennaplatform.InitialPosition);
Create a rectangular pulse waveform 2μs in duration with a PRF of 10 kHz. Determine the maximum unambiguous range for the given PRF. Use the radareqpow
function to determine the peak power required to detect a target. This target has an RCS of 1 square meter at the maximum unambiguous range for the transmitter operating frequency and gain. The SNR is based on a desired false-alarm rate of for a noncoherent detector.
waveform = phased.RectangularWaveform('PulseWidth',2e-6,... 'OutputFormat','Pulses','PRF',1e4,'NumPulses',1); c = physconst('LightSpeed'); maxrange = c/(2*waveform.PRF); SNR = npwgnthresh(1e-6,1,'noncoherent'); Pt = radareqpow(c/fc,maxrange,SNR,... waveform.PulseWidth,'RCS',target.MeanRCS,'Gain',transmitter.Gain);
Set the peak transmit power to the output value from radareqpow
.
transmitter.PeakPower = Pt;
Create radiator and collector objects that operate at 10 GHz. Create a free space path for the propagation of the pulse to and from the target. Then, create a receiver.
radiator = phased.Radiator(... 'PropagationSpeed',c,... 'OperatingFrequency',fc,'Sensor',antenna); channel = phased.FreeSpace(... 'PropagationSpeed',c,... 'OperatingFrequency',fc,'TwoWayPropagation',false); collector = phased.Collector(... 'PropagationSpeed',c,... 'OperatingFrequency',fc,'Sensor',antenna); receiver = phased.ReceiverPreamp('NoiseFigure',0,... 'EnableInputPort',true,'SeedSource','Property','Seed',2e3);
Propagate 25 pulses to and from the target. Collect the echoes at the receiver, and store them in a 25-column matrix named rx_puls
.
numPulses = 25; rx_puls = zeros(100,numPulses);
Simulation loop
for n = 1:numPulses
Generate waveform
wf = waveform();
Transmit waveform
[wf,txstatus] = transmitter(wf);
Radiate pulse toward the target
wf = radiator(wf,tgtang);
Propagate pulse toward the target
wf = channel(wf,txloc,tgtloc,[0;0;0],[0;0;0]);
Reflect it off the target
wf = target(wf);
Propagate the pulse back to transmitter
wf = channel(wf,tgtloc,txloc,[0;0;0],[0;0;0]);
Collect the echo
wf = collector(wf,tgtang);
Receive the target echo
rx_puls(:,n) = receiver(wf,~txstatus);
end
Create a range-Doppler response object that uses the matched filter approach. Configure this object to show radial speed rather than Doppler frequency. Use plotResponse
to plot the range versus speed.
rangedoppler = phased.RangeDopplerResponse(... 'RangeMethod','Matched Filter',... 'PropagationSpeed',c,... 'DopplerOutput','Speed','OperatingFrequency',fc); plotResponse(rangedoppler,rx_puls,getMatchedFilter(waveform))
The plot shows the stationary target at a range of approximately 7000 m.