src/wifi/model/interference-helper.cc
author Sébastien Deronne <sebastien.deronne@gmail.com>
Sun, 03 May 2015 16:06:01 +0200
changeset 11348 ded786322135
parent 11332 8ea5c08711a3
child 11384 935dc1cc08a4
permissions -rw-r--r--
Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
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
 *
acc6c801f785 bug 548: missing license header
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4315
diff changeset
    18
 * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
acc6c801f785 bug 548: missing license header
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4315
diff changeset
    19
 */
3905
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    20
#include "interference-helper.h"
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    21
#include "wifi-phy.h"
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    22
#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
    23
#include "ns3/simulator.h"
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    24
#include "ns3/log.h"
3906
01acc159ffb1 merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3905
diff changeset
    25
#include <algorithm>
3905
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    26
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
    27
namespace ns3 {
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
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
    30
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    31
/****************************************************************
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    32
 *       Phy event class
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
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
    35
InterferenceHelper::Event::Event (uint32_t size, WifiMode payloadMode,
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
    36
                                  enum WifiPreamble preamble,
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 7385
diff changeset
    37
                                  Time duration, double rxPower, WifiTxVector txVector)
3905
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    38
  : m_size (size),
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    39
    m_payloadMode (payloadMode),
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    40
    m_preamble (preamble),
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    41
    m_startTime (Simulator::Now ()),
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    42
    m_endTime (m_startTime + duration),
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 7385
diff changeset
    43
    m_rxPowerW (rxPower),
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 7385
diff changeset
    44
    m_txVector (txVector)
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
    45
{
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
    46
}
3905
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    47
InterferenceHelper::Event::~Event ()
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
    48
{
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
    49
}
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
Time
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
    52
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
    53
{
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    54
  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
    55
}
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
    56
Time
3905
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    57
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
    58
{
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    59
  return m_startTime;
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    60
}
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
    61
Time
3905
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    62
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
    63
{
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    64
  return m_endTime;
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    65
}
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
    66
double
3905
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    67
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
    68
{
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    69
  return m_rxPowerW;
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    70
}
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
    71
uint32_t
3905
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    72
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
    73
{
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    74
  return m_size;
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    75
}
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
    76
WifiMode
3905
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    77
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
    78
{
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    79
  return m_payloadMode;
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    80
}
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
    81
enum WifiPreamble
3905
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    82
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
    83
{
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    84
  return m_preamble;
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    85
}
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    86
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 7385
diff changeset
    87
WifiTxVector
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 7385
diff changeset
    88
InterferenceHelper::Event::GetTxVector (void) const
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 7385
diff changeset
    89
{
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 7385
diff changeset
    90
  return m_txVector;
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 7385
diff changeset
    91
}
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 7385
diff changeset
    92
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 7385
diff changeset
    93
3905
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    94
/****************************************************************
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
    95
 *       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
    96
 *       short period of time.
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
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    99
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
   100
  : m_time (time),
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   101
    m_delta (delta)
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   102
{
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   103
}
3905
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   104
Time
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   105
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
   106
{
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   107
  return m_time;
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   108
}
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   109
double
3905
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   110
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
   111
{
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   112
  return m_delta;
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   113
}
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   114
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
   115
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
   116
{
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
   117
  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
   118
}
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   119
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   120
/****************************************************************
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   121
 *       The actual InterferenceHelper
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   122
 ****************************************************************/
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   123
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   124
InterferenceHelper::InterferenceHelper ()
6474
0894b2a245e9 fixed Bug 799 - Interference helper is too slow
Kirill Andreev <andreev@iitp.ru>
parents: 6360
diff changeset
   125
  : m_errorRateModel (0),
0894b2a245e9 fixed Bug 799 - Interference helper is too slow
Kirill Andreev <andreev@iitp.ru>
parents: 6360
diff changeset
   126
    m_firstPower (0.0),
0894b2a245e9 fixed Bug 799 - Interference helper is too slow
Kirill Andreev <andreev@iitp.ru>
parents: 6360
diff changeset
   127
    m_rxing (false)
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   128
{
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   129
}
3906
01acc159ffb1 merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3905
diff changeset
   130
InterferenceHelper::~InterferenceHelper ()
01acc159ffb1 merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3905
diff changeset
   131
{
5417
899604299046 plug leaks (bug 711)
Craig Dowell <craigdo@ee.washington.edu>
parents: 5413
diff changeset
   132
  EraseEvents ();
3906
01acc159ffb1 merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3905
diff changeset
   133
  m_errorRateModel = 0;
01acc159ffb1 merge with HEAD
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3905
diff changeset
   134
}
3905
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   135
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   136
Ptr<InterferenceHelper::Event>
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   137
InterferenceHelper::Add (uint32_t size, WifiMode payloadMode,
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   138
                         enum WifiPreamble preamble,
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 7385
diff changeset
   139
                         Time duration, double rxPowerW, WifiTxVector txVector)
3905
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   140
{
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   141
  Ptr<InterferenceHelper::Event> event;
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   142
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   143
  event = Create<InterferenceHelper::Event> (size,
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   144
                                             payloadMode,
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   145
                                             preamble,
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   146
                                             duration,
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 7385
diff changeset
   147
                                             rxPowerW,
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 7385
diff changeset
   148
                                             txVector);
3905
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   149
  AppendEvent (event);
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   150
  return event;
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   151
}
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   152
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   153
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   154
void
4315
56a5bf298339 noiseFloor -> noiseFigure (bug 543)
Nicola Baldo <nbaldo@cttc.es>
parents: 4039
diff changeset
   155
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
   156
{
4315
56a5bf298339 noiseFloor -> noiseFigure (bug 543)
Nicola Baldo <nbaldo@cttc.es>
parents: 4039
diff changeset
   157
  m_noiseFigure = value;
3905
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   158
}
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   159
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   160
double
4315
56a5bf298339 noiseFloor -> noiseFigure (bug 543)
Nicola Baldo <nbaldo@cttc.es>
parents: 4039
diff changeset
   161
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
   162
{
4315
56a5bf298339 noiseFloor -> noiseFigure (bug 543)
Nicola Baldo <nbaldo@cttc.es>
parents: 4039
diff changeset
   163
  return m_noiseFigure;
3905
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
3905
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   167
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
   168
{
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   169
  m_errorRateModel = rate;
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
Ptr<ErrorRateModel>
3905
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   173
InterferenceHelper::GetErrorRateModel (void) const
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   174
{
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   175
  return m_errorRateModel;
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
Time
3905
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   179
InterferenceHelper::GetEnergyDuration (double energyW)
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
  Time now = Simulator::Now ();
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   182
  double noiseInterferenceW = 0.0;
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   183
  Time end = now;
6474
0894b2a245e9 fixed Bug 799 - Interference helper is too slow
Kirill Andreev <andreev@iitp.ru>
parents: 6360
diff changeset
   184
  noiseInterferenceW = m_firstPower;
0894b2a245e9 fixed Bug 799 - Interference helper is too slow
Kirill Andreev <andreev@iitp.ru>
parents: 6360
diff changeset
   185
  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
   186
    {
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   187
      noiseInterferenceW += i->GetDelta ();
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   188
      end = i->GetTime ();
6474
0894b2a245e9 fixed Bug 799 - Interference helper is too slow
Kirill Andreev <andreev@iitp.ru>
parents: 6360
diff changeset
   189
      if (end < now)
0894b2a245e9 fixed Bug 799 - Interference helper is too slow
Kirill Andreev <andreev@iitp.ru>
parents: 6360
diff changeset
   190
        {
0894b2a245e9 fixed Bug 799 - Interference helper is too slow
Kirill Andreev <andreev@iitp.ru>
parents: 6360
diff changeset
   191
          continue;
0894b2a245e9 fixed Bug 799 - Interference helper is too slow
Kirill Andreev <andreev@iitp.ru>
parents: 6360
diff changeset
   192
        }
0894b2a245e9 fixed Bug 799 - Interference helper is too slow
Kirill Andreev <andreev@iitp.ru>
parents: 6360
diff changeset
   193
      if (noiseInterferenceW < energyW)
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   194
        {
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   195
          break;
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   196
        }
3905
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   197
    }
6474
0894b2a245e9 fixed Bug 799 - Interference helper is too slow
Kirill Andreev <andreev@iitp.ru>
parents: 6360
diff changeset
   198
  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
   199
}
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   200
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   201
void
3905
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   202
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
   203
{
6474
0894b2a245e9 fixed Bug 799 - Interference helper is too slow
Kirill Andreev <andreev@iitp.ru>
parents: 6360
diff changeset
   204
  Time now = Simulator::Now ();
0894b2a245e9 fixed Bug 799 - Interference helper is too slow
Kirill Andreev <andreev@iitp.ru>
parents: 6360
diff changeset
   205
  if (!m_rxing)
3905
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   206
    {
6474
0894b2a245e9 fixed Bug 799 - Interference helper is too slow
Kirill Andreev <andreev@iitp.ru>
parents: 6360
diff changeset
   207
      NiChanges::iterator nowIterator = GetPosition (now);
0894b2a245e9 fixed Bug 799 - Interference helper is too slow
Kirill Andreev <andreev@iitp.ru>
parents: 6360
diff changeset
   208
      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
   209
        {
6474
0894b2a245e9 fixed Bug 799 - Interference helper is too slow
Kirill Andreev <andreev@iitp.ru>
parents: 6360
diff changeset
   210
          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
   211
        }
6474
0894b2a245e9 fixed Bug 799 - Interference helper is too slow
Kirill Andreev <andreev@iitp.ru>
parents: 6360
diff changeset
   212
      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
   213
      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
   214
    }
0894b2a245e9 fixed Bug 799 - Interference helper is too slow
Kirill Andreev <andreev@iitp.ru>
parents: 6360
diff changeset
   215
  else
0894b2a245e9 fixed Bug 799 - Interference helper is too slow
Kirill Andreev <andreev@iitp.ru>
parents: 6360
diff changeset
   216
    {
0894b2a245e9 fixed Bug 799 - Interference helper is too slow
Kirill Andreev <andreev@iitp.ru>
parents: 6360
diff changeset
   217
      AddNiChangeEvent (NiChange (event->GetStartTime (), event->GetRxPowerW ()));
0894b2a245e9 fixed Bug 799 - Interference helper is too slow
Kirill Andreev <andreev@iitp.ru>
parents: 6360
diff changeset
   218
    }
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   219
  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
   220
3905
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   221
}
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   222
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   223
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   224
double
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   225
InterferenceHelper::CalculateSnr (double signal, double noiseInterference, WifiMode mode) const
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   226
{
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   227
  // thermal noise at 290K in J/s = W
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   228
  static const double BOLTZMANN = 1.3803e-23;
4315
56a5bf298339 noiseFloor -> noiseFigure (bug 543)
Nicola Baldo <nbaldo@cttc.es>
parents: 4039
diff changeset
   229
  // Nt is the power of thermal noise in W
3905
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   230
  double Nt = BOLTZMANN * 290.0 * mode.GetBandwidth ();
4315
56a5bf298339 noiseFloor -> noiseFigure (bug 543)
Nicola Baldo <nbaldo@cttc.es>
parents: 4039
diff changeset
   231
  // receiver noise Floor (W) which accounts for thermal noise and non-idealities of the receiver
56a5bf298339 noiseFloor -> noiseFigure (bug 543)
Nicola Baldo <nbaldo@cttc.es>
parents: 4039
diff changeset
   232
  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
   233
  double noise = noiseFloor + noiseInterference;
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   234
  double snr = signal / noise;
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   235
  return snr;
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   236
}
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   237
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   238
double
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   239
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
   240
{
6474
0894b2a245e9 fixed Bug 799 - Interference helper is too slow
Kirill Andreev <andreev@iitp.ru>
parents: 6360
diff changeset
   241
  double noiseInterference = m_firstPower;
0894b2a245e9 fixed Bug 799 - Interference helper is too slow
Kirill Andreev <andreev@iitp.ru>
parents: 6360
diff changeset
   242
  NS_ASSERT (m_rxing);
0894b2a245e9 fixed Bug 799 - Interference helper is too slow
Kirill Andreev <andreev@iitp.ru>
parents: 6360
diff changeset
   243
  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
   244
    {
6474
0894b2a245e9 fixed Bug 799 - Interference helper is too slow
Kirill Andreev <andreev@iitp.ru>
parents: 6360
diff changeset
   245
      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
   246
        {
6474
0894b2a245e9 fixed Bug 799 - Interference helper is too slow
Kirill Andreev <andreev@iitp.ru>
parents: 6360
diff changeset
   247
          break;
3905
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   248
        }
6474
0894b2a245e9 fixed Bug 799 - Interference helper is too slow
Kirill Andreev <andreev@iitp.ru>
parents: 6360
diff changeset
   249
      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
   250
    }
6474
0894b2a245e9 fixed Bug 799 - Interference helper is too slow
Kirill Andreev <andreev@iitp.ru>
parents: 6360
diff changeset
   251
  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
   252
  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
   253
  return noiseInterference;
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   254
}
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   255
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   256
double
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   257
InterferenceHelper::CalculateChunkSuccessRate (double snir, Time duration, WifiMode mode) const
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   258
{
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   259
  if (duration == NanoSeconds (0))
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   260
    {
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   261
      return 1.0;
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   262
    }
3905
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   263
  uint32_t rate = mode.GetPhyRate ();
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   264
  uint64_t nbits = (uint64_t)(rate * duration.GetSeconds ());
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   265
  double csr = m_errorRateModel->GetChunkSuccessRate (mode, snir, (uint32_t)nbits);
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   266
  return csr;
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
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   269
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
   270
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
   271
{
3905
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   272
  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
   273
  NiChanges::iterator j = ni->begin ();
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   274
  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
   275
  WifiMode payloadMode = event->GetPayloadMode ();
4681
8558474b6149 made InterferenceHelper::CalculateTxDuration () static
Nicola Baldo <nbaldo@cttc.es>
parents: 4680
diff changeset
   276
  WifiPreamble preamble = event->GetPreambleType ();
11119
067928a573cd remove unnecessary Time to double conversions in wifi models
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11118
diff changeset
   277
  Time plcpHeaderStart = (*j).GetTime () + WifiPhy::GetPlcpPreambleDuration (payloadMode, preamble); //packet start time+ preamble
067928a573cd remove unnecessary Time to double conversions in wifi models
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11118
diff changeset
   278
  Time plcpHsigHeaderStart = plcpHeaderStart + WifiPhy::GetPlcpHeaderDuration (payloadMode, preamble);//packet start time+ preamble+L SIG
11332
8ea5c08711a3 remove unused payloadMode argument in WifiPhy::GetPlcpHtSigHeaderDuration
Ghada Badawy <gbadawy@gmail.com>
parents: 11119
diff changeset
   279
  Time plcpHtTrainingSymbolsStart = plcpHsigHeaderStart + WifiPhy::GetPlcpHtSigHeaderDuration (preamble);//packet start time+ preamble+L SIG+HT SIG
11119
067928a573cd remove unnecessary Time to double conversions in wifi models
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11118
diff changeset
   280
  Time plcpPayloadStart =plcpHtTrainingSymbolsStart + WifiPhy::GetPlcpHtTrainingSymbolDuration (preamble,event->GetTxVector()); //packet start time+ preamble+L SIG+HT SIG+Training
3905
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   281
  double noiseInterferenceW = (*j).GetDelta ();
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   282
  double powerW = event->GetRxPowerW ();
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 7385
diff changeset
   283
    j++;
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   284
  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
   285
    {
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   286
      Time current = (*j).GetTime ();
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   287
      NS_ASSERT (current >= previous);
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 7385
diff changeset
   288
      //Case 1: Both prev and curr point to the payload
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   289
      if (previous >= plcpPayloadStart)
3905
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   290
        {
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   291
          psr *= CalculateChunkSuccessRate (CalculateSnr (powerW,
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   292
                                                          noiseInterferenceW,
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   293
                                                          payloadMode),
3905
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   294
                                            current - previous,
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   295
                                            payloadMode);
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   296
        }
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 7385
diff changeset
   297
      //Case 2: previous is before payload
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 7385
diff changeset
   298
      else if (previous >= plcpHtTrainingSymbolsStart)
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 7385
diff changeset
   299
        {
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 7385
diff changeset
   300
          //Case 2a: current is after payload
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 7385
diff changeset
   301
          if (current >= plcpPayloadStart)
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 7385
diff changeset
   302
            { 
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 7385
diff changeset
   303
               //Case 2ai and 2aii: All formats
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 7385
diff changeset
   304
               psr *= CalculateChunkSuccessRate (CalculateSnr (powerW,
11348
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   305
                                                               noiseInterferenceW,
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   306
                                                               payloadMode),
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   307
                                                 current - plcpPayloadStart,
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   308
                                                 payloadMode);
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   309
                
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   310
            }
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   311
        }
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   312
      //Case 3: previous is in HT-SIG: Non HT will not enter here since it didn't enter in the last two and they are all the same for non HT
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   313
      else if (previous >= plcpHsigHeaderStart)
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   314
        {
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   315
          //Case 3a: cuurent after payload start
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   316
          if (current >= plcpPayloadStart)
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   317
             {
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   318
                   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
   319
                                                                   noiseInterferenceW,
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   320
                                                                   payloadMode),
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   321
                                                     current - plcpPayloadStart,
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   322
                                                     payloadMode);
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   323
                 
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
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   326
        }
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   327
      //Case 4: previous in L-SIG: GF will not reach here because it will execute the previous if and exit
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   328
      else if (previous >= plcpHeaderStart)
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
          //Case 4a: current after payload start  
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   331
          if (current >= plcpPayloadStart)
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
                   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
   334
                                                                   noiseInterferenceW,
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   335
                                                                   payloadMode),
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   336
                                                     current - plcpPayloadStart,
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   337
                                                     payloadMode);
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   338
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   339
              }
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   340
        }
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   341
      //Case 5: previous is in the preamble works for all cases
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   342
      else
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   343
        {
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 (current >= plcpPayloadStart)
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   345
            {
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   346
              //for all
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   347
              psr *= CalculateChunkSuccessRate (CalculateSnr (powerW,
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 7385
diff changeset
   348
                                                              noiseInterferenceW,
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 7385
diff changeset
   349
                                                              payloadMode),
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 7385
diff changeset
   350
                                                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
   351
                                                payloadMode); 
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   352
             
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   353
            }
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 7385
diff changeset
   354
        }
11348
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   355
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   356
      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
   357
      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
   358
      j++;
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   359
    }
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   360
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   361
  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
   362
  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
   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
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   365
double
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   366
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
   367
{
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   368
  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
   369
  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
   370
  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
   371
  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
   372
  WifiPreamble preamble = event->GetPreambleType ();
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   373
  WifiMode MfHeaderMode ;
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   374
  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
   375
    {
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   376
      MfHeaderMode = WifiPhy::GetMFPlcpHeaderMode (payloadMode, preamble); //return L-SIG mode
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   377
    }
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   378
  WifiMode headerMode = WifiPhy::GetPlcpHeaderMode (payloadMode, preamble);
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   379
  Time plcpHeaderStart = (*j).GetTime () + WifiPhy::GetPlcpPreambleDuration (payloadMode, preamble); // packet start time + preamble
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   380
  Time plcpHsigHeaderStart = plcpHeaderStart + WifiPhy::GetPlcpHeaderDuration (payloadMode, preamble); // packet start time + preamble+L SIG
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   381
  Time plcpHtTrainingSymbolsStart = plcpHsigHeaderStart + WifiPhy::GetPlcpHtSigHeaderDuration (preamble); // packet start time + preamble + L SIG + HT SIG
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   382
  Time plcpPayloadStart = plcpHtTrainingSymbolsStart + WifiPhy::GetPlcpHtTrainingSymbolDuration (preamble, event->GetTxVector()); // packet start time + preamble + L SIG + HT SIG + Training
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   383
  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
   384
  double powerW = 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
   385
    j++;
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   386
  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
   387
    {
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   388
      Time current = (*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
   389
      NS_ASSERT (current >= previous);
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   390
      //Case 1: previous is in HT-SIG: Non HT will not enter here since it didn't enter in the last two and they are all the same for non HT
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   391
      if (previous >= plcpHsigHeaderStart)
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 7385
diff changeset
   392
        {
11348
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   393
          //Case 1a: cuurent after payload start
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   394
          if (current >= plcpPayloadStart)
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 7385
diff changeset
   395
             {
11348
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   396
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 7385
diff changeset
   397
                 
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 7385
diff changeset
   398
                    psr *= CalculateChunkSuccessRate (CalculateSnr (powerW,
11348
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   399
                                                                    noiseInterferenceW,
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   400
                                                                    headerMode),
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   401
                                                      plcpHtTrainingSymbolsStart - previous,
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   402
                                                      headerMode);
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 7385
diff changeset
   403
              }
11348
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   404
          //case 1b: current after HT training symbols start
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 7385
diff changeset
   405
          else if (current >=plcpHtTrainingSymbolsStart)
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 7385
diff changeset
   406
             {
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 7385
diff changeset
   407
                psr *= CalculateChunkSuccessRate (CalculateSnr (powerW,
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 7385
diff changeset
   408
                                                                noiseInterferenceW,
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 7385
diff changeset
   409
                                                                headerMode),
11348
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   410
                                                  plcpHtTrainingSymbolsStart - previous,
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   411
                                                  headerMode);
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 7385
diff changeset
   412
                   
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 7385
diff changeset
   413
             }
11348
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   414
         //Case 1c: current is with previous in HT sig
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 7385
diff changeset
   415
         else
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 7385
diff changeset
   416
            {
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 7385
diff changeset
   417
                psr *= CalculateChunkSuccessRate (CalculateSnr (powerW,
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 7385
diff changeset
   418
                                                                noiseInterferenceW,
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 7385
diff changeset
   419
                                                                headerMode),
11348
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   420
                                                  current - previous,
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   421
                                                  headerMode);
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 7385
diff changeset
   422
                   
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 7385
diff changeset
   423
            }
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 7385
diff changeset
   424
      }
11348
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   425
      // Case 2: previous in L-SIG: 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
   426
      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
   427
        {
11348
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   428
          // Case 2a: current after payload start
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   429
          if (current >= plcpPayloadStart)
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 7385
diff changeset
   430
             {
11348
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   431
              // Case 2ai: Non HT format (No HT-SIG or Training Symbols)
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 7385
diff changeset
   432
              if (preamble == WIFI_PREAMBLE_LONG || preamble == WIFI_PREAMBLE_SHORT) //plcpHtTrainingSymbolsStart==plcpHeaderStart)
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 7385
diff changeset
   433
                {
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 7385
diff changeset
   434
                    psr *= CalculateChunkSuccessRate (CalculateSnr (powerW,
11348
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   435
                                                                    noiseInterferenceW,
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   436
                                                                    headerMode),
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   437
                                                      plcpPayloadStart - previous,
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   438
                                                      headerMode);
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 7385
diff changeset
   439
                }
11348
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   440
              else
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   441
                {
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 7385
diff changeset
   442
                    psr *= CalculateChunkSuccessRate (CalculateSnr (powerW,
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 7385
diff changeset
   443
                                                              noiseInterferenceW,
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 7385
diff changeset
   444
                                                              headerMode),
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 7385
diff changeset
   445
                                                      plcpHtTrainingSymbolsStart - plcpHsigHeaderStart,
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 7385
diff changeset
   446
                                                      headerMode);
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 7385
diff changeset
   447
                    psr *= CalculateChunkSuccessRate (CalculateSnr (powerW,
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 7385
diff changeset
   448
                                                                    noiseInterferenceW,
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 7385
diff changeset
   449
                                                                    MfHeaderMode),
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 7385
diff changeset
   450
                                                      plcpHsigHeaderStart - previous,
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 7385
diff changeset
   451
                                                      MfHeaderMode);
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 7385
diff changeset
   452
                 }
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 7385
diff changeset
   453
              }
11348
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   454
          // Case 2b: current in HT training symbol. non HT will not come here since it went in previous if or if the previous ifis not true this will be not true
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   455
          else if (current >= plcpHtTrainingSymbolsStart)
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 7385
diff changeset
   456
             {
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 7385
diff changeset
   457
                psr *= CalculateChunkSuccessRate (CalculateSnr (powerW,
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   458
                                                              noiseInterferenceW,
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 7385
diff changeset
   459
                                                              headerMode),
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 7385
diff changeset
   460
                                                  plcpHtTrainingSymbolsStart - plcpHsigHeaderStart,
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 7385
diff changeset
   461
                                                  headerMode);
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 7385
diff changeset
   462
                psr *= CalculateChunkSuccessRate (CalculateSnr (powerW,
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 7385
diff changeset
   463
                                                                noiseInterferenceW,
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 7385
diff changeset
   464
                                                                MfHeaderMode),
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 7385
diff changeset
   465
                                                   plcpHsigHeaderStart - previous,
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 7385
diff changeset
   466
                                                   MfHeaderMode);
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 7385
diff changeset
   467
              }
11348
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   468
          // Case 2c: current in H sig. non HT will not come here since it went in previous if or if the previous ifis not true this will be not true
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   469
          else if (current >= plcpHsigHeaderStart)
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 7385
diff changeset
   470
             {
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 7385
diff changeset
   471
                psr *= CalculateChunkSuccessRate (CalculateSnr (powerW,
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 7385
diff changeset
   472
                                                                noiseInterferenceW,
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 7385
diff changeset
   473
                                                                headerMode),
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 7385
diff changeset
   474
                                                  current - plcpHsigHeaderStart,
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 7385
diff changeset
   475
                                                  headerMode);
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 7385
diff changeset
   476
                 psr *= CalculateChunkSuccessRate (CalculateSnr (powerW,
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 7385
diff changeset
   477
                                                                 noiseInterferenceW,
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 7385
diff changeset
   478
                                                                 MfHeaderMode),
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 7385
diff changeset
   479
                                                   plcpHsigHeaderStart - previous,
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 7385
diff changeset
   480
                                                   MfHeaderMode);
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 7385
diff changeset
   481
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 7385
diff changeset
   482
             }
11348
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   483
         // Case 2d: Current with prev in L SIG
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 7385
diff changeset
   484
         else 
3905
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   485
            {
11348
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   486
              // Case 4di: Non HT format (No HT-SIG or Training Symbols)
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 7385
diff changeset
   487
              if (preamble == WIFI_PREAMBLE_LONG || preamble == WIFI_PREAMBLE_SHORT) //plcpHtTrainingSymbolsStart==plcpHeaderStart)
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 7385
diff changeset
   488
                {
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 7385
diff changeset
   489
                    psr *= CalculateChunkSuccessRate (CalculateSnr (powerW,
11348
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   490
                                                                    noiseInterferenceW,
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   491
                                                                    headerMode),
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   492
                                                      current - previous,
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   493
                                                      headerMode);
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 7385
diff changeset
   494
                }
11348
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   495
              else
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 7385
diff changeset
   496
                {
11348
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   497
                    psr *= CalculateChunkSuccessRate (CalculateSnr (powerW,
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 7385
diff changeset
   498
                                                               noiseInterferenceW,
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 7385
diff changeset
   499
                                                               MfHeaderMode),
11348
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   500
                                                      current - previous,
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   501
                                                      MfHeaderMode);
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 7385
diff changeset
   502
                }
3905
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   503
            }
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   504
        }
11348
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   505
      // Case 3: previous is in the preamble works for all cases
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   506
      else
3905
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   507
        {
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   508
          if (current >= plcpPayloadStart)
3905
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   509
            {
11348
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   510
              // Non HT format (No HT-SIG or Training Symbols)
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 7385
diff changeset
   511
              if (preamble == WIFI_PREAMBLE_LONG || preamble == WIFI_PREAMBLE_SHORT)
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 7385
diff changeset
   512
                 psr *= CalculateChunkSuccessRate (CalculateSnr (powerW,
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 7385
diff changeset
   513
                                                                 noiseInterferenceW,
11348
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   514
                                                                 headerMode),
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   515
                                                   plcpPayloadStart - plcpHeaderStart,
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   516
                                                   headerMode);
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 7385
diff changeset
   517
              else
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 7385
diff changeset
   518
              // Greenfield or Mixed format
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 7385
diff changeset
   519
                psr *= CalculateChunkSuccessRate (CalculateSnr (powerW,
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 7385
diff changeset
   520
                                                                noiseInterferenceW,
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 7385
diff changeset
   521
                                                                headerMode),
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 7385
diff changeset
   522
                                                  plcpHtTrainingSymbolsStart - plcpHsigHeaderStart,
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 7385
diff changeset
   523
                                                  headerMode);
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 7385
diff changeset
   524
              if (preamble == WIFI_PREAMBLE_HT_MF)
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 7385
diff changeset
   525
                 psr *= CalculateChunkSuccessRate (CalculateSnr (powerW,
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 7385
diff changeset
   526
                                                                 noiseInterferenceW,
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 7385
diff changeset
   527
                                                                 MfHeaderMode),
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 7385
diff changeset
   528
                                                   plcpHsigHeaderStart-plcpHeaderStart,
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 7385
diff changeset
   529
                                                   MfHeaderMode);             
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   530
            }
11348
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   531
          else if (current >= plcpHtTrainingSymbolsStart )
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 7385
diff changeset
   532
          { 
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 7385
diff changeset
   533
              // Non HT format will not come here since it will execute prev if
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 7385
diff changeset
   534
              // Greenfield or 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
   535
              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
   536
                                                              noiseInterferenceW,
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   537
                                                              headerMode),
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   538
                                                plcpHtTrainingSymbolsStart - plcpHsigHeaderStart,
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   539
                                                headerMode);
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   540
              // Greenfield
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 7385
diff changeset
   541
              if (preamble == WIFI_PREAMBLE_HT_MF)
11348
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   542
                {
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   543
                    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
   544
                                                                    noiseInterferenceW,
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   545
                                                                    MfHeaderMode),
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   546
                                                      plcpHsigHeaderStart-plcpHeaderStart,
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   547
                                                      MfHeaderMode);
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   548
                }
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 7385
diff changeset
   549
           }
11348
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   550
          // non HT will not come here
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   551
          else if (current >= plcpHsigHeaderStart)
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 7385
diff changeset
   552
             { 
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 7385
diff changeset
   553
                psr *= CalculateChunkSuccessRate (CalculateSnr (powerW,
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 7385
diff changeset
   554
                                                                noiseInterferenceW,
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 7385
diff changeset
   555
                                                                headerMode),
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 7385
diff changeset
   556
                                                  current- plcpHsigHeaderStart,
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 7385
diff changeset
   557
                                                  headerMode); 
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 7385
diff changeset
   558
                if  (preamble != WIFI_PREAMBLE_HT_GF)
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 7385
diff changeset
   559
                 {
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 7385
diff changeset
   560
                   psr *= CalculateChunkSuccessRate (CalculateSnr (powerW,
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 7385
diff changeset
   561
                                                                   noiseInterferenceW,
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 7385
diff changeset
   562
                                                                   MfHeaderMode),
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 7385
diff changeset
   563
                                                     plcpHsigHeaderStart-plcpHeaderStart,
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 7385
diff changeset
   564
                                                     MfHeaderMode);    
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 7385
diff changeset
   565
                  }          
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 7385
diff changeset
   566
             }
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 7385
diff changeset
   567
          // GF will not come here
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   568
          else if (current >= plcpHeaderStart)
3905
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   569
            {
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 7385
diff changeset
   570
               if (preamble == WIFI_PREAMBLE_LONG || preamble == WIFI_PREAMBLE_SHORT)
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 7385
diff changeset
   571
                 {
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 7385
diff changeset
   572
                 psr *= CalculateChunkSuccessRate (CalculateSnr (powerW,
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 7385
diff changeset
   573
                                                                 noiseInterferenceW,
11348
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   574
                                                                 headerMode),
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   575
                                                   current - plcpHeaderStart,
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   576
                                                   headerMode);
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 7385
diff changeset
   577
                 }
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 7385
diff changeset
   578
              else
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 7385
diff changeset
   579
                 {
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   580
              psr *= CalculateChunkSuccessRate (CalculateSnr (powerW,
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   581
                                                              noiseInterferenceW,
11348
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   582
                                                              MfHeaderMode),
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   583
                                                current - plcpHeaderStart,
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   584
                                                MfHeaderMode);
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 7385
diff changeset
   585
                       }
3905
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   586
            }
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   587
        }
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   588
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   589
      noiseInterferenceW += (*j).GetDelta ();
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   590
      previous = (*j).GetTime ();
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   591
      j++;
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   592
    }
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   593
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   594
  double per = 1 - psr;
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   595
  return per;
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   596
}
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   597
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   598
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
   599
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
   600
{
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   601
  NiChanges ni;
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   602
  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
   603
  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
   604
                             noiseInterferenceW,
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   605
                             event->GetPayloadMode ());
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   606
3905
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   607
  /* 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
   608
   * 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
   609
   */
11348
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   610
  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
   611
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   612
  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
   613
  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
   614
  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
   615
  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
   616
}
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   617
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   618
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
   619
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
   620
{
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   621
  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
   622
  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
   623
  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
   624
                             noiseInterferenceW,
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   625
                             WifiPhy::GetPlcpHeaderMode (event->GetPayloadMode (), event->GetPreambleType ()));
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   626
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   627
  /* 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
   628
   * 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
   629
   */
ded786322135 Bug 2066 [wifi] - A-MPDU reception should check for successful preamble
Sébastien Deronne <sebastien.deronne@gmail.com>
parents: 11332
diff changeset
   630
  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
   631
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   632
  struct SnrPer snrPer;
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   633
  snrPer.snr = snr;
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   634
  snrPer.per = per;
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   635
  return snrPer;
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   636
}
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   637
5189
8fcdf87a790a Channel switching support for Wifi
Ramon Bauza
parents: 4689
diff changeset
   638
void
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   639
InterferenceHelper::EraseEvents (void)
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   640
{
6474
0894b2a245e9 fixed Bug 799 - Interference helper is too slow
Kirill Andreev <andreev@iitp.ru>
parents: 6360
diff changeset
   641
  m_niChanges.clear ();
6666
21a9b1879f27 fixed bug 991
Kirill Andreev <andreev@iitp.ru>
parents: 6597
diff changeset
   642
  m_rxing = false;
6474
0894b2a245e9 fixed Bug 799 - Interference helper is too slow
Kirill Andreev <andreev@iitp.ru>
parents: 6360
diff changeset
   643
  m_firstPower = 0.0;
5189
8fcdf87a790a Channel switching support for Wifi
Ramon Bauza
parents: 4689
diff changeset
   644
}
6474
0894b2a245e9 fixed Bug 799 - Interference helper is too slow
Kirill Andreev <andreev@iitp.ru>
parents: 6360
diff changeset
   645
InterferenceHelper::NiChanges::iterator
0894b2a245e9 fixed Bug 799 - Interference helper is too slow
Kirill Andreev <andreev@iitp.ru>
parents: 6360
diff changeset
   646
InterferenceHelper::GetPosition (Time moment)
0894b2a245e9 fixed Bug 799 - Interference helper is too slow
Kirill Andreev <andreev@iitp.ru>
parents: 6360
diff changeset
   647
{
0894b2a245e9 fixed Bug 799 - Interference helper is too slow
Kirill Andreev <andreev@iitp.ru>
parents: 6360
diff changeset
   648
  return std::upper_bound (m_niChanges.begin (), m_niChanges.end (), NiChange (moment, 0));
3905
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   649
6474
0894b2a245e9 fixed Bug 799 - Interference helper is too slow
Kirill Andreev <andreev@iitp.ru>
parents: 6360
diff changeset
   650
}
5413
64931d320790 fix valgrind complaints (bug 711)
Craig Dowell <craigdo@ee.washington.edu>
parents: 5236
diff changeset
   651
void
6474
0894b2a245e9 fixed Bug 799 - Interference helper is too slow
Kirill Andreev <andreev@iitp.ru>
parents: 6360
diff changeset
   652
InterferenceHelper::AddNiChangeEvent (NiChange change)
0894b2a245e9 fixed Bug 799 - Interference helper is too slow
Kirill Andreev <andreev@iitp.ru>
parents: 6360
diff changeset
   653
{
0894b2a245e9 fixed Bug 799 - Interference helper is too slow
Kirill Andreev <andreev@iitp.ru>
parents: 6360
diff changeset
   654
  m_niChanges.insert (GetPosition (change.GetTime ()), change);
5413
64931d320790 fix valgrind complaints (bug 711)
Craig Dowell <craigdo@ee.washington.edu>
parents: 5236
diff changeset
   655
}
6474
0894b2a245e9 fixed Bug 799 - Interference helper is too slow
Kirill Andreev <andreev@iitp.ru>
parents: 6360
diff changeset
   656
void
0894b2a245e9 fixed Bug 799 - Interference helper is too slow
Kirill Andreev <andreev@iitp.ru>
parents: 6360
diff changeset
   657
InterferenceHelper::NotifyRxStart ()
0894b2a245e9 fixed Bug 799 - Interference helper is too slow
Kirill Andreev <andreev@iitp.ru>
parents: 6360
diff changeset
   658
{
0894b2a245e9 fixed Bug 799 - Interference helper is too slow
Kirill Andreev <andreev@iitp.ru>
parents: 6360
diff changeset
   659
  m_rxing = true;
0894b2a245e9 fixed Bug 799 - Interference helper is too slow
Kirill Andreev <andreev@iitp.ru>
parents: 6360
diff changeset
   660
}
0894b2a245e9 fixed Bug 799 - Interference helper is too slow
Kirill Andreev <andreev@iitp.ru>
parents: 6360
diff changeset
   661
void
0894b2a245e9 fixed Bug 799 - Interference helper is too slow
Kirill Andreev <andreev@iitp.ru>
parents: 6360
diff changeset
   662
InterferenceHelper::NotifyRxEnd ()
0894b2a245e9 fixed Bug 799 - Interference helper is too slow
Kirill Andreev <andreev@iitp.ru>
parents: 6360
diff changeset
   663
{
0894b2a245e9 fixed Bug 799 - Interference helper is too slow
Kirill Andreev <andreev@iitp.ru>
parents: 6360
diff changeset
   664
  m_rxing = false;
0894b2a245e9 fixed Bug 799 - Interference helper is too slow
Kirill Andreev <andreev@iitp.ru>
parents: 6360
diff changeset
   665
}
3905
99c9346b5d71 split interference calculation from YansWifiPhy. Move them to InterferenceHelper
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   666
} // namespace ns3