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