wlanVHTSIGBRecover
Recover VHT-SIG-B information bits
Syntax
Description
recBits = wlanVHTSIGBRecover(
returns
the recovered information bits of a multiuser transmission for the
user of interest, rxSig
,chEst
,noiseVarEst
,cbw
,userNumber
,numSTS
)userNumber
, and the number
of space-time streams, numSTS
.
specifies algorithm parameters by using one or
more name-value pair arguments.recBits
= wlanVHTSIGBRecover(___,Name,Value
)
Examples
Recover VHT-SIG-B Information Bits
Recover VHT-SIG-B bits in a perfect channel having 80 MHz channel bandwidth, one space-time stream, and one receive antenna.
Create a wlanVHTConfig
object having a channel bandwidth of 80 MHz. Using the object, create a VHT-SIG-B waveform.
cfg = wlanVHTConfig('ChannelBandwidth','CBW80'); [txSig,txBits] = wlanVHTSIGB(cfg);
For a channel bandwidth of 80 MHz, there are 242 occupied subcarriers. The channel estimate array dimensions for this example must be [Nst,Nsts,Nr] = [242,1,1]. The example assumes a perfect channel and one receive antenna. Therefore, specify the channel estimate as a column vector of ones and the noise variance estimate as zero.
chEst = ones(242,1); noiseVarEst = 0;
Recover the VHT-SIG-B. Verify that the received information bits are identical to the transmitted bits.
rxBits = wlanVHTSIGBRecover(txSig,chEst,noiseVarEst,'CBW80');
isequal(txBits,rxBits)
ans = logical
1
Recover VHT-SIG-B Using Zero-Forcing Equalizer
Recover the VHT-SIG-B field using a zero-forcing equalizer in an AWGN channel with a channel bandwidth of 160 MHz, one space-time stream, and one receive antenna.
Create a wlanVHTConfig
object, specifying a channel bandwidth of 160 MHz. Using the object, create a VHT-SIG-B waveform.
cfg = wlanVHTConfig('ChannelBandwidth','CBW160'); [txSig,txBits] = wlanVHTSIGB(cfg);
Pass the transmitted VHT-SIG-B through an AWGN channel.
noiseVarEst = 0.1; awgnChan = comm.AWGNChannel('NoiseMethod','Variance','Variance',noiseVarEst); rxSig = awgnChan(txSig);
Recover the VHT-SIG-B field, specifying zero-forcing equalization. Verify that the received information has no bit errors.
chEst = ones(484,1); recBits = wlanVHTSIGBRecover(rxSig,chEst,noiseVarEst,'CBW160','EqualizationMethod','ZF'); numErr = biterr(txBits,recBits)
numErr = 0
Recover VHT-SIG-B in 2x2 MIMO Channel
Recover VHT-SIG-B in a 2x2 MIMO channel for an SNR=10 dB and a receiver that has a 9 dB noise figure. Confirm that the information bits are recovered correctly.
Set the channel bandwidth and the corresponding sample rate.
cbw = 'CBW20';
fs = 20e6;
Create a VHT configuration object with 20 MHz bandwidth and two transmission paths. Generate the L-LTF and VHT-SIG-B waveforms.
vht = wlanVHTConfig('ChannelBandwidth',cbw,'NumTransmitAntennas',2, ... 'NumSpaceTimeStreams',2); txVHTLTF = wlanVHTLTF(vht); [txVHTSIGB,txVHTSIGBBits] = wlanVHTSIGB(vht);
Pass the VHT-LTF and VHT-SIG-B waveforms through a 2x2 TGac channel.
tgacChan = wlanTGacChannel('NumTransmitAntennas',2, ... 'NumReceiveAntennas',2, 'ChannelBandwidth',cbw,'SampleRate',fs); rxVHTLTF = tgacChan(txVHTLTF); rxVHTSIGB = tgacChan(txVHTSIGB);
Add white noise for an SNR = 10dB.
chNoise = comm.AWGNChannel('NoiseMethod','Signal to noise ratio (SNR)',... 'SNR',10); rxVHTLTF = chNoise(rxVHTLTF); rxVHTSIGB = chNoise(rxVHTSIGB);
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); rxVHTLTF = rxNoise(rxVHTLTF); rxVHTSIGB = rxNoise(rxVHTSIGB);
Demodulate the VHT-LTF signal and use it to generate a channel estimate.
demodVHTLTF = wlanVHTLTFDemodulate(rxVHTLTF,vht); chEst = wlanVHTLTFChannelEstimate(demodVHTLTF,vht);
Recover the VHT-SIG-B information bits. Display the scatter plot of the equalized symbols.
[recVHTSIGBBits,eqSym,cpe] = wlanVHTSIGBRecover(rxVHTSIGB,chEst,nVar,cbw); scatterplot(eqSym)
Display the common phase error.
cpe
cpe = 0.0485
Determine the number of errors between the transmitted and received VHT-SIG-B information bits.
numErr = biterr(txVHTSIGBBits,recVHTSIGBBits)
numErr = 0
Input Arguments
rxSig
— Received VHT-SIG-B
matrix
Received VHT-SIG-B field, specified as an N_{S}-by-N_{R} matrix. N_{S} is the number of samples and increases with channel bandwidth.
Channel Bandwidth | N_{S} |
---|---|
'CBW20' | 80 |
'CBW40' | 160 |
'CBW80' | 320 |
'CBW160' | 640 |
N_{R} is the number of receive antennas.
Data Types: double
Complex Number Support: Yes
chEst
— Channel estimate
3-D array
Channel estimate, specified as an N_{ST}-by-N_{STS}-by-N_{R} array. N_{ST} is the number of occupied subcarriers. N_{STS} is the number of space-time streams. For multiuser transmissions, N_{STS} is the total number of space-time streams for all users . N_{R} is the number of receive antennas.
N_{ST} increases with channel bandwidth.
ChannelBandwidth | Number of Occupied Subcarriers (N_{ST}) | Number of Data Subcarriers (N_{SD}) | Number of Pilot Subcarriers (N_{SP}) |
---|---|---|---|
'CBW20' | 56 | 52 | 4 |
'CBW40' | 114 | 108 | 6 |
'CBW80' | 242 | 234 | 8 |
'CBW160' | 484 | 468 | 16 |
The channel estimate is based on the VHT-LTF.
noiseVarEst
— Noise variance estimate
nonnegative scalar
Noise variance estimate, specified as a nonnegative scalar.
Data Types: double
cbw
— Channel bandwidth
'CBW20'
| 'CBW40'
| 'CBW80'
| 'CBW160'
Channel bandwidth, specified as 'CBW20'
, 'CBW40'
, 'CBW80'
,
or 'CBW160'
.
Data Types: char
| string
userNumber
— Number of the user
integer from 1 to N_{Users}
Number of the user in a multiuser transmission, specified as an integer having a value from 1 to N_{Users}. N_{Users} is the total number of users.
Data Types: double
numSTS
— Number of space-time streams
1-by-N_{Users} vector
of integers from 1 to 4
Number of space-time streams in a multiuser transmission, specified as a vector. The number of space-time streams is a 1-by-N_{Users} vector of integers from 1 to 4, where N_{Users} is an integer from 1 to 4.
Example: [1 3 2]
is the number of space-time
streams for each user.
Note
The sum of the space-time stream vector elements must not exceed eight.
Data Types: double
Name-Value Arguments
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.
OFDMSymbolOffset
— OFDM symbol sampling offset
0.75
(default) | scalar in the interval [0, 1]
OFDM symbol sampling offset represented as a fraction of the cyclic prefix (CP)
length, specified as the comma-separated 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
EqualizationMethod
— Equalization method
'MMSE'
(default) | 'ZF'
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
PilotPhaseTracking
— Pilot phase tracking
'PreEQ'
(default) | 'None'
Pilot phase tracking, specified as the comma-separated 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
recBits
— Recovered VHT-SIG information
vector
Recovered VHT-SIG-B information bits, returned as an N_{b}-by-1
column vector. N_{b} is the
number of recovered VHT-SIG-B information bits and increases with
the channel bandwidth. The output is for a single user as determined
by userNumber
.
The number of output bits is proportional to the channel bandwidth.
ChannelBandwidth | N_{b} |
---|---|
'CBW20' | 26 |
'CBW40' | 27 |
'CBW80' | 29 |
'CBW160' | 29 |
See VHT-SIG-B for information about the meaning of each bit in the field.
eqSym
— Equalized symbols
matrix
Equalized symbols, returned as an N_{SD}-by-1 column vector. N_{SD} is the number of data subcarriers.
N_{SD} increases with the channel bandwidth.
ChannelBandwidth | N_{SD} |
---|---|
'CBW20' | 52 |
'CBW40' | 108 |
'CBW80' | 234 |
'CBW160' | 468 |
cpe
— Common phase error
column vector
Common phase error in radians, returned as a scalar.
More About
VHT-SIG-B
The very high throughput signal B field (VHT-SIG-B) is used for multiuser scenario to set up the data rate and to fine-tune MIMO reception. It is modulated using MCS 0 and is transmitted in a single OFDM symbol.
The VHT-SIG-B field consists of a single OFDM symbol located between the VHT-LTF and the data portion of the VHT format PPDU.
The very high throughput signal B (VHT-SIG-B) field contains the actual rate and A-MPDU length value per user. For a detailed description of the VHT-SIG-B field, see section 21.3.8.3.6 of IEEE^{®} Std 802.11™-2016. The number of bits in the VHT-SIG-B field varies with the channel bandwidth and the assignment depends on whether single user or multiuser scenario in allocated. For single user configurations, the same information is available in the L-SIG field but the VHT-SIG-B field is included for continuity purposes.
Field | VHT MU PPDU Allocation (bits) | VHT SU PPDU Allocation (bits) | Description | ||||
---|---|---|---|---|---|---|---|
20 MHz | 40 MHz | 80 MHz, 160 MHz | 20 MHz | 40 MHz | 80 MHz, 160 MHz | ||
VHT-SIG-B | B0-15 (16) | B0-16 (17) | B0-18 (19) | B0-16 (17) | B0-18 (19) | B0-20 (21) | A variable-length field that indicates the size of the data payload in four-byte units. The length of the field depends on the channel bandwidth. |
VHT-MCS | B16-19 (4) | B17-20 (4) | B19-22 (4) | N/A | N/A | N/A | A four-bit field that is included for multiuser scenarios only. |
Reserved | N/A | N/A | N/A | B17–19 (3) | B19-20 (2) | B21-22 (2) | All ones |
Tail | B20-25 (6) | B21-26 (6) | B23-28 (6) | B20-25 (6) | B21-26 (6) | B23-28 (6) | Six zero-bits used to terminate the convolutional code. |
Total # bits | 26 | 27 | 29 | 26 | 27 | 29 | |
Bit field repetition | 1 | 2 | 4 For 160 MHz, the 80 MHz channel is repeated twice. | 1 | 2 | 4 For 160 MHz, the 80 MHz channel is repeated twice. |
For a null data packet (NDP), the VHT-SIG-B bits are set according to Table 21-15 of IEEE Std 802.11-2016.
VHT-LTF
The very high throughput long training field (VHT-LTF) is located between the VHT-STF and VHT-SIG-B portion of the VHT packet.
It is used for MIMO channel estimation and pilot subcarrier tracking. The VHT-LTF includes one VHT long training symbol for each spatial stream indicated by the selected MCS. Each symbol is 4 μs long. A maximum of eight symbols are permitted in the VHT-LTF.
For a detailed description of the VHT-LTF, see section 21.3.8.3.5 of IEEE Std 802.11-2016.
PPDU
PLCP protocol data unit
The PPDU is the complete PLCP frame, including PLCP headers, MAC headers, the MAC data field, and the MAC and PLCP trailers.
Algorithms
VHT-SIG-B Recovery
The VHT-SIG-B field consists of one symbol and resides between the VHT-LTF field and the data portion of the packet structure for the VHT format PPDUs.
For single-user packets, you can recover the length information from the L-SIG and VHT-SIG-A field information. Therefore, it is not strictly required for the receiver to decode the VHT-SIG-B field. For multiuser transmissions, recovering the VHT-SIG-B field provides packet length and MCS information for each user.
For VHT-SIG-B details, refer to IEEE Std 802.11ac™-2013 [1], Section 22.3.4.8, and Perahia [2], Section 7.3.2.4.
References
[1] IEEE Std 802.11ac™-2013 IEEE Standard for Information technology — Telecommunications and information exchange between systems — Local and metropolitan area networks — Specific requirements — Part 11: Wireless LAN Medium Access Control (MAC) and Physical Layer (PHY) Specifications — Amendment 4: Enhancements for Very High Throughput for Operation in Bands below 6 GHz.
[2] Perahia, E., and R. Stacey. Next Generation Wireless LANs: 802.11n and 802.11ac . 2nd Edition, United Kingdom: Cambridge University Press, 2013.
Extended Capabilities
C/C++ Code Generation
Generate C and C++ code using MATLAB® Coder™.
Version History
Introduced in R2015b
See Also
wlanVHTSIGB
| wlanVHTConfig
| wlanVHTLTFDemodulate
| wlanVHTLTFChannelEstimate
| wlanVHTDataRecover
| wlanVHTSIGARecover
^{1} IEEE Std 802.11ac™-2013 Adapted and reprinted with permission from IEEE. Copyright IEEE 2013. All rights reserved.
Open Example
You have a modified version of this example. Do you want to open this example with your edits?
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)