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.