Phase-Coded Waveforms

When to Use Phase-Coded Waveforms

Situations in which you might use a phase-coded waveform instead of another type of waveform include:

  • When a rectangular pulse cannot provide both of these characteristics:

    • Short enough pulse for good range resolution

    • Enough energy in the signal to detect the reflected echo at the receiver

  • When two or more radar systems are close to each other and you want to reduce interference among them.

  • When digital processing suggests using a waveform with a discrete set of phases. For example, a Barker-coded waveform is a bi-phase waveform.

Conversely, you might use another waveform instead of a phase-coded waveform in the following situations:

  • When you need to detect or track high-speed targets

    Phase-coded waveforms tend to perform poorly when signals have Doppler shifts.

  • When the hardware requirements for phase-coded waveforms are prohibitively expensive

How to Create Phase-Coded Waveforms

To create a phase-coded waveform, use phased.PhaseCodedWaveform. You can customize certain characteristics of the waveform, including:

  • Type of phase code

  • Number of chips

  • Chip width

  • Sample rate

  • Pulse repetition frequency (PRF)

  • Sequence index (Zadoff-Chu code only)

After you create a phased.PhaseCodedWaveform object, you can plot the waveform using the plot method of this class. You can also generate samples of the waveform using the step method.

For a full list of properties and methods, see the phased.PhaseCodedWaveform reference page.

Basic Radar Using Phase-Coded Waveform

In the example in End-to-End Radar System, you can use a phase-coded waveform in place of a rectangular waveform. To do so:

  1. Replace the definition of hwav with the following definition.

    hwav = phased.PhaseCodedWaveform('Code','Frank','NumChips',4,...
        'ChipWidth',1e-6,'PRF',5e3,'OutputFormat','Pulses',...
        'NumPulses',1);
  2. Redefine the pulse width, tau, based on the properties of the new waveform.

    tau = hwav.ChipWidth * hwav.NumChips;

For convenience, the complete code appears here. For a detailed explanation of the code, see the original example, End-to-End Radar System.

hwav = phased.PhaseCodedWaveform('Code','Frank','NumChips',4,...
    'ChipWidth',1e-6,'PRF',5e3,'OutputFormat','Pulses',...
    'NumPulses',1);

hant = phased.IsotropicAntennaElement('FrequencyRange',...
    [1e9 10e9]);

htgt = phased.RadarTarget('Model','Nonfluctuating',...
    'MeanRCS',0.5,'PropagationSpeed',physconst('LightSpeed'),...
    'OperatingFrequency',4e9);

htxplat = phased.Platform('InitialPosition',[0;0;0],...
    'Velocity',[0;0;0],'OrientationAxes',[1 0 0;0 1 0;0 0 1]);
htgtplat = phased.Platform('InitialPosition',[7000; 5000; 0],...
    'Velocity',[-15;-10;0]);

[tgtrng,tgtang] = rangeangle(htgtplat.InitialPosition,...
    htxplat.InitialPosition);

Pd = 0.9;
Pfa = 1e-6;
numpulses = 10;
SNR = albersheim(Pd,Pfa,10);

maxrange = 1.5e4;
lambda = physconst('LightSpeed')/4e9;
tau = hwav.ChipWidth * hwav.NumChips;
Pt = radareqpow(lambda,maxrange,SNR,tau,'RCS',0.5,'Gain',20);

htx = phased.Transmitter('PeakPower',50e3,'Gain',20,...
    'LossFactor',0,'InUseOutputPort',true,...
    'CoherentOnTransmit',true);

hrad = phased.Radiator('Sensor',hant,...
    'PropagationSpeed',physconst('LightSpeed'),...
    'OperatingFrequency',4e9);
hcol = phased.Collector('Sensor',hant,...
    'PropagationSpeed',physconst('LightSpeed'),...
    'Wavefront','Plane','OperatingFrequency',4e9);

hrec = phased.ReceiverPreamp('Gain',20,'NoiseFigure',2,...
    'ReferenceTemperature',290,'SampleRate',1e6,...
    'EnableInputPort',true,'SeedSource','Property','Seed',1e3);

hspace = phased.FreeSpace(...
    'PropagationSpeed',physconst('LightSpeed'),...
    'OperatingFrequency',4e9,'TwoWayPropagation',false,...
    'SampleRate',1e6);

% Time step between pulses
T = 1/hwav.PRF;
% Get antenna position
txpos = htxplat.InitialPosition;
% Allocate array for received echoes
rxsig = zeros(hwav.SampleRate*T,numpulses);

for n = 1:numpulses
    % Update the target position
    [tgtpos,tgtvel] = step(htgtplat,T);
    % Get the range and angle to the target
    [tgtrng,tgtang] = rangeangle(tgtpos,txpos);
    % Generate the pulse
    sig = step(hwav);
    % Transmit the pulse. Output transmitter status
    [sig,txstatus] = step(htx,sig);
    % Radiate the pulse toward the target
    sig = step(hrad,sig,tgtang);
    % Propagate the pulse to the target in free space
    sig = step(hspace,sig,txpos,tgtpos,[0;0;0],tgtvel);
    % Reflect the pulse off the target
    sig = step(htgt,sig);
    % Propagate the echo to the antenna in free space
    sig = step(hspace,sig,tgtpos,txpos,tgtvel,[0;0;0]);
    % Collect the echo from the incident angle at the antenna
    sig = step(hcol,sig,tgtang);
    % Receive the echo at the antenna when not transmitting
    rxsig(:,n) = step(hrec,sig,~txstatus);
end

rxsig = pulsint(rxsig,'noncoherent');
t = unigrid(0,1/hrec.SampleRate,T,'[)');
rangegates = (physconst('LightSpeed')*t)/2;
plot(rangegates,rxsig); hold on;
xlabel('Meters'); ylabel('Power');
ylim = get(gca,'YLim');
plot([tgtrng,tgtrng],[0 ylim(2)],'r');

Was this topic helpful?