如何计算MCS Data Rates

First we need to understand how the MCS data rates are calculated prior 802.11ax. I am only going to focus on 802.11n (HT) and 802.11ac (VHT) here. 

 

Here is the formula we can use to calculate which data rate is used for both 802.11n and 802.11ac:

 

 

Let's detail each of these variables and which value they can have for both 802.11n and 802.11ac:

 

HT and VHT OFDM Parameters

Now, the formula doesn't change much with 802.11ax. However, some new features will impact the way we calculate data rate for 802.11ax:

  • A new symbol duration is used: 12.8µs
  • Different Guard Intervals are used: 0.8µs, 1.6µs and 3.2µs
  • The size and number of data subcarriers is not the same (especially with the different RU sizes introduced by OFDMA.

 

Even though the formula doesn't change much, the IEEE does define 2 different formulas depending on if OFDMA is used or not. When OFDMA is not used, we can used the formula previously presented above.

 

Here is the formula we can used when OFDMA is used (it is pretty much the same except that we define the number of data subcarriers per RU and not per channel):

 

Let's now details each of these variables and which values they can have when HE (802.11ax) is used. The first table details the parameters used when OFDMA is not used. The second table details the parameters when OFDMA and resource units are used.

 

HE OFDM Parameters

 

HE OFDMA Parameters

Due to the addition of a new modulation technique (QAM-1024), 2 new MCS indexes are now available with 802.11ax:

  • Index 10: when the 1024-QAM modulation is used with a coding of 3/4
  • Index 11: when the 1024-QAM modulation is used with a coding of 5/6

Example

So now that we have this information, let's try to understand the data rate that my phone was using.

The phone is a Samsung GS10 which supports 802.11ax and up to 2 spatial streams. The AP used is an Aerohive AP630. I have configured it with an 80MHz wide channel. OFDMA is not used here because ODFMA was not activated at the time of this capture.

 

So based on this information, we can determine some of the variables required to calculate the data rate and narrow down the data rates that will be used by this device:

  • Number of Data Subcarriers for an 80MHz wide channel: 980
  • Number of Coded bit per subcarrier (Modulation): we don't know yet
  • Coding: we don't know yet
  • Number of Spatial Streams: 2
  • OFDM Symbol Duration: 12.8µs
  • Guard Interval: we don't know yet

So here is the list of possible data rates used by this device when connecting to this AP:

 

Because we know that the data rate used was 1200.95 Mbps (as indicated on the picture above), we can now determine that:

  • MCS 11 was used
  • 1024QAM with a coding of 5/6 ​was being used
  • A guard interval of 0.8µs was used

精简如下代码// 定义WiFi 11n MCS参数结构体 typedef struct { QString MCS;//MCS double datarate_20M; // 20MHz带宽数据速率(Mbps) double datarate_40M; // 40MHz带宽数据速率(Mbps) double datarate_80M; // 40MHz带宽数据速率(Mbps) double datarate_160M; // 40MHz带宽数据速率(Mbps) double datarate_320M; // 40MHz带宽数据速率(Mbps) QString modulation;//调制方式 double EVM; int sensitivity_20M; // 20MHz接收灵敏度(dBm) } Wifi11McsParams;// MCS参数对照表(MCS0-MCS7) const Wifi11McsParams wifi11n_mcs_table[] = { // MCS |datarate_20M | datarate_40M |datarate_80M|datarate_160M|datarate_320M|调制方式|EVM|sensitivity_20M {"MCS0", 7.2, 15.0, 0, 0, 0, "BPSK", -5, -82 }, // MCS0 {"MCS1", 14.2, 30.0, 0, 0, 0, "QPSK", -10, -79 }, // MCS1 {"MCS2",21.7, 45.0, 0, 0, 0, "QPSK", -13, -77 }, // MCS2 {"MCS3",28.9, 60.0, 0, 0, 0, "16-QAM", -16, -74 }, // MCS3 {"MCS4", 43.3, 90.0, 0, 0, 0, "16-QAM", -19, -70 }, // MCS4 {"MCS5", 57.8, 120.0, 0, 0, 0, "64-QAM", -22, -66 }, // MCS5 {"MCS6", 65.0, 135.0, 0, 0, 0, "64-QAM", -25, -65 }, // MCS6 {"MCS7", 72.2, 150.0, 0, 0, 0, "64-QAM", -28, -64 } // MCS7 }; if(ui->bw_2->currentText()=="20") { dataratemcs0=wifi11n_mcs_table[0].datarate_20M; dataratemcs1=wifi11n_mcs_table[1].datarate_20M; dataratemcs2=wifi11n_mcs_table[2].datarate_20M; dataratemcs3=wifi11n_mcs_table[3].datarate_20M; dataratemcs4=wifi11n_mcs_table[4].datarate_20M; dataratemcs5=wifi11n_mcs_table[5].datarate_20M; dataratemcs6=wifi11n_mcs_table[6].datarate_20M; dataratemcs7=wifi11n_mcs_table[7].datarate_20M; } else if(ui->bw_2->currentText()=="40") { dataratemcs0=wifi11n_mcs_table[0].datarate_40M; dataratemcs1=wifi11n_mcs_table[1].datarate_40M; dataratemcs2=wifi11n_mcs_table[2].datarate_40M; dataratemcs3=wifi11n_mcs_table[3].datarate_40M; dataratemcs4=wifi11n_mcs_table[4].datarate_40M; dataratemcs5=wifi11n_mcs_table[5].datarate_40M; dataratemcs6=wifi11n_mcs_table[6].datarate_40M; dataratemcs7=wifi11n_mcs_table[7].datarate_40M; } else if(ui->bw_2->currentText()=="80") { dataratemcs0=wifi11n_mcs_table[0].datarate_80M; dataratemcs1=wifi11n_mcs_table[1].datarate_80M; dataratemcs2=wifi11n_mcs_table[2].datarate_80M; dataratemcs3=wifi11n_mcs_table[3].datarate_80M; dataratemcs4=wifi11n_mcs_table[4].datarate_80M; dataratemcs5=wifi11n_mcs_table[5].datarate_80M; dataratemcs6=wifi11n_mcs_table[6].datarate_80M; dataratemcs7=wifi11n_mcs_table[7].datarate_80M; }
04-04
// 定义成员指针类型 using DataRateMember = double Wifi11McsParams::*; // 带宽与结构体成员的映射 QHash<QString, DataRateMember> bandwidthMap = { {"20", &Wifi11McsParams::datarate_20M}, {"40", &Wifi11McsParams::datarate_40M}, {"80", &Wifi11McsParams::datarate_80M}, {"160", &Wifi11McsParams::datarate_160M}, {"320", &Wifi11McsParams::datarate_320M} }; // 目标变量数组 double* datarates[] = { &dataratemcs0, &dataratemcs1, &dataratemcs2, &dataratemcs3, &dataratemcs4, &dataratemcs5, &dataratemcs6, &dataratemcs7 }; // 统一处理逻辑 QString bw = ui->bw_2->currentText(); if (auto it = bandwidthMap.find(bw); it != bandwidthMap.end()) { DataRateMember member = it.value(); for (int i = 0; i < 8; ++i) { *datarates[i] = wifi11n_mcs_table[i].*member; } } else { qWarning() << "Unsupported bandwidth:" << bw; } //这是第2列的rate ui->tableWidget->setItem(0, 1, new QTableWidgetItem(QString::number(dataratemcs0*dateratecoef))); ui->tableWidget->setItem(1, 1, new QTableWidgetItem(QString::number(dataratemcs1*dateratecoef))); ui->tableWidget->setItem(2, 1, new QTableWidgetItem(QString::number(dataratemcs2*dateratecoef))); ui->tableWidget->setItem(3, 1, new QTableWidgetItem(QString::number(dataratemcs3*dateratecoef))); ui->tableWidget->setItem(4, 1, new QTableWidgetItem(QString::number(dataratemcs4*dateratecoef))); ui->tableWidget->setItem(5, 1, new QTableWidgetItem(QString::number(dataratemcs5*dateratecoef))); ui->tableWidget->setItem(6, 1, new QTableWidgetItem(QString::number(dataratemcs6*dateratecoef))); ui->tableWidget->setItem(7, 1, new QTableWidgetItem(QString::number(dataratemcs7*dateratecoef)));哪里有错误?
最新发布
04-04
### WiFi 7 Modulation and Coding Scheme (MCS) Details In WiFi 7, also known as IEEE 802.11be Extremely High Throughput (EHT), significant improvements have been made to the modulation and coding schemes compared with previous standards such as 802.11n or even 802.11ax (WiFi 6). These enhancements aim at increasing throughput, reducing latency, and improving reliability under various channel conditions. #### Enhanced MCS Indexing The MCS index table has expanded beyond what was available in earlier versions like 802.11n where there were specific mappings between MCS indices and combinations of modulation types and code rates[^4]. In WiFi 7, new higher-order modulations are introduced along with more flexible configurations that allow better adaptation to different environmental factors affecting wireless communication performance. For instance, while older standards might use Quadrature Amplitude Modulation (QAM) up to 256-QAM, WiFi 7 supports advanced levels including but not limited to: - **Higher Order QAM**: Up to 4096-QAM which significantly increases spectral efficiency by encoding more bits per symbol. This advancement means each transmitted signal can carry much richer data content within the same bandwidth resource allocation framework. #### Improved Code Rates Alongside increased modulation orders, WiFi 7 introduces improved error correction capabilities through optimized Low-Density Parity Check (LDPC) codes combined with higher code rates. For example, some configurations may support a maximum theoretical code rate approaching 13/16 when using certain high-efficiency modes designed specifically for robustness against interference without sacrificing too much on speed potential. Such sophisticated adjustments ensure reliable transmissions over longer distances or challenging environments filled with obstacles causing multipath effects—phenomena previously mitigated only partially via techniques similar to those mentioned regarding guard intervals used in 802.11n systems[^5]. ```python # Example Python pseudo-code demonstrating how one could theoretically calculate effective throughput based on given parameters def wifi_7_effective_throughput(mcs_index, gi_duration_ms=0.8): # Simplified formula considering basic principles; actual implementation would be far more complex base_rate = get_base_rate_from_mcs(mcs_index) adjusted_rate = apply_code_rate_and_modulation(base_rate, mcs_index) # Account for overheads due to protocol specifics & physical layer considerations final_throughput = adjust_for_overheads(adjusted_rate) return reduce_by_guard_interval(final_throughput, gi_duration_ms) def get_base_rate_from_mcs(mcs): # Placeholder function returning hypothetical values corresponding to an MCS value pass def apply_code_rate_and_modulation(rate, mcs): # Apply appropriate coding scheme and modulation according to specified MCS pass def adjust_for_overheads(rate): # Adjust calculated raw bitrates accounting for necessary protocols' overheads pass def reduce_by_guard_interval(rate, interval_ms): # Factor in impact from Guard Intervals duration on overall transmission capacity pass ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值