主要内容

wlanLSIGRecover

R2026b

Recover L-SIG information bits

Description

recBits = wlanLSIGRecover(rxSig,chanEst,nVar,cbw) returns the recovered L-SIG information bits, recBits, given the time-domain L-SIG waveform, rxSig. Specify the channel estimate, chanEst, the noise variance estimate, nVar, and the channel bandwidth, cbw.

example

recBits = wlanLSIGRecover(rxSig,chanEst,nVar,cbw,Name=Value) specifies algorithm parameters by using one or more name value arguments in addition to any combination of input arguments from the previous syntax. For example, PilotPhaseTracking="None" disables pilot phase tracking.

example

[recBits,failCheck,eqSym,cpe] = wlanLSIGRecover(___) additionally returns the status of a validity check failCheck, the equalized symbols eqSym, and the common phase error cpe using any combination of input and name-value arguments from the previous syntaxes.

example

Examples

collapse all

Recover L-SIG information transmitted in a noisy 2x2 MIMO channel, and calculate the number of bit errors present in the received information bits.

Set the channel bandwidth and sample rate.

chanBW = "CBW40";
fs = 40e6;

Create a VHT configuration object corresponding to a 40 MHz 2x2 MIMO channel.

cfg = wlanVHTConfig( ...
    ChannelBandwidth=chanBW, ...
    NumTransmitAntennas=2, ...
    NumSpaceTimeStreams=2);

Generate the L-LTF and L-SIG field signals.

txLLTF = wlanLLTF(cfg);
[txLSIG,txLSIGData] = wlanLSIG(cfg);

Create a 2x2 TGac channel

tgacChan = wlanTGacChannel(SampleRate=fs,ChannelBandwidth=chanBW, ...
    NumTransmitAntennas=2,NumReceiveAntennas=2,NormalizeChannelOutputs=false);

Pass the signals through the noisy 2x2 multipath fading channel.and add noise

snrdB = 10; % SNR (dB)
% Convert the SNR per active subcarrier to total SNR to account for noise energy in null subcarriers
ofdmInfo = wlanVHTOFDMInfo("VHT-LTF",cfg);
snrValue = convertSNR(snrdB,"snrsc","snr",FFTLength=ofdmInfo.FFTLength,NumActiveSubcarriers=ofdmInfo.NumTones);
nVar = 10^((-snrValue-30)/10); % Noise variance (W) for 0 dBm (-30 dBW) signal power
rxLLTF = awgn(tgacChan(txLLTF),snrValue);
rxLSIG = awgn(tgacChan(txLSIG),snrValue);

Perform channel estimation based on the L-LTF.

demodLLTF = wlanLLTFDemodulate(rxLLTF,chanBW,1);
chanEst = wlanLLTFChannelEstimate(demodLLTF,chanBW);

Recover the L-SIG information bits.

rxLSIGData = wlanLSIGRecover(rxLSIG,chanEst,nVar,chanBW);

Verify that there are no bit errors in the recovered L-SIG data.

numErrors = biterr(txLSIGData,rxLSIGData)
numErrors = 
0

Recover L-SIG information using the zero-forcing equalizer algorithm. Calculate the number of bit errors in the received data.

Create an HT configuration object.

cfgHT = wlanHTConfig;

Generate the L-SIG field and pass it through an AWGN channel.

[txLSIG,txLSIGData] = wlanLSIG(cfgHT);
rxSIG = awgn(txLSIG,20);

Recover the L-SIG field using the zero-forcing algorithm. The channel estimate is a vector of ones because fading was not introduced.

chanEst = ones(52,1);
nVar = 0.1;
rxLSIGData = wlanLSIGRecover(rxSIG,chanEst,nVar,"CBW20",EqualizationMethod="ZF");

Verify that there are no bit errors in the recovered L-SIG data.

numErrors = biterr(txLSIGData,rxLSIGData)
numErrors = 
0

Recover the L-SIG field from a channel that introduces a fixed phase and frequency offset.

Create a VHT configuration object corresponding to a 160 MHz SISO channel. Generate the transmitted L-SIG field.

cfgVHT = wlanVHTConfig(ChannelBandwidth="CBW160");
txLSIG = wlanLSIG(cfgVHT);

To introduce a 45 degree phase offset and a 100 Hz frequency offset, create a phase and frequency offset System object.

pfOffset = comm.PhaseFrequencyOffset(SampleRate=160e6,PhaseOffset=45, ...
    FrequencyOffset=100);

Introduce phase and frequency offsets to the transmitted L-SIG field, then pass it through an AWGN channel.

rxSIG = awgn(pfOffset(txLSIG),20);

Recover the L-SIG information bits, the failure check status, and the equalized symbols, disabling pilot phase tracking.

chanEst = ones(416,1);
nVar = 0.01;
[recBits,failCheck,eqSym] = wlanLSIGRecover(rxSIG,chanEst,nVar,"CBW160",PilotPhaseTracking="None");

Verify that the L-SIG passed the failure checks.

disp(failCheck)
   0

Visualize the phase offset by plotting the equalized symbols.

scatterplot(eqSym)
grid

Figure Scatter Plot contains an axes object. The axes object with title Scatter Plot, xlabel In-Phase, ylabel Quadrature contains a line object which displays its values using only markers.

Input Arguments

collapse all

Received L-SIG field, specified as an NS-by-NR matrix. NS is the number of samples, and NR is the number of receive antennas.

NS is proportional to the channel bandwidth.

ChannelBandwidthNS
"CBW5", "CBW10", "CBW20"80
"CBW40"160
"CBW80"320
"CBW160"640

Data Types: single | double
Complex Number Support: Yes

Channel estimate, specified as an NST-by-1-by-NR array. NST is the number of occupied subcarriers, and NR is the number of receive antennas.

Channel BandwidthNST
"CBW5", "CBW10", "CBW20"52
"CBW40"104
"CBW80"208
"CBW160"416

Data Types: single | double
Complex Number Support: Yes

Noise variance estimate, specified as a nonnegative scalar.

Data Types: single | double

Channel bandwidth in MHz, specified as "CBW5", "CBW10", "CBW20", "CBW40", "CBW80", or "CBW160".

Example: "CBW80" corresponds to a channel bandwidth of 80 MHz

Data Types: char | string

Name-Value Arguments

collapse all

Specify optional pairs of arguments as Name1=Value1,...,NameN=ValueN, where Name is the argument name and Value is the corresponding value. Name-value arguments must appear after other arguments, but the order of the pairs does not matter.

Example: PilotPhaseTracking="None" disables pilot phase tracking.

OFDM symbol sampling offset represented as a fraction of the cyclic prefix (CP) length, specified as the name-value argument consisting of OFDMSymbolOffset and a scalar in the interval [0, 1]. The value you specify indicates the start location for OFDM demodulation relative to the beginning of the CP. The value 0 represents the start of the CP, and the value 1 represents the end of the CP.

Data Types: double

Equalization method, specified as one of these values.

  • "MMSE" — The receiver uses a minimum mean-square error equalizer.

  • "ZF" — The receiver uses a zero-forcing equalizer.

When the received signal has multiple receive antennas, the function exploits receiver diversity during equalization. When the number of transmitted space-time streams is one and you specify this argument as "ZF", the function performs maximal-ratio combining.

Data Types: char | string

Pilot phase tracking, specified as one of these values.

  • "PreEQ" — Enable pilot phase tracking, which the function performs before any equalization operation.

  • "None" — Disable pilot phase tracking.

Data Types: char | string

Output Arguments

collapse all

Recovered L-SIG information bits, returned as a 24-by-1 binary column vector. The 24 elements correspond to the length of the L-SIG field.

Data Types: int8

Failure check status, returned as a logical scalar. If L-SIG fails the parity check, or if its first four bits do not correspond to one of the eight allowable data rates, failCheck is true.

Data Types: logical

Equalized symbols, returned as 48-by-1 vector. There are 48 data subcarriers in the L-SIG field.

Data Types: single | double
Complex Number Support: Yes

Common phase error in radians, returned as a scalar.

Data Types: single | double

More About

collapse all

References

[1] 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

expand all

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

Version History

Introduced in R2015b


1 IEEE Std 802.11-2020 Adapted and reprinted with permission from IEEE. Copyright IEEE 2020. All rights reserved.

2 © IEEE 2021. All rights reserved.

3 © IEEE 2021. All rights reserved.