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

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

htgt = phased.RadarTarget('Model','Nonfluctuating',...

htxplat = phased.Platform('InitialPosition',[0;0;0],'Velocity',[0;0;0]);
htgtplat = phased.Platform('InitialPosition',[7000; 5000; 0],...

[tgtrng,tgtang] = rangeangle(htgtplat.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,...

hrad = phased.Radiator('Sensor',hant,...
hcol = phased.Collector('Sensor',hant,...

hrec = phased.ReceiverPreamp('Gain',20,'NoiseFigure',2,...

hspace = phased.FreeSpace(...

% 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);

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?