The Modulation Coding Scheme (MCS) index is a metric based on several parameters of a WiFi connection between two stations. Namely, for 802.11ac, it depends on the modulation type, the coding rate, the number of spatial streams, the channel width, and the guard interval. Here is what each one of these parameters represent:
Modulation type: the phase and amplitude modulation for bit encoding. More advanced modulations (e.g. 256 QAM) transfer more information, but they are also more susceptible to noise.
Coding rate: how many bits transfer information and how many are used for error correction. Higher values (e.g. ⅚) transfer more information, but there is less room for error correction.
Spatial streams: how many independent data streams are used. Higher values (e.g. 4 streams) increase data rates, but are susceptible to noise and interference.
Channel width: how big is the channel used for the communication. Wider channels can achieve higher bandwidth, but doubling the channel width increases the noise floor by 3 dB, which decreases SNR.
Guard interval: the pause between each packet transmission. Short pauses allow the transmission of more packets, but increase the chances of interference.
With the introduction of 802.11ax the additional parameter that affects MCS is whether the communication uses OFDM or OFDMA.
In a nutshell, an MCS table is a lookup that can be used to find which data rate will be negotiated between two stations once all the connection parameters are known. For each possible combination of modulation, coding rate, number of spatial streams, channel width, and guard interval, there is a unique MCS index.
As an example, I will borrow the MCS table for 802.11ac from the WirelessLAN Professionals’ site found here.
The 802.11ax MCS table becomes much larger, and for more details, I would refer you to this post by SemFio. 802.11ax has introduced close to 3000 new possible data rates.
MCS and SNR/RSSI
This table has the additional information of the minimum SNR and RSSI required to achieve a specific MCS index for different channel widths. For example, for 2 spatial streams, and an 80 MHz channel, to get an MCS of 5 you need at least 24 dBM of SNR or -60 RSSI. The relationship between SNR and MCS on this table was taken from Revolution WiFi’s blog.
It’s known that MacOS provides much more in-depth information about its WiFi connectivity. Here is a screenshot of my connection information to the netbeez SSID which you can get with Options+click on the status bar WiFi icon:
As you can see, it provides the channel width (80 MHz), the RSSI (-64 dBm), the noise (-85 dBm), the Tx Rate (351 Mbps), the standard (802.11ac), the MCS index (4), and the spatial streams (2). Actually, whatever you need to know about the established communication between a MAC and the AP is pretty much readily available.
Now, if you are curious, you can use the MCS table to look up what modulation and coding scheme is used. In this case, you can easily see on the MCS index 4 line under the 2 spatial stream section that it’s using 16-QAM with a ¾ code. On that same line you can also see that the 351 Mbps rate corresponds to 800 ns guard interval, and -64 dBm RSSI with 24 dBm SNR (64 – (-85)) (which match what MacOS is reporting).
Windows is not as friendly to WiFi curious users. On Windows 10 if you type “network properties” you get a list of all available networks on your system. Below we can see the information about my WiFi connection:
The only relevant information to MCS is the “Link speed (Receive/Transmit): 650/650 (Mbps)”. With that information only, I can go to the MCS table and look up the 650 data rate. It shows up at the 1 spatial stream MCS 7 and 160 MHz channel, and at the 2 spatial streams MCS 7 and 80 MHz channel.
Even for commercial access points, it’s fairly easy to find and configure the channel width. In my case, I know that it’s an 80 MHz channel, and I can derive that the MCS index is 7 with 2 spatial streams, and from there I can find all other information such as modulation (64-QAM), coding (⅚), guard interval (400 ns), minimum SNR (31 dBm) and RSSI (-58 dBm) required.
I wouldn’t be as lucky if Windows 10 was reporting 780 Mbps which shows up 7 times on the table. Even for the 80 MHz channel it appears twice (MCS index 8 and 9).
On MacOS you hardly need the MCS table. For me, the most common use of the table is to derive the minimum SNR and RSSI on Windows and Linux by knowing the data rate. This is useful when I am trying to evaluate the RF environment of a client and consequently troubleshoot connectivity issues.