Bianchi模型、python计算及ns3验证_关于2~10 STA验证的补充

4 篇文章 0 订阅
3 篇文章 0 订阅

首先就是预设修改,

NS3中bitrate是OfdmRate54Mbps,STA数目我设置了2-10,ack长度是14bytes,数据长36,头36(trace中只有1536和14两个长度,也就是数据长度1500,头36,ack14),SIFS和SLOT是16us和9us(在phy的定义中,11a的时候,sifs是16,slot是9),difs是34us(在bianchia.m里面指定了),窗口大小15(在CW trace里面看得到起始值15)

    bitrate = 54E6
    ACK = 14*8
    SIFS = 16E-6
    slot = 9E-6
    DIFS = 34E-6#for11a
    E_P = 1500*8
    E_P_star = E_P
    WW = [15]
    mm = [6]
    H = 36*8
    prop_delay = 0

仿真获得一组吞吐值,与ns3仿真结果对比

偏高——但与查表bianchi对比,理想算法也偏高:

查找bianchi的matlab计算方法:

% Copyright 2020 University of Washington
%
% Redistribution and use in source and binary forms, with or without
% modification, are permitted provided that the following conditions are met:
%
% 1. Redistributions of source code must retain the above copyright notice,
% this list of conditions and the following disclaimer.
%
% 2. Redistributions in binary form must reproduce the above copyright notice,
% this list of conditions and the following disclaimer in the documentation
% and/or other materials provided with the distribution.
%
% 3. Neither the name of the copyright holder nor the names of its contributors
% may be used to endorse or promote products derived from this software without
% specific prior written permission.
%
% THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
% AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
% IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
% ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
% LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
% CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
% SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
% INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
% CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
% ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
% POSSIBILITY OF SUCH DAMAGE.
%
% Co-authored by Leonardo Lanante, Hao Yin, and Sebastien Deronne

function [bianchi_result] = Bianchi11a(data_rate, ack_rate, difs)
nA = [5:5:50];
CWmin = 15;
CWmax = 1023;
L_DATA = 1500 * 8; % data size in bits
L_ACK = 14 * 8; % ACK size in bits
B = 1/(CWmin+1);
EP = L_DATA/(1-B);
T_GI = 800e-9; % guard interval in seconds
T_SYMBOL = 3.2e-6 + T_GI; % symbol duration in seconds
T_LPHY = 20e-6; % PHY preamble & header duration in seconds
L_SERVICE = 16; % service field length in bits
L_TAIL = 6; % tail length in bits
L_MAC = (24 + 4) * 8; % MAC header size in bits
L_APP_HDR = 8 * 6; % bits added by the upper layer(s)
T_SIFS = 16e-6;
T_DIFS = 34e-6;
T_SLOT = 9e-6;
delta = 1e-7;

N_DBPS = data_rate * T_SYMBOL; % number of data bits per OFDM symbol
N_SYMBOLS = ceil((L_SERVICE + L_MAC + L_DATA + L_APP_HDR + L_TAIL)/N_DBPS);
T_DATA = T_LPHY + (T_SYMBOL * N_SYMBOLS);

N_DBPS = ack_rate * T_SYMBOL; % number of data bits per OFDM symbol
N_SYMBOLS = ceil((L_SERVICE + L_ACK + L_TAIL)/N_DBPS);
T_ACK = T_LPHY + (T_SYMBOL * N_SYMBOLS);

T_s = T_DATA + T_SIFS + T_ACK + T_DIFS;
if difs == 1 %DIFS
    T_C = T_DATA + T_DIFS;
else %EIFS
    T_s = T_DATA + T_SIFS + T_ACK + T_DIFS + delta;
    T_C = T_DATA + T_DIFS + T_SIFS + T_ACK + delta;
end
T_S = T_s/(1-B) + T_SLOT;
S_bianchi = zeros(size(nA));
for j = 1:length(nA)
    n = nA(j)*1;
    W = CWmin + 1;
    m = log2((CWmax + 1)/(CWmin + 1));
    tau1 = linspace(0, 1, 1e4);
    p = 1 - (1 - tau1).^(n - 1);
    ps = p*0;

    for i = 0:m-1
        ps = ps + (2*p).^i;
    end
    taup = 2./(1 + W + p.*W.*ps);
    [a,b] = min(abs(tau1 - taup));
    tau = taup(b);

    Ptr = 1 - (1 - tau)^n;
    Ps = n*tau*(1 - tau)^(n - 1)/Ptr;

    S_bianchi(j) = Ps*Ptr*EP/((1-Ptr)*T_SLOT+Ptr*Ps*T_S+Ptr*(1-Ps)*T_C)/1e6;
end

bianchi_result = S_bianchi;

看到除了difs sifs等,还需要考虑phy头、前导码等时间,即理想算法考虑时间偏短,导致吞吐偏大——但走向是完全一致的

matlab结果

此结果与查表内容非常类似——于绘图内容完全相同(plt中的绘图点完全相同)

        {"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},
         }},
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

将MATLAB计算出的Tc和Ts带入python公式中,绘图结果

30.020792924428772
28.14524162624082
26.983857622278723
26.13264118105921
25.45203353872358
24.879831490270217
24.382983626274978
23.94179040089471
23.543532045749867
23.17949830919974

即在考虑了phy头、前导码等时间之后计算出的吞吐会更加符合实际情况

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值