Main Content

wlanHESIGBUserBitRecover

Recover user field bits in HE-SIG-B field

Description

[bits,failCRC,cfgUpdated] = wlanHESIGBUserBitRecover(sym,noiseVarEst,cfg) recovers bits, the HE-SIG-B user field bits contained in an IEEE® 802.11ax™ high-efficiency multi-user (HE MU) transmission.

The function recovers bits from sym, the demodulated and equalized HE-SIG-B user field symbols. The cfg input parameterizes the transmission, which is subject to channel noise with estimated variance noiseVarEst.

The function also returns failCRC, the result of the cyclic redundancy check (CRC) on bits, and cfgUpdated, the updated transmission parameters recovered from the decoded HE-SIG-B field.

For more information on 802.11ax signal recovery, see the Recovery Procedure for an 802.11ax Packet example.

example

[bits,failCRC,cfgUpdated] = wlanHESIGBUserBitRecover(sym,noiseVarEst,csi,cfg) also enhances the demapping of orthogonal frequency-division multiplexing (OFDM) subcarriers by using channel state information csi.

example

Examples

collapse all

Recover the information bits in the HE-SIG-B user field of a WLAN HE MU waveform.

Generate an HE MU waveform for the specified information bits and HE-MU-format configuration object.

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

Extract the L-SIG and HE-SIG-A portions of the waveform.

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

Create an HE recovery configuration object for an HE-MU-format packet, specifying the channel bandwidth and packet format.

cbw = cfgHE.ChannelBandwidth;
cfgRecovery = wlanHERecoveryConfig('ChannelBandwidth',cbw,'PacketFormat','HE-MU');

Perform OFDM demodulation to extract the L-SIG and HE-SIG-A fields, assuming no channel noise.

noiseVarEst = 0;
info = wlanHEOFDMInfo('L-SIG',cbw);
lsigDemod = wlanHEDemodulate(rxLSIG,'L-SIG',cbw);
sigaDemod = wlanHEDemodulate(rxSIGA,'HE-SIG-A',cbw);
[~,~,lsigInfo] = wlanLSIGBitRecover(lsigDemod(info.DataIndices,:),noiseVarEst);
cfgRecovery.LSIGLength = lsigInfo.Length;
siga = wlanHESIGABitRecover(sigaDemod(info.DataIndices,:),noiseVarEst);

Update the HE recovery configuration object with the HE-SIG-A information bits.

cfg = interpretHESIGABits(cfgRecovery,siga);

Extract the HE-SIG-B field.

rxSIGB = waveform(ind.HESIGB(1):ind.HESIGB(2),:);

Demodulate and decode the HE-SIG-B user field, displaying the result.

sigbDemod = wlanHEDemodulate(rxSIGB,'HE-SIG-B',cbw);
sigb = sigbDemod(info.DataIndices,:,:);
[bits,failCRC,cfgUpdated] = wlanHESIGBUserBitRecover(sigb,noiseVarEst,cfg);
disp(bits')
   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   1
disp(failCRC)
   0

Update a WLAN HE recovery configuration object by interpreting recovered HE-SIG-A and HE-SIG-B information bits.

Generate HE MU Waveform

Create a WLAN HE MU configuration object, setting the allocation index to 0.

cfgHEMU = wlanHEMUConfig(0);

Generate a WLAN waveform and PPDU field indices for the specified configuration.

waveform = wlanWaveformGenerator(1,cfgHEMU);
ind = wlanFieldIndices(cfgHEMU);

Recover L-SIG Bits

Create a WLAN recovery configuration object, specifying an HE MU packet format and the length of the L-SIG field.

cfg = wlanHERecoveryConfig('PacketFormat','HE-MU','ChannelBandwidth','CBW20');

Decode the L-SIG field and obtain the orthogonal frequency-division multiplexing (OFDM) information. The recovery configuration object requires this information to obtain the L-SIG length.

lsig = waveform(ind.LSIG(1):ind.LSIG(2));
lsigDemod = wlanHEDemodulate(lsig,'L-SIG',cfg.ChannelBandwidth);
info = wlanHEOFDMInfo('L-SIG',cfg.ChannelBandwidth);
lsigDemod = lsigDemod(info.DataIndices,:);

Recover the L-SIG bits and related information, making sure that the bits pass the parity check, and update the recovery configuration object with the L-SIG length. For this example we assume a noiseless channel. For more realistic results you can pass the waveform through an 802.11ax™ channel model by using the wlanTGaxChannel System object™ and work with the received waveform.

csi = ones(52,1);
[lsigBits,failCheck,lsigInfo] = wlanLSIGBitRecover(lsigDemod,0,csi);
cfg.LSIGLength = lsigInfo.Length;

Update Recovery Configuration Object with HE-SIG-A Bits

Decode the HE-SIG-A field and recover the HE-SIG-A bits, ensuring that the bits pass the cyclic redundancy check (CRC).

siga = waveform(ind.HESIGA(1):ind.HESIGA(2));
sigaDemod = wlanHEDemodulate(siga,'HE-SIG-A',cfg.ChannelBandwidth);
sigaDemod = sigaDemod(info.DataIndices,:);
[sigaBits,failCRC] = wlanHESIGABitRecover(sigaDemod,0,csi);
disp(failCRC)
   0

Update the recovery configuration object with the recovered HE-SIG-A bits. Display the updated object. A property value of -1 or 'Unknown' indicates an unknown or undefined property, which can be updated after decoding the HE-SIG-B common and user fields of the HE MU packet.

[cfg,failInterpretation] = interpretHESIGABits(cfg,sigaBits)
cfg = 
  wlanHERecoveryConfig with properties:

                    PacketFormat: 'HE-MU'
                ChannelBandwidth: 'CBW20'
                      LSIGLength: 878
                 SIGBCompression: 0
                         SIGBMCS: 0
                         SIGBDCM: 0
          NumSIGBSymbolsSignaled: 10
                            STBC: 0
                 LDPCExtraSymbol: 1
             PreFECPaddingFactor: 1
                  PEDisambiguity: 0
                   GuardInterval: 3.2000
                       HELTFType: 4
                 NumHELTFSymbols: 1
                UplinkIndication: 0
                        BSSColor: 0
                    SpatialReuse: 0
                    TXOPDuration: 127
                     HighDoppler: 0
                 AllocationIndex: -1
       NumUsersPerContentChannel: -1
         RUTotalSpaceTimeStreams: -1
                          RUSize: -1
                         RUIndex: -1
                           STAID: -1
                             MCS: -1
                             DCM: -1
                   ChannelCoding: 'Unknown'
                     Beamforming: -1
             NumSpaceTimeStreams: -1
    SpaceTimeStreamStartingIndex: -1

failInterpretation = logical
   0

Update Recovery Configuration Object with HE-SIG-B Common Field Bits

Decode the HE-SIG-B common field, ensuring that all content channels pass the CRC.

len = getSIGBLength(cfg);
sigbCommon = waveform(double(ind.HESIGA(2))+(1:len.NumSIGBCommonFieldSamples),:);
sigbCommonDemod = wlanHEDemodulate(sigbCommon,'HE-SIG-B',cfgHEMU.ChannelBandwidth);
sigbCommonDemod = sigbCommonDemod(info.DataIndices);
[sigbCommonBits,status,~] = wlanHESIGBCommonBitRecover(sigbCommonDemod,0,csi,cfg);
disp(status)
Success

Update the recovery configuration object with the recovered HE-SIG-B common field bits and display the updated object. A field returned as -1 or 'Unknown' indicates an unknown or undefined property value, which can be updated after decoding the HE-SIG-B user field of the HE MU packet.

[cfg,failInterpretation] = interpretHESIGBCommonBits(cfg,sigbCommonBits,status)
cfg = 
  wlanHERecoveryConfig with properties:

                    PacketFormat: 'HE-MU'
                ChannelBandwidth: 'CBW20'
                      LSIGLength: 878
                 SIGBCompression: 0
                         SIGBMCS: 0
                         SIGBDCM: 0
          NumSIGBSymbolsSignaled: 10
                            STBC: 0
                 LDPCExtraSymbol: 1
             PreFECPaddingFactor: 1
                  PEDisambiguity: 0
                   GuardInterval: 3.2000
                       HELTFType: 4
                 NumHELTFSymbols: 1
                UplinkIndication: 0
                        BSSColor: 0
                    SpatialReuse: 0
                    TXOPDuration: 127
                     HighDoppler: 0
                 AllocationIndex: 0
       NumUsersPerContentChannel: 9
         RUTotalSpaceTimeStreams: -1
                          RUSize: -1
                         RUIndex: -1
                           STAID: -1
                             MCS: -1
                             DCM: -1
                   ChannelCoding: 'Unknown'
                     Beamforming: -1
             NumSpaceTimeStreams: -1
    SpaceTimeStreamStartingIndex: -1

failInterpretation = logical
   0

Update Recovery Configuration Object with HE-SIG-B User Field Bits

Decode the HE-SIG-B user field, ensuring that all users pass the CRC.

sigbUser = waveform(ind.HESIGB(1):ind.HESIGB(2));
sigbUserDemod = wlanHEDemodulate(sigbUser,'HE-SIG-B',cfgHEMU.ChannelBandwidth);
sigbUserDemod = sigbUserDemod(info.DataIndices,:);
[sigbUserBits,failCRC,~] = wlanHESIGBUserBitRecover(sigbUserDemod,0,csi,cfg);
disp(failCRC)
   0   0   0   0   0   0   0   0   0

Update the recovery configuration object with the recovered HE-SIG-B user field bits.

[user,failInterpretation] = interpretHESIGBUserBits(cfg,sigbUserBits,failCRC);

Display the results of interpretation and the third element of the user output.

disp(failInterpretation)
   0   0   0   0   0   0   0   0   0
disp(user{3})
  wlanHERecoveryConfig with properties:

                    PacketFormat: 'HE-MU'
                ChannelBandwidth: 'CBW20'
                      LSIGLength: 878
                 SIGBCompression: 0
                         SIGBMCS: 0
                         SIGBDCM: 0
          NumSIGBSymbolsSignaled: 10
                            STBC: 0
                 LDPCExtraSymbol: 1
             PreFECPaddingFactor: 1
                  PEDisambiguity: 0
                   GuardInterval: 3.2000
                       HELTFType: 4
                 NumHELTFSymbols: 1
                UplinkIndication: 0
                        BSSColor: 0
                    SpatialReuse: 0
                    TXOPDuration: 127
                     HighDoppler: 0
                 AllocationIndex: 0
       NumUsersPerContentChannel: 9
         RUTotalSpaceTimeStreams: 1
                          RUSize: 26
                         RUIndex: 3
                           STAID: 0
                             MCS: 0
                             DCM: 0
                   ChannelCoding: 'LDPC'
                     Beamforming: 0
             NumSpaceTimeStreams: 1
    SpaceTimeStreamStartingIndex: 1

Input Arguments

collapse all

Demodulated and equalized HE-SIG-B symbols, specified as a complex-valued vector. The length of the vector is equal to the number of active subcarriers, which depends on the channel bandwidth of the transmission.

  • If the channel bandwidth is 20 MHz, specify this argument as a 52-by-1 vector.

  • If the channel bandwidth is 40 MHz, 80 MHz, or 160 MHz, specify this argument as a 104-by-1 vector. This vector must contain the combined 20 MHz subchannel repetitions.

Data Types: single | double
Complex Number Support: Yes

Channel noise variance estimate, specified as a nonnegative scalar.

Data Types: single | double

HE MU transmission parameters, specified as a wlanHERecoveryConfig object.

Channel state information, specified as an NSD-by-1 real-valued vector, where NSD is the number of data subcarriers in the HE-SIG-B field.

Data Types: single | double

Output Arguments

collapse all

Recovered HE-SIG-B user field bits, returned as a 21-by-Nusers binary matrix, where Nusers is the number of users in the transmission. Each column of this argument contains the recovered user field bits for the corresponding user.

Data Types: int8

CRC result for each user, returned as a 1-by-Nusers logical vector, where Nusers is the number of users in the transmission. Each element of this argument represents the result of the CRC for the corresponding user. A value of 1 indicates that the user bits failed the CRC. A value of 0 indicates that the user bits passed the CRC.

Data Types: logical

Updated HE MU transmission parameters recovered from the decoded HE-SIG-B field, returned as a 1-by-Nusers cell array of wlanHERecoveryConfig objects. Nusers is the number of users in the transmission.

Note

The wlanHESIGBUserBitRecover function does not return the updated transmission parameters for users whose FailCRC result is 1.

Data Types: cell

Limitations

The wlanHESIGBUserBitRecover function returns output arguments bits, failCRC, and cfgUpdated only for users in a valid HE-SIG-B content channel. If the function cannot decode an HE-SIG-B content channel, then it does not return any output arguments for users in that content channel. For more information on allocating users across HE-SIG-B content channels in HE MU transmissions, see HE MU Transmission.

References

[1] IEEE Std 802.11™-2020 (Revision of IEEE Std 802.11-2016). “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.

[2] IEEE Std 802.11ax-2021 (Amendment to IEEE Std 802.11-2020). “Part 11: Wireless LAN Medium Access Control (MAC) and Physical Layer (PHY) Specifications. Amendment 1: Enhancements for High Efficiency WLAN.” 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™.

Version History

Introduced in R2019b

expand all