wlanHESIGBCommonBitRecover
Recover common field bits in HE-SIG-B field
Syntax
Description
[
recovers bits
,status
,cfgUpdated
] = wlanHESIGBCommonBitRecover(sym
,noiseVarEst
,cfg
)bits
, the HE-SIG-B common field bits 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 common field symbols. The cfg
input
parameterizes the transmission, which is subject to channel noise with estimated variance
noiseVarEst
.
The function also returns status
, the result of content channel
decoding, 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.
[
also enhances the demapping of orthogonal frequency-division multiplexing (OFDM) subcarriers
by using channel state information bits
,status
,cfgUpdated
] = wlanHESIGBCommonBitRecover(sym
,noiseVarEst
,csi
,cfg
)csi
.
Examples
Recover Information Bits in HE-SIG-B Common Field
Recover the information bits in the HE-SIG-B common field of a WLAN HE MU waveform.
Generate an HE MU waveform for the specified information bits and HE-MU-format configuration object.
AllocationIndex = 192;
cfgHE = wlanHEMUConfig(AllocationIndex,'SIGBCompression',false);
bits = [1;0];
waveform = wlanWaveformGenerator(bits,cfgHE);
Extract the L-SIG and HE-SIG-A portions from 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.
s = getSIGBLength(cfg); rxSIGB = waveform(double(ind.HESIGA(2))+(1:s.NumSIGBCommonFieldSamples),:);
Demodulate and decode the HE-SIG-B common field, displaying the result.
sigbDemod = wlanHEDemodulate(rxSIGB,'HE-SIG-B',cbw);
sigb = sigbDemod(info.DataIndices,:,:);
[bits,status,cfgUpdated] = wlanHESIGBCommonBitRecover(sigb,noiseVarEst,cfg);
disp(bits')
0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0
disp(status)
Success
Update HE MU Recovery Configuration Object
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
sym
— Demodulated and equalized HE-SIG-B symbols
52-by-1 complex-valued vector | 104-by-1 complex-valued vector
Demodulated and equalized HE-SIG-B symbols, specified as a complex-valued column 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.
The ChannelBandwidth
property of the
cfg
input determines the channel bandwidth.
Data Types: single
| double
Complex Number Support: Yes
noiseVarEst
— Noise variance estimate
nonnegative scalar
Noise variance estimate, specified as a nonnegative scalar.
Data Types: single
| double
cfg
— HE MU transmission parameters
wlanHERecoveryConfig
object
HE MU transmission parameters, specified as a wlanHERecoveryConfig
object.
csi
— Channel state information
real-valued column vector
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
bits
— Recovered HE-SIG-B common field bits
binary column vector | binary matrix
Recovered HE-SIG-B common field bits for each content channel of the HE-SIG-B field, returned as a binary column vector or matrix. The size of this output depends on the channel bandwidth of the transmission according to this table.
Channel Bandwidth/MHz | Size of bits |
---|---|
20 | 18-by-1 |
40 | 18-by-2 |
80 | 27-by-2 |
160 | 43-by-2 |
Data Types: int8
status
— Result of content channel decoding
character vector
Result of content channel decoding, returned as one of these values.
'Success'
– All content channels passed the cyclic redundancy check (CRC).'ContentChannel1Fail'
– Content channel 1 failed the CRC, and the number of HE-SIG-B symbols signaled in the HE-SIG-A field is less than 16.'ContentChannel2Fail'
– Content channel 2 failed the CRC, and the number of HE-SIG-B symbols signaled in the HE-SIG-A field is less than 16.'UnknownNumUsersContentChannel1'
– Content channel 1 failed the CRC, and the number of HE-SIG-B symbols signaled in the HE-SIG-B field is 16.'UnknownNumUsersContentChannel2'
– Content channel 2 failed the CRC, and the number of HE-SIG-B symbols signaled in the HE-SIG-B field is 16.'AllContentChannelCRCFail'
– All content channels failed the CRC.
If the number of HE-SIG-B symbols signaled in the HE-SIG-A field is less than 16 and any content channel fails the CRC, the HE-SIG-A field determines the length of the HE-SIG-B field. If the number of HE-SIG-B symbols signaled in the HE-SIG-A field is 16 and any content channel fails the CRC, the length of the HE-SIG-B field is undetermined.
Data Types: char
cfgUpdated
— Updated HE MU transmission parameters
wlanHERecoveryConfig
object
Updated HE MU transmission parameters recovered from the decoded HE-SIG-B field,
returned as a wlanHERecoveryConfig
object.
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 R2019bR2023b: Single precision support
This function supports single-precision values for its numeric input arguments.
See Also
Functions
wlanFieldIndices
|wlanHEDataBitRecover
|wlanHESIGABitRecover
|wlanHESIGBUserBitRecover
|wlanLSIGBitRecover
Objects
Topics
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)
Asia Pacific
- Australia (English)
- India (English)
- New Zealand (English)
- 中国
- 日本Japanese (日本語)
- 한국Korean (한국어)