由于项目与学习需要,最近学习了bianchi模型,并在python中进行了公式->代码的转化,仿真结果与ns3结果对比。
本文更多的是理解模型各个部分的含义、把各个简单的推导过程转化为python、ns3对比:
1 理论吞吐与传输概率、传输成功概率、包长、速率、排队时间、成功传输时间、碰撞耗时的关系
2 传输概率、传输成功概率、包长、速率、排队时间、成功传输时间、碰撞耗时的关系这几个参数的简单推导
3 各个公式都有最初的已知量、推导出的中间量、最终的目标吞吐,一级一级的整理就可获得最初已知量和目标吞吐的关系,并将其画图
4 ns3在无实测环境的情况下,是一个比较好的验证环境,对比第三步的图以及仿真结果图,可以验证模型是否符合实测情况
而事实上,建模的标准流程就是以上步骤:根据初始变量、各种场景,列出基本的推导->根据中间量导出吞吐或者延时->算出各个情况下吞吐、延时结果,描点画出折线->ns3设置同样的条件,仿真对应的延时吞吐结果,描点并证明自己的模型可靠
分为3部分
本文为第一部分
第二部分是Bianchi模型、python计算及ns3验证_关于E[P*]的补充-优快云博客
第三部分是验证2~10 STA的情况下,bianchi和ns3对比结果Bianchi模型、python计算及ns3验证_关于2~10 STA验证的补充-优快云博客
bianchi模型简要说明
来源:
https://zhuanlan.zhihu.com/p/24302361https://zhuanlan.zhihu.com/p/24302361
结合2步骤中的python代码看公式:
预设
self.bitrate = 56E6#传输速率,如连续传输56Mbit,需要1s
self.n = 30#STA数目
self.b00 = 0#马尔科夫链回到 0 0状态的概率
self.ACK = 14 * 8#ack包长度 bit
self.SIFS = 10E-6#sifs时间 10us
self.slot = 9E-6#9us
self.DIFS = 3 * 9E-6#difs时间 3*slot
self.H = 2 * 8#头长度 bit
self.E_P = 80#平均包长
self.E_P_star = 100#碰撞包最长平均包长
self.W = 12#初始化窗口大小
self.m = 7#最大退避轮次
self.prop_delay = 0#传播时延
在开始计算前再初始化一次:
bitrate = 1E6
ACK = 112 + 128
SIFS = 28E-6
slot = 50E-6
DIFS = 128E-6
E_P = 8184
E_P_star = E_P
WW = [32, 128]
mm = [3, 5]
H = 272 + 128
prop_delay = 0
nn = range(5, 50)
self.calculate_p_t()
计算冲突概率p和某个STA的发送概率τ:
def calculate_p_t(self):
def equations(x):
p, t = x
my_sum = 0.0
for i in range(0, self.m):
my_sum += (2.0 * p) ** i
##p - 1.0 + (1.0 - t) ** (self.n - 1.0),
##2.0 / (1.0 + self.W + p * self.W * my_sum) - t
return ( p - 1.0 + (1.0 - t) ** (self.n - 1.0), 2.0 / (1.0 + self.W + p * self.W * my_sum) - t )
self.p, self.t = fsolve(equations, (0.1, 0.1))
print("System solved, error (p, tau): " + str(equations((self.p, self.t))))
其中起始窗口Wmin、最大重试次数m、STA数目n都是已知的。
my_sum 是Σ求和结果,calculate_p_t联立以上公式并求出p与t的结果——上式只有p和τ两个未知数,可以解出结果。
self.calculate_Ptr()
def calculate_Ptr(self):
self.P_tr = 1.0 - (1.0 - self.t) ** self.n
计算n个STA,除了大家都没尝试传输以外的情况——有一个或多个STA尝试传输——其中包含传输成功和碰撞两种情况。
中间值已知
self.calculate_Ps()
def calculate_Ps(self):
self.Ps = self.n * self.t * (1.0 - self.t) ** (self.n - 1) / self.P_tr
计算在有STA传输的情况下,只有一个STA尝试传输而其他STA都没尝试传输的概率,共有n个STA,所以是n倍。
self.calculate_Ts()
def calculate_Ts(self):
self.T_s = self.H / self.bitrate + self.E_P / self.bitrate + self.SIFS + self.prop_delay + self.ACK / self.bitrate + self.DIFS + self.prop_delay
self.calculate_Tc()
def calculate_Tc(self):
self.T_c = self.H / self.bitrate + self.E_P_star / self.bitrate + self.DIFS + self.prop_delay
Ts是成功传输耗时,Tc是碰撞传输耗时,其中H是头用时,EP是负载也就是数据部分用时,ack是回ACK用时,SIFS是负载和ack之间的等待延时,DIFS是传输成功或传输收不到ack之后的等待延时 、δ是传播时延——不过事实上SIFS和DIFS本来就是等传播时延的时间,传播时延含了,所以self.prop_delay = 0
其中Tc的计算Ep*是碰撞包的最长包的平均值,如果假设所有的包长都相等,则Ep=Ep*,我们这里取值(如不假设包长相等,参看Bianchi模型、python计算及ns3验证_关于E[P*]的补充-优快云博客文章浏览阅读21次。bianchi的原文,在包长都选一样的情况下,P=E[P]=E[P*],也就是说正常传输、碰撞的payload耗时都是一样的——不过bianchi分析了如果引入不同的长度会造成何种影响:k个STA包碰撞的情况下,决定E[P*]的是k个STA中时间占用最长的那个,事实上此公式很让人不解,左侧需要求值是平均最大包长,右边分母是概率,分子左半边也是概率,分母右半边如果按照PDF看的话也是概率,如果按照CDF看就是概率的积分,再乘以1作为取值,就合理了。https://blog.youkuaiyun.com/Mr_liu_666/article/details/142748859)
self.E_P = 80
self.E_P_star = 100
Ep Ep* H ACK的长度都已知,除以已知的bitrate就是对应时间,δ DIFS SIFS都已知
self.calculate_S()
def calculate_S(self):
self.S = self.Ps * self.P_tr * (self.E_P / self.bitrate) / (
(1.0 - self.P_tr) * self.slot + self.P_tr * self.Ps * self.T_s + self.P_tr * (1.0 - self.Ps) * self.T_c)
中间值都已知
self.calculate_b00()
def calculate_b00(self):
self.b00 = 2.0 * (1.0 - 2.0 * self.p) * (1.0 - self.p) / ((1.0 - 2.0 * self.p) * (self.W + 1) + self.p * self.W * (1.0 - (2.0 * self.p)**self.m))
初始窗口W、最大退避重试次数m已知,中间量已知
python公式化
来源:
源码内容:
__author__ = 'antonio franco'
'''
Copyright (C) 2018 Antonio Franco (antonio_franco@live.it)
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
'''
from scipy.optimize import fsolve
import matplotlib.pyplot as plt
class Bianchi:
# Calculates the throughput of a saturated IEEE 802.11 WLAN basic scheme according to:
# G.Bianchi, "Performance analysis of the IEEE 802.11 distributed coordination function," in IEEE
# Journal on Selected Areas in Communications, vol. 18, no. 3, pp. 535 - 547, March 2000.
# doi: 10.1109 / 49.840210
def __init__(self, bitrate, n, ACK, SIFS, slot, DIFS, E_P, E_P_star, W, m, H, prop_delay):
# INPUT:
# bitrate: raw bitrate in bps
# n: number of STAs
# ACK: ACK length in bits
# SIFS: SIFS duration in seconds
# slot: slot duration in seconds
# DIFS: DIFS duration in seconds
# E_P: average packet payload size in bits
# E_P_star: average length of the longest packet payload involved in a collision in bit (for an example, see eq. 16 in the paper)
# W: Minimum contention window size in slots
# m: Retry limit
# H: Header size in bits
# prop_delay: Propagation delay in seconds
#
# OUTPUT:
# S: normalized system throughput, defined as the fraction of time the channel is used to successfully transmit payload bits.
# p: the probability of a collision seen by a packet being transmitted on the channel
# t: the probability that a station transmits in a randomly chosen slot time
# Ps: the probability that a transmission occurring on the channel is successful is given by the probability that exactly one station transmits on the channel, conditioned on the fact that at least one station transmits
# P_tr: the probability that there is at least one transmission in the considered slot time
# T_s: the average time the channel is sensed busy, in seconds
# T_c: the average time the channel is sensed busy by each station during a collision in seconds.
# independent varz
self.bitrate = 56E6
self.n = 30
self.b00 = 0
self.ACK = 14 * 8
self.SIFS = 10E-6
self.slot = 9E-6
self.DIFS = 3 * 9E-6
self.H = 2 * 8
self.E_P = 80
self.E_P_star = 100
self.W = 12
self.m = 7
self.prop_delay = 0
# dependent varz
self.p = 0
self.t = 0
self.Ps = 0
self.P_tr = 0
self.T_s = 0
self.T_c = 0
self.S = 0
self.bitrate = bitrate
self.n = n
self.ACK = ACK
self.SIFS = SIFS
self.slot = slot
self.DIFS = DIFS
self.E_P = E_P
self.E_P_star = E_P_star
self.W = W
self.m = m
self.H = H
self.prop_delay = prop_delay
self.calculate_p_t()
self.calculate_Ptr()
self.calculate_Ps()
self.calculate_Ts()
self.calculate_Tc()
self.calculate_S()
self.calculate_b00()
def calculate_b00(self):
self.b00 = 2.0 * (1.0 - 2.0 * self.p) * (1.0 - self.p) / ((1.0 - 2.0 * self.p) * (self.W + 1) + self.p * self.W * (1.0 - (2.0 * self.p)**self.m))
def calculate_b(self, i, k):
if i < self.m:
W_i = 2.0 ** i * self.W
b_i0 = self.p ** i * self.b00
else:
W_i = 2.0 ** self.m * self.W
b_i0 = self.p ** self.m / (1 - self.p) * self.b00
return (W_i - k) / W_i * b_i0
def check_p_t(self):
c1 = self.p - 1.0 + (1.0 - self.t) ** (self.n - 1.0) <= 1.49012e-08
my_sum = 0.0
for i in range(0, self.m):
my_sum += (2.0 * self.p) ** i
c2 = 2.0 / (1.0 + self.W + self.p * self.W * my_sum) - self.t <= 1.49012e-08
return c1 and c2
def calculate_p_t(self):
def equations(x):
p, t = x
my_sum = 0.0
for i in range(0, self.m):
my_sum += (2.0 * p) ** i
return ( p - 1.0 + (1.0 - t) ** (self.n - 1.0), 2.0 / (1.0 + self.W + p * self.W * my_sum) - t )
self.p, self.t = fsolve(equations, (0.1, 0.1))
print ("System solved, error (p, tau): " + str(equations((self.p, self.t))))
def calculate_Ps(self):
self.Ps = self.n * self.t * (1.0 - self.t) ** (self.n - 1) / self.P_tr
def calculate_Ptr(self):
self.P_tr = 1.0 - (1.0 - self.t) ** self.n
def calculate_Ts(self):
self.T_s = self.H / self.bitrate + self.E_P / self.bitrate + self.SIFS + self.prop_delay + self.ACK / self.bitrate + self.DIFS + self.prop_delay
def calculate_Tc(self):
self.T_c = self.H / self.bitrate + self.E_P_star / self.bitrate + self.DIFS + self.prop_delay
def calculate_S(self):
self.S = self.Ps * self.P_tr * (self.E_P / self.bitrate) / (
(1.0 - self.P_tr) * self.slot + self.P_tr * self.Ps * self.T_s + self.P_tr * (1.0 - self.Ps) * self.T_c)
class uniform_helper:
# Calculates the parameters for a uniformly distributed packet length size between P_min and P_max (in bits)
# independent varz
P_min = 0
P_max = 0
#dependent varz
E_P = 0
E_P_star = 0
def __init__(self, P_min, P_max):
self.P_max = P_max
self.P_min = P_min
self.calculate_EP()
self.calculate_E_P_star()
def calculate_EP(self):
self.E_P = (self.P_max - self.P_min) / 2.0
def calculate_E_P_star(self):
self.E_P_star = ( (self.P_max - self.P_min) ** 2.0 - 1 ) / (self.P_max - self.P_min)
if __name__ == "__main__":
# Validation: see Fig.6 Bianchi paper
bitrate = 1E6
ACK = 112 + 128
SIFS = 28E-6
slot = 50E-6
DIFS = 128E-6
E_P = 8184
E_P_star = E_P
WW = [32, 128]
mm = [3, 5]
H = 272 + 128
prop_delay = 0
fig = plt.figure()
ax = fig.gca()
nn = range(5, 50)
for W in WW:
for m in mm:
if m == 5 and W == 128:
continue
S = []
for n in nn:
B = Bianchi(bitrate, n, ACK, SIFS, slot, DIFS, E_P, E_P_star, W, m, H, prop_delay)
S.append(B.S)
if m == 3 and W == 128:
marker = 'o'
elif m == 3 and W == 32:
marker = '^'
else:
marker = 's'
plt.plot(nn, S, label="W = %d m = %d" % (W, m), marker=marker, c='k', markerfacecolor='w')
ax.set_xlabel("Number of Stations")
ax.set_ylabel("Saturation Throughput")
leg = plt.legend(loc='best', fancybox=True, prop={'size': 12})
frame = leg.get_frame()
frame.set_alpha(0.5) # make it semi-transparent
plt.show()
ns对比
源码:src/wifi/examples/wifi-bianchi.cc,选择默认配置,输出为一个plt文件,画图后为:
即在11a模式下,包长1500,adhoc链接、54M的OFDM调制、从5到50个STA,ns3的仿真总吞吐与bianchi计算吞吐对比。
不过他的bianchi结果不是算出来的,是作者算好后放到源码里面查表查出来的,导致只有5个STA、10个STA,想获得更细致的仿真对比需要稍作修改。获取各个数量STA对应的吞吐结果的具体方法在2部分已经描述。
/// Table of the expected values for EIFS
std::map<std::string /* mode */,
std::map<unsigned int /* number of nodes */, double /* calculated throughput */>>
bianchiResultsEifs = {
/* 11b */
{"DsssRate1Mbps",
{
{5, 0.8418},
{10, 0.7831},
{15, 0.7460},
{20, 0.7186},
{25, 0.6973},
{30, 0.6802},
{35, 0.6639},
{40, 0.6501},
{45, 0.6386},
{50, 0.6285},
}},
{"DsssRate2Mbps",
{
{5, 1.6170},
{10, 1.5075},
{15, 1.4371},
{20, 1.3849},
{25, 1.3442},
{30, 1.3115},
{35, 1.2803},
{40, 1.2538},
{45, 1.2317},
{50, 1.2124},
}},
{"DsssRate5_5Mbps",
{
{5, 3.8565},
{10, 3.6170},
{15, 3.4554},
{20, 3.3339},
{25, 3.2385},
{30, 3.1613},
{35, 3.0878},
{40, 3.0249},
{45, 2.9725},
{50, 2.9266},
}},
{"DsssRate11Mbps",
{
{5, 6.3821},
{10, 6.0269},
{15, 5.7718},
{20, 5.5765},
{25, 5.4217},
{30, 5.2958},
{35, 5.1755},
{40, 5.0722},
{45, 4.9860},
{50, 4.9103},
}},
/* 11a */
{"OfdmRate6Mbps",
{
{5, 4.6899},
{10, 4.3197},
{15, 4.1107},
{20, 3.9589},
{25, 3.8478},
{30, 3.7490},
{35, 3.6618},
{40, 3.5927},
{45, 3.5358},
{50, 3.4711},
}},
{"OfdmRate9Mbps",
{
{5, 6.8188},
{10, 6.2885},
{15, 5.9874},
{20, 5.7680},
{25, 5.6073},
{30, 5.4642},
{35, 5.3378},
{40, 5.2376},
{45, 5.1551},
{50, 5.0612},
}},
{"OfdmRate12Mbps",
{
{5, 8.8972},
{10, 8.2154},
{15, 7.8259},
{20, 7.5415},
{25, 7.3329},
{30, 7.1469},
{35, 6.9825},
{40, 6.8521},
{45, 6.7447},
{50, 6.6225},
}},
{"OfdmRate18Mbps",
{
{5, 12.6719},
{10, 11.7273},
{15, 11.1814},
{20, 10.7810},
{25, 10.4866},
{30, 10.2237},
{35, 9.9910},
{40, 9.8061},
{45, 9.6538},
{50, 9.4804},
}},
{"OfdmRate24Mbps",
{
{5, 16.0836},
{10, 14.9153},
{15, 14.2327},
{20, 13.7300},
{25, 13.3595},
{30, 13.0281},
{35, 12.7343},
{40, 12.5008},
{45, 12.3083},
{50, 12.0889},
}},
{"OfdmRate36Mbps",
{
{5, 22.0092},
{10, 20.4836},
{15, 19.5743},
{20, 18.8997},
{25, 18.4002},
{30, 17.9524},
{35, 17.5545},
{40, 17.2377},
{45, 16.9760},
{50, 16.6777},
}},
{"OfdmRate48Mbps",
{
{5, 26.8382},
{10, 25.0509},
{15, 23.9672},
{20, 23.1581},
{25, 22.5568},
{30, 22.0165},
{35, 21.5355},
{40, 21.1519},
{45, 20.8348},
{50, 20.4729},
}},
{"OfdmRate54Mbps",
{
{5, 29.2861},
{10, 27.3763},
{15, 26.2078},
{20, 25.3325},
{25, 24.6808},
{30, 24.0944},
{35, 23.5719},
{40, 23.1549},
{45, 22.8100},
{50, 22.4162},
}},
/* 11g */
{"ErpOfdmRate6Mbps",
{
{5, 4.6899},
{10, 4.3197},
{15, 4.1107},
{20, 3.9589},
{25, 3.8478},
{30, 3.7490},
{35, 3.6618},
{40, 3.5927},
{45, 3.5358},
{50, 3.4711},
}},
{"ErpOfdmRate9Mbps",
{
{5, 6.8188},
{10, 6.2885},
{15, 5.9874},
{20, 5.7680},
{25, 5.6073},
{30, 5.4642},
{35, 5.3378},
{40, 5.2376},
{45, 5.1551},
{50, 5.0612},
}},
{"ErpOfdmRate12Mbps",
{
{5, 8.8972},
{10, 8.2154},
{15, 7.8259},
{20, 7.5415},
{25, 7.3329},
{30, 7.1469},
{35, 6.9825},
{40, 6.8521},
{45, 6.7447},
{50, 6.6225},
}},
{"ErpOfdmRate18Mbps",
{
{5, 12.6719},
{10, 11.7273},
{15, 11.1814},
{20, 10.7810},
{25, 10.4866},
{30, 10.2237},
{35, 9.9910},
{40, 9.8061},
{45, 9.6538},
{50, 9.4804},
}},
{"ErpOfdmRate24Mbps",
{
{5, 16.0836},
{10, 14.9153},
{15, 14.2327},
{20, 13.7300},
{25, 13.3595},
{30, 13.0281},
{35, 12.7343},
{40, 12.5008},
{45, 12.3083},
{50, 12.0889},
}},
{"ErpOfdmRate36Mbps",
{
{5, 22.0092},
{10, 20.4836},
{15, 19.5743},
{20, 18.8997},
{25, 18.4002},
{30, 17.9524},
{35, 17.5545},
{40, 17.2377},
{45, 16.9760},
{50, 16.6777},
}},
{"ErpOfdmRate48Mbps",
{
{5, 26.8382},
{10, 25.0509},
{15, 23.9672},
{20, 23.1581},
{25, 22.5568},
{30, 22.0165},
{35, 21.5355},
{40, 21.1519},
{45, 20.8348},
{50, 20.4729},
}},
{"ErpOfdmRate54Mbps",
{
{5, 29.2861},
{10, 27.3763},
{15, 26.2078},
{20, 25.3325},
{25, 24.6808},
{30, 24.0944},
{35, 23.5719},
{40, 23.1549},
{45, 22.8100},
{50, 22.4162},
}},
/* 11ax, no frame aggregation */
{"HeMcs0_20MHz",
{
{5, 6.3381},
{10, 5.8172},
{15, 5.5223},
{20, 5.3146},
{25, 5.1525},
{30, 5.0187},
{35, 4.9039},
{40, 4.8034},
{45, 4.7134},
{50, 4.6317},
}},
{"HeMcs1_20MHz",
{
{5, 11.6580},
{10, 10.7369},
{15, 10.2068},
{20, 9.8309},
{25, 9.5365},
{30, 9.2930},
{35, 9.0837},
{40, 8.9001},
{45, 8.7355},
{50, 8.5860},
}},
{"HeMcs2_20MHz",
{
{5, 15.8572},
{10, 14.6445},
{15, 13.9367},
{20, 13.4323},
{25, 13.0361},
{30, 12.7076},
{35, 12.4249},
{40, 12.1766},
{45, 11.9538},
{50, 11.7511},
}},
{"HeMcs3_20MHz",
{
{5, 19.7457},
{10, 18.2820},
{15, 17.4163},
{20, 16.7963},
{25, 16.3078},
{30, 15.9021},
{35, 15.5524},
{40, 15.2449},
{45, 14.9687},
{50, 14.7173},
}},
{"HeMcs4_20MHz",
{
{5, 25.8947},
{10, 24.0721},
{15, 22.9698},
{20, 22.1738},
{25, 21.5437},
{30, 21.0186},
{35, 20.5650},
{40, 20.1654},
{45, 19.8059},
{50, 19.4784},
}},
{"HeMcs5_20MHz",
{
{5, 30.0542},
{10, 28.0155},
{15, 26.7625},
{20, 25.8523},
{25, 25.1295},
{30, 24.5258},
{35, 24.0034},
{40, 23.5426},
{45, 23.1277},
{50, 22.7492},
}},
{"HeMcs6_20MHz",
{
{5, 32.6789},
{10, 30.5150},
{15, 29.1708},
{20, 28.1907},
{25, 27.4107},
{30, 26.7583},
{35, 26.1931},
{40, 25.6941},
{45, 25.2446},
{50, 24.8343},
}},
{"HeMcs7_20MHz",
{
{5, 34.1710},
{10, 31.9398},
{15, 30.5451},
{20, 29.5261},
{25, 28.7140},
{30, 28.0342},
{35, 27.4449},
{40, 26.9245},
{45, 26.4554},
{50, 26.0271},
}},
{"HeMcs8_20MHz",
{
{5, 37.6051},
{10, 35.2296},
{15, 33.7228},
{20, 32.6160},
{25, 31.7314},
{30, 30.9895},
{35, 30.3455},
{40, 29.7760},
{45, 29.2623},
{50, 28.7929},
}},
{"HeMcs9_20MHz",
{
{5, 39.5947},
{10, 37.1424},
{15, 35.5731},
{20, 34.4169},
{25, 33.4911},
{30, 32.7138},
{35, 32.0385},
{40, 31.4410},
{45, 30.9016},
{50, 30.4086},
}},
{"HeMcs10_20MHz",
{
{5, 39.5947},
{10, 37.1424},
{15, 35.5731},
{20, 34.4169},
{25, 33.4911},
{30, 32.7138},
{35, 32.0385},
{40, 31.4410},
{45, 30.9016},
{50, 30.4086},
}},
{"HeMcs11_20MHz",
{
{5, 41.8065},
{10, 39.2749},
{15, 37.6383},
{20, 36.4282},
{25, 35.4575},
{30, 34.6414},
{35, 33.9316},
{40, 33.3031},
{45, 32.7355},
{50, 32.2164},
}},
{"HeMcs0_40MHz",
{
{5, 11.4999},
{10, 10.5902},
{15, 10.0669},
{20, 9.6960},
{25, 9.4055},
{30, 9.1652},
{35, 8.9587},
{40, 8.7775},
{45, 8.6151},
{50, 8.4676},
}},
{"HeMcs1_40MHz",
{
{5, 19.5937},
{10, 18.1394},
{15, 17.2798},
{20, 16.6642},
{25, 16.1793},
{30, 15.7766},
{35, 15.4295},
{40, 15.1242},
{45, 14.8502},
{50, 14.6007},
}},
{"HeMcs2_40MHz",
{
{5, 25.6338},
{10, 23.8255},
{15, 22.7329},
{20, 21.9442},
{25, 21.3200},
{30, 20.7999},
{35, 20.3506},
{40, 19.9549},
{45, 19.5990},
{50, 19.2746},
}},
{"HeMcs3_40MHz",
{
{5, 30.0542},
{10, 28.0155},
{15, 26.7625},
{20, 25.8523},
{25, 25.1295},
{30, 24.5258},
{35, 24.0034},
{40, 23.5426},
{45, 23.1277},
{50, 22.7492},
}},
{"HeMcs4_40MHz",
{
{5, 37.6051},
{10, 35.2296},
{15, 33.7228},
{20, 32.6160},
{25, 31.7314},
{30, 30.9895},
{35, 30.3455},
{40, 29.7760},
{45, 29.2623},
{50, 28.7929},
}},
{"HeMcs5_40MHz",
{
{5, 41.8065},
{10, 39.2749},
{15, 37.6383},
{20, 36.4282},
{25, 35.4575},
{30, 34.6414},
{35, 33.9316},
{40, 33.3031},
{45, 32.7355},
{50, 32.2164},
}},
{"HeMcs6_40MHz",
{
{5, 44.2801},
{10, 41.6672},
{15, 39.9580},
{20, 38.6892},
{25, 37.6692},
{30, 36.8103},
{35, 36.0625},
{40, 35.3998},
{45, 34.8008},
{50, 34.2528},
}},
{"HeMcs7_40MHz",
{
{5, 44.2801},
{10, 41.6672},
{15, 39.9580},
{20, 38.6892},
{25, 37.6692},
{30, 36.8103},
{35, 36.0625},
{40, 35.3998},
{45, 34.8008},
{50, 34.2528},
}},
{"HeMcs8_40MHz",
{
{5, 47.0648},
{10, 44.3699},
{15, 42.5825},
{20, 41.2495},
{25, 40.1751},
{30, 39.2689},
{35, 38.4790},
{40, 37.7781},
{45, 37.1443},
{50, 36.5639},
}},
{"HeMcs9_40MHz",
{
{5, 50.2233},
{10, 47.4474},
{15, 45.5760},
{20, 44.1727},
{25, 43.0382},
{30, 42.0794},
{35, 41.2425},
{40, 40.4991},
{45, 39.8262},
{50, 39.2095},
}},
{"HeMcs10_40MHz",
{
{5, 50.2233},
{10, 47.4474},
{15, 45.5760},
{20, 44.1727},
{25, 43.0382},
{30, 42.0794},
{35, 41.2425},
{40, 40.4991},
{45, 39.8262},
{50, 39.2095},
}},
{"HeMcs11_40MHz",
{
{5, 50.2233},
{10, 47.4474},
{15, 45.5760},
{20, 44.1727},
{25, 43.0382},
{30, 42.0794},
{35, 41.2425},
{40, 40.4991},
{45, 39.8262},
{50, 39.2095},
}},
{"HeMcs0_80MHz",
{
{5, 19.6542},
{10, 18.1962},
{15, 17.3342},
{20, 16.7168},
{25, 16.2305},
{30, 15.8265},
{35, 15.4784},
{40, 15.1723},
{45, 14.8973},
{50, 14.6471},
}},
{"HeMcs1_80MHz",
{
{5, 30.9311},
{10, 28.8495},
{15, 27.5657},
{20, 26.6320},
{25, 25.8899},
{30, 25.2699},
{35, 24.7332},
{40, 24.2595},
{45, 23.8330},
{50, 23.4439},
}},
{"HeMcs2_80MHz",
{
{5, 37.0575},
{10, 34.7039},
{15, 33.2146},
{20, 32.1216},
{25, 31.2485},
{30, 30.5164},
{35, 29.8811},
{40, 29.3194},
{45, 28.8127},
{50, 28.3499},
}},
{"HeMcs3_80MHz",
{
{5, 41.8065},
{10, 39.2749},
{15, 37.6383},
{20, 36.4282},
{25, 35.4575},
{30, 34.6414},
{35, 33.9316},
{40, 33.3031},
{45, 32.7355},
{50, 32.2164},
}},
{"HeMcs4_80MHz",
{
{5, 47.0648},
{10, 44.3699},
{15, 42.5825},
{20, 41.2495},
{25, 40.1751},
{30, 39.2689},
{35, 38.4790},
{40, 37.7781},
{45, 37.1443},
{50, 36.5639},
}},
{"HeMcs5_80MHz",
{
{5, 50.2233},
{10, 47.4474},
{15, 45.5760},
{20, 44.1727},
{25, 43.0382},
{30, 42.0794},
{35, 41.2425},
{40, 40.4991},
{45, 39.8262},
{50, 39.2095},
}},
{"HeMcs6_80MHz",
{
{5, 53.8362},
{10, 50.9837},
{15, 49.0221},
{20, 47.5418},
{25, 46.3407},
{30, 45.3233},
{35, 44.4337},
{40, 43.6425},
{45, 42.9255},
{50, 42.2678},
}},
{"HeMcs7_80MHz",
{
{5, 53.8362},
{10, 50.9837},
{15, 49.0221},
{20, 47.5418},
{25, 46.3407},
{30, 45.3233},
{35, 44.4337},
{40, 43.6425},
{45, 42.9255},
{50, 42.2678},
}},
{"HeMcs8_80MHz",
{
{5, 53.8362},
{10, 50.9837},
{15, 49.0221},
{20, 47.5418},
{25, 46.3407},
{30, 45.3233},
{35, 44.4337},
{40, 43.6425},
{45, 42.9255},
{50, 42.2678},
}},
{"HeMcs9_80MHz",
{
{5, 58.0092},
{10, 55.0896},
{15, 53.0321},
{20, 51.4672},
{25, 50.1922},
{30, 49.1091},
{35, 48.1601},
{40, 47.3148},
{45, 46.5478},
{50, 45.8436},
}},
{"HeMcs10_80MHz",
{
{5, 58.0092},
{10, 55.0896},
{15, 53.0321},
{20, 51.4672},
{25, 50.1922},
{30, 49.1091},
{35, 48.1601},
{40, 47.3148},
{45, 46.5478},
{50, 45.8436},
}},
{"HeMcs11_80MHz",
{
{5, 58.0092},
{10, 55.0896},
{15, 53.0321},
{20, 51.4672},
{25, 50.1922},
{30, 49.1091},
{35, 48.1601},
{40, 47.3148},
{45, 46.5478},
{50, 45.8436},
}},
{"HeMcs0_160MHz",
{
{5, 29.8428},
{10, 27.8145},
{15, 26.5689},
{20, 25.6645},
{25, 24.9463},
{30, 24.3466},
{35, 23.8276},
{40, 23.3699},
{45, 22.9578},
{50, 22.5819},
}},
{"HeMcs1_160MHz",
{
{5, 41.1308},
{10, 38.6227},
{15, 37.0064},
{20, 35.8126},
{25, 34.8556},
{30, 34.0513},
{35, 33.3520},
{40, 32.7329},
{45, 32.1739},
{50, 31.6628},
}},
{"HeMcs2_160MHz",
{
{5, 46.2101},
{10, 43.5393},
{15, 41.7755},
{20, 40.4620},
{25, 39.4041},
{30, 38.5123},
{35, 37.7353},
{40, 37.0461},
{45, 36.4229},
{50, 35.8524},
}},
{"HeMcs3_160MHz",
{
{5, 50.2233},
{10, 47.4474},
{15, 45.5760},
{20, 44.1727},
{25, 43.0382},
{30, 42.0794},
{35, 41.2425},
{40, 40.4991},
{45, 39.8262},
{50, 39.2095},
}},
{"HeMcs4_160MHz",
{
{5, 53.8362},
{10, 50.9837},
{15, 49.0221},
{20, 47.5418},
{25, 46.3407},
{30, 45.3233},
{35, 44.4337},
{40, 43.6425},
{45, 42.9255},
{50, 42.2678},
}},
{"HeMcs5_160MHz",
{
{5, 58.0092},
{10, 55.0896},
{15, 53.0321},
{20, 51.4672},
{25, 50.1922},
{30, 49.1091},
{35, 48.1601},
{40, 47.3148},
{45, 46.5478},
{50, 45.8436},
}},
{"HeMcs6_160MHz",
{
{5, 58.0092},
{10, 55.0896},
{15, 53.0321},
{20, 51.4672},
{25, 50.1922},
{30, 49.1091},
{35, 48.1601},
{40, 47.3148},
{45, 46.5478},
{50, 45.8436},
}},
{"HeMcs7_160MHz",
{
{5, 58.0092},
{10, 55.0896},
{15, 53.0321},
{20, 51.4672},
{25, 50.1922},
{30, 49.1091},
{35, 48.1601},
{40, 47.3148},
{45, 46.5478},
{50, 45.8436},
}},
{"HeMcs8_160MHz",
{
{5, 58.0092},
{10, 55.0896},
{15, 53.0321},
{20, 51.4672},
{25, 50.1922},
{30, 49.1091},
{35, 48.1601},
{40, 47.3148},
{45, 46.5478},
{50, 45.8436},
}},
{"HeMcs9_160MHz",
{
{5, 62.8834},
{10, 59.9147},
{15, 57.7564},
{20, 56.0992},
{25, 54.7419},
{30, 53.5850},
{35, 52.5689},
{40, 51.6620},
{45, 50.8379},
{50, 50.0803},
}},
{"HeMcs10_160MHz",
{
{5, 62.8834},
{10, 59.9147},
{15, 57.7564},
{20, 56.0992},
{25, 54.7419},
{30, 53.5850},
{35, 52.5689},
{40, 51.6620},
{45, 50.8379},
{50, 50.0803},
}},
{"HeMcs11_160MHz",
{
{5, 62.8834},
{10, 59.9147},
{15, 57.7564},
{20, 56.0992},
{25, 54.7419},
{30, 53.5850},
{35, 52.5689},
{40, 51.6620},
{45, 50.8379},
{50, 50.0803},
}},
};
/// Table of the expected values for DIFS
std::map<std::string /* mode */,
std::map<unsigned int /* number of nodes */, double /* calculated throughput */>>
bianchiResultsDifs = {
/* 11b */
{"DsssRate1Mbps",
{
{5, 0.8437},
{10, 0.7861},
{15, 0.7496},
{20, 0.7226},
{25, 0.7016},
{30, 0.6847},
{35, 0.6686},
{40, 0.6549},
{45, 0.6435},
{50, 0.6336},
}},
{"DsssRate2Mbps",
{
{5, 1.6228},
{10, 1.5168},
{15, 1.4482},
{20, 1.3972},
{25, 1.3574},
{30, 1.3253},
{35, 1.2947},
{40, 1.2687},
{45, 1.2469},
{50, 1.2279},
}},
{"DsssRate5_5Mbps",
{
{5, 3.8896},
{10, 3.6707},
{15, 3.5203},
{20, 3.4063},
{25, 3.3161},
{30, 3.2429},
{35, 3.1729},
{40, 3.1128},
{45, 3.0625},
{50, 3.0184},
}},
{"DsssRate11Mbps",
{
{5, 6.4734},
{10, 6.1774},
{15, 5.9553},
{20, 5.7819},
{25, 5.6429},
{30, 5.5289},
{35, 5.4191},
{40, 5.3243},
{45, 5.2446},
{50, 5.1745},
}},
/* 11a */
{"OfdmRate6Mbps",
{
{5, 4.7087},
{10, 4.3453},
{15, 4.1397},
{20, 3.9899},
{25, 3.8802},
{30, 3.7824},
{35, 3.6961},
{40, 3.6276},
{45, 3.5712},
{50, 3.5071},
}},
{"OfdmRate9Mbps",
{
{5, 6.8586},
{10, 6.3431},
{15, 6.0489},
{20, 5.8340},
{25, 5.6762},
{30, 5.5355},
{35, 5.4110},
{40, 5.3122},
{45, 5.2307},
{50, 5.1380},
}},
{"OfdmRate12Mbps",
{
{5, 8.9515},
{10, 8.2901},
{15, 7.9102},
{20, 7.6319},
{25, 7.4274},
{30, 7.2447},
{35, 7.0829},
{40, 6.9544},
{45, 6.8485},
{50, 6.7278},
}},
{"OfdmRate18Mbps",
{
{5, 12.7822},
{10, 11.8801},
{15, 11.3543},
{20, 10.9668},
{25, 10.6809},
{30, 10.4249},
{35, 10.1978},
{40, 10.0171},
{45, 9.8679},
{50, 9.6978},
}},
{"OfdmRate24Mbps",
{
{5, 16.2470},
{10, 15.1426},
{15, 14.4904},
{20, 14.0072},
{25, 13.6496},
{30, 13.3288},
{35, 13.0436},
{40, 12.8164},
{45, 12.6286},
{50, 12.4144},
}},
{"OfdmRate36Mbps",
{
{5, 22.3164},
{10, 20.9147},
{15, 20.0649},
{20, 19.4289},
{25, 18.9552},
{30, 18.5284},
{35, 18.1476},
{40, 17.8434},
{45, 17.5915},
{50, 17.3036},
}},
{"OfdmRate48Mbps",
{
{5, 27.2963},
{10, 25.6987},
{15, 24.7069},
{20, 23.9578},
{25, 23.3965},
{30, 22.8891},
{35, 22.4350},
{40, 22.0713},
{45, 21.7696},
{50, 21.4243},
}},
{"OfdmRate54Mbps",
{
{5, 29.8324},
{10, 28.1519},
{15, 27.0948},
{20, 26.2925},
{25, 25.6896},
{30, 25.1434},
{35, 24.6539},
{40, 24.2613},
{45, 23.9353},
{50, 23.5618},
}},
/* 11g */
{"ErpOfdmRate6Mbps",
{
{5, 4.7087},
{10, 4.3453},
{15, 4.1397},
{20, 3.9899},
{25, 3.8802},
{30, 3.7824},
{35, 3.6961},
{40, 3.6276},
{45, 3.5712},
{50, 3.5071},
}},
{"ErpOfdmRate9Mbps",
{
{5, 6.8586},
{10, 6.3431},
{15, 6.0489},
{20, 5.8340},
{25, 5.6762},
{30, 5.5355},
{35, 5.4110},
{40, 5.3122},
{45, 5.2307},
{50, 5.1380},
}},
{"ErpOfdmRate12Mbps",
{
{5, 8.9515},
{10, 8.2901},
{15, 7.9102},
{20, 7.6319},
{25, 7.4274},
{30, 7.2447},
{35, 7.0829},
{40, 6.9544},
{45, 6.8485},
{50, 6.7278},
}},
{"ErpOfdmRate18Mbps",
{
{5, 12.7822},
{10, 11.8801},
{15, 11.3543},
{20, 10.9668},
{25, 10.6809},
{30, 10.4249},
{35, 10.1978},
{40, 10.0171},
{45, 9.8679},
{50, 9.6978},
}},
{"ErpOfdmRate24Mbps",
{
{5, 16.2470},
{10, 15.1426},
{15, 14.4904},
{20, 14.0072},
{25, 13.6496},
{30, 13.3288},
{35, 13.0436},
{40, 12.8164},
{45, 12.6286},
{50, 12.4144},
}},
{"ErpOfdmRate36Mbps",
{
{5, 22.3164},
{10, 20.9147},
{15, 20.0649},
{20, 19.4289},
{25, 18.9552},
{30, 18.5284},
{35, 18.1476},
{40, 17.8434},
{45, 17.5915},
{50, 17.3036},
}},
{"ErpOfdmRate48Mbps",
{
{5, 27.2963},
{10, 25.6987},
{15, 24.7069},
{20, 23.9578},
{25, 23.3965},
{30, 22.8891},
{35, 22.4350},
{40, 22.0713},
{45, 21.7696},
{50, 21.4243},
}},
{"ErpOfdmRate54Mbps",
{
{5, 29.8324},
{10, 28.1519},
{15, 27.0948},
{20, 26.2925},
{25, 25.6896},
{30, 25.1434},
{35, 24.6539},
{40, 24.2613},
{45, 23.9353},
{50, 23.5618},
}},
/* 11ax, no frame aggregation */
{"HeMcs0_20MHz",
{
{5, 6.3746},
{10, 5.8670},
{15, 5.5782},
{20, 5.3742},
{25, 5.2147},
{30, 5.0829},
{35, 4.9696},
{40, 4.8703},
{45, 4.7813},
{50, 4.7004},
}},
{"HeMcs1_20MHz",
{
{5, 11.7574},
{10, 10.8735},
{15, 10.3606},
{20, 9.9954},
{25, 9.7084},
{30, 9.4704},
{35, 9.2654},
{40, 9.0853},
{45, 8.9235},
{50, 8.7763},
}},
{"HeMcs2_20MHz",
{
{5, 16.0419},
{10, 14.8998},
{15, 14.2252},
{20, 13.7413},
{25, 13.3594},
{30, 13.0417},
{35, 12.7674},
{40, 12.5258},
{45, 12.3086},
{50, 12.1107},
}},
{"HeMcs3_20MHz",
{
{5, 20.0089},
{10, 18.6480},
{15, 17.8309},
{20, 17.2410},
{25, 16.7736},
{30, 16.3837},
{35, 16.0465},
{40, 15.7491},
{45, 15.4813},
{50, 15.2369},
}},
{"HeMcs4_20MHz",
{
{5, 26.3492},
{10, 24.7107},
{15, 23.6964},
{20, 22.9553},
{25, 22.3640},
{30, 21.8683},
{35, 21.4379},
{40, 21.0571},
{45, 20.7134},
{50, 20.3991},
}},
{"HeMcs5_20MHz",
{
{5, 30.6683},
{10, 28.8843},
{15, 27.7540},
{20, 26.9210},
{25, 26.2528},
{30, 25.6906},
{35, 25.2012},
{40, 24.7671},
{45, 24.3746},
{50, 24.0151},
}},
{"HeMcs6_20MHz",
{
{5, 33.4062},
{10, 31.5485},
{15, 30.3527},
{20, 29.4662},
{25, 28.7527},
{30, 28.1508},
{35, 27.6259},
{40, 27.1597},
{45, 26.7376},
{50, 26.3507},
}},
{"HeMcs7_20MHz",
{
{5, 34.9671},
{10, 33.0739},
{15, 31.8436},
{20, 30.9282},
{25, 30.1900},
{30, 29.5665},
{35, 29.0221},
{40, 28.5382},
{45, 28.0997},
{50, 27.6975},
}},
{"HeMcs8_20MHz",
{
{5, 38.5714},
{10, 36.6144},
{15, 35.3124},
{20, 34.3355},
{25, 33.5438},
{30, 32.8728},
{35, 32.2854},
{40, 31.7623},
{45, 31.2874},
{50, 30.8512},
}},
{"HeMcs9_20MHz",
{
{5, 40.6674},
{10, 38.6851},
{15, 37.3466},
{20, 36.3371},
{25, 35.5165},
{30, 34.8197},
{35, 34.2087},
{40, 33.6638},
{45, 33.1688},
{50, 32.7137},
}},
{"HeMcs10_20MHz",
{
{5, 40.6674},
{10, 38.6851},
{15, 37.3466},
{20, 36.3371},
{25, 35.5165},
{30, 34.8197},
{35, 34.2087},
{40, 33.6638},
{45, 33.1688},
{50, 32.7137},
}},
{"HeMcs11_20MHz",
{
{5, 43.0043},
{10, 41.0039},
{15, 39.6294},
{20, 38.5865},
{25, 37.7358},
{30, 37.0116},
{35, 36.3756},
{40, 35.8076},
{45, 35.2909},
{50, 34.8154},
}},
{"HeMcs0_40MHz",
{
{5, 11.6208},
{10, 10.7566},
{15, 10.2544},
{20, 9.8965},
{25, 9.6151},
{30, 9.3815},
{35, 9.1804},
{40, 9.0035},
{45, 8.8446},
{50, 8.7000},
}},
{"HeMcs1_40MHz",
{
{5, 19.8764},
{10, 18.5328},
{15, 17.7255},
{20, 17.1424},
{25, 16.6803},
{30, 16.2947},
{35, 15.9612},
{40, 15.6668},
{45, 15.4018},
{50, 15.1599},
}},
{"HeMcs2_40MHz",
{
{5, 26.1198},
{10, 24.5088},
{15, 23.5107},
{20, 22.7810},
{25, 22.1986},
{30, 21.7101},
{35, 21.2858},
{40, 20.9104},
{45, 20.5714},
{50, 20.2613},
}},
{"HeMcs3_40MHz",
{
{5, 30.6683},
{10, 28.8843},
{15, 27.7540},
{20, 26.9210},
{25, 26.2528},
{30, 25.6906},
{35, 25.2012},
{40, 24.7671},
{45, 24.3746},
{50, 24.0151},
}},
{"HeMcs4_40MHz",
{
{5, 38.5714},
{10, 36.6144},
{15, 35.3124},
{20, 34.3355},
{25, 33.5438},
{30, 32.8728},
{35, 32.2854},
{40, 31.7623},
{45, 31.2874},
{50, 30.8512},
}},
{"HeMcs5_40MHz",
{
{5, 43.0043},
{10, 41.0039},
{15, 39.6294},
{20, 38.5865},
{25, 37.7358},
{30, 37.0116},
{35, 36.3756},
{40, 35.8076},
{45, 35.2909},
{50, 34.8154},
}},
{"HeMcs6_40MHz",
{
{5, 45.6261},
{10, 43.6185},
{15, 42.2095},
{20, 41.1328},
{25, 40.2509},
{30, 39.4981},
{35, 38.8356},
{40, 38.2430},
{45, 37.7032},
{50, 37.2058},
}},
{"HeMcs7_40MHz",
{
{5, 45.6261},
{10, 43.6185},
{15, 42.2095},
{20, 41.1328},
{25, 40.2509},
{30, 39.4981},
{35, 38.8356},
{40, 38.2430},
{45, 37.7032},
{50, 37.2058},
}},
{"HeMcs8_40MHz",
{
{5, 48.5883},
{10, 46.5892},
{15, 45.1489},
{20, 44.0388},
{25, 43.1252},
{30, 42.3428},
{35, 41.6525},
{40, 41.0338},
{45, 40.4694},
{50, 39.9486},
}},
{"HeMcs9_40MHz",
{
{5, 51.9619},
{10, 49.9941},
{15, 48.5284},
{20, 47.3867},
{25, 46.4416},
{30, 45.6290},
{35, 44.9099},
{40, 44.2640},
{45, 43.6736},
{50, 43.1279},
}},
{"HeMcs10_40MHz",
{
{5, 51.9619},
{10, 49.9941},
{15, 48.5284},
{20, 47.3867},
{25, 46.4416},
{30, 45.6290},
{35, 44.9099},
{40, 44.2640},
{45, 43.6736},
{50, 43.1279},
}},
{"HeMcs11_40MHz",
{
{5, 51.9619},
{10, 49.9941},
{15, 48.5284},
{20, 47.3867},
{25, 46.4416},
{30, 45.6290},
{35, 44.9099},
{40, 44.2640},
{45, 43.6736},
{50, 43.1279},
}},
{"HeMcs0_80MHz",
{
{5, 20.0101},
{10, 18.6928},
{15, 17.8976},
{20, 17.3219},
{25, 16.8648},
{30, 16.4830},
{35, 16.1523},
{40, 15.8603},
{45, 15.5971},
{50, 15.3567},
}},
{"HeMcs1_80MHz",
{
{5, 31.6415},
{10, 29.8575},
{15, 28.7177},
{20, 27.8747},
{25, 27.1971},
{30, 26.6261},
{35, 26.1283},
{40, 25.6865},
{45, 25.2866},
{50, 24.9200},
}},
{"HeMcs2_80MHz",
{
{5, 38.0818},
{10, 36.1730},
{15, 34.9016},
{20, 33.9470},
{25, 33.1729},
{30, 32.5165},
{35, 31.9417},
{40, 31.4295},
{45, 30.9645},
{50, 30.5372},
}},
{"HeMcs3_80MHz",
{
{5, 43.0043},
{10, 41.0039},
{15, 39.6294},
{20, 38.5865},
{25, 37.7358},
{30, 37.0116},
{35, 36.3756},
{40, 35.8076},
{45, 35.2909},
{50, 34.8154},
}},
{"HeMcs4_80MHz",
{
{5, 48.5883},
{10, 46.5892},
{15, 45.1489},
{20, 44.0388},
{25, 43.1252},
{30, 42.3428},
{35, 41.6525},
{40, 41.0338},
{45, 40.4694},
{50, 39.9486},
}},
{"HeMcs5_80MHz",
{
{5, 51.9619},
{10, 49.9941},
{15, 48.5284},
{20, 47.3867},
{25, 46.4416},
{30, 45.6290},
{35, 44.9099},
{40, 44.2640},
{45, 43.6736},
{50, 43.1279},
}},
{"HeMcs6_80MHz",
{
{5, 55.8389},
{10, 53.9360},
{15, 52.4548},
{20, 51.2855},
{25, 50.3106},
{30, 49.4682},
{35, 48.7201},
{40, 48.0462},
{45, 47.4288},
{50, 46.8571},
}},
{"HeMcs7_80MHz",
{
{5, 55.8389},
{10, 53.9360},
{15, 52.4548},
{20, 51.2855},
{25, 50.3106},
{30, 49.4682},
{35, 48.7201},
{40, 48.0462},
{45, 47.4288},
{50, 46.8571},
}},
{"HeMcs8_80MHz",
{
{5, 55.8389},
{10, 53.9360},
{15, 52.4548},
{20, 51.2855},
{25, 50.3106},
{30, 49.4682},
{35, 48.7201},
{40, 48.0462},
{45, 47.4288},
{50, 46.8571},
}},
{"HeMcs9_80MHz",
{
{5, 60.3411},
{10, 58.5527},
{15, 57.0724},
{20, 55.8834},
{25, 54.8827},
{30, 54.0128},
{35, 53.2368},
{40, 52.5352},
{45, 51.8906},
{50, 51.2922},
}},
{"HeMcs10_80MHz",
{
{5, 60.3411},
{10, 58.5527},
{15, 57.0724},
{20, 55.8834},
{25, 54.8827},
{30, 54.0128},
{35, 53.2368},
{40, 52.5352},
{45, 51.8906},
{50, 51.2922},
}},
{"HeMcs11_80MHz",
{
{5, 60.3411},
{10, 58.5527},
{15, 57.0724},
{20, 55.8834},
{25, 54.8827},
{30, 54.0128},
{35, 53.2368},
{40, 52.5352},
{45, 51.8906},
{50, 51.2922},
}},
{"HeMcs0_160MHz",
{
{5, 30.6710},
{10, 28.9919},
{15, 27.9160},
{20, 27.1188},
{25, 26.4770},
{30, 25.9355},
{35, 25.4630},
{40, 25.0432},
{45, 24.6629},
{50, 24.3141},
}},
{"HeMcs1_160MHz",
{
{5, 42.3965},
{10, 40.4510},
{15, 39.1127},
{20, 38.0965},
{25, 37.2670},
{30, 36.5606},
{35, 35.9398},
{40, 35.3852},
{45, 34.8806},
{50, 34.4160},
}},
{"HeMcs2_160MHz",
{
{5, 47.8139},
{10, 45.8767},
{15, 44.4795},
{20, 43.4017},
{25, 42.5141},
{30, 41.7535},
{35, 41.0821},
{40, 40.4801},
{45, 39.9307},
{50, 39.4236},
}},
{"HeMcs3_160MHz",
{
{5, 51.9619},
{10, 49.9941},
{15, 48.5284},
{20, 47.3867},
{25, 46.4416},
{30, 45.6290},
{35, 44.9099},
{40, 44.2640},
{45, 43.6736},
{50, 43.1279},
}},
{"HeMcs4_160MHz",
{
{5, 55.8389},
{10, 53.9360},
{15, 52.4548},
{20, 51.2855},
{25, 50.3106},
{30, 49.4682},
{35, 48.7201},
{40, 48.0462},
{45, 47.4288},
{50, 46.8571},
}},
{"HeMcs5_160MHz",
{
{5, 60.3411},
{10, 58.5527},
{15, 57.0724},
{20, 55.8834},
{25, 54.8827},
{30, 54.0128},
{35, 53.2368},
{40, 52.5352},
{45, 51.8906},
{50, 51.2922},
}},
{"HeMcs6_160MHz",
{
{5, 60.3411},
{10, 58.5527},
{15, 57.0724},
{20, 55.8834},
{25, 54.8827},
{30, 54.0128},
{35, 53.2368},
{40, 52.5352},
{45, 51.8906},
{50, 51.2922},
}},
{"HeMcs7_160MHz",
{
{5, 60.3411},
{10, 58.5527},
{15, 57.0724},
{20, 55.8834},
{25, 54.8827},
{30, 54.0128},
{35, 53.2368},
{40, 52.5352},
{45, 51.8906},
{50, 51.2922},
}},
{"HeMcs8_160MHz",
{
{5, 60.3411},
{10, 58.5527},
{15, 57.0724},
{20, 55.8834},
{25, 54.8827},
{30, 54.0128},
{35, 53.2368},
{40, 52.5352},
{45, 51.8906},
{50, 51.2922},
}},
{"HeMcs9_160MHz",
{
{5, 65.6329},
{10, 64.0336},
{15, 62.5814},
{20, 61.3869},
{25, 60.3690},
{30, 59.4769},
{35, 58.6764},
{40, 57.9495},
{45, 57.2790},
{50, 56.6548},
}},
{"HeMcs10_160MHz",
{
{5, 65.6329},
{10, 64.0336},
{15, 62.5814},
{20, 61.3869},
{25, 60.3690},
{30, 59.4769},
{35, 58.6764},
{40, 57.9495},
{45, 57.2790},
{50, 56.6548},
}},
{"HeMcs11_160MHz",
{
{5, 65.6329},
{10, 64.0336},
{15, 62.5814},
{20, 61.3869},
{25, 60.3690},
{30, 59.4769},
{35, 58.6764},
{40, 57.9495},
{45, 57.2790},
{50, 56.6548},
}},
};
可输入的参数如下(help信息):
方括号里是默认值
参数--verbose:
日志级别(0:无日志- 1:模拟脚本日志- 2:所有日志)[0]
参数--tracing:
生成跟踪文件[false]
参数--pktSize:
以字节为单位的数据包大小[1500]
参数--trials:
每个网络大小的最大运行数[1]
参数--duration:
每次试验持续时间(秒)[100]
参数--pcap:
启用/禁用PCAP跟踪[false]
参数--infra:
True为使用基础架构模式,false为使用环adhoc模式[false]
参数--workDir:
用于存储生成文件的工作目录[./]
参数--phyMode:
设置用于传输帧的常量PHY模式字符串[OfdmRate54Mbps]
参数--standard:
设置标准(11a, 11b, 11g, 11n, 11ac, 11ax) [11a]
参数--nMinStas:
最小起始站数[5]
参数--nMaxStas:
最大站数开始[50]
参数--nStepSize:
每一步要增加的站数[5]
参数--plotBianchiModel:
第一个比特对应DIFS模型,第二个比特对应EIFS模型[1]
参数--validate:
启用/禁用ns-3模拟对Bianchi模型的验证[false]
参数--maxRelativeError:
ns-3结果与Bianchi模型(用于回归,即设置验证标志时)之间的最大相对误差容忍[0.015]
参数--frequency:
设置工作频带在GHz: 2.4、5或6 [5]
参数--channelWidth:
以MHz为单位设置恒定通道宽度(仅适用于11n/ac/ax) [20]
参数--guardIntervalNs:
以纳秒为单位设置保护间隔(11n/ac为800或400,11ax为800或1600或3200)[800]
参数--maxMpdus:
设置a -MPDU中MPDU的最大数目(0表示不使能MPDU聚合)[]
参数--distance:
设置AP与sta之间的距离,单位为米[0.001]
参数--apTxPower:
设置AP的发射功率,单位为dBm(仅限基础设施)[16]
参数--staTxPower:
设置每个STA的发射功率,单位为dBm(如果是adhoc,则设置所有STA) [16]
参数--pktInterval:
设置socket报文间隔,单位为微秒[1000]
选择起始数量2,最终数量10,步进1,即可获取2-10个STA之间不同的仿真结果,在查表中加入2步骤计算结果,即可获取对比结果。