Main Content

wlanHETrackPilotError

Track errors using pilot subcarriers of HE waveform

Description

[y,cpe,ae] = wlanHETrackPilotError(x,chanEst,cfg,field) tracks errors using the pilot subcarriers of a high-efficiency (HE) WLAN waveform. The function tracks errors using orthogonal frequency-division multiplexing (OFDM) symbols x of the field specified in field and channel estimate chanEst. The function returns the pilot-error-tracked symbols y, common phase error cpe, and amplitude error ae. To track errors in HE single-user (HE SU) waveforms, use this syntax.

[y,cpe,ae] = wlanHETrackPilotError(x,chanEst,cfg,field,ruNumber) also specifies the resource unit (RU) number. To track errors in HE multi-user (HE MU) waveforms, use this syntax.

[y,cpe,ae] = wlanHETrackPilotError(x,chanEst,cbw,prehefield) returns HE pilot-error-tracked OFDM symbols for pre-HE fields. The pre-HE field is specified in prehefield, and the channel bandwidth is specified in chanbw.

example

[y,cpe,ae] = wlanHETrackPilotError(___,Name=Value) specifies options using one or more name-value arguments in addition to either input argument combination from the previous syntaxes.

Examples

collapse all

This example shows how to perform pilot phase and amplitude tracking on the L-SIG field of a distorted HE SU waveform.

Generate HE SU Waveform

Configure an HE SU waveform with default transmission parameters and get the nominal sample rate and field indices.

cfgHE = wlanHESUConfig;
cbw = cfgHE.ChannelBandwidth;
fs = wlanSampleRate(cfgHE);
ind = wlanFieldIndices(cfgHE);

Generate the waveform, specifying PSDU bits to transmit.

bits = [1; 0; 1; 0];
waveform = wlanWaveformGenerator(bits,cfgHE);

Impair Waveform

Model a step power amplifier droop impairment by applying a step gain change at the start of the L-SIG field.

Specify the droop gain and length.

dbGain = 1; % Droop gain in dB
linearGain = db2mag(dbGain); % Magnitude droop gain
len = double(ind.LSIG(1));

Apply the magnitude droop gain to each time-domain sample of the waveform.

numSamples = size(waveform,1);
droopPerSample = ones(numSamples,1);
droopPerSample(1:len,:) = linearGain*droopPerSample(1:len,:);
rx = droopPerSample.*waveform;

Perform Pilot Amplitude and Phase Tracking

Estimate the channel using the L-LTF.

lltf = rx(ind.LLTF(1):ind.LLTF(2),:);
lltfDemod = wlanHEDemodulate(lltf,"L-LTF",cbw);
chanEst = wlanLLTFChannelEstimate(lltfDemod,cbw);

Demodulate the L-SIG field.

lsig = rx(ind.LSIG(1):ind.LSIG(2),:);
field = "L-SIG";
x = wlanHEDemodulate(lsig,field,cbw);

Track pilot errors using the L-SIG field and display the errors.

[y,cpe,ae] = wlanHETrackPilotError(x, ...
    chanEst,cfgHE,field,TrackAmplitude=true);
disp([cpe ae])
   -0.0000   -1.0000

Input Arguments

collapse all

Received OFDM symbols, specified as a complex-valued array of size Nst-by-Nsym-by-Nr.

  • Nst is the number of active subcarriers, which comprises data and pilot subcarriers.

  • Nsym is the number of OFDM symbols.

  • Nr is the number of receive antennas.

Data Types: single | double
Complex Number Support: Yes

Channel estimates at the data and pilot subcarriers or channel estimates at the pilot subcarriers only, specified as a complex-valued array of size Nst-by-Nsts-by-Nr or Nsp-by-Nsts-by-Nr, respectively.

  • Nst is the number of occupied subcarriers.

  • Nsts is the number of space-time streams.

  • Nr is the number of receive antennas.

  • Nsp is the number of pilot subcarriers.

Data Types: single | double
Complex Number Support: Yes

HE transmission parameters, specified as one of these objects.

Field of received OFDM symbols, specified as one of these values.

  • "L-SIG" — Legacy signal field

  • "RL-SIG" — Repeated legacy signal field

  • "HE-SIG-A" — HE SIGNAL A field

  • "HE-SIG-B" — HE SIGNAL B field

  • "HE-LTF"— HE long training field

  • "HE-Data" — HE data field

Data Types: char | string

Channel bandwidth in MHz, specified as 'CBW20','CBW40','CBW80', or 'CBW160'.

Data Types: char | string

Pre-HE field of received OFDM symbols, specified as one of these values.

  • "L-SIG" — Legacy signal field

  • "RL-SIG" — Repeated legacy signal field

  • "HE-SIG-A" — HE SIGNAL A field

  • "HE-SIG-B" — HE SIGNAL B field

Data Types: char | string

RU number in HE MU transmission, specified as a positive integer. The RU number specifies the location of the RU within the channel. For example, consider an 80 MHz transmission with two 242-tone RUs and one 484-tone RU, in order of absolute frequency. For this allocation:

  • RU number 1 corresponds to the 242-tone RU in the 20 MHz subchannel at the lowest absolute frequency (size 242, index 1).

  • RU number 2 corresponds to the 242-tone RU in the 20 MHz subchannel at the next lowest absolute frequency (size 242, index 2).

  • RU number 3 corresponds to the 484-tone RU in the 40 MHz subchannel at the highest absolute frequency (size 484, index 2).

Data Types: double

Name-Value Arguments

Specify optional pairs of arguments as Name1=Value1,...,NameN=ValueN, where Name is the argument name and Value is the corresponding value. Name-value arguments must appear after other arguments, but the order of the pairs does not matter.

Before R2021a, use commas to separate each name and value, and enclose Name in quotes.

Example: TrackAmplitude=true enables pilot amplitude tracking.

Enable pilot phase tracking, specified as a numeric or logical 1 (true) or 0 (false). To estimate and correct a common phase offset across all subcarriers and receive antennas, set this property to 1 (true). Otherwise, set this property to 0 (false).

Data Types: logical

Enable pilot amplitude tracking, specified as a numeric or logical 1 (true) or 0 (false). To estimate and correct an average amplitude error across all subcarriers for each OFDM symbol and receive antenna, set this property to 1 (true). Otherwise, set this property to 0 (false).

Note

Due to the limitations of the algorithm used, disable pilot amplitude tracking when filtering a waveform through a MIMO fading channel.

Data Types: logical

Output Arguments

collapse all

Pilot-error-tracked OFDM symbols, returned as a complex-valued array of size Nst-by-Nsym-by-Nr.

  • Nst is the number of occupied subcarriers.

  • Nsym is the number of OFDM symbols.

  • Nr is the number of receive antennas.

Data Types: single | double
Complex Number Support: Yes

Common phase error, in radians, averaged over all receive antennas, returned as a real-valued row vector of length equal to the number of OFDM symbols. Each element of this vector contains the common phase error for the corresponding OFDM symbol.

Data Types: single | double

Average amplitude error, in dB, returned as a real-valued matrix of size Nsym-by-Nr.

  • Nsym is the number of OFDM symbols.

  • Nr is the number of receive antennas.

Each element of this matrix contains the amplitude error for all subcarriers with respect to the estimated received pilots for the corresponding OFDM symbol and receive antenna.

Data Types: single | double

Extended Capabilities

C/C++ Code Generation
Generate C and C++ code using MATLAB® Coder™.

Version History

Introduced in R2022a