Main Content

wlanLSIGRecover

Recover L-SIG information bits

Description

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

example

recBits = wlanLSIGRecover(rxSig,chEst,noiseVarEst,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.

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.

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

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

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

Create a 2x2 TGac channel and an AWGN channel with an SNR=10 dB.

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

chNoise = comm.AWGNChannel('NoiseMethod','Signal to noise ratio (SNR)',...
    'SNR',10);

Pass the signals through the noisy 2x2 multipath fading channel.

rxLLTF = chNoise(tgacChan(txLLTF));
rxLSIG = chNoise(tgacChan(txLSIG));

Add additional white noise corresponding to a receiver with a 9 dB noise figure. The noise variance is equal to k*T*B*F, where k is Boltzmann's constant, T is the ambient temperature, B is the channel bandwidth (sample rate), and F is the receiver noise figure.

nVar = 10^((-228.6+10*log10(290) + 10*log10(fs) + 9 )/10);
rxNoise = comm.AWGNChannel('NoiseMethod','Variance','Variance',nVar);

rxLLTF = rxNoise(rxLLTF);
rxLSIG = rxNoise(rxLSIG);

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,0.1,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.

chEst = ones(52,1);
noiseVarEst = 0.1;
rxLSIGData = wlanLSIGRecover(rxSIG,chEst,noiseVarEst,'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.

chEst = ones(416,1);
noiseVarEst = 0.01;
[recBits,failCheck,eqSym] = wlanLSIGRecover(rxSIG,chEst,noiseVarEst,'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. This object represents Channel 1.

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.

Before R2021a, use commas to separate each name and value, and enclose Name in quotes.

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 pair 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 the name-value pair consisting of 'PilotPhaseTracking' and 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-2012 Adapted and reprinted with permission from IEEE. Copyright IEEE 2012. All rights reserved.