Documentation

## 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 a stationary broadband barrage jammer is added at (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).

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

```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]); clutter = phased.ConstantGammaClutter('Sensor',array,... 'PropagationSpeed',radiator.PropagationSpeed,... 'OperatingFrequency',radiator.OperatingFrequency,... 'SampleRate',fs,... 'TransmitSignalInputPort',true,... 'PRF',PRF,... 'Gamma',surfacegamma('woods',radiator.OperatingFrequency),... 'EarthModel','Flat',... 'BroadsideDepressionAngle',0,... 'MaximumRange',radiator.PropagationSpeed/(2*PRF),... 'PlatformHeight',transmitterplatform.InitialPosition(3),... 'PlatformSpeed',norm(transmitterplatform.Velocity),... 'PlatformDirection',[90;0]); target = phased.RadarTarget('MeanRCS',1,... 'Model','Nonfluctuating','OperatingFrequency',fc); targetplatform = phased.Platform('InitialPosition',[5e3; 5e3; 0],... 'Velocity',[15;15;0]); jammer = phased.BarrageJammer('ERP',1e3,'SamplesPerFrame',200); 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; clutter.SeedSource = 'Property'; clutter.Seed = 40543; jammer.SeedSource = 'Property'; jammer.Seed = 96703; 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 csig(:,:,n) = clutter(txsig(abs(txsig)>0)); % collect clutter 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 jamsig = jammer(); % generate jammer signal [~,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')```