src/wifi/model/interference-helper.cc
author Tom Henderson <tomh@tomh.org>
Mon, 28 Sep 2015 20:27:25 -0700
changeset 11676 05ea1489e509
parent 11628 243b71de25a0
permissions -rwxr-xr-x
bug 2184: Integer overflow in MacLow
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
7385
10beb0e53130 standardize emacs c++ mode comments
Vedran Miletić <rivanvx@gmail.com>
parents: 7143
diff changeset
     1
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
4325
acc6c801f785 bug 548: missing license header
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4315
diff changeset
     2
/*
acc6c801f785 bug 548: missing license header
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4315
diff changeset
     3
 * Copyright (c) 2005,2006 INRIA
acc6c801f785 bug 548: missing license header
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4315
diff changeset
     4
 *
acc6c801f785 bug 548: missing license header
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4315
diff changeset
     5
 * This program is free software; you can redistribute it and/or modify
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
     6
 * it under the terms of the GNU General Public License version 2 as
4325
acc6c801f785 bug 548: missing license header
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4315
diff changeset
     7
 * published by the Free Software Foundation;
acc6c801f785 bug 548: missing license header
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4315
diff changeset
     8
 *
acc6c801f785 bug 548: missing license header
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4315
diff changeset
     9
 * This program is distributed in the hope that it will be useful,
acc6c801f785 bug 548: missing license header
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4315
diff changeset
    10
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
acc6c801f785 bug 548: missing license header
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4315
diff changeset
    11
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
acc6c801f785 bug 548: missing license header
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4315
diff changeset
    12
 * GNU General Public License for more details.
acc6c801f785 bug 548: missing license header
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4315
diff changeset
    13
 *
acc6c801f785 bug 548: missing license header
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4315
diff changeset
    14
 * You should have received a copy of the GNU General Public License
acc6c801f785 bug 548: missing license header
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4315
diff changeset
    15
 * along with this program; if not, write to the Free Software
acc6c801f785 bug 548: missing license header
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4315
diff changeset
    16
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
acc6c801f785 bug 548: missing license header
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4315
diff changeset
    17
 *
11452
f7e2c3127a02 Bug 2108 [wifi] - Erroneous implementation in InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11450
diff changeset
    18
 * Authors: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
f7e2c3127a02 Bug 2108 [wifi] - Erroneous implementation in InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11450
diff changeset
    19
 *          Sébastien Deronne <sebastien.deronne@gmail.com>
4325
acc6c801f785 bug 548: missing license header
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4315
diff changeset
    20
 */
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11384
diff changeset
    21
3905
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    22
#include "interference-helper.h"
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    23
#include "wifi-phy.h"
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    24
#include "error-rate-model.h"
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    25
#include "ns3/simulator.h"
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    26
#include "ns3/log.h"
3906
01acc159ffb1 merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3905
diff changeset
    27
#include <algorithm>
3905
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    28
10968
2d29fee2b7b8 [Bug 1551] Redux: NS_LOG_COMPONENT_DEFINE inside or outside of ns3 namespace?
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10139
diff changeset
    29
namespace ns3 {
3905
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    30
10968
2d29fee2b7b8 [Bug 1551] Redux: NS_LOG_COMPONENT_DEFINE inside or outside of ns3 namespace?
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 10139
diff changeset
    31
NS_LOG_COMPONENT_DEFINE ("InterferenceHelper");
3905
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    32
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    33
/****************************************************************
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    34
 *       Phy event class
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    35
 ****************************************************************/
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    36
11384
935dc1cc08a4 Bug 2097 [wifi] - ACKs should be sent using legacy rates and preambles in 802.11n
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11348
diff changeset
    37
InterferenceHelper::Event::Event (uint32_t size, WifiTxVector txVector,
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
    38
                                  enum WifiPreamble preamble,
11384
935dc1cc08a4 Bug 2097 [wifi] - ACKs should be sent using legacy rates and preambles in 802.11n
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11348
diff changeset
    39
                                  Time duration, double rxPower)
3905
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    40
  : m_size (size),
11384
935dc1cc08a4 Bug 2097 [wifi] - ACKs should be sent using legacy rates and preambles in 802.11n
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11348
diff changeset
    41
    m_txVector (txVector),
3905
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    42
    m_preamble (preamble),
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    43
    m_startTime (Simulator::Now ()),
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    44
    m_endTime (m_startTime + duration),
11384
935dc1cc08a4 Bug 2097 [wifi] - ACKs should be sent using legacy rates and preambles in 802.11n
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11348
diff changeset
    45
    m_rxPowerW (rxPower)
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
    46
{
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
    47
}
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11384
diff changeset
    48
3905
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    49
InterferenceHelper::Event::~Event ()
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
    50
{
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
    51
}
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
    52
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
    53
Time
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
    54
InterferenceHelper::Event::GetDuration (void) const
3905
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    55
{
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    56
  return m_endTime - m_startTime;
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    57
}
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11384
diff changeset
    58
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
    59
Time
3905
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    60
InterferenceHelper::Event::GetStartTime (void) const
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    61
{
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    62
  return m_startTime;
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    63
}
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11384
diff changeset
    64
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
    65
Time
3905
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    66
InterferenceHelper::Event::GetEndTime (void) const
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    67
{
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    68
  return m_endTime;
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    69
}
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11384
diff changeset
    70
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
    71
double
3905
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    72
InterferenceHelper::Event::GetRxPowerW (void) const
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    73
{
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    74
  return m_rxPowerW;
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    75
}
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11384
diff changeset
    76
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
    77
uint32_t
3905
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    78
InterferenceHelper::Event::GetSize (void) const
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    79
{
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    80
  return m_size;
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    81
}
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11384
diff changeset
    82
11384
935dc1cc08a4 Bug 2097 [wifi] - ACKs should be sent using legacy rates and preambles in 802.11n
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11348
diff changeset
    83
WifiTxVector
935dc1cc08a4 Bug 2097 [wifi] - ACKs should be sent using legacy rates and preambles in 802.11n
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11348
diff changeset
    84
InterferenceHelper::Event::GetTxVector (void) const
935dc1cc08a4 Bug 2097 [wifi] - ACKs should be sent using legacy rates and preambles in 802.11n
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11348
diff changeset
    85
{
935dc1cc08a4 Bug 2097 [wifi] - ACKs should be sent using legacy rates and preambles in 802.11n
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11348
diff changeset
    86
  return m_txVector;
935dc1cc08a4 Bug 2097 [wifi] - ACKs should be sent using legacy rates and preambles in 802.11n
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11348
diff changeset
    87
}
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11384
diff changeset
    88
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
    89
WifiMode
3905
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    90
InterferenceHelper::Event::GetPayloadMode (void) const
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    91
{
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11384
diff changeset
    92
  return m_txVector.GetMode ();
3905
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    93
}
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11384
diff changeset
    94
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
    95
enum WifiPreamble
3905
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    96
InterferenceHelper::Event::GetPreambleType (void) const
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    97
{
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    98
  return m_preamble;
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    99
}
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   100
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 7385
diff changeset
   101
3905
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   102
/****************************************************************
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   103
 *       Class which records SNIR change events for a
3905
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   104
 *       short period of time.
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   105
 ****************************************************************/
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   106
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   107
InterferenceHelper::NiChange::NiChange (Time time, double delta)
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   108
  : m_time (time),
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   109
    m_delta (delta)
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   110
{
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   111
}
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11384
diff changeset
   112
3905
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   113
Time
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   114
InterferenceHelper::NiChange::GetTime (void) const
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   115
{
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   116
  return m_time;
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   117
}
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11384
diff changeset
   118
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   119
double
3905
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   120
InterferenceHelper::NiChange::GetDelta (void) const
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   121
{
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   122
  return m_delta;
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   123
}
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11384
diff changeset
   124
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   125
bool
5819
514ec98954ab Wifi code cleanup: Correcting various const keyword ordering and removing superfluous (boolean)?true:false.
Timo Bingmann <tbns@idlebox.net>
parents: 5423
diff changeset
   126
InterferenceHelper::NiChange::operator < (const InterferenceHelper::NiChange& o) const
3905
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   127
{
5819
514ec98954ab Wifi code cleanup: Correcting various const keyword ordering and removing superfluous (boolean)?true:false.
Timo Bingmann <tbns@idlebox.net>
parents: 5423
diff changeset
   128
  return (m_time < o.m_time);
3905
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   129
}
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   130
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11384
diff changeset
   131
3905
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   132
/****************************************************************
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   133
 *       The actual InterferenceHelper
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   134
 ****************************************************************/
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   135
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   136
InterferenceHelper::InterferenceHelper ()
6474
0894b2a245e9 fixed Bug 799 - Interference helper is too slow
Kirill Andreev <andreev@iitp.ru>
parents: 6360
diff changeset
   137
  : m_errorRateModel (0),
0894b2a245e9 fixed Bug 799 - Interference helper is too slow
Kirill Andreev <andreev@iitp.ru>
parents: 6360
diff changeset
   138
    m_firstPower (0.0),
0894b2a245e9 fixed Bug 799 - Interference helper is too slow
Kirill Andreev <andreev@iitp.ru>
parents: 6360
diff changeset
   139
    m_rxing (false)
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   140
{
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   141
}
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11384
diff changeset
   142
3906
01acc159ffb1 merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3905
diff changeset
   143
InterferenceHelper::~InterferenceHelper ()
01acc159ffb1 merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3905
diff changeset
   144
{
5417
899604299046 plug leaks (bug 711)
Craig Dowell <craigdo@ee.washington.edu>
parents: 5413
diff changeset
   145
  EraseEvents ();
3906
01acc159ffb1 merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3905
diff changeset
   146
  m_errorRateModel = 0;
01acc159ffb1 merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3905
diff changeset
   147
}
3905
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   148
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   149
Ptr<InterferenceHelper::Event>
11384
935dc1cc08a4 Bug 2097 [wifi] - ACKs should be sent using legacy rates and preambles in 802.11n
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11348
diff changeset
   150
InterferenceHelper::Add (uint32_t size, WifiTxVector txVector,
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   151
                         enum WifiPreamble preamble,
11384
935dc1cc08a4 Bug 2097 [wifi] - ACKs should be sent using legacy rates and preambles in 802.11n
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11348
diff changeset
   152
                         Time duration, double rxPowerW)
3905
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   153
{
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   154
  Ptr<InterferenceHelper::Event> event;
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   155
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   156
  event = Create<InterferenceHelper::Event> (size,
11384
935dc1cc08a4 Bug 2097 [wifi] - ACKs should be sent using legacy rates and preambles in 802.11n
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11348
diff changeset
   157
                                             txVector,
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   158
                                             preamble,
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   159
                                             duration,
11384
935dc1cc08a4 Bug 2097 [wifi] - ACKs should be sent using legacy rates and preambles in 802.11n
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11348
diff changeset
   160
                                             rxPowerW);
3905
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   161
  AppendEvent (event);
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   162
  return event;
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   163
}
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   164
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   165
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   166
void
4315
56a5bf298339 noiseFloor -> noiseFigure (bug 543)
Nicola Baldo <nbaldo@cttc.es>
parents: 4039
diff changeset
   167
InterferenceHelper::SetNoiseFigure (double value)
3905
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   168
{
4315
56a5bf298339 noiseFloor -> noiseFigure (bug 543)
Nicola Baldo <nbaldo@cttc.es>
parents: 4039
diff changeset
   169
  m_noiseFigure = value;
3905
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   170
}
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   171
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   172
double
4315
56a5bf298339 noiseFloor -> noiseFigure (bug 543)
Nicola Baldo <nbaldo@cttc.es>
parents: 4039
diff changeset
   173
InterferenceHelper::GetNoiseFigure (void) const
3905
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   174
{
4315
56a5bf298339 noiseFloor -> noiseFigure (bug 543)
Nicola Baldo <nbaldo@cttc.es>
parents: 4039
diff changeset
   175
  return m_noiseFigure;
3905
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   176
}
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   177
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   178
void
3905
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   179
InterferenceHelper::SetErrorRateModel (Ptr<ErrorRateModel> rate)
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   180
{
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   181
  m_errorRateModel = rate;
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   182
}
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   183
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   184
Ptr<ErrorRateModel>
3905
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   185
InterferenceHelper::GetErrorRateModel (void) const
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   186
{
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   187
  return m_errorRateModel;
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   188
}
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   189
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   190
Time
3905
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   191
InterferenceHelper::GetEnergyDuration (double energyW)
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   192
{
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   193
  Time now = Simulator::Now ();
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   194
  double noiseInterferenceW = 0.0;
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   195
  Time end = now;
6474
0894b2a245e9 fixed Bug 799 - Interference helper is too slow
Kirill Andreev <andreev@iitp.ru>
parents: 6360
diff changeset
   196
  noiseInterferenceW = m_firstPower;
0894b2a245e9 fixed Bug 799 - Interference helper is too slow
Kirill Andreev <andreev@iitp.ru>
parents: 6360
diff changeset
   197
  for (NiChanges::const_iterator i = m_niChanges.begin (); i != m_niChanges.end (); i++)
3905
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   198
    {
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   199
      noiseInterferenceW += i->GetDelta ();
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   200
      end = i->GetTime ();
6474
0894b2a245e9 fixed Bug 799 - Interference helper is too slow
Kirill Andreev <andreev@iitp.ru>
parents: 6360
diff changeset
   201
      if (end < now)
0894b2a245e9 fixed Bug 799 - Interference helper is too slow
Kirill Andreev <andreev@iitp.ru>
parents: 6360
diff changeset
   202
        {
0894b2a245e9 fixed Bug 799 - Interference helper is too slow
Kirill Andreev <andreev@iitp.ru>
parents: 6360
diff changeset
   203
          continue;
0894b2a245e9 fixed Bug 799 - Interference helper is too slow
Kirill Andreev <andreev@iitp.ru>
parents: 6360
diff changeset
   204
        }
0894b2a245e9 fixed Bug 799 - Interference helper is too slow
Kirill Andreev <andreev@iitp.ru>
parents: 6360
diff changeset
   205
      if (noiseInterferenceW < energyW)
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   206
        {
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   207
          break;
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   208
        }
3905
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   209
    }
6474
0894b2a245e9 fixed Bug 799 - Interference helper is too slow
Kirill Andreev <andreev@iitp.ru>
parents: 6360
diff changeset
   210
  return end > now ? end - now : MicroSeconds (0);
3905
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   211
}
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   212
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   213
void
3905
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   214
InterferenceHelper::AppendEvent (Ptr<InterferenceHelper::Event> event)
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   215
{
6474
0894b2a245e9 fixed Bug 799 - Interference helper is too slow
Kirill Andreev <andreev@iitp.ru>
parents: 6360
diff changeset
   216
  Time now = Simulator::Now ();
0894b2a245e9 fixed Bug 799 - Interference helper is too slow
Kirill Andreev <andreev@iitp.ru>
parents: 6360
diff changeset
   217
  if (!m_rxing)
3905
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   218
    {
6474
0894b2a245e9 fixed Bug 799 - Interference helper is too slow
Kirill Andreev <andreev@iitp.ru>
parents: 6360
diff changeset
   219
      NiChanges::iterator nowIterator = GetPosition (now);
0894b2a245e9 fixed Bug 799 - Interference helper is too slow
Kirill Andreev <andreev@iitp.ru>
parents: 6360
diff changeset
   220
      for (NiChanges::iterator i = m_niChanges.begin (); i != nowIterator; i++)
3905
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   221
        {
6474
0894b2a245e9 fixed Bug 799 - Interference helper is too slow
Kirill Andreev <andreev@iitp.ru>
parents: 6360
diff changeset
   222
          m_firstPower += i->GetDelta ();
3905
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   223
        }
6474
0894b2a245e9 fixed Bug 799 - Interference helper is too slow
Kirill Andreev <andreev@iitp.ru>
parents: 6360
diff changeset
   224
      m_niChanges.erase (m_niChanges.begin (), nowIterator);
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   225
      m_niChanges.insert (m_niChanges.begin (), NiChange (event->GetStartTime (), event->GetRxPowerW ()));
6474
0894b2a245e9 fixed Bug 799 - Interference helper is too slow
Kirill Andreev <andreev@iitp.ru>
parents: 6360
diff changeset
   226
    }
0894b2a245e9 fixed Bug 799 - Interference helper is too slow
Kirill Andreev <andreev@iitp.ru>
parents: 6360
diff changeset
   227
  else
0894b2a245e9 fixed Bug 799 - Interference helper is too slow
Kirill Andreev <andreev@iitp.ru>
parents: 6360
diff changeset
   228
    {
0894b2a245e9 fixed Bug 799 - Interference helper is too slow
Kirill Andreev <andreev@iitp.ru>
parents: 6360
diff changeset
   229
      AddNiChangeEvent (NiChange (event->GetStartTime (), event->GetRxPowerW ()));
0894b2a245e9 fixed Bug 799 - Interference helper is too slow
Kirill Andreev <andreev@iitp.ru>
parents: 6360
diff changeset
   230
    }
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   231
  AddNiChangeEvent (NiChange (event->GetEndTime (), -event->GetRxPowerW ()));
6474
0894b2a245e9 fixed Bug 799 - Interference helper is too slow
Kirill Andreev <andreev@iitp.ru>
parents: 6360
diff changeset
   232
3905
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   233
}
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   234
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   235
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   236
double
11628
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   237
InterferenceHelper::CalculateSnr (double signal, double noiseInterference, uint32_t channelWidth) const
3905
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   238
{
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11384
diff changeset
   239
  //thermal noise at 290K in J/s = W
3905
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   240
  static const double BOLTZMANN = 1.3803e-23;
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11384
diff changeset
   241
  //Nt is the power of thermal noise in W
11628
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   242
  double Nt = BOLTZMANN * 290.0 * channelWidth * 1000000;
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11384
diff changeset
   243
  //receiver noise Floor (W) which accounts for thermal noise and non-idealities of the receiver
4315
56a5bf298339 noiseFloor -> noiseFigure (bug 543)
Nicola Baldo <nbaldo@cttc.es>
parents: 4039
diff changeset
   244
  double noiseFloor = m_noiseFigure * Nt;
3905
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   245
  double noise = noiseFloor + noiseInterference;
11491
dfb21289dde4 improve readibility of snr values
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11452
diff changeset
   246
  double snr = signal / noise; //linear scale
11628
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   247
  NS_LOG_DEBUG ("bandwidth(MHz)=" << channelWidth << ", signal(W)= " << signal << ", noise(W)=" << noiseFloor << ", interference(W)=" << noiseInterference << ", snr(linear)=" << snr);
3905
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   248
  return snr;
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   249
}
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   250
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   251
double
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   252
InterferenceHelper::CalculateNoiseInterferenceW (Ptr<InterferenceHelper::Event> event, NiChanges *ni) const
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   253
{
6474
0894b2a245e9 fixed Bug 799 - Interference helper is too slow
Kirill Andreev <andreev@iitp.ru>
parents: 6360
diff changeset
   254
  double noiseInterference = m_firstPower;
0894b2a245e9 fixed Bug 799 - Interference helper is too slow
Kirill Andreev <andreev@iitp.ru>
parents: 6360
diff changeset
   255
  NS_ASSERT (m_rxing);
0894b2a245e9 fixed Bug 799 - Interference helper is too slow
Kirill Andreev <andreev@iitp.ru>
parents: 6360
diff changeset
   256
  for (NiChanges::const_iterator i = m_niChanges.begin () + 1; i != m_niChanges.end (); i++)
3905
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   257
    {
6474
0894b2a245e9 fixed Bug 799 - Interference helper is too slow
Kirill Andreev <andreev@iitp.ru>
parents: 6360
diff changeset
   258
      if ((event->GetEndTime () == i->GetTime ()) && event->GetRxPowerW () == -i->GetDelta ())
3905
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   259
        {
6474
0894b2a245e9 fixed Bug 799 - Interference helper is too slow
Kirill Andreev <andreev@iitp.ru>
parents: 6360
diff changeset
   260
          break;
3905
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   261
        }
6474
0894b2a245e9 fixed Bug 799 - Interference helper is too slow
Kirill Andreev <andreev@iitp.ru>
parents: 6360
diff changeset
   262
      ni->push_back (*i);
3905
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   263
    }
6474
0894b2a245e9 fixed Bug 799 - Interference helper is too slow
Kirill Andreev <andreev@iitp.ru>
parents: 6360
diff changeset
   264
  ni->insert (ni->begin (), NiChange (event->GetStartTime (), noiseInterference));
3905
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   265
  ni->push_back (NiChange (event->GetEndTime (), 0));
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   266
  return noiseInterference;
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   267
}
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   268
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   269
double
11628
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   270
InterferenceHelper::CalculateChunkSuccessRate (double snir, Time duration, WifiMode mode, WifiTxVector txVector) const
3905
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   271
{
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   272
  if (duration == NanoSeconds (0))
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   273
    {
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   274
      return 1.0;
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   275
    }
11628
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   276
  uint32_t rate = mode.GetPhyRate (txVector.GetChannelWidth (), txVector.IsShortGuardInterval (), 1);
3905
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   277
  uint64_t nbits = (uint64_t)(rate * duration.GetSeconds ());
11628
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   278
  double csr = m_errorRateModel->GetChunkSuccessRate (mode, txVector, snir, (uint32_t)nbits);
3905
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   279
  return csr;
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   280
}
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   281
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   282
double
11348
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   283
InterferenceHelper::CalculatePlcpPayloadPer (Ptr<const InterferenceHelper::Event> event, NiChanges *ni) const
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   284
{
11452
f7e2c3127a02 Bug 2108 [wifi] - Erroneous implementation in InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11450
diff changeset
   285
  NS_LOG_FUNCTION (this);
3905
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   286
  double psr = 1.0; /* Packet Success Rate */
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   287
  NiChanges::iterator j = ni->begin ();
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   288
  Time previous = (*j).GetTime ();
3905
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   289
  WifiMode payloadMode = event->GetPayloadMode ();
4681
8558474b6149 made InterferenceHelper::CalculateTxDuration () static
Nicola Baldo <nbaldo@cttc.es>
parents: 4680
diff changeset
   290
  WifiPreamble preamble = event->GetPreambleType ();
11628
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   291
  Time plcpHeaderStart = (*j).GetTime () + WifiPhy::GetPlcpPreambleDuration (event->GetTxVector (), preamble); //packet start time + preamble
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   292
  Time plcpHsigHeaderStart = plcpHeaderStart + WifiPhy::GetPlcpHeaderDuration (event->GetTxVector (), preamble); //packet start time + preamble + L-SIG
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   293
  Time plcpHtTrainingSymbolsStart = plcpHsigHeaderStart + WifiPhy::GetPlcpHtSigHeaderDuration (preamble) + WifiPhy::GetPlcpVhtSigA1Duration (preamble) + WifiPhy::GetPlcpVhtSigA2Duration (preamble); //packet start time + preamble + L-SIG + HT-SIG or VHT-SIG-A (A1 + A2)
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   294
  Time plcpPayloadStart = plcpHtTrainingSymbolsStart + WifiPhy::GetPlcpHtTrainingSymbolDuration (preamble, event->GetTxVector ()) + WifiPhy::GetPlcpVhtSigBDuration (preamble); //packet start time + preamble + L-SIG + HT-SIG or VHT-SIG-A (A1 + A2) + (V)HT Training + VHT-SIG-B
3905
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   295
  double noiseInterferenceW = (*j).GetDelta ();
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   296
  double powerW = event->GetRxPowerW ();
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11384
diff changeset
   297
  j++;
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   298
  while (ni->end () != j)
3905
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   299
    {
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   300
      Time current = (*j).GetTime ();
11452
f7e2c3127a02 Bug 2108 [wifi] - Erroneous implementation in InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11450
diff changeset
   301
      NS_LOG_DEBUG ("previous= " << previous << ", current=" << current);
3905
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   302
      NS_ASSERT (current >= previous);
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11384
diff changeset
   303
      //Case 1: Both previous and current point to the payload
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   304
      if (previous >= plcpPayloadStart)
3905
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   305
        {
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   306
          psr *= CalculateChunkSuccessRate (CalculateSnr (powerW,
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   307
                                                          noiseInterferenceW,
11628
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   308
                                                          event->GetTxVector ().GetChannelWidth ()),
3905
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   309
                                            current - previous,
11628
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   310
                                            payloadMode, event->GetTxVector ());
11452
f7e2c3127a02 Bug 2108 [wifi] - Erroneous implementation in InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11450
diff changeset
   311
f7e2c3127a02 Bug 2108 [wifi] - Erroneous implementation in InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11450
diff changeset
   312
          NS_LOG_DEBUG ("Both previous and current point to the payload: mode=" << payloadMode << ", psr=" << psr);
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   313
        }
11452
f7e2c3127a02 Bug 2108 [wifi] - Erroneous implementation in InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11450
diff changeset
   314
      //Case 2: previous is before payload and current is in the payload
f7e2c3127a02 Bug 2108 [wifi] - Erroneous implementation in InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11450
diff changeset
   315
      else if (current >= plcpPayloadStart)
11348
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   316
        {
11452
f7e2c3127a02 Bug 2108 [wifi] - Erroneous implementation in InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11450
diff changeset
   317
          psr *= CalculateChunkSuccessRate (CalculateSnr (powerW,
f7e2c3127a02 Bug 2108 [wifi] - Erroneous implementation in InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11450
diff changeset
   318
                                                          noiseInterferenceW,
11628
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   319
                                                          event->GetTxVector ().GetChannelWidth ()),
11452
f7e2c3127a02 Bug 2108 [wifi] - Erroneous implementation in InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11450
diff changeset
   320
                                            current - plcpPayloadStart,
11628
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   321
                                            payloadMode, event->GetTxVector ());
11452
f7e2c3127a02 Bug 2108 [wifi] - Erroneous implementation in InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11450
diff changeset
   322
          NS_LOG_DEBUG ("previous is before payload and current is in the payload: mode=" << payloadMode << ", psr=" << psr);
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 7385
diff changeset
   323
        }
11348
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   324
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   325
      noiseInterferenceW += (*j).GetDelta ();
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   326
      previous = (*j).GetTime ();
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   327
      j++;
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   328
    }
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   329
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   330
  double per = 1 - psr;
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   331
  return per;
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   332
}
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   333
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   334
double
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   335
InterferenceHelper::CalculatePlcpHeaderPer (Ptr<const InterferenceHelper::Event> event, NiChanges *ni) const
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   336
{
11452
f7e2c3127a02 Bug 2108 [wifi] - Erroneous implementation in InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11450
diff changeset
   337
  NS_LOG_FUNCTION (this);
11348
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   338
  double psr = 1.0; /* Packet Success Rate */
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   339
  NiChanges::iterator j = ni->begin ();
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   340
  Time previous = (*j).GetTime ();
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   341
  WifiMode payloadMode = event->GetPayloadMode ();
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   342
  WifiPreamble preamble = event->GetPreambleType ();
11452
f7e2c3127a02 Bug 2108 [wifi] - Erroneous implementation in InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11450
diff changeset
   343
  WifiMode htHeaderMode;
11348
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   344
  if (preamble == WIFI_PREAMBLE_HT_MF)
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   345
    {
11452
f7e2c3127a02 Bug 2108 [wifi] - Erroneous implementation in InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11450
diff changeset
   346
      //mode for PLCP header fields sent with HT modulation
11628
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   347
      htHeaderMode = WifiPhy::GetHtPlcpHeaderMode (payloadMode);
11348
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   348
    }
11628
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   349
  else if (preamble == WIFI_PREAMBLE_VHT)
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   350
    {
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   351
      //mode for PLCP header fields sent with VHT modulation
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   352
      htHeaderMode = WifiPhy::GetVhtPlcpHeaderMode (payloadMode);
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   353
    }
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   354
  WifiMode headerMode = WifiPhy::GetPlcpHeaderMode (payloadMode, preamble, event->GetTxVector ());
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   355
  Time plcpHeaderStart = (*j).GetTime () + WifiPhy::GetPlcpPreambleDuration (event->GetTxVector (), preamble); //packet start time + preamble
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   356
  Time plcpHsigHeaderStart = plcpHeaderStart + WifiPhy::GetPlcpHeaderDuration (event->GetTxVector (), preamble); //packet start time + preamble + L-SIG
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   357
  Time plcpHtTrainingSymbolsStart = plcpHsigHeaderStart + WifiPhy::GetPlcpHtSigHeaderDuration (preamble) + WifiPhy::GetPlcpVhtSigA1Duration (preamble) + WifiPhy::GetPlcpVhtSigA2Duration (preamble); //packet start time + preamble + L-SIG + HT-SIG or VHT-SIG-A (A1 + A2)
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   358
  Time plcpPayloadStart = plcpHtTrainingSymbolsStart + WifiPhy::GetPlcpHtTrainingSymbolDuration (preamble, event->GetTxVector ()) + WifiPhy::GetPlcpVhtSigBDuration (preamble); //packet start time + preamble + L-SIG + HT-SIG or VHT-SIG-A (A1 + A2) + (V)HT Training + VHT-SIG-B
11348
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   359
  double noiseInterferenceW = (*j).GetDelta ();
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   360
  double powerW = event->GetRxPowerW ();
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11384
diff changeset
   361
  j++;
11348
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   362
  while (ni->end () != j)
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   363
    {
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   364
      Time current = (*j).GetTime ();
11452
f7e2c3127a02 Bug 2108 [wifi] - Erroneous implementation in InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11450
diff changeset
   365
      NS_LOG_DEBUG ("previous= " << previous << ", current=" << current);
11348
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   366
      NS_ASSERT (current >= previous);
11452
f7e2c3127a02 Bug 2108 [wifi] - Erroneous implementation in InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11450
diff changeset
   367
      //Case 1: previous and current after playload start: nothing to do
f7e2c3127a02 Bug 2108 [wifi] - Erroneous implementation in InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11450
diff changeset
   368
      if (previous >= plcpPayloadStart)
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 7385
diff changeset
   369
        {
11452
f7e2c3127a02 Bug 2108 [wifi] - Erroneous implementation in InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11450
diff changeset
   370
          psr *= 1;
f7e2c3127a02 Bug 2108 [wifi] - Erroneous implementation in InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11450
diff changeset
   371
          NS_LOG_DEBUG ("Case 1 - previous and current after playload start: nothing to do");
f7e2c3127a02 Bug 2108 [wifi] - Erroneous implementation in InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11450
diff changeset
   372
        }
11628
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   373
      //Case 2: previous is in (V)HT training or in VHT-SIG-B: Non (V)HT will not enter here since it didn't enter in the last two and they are all the same for non (V)HT
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   374
      else if (previous >= plcpHtTrainingSymbolsStart)
11452
f7e2c3127a02 Bug 2108 [wifi] - Erroneous implementation in InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11450
diff changeset
   375
        {
f7e2c3127a02 Bug 2108 [wifi] - Erroneous implementation in InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11450
diff changeset
   376
          NS_ASSERT ((preamble != WIFI_PREAMBLE_LONG) && (preamble != WIFI_PREAMBLE_SHORT));
f7e2c3127a02 Bug 2108 [wifi] - Erroneous implementation in InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11450
diff changeset
   377
          //Case 2a: current after payload start
11348
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   378
          if (current >= plcpPayloadStart)
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11384
diff changeset
   379
            {
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11384
diff changeset
   380
              psr *= CalculateChunkSuccessRate (CalculateSnr (powerW,
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11384
diff changeset
   381
                                                              noiseInterferenceW,
11628
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   382
                                                              event->GetTxVector ().GetChannelWidth ()),
11452
f7e2c3127a02 Bug 2108 [wifi] - Erroneous implementation in InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11450
diff changeset
   383
                                                plcpPayloadStart - previous,
11628
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   384
                                                htHeaderMode, event->GetTxVector ());
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11384
diff changeset
   385
11628
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   386
              NS_LOG_DEBUG ("Case 2a - previous is in (V)HT training or in VHT-SIG-B and current after payload start: mode=" << htHeaderMode << ", psr=" << psr);
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 7385
diff changeset
   387
            }
11628
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   388
          //Case 2b: current is in (V)HT training or in VHT-SIG-B
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11384
diff changeset
   389
          else
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11384
diff changeset
   390
            {
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11384
diff changeset
   391
              psr *= CalculateChunkSuccessRate (CalculateSnr (powerW,
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11384
diff changeset
   392
                                                              noiseInterferenceW,
11628
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   393
                                                              event->GetTxVector ().GetChannelWidth ()),
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11384
diff changeset
   394
                                                current - previous,
11628
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   395
                                                htHeaderMode, event->GetTxVector ());
11452
f7e2c3127a02 Bug 2108 [wifi] - Erroneous implementation in InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11450
diff changeset
   396
11628
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   397
              NS_LOG_DEBUG ("Case 2b - previous is in (V)HT training or in VHT-SIG-B and current is in (V)HT training or in VHT-SIG-B: mode=" << htHeaderMode << ", psr=" << psr);
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11384
diff changeset
   398
            }
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11384
diff changeset
   399
        }
11628
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   400
      //Case 3: previous is in HT-SIG or VHT-SIG-A: Non (V)HT will not enter here since it didn't enter in the last two and they are all the same for non (V)HT
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   401
      else if (previous >= plcpHsigHeaderStart)
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   402
        {
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   403
          NS_ASSERT ((preamble != WIFI_PREAMBLE_LONG) && (preamble != WIFI_PREAMBLE_SHORT));
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   404
          //Case 3a: current after payload start
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   405
          if (current >= plcpPayloadStart)
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   406
            {
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   407
              psr *= CalculateChunkSuccessRate (CalculateSnr (powerW,
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   408
                                                              noiseInterferenceW,
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   409
                                                              event->GetTxVector ().GetChannelWidth ()),
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   410
                                                plcpPayloadStart - plcpHtTrainingSymbolsStart,
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   411
                                                htHeaderMode, event->GetTxVector ());
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   412
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   413
              //Case 3ai: VHT format
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   414
              if (preamble == WIFI_PREAMBLE_VHT)
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   415
                {
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   416
                  //VHT-SIG-A is sent using legacy OFDM modulation
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   417
                  psr *= CalculateChunkSuccessRate (CalculateSnr (powerW,
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   418
                                                                  noiseInterferenceW,
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   419
                                                                  event->GetTxVector ().GetChannelWidth ()),
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   420
                                                    plcpHtTrainingSymbolsStart - previous,
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   421
                                                    headerMode, event->GetTxVector ());
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   422
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   423
                  NS_LOG_DEBUG ("Case 3ai - previous is in VHT-SIG-A and current after payload start: VHT mode=" << htHeaderMode << ", non-VHT mode=" << headerMode << ", psr=" << psr);
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   424
                }
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   425
              //Case 3aii: HT mixed format of HT greenfield
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   426
              else
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   427
                {
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   428
                  psr *= CalculateChunkSuccessRate (CalculateSnr (powerW,
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   429
                                                                  noiseInterferenceW,
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   430
                                                                  event->GetTxVector ().GetChannelWidth ()),
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   431
                                                    plcpHtTrainingSymbolsStart - previous,
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   432
                                                    htHeaderMode, event->GetTxVector ());
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   433
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   434
                  NS_LOG_DEBUG ("Case 3aii - previous is in HT-SIG and current after payload start: mode=" << htHeaderMode << ", psr=" << psr);
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   435
                }
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   436
            }
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   437
          //Case 3b: current is in (V)HT training or in VHT-SIG-B
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   438
          else if (current >= plcpHtTrainingSymbolsStart)
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   439
            {
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   440
              psr *= CalculateChunkSuccessRate (CalculateSnr (powerW,
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   441
                                                              noiseInterferenceW,
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   442
                                                              event->GetTxVector ().GetChannelWidth ()),
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   443
                                                current - plcpHtTrainingSymbolsStart,
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   444
                                                htHeaderMode, event->GetTxVector ());
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   445
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   446
              //Case 3bi: VHT format
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   447
              if (preamble == WIFI_PREAMBLE_VHT)
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   448
                {
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   449
                  //VHT-SIG-A is sent using legacy OFDM modulation
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   450
                  psr *= CalculateChunkSuccessRate (CalculateSnr (powerW,
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   451
                                                                  noiseInterferenceW,
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   452
                                                                  event->GetTxVector ().GetChannelWidth ()),
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   453
                                                    plcpHtTrainingSymbolsStart - previous,
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   454
                                                    headerMode, event->GetTxVector ());
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   455
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   456
                  NS_LOG_DEBUG ("Case 3bi - previous is in VHT-SIG-A and current is in VHT training or in VHT-SIG-B: VHT mode=" << htHeaderMode << ", non-VHT mode=" << headerMode << ", psr=" << psr);
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   457
                }
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   458
              //Case 3bii: HT mixed format of HT greenfield
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   459
              else
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   460
                {
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   461
                  psr *= CalculateChunkSuccessRate (CalculateSnr (powerW,
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   462
                                                                  noiseInterferenceW,
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   463
                                                                  event->GetTxVector ().GetChannelWidth ()),
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   464
                                                    plcpHtTrainingSymbolsStart - previous,
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   465
                                                    htHeaderMode, event->GetTxVector ());
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   466
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   467
                  NS_LOG_DEBUG ("Case 3bii - previous is in HT-SIG and current is in HT training: mode=" << htHeaderMode << ", psr=" << psr);
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   468
                }
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   469
            }
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   470
          //Case 3c: current with previous in HT-SIG or VHT-SIG-A
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   471
          else
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   472
            {
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   473
              //Case 3bi: VHT format
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   474
              if (preamble == WIFI_PREAMBLE_VHT)
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   475
                {
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   476
                  //VHT-SIG-A is sent using legacy OFDM modulation
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   477
                  psr *= CalculateChunkSuccessRate (CalculateSnr (powerW,
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   478
                                                                  noiseInterferenceW,
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   479
                                                                  event->GetTxVector ().GetChannelWidth ()),
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   480
                                                    current - previous,
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   481
                                                    headerMode, event->GetTxVector ());
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   482
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   483
                  NS_LOG_DEBUG ("Case 3ci - previous with current in VHT-SIG-A: VHT mode=" << htHeaderMode << ", non-VHT mode=" << headerMode << ", psr=" << psr);
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   484
                }
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   485
              //Case 3bii: HT mixed format of HT greenfield
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   486
              else
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   487
                {
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   488
                  psr *= CalculateChunkSuccessRate (CalculateSnr (powerW,
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   489
                                                                  noiseInterferenceW,
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   490
                                                                  event->GetTxVector ().GetChannelWidth ()),
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   491
                                                    current - previous,
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   492
                                                    htHeaderMode, event->GetTxVector ());
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   493
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   494
                  NS_LOG_DEBUG ("Case 3cii - previous with current in HT-SIG: mode=" << htHeaderMode << ", psr=" << psr);
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   495
                }
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   496
            }
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   497
        }
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   498
      //Case 4: previous in L-SIG: HT GF will not reach here because it will execute the previous if and exit
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   499
      else if (previous >= plcpHeaderStart)
3905
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   500
        {
11452
f7e2c3127a02 Bug 2108 [wifi] - Erroneous implementation in InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11450
diff changeset
   501
          NS_ASSERT (preamble != WIFI_PREAMBLE_HT_GF);
11628
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   502
          //Case 4a: current after payload start
11348
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   503
          if (current >= plcpPayloadStart)
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11384
diff changeset
   504
            {
11628
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   505
              //Case 4ai: Non (V)HT format
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11384
diff changeset
   506
              if (preamble == WIFI_PREAMBLE_LONG || preamble == WIFI_PREAMBLE_SHORT)
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 7385
diff changeset
   507
                {
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11384
diff changeset
   508
                  psr *= CalculateChunkSuccessRate (CalculateSnr (powerW,
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11384
diff changeset
   509
                                                                  noiseInterferenceW,
11628
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   510
                                                                  event->GetTxVector ().GetChannelWidth ()),
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11384
diff changeset
   511
                                                    plcpPayloadStart - previous,
11628
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   512
                                                    headerMode, event->GetTxVector ());
11452
f7e2c3127a02 Bug 2108 [wifi] - Erroneous implementation in InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11450
diff changeset
   513
11628
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   514
                  NS_LOG_DEBUG ("Case 4ai - previous in L-SIG and current after payload start: mode=" << headerMode << ", psr=" << psr);
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 7385
diff changeset
   515
                }
11628
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   516
              //Case 4aii: VHT format
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   517
              else if (preamble == WIFI_PREAMBLE_VHT)
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   518
                {
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   519
                  psr *= CalculateChunkSuccessRate (CalculateSnr (powerW,
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   520
                                                                  noiseInterferenceW,
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   521
                                                                  event->GetTxVector ().GetChannelWidth ()),
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   522
                                                    plcpPayloadStart - plcpHtTrainingSymbolsStart,
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   523
                                                    htHeaderMode, event->GetTxVector ());
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   524
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   525
                  psr *= CalculateChunkSuccessRate (CalculateSnr (powerW,
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   526
                                                                  noiseInterferenceW,
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   527
                                                                  event->GetTxVector ().GetChannelWidth ()),
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   528
                                                    plcpHtTrainingSymbolsStart - previous,
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   529
                                                    headerMode, event->GetTxVector ());
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   530
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   531
                  NS_LOG_DEBUG ("Case 4aii - previous is in L-SIG and current after payload start: VHT mode=" << htHeaderMode << ", non-VHT mode=" << headerMode << ", psr=" << psr);
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   532
                }
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   533
              //Case 4aiii: HT mixed format
11348
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   534
              else
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   535
                {
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11384
diff changeset
   536
                  psr *= CalculateChunkSuccessRate (CalculateSnr (powerW,
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11384
diff changeset
   537
                                                                  noiseInterferenceW,
11628
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   538
                                                                  event->GetTxVector ().GetChannelWidth ()),
11452
f7e2c3127a02 Bug 2108 [wifi] - Erroneous implementation in InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11450
diff changeset
   539
                                                    plcpPayloadStart - plcpHsigHeaderStart,
11628
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   540
                                                    htHeaderMode, event->GetTxVector ());
11452
f7e2c3127a02 Bug 2108 [wifi] - Erroneous implementation in InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11450
diff changeset
   541
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11384
diff changeset
   542
                  psr *= CalculateChunkSuccessRate (CalculateSnr (powerW,
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11384
diff changeset
   543
                                                                  noiseInterferenceW,
11628
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   544
                                                                  event->GetTxVector ().GetChannelWidth ()),
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11384
diff changeset
   545
                                                    plcpHsigHeaderStart - previous,
11628
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   546
                                                    headerMode, event->GetTxVector ());
11452
f7e2c3127a02 Bug 2108 [wifi] - Erroneous implementation in InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11450
diff changeset
   547
11628
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   548
                  NS_LOG_DEBUG ("Case 4aiii - previous in L-SIG and current after payload start: HT mode=" << htHeaderMode << ", non-HT mode=" << headerMode << ", psr=" << psr);
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 7385
diff changeset
   549
                }
3905
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   550
            }
11628
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   551
          //Case 4b: current is in (V)HT training or in VHT-SIG-B. Non (V)HT will not come here since it went in previous if or if the previous if is not true this will be not true
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   552
          else if (current >= plcpHtTrainingSymbolsStart)
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   553
            {
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   554
              NS_ASSERT ((preamble != WIFI_PREAMBLE_LONG) && (preamble != WIFI_PREAMBLE_SHORT));
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   555
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   556
              //Case 4bi: VHT format
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   557
              if (preamble == WIFI_PREAMBLE_VHT)
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   558
                {
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   559
                  psr *= CalculateChunkSuccessRate (CalculateSnr (powerW,
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   560
                                                                  noiseInterferenceW,
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   561
                                                                  event->GetTxVector ().GetChannelWidth ()),
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   562
                                                    current - plcpHtTrainingSymbolsStart,
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   563
                                                    htHeaderMode, event->GetTxVector ());
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   564
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   565
                  psr *= CalculateChunkSuccessRate (CalculateSnr (powerW,
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   566
                                                                  noiseInterferenceW,
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   567
                                                                  event->GetTxVector ().GetChannelWidth ()),
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   568
                                                    plcpHtTrainingSymbolsStart - previous,
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   569
                                                    headerMode, event->GetTxVector ());
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   570
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   571
                  NS_LOG_DEBUG ("Case 4bi - previous is in L-SIG and current in VHT training or in VHT-SIG-B: VHT mode=" << htHeaderMode << ", non-VHT mode=" << headerMode << ", psr=" << psr);
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   572
                }
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   573
              //Case 4bii: HT mixed format
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   574
              else
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   575
                {
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   576
                  psr *= CalculateChunkSuccessRate (CalculateSnr (powerW,
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   577
                                                                  noiseInterferenceW,
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   578
                                                                  event->GetTxVector ().GetChannelWidth ()),
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   579
                                                    current - plcpHsigHeaderStart,
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   580
                                                    htHeaderMode, event->GetTxVector ());
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   581
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   582
                  psr *= CalculateChunkSuccessRate (CalculateSnr (powerW,
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   583
                                                                  noiseInterferenceW,
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   584
                                                                  event->GetTxVector ().GetChannelWidth ()),
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   585
                                                    plcpHsigHeaderStart - previous,
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   586
                                                    headerMode, event->GetTxVector ());
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   587
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   588
                  NS_LOG_DEBUG ("Case 4bii - previous in L-SIG and current in HT training: HT mode=" << htHeaderMode << ", non-HT mode=" << headerMode << ", psr=" << psr);
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   589
                }
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   590
            }
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   591
          //Case 4c: current in HT-SIG or in VHT-SIG-A. Non (V)HT will not come here since it went in previous if or if the previous if is not true this will be not true
11452
f7e2c3127a02 Bug 2108 [wifi] - Erroneous implementation in InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11450
diff changeset
   592
          else if (current >= plcpHsigHeaderStart)
f7e2c3127a02 Bug 2108 [wifi] - Erroneous implementation in InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11450
diff changeset
   593
            {
f7e2c3127a02 Bug 2108 [wifi] - Erroneous implementation in InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11450
diff changeset
   594
              NS_ASSERT ((preamble != WIFI_PREAMBLE_LONG) && (preamble != WIFI_PREAMBLE_SHORT));
f7e2c3127a02 Bug 2108 [wifi] - Erroneous implementation in InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11450
diff changeset
   595
11628
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   596
              //Case 4ci: VHT format
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   597
              if (preamble == WIFI_PREAMBLE_VHT)
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   598
                {
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   599
                  psr *= CalculateChunkSuccessRate (CalculateSnr (powerW,
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   600
                                                                  noiseInterferenceW,
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   601
                                                                  event->GetTxVector ().GetChannelWidth ()),
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   602
                                                    current - previous,
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   603
                                                    headerMode, event->GetTxVector ());
11452
f7e2c3127a02 Bug 2108 [wifi] - Erroneous implementation in InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11450
diff changeset
   604
11628
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   605
                  NS_LOG_DEBUG ("Case 4ci - previous is in L-SIG and current in VHT-SIG-A: mode=" << headerMode << ", psr=" << psr);
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   606
                }
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   607
              //Case 4cii: HT mixed format
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   608
              else
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   609
                {
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   610
                  psr *= CalculateChunkSuccessRate (CalculateSnr (powerW,
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   611
                                                                  noiseInterferenceW,
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   612
                                                                  event->GetTxVector ().GetChannelWidth ()),
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   613
                                                    current - plcpHsigHeaderStart,
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   614
                                                    htHeaderMode, event->GetTxVector ());
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   615
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   616
                  psr *= CalculateChunkSuccessRate (CalculateSnr (powerW,
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   617
                                                                  noiseInterferenceW,
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   618
                                                                  event->GetTxVector ().GetChannelWidth ()),
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   619
                                                    plcpHsigHeaderStart - previous,
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   620
                                                    headerMode, event->GetTxVector ());
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   621
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   622
                  NS_LOG_DEBUG ("Case 4cii - previous in L-SIG and current in HT-SIG: HT mode=" << htHeaderMode << ", non-HT mode=" << headerMode << ", psr=" << psr);
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   623
                }
11452
f7e2c3127a02 Bug 2108 [wifi] - Erroneous implementation in InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11450
diff changeset
   624
            }
11628
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   625
          //Case 4d: current with previous in L-SIG
11452
f7e2c3127a02 Bug 2108 [wifi] - Erroneous implementation in InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11450
diff changeset
   626
          else
3905
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   627
            {
11348
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   628
              psr *= CalculateChunkSuccessRate (CalculateSnr (powerW,
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   629
                                                              noiseInterferenceW,
11628
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   630
                                                              event->GetTxVector ().GetChannelWidth ()),
11452
f7e2c3127a02 Bug 2108 [wifi] - Erroneous implementation in InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11450
diff changeset
   631
                                                current - previous,
11628
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   632
                                                headerMode, event->GetTxVector ());
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11384
diff changeset
   633
11452
f7e2c3127a02 Bug 2108 [wifi] - Erroneous implementation in InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11450
diff changeset
   634
              NS_LOG_DEBUG ("Case 3c - current with previous in L-SIG: mode=" << headerMode << ", psr=" << psr);
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11384
diff changeset
   635
            }
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11384
diff changeset
   636
        }
11628
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   637
      //Case 5: previous is in the preamble works for all cases
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11384
diff changeset
   638
      else
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11384
diff changeset
   639
        {
11628
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   640
          //Case 5a: current after payload start
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11384
diff changeset
   641
          if (current >= plcpPayloadStart)
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11384
diff changeset
   642
            {
11628
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   643
              //Case 5ai: Non HT format (No HT-SIG or Training Symbols)
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11384
diff changeset
   644
              if (preamble == WIFI_PREAMBLE_LONG || preamble == WIFI_PREAMBLE_SHORT)
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11384
diff changeset
   645
                {
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11384
diff changeset
   646
                  psr *= CalculateChunkSuccessRate (CalculateSnr (powerW,
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11384
diff changeset
   647
                                                                  noiseInterferenceW,
11628
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   648
                                                                  event->GetTxVector ().GetChannelWidth ()),
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11384
diff changeset
   649
                                                    plcpPayloadStart - plcpHeaderStart,
11628
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   650
                                                    headerMode, event->GetTxVector ());
11452
f7e2c3127a02 Bug 2108 [wifi] - Erroneous implementation in InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11450
diff changeset
   651
11628
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   652
                  NS_LOG_DEBUG ("Case 5a - previous is in the preamble and current is after payload start: mode=" << headerMode << ", psr=" << psr);
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11384
diff changeset
   653
                }
11628
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   654
              //Case 5aii: VHT format
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   655
              else if (preamble == WIFI_PREAMBLE_VHT)
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   656
                {
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   657
                  psr *= CalculateChunkSuccessRate (CalculateSnr (powerW,
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   658
                                                                  noiseInterferenceW,
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   659
                                                                  event->GetTxVector ().GetChannelWidth ()),
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   660
                                                    plcpPayloadStart - plcpHtTrainingSymbolsStart,
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   661
                                                    htHeaderMode, event->GetTxVector ());
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   662
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   663
                  psr *= CalculateChunkSuccessRate (CalculateSnr (powerW,
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   664
                                                                  noiseInterferenceW,
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   665
                                                                  event->GetTxVector ().GetChannelWidth ()),
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   666
                                                    plcpHtTrainingSymbolsStart - plcpHeaderStart,
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   667
                                                    headerMode, event->GetTxVector ());
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   668
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   669
                  NS_LOG_DEBUG ("Case 5aii - previous is in the preamble and current is after payload start: VHT mode=" << htHeaderMode << ", non-VHT mode=" << headerMode << ", psr=" << psr);
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   670
                }
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   671
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   672
              //Case 5aiii: HT format
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11384
diff changeset
   673
              else
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11384
diff changeset
   674
                {
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11384
diff changeset
   675
                  psr *= CalculateChunkSuccessRate (CalculateSnr (powerW,
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11384
diff changeset
   676
                                                                  noiseInterferenceW,
11628
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   677
                                                                  event->GetTxVector ().GetChannelWidth ()),
11452
f7e2c3127a02 Bug 2108 [wifi] - Erroneous implementation in InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11450
diff changeset
   678
                                                    plcpPayloadStart - plcpHsigHeaderStart,
11628
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   679
                                                    htHeaderMode, event->GetTxVector ());
11452
f7e2c3127a02 Bug 2108 [wifi] - Erroneous implementation in InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11450
diff changeset
   680
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11384
diff changeset
   681
                  psr *= CalculateChunkSuccessRate (CalculateSnr (powerW,
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11384
diff changeset
   682
                                                                  noiseInterferenceW,
11628
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   683
                                                                  event->GetTxVector ().GetChannelWidth ()),
11452
f7e2c3127a02 Bug 2108 [wifi] - Erroneous implementation in InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11450
diff changeset
   684
                                                    plcpHsigHeaderStart - plcpHeaderStart, //HT GF: plcpHsigHeaderStart - plcpHeaderStart = 0
11628
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   685
                                                    headerMode, event->GetTxVector ());
11452
f7e2c3127a02 Bug 2108 [wifi] - Erroneous implementation in InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11450
diff changeset
   686
11628
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   687
                  NS_LOG_DEBUG ("Case 4a - previous is in the preamble and current is after payload start: HT mode=" << htHeaderMode << ", non-HT mode=" << headerMode << ", psr=" << psr);
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11384
diff changeset
   688
                }
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11384
diff changeset
   689
            }
11628
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   690
          //Case 5b: current is in (V)HT training or in VHT-SIG-B. Non (V)HT will not come here since it went in previous if or if the previous if is not true this will be not true
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   691
          else if (current >= plcpHtTrainingSymbolsStart)
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   692
            {
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   693
              NS_ASSERT ((preamble != WIFI_PREAMBLE_LONG) && (preamble != WIFI_PREAMBLE_SHORT));
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   694
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   695
              //Case 5bi: VHT format
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   696
              if (preamble == WIFI_PREAMBLE_VHT)
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   697
                {
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   698
                  psr *= CalculateChunkSuccessRate (CalculateSnr (powerW,
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   699
                                                                  noiseInterferenceW,
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   700
                                                                  event->GetTxVector ().GetChannelWidth ()),
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   701
                                                    current - plcpHtTrainingSymbolsStart,
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   702
                                                    htHeaderMode, event->GetTxVector ());
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   703
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   704
                  psr *= CalculateChunkSuccessRate (CalculateSnr (powerW,
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   705
                                                                  noiseInterferenceW,
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   706
                                                                  event->GetTxVector ().GetChannelWidth ()),
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   707
                                                    plcpHtTrainingSymbolsStart - plcpHeaderStart,
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   708
                                                    headerMode, event->GetTxVector ());
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   709
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   710
                  NS_LOG_DEBUG ("Case 5bi - previous is in the preamble and current in VHT training or in VHT-SIG-B: VHT mode=" << htHeaderMode << ", non-VHT mode=" << headerMode << ", psr=" << psr);
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   711
                }
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   712
              //Case 45ii: HT mixed format
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   713
              else
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   714
                {
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   715
                  psr *= CalculateChunkSuccessRate (CalculateSnr (powerW,
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   716
                                                                  noiseInterferenceW,
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   717
                                                                  event->GetTxVector ().GetChannelWidth ()),
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   718
                                                    current - plcpHsigHeaderStart,
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   719
                                                    htHeaderMode, event->GetTxVector ());
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   720
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   721
                  psr *= CalculateChunkSuccessRate (CalculateSnr (powerW,
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   722
                                                                  noiseInterferenceW,
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   723
                                                                  event->GetTxVector ().GetChannelWidth ()),
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   724
                                                    plcpHsigHeaderStart - plcpHeaderStart,
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   725
                                                    headerMode, event->GetTxVector ());
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   726
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   727
                  NS_LOG_DEBUG ("Case 5bii - previous is in the preamble and current in HT training: HT mode=" << htHeaderMode << ", non-HT mode=" << headerMode << ", psr=" << psr);
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   728
                }
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   729
            }
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   730
          //Case 5c: current in HT-SIG or in VHT-SIG-A. Non (V)HT will not come here since it went in previous if or if the previous if is not true this will be not true
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11384
diff changeset
   731
          else if (current >= plcpHsigHeaderStart)
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11384
diff changeset
   732
            {
11452
f7e2c3127a02 Bug 2108 [wifi] - Erroneous implementation in InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11450
diff changeset
   733
              NS_ASSERT ((preamble != WIFI_PREAMBLE_LONG) && (preamble != WIFI_PREAMBLE_SHORT));
f7e2c3127a02 Bug 2108 [wifi] - Erroneous implementation in InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11450
diff changeset
   734
11628
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   735
              //Case 5ci: VHT format
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   736
              if (preamble == WIFI_PREAMBLE_VHT)
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   737
                {
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   738
                  psr *= CalculateChunkSuccessRate (CalculateSnr (powerW,
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   739
                                                                  noiseInterferenceW,
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   740
                                                                  event->GetTxVector ().GetChannelWidth ()),
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   741
                                                    current - plcpHeaderStart,
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   742
                                                    headerMode, event->GetTxVector ());
11452
f7e2c3127a02 Bug 2108 [wifi] - Erroneous implementation in InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11450
diff changeset
   743
11628
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   744
                  NS_LOG_DEBUG ("Case 5ci - previous is in preamble and current in VHT-SIG-A: mode=" << headerMode << ", psr=" << psr);
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   745
                }
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   746
              //Case 5cii: HT mixed format
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   747
              else
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   748
                {
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   749
                  psr *= CalculateChunkSuccessRate (CalculateSnr (powerW,
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   750
                                                                  noiseInterferenceW,
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   751
                                                                  event->GetTxVector ().GetChannelWidth ()),
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   752
                                                    current - plcpHsigHeaderStart,
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   753
                                                    htHeaderMode, event->GetTxVector ());
11452
f7e2c3127a02 Bug 2108 [wifi] - Erroneous implementation in InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11450
diff changeset
   754
11628
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   755
                  psr *= CalculateChunkSuccessRate (CalculateSnr (powerW,
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   756
                                                                  noiseInterferenceW,
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   757
                                                                  event->GetTxVector ().GetChannelWidth ()),
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   758
                                                    plcpHsigHeaderStart - plcpHeaderStart, //HT GF: plcpHsigHeaderStart - plcpHeaderStart = 0
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   759
                                                    headerMode, event->GetTxVector ());
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   760
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   761
                  NS_LOG_DEBUG ("Case 5cii - previous in preamble and current in HT-SIG: HT mode=" << htHeaderMode << ", non-HT mode=" << headerMode << ", psr=" << psr);
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   762
                }
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11384
diff changeset
   763
            }
11628
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   764
          //Case 5d: current is in L-SIG. HT GF will not come here
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11384
diff changeset
   765
          else if (current >= plcpHeaderStart)
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11384
diff changeset
   766
            {
11452
f7e2c3127a02 Bug 2108 [wifi] - Erroneous implementation in InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11450
diff changeset
   767
              NS_ASSERT (preamble != WIFI_PREAMBLE_HT_GF);
f7e2c3127a02 Bug 2108 [wifi] - Erroneous implementation in InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11450
diff changeset
   768
f7e2c3127a02 Bug 2108 [wifi] - Erroneous implementation in InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11450
diff changeset
   769
              psr *= CalculateChunkSuccessRate (CalculateSnr (powerW,
f7e2c3127a02 Bug 2108 [wifi] - Erroneous implementation in InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11450
diff changeset
   770
                                                              noiseInterferenceW,
11628
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   771
                                                              event->GetTxVector ().GetChannelWidth ()),
11452
f7e2c3127a02 Bug 2108 [wifi] - Erroneous implementation in InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11450
diff changeset
   772
                                                current - plcpHeaderStart,
11628
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   773
                                                headerMode, event->GetTxVector ());
11452
f7e2c3127a02 Bug 2108 [wifi] - Erroneous implementation in InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11450
diff changeset
   774
11628
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   775
              NS_LOG_DEBUG ("Case 5d - previous is in the preamble and current is in L-SIG: mode=" << headerMode << ", psr=" << psr);
3905
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   776
            }
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   777
        }
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   778
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   779
      noiseInterferenceW += (*j).GetDelta ();
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   780
      previous = (*j).GetTime ();
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   781
      j++;
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   782
    }
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   783
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   784
  double per = 1 - psr;
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   785
  return per;
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   786
}
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   787
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   788
struct InterferenceHelper::SnrPer
11348
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   789
InterferenceHelper::CalculatePlcpPayloadSnrPer (Ptr<InterferenceHelper::Event> event)
3905
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   790
{
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   791
  NiChanges ni;
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   792
  double noiseInterferenceW = CalculateNoiseInterferenceW (event, &ni);
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   793
  double snr = CalculateSnr (event->GetRxPowerW (),
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   794
                             noiseInterferenceW,
11628
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   795
                             event->GetTxVector ().GetChannelWidth ());
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   796
3905
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   797
  /* calculate the SNIR at the start of the packet and accumulate
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   798
   * all SNIR changes in the snir vector.
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   799
   */
11348
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   800
  double per = CalculatePlcpPayloadPer (event, &ni);
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   801
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   802
  struct SnrPer snrPer;
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   803
  snrPer.snr = snr;
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   804
  snrPer.per = per;
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   805
  return snrPer;
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   806
}
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   807
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   808
struct InterferenceHelper::SnrPer
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   809
InterferenceHelper::CalculatePlcpHeaderSnrPer (Ptr<InterferenceHelper::Event> event)
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   810
{
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   811
  NiChanges ni;
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   812
  double noiseInterferenceW = CalculateNoiseInterferenceW (event, &ni);
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   813
  double snr = CalculateSnr (event->GetRxPowerW (),
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   814
                             noiseInterferenceW,
11628
243b71de25a0 add support for IEEE 802.11ac
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11570
diff changeset
   815
                             event->GetTxVector ().GetChannelWidth ());
11348
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   816
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   817
  /* calculate the SNIR at the start of the plcp header and accumulate
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   818
   * all SNIR changes in the snir vector.
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   819
   */
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   820
  double per = CalculatePlcpHeaderPer (event, &ni);
3905
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   821
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   822
  struct SnrPer snrPer;
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   823
  snrPer.snr = snr;
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   824
  snrPer.per = per;
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   825
  return snrPer;
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   826
}
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   827
5189
8fcdf87a790a Channel switching support for Wifi
Ramon Bauza
parents: 4689
diff changeset
   828
void
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   829
InterferenceHelper::EraseEvents (void)
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   830
{
6474
0894b2a245e9 fixed Bug 799 - Interference helper is too slow
Kirill Andreev <andreev@iitp.ru>
parents: 6360
diff changeset
   831
  m_niChanges.clear ();
6666
21a9b1879f27 fixed bug 991
Kirill Andreev <andreev@iitp.ru>
parents: 6597
diff changeset
   832
  m_rxing = false;
6474
0894b2a245e9 fixed Bug 799 - Interference helper is too slow
Kirill Andreev <andreev@iitp.ru>
parents: 6360
diff changeset
   833
  m_firstPower = 0.0;
5189
8fcdf87a790a Channel switching support for Wifi
Ramon Bauza
parents: 4689
diff changeset
   834
}
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11384
diff changeset
   835
6474
0894b2a245e9 fixed Bug 799 - Interference helper is too slow
Kirill Andreev <andreev@iitp.ru>
parents: 6360
diff changeset
   836
InterferenceHelper::NiChanges::iterator
0894b2a245e9 fixed Bug 799 - Interference helper is too slow
Kirill Andreev <andreev@iitp.ru>
parents: 6360
diff changeset
   837
InterferenceHelper::GetPosition (Time moment)
0894b2a245e9 fixed Bug 799 - Interference helper is too slow
Kirill Andreev <andreev@iitp.ru>
parents: 6360
diff changeset
   838
{
0894b2a245e9 fixed Bug 799 - Interference helper is too slow
Kirill Andreev <andreev@iitp.ru>
parents: 6360
diff changeset
   839
  return std::upper_bound (m_niChanges.begin (), m_niChanges.end (), NiChange (moment, 0));
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11384
diff changeset
   840
}
3905
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   841
5413
64931d320790 fix valgrind complaints (bug 711)
Craig Dowell <craigdo@ee.washington.edu>
parents: 5236
diff changeset
   842
void
6474
0894b2a245e9 fixed Bug 799 - Interference helper is too slow
Kirill Andreev <andreev@iitp.ru>
parents: 6360
diff changeset
   843
InterferenceHelper::AddNiChangeEvent (NiChange change)
0894b2a245e9 fixed Bug 799 - Interference helper is too slow
Kirill Andreev <andreev@iitp.ru>
parents: 6360
diff changeset
   844
{
0894b2a245e9 fixed Bug 799 - Interference helper is too slow
Kirill Andreev <andreev@iitp.ru>
parents: 6360
diff changeset
   845
  m_niChanges.insert (GetPosition (change.GetTime ()), change);
5413
64931d320790 fix valgrind complaints (bug 711)
Craig Dowell <craigdo@ee.washington.edu>
parents: 5236
diff changeset
   846
}
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11384
diff changeset
   847
6474
0894b2a245e9 fixed Bug 799 - Interference helper is too slow
Kirill Andreev <andreev@iitp.ru>
parents: 6360
diff changeset
   848
void
0894b2a245e9 fixed Bug 799 - Interference helper is too slow
Kirill Andreev <andreev@iitp.ru>
parents: 6360
diff changeset
   849
InterferenceHelper::NotifyRxStart ()
0894b2a245e9 fixed Bug 799 - Interference helper is too slow
Kirill Andreev <andreev@iitp.ru>
parents: 6360
diff changeset
   850
{
11452
f7e2c3127a02 Bug 2108 [wifi] - Erroneous implementation in InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11450
diff changeset
   851
  NS_LOG_FUNCTION (this);
6474
0894b2a245e9 fixed Bug 799 - Interference helper is too slow
Kirill Andreev <andreev@iitp.ru>
parents: 6360
diff changeset
   852
  m_rxing = true;
0894b2a245e9 fixed Bug 799 - Interference helper is too slow
Kirill Andreev <andreev@iitp.ru>
parents: 6360
diff changeset
   853
}
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11384
diff changeset
   854
6474
0894b2a245e9 fixed Bug 799 - Interference helper is too slow
Kirill Andreev <andreev@iitp.ru>
parents: 6360
diff changeset
   855
void
0894b2a245e9 fixed Bug 799 - Interference helper is too slow
Kirill Andreev <andreev@iitp.ru>
parents: 6360
diff changeset
   856
InterferenceHelper::NotifyRxEnd ()
0894b2a245e9 fixed Bug 799 - Interference helper is too slow
Kirill Andreev <andreev@iitp.ru>
parents: 6360
diff changeset
   857
{
11452
f7e2c3127a02 Bug 2108 [wifi] - Erroneous implementation in InterferenceHelper
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11450
diff changeset
   858
  NS_LOG_FUNCTION (this);
6474
0894b2a245e9 fixed Bug 799 - Interference helper is too slow
Kirill Andreev <andreev@iitp.ru>
parents: 6360
diff changeset
   859
  m_rxing = false;
0894b2a245e9 fixed Bug 799 - Interference helper is too slow
Kirill Andreev <andreev@iitp.ru>
parents: 6360
diff changeset
   860
}
11450
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11384
diff changeset
   861
9f4ae69f12b7 cleanup wifi module
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11384
diff changeset
   862
} //namespace ns3