src/devices/wifi/wifi-phy-test.cc
author Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
Tue, 10 Mar 2009 14:18:32 +0100
changeset 4257 3e8f8052e155
parent 4038 c6f634d0fc6f
child 4325 acc6c801f785
child 4914 74396c7f34be
permissions -rw-r--r--
StaticMobilityModel -> ConstantPositionMobilityModel, StaticSpeedMobilityModel -> ConstantVelocityMobilityModel
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
3893
94f771c1373a split WifiChannel in WifiChannel + YansWifiChannel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3888
diff changeset
     1
#include "wifi-net-device.h"
94f771c1373a split WifiChannel in WifiChannel + YansWifiChannel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3888
diff changeset
     2
#include "yans-wifi-channel.h"
3888
a15618dcd0eb rename WifiPhy to YansWifiPhy and add WifiPhy abstract base class.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3885
diff changeset
     3
#include "yans-wifi-phy.h"
3881
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     4
#include "propagation-loss-model.h"
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     5
#include "propagation-delay-model.h"
3912
4d1a61f80745 new wifi API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3909
diff changeset
     6
#include "error-rate-model.h"
4038
c6f634d0fc6f virtualize ErrorRateModel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3912
diff changeset
     7
#include "yans-error-rate-model.h"
3881
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     8
#include "ns3/ptr.h"
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     9
#include "ns3/mobility-model.h"
4257
3e8f8052e155 StaticMobilityModel -> ConstantPositionMobilityModel, StaticSpeedMobilityModel -> ConstantVelocityMobilityModel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4038
diff changeset
    10
#include "ns3/constant-position-mobility-model.h"
3881
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    11
#include "ns3/vector.h"
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    12
#include "ns3/packet.h"
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    13
#include "ns3/simulator.h"
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    14
#include "ns3/nstime.h"
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    15
#include "ns3/command-line.h"
3885
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
    16
#include "ns3/flow-id-tag.h"
3881
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    17
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    18
using namespace ns3;
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    19
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    20
class PsrExperiment
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    21
{
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    22
public:
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    23
  struct Input
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    24
  {
3885
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
    25
    Input ();
3881
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    26
    double distance;
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    27
    std::string txMode;
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    28
    uint8_t txPowerLevel;
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    29
    uint32_t packetSize;
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    30
    uint32_t nPackets;
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    31
  };
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    32
  struct Output
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    33
  {
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    34
    uint32_t received;
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    35
  };
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    36
  PsrExperiment ();
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
  struct PsrExperiment::Output Run (struct PsrExperiment::Input input);
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
private:
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    41
  void Send (void);
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    42
  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
    43
  Ptr<WifiPhy> m_tx;
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    44
  struct Input m_input;
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    45
  struct Output m_output;
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    46
};
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    47
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    48
void 
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    49
PsrExperiment::Send (void)
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    50
{
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    51
  Ptr<Packet> p = Create<Packet> (m_input.packetSize);
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    52
  WifiMode mode = WifiMode (m_input.txMode);
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    53
  m_tx->SendPacket (p, mode, WIFI_PREAMBLE_SHORT, m_input.txPowerLevel);
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    54
}
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
void 
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    57
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
    58
{
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    59
  m_output.received++;
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    60
}
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    61
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    62
PsrExperiment::PsrExperiment ()
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    63
{}
3885
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
    64
PsrExperiment::Input::Input ()
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
    65
  : distance (5.0),
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
    66
    txMode ("wifia-6mbs"),
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
    67
    txPowerLevel (0),
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
    68
    packetSize (2304),
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
    69
    nPackets (400)
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
    70
{}
3881
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    71
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    72
struct PsrExperiment::Output
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    73
PsrExperiment::Run (struct PsrExperiment::Input input)
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    74
{
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    75
  m_output.received = 0;
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    76
  m_input = input;
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    77
4257
3e8f8052e155 StaticMobilityModel -> ConstantPositionMobilityModel, StaticSpeedMobilityModel -> ConstantVelocityMobilityModel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4038
diff changeset
    78
  Ptr<MobilityModel> posTx = CreateObject<ConstantPositionMobilityModel> ();
3881
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    79
  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
    80
  Ptr<MobilityModel> posRx = CreateObject<ConstantPositionMobilityModel> ();
3881
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    81
  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
    82
3893
94f771c1373a split WifiChannel in WifiChannel + YansWifiChannel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3888
diff changeset
    83
  Ptr<YansWifiChannel> channel = CreateObject<YansWifiChannel> ();
3881
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    84
  channel->SetPropagationDelayModel (CreateObject<ConstantSpeedPropagationDelayModel> ());
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    85
  Ptr<LogDistancePropagationLossModel> log = CreateObject<LogDistancePropagationLossModel> ();
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    86
  channel->SetPropagationLossModel (log);
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    87
3912
4d1a61f80745 new wifi API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3909
diff changeset
    88
  Ptr<YansWifiPhy> tx = CreateObject<YansWifiPhy> ();
4d1a61f80745 new wifi API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3909
diff changeset
    89
  Ptr<YansWifiPhy> rx = CreateObject<YansWifiPhy> ();
4038
c6f634d0fc6f virtualize ErrorRateModel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3912
diff changeset
    90
  Ptr<ErrorRateModel> error = CreateObject<YansErrorRateModel> ();
3912
4d1a61f80745 new wifi API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3909
diff changeset
    91
  tx->SetErrorRateModel (error);
4d1a61f80745 new wifi API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3909
diff changeset
    92
  rx->SetErrorRateModel (error);
4d1a61f80745 new wifi API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3909
diff changeset
    93
  tx->SetChannel (channel);
4d1a61f80745 new wifi API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3909
diff changeset
    94
  rx->SetChannel (channel);
4d1a61f80745 new wifi API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3909
diff changeset
    95
  tx->SetMobility (posTx);
4d1a61f80745 new wifi API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3909
diff changeset
    96
  rx->SetMobility (posRx);
4d1a61f80745 new wifi API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3909
diff changeset
    97
3893
94f771c1373a split WifiChannel in WifiChannel + YansWifiChannel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3888
diff changeset
    98
  rx->SetReceiveOkCallback (MakeCallback (&PsrExperiment::Receive, this));
3881
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
  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
   101
    {
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   102
      Simulator::Schedule (Seconds (i), &PsrExperiment::Send, this);
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   103
    }
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   104
  m_tx = tx;
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   105
  Simulator::Run ();
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   106
  return m_output;
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   107
}
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   108
3885
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   109
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   110
class CollisionExperiment
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   111
{
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   112
public:
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   113
  struct Input
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   114
  {
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   115
    Input ();
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   116
    Time interval;
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   117
    double xA;
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   118
    double xB;
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   119
    std::string txModeA;
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   120
    std::string txModeB;
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   121
    uint8_t txPowerLevelA;
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   122
    uint8_t txPowerLevelB;
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   123
    uint32_t packetSizeA;
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   124
    uint32_t packetSizeB;
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   125
    uint32_t nPackets;
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   126
  };
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   127
  struct Output
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   128
  {
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   129
    uint32_t receivedA;
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   130
    uint32_t receivedB;
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   131
  };
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   132
  CollisionExperiment ();
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   133
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   134
  struct CollisionExperiment::Output Run (struct CollisionExperiment::Input input);
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   135
private:
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   136
  void SendA (void) const;
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   137
  void SendB (void) const;
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   138
  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
   139
  Ptr<WifiPhy> m_txA;
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   140
  Ptr<WifiPhy> m_txB;
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   141
  uint32_t m_flowIdA;
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   142
  uint32_t m_flowIdB;
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   143
  struct Input m_input;
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   144
  struct Output m_output;
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   145
};
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   146
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   147
void 
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   148
CollisionExperiment::SendA (void) const
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   149
{
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   150
  Ptr<Packet> p = Create<Packet> (m_input.packetSizeA);
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   151
  p->AddTag (FlowIdTag (m_flowIdA));
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   152
  m_txA->SendPacket (p, WifiMode (m_input.txModeA), 
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   153
		     WIFI_PREAMBLE_SHORT, m_input.txPowerLevelA);
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
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   156
void 
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   157
CollisionExperiment::SendB (void) const
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   158
{
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   159
  Ptr<Packet> p = Create<Packet> (m_input.packetSizeB);
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   160
  p->AddTag (FlowIdTag (m_flowIdB));
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   161
  m_txB->SendPacket (p, WifiMode (m_input.txModeB), 
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   162
		     WIFI_PREAMBLE_SHORT, m_input.txPowerLevelB);
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   163
}
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   164
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   165
void 
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   166
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
   167
{
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   168
  FlowIdTag tag;
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   169
  p->FindFirstMatchingTag (tag);
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   170
  if (tag.GetFlowId () == m_flowIdA)
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
      m_output.receivedA++;
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   173
    }
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   174
  else if (tag.GetFlowId () == m_flowIdB)
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
      m_output.receivedB++;
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   177
    }
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   178
}
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   179
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   180
CollisionExperiment::CollisionExperiment ()
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   181
{}
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   182
CollisionExperiment::Input::Input ()
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   183
  : interval (MicroSeconds (0)),
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   184
    xA (-5),
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   185
    xB (5),
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   186
    txModeA ("wifia-6mbs"),
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   187
    txModeB ("wifia-6mbs"),
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   188
    txPowerLevelA (0),
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   189
    txPowerLevelB (0),
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   190
    packetSizeA (2304),
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   191
    packetSizeB (2304),
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   192
    nPackets (400)
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   193
{}
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   194
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   195
struct CollisionExperiment::Output
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   196
CollisionExperiment::Run (struct CollisionExperiment::Input input)
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   197
{
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   198
  m_output.receivedA = 0;
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   199
  m_output.receivedB = 0;
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   200
  m_input = input;
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   201
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   202
  m_flowIdA = FlowIdTag::AllocateFlowId ();
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   203
  m_flowIdB = FlowIdTag::AllocateFlowId ();
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   204
3893
94f771c1373a split WifiChannel in WifiChannel + YansWifiChannel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3888
diff changeset
   205
  Ptr<YansWifiChannel> channel = CreateObject<YansWifiChannel> ();
94f771c1373a split WifiChannel in WifiChannel + YansWifiChannel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3888
diff changeset
   206
  channel->SetPropagationDelayModel (CreateObject<ConstantSpeedPropagationDelayModel> ());
94f771c1373a split WifiChannel in WifiChannel + YansWifiChannel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3888
diff changeset
   207
  Ptr<LogDistancePropagationLossModel> log = CreateObject<LogDistancePropagationLossModel> ();
94f771c1373a split WifiChannel in WifiChannel + YansWifiChannel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3888
diff changeset
   208
  channel->SetPropagationLossModel (log);
94f771c1373a split WifiChannel in WifiChannel + YansWifiChannel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3888
diff changeset
   209
4257
3e8f8052e155 StaticMobilityModel -> ConstantPositionMobilityModel, StaticSpeedMobilityModel -> ConstantVelocityMobilityModel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4038
diff changeset
   210
  Ptr<MobilityModel> posTxA = CreateObject<ConstantPositionMobilityModel> ();
3885
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   211
  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
   212
  Ptr<MobilityModel> posTxB = CreateObject<ConstantPositionMobilityModel> ();
3885
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   213
  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
   214
  Ptr<MobilityModel> posRx = CreateObject<ConstantPositionMobilityModel> ();
3885
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   215
  posRx->SetPosition (Vector (0, 0.0, 0.0));
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   216
3912
4d1a61f80745 new wifi API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3909
diff changeset
   217
  Ptr<YansWifiPhy> txA = CreateObject<YansWifiPhy> ();
4d1a61f80745 new wifi API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3909
diff changeset
   218
  Ptr<YansWifiPhy> txB = CreateObject<YansWifiPhy> ();
4d1a61f80745 new wifi API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3909
diff changeset
   219
  Ptr<YansWifiPhy> rx = CreateObject<YansWifiPhy> ();
4d1a61f80745 new wifi API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3909
diff changeset
   220
4038
c6f634d0fc6f virtualize ErrorRateModel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3912
diff changeset
   221
  Ptr<ErrorRateModel> error = CreateObject<YansErrorRateModel> ();
3912
4d1a61f80745 new wifi API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3909
diff changeset
   222
  txA->SetErrorRateModel (error);
4d1a61f80745 new wifi API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3909
diff changeset
   223
  txB->SetErrorRateModel (error);
4d1a61f80745 new wifi API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3909
diff changeset
   224
  rx->SetErrorRateModel (error);
4d1a61f80745 new wifi API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3909
diff changeset
   225
  txA->SetChannel (channel);
4d1a61f80745 new wifi API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3909
diff changeset
   226
  txB->SetChannel (channel);
4d1a61f80745 new wifi API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3909
diff changeset
   227
  rx->SetChannel (channel);
4d1a61f80745 new wifi API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3909
diff changeset
   228
  txA->SetMobility (posTxA);
4d1a61f80745 new wifi API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3909
diff changeset
   229
  txB->SetMobility (posTxB);
4d1a61f80745 new wifi API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3909
diff changeset
   230
  rx->SetMobility (posRx);
4d1a61f80745 new wifi API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3909
diff changeset
   231
4d1a61f80745 new wifi API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3909
diff changeset
   232
3885
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   233
  rx->SetReceiveOkCallback (MakeCallback (&CollisionExperiment::Receive, this));
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   234
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   235
  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
   236
    {
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   237
      Simulator::Schedule (Seconds (i), &CollisionExperiment::SendA, this);
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   238
    }
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   239
  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
   240
    {
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   241
      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
   242
    }
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   243
  m_txA = txA;
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   244
  m_txB = txB;
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   245
  Simulator::Run ();
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   246
  return m_output;
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   247
}
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   248
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   249
3881
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   250
static void PrintPsr (int argc, char *argv[])
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   251
{
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   252
  PsrExperiment experiment;
3885
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   253
  struct PsrExperiment::Input input;
3881
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   254
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   255
  CommandLine cmd;
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   256
  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
   257
  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
   258
  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
   259
  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
   260
  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
   261
  cmd.Parse (argc, argv);
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   262
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   263
  struct PsrExperiment::Output output;
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   264
  output = experiment.Run (input);
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   265
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   266
  double psr = output.received;
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   267
  psr /= input.nPackets ;
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   268
  
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   269
  std::cout << psr << std::endl;
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   270
}
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   271
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   272
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
   273
{
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   274
  double psr = output.received;
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   275
  psr /= input.nPackets ;
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   276
  return psr;
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   277
}
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   278
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   279
static void PrintPsrVsDistance (int argc, char *argv[])
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   280
{
3885
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   281
  struct PsrExperiment::Input input;
3881
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   282
  CommandLine cmd;
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   283
  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
   284
  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
   285
  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
   286
  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
   287
  cmd.Parse (argc, argv);
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   288
  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
   289
    {
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   290
      std::cout << input.distance;
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   291
      PsrExperiment experiment;
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   292
      struct PsrExperiment::Output output;
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   293
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   294
      input.txMode = "wifia-6mbs";
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   295
      output = experiment.Run (input);
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   296
      std::cout << " " << CalcPsr (output, input);
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   297
    
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   298
      input.txMode = "wifia-9mbs";
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   299
      output = experiment.Run (input);
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   300
      std::cout << " " << CalcPsr (output, input);
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   301
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   302
      input.txMode = "wifia-12mbs";
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   303
      output = experiment.Run (input);
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   304
      std::cout << " " << CalcPsr (output, input);
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   305
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   306
      input.txMode = "wifia-18mbs";
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   307
      output = experiment.Run (input);
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   308
      std::cout << " " << CalcPsr (output, input);
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   309
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   310
      input.txMode = "wifia-24mbs";
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   311
      output = experiment.Run (input);
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   312
      std::cout << " " << CalcPsr (output, input);
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   313
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   314
      input.txMode = "wifia-36mbs";
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   315
      output = experiment.Run (input);
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   316
      std::cout << " " << CalcPsr (output, input);
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   317
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   318
      input.txMode = "wifia-48mbs";
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   319
      output = experiment.Run (input);
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   320
      std::cout << " " << CalcPsr (output, input);
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   321
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   322
      input.txMode = "wifia-54mbs";
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   323
      output = experiment.Run (input);
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   324
      std::cout << " " << CalcPsr (output, input);
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   325
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   326
      std::cout << std::endl;
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   327
    }
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   328
}
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   329
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   330
static void PrintSizeVsRange (int argc, char *argv[])
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   331
{
3884
260d8acdbd01 change name of parameter
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3883
diff changeset
   332
  double targetPsr = 0.05;
3885
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   333
  struct PsrExperiment::Input input;
3881
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   334
  CommandLine cmd;
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   335
  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
   336
  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
   337
  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
   338
  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
   339
  cmd.Parse (argc, argv);
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   340
  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
   341
    {
3883
091bb8fef41f do a binary search for the range boundary.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3881
diff changeset
   342
      double precision = 0.1;
091bb8fef41f do a binary search for the range boundary.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3881
diff changeset
   343
      double low = 1.0;
091bb8fef41f do a binary search for the range boundary.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3881
diff changeset
   344
      double high = 200.0;
091bb8fef41f do a binary search for the range boundary.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3881
diff changeset
   345
      while (high - low > precision)
3881
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   346
	{
3883
091bb8fef41f do a binary search for the range boundary.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3881
diff changeset
   347
	  double middle = low + (high - low) / 2;
3881
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   348
	  struct PsrExperiment::Output output;
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   349
	  PsrExperiment experiment;
3883
091bb8fef41f do a binary search for the range boundary.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3881
diff changeset
   350
	  input.distance = middle;
3881
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   351
	  output = experiment.Run (input);
3883
091bb8fef41f do a binary search for the range boundary.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3881
diff changeset
   352
	  double psr = CalcPsr (output, input);
3884
260d8acdbd01 change name of parameter
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3883
diff changeset
   353
	  if (psr >= targetPsr)
3881
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   354
	    {
3883
091bb8fef41f do a binary search for the range boundary.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3881
diff changeset
   355
	      low = middle;
091bb8fef41f do a binary search for the range boundary.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3881
diff changeset
   356
	    }
091bb8fef41f do a binary search for the range boundary.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3881
diff changeset
   357
	  else
091bb8fef41f do a binary search for the range boundary.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3881
diff changeset
   358
	    {
091bb8fef41f do a binary search for the range boundary.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3881
diff changeset
   359
	      high = middle;
3881
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   360
	    }
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   361
	}
3883
091bb8fef41f do a binary search for the range boundary.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3881
diff changeset
   362
      std::cout << input.packetSize << " " << input.distance << std::endl;
3881
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   363
    }
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
3885
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   366
static void PrintPsrVsCollisionInterval (int argc, char *argv[])
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   367
{
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   368
  CollisionExperiment::Input input;
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   369
  input.nPackets = 100;
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   370
  CommandLine cmd;
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   371
  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
   372
  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
   373
  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
   374
  for (uint32_t i = 0; i < 100; i += 1)
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   375
    {
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   376
      CollisionExperiment experiment;
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   377
      CollisionExperiment::Output output;
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   378
      input.interval = MicroSeconds (i);
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   379
      output = experiment.Run (input);
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   380
      double perA = (output.receivedA+0.0) / (input.nPackets+0.0);
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   381
      double perB = (output.receivedB+0.0) / (input.nPackets+0.0);
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   382
      std::cout << i << " " << perA << " " << perB << std::endl;
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   383
    }
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   384
  for (uint32_t i = 100; i < 4000; i += 50)
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   385
    {
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   386
      CollisionExperiment experiment;
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   387
      CollisionExperiment::Output output;
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   388
      input.interval = MicroSeconds (i);
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   389
      output = experiment.Run (input);
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   390
      double perA = (output.receivedA+0.0) / (input.nPackets+0.0);
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   391
      double perB = (output.receivedB+0.0) / (input.nPackets+0.0);
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   392
      std::cout << i << " " << perA << " " << perB << std::endl;
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   393
    }
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   394
}
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   395
3881
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   396
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   397
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   398
int main (int argc, char *argv[])
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   399
{
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   400
  if (argc <= 1)
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
      std::cout << "Available experiments: "
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   403
		<< "Psr "
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   404
		<< "SizeVsRange "
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   405
		<< "PsrVsDistance "
3885
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   406
		<< "PsrVsCollisionInterval "
3881
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   407
		<< std::endl;
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   408
      return -1;
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   409
    }
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   410
  std::string type = argv[1];
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   411
  argc--;
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   412
  argv[1] = argv[0];
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   413
  argv++;
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   414
  if (type == "Psr")
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   415
    {
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   416
      PrintPsr (argc, argv);
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   417
    }
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   418
  else if (type == "SizeVsRange")
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   419
    {
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   420
      PrintSizeVsRange (argc, argv);
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   421
    }
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   422
  else if (type == "PsrVsDistance")
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   423
    {
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   424
      PrintPsrVsDistance (argc, argv);
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   425
    }
3885
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   426
  else if (type == "PsrVsCollisionInterval")
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   427
    {
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   428
      PrintPsrVsCollisionInterval (argc, argv);
006d3dd58939 test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3884
diff changeset
   429
    }
3881
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   430
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   431
  return 0;
d3f8cf4d2c2a PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   432
}