Main Content

Adaptive Displaced Phase Center Antenna Pulse Canceller

When to Use the Adaptive DPCA Pulse Canceller

Consider an airborne radar system that needs to suppress clutter returns and possibly jammer interference. Under any of the following conditions, you might choose an adaptive DPCA (ADPCA) pulse canceller for suppressing these effects.

  • Jamming and other interference effects are substantial. The DPCA pulse canceller is susceptible to interference because the DPCA pulse canceller does not use the received data.

  • The sample matrix inversion (SMI) algorithm is inapplicable because of computational expense or a rapidly changing environment.

The phased.ADPCAPulseCanceller object implements an ADPCA pulse canceller. This pulse canceller uses the data received from two consecutive pulses to estimate the space-time interference covariance matrix. In particular, the object lets you specify:

  • The number of training cells. The algorithm uses training cells to estimate the interference. In general, a larger number of training cells leads to a better estimate of interference.

  • The number of guard cells close to the target cells. The algorithm recognizes guard cells to prevent target returns from contaminating the estimate of the interference.

Adaptive DPCA Pulse Canceller To Reject Clutter and Interference

This example implements an adaptive DPCA pulse canceller for clutter and interference rejection. The scenario is identical to the one in DPCA Pulse Canceller to Reject Clutter except that noise equivalent to a stationary broadband barrage jammer is added at the location (3.5e3,1e3,0). The jammer has an effective radiated power of 1 kW.

To repeat the scenario for convenience, the airborne radar platform is 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 of two μs duration with a PRF of 5 kHz. The platform is moving along the array axis with a speed equal to one-half the product of the element spacing and the PRF. ADPCA pulse cancellation is applicable because vT=d/2 where

  • v indicates the speed of the platform

  • T represents the pulse repetition interval

  • d indicates the interelement spacing of the array

The target has a nonfluctuating RCS of 1 square meter and is moving with a constant velocity vector of (15,15,0).

PRF = 5e3;
fc = 4e9;
fs = 1e6;
c = physconst('LightSpeed');
antenna = phased.IsotropicAntennaElement...
    ('FrequencyRange',[8e8 5e9],'BackBaffled',true);
lambda = c/fc;
array = phased.ULA(6,'Element',antenna,'ElementSpacing',lambda/2);
waveform = phased.RectangularWaveform('PulseWidth', 2e-6,...
    'PRF',PRF,'SampleRate',fs,'NumPulses',1);
radiator = phased.Radiator('Sensor',array,...
    'PropagationSpeed',c,...
    'OperatingFrequency',fc);
collector = phased.Collector('Sensor',array,...
    'PropagationSpeed',c,...
    'OperatingFrequency',fc);
vy = (array.ElementSpacing * PRF)/2;
transmitterplatform = phased.Platform('InitialPosition',[0;0;3e3],...
    'Velocity',[0;vy;0]);
% Load simulated constant gamma clutter
load clutterdata
target = phased.RadarTarget('MeanRCS',1,...
    'Model','Nonfluctuating','OperatingFrequency',fc);
targetplatform = phased.Platform('InitialPosition',[5e3; 5e3; 0],...
    'Velocity',[15;15;0]);
% add jammer signal with 200 samples per frame and an ERP of 1000 W.
jamsig = sqrt(1000)*randn(200,1);

jammerplatform = phased.Platform(...
    'InitialPosition',[3.5e3; 1e3; 0],'Velocity',[0;0;0]);
channel = phased.FreeSpace('OperatingFrequency',fc,...
    'TwoWayPropagation',false,'SampleRate',fs);
receiver = phased.ReceiverPreamp('NoiseFigure',0,...
    'EnableInputPort',true,'SampleRate',fs,'Gain',40);
transmitter = phased.Transmitter('PeakPower',1e4,...
    'InUseOutputPort',true,'Gain',40);

Propagate the ten rectangular pulses to the target and back and collect the responses at the array. Compute clutter echoes using the constant gamma model with a gamma value corresponding to wooded terrain. Also, propagate the jamming signal from the jammer location to the airborne ULA.

NumPulses = 10;
wav = waveform();
M = fs/PRF;
N = array.NumElements;
rxsig = zeros(M,N,NumPulses);
%csig = zeros(M,N,NumPulses);
jsig = zeros(M,N,NumPulses);
fasttime = unigrid(0,1/fs,1/PRF,'[)');
rangebins = (c * fasttime)/2;
receiver.SeedSource = 'Property';
receiver.Seed = 56113;
jamloc = jammerplatform.InitialPosition;
for n = 1:NumPulses
    [txloc,txvel] = transmitterplatform(1/PRF); % move transmitter
    [tgtloc,tgtvel] = targetplatform(1/PRF); % move target
    [~,tgtang] = rangeangle(tgtloc,txloc); % get angle to target
    [txsig,txstatus] = transmitter(wav); % transmit pulse

    txsig = radiator(txsig,tgtang); % radiate pulse
    txsig = channel(txsig,txloc,tgtloc,...
       txvel,tgtvel); % propagate pulse to target
    txsig = target(txsig); % reflect off target
    txsig = channel(txsig,tgtloc,txloc,...
       tgtvel,txvel); % propagate to array
    rxsig(:,:,n) = collector(txsig,tgtang); % collect pulse
    
    [~,jamang] = rangeangle(jamloc,txloc); % angle from jammer to transmitter
    jamsig = channel(jamsig,jamloc,txloc,...
       [0;0;0],txvel); % propagate jammer signal
    jsig(:,:,n) = collector(jamsig,jamang); % collect jammer signal
    
    rxsig(:,:,n) = receiver(...
        rxsig(:,:,n) + csig(:,:,n) + jsig(:,:,n),...
        ~txstatus); % receive pulse plus clutter return plus jammer signal   
end

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

sp = radialspeed(tgtloc, targetplatform.Velocity, ...
    txloc, transmitterplatform.Velocity);
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));

Process the array responses using the nonadaptive DPCA pulse canceller. To do so, construct the DPCA object, and apply it to the received signals.

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

Plot the DPCA result with the target range marked by a vertical dashed line. Notice how the presence of the interference signal has obscured the target.

plot([tgtrng/1e3,tgtrng/1e3],[0 7e-2],'-.',rangebins/1e3,abs(y))
axis tight
xlabel('Range (km)')
ylabel('Magnitude')
title('DPCA Canceller Output with Jamming')

Apply the adaptive DPCA pulse canceller. Use 100 training cells and 4 guard cells, two on each side of the target range gate.

canceller = phased.ADPCACanceller('SensorArray',array,'PRF',PRF,...
    'PropagationSpeed',c,...
    'OperatingFrequency',fc,...
    'Direction',[0;0],'Doppler',tgtdoppler,...
    'WeightsOutputPort',true,'NumGuardCells',4,...
    'NumTrainingCells',100);
[y_adpca,w_adpca] = canceller(rxsig,tgtcell);

Plot the result with the target range marked by a vertical dashed line. Notice how the adaptive DPCA pulse canceller enables you to detect the target in the presence of the jamming signal.

plot([tgtrng/1e3,tgtrng/1e3],[0 4e-7],'-.',rangebins/1e3,abs(y_adpca))
axis tight
title('ADPCA Canceller Output with Jamming')
xlabel('Range (km)')
ylabel('Magnitude')

Examine the angle-Doppler response. Notice the presence of the clutter ridge in the angle-Doppler plane and the null at the jammer’s broadside angle for all Doppler frequencies.

angdopplerersponse = phased.AngleDopplerResponse('SensorArray',array,...
    'OperatingFrequency',fc,...
    'PropagationSpeed',c,...
    'PRF',PRF,'ElevationAngle',tgtelang);
plotResponse(angdopplerersponse,w_adpca)
title('Angle-Doppler Response with ADPCA Pulse Cancellation')
text(az2broadside(jamang(1),jamang(2)) + 10,...
    0,'\leftarrow Interference Null')