Main Content

Range-Doppler Response

Benefits of Producing Range-Doppler Response

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.

Support for Range-Doppler Processing

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.

Pulsed Radar Systems

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.)

  1. Create a phased.RangeDopplerResponse object, setting the RangeMethod property to 'Matched Filter'.

  2. 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.)

  3. Organize your data, x, into a matrix. The columns in this matrix correspond to separate, consecutive pulses.

  4. 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.

FMCW Radar Systems

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.

  1. Create a phased.RangeDopplerResponse object, setting the RangeMethod property to 'Dechirp'.

  2. 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.)

  3. 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.

  4. 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.

Range-Speed Response Pattern of Target

This example shows how to visualize the speed and range of a target in a pulsed radar system that uses a rectangular waveform.

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 radar equation 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 $1e^{-6}$ 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');
lambda = c/target.OperatingFrequency;
maxrange = c/(2*waveform.PRF);
tau = waveform.PulseWidth;
Ts = 290;
dbterm = db2pow(SNR - 2*transmitter.Gain);
Pt = (4*pi)^3*physconst('Boltzmann')*Ts/tau/target.MeanRCS/lambda^2*maxrange^4*dbterm;

Set the peak transmit power to the value obtained from the radar equation.

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.

See Also

Related Topics