wlanFieldIndices

Generate PPDU field indices

Description

example

ind = wlanFieldIndices(cfg) returns ind, a structure containing the start and stop indices of the individual component fields that comprise the baseband physical layer convergence procedure protocol data unit (PPDU) waveform.

Note

For non-high-throughput (non-HT) format, this function supports generation of field indices only for OFDM modulation.

example

ind = wlanFieldIndices(cfg,field) returns the start and stop indices for the specified field type in the rows of a matrix ind.

Examples

collapse all

Create a WLAN HE-MU-format configuration object and use it to generate an HE MU waveform with packet extension.

cfg = wlanHEMUConfig(192);
cfg.User{1}.NominalPacketPadding = 16; 
bits = [1;0;0;1];
waveform = wlanWaveformGenerator(bits,cfg);

Return and display the PPDU field indices.

ind = wlanFieldIndices(cfg);
disp(ind)
      LSTF: [1 160]
      LLTF: [161 320]
      LSIG: [321 400]
     RLSIG: [401 480]
    HESIGA: [481 640]
    HESIGB: [641 800]
     HESTF: [801 880]
     HELTF: [881 1200]
    HEData: [1201 3760]
      HEPE: [3761 3840]

Recover the information bits in the HE-SIG-A field of a WLAN HE single-user (HE-SU) waveform.

Create a WLAN HE-SU-format configuration object with default settings and use it to generate an HE-SU waveform.

cfgHE = wlanHESUConfig;
cbw = cfgHE.ChannelBandwidth;
waveform = wlanWaveformGenerator(1,cfgHE);

Obtain the WLAN field indices, which contain the HE-SIG-A field.

ind = wlanFieldIndices(cfgHE);
rxSIGA = waveform(ind.HESIGA(1):ind.HESIGA(2),:);

Perform orthogonal frequency-division multiplexing (OFDM) demodulation to extract the HE-SIG-A field.

sigaDemod = wlanHEDemodulate(rxSIGA,'HE-SIG-A',cbw);

Return the pre-HE OFDM information and extract the demodulated HE-SIG-A symbols.

preHEInfo = wlanHEOFDMInfo('HE-SIG-A',cbw);
siga = sigaDemod(preHEInfo.DataIndices,:);

Recover the HE-SIG-A information bits and other information, assuming no channel noise. Display the parity check result.

noiseVarEst = 0;
[bits,failCRC] = wlanHESIGABitRecover(siga,noiseVarEst);
disp(failCRC);
   0

Extract the very-high-throughput short training field (VHT-STF) from a VHT waveform.

Create a VHT-format configuration object for a multiple-input/multiple-output (MIMO) transmission using a 160-MHz channel bandwidth. Generate the corresponding VHT waveform.

cfg = wlanVHTConfig('MCS',8,'ChannelBandwidth','CBW160', ... 
    'NumTransmitAntennas',2,'NumSpaceTimeStreams',2);
txSig = wlanWaveformGenerator([1;0;0;1],cfg);

Determine the component PPDU field indices for the VHT format.

ind = wlanFieldIndices(cfg)
ind = struct with fields:
       LSTF: [1 1280]
       LLTF: [1281 2560]
       LSIG: [2561 3200]
    VHTSIGA: [3201 4480]
     VHTSTF: [4481 5120]
     VHTLTF: [5121 6400]
    VHTSIGB: [6401 7040]
    VHTData: [7041 8320]

The VHT PPDU waveform is comprised of eight fields, including seven preamble fields and one data field.

Extract the VHT-STF from the transmitted waveform.

stf = txSig(ind.VHTSTF(1):ind.VHTSTF(2),:);

Verify that the VHT-STF has dimension 640-by-2, corresponding to the number of samples (80 for each 20-MHz bandwidth segment) and the number of transmit antennas.

disp(size(stf))
   640     2

Generate a VHT waveform. Extract and demodulate the VHT long training field (VHT-LTF) to estimate the channel coefficients. Recover the data field by using the channel estimate and use this field to determine the number of bit errors.

Configure a VHT-format configuration object with two paths.

vht = wlanVHTConfig('NumTransmitAntennas',2,'NumSpaceTimeStreams',2);

Generate a random PSDU and create the corresponding VHT waveform.

txPSDU = randi([0 1],8*vht.PSDULength,1);
txSig = wlanWaveformGenerator(txPSDU,vht);

Pass the signal through a TGac 2x2 MIMO channel.

tgacChan = wlanTGacChannel('NumTransmitAntennas',2,'NumReceiveAntennas',2, ...
    'LargeScaleFadingEffect','Pathloss and shadowing');
rxSigNoNoise = tgacChan(txSig);

Add AWGN to the received signal. Set the noise variance for the case in which the receiver has a 9-dB noise figure.

nVar = 10^((-228.6+10*log10(290)+10*log10(80e6)+9)/10);
awgnChan = comm.AWGNChannel('NoiseMethod','Variance','Variance',nVar);
rxSig = awgnChan(rxSigNoNoise);

Determine the indices for the VHT-LTF and extract the field from the received signal.

indVHT = wlanFieldIndices(vht,'VHT-LTF');
rxLTF = rxSig(indVHT(1):indVHT(2),:);

Demodulate the VHT-LTF and estimate the channel coefficients.

dLTF = wlanVHTLTFDemodulate(rxLTF,vht);
chEst = wlanVHTLTFChannelEstimate(dLTF,vht);

Extract the VHT-Data field and recover the information bits.

indData = wlanFieldIndices(vht,'VHT-Data');
rxData = rxSig(indData(1):indData(2),:);
rxPSDU = wlanVHTDataRecover(rxData,chEst,nVar,vht);

Determine the number of bit errors.

numErrs = biterr(txPSDU,rxPSDU)
numErrs = 0

Input Arguments

collapse all

Transmission format, specified as one of these configuration objects: wlanHESUConfig, wlanHEMUConfig, wlanHERecoveryConfig, wlanHETBConfig, wlanVHTConfig, wlanHTConfig, wlanNonHTConfig, wlanDMGConfig, or wlanS1GConfig.

Example: cfg = wlanVHTConfig

PPDU field name, specified as a character vector. The valid set of values for this input depends on the transmission format you specify in the cfg input.

Transmission Format (cfg)Valid Field Name Values (field)
wlanHESUConfig, wlanHEMUConfig, wlanHERecoveryConfig, or wlanHETBConfig

'L-STF', 'L-LTF', 'L-SIG', 'RL-SIG', 'HE-SIG-A', 'HE-SIG-B', 'HE-STF', 'HE-LTF', 'HE-Data', or 'HE-PE'

wlanDMGConfig

'DMG-STF', 'DMG-CE', 'DMG-Header', and 'DMG-Data' are common for all directional multi-gigabit (DMG) physical layer (PHY) configurations.

When the TrainingLength of the wlanDMGConfig is positive, additional valid fields are 'DMG-AGC', 'DMG-AGCSubfields', 'DMG-TRN', 'DMG-TRNCE', and 'DMG-TRNSubfields'.

wlanS1GConfig

'S1G-STF', 'S1G-LTF1', and 'S1G-Data' are common for all sub-one-gigahertz (S1G) configurations.

For a 1-MHz or greater than 2-MHz short preamble configuration, additional valid fields are 'S1G-SIG' and 'S1G-LTF2N'.

For a greater than 2-MHz long preamble configuration, additional valid fields are 'S1G-SIG-A', 'S1G-DSTF', 'S1G-DLTF', and 'S1G-SIG-B'.

wlanVHTConfig

'L-STF', 'L-LTF', 'L-SIG', 'VHT-SIG-A', 'VHT-STF', 'VHT-LTF', 'VHT-SIG-B', or 'VHT-Data'

wlanHTConfig

'L-STF', 'L-LTF', 'L-SIG', 'HT-SIG', 'HT-STF', 'HT-LTF', or 'HT-Data'

wlanNonHTConfig

'L-STF', 'L-LTF', 'L-SIG', or 'NonHT-Data'

Data Types: char | string

Output Arguments

collapse all

Start and stop indices, returned as a structure matrix. The indices correspond to the start and stop indices of fields included in the baseband waveform defined by the cfg input.

If you specify the field input, the function returns ind as an N-by-2 matrix of uint32 values, consisting of the start and stop indices of the PPDU field. This table outlines the N dimension of the N-by-2 matrix that is returned based on the specific format and configuration.

FormatConfigurationind or Specific Field Dimension

non-HT

1-by-2 matrix for each field

HT

1-by-2 matrix for each field

Null data packet (NDP) mode, if the PSDULength property of wlanHTConfig object is 0Empty matrix

VHT and S1G

1-by-2 matrix for each field

NDP mode, if the APEPLength property of the wlanVHTConfig or wlanS1GConfig object is 0Empty matrix

HE(1)

1-by-2 matrix for each field

NDP mode, if the APEPLength property of the wlanHESUConfig or wlanHESUConfig object is 0Empty matrix
When a midamble is added to the HE-Data field to improve channel estimates for high-Doppler scenarios

R-by-2 matrix when you specify the field input as 'HE-Data', where R is the number of data blocks separated by midamble periods

DMG(2)

1-by-2 matrix for each field

When the TrainingLength property of wlanDMGConfig object is positive1-by-2 matrix when you specify the field input as 'DMG-AGC' or 'DMG-TRN'
'DMG-AGCSubfields' is a TrainingLength-by-2 matrix.
TrainingLength-by-2 matrix when you specify the field input as 'DMG-TRNSubfields'
(TrainingLength/4)-by-2 matrix when you specify the field input as 'DMG-TRNCE'
When the TrainingLength property of wlanDMGConfig object is 0Empty matrix when you specify the field input as 'DMG-AGC', 'DMG-TRN', 'DMG-AGCSubfields', 'DMG-TRNSubfields', or 'DMG-TRNCE'.
  1. As described in Section 27.3.11.16 of [1], you can add a midamble to the HE-Data field to improve the channel estimates for high-Doppler scenarios.

  2. For DMG, the 'DMG-AGC' field contains NTrainingLength subfields, where NTrainingLength is 0–64 subfields. The 'DMG-TRN' field contains NTrainingLength + (NTrainingLength/4) subfields. As shown in this figure, the indices for 'DMG-AGC' and 'DMG-TRN' overlap with the indices of their respective subfields, 'DMG-AGCSubfields' and 'DMG-TRNSubfields'.

Data Types: uint32 | struct

References

[1] IEEE P802.11ax™/D4.1. “Part 11: Wireless LAN Medium Access Control (MAC) and Physical Layer (PHY) Specifications. Amendment 1: Enhancements for High Efficiency WLAN.” Draft Standard for Information technology — Telecommunications and information exchange between systems. Local and metropolitan area networks — Specific requirements.

[2] IEEE Std 802.11™-2016 (Revision of IEEE Std 802.11-2012). “Part 11: Wireless LAN Medium Access Control (MAC) and Physical Layer (PHY) Specifications.” IEEE Standard for Information technology — Telecommunications and information exchange between systems. Local and metropolitan area networks — Specific requirements.

Extended Capabilities

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

Introduced in R2015b