Bianchi模型、python计算及ns3验证

由于项目与学习需要,最近学习了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/24302361icon-default.png?t=O83Ahttps://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公式化

来源:

https://github.com/segmentation-fault/BianchiPy/blob/master/calculate_bianchi_tr.pyicon-default.png?t=O83Ahttps://github.com/segmentation-fault/BianchiPy/blob/master/calculate_bianchi_tr.py

源码内容:

__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步骤计算结果,即可获取对比结果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值