src/wifi/examples/wifi-phy-test.cc
author Ghada Badawy <gbadawy@gmail.com>
Tue, 13 Aug 2013 22:05:25 -0700
changeset 10139 17a71cd49da3
parent 9802 5dea58a3b261
child 10883 d919e7194e23
permissions -rw-r--r--
partial 802.11n support
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
7385
10beb0e53130 standardize emacs c++ mode comments
Vedran Miletić <rivanvx@gmail.com>
parents: 7340
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: 4257
diff changeset
     2
/*
acc6c801f785 bug 548: missing license header
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4257
diff changeset
     3
 * Copyright (c) 2005,2006 INRIA
acc6c801f785 bug 548: missing license header
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4257
diff changeset
     4
 *
acc6c801f785 bug 548: missing license header
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4257
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: 4257
diff changeset
     7
 * published by the Free Software Foundation;
acc6c801f785 bug 548: missing license header
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4257
diff changeset
     8
 *
acc6c801f785 bug 548: missing license header
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4257
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: 4257
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: 4257
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: 4257
diff changeset
    12
 * GNU General Public License for more details.
acc6c801f785 bug 548: missing license header
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4257
diff changeset
    13
 *
acc6c801f785 bug 548: missing license header
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4257
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: 4257
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: 4257
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: 4257
diff changeset
    17
 *
acc6c801f785 bug 548: missing license header
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4257
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: 4257
diff changeset
    19
 */
6848
1f453ad50ef3 Converts csma, emu, tap-bridge, point-to-point, wifi and wimax modules into modular format
Lalith Suresh <suresh.lalith@gmail.com>
parents: 6360
diff changeset
    20
#include "ns3/wifi-net-device.h"
1f453ad50ef3 Converts csma, emu, tap-bridge, point-to-point, wifi and wimax modules into modular format
Lalith Suresh <suresh.lalith@gmail.com>
parents: 6360
diff changeset
    21
#include "ns3/yans-wifi-channel.h"
1f453ad50ef3 Converts csma, emu, tap-bridge, point-to-point, wifi and wimax modules into modular format
Lalith Suresh <suresh.lalith@gmail.com>
parents: 6360
diff changeset
    22
#include "ns3/yans-wifi-phy.h"
5944
b1a245ae00d4 Moving the propagation models of wifi from src/devices/wifi to src/common. The idea is to share them with the other wireless devices.
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 5050
diff changeset
    23
#include "ns3/propagation-loss-model.h"
b1a245ae00d4 Moving the propagation models of wifi from src/devices/wifi to src/common. The idea is to share them with the other wireless devices.
Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
parents: 5050
diff changeset
    24
#include "ns3/propagation-delay-model.h"
6848
1f453ad50ef3 Converts csma, emu, tap-bridge, point-to-point, wifi and wimax modules into modular format
Lalith Suresh <suresh.lalith@gmail.com>
parents: 6360
diff changeset
    25
#include "ns3/error-rate-model.h"
1f453ad50ef3 Converts csma, emu, tap-bridge, point-to-point, wifi and wimax modules into modular format
Lalith Suresh <suresh.lalith@gmail.com>
parents: 6360
diff changeset
    26
#include "ns3/yans-error-rate-model.h"
3881
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    27
#include "ns3/ptr.h"
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    28
#include "ns3/mobility-model.h"
4257
3e8f8052e155 StaticMobilityModel -> ConstantPositionMobilityModel, StaticSpeedMobilityModel -> ConstantVelocityMobilityModel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4038
diff changeset
    29
#include "ns3/constant-position-mobility-model.h"
3881
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    30
#include "ns3/vector.h"
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    31
#include "ns3/packet.h"
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    32
#include "ns3/simulator.h"
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    33
#include "ns3/nstime.h"
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    34
#include "ns3/command-line.h"
3885
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
    35
#include "ns3/flow-id-tag.h"
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9802
diff changeset
    36
#include "ns3/wifi-tx-vector.h"
3881
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    37
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    38
using namespace ns3;
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    39
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    40
class PsrExperiment
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    41
{
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    42
public:
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    43
  struct Input
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    44
  {
3885
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
    45
    Input ();
3881
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    46
    double distance;
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    47
    std::string txMode;
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    48
    uint8_t txPowerLevel;
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    49
    uint32_t packetSize;
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    50
    uint32_t nPackets;
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    51
  };
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    52
  struct Output
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    53
  {
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    54
    uint32_t received;
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    55
  };
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    56
  PsrExperiment ();
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    57
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    58
  struct PsrExperiment::Output Run (struct PsrExperiment::Input input);
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    59
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    60
private:
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    61
  void Send (void);
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    62
  void Receive (Ptr<Packet> p, double snr, WifiMode mode, enum WifiPreamble preamble);
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    63
  Ptr<WifiPhy> m_tx;
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    64
  struct Input m_input;
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    65
  struct Output m_output;
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    66
};
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    67
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
    68
void
3881
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    69
PsrExperiment::Send (void)
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    70
{
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    71
  Ptr<Packet> p = Create<Packet> (m_input.packetSize);
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    72
  WifiMode mode = WifiMode (m_input.txMode);
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9802
diff changeset
    73
  WifiTxVector txVector;
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9802
diff changeset
    74
  txVector.SetTxPowerLevel (m_input.txPowerLevel);
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9802
diff changeset
    75
  txVector.SetMode (mode);
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9802
diff changeset
    76
  m_tx->SendPacket (p, mode, WIFI_PREAMBLE_SHORT, txVector);
3881
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    77
}
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    78
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
    79
void
3881
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    80
PsrExperiment::Receive (Ptr<Packet> p, double snr, WifiMode mode, enum WifiPreamble preamble)
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    81
{
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    82
  m_output.received++;
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    83
}
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    84
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    85
PsrExperiment::PsrExperiment ()
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
    86
{
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
    87
}
3885
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
    88
PsrExperiment::Input::Input ()
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
    89
  : distance (5.0),
6360
d8975477ff6a Bug 871: Rework construction of Wi-Fi rates
Dean Armstrong <deanarm@gmail.com>
parents: 5944
diff changeset
    90
    txMode ("OfdmRate6Mbps"),
3885
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
    91
    txPowerLevel (0),
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
    92
    packetSize (2304),
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
    93
    nPackets (400)
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
    94
{
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
    95
}
3881
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    96
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    97
struct PsrExperiment::Output
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    98
PsrExperiment::Run (struct PsrExperiment::Input input)
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    99
{
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   100
  m_output.received = 0;
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   101
  m_input = input;
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   102
4257
3e8f8052e155 StaticMobilityModel -> ConstantPositionMobilityModel, StaticSpeedMobilityModel -> ConstantVelocityMobilityModel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4038
diff changeset
   103
  Ptr<MobilityModel> posTx = CreateObject<ConstantPositionMobilityModel> ();
3881
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   104
  posTx->SetPosition (Vector (0.0, 0.0, 0.0));
4257
3e8f8052e155 StaticMobilityModel -> ConstantPositionMobilityModel, StaticSpeedMobilityModel -> ConstantVelocityMobilityModel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4038
diff changeset
   105
  Ptr<MobilityModel> posRx = CreateObject<ConstantPositionMobilityModel> ();
3881
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   106
  posRx->SetPosition (Vector (m_input.distance, 0.0, 0.0));
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   107
3893
94f771c1373a split WifiChannel in WifiChannel + YansWifiChannel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3888
diff changeset
   108
  Ptr<YansWifiChannel> channel = CreateObject<YansWifiChannel> ();
3881
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   109
  channel->SetPropagationDelayModel (CreateObject<ConstantSpeedPropagationDelayModel> ());
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   110
  Ptr<LogDistancePropagationLossModel> log = CreateObject<LogDistancePropagationLossModel> ();
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   111
  channel->SetPropagationLossModel (log);
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   112
3912
4d1a61f80745 new wifi API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3909
diff changeset
   113
  Ptr<YansWifiPhy> tx = CreateObject<YansWifiPhy> ();
4d1a61f80745 new wifi API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3909
diff changeset
   114
  Ptr<YansWifiPhy> rx = CreateObject<YansWifiPhy> ();
4038
c6f634d0fc6f virtualize ErrorRateModel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3912
diff changeset
   115
  Ptr<ErrorRateModel> error = CreateObject<YansErrorRateModel> ();
3912
4d1a61f80745 new wifi API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3909
diff changeset
   116
  tx->SetErrorRateModel (error);
4d1a61f80745 new wifi API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3909
diff changeset
   117
  rx->SetErrorRateModel (error);
4d1a61f80745 new wifi API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3909
diff changeset
   118
  tx->SetChannel (channel);
4d1a61f80745 new wifi API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3909
diff changeset
   119
  rx->SetChannel (channel);
4d1a61f80745 new wifi API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3909
diff changeset
   120
  tx->SetMobility (posTx);
4d1a61f80745 new wifi API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3909
diff changeset
   121
  rx->SetMobility (posRx);
4d1a61f80745 new wifi API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3909
diff changeset
   122
3893
94f771c1373a split WifiChannel in WifiChannel + YansWifiChannel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3888
diff changeset
   123
  rx->SetReceiveOkCallback (MakeCallback (&PsrExperiment::Receive, this));
3881
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   124
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   125
  for (uint32_t i = 0; i < m_input.nPackets; ++i)
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   126
    {
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   127
      Simulator::Schedule (Seconds (i), &PsrExperiment::Send, this);
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   128
    }
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   129
  m_tx = tx;
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   130
  Simulator::Run ();
9709
00ed307fd7b5 bug 1635 - wifi-phy-test missing Simulator::Destroy
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 7385
diff changeset
   131
  Simulator::Destroy();
3881
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   132
  return m_output;
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   133
}
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   134
3885
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   135
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   136
class CollisionExperiment
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   137
{
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   138
public:
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   139
  struct Input
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   140
  {
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   141
    Input ();
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   142
    Time interval;
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   143
    double xA;
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   144
    double xB;
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   145
    std::string txModeA;
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   146
    std::string txModeB;
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   147
    uint8_t txPowerLevelA;
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   148
    uint8_t txPowerLevelB;
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   149
    uint32_t packetSizeA;
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   150
    uint32_t packetSizeB;
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   151
    uint32_t nPackets;
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   152
  };
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   153
  struct Output
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   154
  {
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   155
    uint32_t receivedA;
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   156
    uint32_t receivedB;
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   157
  };
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   158
  CollisionExperiment ();
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   159
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   160
  struct CollisionExperiment::Output Run (struct CollisionExperiment::Input input);
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   161
private:
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   162
  void SendA (void) const;
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   163
  void SendB (void) const;
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   164
  void Receive (Ptr<Packet> p, double snr, WifiMode mode, enum WifiPreamble preamble);
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   165
  Ptr<WifiPhy> m_txA;
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   166
  Ptr<WifiPhy> m_txB;
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   167
  uint32_t m_flowIdA;
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   168
  uint32_t m_flowIdB;
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   169
  struct Input m_input;
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   170
  struct Output m_output;
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   171
};
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   172
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   173
void
3885
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   174
CollisionExperiment::SendA (void) const
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   175
{
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   176
  Ptr<Packet> p = Create<Packet> (m_input.packetSizeA);
4502
07d34c0d8d18 new tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4325
diff changeset
   177
  p->AddByteTag (FlowIdTag (m_flowIdA));
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9802
diff changeset
   178
  WifiTxVector txVector;
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9802
diff changeset
   179
  txVector.SetTxPowerLevel (m_input.txPowerLevelA);
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9802
diff changeset
   180
  txVector.SetMode (WifiMode (m_input.txModeA));
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   181
  m_txA->SendPacket (p, WifiMode (m_input.txModeA),
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9802
diff changeset
   182
                     WIFI_PREAMBLE_SHORT, txVector);
3885
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   183
}
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   184
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   185
void
3885
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   186
CollisionExperiment::SendB (void) const
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   187
{
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   188
  Ptr<Packet> p = Create<Packet> (m_input.packetSizeB);
4502
07d34c0d8d18 new tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4325
diff changeset
   189
  p->AddByteTag (FlowIdTag (m_flowIdB));
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9802
diff changeset
   190
  WifiTxVector txVector;
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9802
diff changeset
   191
  txVector.SetTxPowerLevel (m_input.txPowerLevelB);
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9802
diff changeset
   192
  txVector.SetMode (WifiMode (m_input.txModeB));
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   193
  m_txB->SendPacket (p, WifiMode (m_input.txModeB),
10139
17a71cd49da3 partial 802.11n support
Ghada Badawy <gbadawy@gmail.com>
parents: 9802
diff changeset
   194
                     WIFI_PREAMBLE_SHORT, txVector);
3885
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   195
}
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   196
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   197
void
3885
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   198
CollisionExperiment::Receive (Ptr<Packet> p, double snr, WifiMode mode, enum WifiPreamble preamble)
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   199
{
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   200
  FlowIdTag tag;
9785
97052ab05772 [Coverity] Unchecked return value (CHECKED_RETURN)
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 7385
diff changeset
   201
  if (p->FindFirstMatchingByteTag (tag))
3885
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   202
    {
9785
97052ab05772 [Coverity] Unchecked return value (CHECKED_RETURN)
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 7385
diff changeset
   203
      if (tag.GetFlowId () == m_flowIdA)
97052ab05772 [Coverity] Unchecked return value (CHECKED_RETURN)
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 7385
diff changeset
   204
        {
97052ab05772 [Coverity] Unchecked return value (CHECKED_RETURN)
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 7385
diff changeset
   205
          m_output.receivedA++;
97052ab05772 [Coverity] Unchecked return value (CHECKED_RETURN)
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 7385
diff changeset
   206
        }
97052ab05772 [Coverity] Unchecked return value (CHECKED_RETURN)
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 7385
diff changeset
   207
      else if (tag.GetFlowId () == m_flowIdB)
97052ab05772 [Coverity] Unchecked return value (CHECKED_RETURN)
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 7385
diff changeset
   208
        {
97052ab05772 [Coverity] Unchecked return value (CHECKED_RETURN)
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 7385
diff changeset
   209
          m_output.receivedB++;
97052ab05772 [Coverity] Unchecked return value (CHECKED_RETURN)
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 7385
diff changeset
   210
        }
3885
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   211
    }
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   212
}
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   213
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   214
CollisionExperiment::CollisionExperiment ()
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   215
{
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   216
}
3885
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   217
CollisionExperiment::Input::Input ()
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   218
  : interval (MicroSeconds (0)),
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   219
    xA (-5),
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   220
    xB (5),
6360
d8975477ff6a Bug 871: Rework construction of Wi-Fi rates
Dean Armstrong <deanarm@gmail.com>
parents: 5944
diff changeset
   221
    txModeA ("OfdmRate6Mbps"),
d8975477ff6a Bug 871: Rework construction of Wi-Fi rates
Dean Armstrong <deanarm@gmail.com>
parents: 5944
diff changeset
   222
    txModeB ("OfdmRate6Mbps"),
3885
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   223
    txPowerLevelA (0),
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   224
    txPowerLevelB (0),
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   225
    packetSizeA (2304),
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   226
    packetSizeB (2304),
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   227
    nPackets (400)
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   228
{
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   229
}
3885
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   230
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   231
struct CollisionExperiment::Output
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   232
CollisionExperiment::Run (struct CollisionExperiment::Input input)
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   233
{
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   234
  m_output.receivedA = 0;
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   235
  m_output.receivedB = 0;
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   236
  m_input = input;
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   237
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   238
  m_flowIdA = FlowIdTag::AllocateFlowId ();
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   239
  m_flowIdB = FlowIdTag::AllocateFlowId ();
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   240
3893
94f771c1373a split WifiChannel in WifiChannel + YansWifiChannel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3888
diff changeset
   241
  Ptr<YansWifiChannel> channel = CreateObject<YansWifiChannel> ();
94f771c1373a split WifiChannel in WifiChannel + YansWifiChannel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3888
diff changeset
   242
  channel->SetPropagationDelayModel (CreateObject<ConstantSpeedPropagationDelayModel> ());
94f771c1373a split WifiChannel in WifiChannel + YansWifiChannel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3888
diff changeset
   243
  Ptr<LogDistancePropagationLossModel> log = CreateObject<LogDistancePropagationLossModel> ();
94f771c1373a split WifiChannel in WifiChannel + YansWifiChannel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3888
diff changeset
   244
  channel->SetPropagationLossModel (log);
94f771c1373a split WifiChannel in WifiChannel + YansWifiChannel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3888
diff changeset
   245
4257
3e8f8052e155 StaticMobilityModel -> ConstantPositionMobilityModel, StaticSpeedMobilityModel -> ConstantVelocityMobilityModel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4038
diff changeset
   246
  Ptr<MobilityModel> posTxA = CreateObject<ConstantPositionMobilityModel> ();
3885
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   247
  posTxA->SetPosition (Vector (input.xA, 0.0, 0.0));
4257
3e8f8052e155 StaticMobilityModel -> ConstantPositionMobilityModel, StaticSpeedMobilityModel -> ConstantVelocityMobilityModel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4038
diff changeset
   248
  Ptr<MobilityModel> posTxB = CreateObject<ConstantPositionMobilityModel> ();
3885
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   249
  posTxB->SetPosition (Vector (input.xB, 0.0, 0.0));
4257
3e8f8052e155 StaticMobilityModel -> ConstantPositionMobilityModel, StaticSpeedMobilityModel -> ConstantVelocityMobilityModel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4038
diff changeset
   250
  Ptr<MobilityModel> posRx = CreateObject<ConstantPositionMobilityModel> ();
3885
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   251
  posRx->SetPosition (Vector (0, 0.0, 0.0));
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   252
3912
4d1a61f80745 new wifi API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3909
diff changeset
   253
  Ptr<YansWifiPhy> txA = CreateObject<YansWifiPhy> ();
4d1a61f80745 new wifi API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3909
diff changeset
   254
  Ptr<YansWifiPhy> txB = CreateObject<YansWifiPhy> ();
4d1a61f80745 new wifi API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3909
diff changeset
   255
  Ptr<YansWifiPhy> rx = CreateObject<YansWifiPhy> ();
4d1a61f80745 new wifi API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3909
diff changeset
   256
4038
c6f634d0fc6f virtualize ErrorRateModel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3912
diff changeset
   257
  Ptr<ErrorRateModel> error = CreateObject<YansErrorRateModel> ();
3912
4d1a61f80745 new wifi API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3909
diff changeset
   258
  txA->SetErrorRateModel (error);
4d1a61f80745 new wifi API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3909
diff changeset
   259
  txB->SetErrorRateModel (error);
4d1a61f80745 new wifi API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3909
diff changeset
   260
  rx->SetErrorRateModel (error);
4d1a61f80745 new wifi API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3909
diff changeset
   261
  txA->SetChannel (channel);
4d1a61f80745 new wifi API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3909
diff changeset
   262
  txB->SetChannel (channel);
4d1a61f80745 new wifi API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3909
diff changeset
   263
  rx->SetChannel (channel);
4d1a61f80745 new wifi API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3909
diff changeset
   264
  txA->SetMobility (posTxA);
4d1a61f80745 new wifi API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3909
diff changeset
   265
  txB->SetMobility (posTxB);
4d1a61f80745 new wifi API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3909
diff changeset
   266
  rx->SetMobility (posRx);
4d1a61f80745 new wifi API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3909
diff changeset
   267
4d1a61f80745 new wifi API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3909
diff changeset
   268
3885
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   269
  rx->SetReceiveOkCallback (MakeCallback (&CollisionExperiment::Receive, this));
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   270
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   271
  for (uint32_t i = 0; i < m_input.nPackets; ++i)
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   272
    {
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   273
      Simulator::Schedule (Seconds (i), &CollisionExperiment::SendA, this);
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   274
    }
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   275
  for (uint32_t i = 0; i < m_input.nPackets; ++i)
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   276
    {
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   277
      Simulator::Schedule (Seconds (i) + m_input.interval, &CollisionExperiment::SendB, this);
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   278
    }
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   279
  m_txA = txA;
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   280
  m_txB = txB;
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   281
  Simulator::Run ();
9709
00ed307fd7b5 bug 1635 - wifi-phy-test missing Simulator::Destroy
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 7385
diff changeset
   282
  Simulator::Destroy();
3885
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   283
  return m_output;
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   284
}
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   285
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   286
3881
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   287
static void PrintPsr (int argc, char *argv[])
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   288
{
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   289
  PsrExperiment experiment;
3885
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   290
  struct PsrExperiment::Input input;
3881
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   291
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   292
  CommandLine cmd;
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   293
  cmd.AddValue ("Distance", "The distance between two phys", input.distance);
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   294
  cmd.AddValue ("PacketSize", "The size of each packet sent", input.packetSize);
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   295
  cmd.AddValue ("TxMode", "The mode to use to send each packet", input.txMode);
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   296
  cmd.AddValue ("NPackets", "The number of packets to send", input.nPackets);
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   297
  cmd.AddValue ("TxPowerLevel", "The power level index to use to send each packet", input.txPowerLevel);
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   298
  cmd.Parse (argc, argv);
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   299
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   300
  struct PsrExperiment::Output output;
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   301
  output = experiment.Run (input);
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   302
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   303
  double psr = output.received;
7252
c8200621e252 rerun check-style.py with uncrustify-0.58
Tom Henderson <tomh@tomh.org>
parents: 7141
diff changeset
   304
  psr /= input.nPackets;
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   305
3881
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   306
  std::cout << psr << std::endl;
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   307
}
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   308
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   309
double CalcPsr (struct PsrExperiment::Output output, struct PsrExperiment::Input input)
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   310
{
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   311
  double psr = output.received;
7252
c8200621e252 rerun check-style.py with uncrustify-0.58
Tom Henderson <tomh@tomh.org>
parents: 7141
diff changeset
   312
  psr /= input.nPackets;
3881
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   313
  return psr;
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   314
}
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   315
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   316
static void PrintPsrVsDistance (int argc, char *argv[])
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   317
{
3885
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   318
  struct PsrExperiment::Input input;
3881
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   319
  CommandLine cmd;
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   320
  cmd.AddValue ("TxPowerLevel", "The power level index to use to send each packet", input.txPowerLevel);
3881
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   321
  cmd.AddValue ("TxMode", "The mode to use to send each packet", input.txMode);
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   322
  cmd.AddValue ("NPackets", "The number of packets to send", input.nPackets);
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   323
  cmd.AddValue ("PacketSize", "The size of each packet sent", input.packetSize);
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   324
  cmd.Parse (argc, argv);
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   325
  for (input.distance = 1.0; input.distance < 165; input.distance += 2.0)
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   326
    {
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   327
      std::cout << input.distance;
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   328
      PsrExperiment experiment;
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   329
      struct PsrExperiment::Output output;
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   330
6360
d8975477ff6a Bug 871: Rework construction of Wi-Fi rates
Dean Armstrong <deanarm@gmail.com>
parents: 5944
diff changeset
   331
      input.txMode = "OfdmRate6Mbps";
3881
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   332
      output = experiment.Run (input);
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   333
      std::cout << " " << CalcPsr (output, input);
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   334
6360
d8975477ff6a Bug 871: Rework construction of Wi-Fi rates
Dean Armstrong <deanarm@gmail.com>
parents: 5944
diff changeset
   335
      input.txMode = "OfdmRate9Mbps";
3881
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   336
      output = experiment.Run (input);
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   337
      std::cout << " " << CalcPsr (output, input);
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   338
6360
d8975477ff6a Bug 871: Rework construction of Wi-Fi rates
Dean Armstrong <deanarm@gmail.com>
parents: 5944
diff changeset
   339
      input.txMode = "OfdmRate12Mbps";
3881
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   340
      output = experiment.Run (input);
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   341
      std::cout << " " << CalcPsr (output, input);
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   342
6360
d8975477ff6a Bug 871: Rework construction of Wi-Fi rates
Dean Armstrong <deanarm@gmail.com>
parents: 5944
diff changeset
   343
      input.txMode = "OfdmRate18Mbps";
3881
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   344
      output = experiment.Run (input);
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   345
      std::cout << " " << CalcPsr (output, input);
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   346
6360
d8975477ff6a Bug 871: Rework construction of Wi-Fi rates
Dean Armstrong <deanarm@gmail.com>
parents: 5944
diff changeset
   347
      input.txMode = "OfdmRate24Mbps";
3881
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   348
      output = experiment.Run (input);
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   349
      std::cout << " " << CalcPsr (output, input);
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   350
6360
d8975477ff6a Bug 871: Rework construction of Wi-Fi rates
Dean Armstrong <deanarm@gmail.com>
parents: 5944
diff changeset
   351
      input.txMode = "OfdmRate36Mbps";
3881
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   352
      output = experiment.Run (input);
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   353
      std::cout << " " << CalcPsr (output, input);
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   354
6360
d8975477ff6a Bug 871: Rework construction of Wi-Fi rates
Dean Armstrong <deanarm@gmail.com>
parents: 5944
diff changeset
   355
      input.txMode = "OfdmRate48Mbps";
3881
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   356
      output = experiment.Run (input);
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   357
      std::cout << " " << CalcPsr (output, input);
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   358
6360
d8975477ff6a Bug 871: Rework construction of Wi-Fi rates
Dean Armstrong <deanarm@gmail.com>
parents: 5944
diff changeset
   359
      input.txMode = "OfdmRate54Mbps";
3881
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   360
      output = experiment.Run (input);
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   361
      std::cout << " " << CalcPsr (output, input);
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   362
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   363
      std::cout << std::endl;
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   364
    }
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   365
}
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   366
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   367
static void PrintSizeVsRange (int argc, char *argv[])
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   368
{
3884
260d8acdbd01 change name of parameter
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3883
diff changeset
   369
  double targetPsr = 0.05;
3885
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   370
  struct PsrExperiment::Input input;
3881
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   371
  CommandLine cmd;
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   372
  cmd.AddValue ("TxPowerLevel", "The power level index to use to send each packet", input.txPowerLevel);
3881
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   373
  cmd.AddValue ("TxMode", "The mode to use to send each packet", input.txMode);
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   374
  cmd.AddValue ("NPackets", "The number of packets to send", input.nPackets);
3884
260d8acdbd01 change name of parameter
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3883
diff changeset
   375
  cmd.AddValue ("TargetPsr", "The psr needed to assume that we are within range", targetPsr);
3881
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   376
  cmd.Parse (argc, argv);
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   377
  for (input.packetSize = 10; input.packetSize < 3000; input.packetSize += 40)
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   378
    {
3883
091bb8fef41f do a binary search for the range boundary.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3881
diff changeset
   379
      double precision = 0.1;
091bb8fef41f do a binary search for the range boundary.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3881
diff changeset
   380
      double low = 1.0;
091bb8fef41f do a binary search for the range boundary.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3881
diff changeset
   381
      double high = 200.0;
091bb8fef41f do a binary search for the range boundary.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3881
diff changeset
   382
      while (high - low > precision)
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   383
        {
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   384
          double middle = low + (high - low) / 2;
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   385
          struct PsrExperiment::Output output;
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   386
          PsrExperiment experiment;
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   387
          input.distance = middle;
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   388
          output = experiment.Run (input);
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   389
          double psr = CalcPsr (output, input);
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   390
          if (psr >= targetPsr)
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   391
            {
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   392
              low = middle;
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   393
            }
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   394
          else
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   395
            {
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   396
              high = middle;
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   397
            }
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   398
        }
3883
091bb8fef41f do a binary search for the range boundary.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3881
diff changeset
   399
      std::cout << input.packetSize << " " << input.distance << std::endl;
3881
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   400
    }
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   401
}
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   402
3885
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   403
static void PrintPsrVsCollisionInterval (int argc, char *argv[])
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   404
{
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   405
  CollisionExperiment::Input input;
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   406
  input.nPackets = 100;
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   407
  CommandLine cmd;
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   408
  cmd.AddValue ("NPackets", "The number of packets to send for each transmitter", input.nPackets);
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   409
  cmd.AddValue ("xA", "the position of transmitter A", input.xA);
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   410
  cmd.AddValue ("xB", "the position of transmitter B", input.xB);
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   411
  for (uint32_t i = 0; i < 100; i += 1)
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   412
    {
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   413
      CollisionExperiment experiment;
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   414
      CollisionExperiment::Output output;
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   415
      input.interval = MicroSeconds (i);
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   416
      output = experiment.Run (input);
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   417
      double perA = (output.receivedA + 0.0) / (input.nPackets + 0.0);
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   418
      double perB = (output.receivedB + 0.0) / (input.nPackets + 0.0);
3885
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   419
      std::cout << i << " " << perA << " " << perB << std::endl;
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   420
    }
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   421
  for (uint32_t i = 100; i < 4000; i += 50)
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   422
    {
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   423
      CollisionExperiment experiment;
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   424
      CollisionExperiment::Output output;
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   425
      input.interval = MicroSeconds (i);
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   426
      output = experiment.Run (input);
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   427
      double perA = (output.receivedA + 0.0) / (input.nPackets + 0.0);
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   428
      double perB = (output.receivedB + 0.0) / (input.nPackets + 0.0);
3885
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   429
      std::cout << i << " " << perA << " " << perB << std::endl;
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   430
    }
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   431
}
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   432
3881
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   433
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   434
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   435
int main (int argc, char *argv[])
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   436
{
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   437
  if (argc <= 1)
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   438
    {
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   439
      std::cout << "Available experiments: "
7141
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   440
                << "Psr "
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   441
                << "SizeVsRange "
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   442
                << "PsrVsDistance "
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   443
                << "PsrVsCollisionInterval "
072fb225b714 run check-style.py on src/wifi
Nicola Baldo <nicola@baldo.biz>
parents: 6852
diff changeset
   444
                << std::endl;
9709
00ed307fd7b5 bug 1635 - wifi-phy-test missing Simulator::Destroy
Tommaso Pecorella <tommaso.pecorella@unifi.it>
parents: 7385
diff changeset
   445
      return 0;
3881
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   446
    }
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   447
  std::string type = argv[1];
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   448
  argc--;
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   449
  argv[1] = argv[0];
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   450
  argv++;
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   451
  if (type == "Psr")
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   452
    {
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   453
      PrintPsr (argc, argv);
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   454
    }
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   455
  else if (type == "SizeVsRange")
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   456
    {
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   457
      PrintSizeVsRange (argc, argv);
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   458
    }
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   459
  else if (type == "PsrVsDistance")
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   460
    {
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   461
      PrintPsrVsDistance (argc, argv);
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   462
    }
3885
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   463
  else if (type == "PsrVsCollisionInterval")
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   464
    {
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   465
      PrintPsrVsCollisionInterval (argc, argv);
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   466
    }
3881
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   467
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   468
  return 0;
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   469
}