wlanEHTSIGUserBitRecover
Syntax
Description
[
recovers bits
,failCRC
,cfgUpdated
] = wlanEHTSIGUserBitRecover(sym
,nVar
,cfg
)bits
, the EHT-SIG user 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 user 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.
Examples
Recover EHT-SIG Field Bits with Channel State Information
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
Recover EHT-Data Field from EHT SU Transmission
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
Input Arguments
sym
— Demodulated and equalized EHT-SIG symbols
complex-valued matrix
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 Bandwidth Nsd 20 MHz 52 40 MHz and 80 MHz 104 160 MHz 208 320 MHz 416
Nsym is the number of EHT-SIG field symbols.
Data Types: single
| double
Complex Number Support: Yes
nVar
— Noise variance estimate
nonnegative scalar
Noise variance estimate, specified as a nonnegative scalar.
Data Types: single
| double
cfg
— EHT MU transmission parameters
wlanEHTRecoveryConfig
object
EHT MU transmission parameters, specified as a wlanEHTRecoveryConfig
object.
csi
— Channel state information
real-valued column vector
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
bits
— Recovered EHT-SIG user field bits
binary-valued matrix
Recovered EHT-SIG user field bits, returned as a binary-valued matrix. The size of the matrix is 22-by-NumUsers. The meaning of NumUsers depends on the configuration.
For an OFDMA configuration where the same users are signaled in each 80 MHz subblock, NumUsers is the number of users in a subblock.
For all other configurations, NumUsers is the total number of users in the transmission.
Data Types: int8
failCRC
— CRC result
logical-valued row vector
Cyclic redundancy check (CRC) result, returned as a logical-valued row vector.
The length of the row vector is NumUsers, which depends on the
configuration as detailed in the bits
output description. A
value of 1
in the kth position indicates
that the kth user's bits failed the CRC.
Data Types: logical
cfgUpdated
— Updated EHT transmission parameters
cell array of wlanEHTRecoveryConfig
objects
Updated EHT transmission parameters, returned as a cell array of wlanEHTRecoveryConfig
objects. There is one object for each user who
passes the CRC. The function updates the properties of these objects in accordance
with the recovered EHT-SIG user field bits.
The function updates different properties of the recovery object depending on the PPDU type. If the PPDU type is MU-MIMO, the function updates these properties:
Otherwise, the function updates these properties:
Extended Capabilities
C/C++ Code Generation
Generate C and C++ code using MATLAB® Coder™.
Version History
Introduced in R2023bR2024b: Generate C/C++ code for 802.11be blind recovery
When you use the wlanEHTSIGUserBitRecover
function for 802.11be blind recovery, you can now generate C and C++ code using MATLAB®
Coder™.
R2024a: OFDMA support
You can now blindly recover the transmission parameters of OFDMA configurations.
See Also
Functions
Objects
MATLAB コマンド
次の MATLAB コマンドに対応するリンクがクリックされました。
コマンドを MATLAB コマンド ウィンドウに入力して実行してください。Web ブラウザーは MATLAB コマンドをサポートしていません。
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)