# Documentation

## Displaced Phase Center Antenna (DPCA) Pulse Canceller

### When to Use the DPCA Pulse Canceller

In a moving target indication (MTI) radar, clutter returns can make it more difficult to detect and track the targets of interest. A rudimentary way to mitigate the effects of clutter returns in such a system is to implement a displaced phase center antenna (DPCA) pulse canceller on the slow-time data.

You can implement a DPCA pulse canceller with phased.DPCACanceller. This implementation assumes that the entire array is used on transmit. On receive, the array is divided into two subarrays. The phase centers of the subarrays are separated by twice the distance the platform moves in one pulse repetition interval.

#### Applicability of DPCA Pulse Canceller

The DPCA pulse canceller is applicable when both these conditions are true:

• Clutter is stationary across pulses.

• The motion satisfies

 $vT=d/2$ (7-1)

where:

• v indicates the speed of the platform

• T represents the pulse repetition interval

• d indicates the inter-element spacing of the array

### Example: DPCA Pulse Canceller for Clutter Rejection

This example implements a DPCA pulse canceller for clutter rejection. Assume you have an airborne radar platform modeled by a six-element ULA operating at 4 GHz. The array elements are spaced at one-half the wavelength of the 4 GHz carrier frequency. The radar emits ten rectangular pulses two microseconds in duration with a PRF of 5 kHz. The platform moves along the array axis with a speed equal to one-half the product of the element spacing and the PRF. As a result, the condition in Equation 7-1 applies. The target has a nonfluctuating RCS of 1 square meter and moves with a constant velocity vector of [15;15;0]. The following MATLAB® code constructs the required System objects to simulate the signal received by the ULA.

PRF = 5e3;
fc = 4e9; fs = 1e6;
c = physconst('LightSpeed');
hant = phased.IsotropicAntennaElement...
('FrequencyRange',[8e8 5e9],'BackBaffled',true);
lambda = c/fc;
hula = phased.ULA(6,'Element',hant,'ElementSpacing',lambda/2);
hwav = phased.RectangularWaveform('PulseWidth',2e-6,...
'PRF',PRF,'SampleRate',fs,'NumPulses',1);
'PropagationSpeed',c,...
'OperatingFrequency',fc);
hcol = phased.Collector('Sensor',hula,...
'PropagationSpeed',c,...
'OperatingFrequency',fc);
vy = (hula.ElementSpacing * PRF)/2;
htxplat = phased.Platform('InitialPosition',[0;0;3e3],...
'Velocity',[0;vy;0]);
hclutter = phased.ConstantGammaClutter('Sensor',hula,...
'SampleRate',fs,...
'TransmitSignalInputPort',true,...
'PRF',PRF,...
'EarthModel','Flat',...
'PlatformHeight',htxplat.InitialPosition(3),...
'PlatformSpeed',norm(htxplat.Velocity),...
'PlatformDirection',[90;0]);
'Model','Nonfluctuating','OperatingFrequency',fc);
htgtplat = phased.Platform('InitialPosition',[5e3; 5e3; 0],...
'Velocity',[15;15;0]);
hspace = phased.FreeSpace('OperatingFrequency',fc,...
'TwoWayPropagation',false,'SampleRate',fs);
'EnableInputPort',true,'SampleRate',fs,'Gain',40);
htx = phased.Transmitter('PeakPower',1e4,...
'InUseOutputPort',true,'Gain',40);

Propagate the ten rectangular pulses to and from the target, and collect the responses at the array. Also, compute clutter echoes using the constant gamma model with a gamma value corresponding to wooded terrain.

NumPulses = 10;
wav = step(hwav);
M = fs/PRF;
N = hula.NumElements;
rxsig = zeros(M,N,NumPulses);
csig = zeros(M,N,NumPulses);
fasttime = unigrid(0,1/fs,1/PRF,'[)');
rangebins = (c * fasttime)/2;
hclutter.SeedSource = 'Property';
hclutter.Seed = 5;

for n = 1:NumPulses
[txloc,txvel] = step(htxplat,1/PRF); % move transmitter
[tgtloc,tgtvel] = step(htgtplat,1/PRF); % move target
[~,tgtang] = rangeangle(tgtloc,txloc); % get angle to target
[txsig1,txstatus] = step(htx,wav);  % transmit pulse
csig(:,:,n) = step(hclutter,txsig1(abs(txsig1)>0)); % collect clutter
txsig = step(hspace,txsig,txloc,tgtloc,...
txvel,tgtvel); % propagate to target
txsig = step(htgt,txsig);  % reflect off target
txsig = step(hspace,txsig,tgtloc,txloc,...
tgtvel,txvel); % propagate to array
rxsig(:,:,n) = step(hcol,txsig,tgtang); % collect pulse
rxsig(:,:,n) = step(hrx,rxsig(:,:,n) + csig(:,:,n),...
~txstatus); % receive pulse plus clutter return
end

Determine the target's range, range gate, and two-way Doppler shift.

tgtdoppler = 2*speed2dop(sp,lambda);
tgtLocation = global2localcoord(tgtloc,'rs',txloc);
tgtazang = tgtLocation(1);
tgtelang = tgtLocation(2);
tgtrng = tgtLocation(3);
tgtcell = val2ind(tgtrng,c/(2 * fs));

Use noncoherent pulse integration to visualize the signal received by the ULA for the first of the ten pulses. Mark the target's range gate with a vertical dashed line.

firstpulse = pulsint(rxsig(:,:,1),'noncoherent');
figure;
plot([tgtrng tgtrng],[0 0.1],'-.',rangebins,firstpulse);
title('Noncoherent Integration of 1st Pulse at the ULA');
xlabel('Range (m)'); ylabel('Magnitude');

The large-magnitude clutter returns obscure the presence of the target. Apply the DPCA pulse canceller to reject the clutter.

hstap = phased.DPCACanceller('SensorArray',hula,'PRF',PRF,...
'PropagationSpeed',c,...
'OperatingFrequency',fc,...
'Direction',[0;0],'Doppler',tgtdoppler,...
'WeightsOutputPort',true);
[y,w] = step(hstap,rxsig,tgtcell);

Plot the result of applying the DPCA pulse canceller. Mark the target range gate with a vertical dashed line.

figure;
plot([tgtrng,tgtrng],[0 3.5e-5],'-.',rangebins,abs(y));
title('DPCA Canceller Output');
xlabel('Range (m)'), ylabel('Magnitude');

The DPCA pulse canceller has significantly rejected the clutter. As a result, the target is visible at the expected range gate.