802.11ax 引入的最重要的技术就是OFDMA。OFDMA中引入了RU(资源块)概念,也就是20Mhz/40Mhz/80Mhz/160Mhz的带宽可以切割成不同尺寸的RU,分配给不同的用户使用,这样就大大提高了频谱资源的利用率。
常见的RU尺寸有26/52/102/242/484/996,单位是子载波,每个子载波是78.125Khz,这样20Mhz的带宽可以划分为如下图所示的不同RU大小。
按照11ax规范的要求,上下行的数据传输都可以由AP来统一调度,这样上下行的OFDMA传输的RU分配都是由AP来统一管理和调度;下面分别就下行和上行的RU分配来讨论下AP是如何进行RU资源的分配和调度的。
1 下行方向:
在下行方向,AP给多个用户发送数据时候的数据帧格式如下图所示。里面比较重要的信息是SIG-A和SIG-B这两个。
SIG-A主要携带了带宽信息,也就是这个数据帧占用的总带宽; 如下图抓包信息中的Bandwidth。
SIG-B字段会携带每个用户的RU位置信息。因为AP同时往多个用户发送数据,所以AP需要携带用户的ID信息,以及承载某个用户数据的RU的位置信息。这样用户才能根据用户ID信息判断是否有自己的数据,根据RU位置信息,去相应的RU接收自己的数据。
SIG-B的格式如下所示:
其中Common field里面会携带RU分配信息;如下图所示:
其中RU Allocation给出了RU的分配信息,由8个bit的数据来描述,具体取值和RU之间的映射关系见下图;比如00000000的取值,根据下表我们可以看到它位于表格的第一行,对应了9个RU(每个RU的大小是26个子载波);根据这个信息,我们只知道了RU的划分格式,但是还不知道具体某个用户对应1-9的哪个位置。这个位置信息需要根据SIG-B中的User Specfic 字段来确定,每个用户都会对应一个User Specfic 字段。每个User Specific字段中有用户ID信息。这样用户首先找到自己对应的User Specific字段。然后根据自己User Specific的顺就可以找到自己相对应哪个RU;
下面表格中还有x y z等字符,比如表格最后一行的取值有y字母,这个字母组成的数字再加上1,代表对应RU(106)上面的复用的MU-MIMO用户的数量。比如y0y1y2=001,那么1+1=2,复用的MU-MIMO用户数是2.
11ax支持MU-MIMO+OFDMA同时存在的场景,也就是部分RU用户OFDMA调度,部分用户MU-MIMO。此处不再展开讨论。
举例:下面的例子描述了如何通过RU allocation和User field去将用户map到RU的具体位置。首先通过RU allocation找到对应的RU 的format,然后再通过User field的顺序去找用户的RU的位置。
注意:HE-SIG-B的数量和SIG-B的common field中RU Allocation字段的个数,是由带宽决定的,见下面表格;
比如80Mhz带宽,有2个SIG-B,每个SIG-B有2个RU Allocation字段,这样总共有4个RU Allocation,每个RU Allocation字段代表20Mhz的分配情况,那么4个可以代表80Mhz的RU分配 情况。
带宽 | 20Mhz | 40Mhz | 80Mhz | 160Mhz |
RU Allocation 个数 N | 1 | 1 | 2 | 4 |
HE-SIG-B 数量 | 1 | 2 | 2 | 2 |
2 上行方向
AP对于上行RU分配是通过发送专门的trigger frame来进行的;
Trigger frame里面有两部分比较重要,一部分是Common field,里面会指示数据帧的总的带宽。另一部分是User Info,这部分会携带用户的ID(AID,关联ID)和RU allocation信息。
用户首先通过读取AID,判断是否是给自己在分配RU,如果是的话,再读区RU allocation去找自己的RU位置。
上行方向的RU位置的映射相对比较简单,如下图,通过RU allocation的取值,可以直接查表找到自己的RU的序号。非常简单明了。
上表中RU1-9对应的具体位置见下面表格。