Main Content

wlanEHTSIGCommonBitRecover

Recover common field bits in EHT-SIG field

Since R2023b

Description

example

[bits,failCRC,cfgUpdated] = wlanEHTSIGCommonBitRecover(sym,nVar,cfg) recovers bits, the EHT-SIG common field bits in an IEEE® 802.11be™ extremely high-throughput multi-user (EHT MU) OFDMA or non-OFDMA transmission.

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

The function also returns failCRC, the result of the cyclic redundancy check, and cfgUpdated, the updated transmission parameters recovered from the decoded EHT-SIG common field. If you use this syntax and the function cannot interpret the recovered bits, the function does not return an output and issues an error message.

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

example

[bits,failCRC,cfgUpdated] = wlanEHTSIGCommonBitRecover(sym,nVar,csi,cfg) also enhances the demapping of OFDM subcarriers by using channel state information csi.

example

[bits,failCRC] = wlanEHTSIGCommonBitRecover(___) returns an output without issuing an error message if the function cannot interpret the recovered bits. You can use this syntax with either input argument combination from the first two syntaxes.

Examples

collapse all

Generate EHT SU Waveform

Create a single-user EHT configuration object with a channel bandwidth of 320 MHz.

chanBW = "CBW320";
cfgEHTSU = wlanEHTMUConfig(chanBW);

Create an EHT recovery object with the same channel bandwidth.

cfg = wlanEHTRecoveryConfig(ChannelBandwidth=chanBW);

Create a sequence of data bits. Use the bits to generate a time-domain waveform for the specified configuration. Pass the waveform through an AWGN channel with a signal-to-noise ratio of 10 dB. Return the PPDU field indices.

bits = randi([0 1],8*psduLength(cfgEHTSU),1);
tx = wlanWaveformGenerator(bits,cfgEHTSU);
rx = awgn(tx,10);
ind = wlanFieldIndices(cfg);

Recover L-SIG Bits

Demodulate the L-LTF and estimate the channel. Using the demodulated symbols, estimate the noise power.

lltf = rx(ind.LLTF(1):ind.LLTF(2),:);
lltfDemod = wlanEHTDemodulate(lltf,"L-LTF",cfg);
lltfChanEst = wlanLLTFChannelEstimate(lltfDemod,chanBW);
nVar = wlanLLTFNoiseEstimate(lltfDemod);

Decode the L-SIG field and obtain the OFDM information. The recovery configuration object requires this information to obtain the L-SIG length.

lsig = rx(ind.LSIG(1):ind.LSIG(2));
lsigDemod = wlanEHTDemodulate(lsig,"L-SIG",cfg);
info = wlanEHTOFDMInfo("L-SIG",cfg);
lsigDemodData = lsigDemod(info.DataIndices,:);

Estimate the channel at the L-SIG field and equalize the L-SIG symbols.

preEHTChanEst = wlanPreEHTChannelEstimate(lsigDemod,lltfChanEst,chanBW);
lsigEq = wlanEHTEqualize(lsigDemodData,preEHTChanEst(info.DataIndices,:),nVar,cfg,"L-SIG");

Recover the L-SIG bits and set the L-SIG length of the recovery object.

[lsigBits,failCheck,lsigInfo] = wlanLSIGBitRecover(lsigEq,0);
cfg.LSIGLength = lsigInfo.Length;

Update Recovery Configuration Object with U-SIG Bits

Demodulate the U-SIG field.

usig = rx(ind.USIG(1):ind.USIG(2),:);
usigDemod = wlanEHTDemodulate(usig,"U-SIG",cfg);

Get the OFDM information that corresponds to the U-SIG field. Use this information to isolate the data subcarriers.

preEHTInfo = wlanEHTOFDMInfo("U-SIG",cfg);
usigDataSym = usigDemod(preEHTInfo.DataIndices,:);

Equalize the U-SIG data symbols.

x = wlanEHTEqualize(usigDataSym,preEHTChanEst(preEHTInfo.DataIndices,:),nVar,cfg,"U-SIG");

Recover the U-SIG bits, ensuring that the bits pass the cyclic redundancy check (CRC).

[usigBits,failCRC] = wlanUSIGBitRecover(x,nVar);
disp(failCRC)
   0   0   0   0

Update the recovery configuration object with the U-SIG bits. Display the updated object. A property value of -1 or unknown indicates an unknown or undefined property, which you can update after decoding the EHT-SIG common and user fields of the EHT SU packet.

[cfg,failInterpretation] = interpretUSIGBits(cfg,usigBits,failCRC) % This syntax does not cause an error if interpretation fails
cfg = 
  wlanEHTRecoveryConfig with properties:

                ChannelBandwidth: 'CBW320'
                      LSIGLength: 39
                 CompressionMode: 1
                       EHTSIGMCS: 0
        NumEHTSIGSymbolsSignaled: 2
                 LDPCExtraSymbol: -1
             PreFECPaddingFactor: -1
                  PEDisambiguity: -1
                   GuardInterval: -1
                      EHTLTFType: -1
                NumEHTLTFSymbols: -1
                UplinkIndication: 0
                        BSSColor: 0
                    SpatialReuse: -1
                    TXOPDuration: -1
                NumNonOFDMAUsers: -1
       NumUsersPerContentChannel: -1
         RUTotalSpaceTimeStreams: -1
                          RUSize: -1
                         RUIndex: -1
      PuncturedChannelFieldValue: 0
                           STAID: -1
                             MCS: -1
                   ChannelCoding: unknown
                     Beamforming: -1
             NumSpaceTimeStreams: -1
    SpaceTimeStreamStartingIndex: -1
                  Channelization: 1

   Read-only properties:
                        PPDUType: su
                      EHTDUPMode: 0

failInterpretation = logical
   0

Update Recovery Configuration Object with EHT-SIG Common Field Bits

Update the field indices with the new information from the U-SIG bits.

ind = wlanFieldIndices(cfg);

Demodulate the EHT-SIG field. Get the corresponding OFDM information.

ehtSig = rx(ind.EHTSIG(1):ind.EHTSIG(2),:);
ehtsigDemod = wlanEHTDemodulate(ehtSig,"EHT-SIG",cfg);
preEHTInfo = wlanEHTOFDMInfo("EHT-SIG",cfg);

Equalize the EHT-SIG data symbols.

x = wlanEHTEqualize(ehtsigDemod(preEHTInfo.DataIndices,:),preEHTChanEst(preEHTInfo.DataIndices,:), ...
    nVar,cfg,"EHT-SIG");

Recover and interpret the EHT-SIG common field bits.

[ehtsigCommonBits,failCRC,cfg] = wlanEHTSIGCommonBitRecover(x,nVar,cfg); % This syntax causes an error if interpretation fails

Update Recovery Configuration Object with EHT-SIG User Field Bits

Recover and interpret the EHT-SIG user field bits. Display the updated recovery configuration object.

[ehtsigUserBits,failCRC] = wlanEHTSIGUserBitRecover(x,nVar,cfg);
cfg = interpretEHTSIGUserBits(cfg,ehtsigUserBits,failCRC); % This syntax causes an error if interpretation fails
cfg = cfg{1};
disp(cfg)
  wlanEHTRecoveryConfig with properties:

                ChannelBandwidth: 'CBW320'
                      LSIGLength: 39
                 CompressionMode: 1
                       EHTSIGMCS: 0
        NumEHTSIGSymbolsSignaled: 2
                 LDPCExtraSymbol: 1
             PreFECPaddingFactor: 3
                  PEDisambiguity: 0
                   GuardInterval: 3.2000
                      EHTLTFType: 4
                NumEHTLTFSymbols: 1
                UplinkIndication: 0
                        BSSColor: 0
                    SpatialReuse: 0
                    TXOPDuration: -1
                NumNonOFDMAUsers: 1
       NumUsersPerContentChannel: 1
         RUTotalSpaceTimeStreams: 1
                          RUSize: 3984
                         RUIndex: 1
      PuncturedChannelFieldValue: 0
                           STAID: 0
                             MCS: 0
                   ChannelCoding: ldpc
                     Beamforming: 0
             NumSpaceTimeStreams: 1
    SpaceTimeStreamStartingIndex: 1
                  Channelization: 1

   Read-only properties:
                        PPDUType: su
                      EHTDUPMode: 0

Recover EHT-Data Field

Update the field indices with the new information from the EHT-SIG bits.

ind = wlanFieldIndices(cfg);

Demodulate the EHT-Data field and recover the bits. Verify that the recovered bits match the transmitted bits.

ehtData = rx(ind.EHTData(1):ind.EHTData(2),:);
ehtdataDemod = wlanEHTDemodulate(ehtData,"EHT-Data",cfg);
infoData = wlanEHTOFDMInfo("EHT-Data",cfg);
rxDataSym = ehtdataDemod(infoData.DataIndices,:,:);
dataBits = wlanEHTDataBitRecover(rxDataSym,nVar,cfg);
isequal(bits,dataBits)
ans = logical
   1

Create an EHT MU configuration object with a channel bandwidth of 20 MHz.

cfgEHT = wlanEHTMUConfig("CBW20");
chanBW = cfgEHT.ChannelBandwidth;

Generate a time-domain waveform for the configuration, assuming a channel with no impairments.

tx = wlanWaveformGenerator([1;0],cfgEHT);
rx = tx;
nVar = 0;

Get the WLAN field indices for the configuration.

ind = wlanFieldIndices(cfgEHT);

Create an EHT recovery configuration object with a channel bandwidth of 20 MHz.

cfg = wlanEHTRecoveryConfig(ChannelBandwidth=chanBW);

Isolate the part of the waveform that corresponds to the L-SIG field. Demodulate and decode the L-SIG field. Set the LSIGLength property of the recovery object.

rxLSIG= rx(ind.LSIG(1):ind.LSIG(2),:);
lsigDemod = wlanEHTDemodulate(rxLSIG,"EHT-SIG",cfg);
info = wlanEHTOFDMInfo("L-SIG",cfg);
lsigDemod = lsigDemod(info.DataIndices,:);
[~,~,lsigInfo] = wlanLSIGBitRecover(lsigDemod,nVar);
cfg.LSIGLength = lsigInfo.Length;

Isolate the part of the waveform that corresponds to the U-SIG field. Demodulate and decode the U-SIG field. Update the recovery object with the U-SIG bits.

rxUSIG = rx(ind.USIG(1):ind.USIG(2),:);
usigDemod = wlanEHTDemodulate(rxUSIG,"U-SIG",cfg);
usigDemod = usigDemod(info.DataIndices,:);
[usigBits,failCRC] = wlanUSIGBitRecover(usigDemod,nVar);
cfg = interpretUSIGBits(cfg,usigBits,failCRC);

Isolate the part of the waveform that corresponds to the EHT-SIG field and demodulate it.

rxEHTSIG = rx(ind.EHTSIG(1):ind.EHTSIG(2),:);
ehtsigDemod = wlanEHTDemodulate(rxEHTSIG,"EHT-SIG",cfg);

Isolate the data indices and specify channel state information.

sym = ehtsigDemod(info.DataIndices,:,:);
csi = ones(52,1);

Recover the EHT-SIG common field bits using the channel state information. Display the result of the cyclic redundancy check.

[bits,failCRC] = wlanEHTSIGCommonBitRecover(sym,nVar,csi,cfg);
disp(failCRC);
   0

Update the recovery object with the common field bits.

cfg = interpretEHTSIGCommonBits(cfg,bits,failCRC);

Recover the EHT-SIG user field bits and update the recovery object with them. Display the updated object.

[bits,failCRC,cfgUpdated] = wlanEHTSIGUserBitRecover(sym,nVar,csi,cfg);
disp(cfgUpdated{1});
  wlanEHTRecoveryConfig with properties:

                ChannelBandwidth: 'CBW20'
                      LSIGLength: 123
                 CompressionMode: 1
                       EHTSIGMCS: 0
        NumEHTSIGSymbolsSignaled: 2
                 LDPCExtraSymbol: 1
             PreFECPaddingFactor: 1
                  PEDisambiguity: 0
                   GuardInterval: 3.2000
                      EHTLTFType: 4
                NumEHTLTFSymbols: 1
                UplinkIndication: 0
                        BSSColor: 0
                    SpatialReuse: 0
                    TXOPDuration: -1
                NumNonOFDMAUsers: 1
       NumUsersPerContentChannel: 1
         RUTotalSpaceTimeStreams: 1
                          RUSize: 242
                         RUIndex: 1
      PuncturedChannelFieldValue: 0
                           STAID: 0
                             MCS: 0
                   ChannelCoding: ldpc
                     Beamforming: 0
             NumSpaceTimeStreams: 1
    SpaceTimeStreamStartingIndex: 1

   Read-only properties:
                        PPDUType: su
                      EHTDUPMode: 0

Input Arguments

collapse all

Demodulated and equalized EHT-SIG symbols, specified as a complex-valued matrix. The size of the matrix is Nsd-by-Nsym, where Nsd is the number of data subcarriers in the EHT-SIG field. Nsd depends on the PPDU type and channel bandwidth.

  • For non-OFDMA transmissions, Nsd is equal to 52 for a 20 MHz channel and 104 for all other bandwidths.

  • For OFDMA transmissions, Nsd depends on the channel bandwidth.

    Channel BandwidthNsd
    20 MHz 52
    40 MHz and 80 MHz104
    160 MHz208
    320 MHz416

Nsym is the number of EHT-SIG field symbols.

Data Types: single | double
Complex Number Support: Yes

Noise variance estimate, specified as a nonnegative scalar.

Data Types: single | double

EHT MU transmission parameters, specified as a wlanEHTRecoveryConfig object.

Channel state information, specified as a real-valued column vector of length Nsd, where Nsd is the number of data subcarriers in the EHT-SIG field.

Data Types: single | double

Output Arguments

collapse all

Recovered EHT-SIG common field bits, returned as a binary-valued matrix. The properties of this output depend on whether the transmission is non-OFDMA or OFDMA.

  • For non-OFDMA transmissions, the EHT-SIG common bit fields are defined in Table 36-36 of [1] for EHT SU and MU-MIMO, and Table 36-37 for NDP. The size of the matrix depends on the PPDU type.

    PPDU TypeSize of bits
    EHT SU20-by-1
    Sounding null data packet (NDP) 16-by-1
    MU-MIMO20-by-C
    C is the number of content channels in the transmission. It is equal to 1 for a 20 MHz channel and equal to 2 for all other bandwidths.

  • For OFDMA transmissions, the EHT-SIG common field bits are defined in Table 36-33 of [1]. The size of the matrix depends on the channel bandwidth.

    Channel BandwidthSize of bits
    20 MHz and 40 MHz36-by-C
    80 MHz45-by-C
    160 MHz73-by-C-by-L
    320 MHz109-by-C-by-L
    • C is the number of content channels in the transmission. It is equal to 1 for a 20 MHz channel and equal to 2 for all other bandwidths.

    • L is the number of 80 MHz subblocks. It is equal to 4 for a 320 MHz channel, 2 for 160 MHz, and 1 for all other bandwidths.

Data Types: int8

Cyclic redundancy check (CRC) result, returned as a logical array. The size of the array is X-by-C-by-L, where:

  • X is the number of EHT-SIG common encoding blocks. It is equal to 1 for non-OFDMA transmissions. For OFDMA transmissions, it is equal to 2 for 160 MHz and 320 MHz and 1 for all other bandwidths. For more information, see Figures 36-31, 36-32, and 36-33 of [1].

  • C is the number of content channels in the transmission. It is equal to 1 for a 20 MHz channel and equal to 2 for all other bandwidths.

  • L is the number of 80 MHz subblocks. It is equal to 4 for a 320 MHz channel, 2 for 160 MHz, and 1 for all other bandwidths.

A value of 1 or true indicates a CRC failure.

Data Types: logical

Updated EHT transmission parameters, returned as a wlanEHTRecoveryConfig object. The function updates the properties of this object in accordance with the recovered EHT-SIG common field bits.

For a non-OFDMA EHT multi-user (MU) packet, the function updates different properties of the recovery object depending on the PPDU type. If the PPDU type is EHT SU or MU-MIMO, the function updates these properties:

If the PPDU type is sounding NDP, the function updates these properties:

If the PPDU type is OFDMA, the function updates these properties:

Version History

Introduced in R2023b

expand all