author | Mohamed Amine Ismail <amine.ismail@sophia.inria.fr> |
Tue, 02 Feb 2010 11:44:02 +0100 | |
changeset 5944 | b1a245ae00d4 |
parent 5050 | 5c2002bda934 |
child 6360 | d8975477ff6a |
permissions | -rw-r--r-- |
4325
acc6c801f785
bug 548: missing license header
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
4257
diff
changeset
|
1 |
/* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */ |
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 |
acc6c801f785
bug 548: missing license header
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
4257
diff
changeset
|
6 |
* it under the terms of the GNU General Public License version 2 as |
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 |
*/ |
3893
94f771c1373a
split WifiChannel in WifiChannel + YansWifiChannel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3888
diff
changeset
|
20 |
#include "wifi-net-device.h" |
94f771c1373a
split WifiChannel in WifiChannel + YansWifiChannel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3888
diff
changeset
|
21 |
#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
|
22 |
#include "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" |
3912
4d1a61f80745
new wifi API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3909
diff
changeset
|
25 |
#include "error-rate-model.h" |
4038
c6f634d0fc6f
virtualize ErrorRateModel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3912
diff
changeset
|
26 |
#include "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" |
3881
d3f8cf4d2c2a
PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
36 |
|
d3f8cf4d2c2a
PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
37 |
using namespace ns3; |
d3f8cf4d2c2a
PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
38 |
|
d3f8cf4d2c2a
PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
39 |
class PsrExperiment |
d3f8cf4d2c2a
PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
40 |
{ |
d3f8cf4d2c2a
PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
41 |
public: |
d3f8cf4d2c2a
PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
42 |
struct Input |
d3f8cf4d2c2a
PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
43 |
{ |
3885
006d3dd58939
test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3884
diff
changeset
|
44 |
Input (); |
3881
d3f8cf4d2c2a
PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
45 |
double distance; |
d3f8cf4d2c2a
PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
46 |
std::string txMode; |
d3f8cf4d2c2a
PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
47 |
uint8_t txPowerLevel; |
d3f8cf4d2c2a
PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
48 |
uint32_t packetSize; |
d3f8cf4d2c2a
PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
49 |
uint32_t nPackets; |
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 |
struct Output |
d3f8cf4d2c2a
PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
52 |
{ |
d3f8cf4d2c2a
PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
53 |
uint32_t received; |
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 |
PsrExperiment (); |
d3f8cf4d2c2a
PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
56 |
|
d3f8cf4d2c2a
PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
57 |
struct PsrExperiment::Output Run (struct PsrExperiment::Input input); |
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 |
private: |
d3f8cf4d2c2a
PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
60 |
void Send (void); |
d3f8cf4d2c2a
PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
61 |
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
|
62 |
Ptr<WifiPhy> m_tx; |
d3f8cf4d2c2a
PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
63 |
struct Input m_input; |
d3f8cf4d2c2a
PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
64 |
struct Output m_output; |
d3f8cf4d2c2a
PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
65 |
}; |
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 |
void |
d3f8cf4d2c2a
PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
68 |
PsrExperiment::Send (void) |
d3f8cf4d2c2a
PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
69 |
{ |
d3f8cf4d2c2a
PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
70 |
Ptr<Packet> p = Create<Packet> (m_input.packetSize); |
d3f8cf4d2c2a
PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
71 |
WifiMode mode = WifiMode (m_input.txMode); |
d3f8cf4d2c2a
PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
72 |
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
|
73 |
} |
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 |
void |
d3f8cf4d2c2a
PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
76 |
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
|
77 |
{ |
d3f8cf4d2c2a
PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
78 |
m_output.received++; |
d3f8cf4d2c2a
PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
79 |
} |
d3f8cf4d2c2a
PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
80 |
|
d3f8cf4d2c2a
PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
81 |
PsrExperiment::PsrExperiment () |
d3f8cf4d2c2a
PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
82 |
{} |
3885
006d3dd58939
test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3884
diff
changeset
|
83 |
PsrExperiment::Input::Input () |
006d3dd58939
test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3884
diff
changeset
|
84 |
: distance (5.0), |
006d3dd58939
test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3884
diff
changeset
|
85 |
txMode ("wifia-6mbs"), |
006d3dd58939
test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3884
diff
changeset
|
86 |
txPowerLevel (0), |
006d3dd58939
test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3884
diff
changeset
|
87 |
packetSize (2304), |
006d3dd58939
test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3884
diff
changeset
|
88 |
nPackets (400) |
006d3dd58939
test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3884
diff
changeset
|
89 |
{} |
3881
d3f8cf4d2c2a
PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
90 |
|
d3f8cf4d2c2a
PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
91 |
struct PsrExperiment::Output |
d3f8cf4d2c2a
PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
92 |
PsrExperiment::Run (struct PsrExperiment::Input input) |
d3f8cf4d2c2a
PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
93 |
{ |
d3f8cf4d2c2a
PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
94 |
m_output.received = 0; |
d3f8cf4d2c2a
PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
95 |
m_input = input; |
d3f8cf4d2c2a
PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
96 |
|
4257
3e8f8052e155
StaticMobilityModel -> ConstantPositionMobilityModel, StaticSpeedMobilityModel -> ConstantVelocityMobilityModel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
4038
diff
changeset
|
97 |
Ptr<MobilityModel> posTx = CreateObject<ConstantPositionMobilityModel> (); |
3881
d3f8cf4d2c2a
PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
98 |
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
|
99 |
Ptr<MobilityModel> posRx = CreateObject<ConstantPositionMobilityModel> (); |
3881
d3f8cf4d2c2a
PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
100 |
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
|
101 |
|
3893
94f771c1373a
split WifiChannel in WifiChannel + YansWifiChannel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3888
diff
changeset
|
102 |
Ptr<YansWifiChannel> channel = CreateObject<YansWifiChannel> (); |
3881
d3f8cf4d2c2a
PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
103 |
channel->SetPropagationDelayModel (CreateObject<ConstantSpeedPropagationDelayModel> ()); |
d3f8cf4d2c2a
PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
104 |
Ptr<LogDistancePropagationLossModel> log = CreateObject<LogDistancePropagationLossModel> (); |
d3f8cf4d2c2a
PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
105 |
channel->SetPropagationLossModel (log); |
d3f8cf4d2c2a
PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
106 |
|
3912
4d1a61f80745
new wifi API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3909
diff
changeset
|
107 |
Ptr<YansWifiPhy> tx = CreateObject<YansWifiPhy> (); |
4d1a61f80745
new wifi API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3909
diff
changeset
|
108 |
Ptr<YansWifiPhy> rx = CreateObject<YansWifiPhy> (); |
4038
c6f634d0fc6f
virtualize ErrorRateModel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3912
diff
changeset
|
109 |
Ptr<ErrorRateModel> error = CreateObject<YansErrorRateModel> (); |
3912
4d1a61f80745
new wifi API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3909
diff
changeset
|
110 |
tx->SetErrorRateModel (error); |
4d1a61f80745
new wifi API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3909
diff
changeset
|
111 |
rx->SetErrorRateModel (error); |
4d1a61f80745
new wifi API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3909
diff
changeset
|
112 |
tx->SetChannel (channel); |
4d1a61f80745
new wifi API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3909
diff
changeset
|
113 |
rx->SetChannel (channel); |
4d1a61f80745
new wifi API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3909
diff
changeset
|
114 |
tx->SetMobility (posTx); |
4d1a61f80745
new wifi API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3909
diff
changeset
|
115 |
rx->SetMobility (posRx); |
4d1a61f80745
new wifi API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3909
diff
changeset
|
116 |
|
3893
94f771c1373a
split WifiChannel in WifiChannel + YansWifiChannel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3888
diff
changeset
|
117 |
rx->SetReceiveOkCallback (MakeCallback (&PsrExperiment::Receive, this)); |
3881
d3f8cf4d2c2a
PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
118 |
|
d3f8cf4d2c2a
PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
119 |
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
|
120 |
{ |
d3f8cf4d2c2a
PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
121 |
Simulator::Schedule (Seconds (i), &PsrExperiment::Send, this); |
d3f8cf4d2c2a
PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
122 |
} |
d3f8cf4d2c2a
PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
123 |
m_tx = tx; |
d3f8cf4d2c2a
PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
124 |
Simulator::Run (); |
d3f8cf4d2c2a
PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
125 |
return m_output; |
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 |
|
3885
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 |
class CollisionExperiment |
006d3dd58939
test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3884
diff
changeset
|
130 |
{ |
006d3dd58939
test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3884
diff
changeset
|
131 |
public: |
006d3dd58939
test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3884
diff
changeset
|
132 |
struct Input |
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 |
Input (); |
006d3dd58939
test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3884
diff
changeset
|
135 |
Time interval; |
006d3dd58939
test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3884
diff
changeset
|
136 |
double xA; |
006d3dd58939
test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3884
diff
changeset
|
137 |
double xB; |
006d3dd58939
test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3884
diff
changeset
|
138 |
std::string txModeA; |
006d3dd58939
test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3884
diff
changeset
|
139 |
std::string txModeB; |
006d3dd58939
test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3884
diff
changeset
|
140 |
uint8_t txPowerLevelA; |
006d3dd58939
test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3884
diff
changeset
|
141 |
uint8_t txPowerLevelB; |
006d3dd58939
test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3884
diff
changeset
|
142 |
uint32_t packetSizeA; |
006d3dd58939
test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3884
diff
changeset
|
143 |
uint32_t packetSizeB; |
006d3dd58939
test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3884
diff
changeset
|
144 |
uint32_t nPackets; |
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 |
struct Output |
006d3dd58939
test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3884
diff
changeset
|
147 |
{ |
006d3dd58939
test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3884
diff
changeset
|
148 |
uint32_t receivedA; |
006d3dd58939
test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3884
diff
changeset
|
149 |
uint32_t receivedB; |
006d3dd58939
test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3884
diff
changeset
|
150 |
}; |
006d3dd58939
test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3884
diff
changeset
|
151 |
CollisionExperiment (); |
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 CollisionExperiment::Output Run (struct CollisionExperiment::Input input); |
006d3dd58939
test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3884
diff
changeset
|
154 |
private: |
006d3dd58939
test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3884
diff
changeset
|
155 |
void SendA (void) const; |
006d3dd58939
test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3884
diff
changeset
|
156 |
void SendB (void) const; |
006d3dd58939
test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3884
diff
changeset
|
157 |
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
|
158 |
Ptr<WifiPhy> m_txA; |
006d3dd58939
test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3884
diff
changeset
|
159 |
Ptr<WifiPhy> m_txB; |
006d3dd58939
test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3884
diff
changeset
|
160 |
uint32_t m_flowIdA; |
006d3dd58939
test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3884
diff
changeset
|
161 |
uint32_t m_flowIdB; |
006d3dd58939
test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3884
diff
changeset
|
162 |
struct Input m_input; |
006d3dd58939
test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3884
diff
changeset
|
163 |
struct Output m_output; |
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 |
|
006d3dd58939
test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3884
diff
changeset
|
166 |
void |
006d3dd58939
test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3884
diff
changeset
|
167 |
CollisionExperiment::SendA (void) const |
006d3dd58939
test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3884
diff
changeset
|
168 |
{ |
006d3dd58939
test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3884
diff
changeset
|
169 |
Ptr<Packet> p = Create<Packet> (m_input.packetSizeA); |
4502 | 170 |
p->AddByteTag (FlowIdTag (m_flowIdA)); |
3885
006d3dd58939
test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3884
diff
changeset
|
171 |
m_txA->SendPacket (p, WifiMode (m_input.txModeA), |
006d3dd58939
test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3884
diff
changeset
|
172 |
WIFI_PREAMBLE_SHORT, m_input.txPowerLevelA); |
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 |
|
006d3dd58939
test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3884
diff
changeset
|
175 |
void |
006d3dd58939
test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3884
diff
changeset
|
176 |
CollisionExperiment::SendB (void) const |
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 |
Ptr<Packet> p = Create<Packet> (m_input.packetSizeB); |
4502 | 179 |
p->AddByteTag (FlowIdTag (m_flowIdB)); |
3885
006d3dd58939
test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3884
diff
changeset
|
180 |
m_txB->SendPacket (p, WifiMode (m_input.txModeB), |
006d3dd58939
test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3884
diff
changeset
|
181 |
WIFI_PREAMBLE_SHORT, m_input.txPowerLevelB); |
006d3dd58939
test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3884
diff
changeset
|
182 |
} |
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 |
void |
006d3dd58939
test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3884
diff
changeset
|
185 |
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
|
186 |
{ |
006d3dd58939
test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3884
diff
changeset
|
187 |
FlowIdTag tag; |
4502 | 188 |
p->FindFirstMatchingByteTag (tag); |
3885
006d3dd58939
test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3884
diff
changeset
|
189 |
if (tag.GetFlowId () == m_flowIdA) |
006d3dd58939
test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3884
diff
changeset
|
190 |
{ |
006d3dd58939
test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3884
diff
changeset
|
191 |
m_output.receivedA++; |
006d3dd58939
test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3884
diff
changeset
|
192 |
} |
006d3dd58939
test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3884
diff
changeset
|
193 |
else if (tag.GetFlowId () == m_flowIdB) |
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 |
m_output.receivedB++; |
006d3dd58939
test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3884
diff
changeset
|
196 |
} |
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 |
|
006d3dd58939
test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3884
diff
changeset
|
199 |
CollisionExperiment::CollisionExperiment () |
006d3dd58939
test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3884
diff
changeset
|
200 |
{} |
006d3dd58939
test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3884
diff
changeset
|
201 |
CollisionExperiment::Input::Input () |
006d3dd58939
test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3884
diff
changeset
|
202 |
: interval (MicroSeconds (0)), |
006d3dd58939
test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3884
diff
changeset
|
203 |
xA (-5), |
006d3dd58939
test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3884
diff
changeset
|
204 |
xB (5), |
006d3dd58939
test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3884
diff
changeset
|
205 |
txModeA ("wifia-6mbs"), |
006d3dd58939
test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3884
diff
changeset
|
206 |
txModeB ("wifia-6mbs"), |
006d3dd58939
test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3884
diff
changeset
|
207 |
txPowerLevelA (0), |
006d3dd58939
test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3884
diff
changeset
|
208 |
txPowerLevelB (0), |
006d3dd58939
test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3884
diff
changeset
|
209 |
packetSizeA (2304), |
006d3dd58939
test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3884
diff
changeset
|
210 |
packetSizeB (2304), |
006d3dd58939
test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3884
diff
changeset
|
211 |
nPackets (400) |
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 |
struct CollisionExperiment::Output |
006d3dd58939
test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3884
diff
changeset
|
215 |
CollisionExperiment::Run (struct CollisionExperiment::Input input) |
006d3dd58939
test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3884
diff
changeset
|
216 |
{ |
006d3dd58939
test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3884
diff
changeset
|
217 |
m_output.receivedA = 0; |
006d3dd58939
test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3884
diff
changeset
|
218 |
m_output.receivedB = 0; |
006d3dd58939
test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3884
diff
changeset
|
219 |
m_input = input; |
006d3dd58939
test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3884
diff
changeset
|
220 |
|
006d3dd58939
test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3884
diff
changeset
|
221 |
m_flowIdA = FlowIdTag::AllocateFlowId (); |
006d3dd58939
test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3884
diff
changeset
|
222 |
m_flowIdB = FlowIdTag::AllocateFlowId (); |
006d3dd58939
test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3884
diff
changeset
|
223 |
|
3893
94f771c1373a
split WifiChannel in WifiChannel + YansWifiChannel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3888
diff
changeset
|
224 |
Ptr<YansWifiChannel> channel = CreateObject<YansWifiChannel> (); |
94f771c1373a
split WifiChannel in WifiChannel + YansWifiChannel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3888
diff
changeset
|
225 |
channel->SetPropagationDelayModel (CreateObject<ConstantSpeedPropagationDelayModel> ()); |
94f771c1373a
split WifiChannel in WifiChannel + YansWifiChannel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3888
diff
changeset
|
226 |
Ptr<LogDistancePropagationLossModel> log = CreateObject<LogDistancePropagationLossModel> (); |
94f771c1373a
split WifiChannel in WifiChannel + YansWifiChannel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3888
diff
changeset
|
227 |
channel->SetPropagationLossModel (log); |
94f771c1373a
split WifiChannel in WifiChannel + YansWifiChannel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3888
diff
changeset
|
228 |
|
4257
3e8f8052e155
StaticMobilityModel -> ConstantPositionMobilityModel, StaticSpeedMobilityModel -> ConstantVelocityMobilityModel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
4038
diff
changeset
|
229 |
Ptr<MobilityModel> posTxA = CreateObject<ConstantPositionMobilityModel> (); |
3885
006d3dd58939
test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3884
diff
changeset
|
230 |
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
|
231 |
Ptr<MobilityModel> posTxB = CreateObject<ConstantPositionMobilityModel> (); |
3885
006d3dd58939
test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3884
diff
changeset
|
232 |
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
|
233 |
Ptr<MobilityModel> posRx = CreateObject<ConstantPositionMobilityModel> (); |
3885
006d3dd58939
test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3884
diff
changeset
|
234 |
posRx->SetPosition (Vector (0, 0.0, 0.0)); |
006d3dd58939
test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3884
diff
changeset
|
235 |
|
3912
4d1a61f80745
new wifi API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3909
diff
changeset
|
236 |
Ptr<YansWifiPhy> txA = CreateObject<YansWifiPhy> (); |
4d1a61f80745
new wifi API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3909
diff
changeset
|
237 |
Ptr<YansWifiPhy> txB = CreateObject<YansWifiPhy> (); |
4d1a61f80745
new wifi API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3909
diff
changeset
|
238 |
Ptr<YansWifiPhy> rx = CreateObject<YansWifiPhy> (); |
4d1a61f80745
new wifi API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3909
diff
changeset
|
239 |
|
4038
c6f634d0fc6f
virtualize ErrorRateModel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3912
diff
changeset
|
240 |
Ptr<ErrorRateModel> error = CreateObject<YansErrorRateModel> (); |
3912
4d1a61f80745
new wifi API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3909
diff
changeset
|
241 |
txA->SetErrorRateModel (error); |
4d1a61f80745
new wifi API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3909
diff
changeset
|
242 |
txB->SetErrorRateModel (error); |
4d1a61f80745
new wifi API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3909
diff
changeset
|
243 |
rx->SetErrorRateModel (error); |
4d1a61f80745
new wifi API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3909
diff
changeset
|
244 |
txA->SetChannel (channel); |
4d1a61f80745
new wifi API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3909
diff
changeset
|
245 |
txB->SetChannel (channel); |
4d1a61f80745
new wifi API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3909
diff
changeset
|
246 |
rx->SetChannel (channel); |
4d1a61f80745
new wifi API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3909
diff
changeset
|
247 |
txA->SetMobility (posTxA); |
4d1a61f80745
new wifi API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3909
diff
changeset
|
248 |
txB->SetMobility (posTxB); |
4d1a61f80745
new wifi API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3909
diff
changeset
|
249 |
rx->SetMobility (posRx); |
4d1a61f80745
new wifi API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3909
diff
changeset
|
250 |
|
4d1a61f80745
new wifi API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3909
diff
changeset
|
251 |
|
3885
006d3dd58939
test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3884
diff
changeset
|
252 |
rx->SetReceiveOkCallback (MakeCallback (&CollisionExperiment::Receive, this)); |
006d3dd58939
test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3884
diff
changeset
|
253 |
|
006d3dd58939
test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3884
diff
changeset
|
254 |
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
|
255 |
{ |
006d3dd58939
test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3884
diff
changeset
|
256 |
Simulator::Schedule (Seconds (i), &CollisionExperiment::SendA, this); |
006d3dd58939
test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3884
diff
changeset
|
257 |
} |
006d3dd58939
test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3884
diff
changeset
|
258 |
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
|
259 |
{ |
006d3dd58939
test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3884
diff
changeset
|
260 |
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
|
261 |
} |
006d3dd58939
test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3884
diff
changeset
|
262 |
m_txA = txA; |
006d3dd58939
test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3884
diff
changeset
|
263 |
m_txB = txB; |
006d3dd58939
test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3884
diff
changeset
|
264 |
Simulator::Run (); |
006d3dd58939
test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3884
diff
changeset
|
265 |
return m_output; |
006d3dd58939
test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3884
diff
changeset
|
266 |
} |
006d3dd58939
test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3884
diff
changeset
|
267 |
|
006d3dd58939
test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3884
diff
changeset
|
268 |
|
3881
d3f8cf4d2c2a
PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
269 |
static void PrintPsr (int argc, char *argv[]) |
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 |
PsrExperiment experiment; |
3885
006d3dd58939
test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3884
diff
changeset
|
272 |
struct PsrExperiment::Input input; |
3881
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 |
CommandLine cmd; |
d3f8cf4d2c2a
PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
275 |
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
|
276 |
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
|
277 |
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
|
278 |
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
|
279 |
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
|
280 |
cmd.Parse (argc, argv); |
d3f8cf4d2c2a
PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
281 |
|
d3f8cf4d2c2a
PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
282 |
struct PsrExperiment::Output output; |
d3f8cf4d2c2a
PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
283 |
output = experiment.Run (input); |
d3f8cf4d2c2a
PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
284 |
|
d3f8cf4d2c2a
PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
285 |
double psr = output.received; |
d3f8cf4d2c2a
PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
286 |
psr /= input.nPackets ; |
d3f8cf4d2c2a
PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
287 |
|
d3f8cf4d2c2a
PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
288 |
std::cout << psr << std::endl; |
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 |
|
d3f8cf4d2c2a
PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
291 |
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
|
292 |
{ |
d3f8cf4d2c2a
PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
293 |
double psr = output.received; |
d3f8cf4d2c2a
PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
294 |
psr /= input.nPackets ; |
d3f8cf4d2c2a
PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
295 |
return psr; |
d3f8cf4d2c2a
PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
296 |
} |
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 |
static void PrintPsrVsDistance (int argc, char *argv[]) |
d3f8cf4d2c2a
PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
299 |
{ |
3885
006d3dd58939
test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3884
diff
changeset
|
300 |
struct PsrExperiment::Input input; |
3881
d3f8cf4d2c2a
PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
301 |
CommandLine cmd; |
d3f8cf4d2c2a
PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
302 |
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
|
303 |
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
|
304 |
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
|
305 |
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
|
306 |
cmd.Parse (argc, argv); |
d3f8cf4d2c2a
PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
307 |
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
|
308 |
{ |
d3f8cf4d2c2a
PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
309 |
std::cout << input.distance; |
d3f8cf4d2c2a
PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
310 |
PsrExperiment experiment; |
d3f8cf4d2c2a
PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
311 |
struct PsrExperiment::Output output; |
d3f8cf4d2c2a
PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
312 |
|
d3f8cf4d2c2a
PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
313 |
input.txMode = "wifia-6mbs"; |
d3f8cf4d2c2a
PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
314 |
output = experiment.Run (input); |
d3f8cf4d2c2a
PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
315 |
std::cout << " " << CalcPsr (output, input); |
d3f8cf4d2c2a
PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
316 |
|
d3f8cf4d2c2a
PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
317 |
input.txMode = "wifia-9mbs"; |
d3f8cf4d2c2a
PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
318 |
output = experiment.Run (input); |
d3f8cf4d2c2a
PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
319 |
std::cout << " " << CalcPsr (output, input); |
d3f8cf4d2c2a
PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
320 |
|
d3f8cf4d2c2a
PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
321 |
input.txMode = "wifia-12mbs"; |
d3f8cf4d2c2a
PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
322 |
output = experiment.Run (input); |
d3f8cf4d2c2a
PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
323 |
std::cout << " " << CalcPsr (output, input); |
d3f8cf4d2c2a
PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
324 |
|
d3f8cf4d2c2a
PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
325 |
input.txMode = "wifia-18mbs"; |
d3f8cf4d2c2a
PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
326 |
output = experiment.Run (input); |
d3f8cf4d2c2a
PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
327 |
std::cout << " " << CalcPsr (output, input); |
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 |
input.txMode = "wifia-24mbs"; |
d3f8cf4d2c2a
PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
330 |
output = experiment.Run (input); |
d3f8cf4d2c2a
PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
331 |
std::cout << " " << CalcPsr (output, input); |
d3f8cf4d2c2a
PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
332 |
|
d3f8cf4d2c2a
PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
333 |
input.txMode = "wifia-36mbs"; |
d3f8cf4d2c2a
PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
334 |
output = experiment.Run (input); |
d3f8cf4d2c2a
PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
335 |
std::cout << " " << CalcPsr (output, input); |
d3f8cf4d2c2a
PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
336 |
|
d3f8cf4d2c2a
PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
337 |
input.txMode = "wifia-48mbs"; |
d3f8cf4d2c2a
PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
338 |
output = experiment.Run (input); |
d3f8cf4d2c2a
PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
339 |
std::cout << " " << CalcPsr (output, input); |
d3f8cf4d2c2a
PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
340 |
|
d3f8cf4d2c2a
PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
341 |
input.txMode = "wifia-54mbs"; |
d3f8cf4d2c2a
PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
342 |
output = experiment.Run (input); |
d3f8cf4d2c2a
PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
343 |
std::cout << " " << CalcPsr (output, input); |
d3f8cf4d2c2a
PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
344 |
|
d3f8cf4d2c2a
PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
345 |
std::cout << std::endl; |
d3f8cf4d2c2a
PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
346 |
} |
d3f8cf4d2c2a
PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
347 |
} |
d3f8cf4d2c2a
PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
348 |
|
d3f8cf4d2c2a
PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
349 |
static void PrintSizeVsRange (int argc, char *argv[]) |
d3f8cf4d2c2a
PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
350 |
{ |
3884
260d8acdbd01
change name of parameter
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3883
diff
changeset
|
351 |
double targetPsr = 0.05; |
3885
006d3dd58939
test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3884
diff
changeset
|
352 |
struct PsrExperiment::Input input; |
3881
d3f8cf4d2c2a
PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
353 |
CommandLine cmd; |
d3f8cf4d2c2a
PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
354 |
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
|
355 |
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
|
356 |
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
|
357 |
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
|
358 |
cmd.Parse (argc, argv); |
d3f8cf4d2c2a
PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
359 |
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
|
360 |
{ |
3883
091bb8fef41f
do a binary search for the range boundary.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3881
diff
changeset
|
361 |
double precision = 0.1; |
091bb8fef41f
do a binary search for the range boundary.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3881
diff
changeset
|
362 |
double low = 1.0; |
091bb8fef41f
do a binary search for the range boundary.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3881
diff
changeset
|
363 |
double high = 200.0; |
091bb8fef41f
do a binary search for the range boundary.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3881
diff
changeset
|
364 |
while (high - low > precision) |
3881
d3f8cf4d2c2a
PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
365 |
{ |
3883
091bb8fef41f
do a binary search for the range boundary.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3881
diff
changeset
|
366 |
double middle = low + (high - low) / 2; |
3881
d3f8cf4d2c2a
PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
367 |
struct PsrExperiment::Output output; |
d3f8cf4d2c2a
PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
368 |
PsrExperiment experiment; |
3883
091bb8fef41f
do a binary search for the range boundary.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3881
diff
changeset
|
369 |
input.distance = middle; |
3881
d3f8cf4d2c2a
PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
370 |
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
|
371 |
double psr = CalcPsr (output, input); |
3884
260d8acdbd01
change name of parameter
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3883
diff
changeset
|
372 |
if (psr >= targetPsr) |
3881
d3f8cf4d2c2a
PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
373 |
{ |
3883
091bb8fef41f
do a binary search for the range boundary.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3881
diff
changeset
|
374 |
low = middle; |
091bb8fef41f
do a binary search for the range boundary.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3881
diff
changeset
|
375 |
} |
091bb8fef41f
do a binary search for the range boundary.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3881
diff
changeset
|
376 |
else |
091bb8fef41f
do a binary search for the range boundary.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3881
diff
changeset
|
377 |
{ |
091bb8fef41f
do a binary search for the range boundary.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3881
diff
changeset
|
378 |
high = middle; |
3881
d3f8cf4d2c2a
PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
379 |
} |
d3f8cf4d2c2a
PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
380 |
} |
3883
091bb8fef41f
do a binary search for the range boundary.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3881
diff
changeset
|
381 |
std::cout << input.packetSize << " " << input.distance << std::endl; |
3881
d3f8cf4d2c2a
PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
382 |
} |
d3f8cf4d2c2a
PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
383 |
} |
d3f8cf4d2c2a
PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
384 |
|
3885
006d3dd58939
test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3884
diff
changeset
|
385 |
static void PrintPsrVsCollisionInterval (int argc, char *argv[]) |
006d3dd58939
test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3884
diff
changeset
|
386 |
{ |
006d3dd58939
test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3884
diff
changeset
|
387 |
CollisionExperiment::Input input; |
006d3dd58939
test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3884
diff
changeset
|
388 |
input.nPackets = 100; |
006d3dd58939
test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3884
diff
changeset
|
389 |
CommandLine cmd; |
006d3dd58939
test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3884
diff
changeset
|
390 |
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
|
391 |
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
|
392 |
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
|
393 |
for (uint32_t i = 0; i < 100; i += 1) |
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 |
CollisionExperiment experiment; |
006d3dd58939
test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3884
diff
changeset
|
396 |
CollisionExperiment::Output output; |
006d3dd58939
test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3884
diff
changeset
|
397 |
input.interval = MicroSeconds (i); |
006d3dd58939
test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3884
diff
changeset
|
398 |
output = experiment.Run (input); |
006d3dd58939
test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3884
diff
changeset
|
399 |
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
|
400 |
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
|
401 |
std::cout << i << " " << perA << " " << perB << std::endl; |
006d3dd58939
test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3884
diff
changeset
|
402 |
} |
006d3dd58939
test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3884
diff
changeset
|
403 |
for (uint32_t i = 100; i < 4000; i += 50) |
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 experiment; |
006d3dd58939
test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3884
diff
changeset
|
406 |
CollisionExperiment::Output output; |
006d3dd58939
test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3884
diff
changeset
|
407 |
input.interval = MicroSeconds (i); |
006d3dd58939
test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3884
diff
changeset
|
408 |
output = experiment.Run (input); |
006d3dd58939
test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3884
diff
changeset
|
409 |
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
|
410 |
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
|
411 |
std::cout << i << " " << perA << " " << perB << std::endl; |
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 |
} |
006d3dd58939
test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3884
diff
changeset
|
414 |
|
3881
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 |
|
d3f8cf4d2c2a
PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
417 |
int main (int argc, char *argv[]) |
d3f8cf4d2c2a
PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
418 |
{ |
d3f8cf4d2c2a
PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
419 |
if (argc <= 1) |
d3f8cf4d2c2a
PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
420 |
{ |
d3f8cf4d2c2a
PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
421 |
std::cout << "Available experiments: " |
d3f8cf4d2c2a
PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
422 |
<< "Psr " |
d3f8cf4d2c2a
PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
423 |
<< "SizeVsRange " |
d3f8cf4d2c2a
PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
424 |
<< "PsrVsDistance " |
3885
006d3dd58939
test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3884
diff
changeset
|
425 |
<< "PsrVsCollisionInterval " |
3881
d3f8cf4d2c2a
PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
426 |
<< std::endl; |
d3f8cf4d2c2a
PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
427 |
return -1; |
d3f8cf4d2c2a
PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
428 |
} |
d3f8cf4d2c2a
PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
429 |
std::string type = argv[1]; |
d3f8cf4d2c2a
PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
430 |
argc--; |
d3f8cf4d2c2a
PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
431 |
argv[1] = argv[0]; |
d3f8cf4d2c2a
PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
432 |
argv++; |
d3f8cf4d2c2a
PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
433 |
if (type == "Psr") |
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 |
PrintPsr (argc, 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 |
else if (type == "SizeVsRange") |
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 |
PrintSizeVsRange (argc, argv); |
d3f8cf4d2c2a
PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
440 |
} |
d3f8cf4d2c2a
PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
441 |
else if (type == "PsrVsDistance") |
d3f8cf4d2c2a
PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
442 |
{ |
d3f8cf4d2c2a
PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
443 |
PrintPsrVsDistance (argc, argv); |
d3f8cf4d2c2a
PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
444 |
} |
3885
006d3dd58939
test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3884
diff
changeset
|
445 |
else if (type == "PsrVsCollisionInterval") |
006d3dd58939
test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3884
diff
changeset
|
446 |
{ |
006d3dd58939
test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3884
diff
changeset
|
447 |
PrintPsrVsCollisionInterval (argc, argv); |
006d3dd58939
test PHY collisions
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3884
diff
changeset
|
448 |
} |
3881
d3f8cf4d2c2a
PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
449 |
|
d3f8cf4d2c2a
PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
450 |
return 0; |
d3f8cf4d2c2a
PHY-layer test scripts
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
451 |
} |