OFDMA Resource Unit Mapping: Where exactly is that client's transmission?
Wi-Fi 6 (802.11ax for the purists) ushers in several improvements related to the efficiency of Wi-Fi. One of the most notable is the introduction of Orthoganal Frequency Division Multiple Access, or OFDMA for short. OFDMA in Wi-Fi is adopted from 4G/LTE technology, which has used it for several years, and is a method of modulating data onto a frequency band by sub-dividing a channel into smaller resource units (RUs) in order to allow transmission to or from multiple client stations at one time. For a detailed, technical explanation of OFDMA, as well as the other improvements to Wi-Fi in the 802.11ax amendment, refer to this white paper by Aruba Networks. This post will focus on RU allocation for uplink data (from Wi-Fi 6 clients to the AP)—specifically, how to determine where in the channel a specific client device is transmitting during a transmit opportunity.
A Wi-Fi channel is made up of tightly spaced subcarriers, or tones, which can be used to modulate data, used as pilot tones, or used as guard bands. Until now, (with OFDM) a single station at a time would contend for and win a transmit opportunity (TxOp), and occupy the entire channel width even if it didn’t need it. In an OFDM 20 MHz wide channel, the are 64 subcarriers—52 of which can be used for data. With OFDMA, the number of subcarriers increased by a factor of four to 256, but the spacing between them also decreased by a factor of four, maintaining the channel width. OFDMA organizes data subcarriers into RUs for both uplink and downlink transmission, so that when multiple Wi-Fi 6 client devices are associated to a Wi-Fi 6 BSSID, each client can use a different RU instead of the entire channel which facilities the frequency multiplexing that allows for simultaneous channel access. The minimum RU size is 26 tones, and 52, 106, and 242 tone RUs are available as well with 20 MHz channel widths. 40 MHz wide channels offer a maximum RU size of 484 tones, and 80 and 160 MHz channel widths additionally allow for a 996 tone RU. On a 20 MHz channel, using the smallest 26 tone RUs, up to 9 client devices could simultaneously send or receive at the same time (with 2 MHz of channel bandwidth each). The AP makes the decision about how to allocate RUs to clients, as well as which RU size to allocate to each client, and these can change from TxOp to TxOp. As a bit of a side note, the amendment allows each AP manufacturer to decide how it will allocate RUs, so it will be interesting to see how manufacturers are able to refine their algorithms to find competitive advantages.
Once RUs are allocated, assignments are communicated to client devices in either the HE MU PPDU for downlink communication (a topic I will cove in a separate post), or in a trigger fame to coordinate uplink communication. We can examine trigger frames to see the RU allocations by looking at the User Field, which contains the information unique for a responding uplink multi-user STA. It starts with the STA ID (assigned by the AP at association), followed by the RU allocation, coding type (BCC or LDPC), and the MCS the STA should use to transmit the PPDU. The RU allocation subfield is the most interesting part (at least for this blog post) and consists of a 7 bit binary encoding. This code maps to a specific, relative location and RU size within the channel, regardless of frequency or band. I’ve created RU allocation maps for 20, 40, and 80 MHz channel widths* below. Feel free to use these as a reference for your frame analysis and troubleshooting work as needed. High-resolution versions can be downloaded as well at the bottom of the page.
*An RU map for a 160 MHz channel gets pretty unwieldy in term of size. RUs can be derived the same way, and I may revisit this later if I find a way to make the map readable on a single sheet of paper or screen.
Example: An AP wins the TxOp, and issue a trigger frame to initiate uplink OFDMA communication on a 40 MHz channel from three associated Wi-Fi 6 clients. Looking at the User Field, we see that there is an RU allocation for each as follows:
Client RU Allocation
Client 1 0111101
Client 2 0111011
Client 3 0111100
Referring to the 40 MHz RU Allocation Map above, we can see that Client 1 has been assigned a 242 tone (20 MHz) RU on the lower half of the channel. Client 2 and Client 3 have each been assigned an 8 MHz RU on the upper half of the channel. You now have a physical point of reference when comparing frame captures to signatures in a spectrum analysis, for example. Pretty cool. Let me know if you have any thought or comments.