A Discrete-Event Network Simulator
Home
Tutorials ▼
English
Portuguese
Docs ▼
Wiki
Manual
Models
Develop ▼
API
Bugs
API
Main Page
Related Pages
Modules
Namespaces
Classes
Files
File List
File Members
All
Classes
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Properties
Friends
Macros
Groups
Pages
adhoc-aloha-ideal-phy-with-microwave-oven.cc
Go to the documentation of this file.
1
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
2
/*
3
* Copyright (c) 2010 CTTC
4
*
5
* This program is free software; you can redistribute it and/or modify
6
* it under the terms of the GNU General Public License version 2 as
7
* published by the Free Software Foundation;
8
*
9
* This program is distributed in the hope that it will be useful,
10
* but WITHOUT ANY WARRANTY; without even the implied warranty of
11
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
* GNU General Public License for more details.
13
*
14
* You should have received a copy of the GNU General Public License
15
* along with this program; if not, write to the Free Software
16
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17
*
18
* Author: Nicola Baldo <nbaldo@cttc.es>
19
*/
20
21
22
23
#include <iostream>
24
25
#include <ns3/core-module.h>
26
#include <ns3/network-module.h>
27
#include <ns3/spectrum-model-ism2400MHz-res1MHz.h>
28
#include <ns3/spectrum-model-300kHz-300GHz-log.h>
29
#include <ns3/wifi-spectrum-value-helper.h>
30
#include <ns3/multi-model-spectrum-channel.h>
31
#include <ns3/waveform-generator.h>
32
#include <ns3/spectrum-analyzer.h>
33
#include <ns3/log.h>
34
#include <string>
35
#include <ns3/friis-spectrum-propagation-loss.h>
36
#include <ns3/propagation-delay-model.h>
37
#include <ns3/mobility-module.h>
38
#include <ns3/spectrum-helper.h>
39
#include <ns3/applications-module.h>
40
#include <ns3/adhoc-aloha-noack-ideal-phy-helper.h>
41
#include <ns3/waveform-generator-helper.h>
42
#include <ns3/spectrum-analyzer-helper.h>
43
#include <ns3/non-communicating-net-device.h>
44
#include <ns3/microwave-oven-spectrum-value-helper.h>
45
46
NS_LOG_COMPONENT_DEFINE
(
"OfdmWithWaveformGenerator"
);
47
48
using namespace
ns3;
49
50
static
bool
g_verbose
=
false
;
51
52
53
void
54
PhyTxStartTrace
(std::string context,
Ptr<const Packet>
p)
55
{
56
if
(
g_verbose
)
57
{
58
std::cout << context <<
" PHY TX START p: "
<< p << std::endl;
59
}
60
}
61
62
63
void
64
PhyTxEndTrace
(std::string context,
Ptr<const Packet>
p)
65
{
66
if
(
g_verbose
)
67
{
68
std::cout << context <<
" PHY TX END p: "
<< p << std::endl;
69
}
70
}
71
72
void
73
PhyRxStartTrace
(std::string context,
Ptr<const Packet>
p)
74
{
75
if
(
g_verbose
)
76
{
77
std::cout << context <<
" PHY RX START p:"
<< p << std::endl;
78
}
79
}
80
81
void
82
PhyRxEndOkTrace
(std::string context,
Ptr<const Packet>
p)
83
{
84
if
(
g_verbose
)
85
{
86
std::cout << context <<
" PHY RX END OK p:"
<< p << std::endl;
87
}
88
}
89
90
void
91
PhyRxEndErrorTrace
(std::string context,
Ptr<const Packet>
p)
92
{
93
if
(
g_verbose
)
94
{
95
std::cout << context <<
" PHY RX END ERROR p:"
<< p << std::endl;
96
}
97
}
98
99
100
void
101
ReceivePacket
(
Ptr<Socket>
socket)
102
{
103
Ptr<Packet>
packet;
104
uint64_t bytes = 0;
105
while
((packet = socket->
Recv
()))
106
{
107
bytes += packet->
GetSize
();
108
}
109
if
(
g_verbose
)
110
{
111
std::cout <<
"SOCKET received "
<< bytes <<
" bytes"
<< std::endl;
112
}
113
}
114
115
Ptr<Socket>
116
SetupPacketReceive
(
Ptr<Node>
node)
117
{
118
TypeId
tid =
TypeId::LookupByName
(
"ns3::PacketSocketFactory"
);
119
Ptr<Socket>
sink =
Socket::CreateSocket
(node, tid);
120
sink->
Bind
();
121
sink->
SetRecvCallback
(
MakeCallback
(&
ReceivePacket
));
122
return
sink;
123
}
124
125
int
main
(
int
argc,
char
** argv)
126
{
127
CommandLine
cmd;
128
cmd.
AddValue
(
"verbose"
,
"Print trace information if true"
,
g_verbose
);
129
cmd.
Parse
(argc, argv);
130
131
NodeContainer
ofdmNodes;
132
NodeContainer
waveformGeneratorNodes;
133
NodeContainer
spectrumAnalyzerNodes;
134
NodeContainer
allNodes;
135
136
ofdmNodes.
Create
(2);
137
waveformGeneratorNodes.
Create
(1);
138
spectrumAnalyzerNodes.
Create
(1);
139
allNodes.
Add
(ofdmNodes);
140
allNodes.
Add
(waveformGeneratorNodes);
141
allNodes.
Add
(spectrumAnalyzerNodes);
142
143
MobilityHelper
mobility;
144
Ptr<ListPositionAllocator>
nodePositionList = CreateObject<ListPositionAllocator> ();
145
nodePositionList->
Add
(
Vector
(5.0, 0.0, 0.0));
// TX node
146
nodePositionList->
Add
(
Vector
(0.0, 0.0, 0.0));
// RX node
147
nodePositionList->
Add
(
Vector
(10.0, 0.0, 0.0));
// Microwave Oven
148
nodePositionList->
Add
(
Vector
(0.0, 0.0, 0.0));
// Spectrum Analyzer
149
mobility.
SetPositionAllocator
(nodePositionList);
150
mobility.
SetMobilityModel
(
"ns3::ConstantPositionMobilityModel"
);
151
152
mobility.
Install
(allNodes);
153
154
155
SpectrumChannelHelper
channelHelper =
SpectrumChannelHelper::Default
();
156
channelHelper.
SetChannel
(
"ns3::MultiModelSpectrumChannel"
);
157
Ptr<SpectrumChannel>
channel = channelHelper.
Create
();
158
159
161
// Configure ofdm nodes
163
164
WifiSpectrumValue5MhzFactory
sf;
165
166
double
txPower = 0.1;
// Watts
167
uint32_t channelNumber = 2;
168
Ptr<SpectrumValue>
txPsd = sf.
CreateTxPowerSpectralDensity
(txPower, channelNumber);
169
170
// for the noise, we use the Power Spectral Density of thermal noise
171
// at room temperature. The value of the PSD will be constant over the band of interest.
172
const
double
k = 1.381e-23;
//Boltzmann's constant
173
const
double
T = 290;
// temperature in Kelvin
174
double
noisePsdValue = k * T;
// watts per hertz
175
Ptr<SpectrumValue>
noisePsd = sf.
CreateConstant
(noisePsdValue);
176
177
178
AdhocAlohaNoackIdealPhyHelper
adhocAlohaOfdmHelper;
179
adhocAlohaOfdmHelper.
SetChannel
(channel);
180
adhocAlohaOfdmHelper.
SetTxPowerSpectralDensity
(txPsd);
181
adhocAlohaOfdmHelper.
SetNoisePowerSpectralDensity
(noisePsd);
182
adhocAlohaOfdmHelper.
SetPhyAttribute
(
"Rate"
,
DataRateValue
(
DataRate
(
"1Mbps"
)));
183
NetDeviceContainer
ofdmDevices = adhocAlohaOfdmHelper.
Install
(ofdmNodes);
184
185
PacketSocketHelper
packetSocket;
186
packetSocket.
Install
(ofdmNodes);
187
188
PacketSocketAddress
socket;
189
socket.
SetSingleDevice
(ofdmDevices.
Get
(0)->
GetIfIndex
());
190
socket.
SetPhysicalAddress
(ofdmDevices.
Get
(1)->
GetAddress
());
191
socket.
SetProtocol
(1);
192
193
OnOffHelper
onoff (
"ns3::PacketSocketFactory"
,
Address
(socket));
194
onoff.
SetAttribute
(
"OnTime"
,
StringValue
(
"ns3::ExponentialRandomVariable[Mean=0.4]"
));
195
onoff.
SetAttribute
(
"OffTime"
,
StringValue
(
"ns3::ExponentialRandomVariable[Mean=0.1]"
));
196
onoff.
SetAttribute
(
"DataRate"
,
DataRateValue
(
DataRate
(
"0.4Mbps"
)));
197
onoff.
SetAttribute
(
"PacketSize"
,
UintegerValue
(1500));
198
199
ApplicationContainer
apps = onoff.
Install
(ofdmNodes.
Get
(0));
200
apps.
Start
(
Seconds
(0.0));
201
apps.
Stop
(
Seconds
(2));
202
203
Ptr<Socket>
recvSink =
SetupPacketReceive
(ofdmNodes.
Get
(1));
204
205
206
207
208
210
// Configure waveform generator
212
213
Ptr<SpectrumValue>
mwoPsd =
MicrowaveOvenSpectrumValueHelper::CreatePowerSpectralDensityMwo1
();
214
NS_LOG_INFO
(
"mwoPsd : "
<< *mwoPsd);
215
216
WaveformGeneratorHelper
waveformGeneratorHelper;
217
waveformGeneratorHelper.
SetChannel
(channel);
218
waveformGeneratorHelper.
SetTxPowerSpectralDensity
(mwoPsd);
219
220
waveformGeneratorHelper.
SetPhyAttribute
(
"Period"
,
TimeValue
(
Seconds
(1.0 / 60)));
// corresponds to 60 Hz
221
waveformGeneratorHelper.
SetPhyAttribute
(
"DutyCycle"
,
DoubleValue
(0.5));
222
NetDeviceContainer
waveformGeneratorDevices = waveformGeneratorHelper.
Install
(waveformGeneratorNodes);
223
224
Simulator::Schedule
(
Seconds
(0.1), &
WaveformGenerator::Start
,
225
waveformGeneratorDevices.
Get
(0)->
GetObject
<
NonCommunicatingNetDevice
> ()->GetPhy ()->
GetObject
<
WaveformGenerator
> ());
226
227
228
230
// Configure spectrum analyzer
232
233
234
SpectrumAnalyzerHelper
spectrumAnalyzerHelper;
235
spectrumAnalyzerHelper.
SetChannel
(channel);
236
spectrumAnalyzerHelper.
SetRxSpectrumModel
(
SpectrumModelIsm2400MhzRes1Mhz
);
237
spectrumAnalyzerHelper.
SetPhyAttribute
(
"Resolution"
,
TimeValue
(
MilliSeconds
(2)));
238
spectrumAnalyzerHelper.
SetPhyAttribute
(
"NoisePowerSpectralDensity"
,
DoubleValue
(1e-15));
// -120 dBm/Hz
239
spectrumAnalyzerHelper.
EnableAsciiAll
(
"spectrum-analyzer-output"
);
240
NetDeviceContainer
spectrumAnalyzerDevices = spectrumAnalyzerHelper.
Install
(spectrumAnalyzerNodes);
241
242
243
244
245
246
247
Config::Connect
(
"/NodeList/*/DeviceList/*/Phy/TxStart"
,
MakeCallback
(&
PhyTxStartTrace
));
248
Config::Connect
(
"/NodeList/*/DeviceList/*/Phy/TxEnd"
,
MakeCallback
(&
PhyTxEndTrace
));
249
Config::Connect
(
"/NodeList/*/DeviceList/*/Phy/RxStart"
,
MakeCallback
(&
PhyRxStartTrace
));
250
Config::Connect
(
"/NodeList/*/DeviceList/*/Phy/RxEndOk"
,
MakeCallback
(&
PhyRxEndOkTrace
));
251
Config::Connect
(
"/NodeList/*/DeviceList/*/Phy/RxEndError"
,
MakeCallback
(&
PhyRxEndErrorTrace
));
252
253
254
255
256
Simulator::Stop
(
Seconds
(0.3));
257
258
Simulator::Run
();
259
260
Simulator::Destroy
();
261
262
}
263
264
src
spectrum
examples
adhoc-aloha-ideal-phy-with-microwave-oven.cc
Generated on Fri Dec 21 2012 19:00:45 for ns-3 by
1.8.1.2