src/lte/helper/radio-environment-map-helper.cc
author Marco Miozzo <marco.miozzo@cttc.es>
Mon, 03 Jun 2013 17:01:52 +0200
changeset 10080 1b36e2276e15
parent 8732 0ff7e5c7fb18
child 10081 f0879d02aafd
permissions -rw-r--r--
Move from BuildingsMobilityModel to BuildingMobilityInfo source, tests and examples
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
8560
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
     1
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
     2
/*
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
     3
 * Copyright (c) 2012 CTTC
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
     4
 *
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
     5
 * This program is free software; you can redistribute it and/or modify
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
     6
 * it under the terms of the GNU General Public License version 2 as
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
     7
 * published by the Free Software Foundation;
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
     8
 *
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
     9
 * This program is distributed in the hope that it will be useful,
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    10
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    11
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    12
 * GNU General Public License for more details.
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    13
 *
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    14
 * You should have received a copy of the GNU General Public License
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    15
 * along with this program; if not, write to the Free Software
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    16
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    17
 *
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    18
 * Author: Nicola Baldo <nbaldo@cttc.es>
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    19
 */
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    20
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    21
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    22
#include "radio-environment-map-helper.h"
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    23
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    24
#include <ns3/abort.h>
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    25
#include <ns3/log.h>
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    26
#include <ns3/double.h>
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    27
#include <ns3/uinteger.h>
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    28
#include <ns3/string.h>
8578
50484f99be63 REM helper deactivates PHYs instead of removing, and exit when done by default
Nicola Baldo <nbaldo@cttc.es>
parents: 8567
diff changeset
    29
#include <ns3/boolean.h>
8560
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    30
#include <ns3/spectrum-channel.h>
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    31
#include <ns3/config.h>
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    32
#include <ns3/rem-spectrum-phy.h>
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    33
#include <ns3/buildings-mobility-model.h>
10080
1b36e2276e15 Move from BuildingsMobilityModel to BuildingMobilityInfo source, tests and examples
Marco Miozzo <marco.miozzo@cttc.es>
parents: 8732
diff changeset
    34
#include <ns3/constant-position-mobility-model.h>
8560
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    35
#include <ns3/simulator.h>
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    36
#include <ns3/node.h>
8609
db24d2db55d4 revised REM implementation
Nicola Baldo <nbaldo@cttc.es>
parents: 8606
diff changeset
    37
#include <ns3/buildings-helper.h>
8693
478733ab87b7 MultiModelSpectrumChannel working with LTE
Nicola Baldo <nbaldo@cttc.es>
parents: 8688
diff changeset
    38
#include <ns3/lte-spectrum-value-helper.h>
8560
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    39
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    40
#include <fstream>
8609
db24d2db55d4 revised REM implementation
Nicola Baldo <nbaldo@cttc.es>
parents: 8606
diff changeset
    41
#include <limits>
8560
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    42
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    43
NS_LOG_COMPONENT_DEFINE ("RadioEnvironmentMapHelper");
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    44
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    45
namespace ns3 {
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    46
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    47
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    48
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    49
NS_OBJECT_ENSURE_REGISTERED (RadioEnvironmentMapHelper);
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    50
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    51
RadioEnvironmentMapHelper::RadioEnvironmentMapHelper ()
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    52
{
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    53
}
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    54
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    55
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    56
RadioEnvironmentMapHelper::~RadioEnvironmentMapHelper ()
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    57
{
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    58
}
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    59
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    60
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    61
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    62
void
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    63
RadioEnvironmentMapHelper::DoDispose ()
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    64
{
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    65
  NS_LOG_FUNCTION (this);
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    66
}
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    67
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    68
TypeId
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    69
RadioEnvironmentMapHelper::GetTypeId (void)
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    70
{
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    71
  NS_LOG_FUNCTION ("RadioEnvironmentMapHelper::GetTypeId");
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    72
  static TypeId tid = TypeId ("ns3::RadioEnvironmentMapHelper")
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    73
    .SetParent<Object> ()
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    74
    .AddConstructor<RadioEnvironmentMapHelper> ()
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    75
    .AddAttribute ("ChannelPath", "The path to the channel for which the Radio Environment Map is to be generated",
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    76
                   StringValue ("/ChannelList/0"),
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    77
                   MakeStringAccessor (&RadioEnvironmentMapHelper::m_channelPath),
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    78
                   MakeStringChecker ())
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    79
    .AddAttribute ("OutputFile", "the filename to which the Radio Environment Map is saved",
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    80
                   StringValue ("rem.out"),
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    81
                   MakeStringAccessor (&RadioEnvironmentMapHelper::m_outputFile),
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    82
                   MakeStringChecker ())
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    83
    .AddAttribute ("XMin", "The min x coordinate of the map.",
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    84
                   DoubleValue (0.0),
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    85
                   MakeDoubleAccessor (&RadioEnvironmentMapHelper::m_xMin),
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    86
                   MakeDoubleChecker<double> ())
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    87
    .AddAttribute ("YMin", "The min y coordinate of the map.",
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    88
                   DoubleValue (0.0),
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    89
                   MakeDoubleAccessor (&RadioEnvironmentMapHelper::m_yMin),
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    90
                   MakeDoubleChecker<double> ())
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    91
   .AddAttribute ("XMax", "The max x coordinate of the map.",
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    92
                   DoubleValue (1.0),
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    93
                   MakeDoubleAccessor (&RadioEnvironmentMapHelper::m_xMax),
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    94
                   MakeDoubleChecker<double> ())
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    95
    .AddAttribute ("YMax", "The max y coordinate of the map.",
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    96
                   DoubleValue (1.0),
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    97
                   MakeDoubleAccessor (&RadioEnvironmentMapHelper::m_yMax),
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    98
                   MakeDoubleChecker<double> ())
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    99
   .AddAttribute ("XRes", "The resolution (number of points) of the map along the x axis.",
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   100
                   UintegerValue (100),
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   101
                   MakeUintegerAccessor (&RadioEnvironmentMapHelper::m_xRes),
8609
db24d2db55d4 revised REM implementation
Nicola Baldo <nbaldo@cttc.es>
parents: 8606
diff changeset
   102
                  MakeUintegerChecker<uint32_t> (2,std::numeric_limits<uint16_t>::max ()))
8560
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   103
    .AddAttribute ("YRes", "The resolution (number of points) of the map along the y axis.",
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   104
                   UintegerValue (100),
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   105
                   MakeUintegerAccessor (&RadioEnvironmentMapHelper::m_yRes),
8688
b6abf3b8d4f5 memory-efficient RadioEnvironmentMapHelper
Nicola Baldo <nbaldo@cttc.es>
parents: 8609
diff changeset
   106
                   MakeUintegerChecker<uint16_t> (2,std::numeric_limits<uint16_t>::max ()))
8560
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   107
    .AddAttribute ("Z", "The value of the z coordinate for which the map is to be generated",
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   108
		   DoubleValue (0.0),
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   109
                   MakeDoubleAccessor (&RadioEnvironmentMapHelper::m_z),
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   110
                   MakeDoubleChecker<double> ())
8609
db24d2db55d4 revised REM implementation
Nicola Baldo <nbaldo@cttc.es>
parents: 8606
diff changeset
   111
    .AddAttribute ("StopWhenDone", "If true, Simulator::Stop () will be called as soon as the REM has been generated",
8578
50484f99be63 REM helper deactivates PHYs instead of removing, and exit when done by default
Nicola Baldo <nbaldo@cttc.es>
parents: 8567
diff changeset
   112
		   BooleanValue (true),
8609
db24d2db55d4 revised REM implementation
Nicola Baldo <nbaldo@cttc.es>
parents: 8606
diff changeset
   113
                   MakeBooleanAccessor (&RadioEnvironmentMapHelper::m_stopWhenDone),
8578
50484f99be63 REM helper deactivates PHYs instead of removing, and exit when done by default
Nicola Baldo <nbaldo@cttc.es>
parents: 8567
diff changeset
   114
                   MakeBooleanChecker ())
8609
db24d2db55d4 revised REM implementation
Nicola Baldo <nbaldo@cttc.es>
parents: 8606
diff changeset
   115
    .AddAttribute ("NoisePower",
db24d2db55d4 revised REM implementation
Nicola Baldo <nbaldo@cttc.es>
parents: 8606
diff changeset
   116
                   "the power of the measuring instrument noise, in Watts. Default to a kT of -174 dBm with a noise figure of 9 dB and a bandwidth of 25 LTE Resource Blocks",
db24d2db55d4 revised REM implementation
Nicola Baldo <nbaldo@cttc.es>
parents: 8606
diff changeset
   117
                   DoubleValue (1.4230e-10),
db24d2db55d4 revised REM implementation
Nicola Baldo <nbaldo@cttc.es>
parents: 8606
diff changeset
   118
                   MakeDoubleAccessor (&RadioEnvironmentMapHelper::m_noisePower),
db24d2db55d4 revised REM implementation
Nicola Baldo <nbaldo@cttc.es>
parents: 8606
diff changeset
   119
                   MakeDoubleChecker<double> ())
8688
b6abf3b8d4f5 memory-efficient RadioEnvironmentMapHelper
Nicola Baldo <nbaldo@cttc.es>
parents: 8609
diff changeset
   120
    .AddAttribute ("MaxPointsPerIteration", "Maximum number of REM points to be calculated per iteration. Every point consumes approximately 5KB of memory.",
b6abf3b8d4f5 memory-efficient RadioEnvironmentMapHelper
Nicola Baldo <nbaldo@cttc.es>
parents: 8609
diff changeset
   121
                   UintegerValue (20000),
b6abf3b8d4f5 memory-efficient RadioEnvironmentMapHelper
Nicola Baldo <nbaldo@cttc.es>
parents: 8609
diff changeset
   122
                   MakeUintegerAccessor (&RadioEnvironmentMapHelper::m_maxPointsPerIteration),
b6abf3b8d4f5 memory-efficient RadioEnvironmentMapHelper
Nicola Baldo <nbaldo@cttc.es>
parents: 8609
diff changeset
   123
                   MakeUintegerChecker<uint32_t> (1,std::numeric_limits<uint32_t>::max ()))
8693
478733ab87b7 MultiModelSpectrumChannel working with LTE
Nicola Baldo <nbaldo@cttc.es>
parents: 8688
diff changeset
   124
    .AddAttribute ("Earfcn",
478733ab87b7 MultiModelSpectrumChannel working with LTE
Nicola Baldo <nbaldo@cttc.es>
parents: 8688
diff changeset
   125
                   "E-UTRA Absolute Radio Frequency Channel Number (EARFCN) "
478733ab87b7 MultiModelSpectrumChannel working with LTE
Nicola Baldo <nbaldo@cttc.es>
parents: 8688
diff changeset
   126
                   "as per 3GPP 36.101 Section 5.7.3. ",
478733ab87b7 MultiModelSpectrumChannel working with LTE
Nicola Baldo <nbaldo@cttc.es>
parents: 8688
diff changeset
   127
                   UintegerValue (100),
478733ab87b7 MultiModelSpectrumChannel working with LTE
Nicola Baldo <nbaldo@cttc.es>
parents: 8688
diff changeset
   128
                   MakeUintegerAccessor (&RadioEnvironmentMapHelper::m_earfcn),
478733ab87b7 MultiModelSpectrumChannel working with LTE
Nicola Baldo <nbaldo@cttc.es>
parents: 8688
diff changeset
   129
                   MakeUintegerChecker<uint16_t> ())
478733ab87b7 MultiModelSpectrumChannel working with LTE
Nicola Baldo <nbaldo@cttc.es>
parents: 8688
diff changeset
   130
    .AddAttribute ("Bandwidth",
478733ab87b7 MultiModelSpectrumChannel working with LTE
Nicola Baldo <nbaldo@cttc.es>
parents: 8688
diff changeset
   131
                   "Transmission Bandwidth Configuration (in number of RBs) over which the SINR will be calculated",
478733ab87b7 MultiModelSpectrumChannel working with LTE
Nicola Baldo <nbaldo@cttc.es>
parents: 8688
diff changeset
   132
                   UintegerValue (25),
478733ab87b7 MultiModelSpectrumChannel working with LTE
Nicola Baldo <nbaldo@cttc.es>
parents: 8688
diff changeset
   133
                   MakeUintegerAccessor (&RadioEnvironmentMapHelper::SetBandwidth, 
478733ab87b7 MultiModelSpectrumChannel working with LTE
Nicola Baldo <nbaldo@cttc.es>
parents: 8688
diff changeset
   134
                                         &RadioEnvironmentMapHelper::GetBandwidth),
478733ab87b7 MultiModelSpectrumChannel working with LTE
Nicola Baldo <nbaldo@cttc.es>
parents: 8688
diff changeset
   135
                   MakeUintegerChecker<uint16_t> ())
8560
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   136
  ;
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   137
  return tid;
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   138
}
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   139
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   140
8693
478733ab87b7 MultiModelSpectrumChannel working with LTE
Nicola Baldo <nbaldo@cttc.es>
parents: 8688
diff changeset
   141
uint8_t 
478733ab87b7 MultiModelSpectrumChannel working with LTE
Nicola Baldo <nbaldo@cttc.es>
parents: 8688
diff changeset
   142
RadioEnvironmentMapHelper::GetBandwidth () const
478733ab87b7 MultiModelSpectrumChannel working with LTE
Nicola Baldo <nbaldo@cttc.es>
parents: 8688
diff changeset
   143
{
478733ab87b7 MultiModelSpectrumChannel working with LTE
Nicola Baldo <nbaldo@cttc.es>
parents: 8688
diff changeset
   144
  return m_bandwidth;
478733ab87b7 MultiModelSpectrumChannel working with LTE
Nicola Baldo <nbaldo@cttc.es>
parents: 8688
diff changeset
   145
}
478733ab87b7 MultiModelSpectrumChannel working with LTE
Nicola Baldo <nbaldo@cttc.es>
parents: 8688
diff changeset
   146
478733ab87b7 MultiModelSpectrumChannel working with LTE
Nicola Baldo <nbaldo@cttc.es>
parents: 8688
diff changeset
   147
void 
478733ab87b7 MultiModelSpectrumChannel working with LTE
Nicola Baldo <nbaldo@cttc.es>
parents: 8688
diff changeset
   148
RadioEnvironmentMapHelper::SetBandwidth (uint8_t bw)
478733ab87b7 MultiModelSpectrumChannel working with LTE
Nicola Baldo <nbaldo@cttc.es>
parents: 8688
diff changeset
   149
{
478733ab87b7 MultiModelSpectrumChannel working with LTE
Nicola Baldo <nbaldo@cttc.es>
parents: 8688
diff changeset
   150
  switch (bw)
478733ab87b7 MultiModelSpectrumChannel working with LTE
Nicola Baldo <nbaldo@cttc.es>
parents: 8688
diff changeset
   151
    { 
478733ab87b7 MultiModelSpectrumChannel working with LTE
Nicola Baldo <nbaldo@cttc.es>
parents: 8688
diff changeset
   152
    case 6:
478733ab87b7 MultiModelSpectrumChannel working with LTE
Nicola Baldo <nbaldo@cttc.es>
parents: 8688
diff changeset
   153
    case 15:
478733ab87b7 MultiModelSpectrumChannel working with LTE
Nicola Baldo <nbaldo@cttc.es>
parents: 8688
diff changeset
   154
    case 25:
478733ab87b7 MultiModelSpectrumChannel working with LTE
Nicola Baldo <nbaldo@cttc.es>
parents: 8688
diff changeset
   155
    case 50:
478733ab87b7 MultiModelSpectrumChannel working with LTE
Nicola Baldo <nbaldo@cttc.es>
parents: 8688
diff changeset
   156
    case 75:
478733ab87b7 MultiModelSpectrumChannel working with LTE
Nicola Baldo <nbaldo@cttc.es>
parents: 8688
diff changeset
   157
    case 100:
478733ab87b7 MultiModelSpectrumChannel working with LTE
Nicola Baldo <nbaldo@cttc.es>
parents: 8688
diff changeset
   158
      m_bandwidth = bw;
478733ab87b7 MultiModelSpectrumChannel working with LTE
Nicola Baldo <nbaldo@cttc.es>
parents: 8688
diff changeset
   159
      break;
478733ab87b7 MultiModelSpectrumChannel working with LTE
Nicola Baldo <nbaldo@cttc.es>
parents: 8688
diff changeset
   160
478733ab87b7 MultiModelSpectrumChannel working with LTE
Nicola Baldo <nbaldo@cttc.es>
parents: 8688
diff changeset
   161
    default:
478733ab87b7 MultiModelSpectrumChannel working with LTE
Nicola Baldo <nbaldo@cttc.es>
parents: 8688
diff changeset
   162
      NS_FATAL_ERROR ("invalid bandwidth value " << (uint16_t) bw);
478733ab87b7 MultiModelSpectrumChannel working with LTE
Nicola Baldo <nbaldo@cttc.es>
parents: 8688
diff changeset
   163
      break;
478733ab87b7 MultiModelSpectrumChannel working with LTE
Nicola Baldo <nbaldo@cttc.es>
parents: 8688
diff changeset
   164
    }
478733ab87b7 MultiModelSpectrumChannel working with LTE
Nicola Baldo <nbaldo@cttc.es>
parents: 8688
diff changeset
   165
}
478733ab87b7 MultiModelSpectrumChannel working with LTE
Nicola Baldo <nbaldo@cttc.es>
parents: 8688
diff changeset
   166
8560
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   167
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   168
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   169
void 
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   170
RadioEnvironmentMapHelper::Install ()
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   171
{
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   172
  NS_LOG_FUNCTION (this);
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   173
  if (!m_rem.empty ())
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   174
    {
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   175
      NS_FATAL_ERROR ("only one REM supported per instance of RadioEnvironmentMapHelper");
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   176
    }
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   177
  Config::MatchContainer match = Config::LookupMatches (m_channelPath);
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   178
  if (match.GetN () != 1)
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   179
    {
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   180
      NS_FATAL_ERROR ("Lookup " << m_channelPath << " should have exactly one match");
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   181
    }
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   182
  m_channel = match.Get (0)->GetObject<SpectrumChannel> ();
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   183
  NS_ABORT_MSG_IF (m_channel == 0, "object at " << m_channelPath << "is not of type SpectrumChannel");
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   184
8688
b6abf3b8d4f5 memory-efficient RadioEnvironmentMapHelper
Nicola Baldo <nbaldo@cttc.es>
parents: 8609
diff changeset
   185
  m_outFile.open (m_outputFile.c_str ());
b6abf3b8d4f5 memory-efficient RadioEnvironmentMapHelper
Nicola Baldo <nbaldo@cttc.es>
parents: 8609
diff changeset
   186
  if (!m_outFile.is_open ())
8560
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   187
    {
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   188
      NS_FATAL_ERROR ("Can't open file " << (m_outputFile));
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   189
      return;
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   190
    }
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   191
  
8732
0ff7e5c7fb18 fixed RadioEnvironmentMapHelper broken after changeset 74de12409ee5 (m_macChTtiDelay)
Nicola Baldo <nbaldo@cttc.es>
parents: 8693
diff changeset
   192
  Simulator::Schedule (Seconds (0.0026), 
8688
b6abf3b8d4f5 memory-efficient RadioEnvironmentMapHelper
Nicola Baldo <nbaldo@cttc.es>
parents: 8609
diff changeset
   193
                       &RadioEnvironmentMapHelper::DelayedInstall,
b6abf3b8d4f5 memory-efficient RadioEnvironmentMapHelper
Nicola Baldo <nbaldo@cttc.es>
parents: 8609
diff changeset
   194
                                   this);
b6abf3b8d4f5 memory-efficient RadioEnvironmentMapHelper
Nicola Baldo <nbaldo@cttc.es>
parents: 8609
diff changeset
   195
}
b6abf3b8d4f5 memory-efficient RadioEnvironmentMapHelper
Nicola Baldo <nbaldo@cttc.es>
parents: 8609
diff changeset
   196
b6abf3b8d4f5 memory-efficient RadioEnvironmentMapHelper
Nicola Baldo <nbaldo@cttc.es>
parents: 8609
diff changeset
   197
b6abf3b8d4f5 memory-efficient RadioEnvironmentMapHelper
Nicola Baldo <nbaldo@cttc.es>
parents: 8609
diff changeset
   198
void 
b6abf3b8d4f5 memory-efficient RadioEnvironmentMapHelper
Nicola Baldo <nbaldo@cttc.es>
parents: 8609
diff changeset
   199
RadioEnvironmentMapHelper::DelayedInstall ()
b6abf3b8d4f5 memory-efficient RadioEnvironmentMapHelper
Nicola Baldo <nbaldo@cttc.es>
parents: 8609
diff changeset
   200
{
b6abf3b8d4f5 memory-efficient RadioEnvironmentMapHelper
Nicola Baldo <nbaldo@cttc.es>
parents: 8609
diff changeset
   201
  NS_LOG_FUNCTION (this);
b6abf3b8d4f5 memory-efficient RadioEnvironmentMapHelper
Nicola Baldo <nbaldo@cttc.es>
parents: 8609
diff changeset
   202
  m_xStep = (m_xMax - m_xMin)/(m_xRes-1);
b6abf3b8d4f5 memory-efficient RadioEnvironmentMapHelper
Nicola Baldo <nbaldo@cttc.es>
parents: 8609
diff changeset
   203
  m_yStep = (m_yMax - m_yMin)/(m_yRes-1);
b6abf3b8d4f5 memory-efficient RadioEnvironmentMapHelper
Nicola Baldo <nbaldo@cttc.es>
parents: 8609
diff changeset
   204
  
b6abf3b8d4f5 memory-efficient RadioEnvironmentMapHelper
Nicola Baldo <nbaldo@cttc.es>
parents: 8609
diff changeset
   205
  if ((double)m_xRes * (double) m_yRes < (double) m_maxPointsPerIteration)
b6abf3b8d4f5 memory-efficient RadioEnvironmentMapHelper
Nicola Baldo <nbaldo@cttc.es>
parents: 8609
diff changeset
   206
    {
b6abf3b8d4f5 memory-efficient RadioEnvironmentMapHelper
Nicola Baldo <nbaldo@cttc.es>
parents: 8609
diff changeset
   207
      m_maxPointsPerIteration = m_xRes * m_yRes;
b6abf3b8d4f5 memory-efficient RadioEnvironmentMapHelper
Nicola Baldo <nbaldo@cttc.es>
parents: 8609
diff changeset
   208
    }
b6abf3b8d4f5 memory-efficient RadioEnvironmentMapHelper
Nicola Baldo <nbaldo@cttc.es>
parents: 8609
diff changeset
   209
  
b6abf3b8d4f5 memory-efficient RadioEnvironmentMapHelper
Nicola Baldo <nbaldo@cttc.es>
parents: 8609
diff changeset
   210
  for (uint32_t i = 0; i < m_maxPointsPerIteration; ++i)
b6abf3b8d4f5 memory-efficient RadioEnvironmentMapHelper
Nicola Baldo <nbaldo@cttc.es>
parents: 8609
diff changeset
   211
    {
b6abf3b8d4f5 memory-efficient RadioEnvironmentMapHelper
Nicola Baldo <nbaldo@cttc.es>
parents: 8609
diff changeset
   212
      RemPoint p;
b6abf3b8d4f5 memory-efficient RadioEnvironmentMapHelper
Nicola Baldo <nbaldo@cttc.es>
parents: 8609
diff changeset
   213
      p.phy = CreateObject<RemSpectrumPhy> ();
10080
1b36e2276e15 Move from BuildingsMobilityModel to BuildingMobilityInfo source, tests and examples
Marco Miozzo <marco.miozzo@cttc.es>
parents: 8732
diff changeset
   214
      p.bmm = CreateObject<ConstantPositionMobilityModel> ();
1b36e2276e15 Move from BuildingsMobilityModel to BuildingMobilityInfo source, tests and examples
Marco Miozzo <marco.miozzo@cttc.es>
parents: 8732
diff changeset
   215
      Ptr<MobilityBuildingInfo> buildingInfo = CreateObject<MobilityBuildingInfo> ();
1b36e2276e15 Move from BuildingsMobilityModel to BuildingMobilityInfo source, tests and examples
Marco Miozzo <marco.miozzo@cttc.es>
parents: 8732
diff changeset
   216
      p.bmm->AggregateObject (buildingInfo); // operation usually done by BuildingsHelper::Install
8693
478733ab87b7 MultiModelSpectrumChannel working with LTE
Nicola Baldo <nbaldo@cttc.es>
parents: 8688
diff changeset
   217
      p.phy->SetRxSpectrumModel (LteSpectrumValueHelper::GetSpectrumModel (m_earfcn, m_bandwidth));
10080
1b36e2276e15 Move from BuildingsMobilityModel to BuildingMobilityInfo source, tests and examples
Marco Miozzo <marco.miozzo@cttc.es>
parents: 8732
diff changeset
   218
      p.phy->SetMobility (p.bmm);
8688
b6abf3b8d4f5 memory-efficient RadioEnvironmentMapHelper
Nicola Baldo <nbaldo@cttc.es>
parents: 8609
diff changeset
   219
      m_channel->AddRx (p.phy);
b6abf3b8d4f5 memory-efficient RadioEnvironmentMapHelper
Nicola Baldo <nbaldo@cttc.es>
parents: 8609
diff changeset
   220
      m_rem.push_back (p);
b6abf3b8d4f5 memory-efficient RadioEnvironmentMapHelper
Nicola Baldo <nbaldo@cttc.es>
parents: 8609
diff changeset
   221
    }
b6abf3b8d4f5 memory-efficient RadioEnvironmentMapHelper
Nicola Baldo <nbaldo@cttc.es>
parents: 8609
diff changeset
   222
b6abf3b8d4f5 memory-efficient RadioEnvironmentMapHelper
Nicola Baldo <nbaldo@cttc.es>
parents: 8609
diff changeset
   223
  double remIterationStartTime = 0.0001;
b6abf3b8d4f5 memory-efficient RadioEnvironmentMapHelper
Nicola Baldo <nbaldo@cttc.es>
parents: 8609
diff changeset
   224
  double xMinNext = m_xMin;
b6abf3b8d4f5 memory-efficient RadioEnvironmentMapHelper
Nicola Baldo <nbaldo@cttc.es>
parents: 8609
diff changeset
   225
  double yMinNext = m_yMin;
b6abf3b8d4f5 memory-efficient RadioEnvironmentMapHelper
Nicola Baldo <nbaldo@cttc.es>
parents: 8609
diff changeset
   226
  uint32_t numPointsCurrentIteration = 0;
b6abf3b8d4f5 memory-efficient RadioEnvironmentMapHelper
Nicola Baldo <nbaldo@cttc.es>
parents: 8609
diff changeset
   227
  bool justScheduled = false;
b6abf3b8d4f5 memory-efficient RadioEnvironmentMapHelper
Nicola Baldo <nbaldo@cttc.es>
parents: 8609
diff changeset
   228
  for (double x = m_xMin; x < m_xMax + 0.5*m_xStep; x += m_xStep)
b6abf3b8d4f5 memory-efficient RadioEnvironmentMapHelper
Nicola Baldo <nbaldo@cttc.es>
parents: 8609
diff changeset
   229
    {
b6abf3b8d4f5 memory-efficient RadioEnvironmentMapHelper
Nicola Baldo <nbaldo@cttc.es>
parents: 8609
diff changeset
   230
      for (double y = m_yMin; y < m_yMax + 0.5*m_yStep ; y += m_yStep)
b6abf3b8d4f5 memory-efficient RadioEnvironmentMapHelper
Nicola Baldo <nbaldo@cttc.es>
parents: 8609
diff changeset
   231
        {
b6abf3b8d4f5 memory-efficient RadioEnvironmentMapHelper
Nicola Baldo <nbaldo@cttc.es>
parents: 8609
diff changeset
   232
          if (justScheduled)
b6abf3b8d4f5 memory-efficient RadioEnvironmentMapHelper
Nicola Baldo <nbaldo@cttc.es>
parents: 8609
diff changeset
   233
            {
b6abf3b8d4f5 memory-efficient RadioEnvironmentMapHelper
Nicola Baldo <nbaldo@cttc.es>
parents: 8609
diff changeset
   234
              xMinNext = x;
b6abf3b8d4f5 memory-efficient RadioEnvironmentMapHelper
Nicola Baldo <nbaldo@cttc.es>
parents: 8609
diff changeset
   235
              yMinNext = y;
b6abf3b8d4f5 memory-efficient RadioEnvironmentMapHelper
Nicola Baldo <nbaldo@cttc.es>
parents: 8609
diff changeset
   236
              justScheduled = false;
b6abf3b8d4f5 memory-efficient RadioEnvironmentMapHelper
Nicola Baldo <nbaldo@cttc.es>
parents: 8609
diff changeset
   237
            }
b6abf3b8d4f5 memory-efficient RadioEnvironmentMapHelper
Nicola Baldo <nbaldo@cttc.es>
parents: 8609
diff changeset
   238
          
b6abf3b8d4f5 memory-efficient RadioEnvironmentMapHelper
Nicola Baldo <nbaldo@cttc.es>
parents: 8609
diff changeset
   239
          ++numPointsCurrentIteration;
b6abf3b8d4f5 memory-efficient RadioEnvironmentMapHelper
Nicola Baldo <nbaldo@cttc.es>
parents: 8609
diff changeset
   240
          if ((numPointsCurrentIteration == m_maxPointsPerIteration)
b6abf3b8d4f5 memory-efficient RadioEnvironmentMapHelper
Nicola Baldo <nbaldo@cttc.es>
parents: 8609
diff changeset
   241
              || ((x > m_xMax - 0.5*m_xStep) && (y > m_yMax - 0.5*m_yStep)) )
b6abf3b8d4f5 memory-efficient RadioEnvironmentMapHelper
Nicola Baldo <nbaldo@cttc.es>
parents: 8609
diff changeset
   242
            {
b6abf3b8d4f5 memory-efficient RadioEnvironmentMapHelper
Nicola Baldo <nbaldo@cttc.es>
parents: 8609
diff changeset
   243
              Simulator::Schedule (Seconds (remIterationStartTime), 
b6abf3b8d4f5 memory-efficient RadioEnvironmentMapHelper
Nicola Baldo <nbaldo@cttc.es>
parents: 8609
diff changeset
   244
                                   &RadioEnvironmentMapHelper::RunOneIteration,
b6abf3b8d4f5 memory-efficient RadioEnvironmentMapHelper
Nicola Baldo <nbaldo@cttc.es>
parents: 8609
diff changeset
   245
                                   this, xMinNext, x, yMinNext, y);
b6abf3b8d4f5 memory-efficient RadioEnvironmentMapHelper
Nicola Baldo <nbaldo@cttc.es>
parents: 8609
diff changeset
   246
              remIterationStartTime += 0.001;
b6abf3b8d4f5 memory-efficient RadioEnvironmentMapHelper
Nicola Baldo <nbaldo@cttc.es>
parents: 8609
diff changeset
   247
              justScheduled = true;
b6abf3b8d4f5 memory-efficient RadioEnvironmentMapHelper
Nicola Baldo <nbaldo@cttc.es>
parents: 8609
diff changeset
   248
              numPointsCurrentIteration = 0;
b6abf3b8d4f5 memory-efficient RadioEnvironmentMapHelper
Nicola Baldo <nbaldo@cttc.es>
parents: 8609
diff changeset
   249
            }
b6abf3b8d4f5 memory-efficient RadioEnvironmentMapHelper
Nicola Baldo <nbaldo@cttc.es>
parents: 8609
diff changeset
   250
        }      
b6abf3b8d4f5 memory-efficient RadioEnvironmentMapHelper
Nicola Baldo <nbaldo@cttc.es>
parents: 8609
diff changeset
   251
    }
b6abf3b8d4f5 memory-efficient RadioEnvironmentMapHelper
Nicola Baldo <nbaldo@cttc.es>
parents: 8609
diff changeset
   252
  Simulator::Schedule (Seconds (remIterationStartTime), 
b6abf3b8d4f5 memory-efficient RadioEnvironmentMapHelper
Nicola Baldo <nbaldo@cttc.es>
parents: 8609
diff changeset
   253
                       &RadioEnvironmentMapHelper::Finalize,
b6abf3b8d4f5 memory-efficient RadioEnvironmentMapHelper
Nicola Baldo <nbaldo@cttc.es>
parents: 8609
diff changeset
   254
                       this);
b6abf3b8d4f5 memory-efficient RadioEnvironmentMapHelper
Nicola Baldo <nbaldo@cttc.es>
parents: 8609
diff changeset
   255
}
b6abf3b8d4f5 memory-efficient RadioEnvironmentMapHelper
Nicola Baldo <nbaldo@cttc.es>
parents: 8609
diff changeset
   256
b6abf3b8d4f5 memory-efficient RadioEnvironmentMapHelper
Nicola Baldo <nbaldo@cttc.es>
parents: 8609
diff changeset
   257
  
b6abf3b8d4f5 memory-efficient RadioEnvironmentMapHelper
Nicola Baldo <nbaldo@cttc.es>
parents: 8609
diff changeset
   258
void 
b6abf3b8d4f5 memory-efficient RadioEnvironmentMapHelper
Nicola Baldo <nbaldo@cttc.es>
parents: 8609
diff changeset
   259
RadioEnvironmentMapHelper::RunOneIteration (double xMin, double xMax, double yMin, double yMax)
b6abf3b8d4f5 memory-efficient RadioEnvironmentMapHelper
Nicola Baldo <nbaldo@cttc.es>
parents: 8609
diff changeset
   260
{
b6abf3b8d4f5 memory-efficient RadioEnvironmentMapHelper
Nicola Baldo <nbaldo@cttc.es>
parents: 8609
diff changeset
   261
  NS_LOG_FUNCTION (this << xMin << xMax << yMin << yMax);
b6abf3b8d4f5 memory-efficient RadioEnvironmentMapHelper
Nicola Baldo <nbaldo@cttc.es>
parents: 8609
diff changeset
   262
  std::list<RemPoint>::iterator remIt = m_rem.begin ();
b6abf3b8d4f5 memory-efficient RadioEnvironmentMapHelper
Nicola Baldo <nbaldo@cttc.es>
parents: 8609
diff changeset
   263
  double x;
b6abf3b8d4f5 memory-efficient RadioEnvironmentMapHelper
Nicola Baldo <nbaldo@cttc.es>
parents: 8609
diff changeset
   264
  double y;
b6abf3b8d4f5 memory-efficient RadioEnvironmentMapHelper
Nicola Baldo <nbaldo@cttc.es>
parents: 8609
diff changeset
   265
  for (x = xMin; x < xMax + 0.5*m_xStep; x += m_xStep)
b6abf3b8d4f5 memory-efficient RadioEnvironmentMapHelper
Nicola Baldo <nbaldo@cttc.es>
parents: 8609
diff changeset
   266
    {
b6abf3b8d4f5 memory-efficient RadioEnvironmentMapHelper
Nicola Baldo <nbaldo@cttc.es>
parents: 8609
diff changeset
   267
      for (y = (x == xMin) ? yMin : m_yMin;
b6abf3b8d4f5 memory-efficient RadioEnvironmentMapHelper
Nicola Baldo <nbaldo@cttc.es>
parents: 8609
diff changeset
   268
           y < ((x == xMax) ? yMax : m_yMax) + 0.5*m_yStep;
b6abf3b8d4f5 memory-efficient RadioEnvironmentMapHelper
Nicola Baldo <nbaldo@cttc.es>
parents: 8609
diff changeset
   269
           y += m_yStep)
b6abf3b8d4f5 memory-efficient RadioEnvironmentMapHelper
Nicola Baldo <nbaldo@cttc.es>
parents: 8609
diff changeset
   270
        {
b6abf3b8d4f5 memory-efficient RadioEnvironmentMapHelper
Nicola Baldo <nbaldo@cttc.es>
parents: 8609
diff changeset
   271
          NS_ASSERT (remIt != m_rem.end ());          
b6abf3b8d4f5 memory-efficient RadioEnvironmentMapHelper
Nicola Baldo <nbaldo@cttc.es>
parents: 8609
diff changeset
   272
          remIt->bmm->SetPosition (Vector (x, y, m_z));
b6abf3b8d4f5 memory-efficient RadioEnvironmentMapHelper
Nicola Baldo <nbaldo@cttc.es>
parents: 8609
diff changeset
   273
          BuildingsHelper::MakeConsistent (remIt->bmm);
b6abf3b8d4f5 memory-efficient RadioEnvironmentMapHelper
Nicola Baldo <nbaldo@cttc.es>
parents: 8609
diff changeset
   274
          ++remIt;
b6abf3b8d4f5 memory-efficient RadioEnvironmentMapHelper
Nicola Baldo <nbaldo@cttc.es>
parents: 8609
diff changeset
   275
        }      
b6abf3b8d4f5 memory-efficient RadioEnvironmentMapHelper
Nicola Baldo <nbaldo@cttc.es>
parents: 8609
diff changeset
   276
    }
b6abf3b8d4f5 memory-efficient RadioEnvironmentMapHelper
Nicola Baldo <nbaldo@cttc.es>
parents: 8609
diff changeset
   277
b6abf3b8d4f5 memory-efficient RadioEnvironmentMapHelper
Nicola Baldo <nbaldo@cttc.es>
parents: 8609
diff changeset
   278
  if (remIt != m_rem.end ())
b6abf3b8d4f5 memory-efficient RadioEnvironmentMapHelper
Nicola Baldo <nbaldo@cttc.es>
parents: 8609
diff changeset
   279
    {
b6abf3b8d4f5 memory-efficient RadioEnvironmentMapHelper
Nicola Baldo <nbaldo@cttc.es>
parents: 8609
diff changeset
   280
      NS_ASSERT ((x > m_xMax - 0.5*m_xStep) && (y > m_yMax - 0.5*m_yStep));
b6abf3b8d4f5 memory-efficient RadioEnvironmentMapHelper
Nicola Baldo <nbaldo@cttc.es>
parents: 8609
diff changeset
   281
      NS_LOG_LOGIC ("deactivating RemSpectrumPhys that are unneeded in the last iteration");
b6abf3b8d4f5 memory-efficient RadioEnvironmentMapHelper
Nicola Baldo <nbaldo@cttc.es>
parents: 8609
diff changeset
   282
      while (remIt != m_rem.end ())
b6abf3b8d4f5 memory-efficient RadioEnvironmentMapHelper
Nicola Baldo <nbaldo@cttc.es>
parents: 8609
diff changeset
   283
        {
b6abf3b8d4f5 memory-efficient RadioEnvironmentMapHelper
Nicola Baldo <nbaldo@cttc.es>
parents: 8609
diff changeset
   284
          remIt->phy->Deactivate ();
b6abf3b8d4f5 memory-efficient RadioEnvironmentMapHelper
Nicola Baldo <nbaldo@cttc.es>
parents: 8609
diff changeset
   285
          ++remIt;
b6abf3b8d4f5 memory-efficient RadioEnvironmentMapHelper
Nicola Baldo <nbaldo@cttc.es>
parents: 8609
diff changeset
   286
        }
b6abf3b8d4f5 memory-efficient RadioEnvironmentMapHelper
Nicola Baldo <nbaldo@cttc.es>
parents: 8609
diff changeset
   287
    }
b6abf3b8d4f5 memory-efficient RadioEnvironmentMapHelper
Nicola Baldo <nbaldo@cttc.es>
parents: 8609
diff changeset
   288
b6abf3b8d4f5 memory-efficient RadioEnvironmentMapHelper
Nicola Baldo <nbaldo@cttc.es>
parents: 8609
diff changeset
   289
  Simulator::Schedule (Seconds (0.0005), &RadioEnvironmentMapHelper::PrintAndReset, this);  
b6abf3b8d4f5 memory-efficient RadioEnvironmentMapHelper
Nicola Baldo <nbaldo@cttc.es>
parents: 8609
diff changeset
   290
}
b6abf3b8d4f5 memory-efficient RadioEnvironmentMapHelper
Nicola Baldo <nbaldo@cttc.es>
parents: 8609
diff changeset
   291
b6abf3b8d4f5 memory-efficient RadioEnvironmentMapHelper
Nicola Baldo <nbaldo@cttc.es>
parents: 8609
diff changeset
   292
void 
b6abf3b8d4f5 memory-efficient RadioEnvironmentMapHelper
Nicola Baldo <nbaldo@cttc.es>
parents: 8609
diff changeset
   293
RadioEnvironmentMapHelper::PrintAndReset ()
b6abf3b8d4f5 memory-efficient RadioEnvironmentMapHelper
Nicola Baldo <nbaldo@cttc.es>
parents: 8609
diff changeset
   294
{
b6abf3b8d4f5 memory-efficient RadioEnvironmentMapHelper
Nicola Baldo <nbaldo@cttc.es>
parents: 8609
diff changeset
   295
  NS_LOG_FUNCTION (this);
b6abf3b8d4f5 memory-efficient RadioEnvironmentMapHelper
Nicola Baldo <nbaldo@cttc.es>
parents: 8609
diff changeset
   296
  
8609
db24d2db55d4 revised REM implementation
Nicola Baldo <nbaldo@cttc.es>
parents: 8606
diff changeset
   297
  for (std::list<RemPoint>::iterator it = m_rem.begin ();
db24d2db55d4 revised REM implementation
Nicola Baldo <nbaldo@cttc.es>
parents: 8606
diff changeset
   298
       it != m_rem.end ();
db24d2db55d4 revised REM implementation
Nicola Baldo <nbaldo@cttc.es>
parents: 8606
diff changeset
   299
       ++it)
8560
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   300
    {
8688
b6abf3b8d4f5 memory-efficient RadioEnvironmentMapHelper
Nicola Baldo <nbaldo@cttc.es>
parents: 8609
diff changeset
   301
      if (!(it->phy->IsActive ()))
b6abf3b8d4f5 memory-efficient RadioEnvironmentMapHelper
Nicola Baldo <nbaldo@cttc.es>
parents: 8609
diff changeset
   302
        {
b6abf3b8d4f5 memory-efficient RadioEnvironmentMapHelper
Nicola Baldo <nbaldo@cttc.es>
parents: 8609
diff changeset
   303
          // should occur only upon last iteration when some RemPoint
b6abf3b8d4f5 memory-efficient RadioEnvironmentMapHelper
Nicola Baldo <nbaldo@cttc.es>
parents: 8609
diff changeset
   304
          // at the end of the list can be unused
b6abf3b8d4f5 memory-efficient RadioEnvironmentMapHelper
Nicola Baldo <nbaldo@cttc.es>
parents: 8609
diff changeset
   305
          break;
b6abf3b8d4f5 memory-efficient RadioEnvironmentMapHelper
Nicola Baldo <nbaldo@cttc.es>
parents: 8609
diff changeset
   306
        }
8609
db24d2db55d4 revised REM implementation
Nicola Baldo <nbaldo@cttc.es>
parents: 8606
diff changeset
   307
      Vector pos = it->bmm->GetPosition ();
8688
b6abf3b8d4f5 memory-efficient RadioEnvironmentMapHelper
Nicola Baldo <nbaldo@cttc.es>
parents: 8609
diff changeset
   308
      NS_LOG_LOGIC ("output: " << pos.x << "\t" 
b6abf3b8d4f5 memory-efficient RadioEnvironmentMapHelper
Nicola Baldo <nbaldo@cttc.es>
parents: 8609
diff changeset
   309
                    << pos.y << "\t" 
b6abf3b8d4f5 memory-efficient RadioEnvironmentMapHelper
Nicola Baldo <nbaldo@cttc.es>
parents: 8609
diff changeset
   310
                    << pos.z << "\t" 
b6abf3b8d4f5 memory-efficient RadioEnvironmentMapHelper
Nicola Baldo <nbaldo@cttc.es>
parents: 8609
diff changeset
   311
                    << it->phy->GetSinr (m_noisePower));
b6abf3b8d4f5 memory-efficient RadioEnvironmentMapHelper
Nicola Baldo <nbaldo@cttc.es>
parents: 8609
diff changeset
   312
      m_outFile << pos.x << "\t" 
b6abf3b8d4f5 memory-efficient RadioEnvironmentMapHelper
Nicola Baldo <nbaldo@cttc.es>
parents: 8609
diff changeset
   313
                << pos.y << "\t" 
b6abf3b8d4f5 memory-efficient RadioEnvironmentMapHelper
Nicola Baldo <nbaldo@cttc.es>
parents: 8609
diff changeset
   314
                << pos.z << "\t" 
b6abf3b8d4f5 memory-efficient RadioEnvironmentMapHelper
Nicola Baldo <nbaldo@cttc.es>
parents: 8609
diff changeset
   315
                << it->phy->GetSinr (m_noisePower)
b6abf3b8d4f5 memory-efficient RadioEnvironmentMapHelper
Nicola Baldo <nbaldo@cttc.es>
parents: 8609
diff changeset
   316
                << std::endl;
b6abf3b8d4f5 memory-efficient RadioEnvironmentMapHelper
Nicola Baldo <nbaldo@cttc.es>
parents: 8609
diff changeset
   317
      it->phy->Reset ();
8560
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   318
    }
8688
b6abf3b8d4f5 memory-efficient RadioEnvironmentMapHelper
Nicola Baldo <nbaldo@cttc.es>
parents: 8609
diff changeset
   319
}
b6abf3b8d4f5 memory-efficient RadioEnvironmentMapHelper
Nicola Baldo <nbaldo@cttc.es>
parents: 8609
diff changeset
   320
b6abf3b8d4f5 memory-efficient RadioEnvironmentMapHelper
Nicola Baldo <nbaldo@cttc.es>
parents: 8609
diff changeset
   321
void 
b6abf3b8d4f5 memory-efficient RadioEnvironmentMapHelper
Nicola Baldo <nbaldo@cttc.es>
parents: 8609
diff changeset
   322
RadioEnvironmentMapHelper::Finalize ()
b6abf3b8d4f5 memory-efficient RadioEnvironmentMapHelper
Nicola Baldo <nbaldo@cttc.es>
parents: 8609
diff changeset
   323
{
b6abf3b8d4f5 memory-efficient RadioEnvironmentMapHelper
Nicola Baldo <nbaldo@cttc.es>
parents: 8609
diff changeset
   324
  NS_LOG_FUNCTION (this);
b6abf3b8d4f5 memory-efficient RadioEnvironmentMapHelper
Nicola Baldo <nbaldo@cttc.es>
parents: 8609
diff changeset
   325
  m_outFile.close ();
8609
db24d2db55d4 revised REM implementation
Nicola Baldo <nbaldo@cttc.es>
parents: 8606
diff changeset
   326
  if (m_stopWhenDone)
8578
50484f99be63 REM helper deactivates PHYs instead of removing, and exit when done by default
Nicola Baldo <nbaldo@cttc.es>
parents: 8567
diff changeset
   327
    {
50484f99be63 REM helper deactivates PHYs instead of removing, and exit when done by default
Nicola Baldo <nbaldo@cttc.es>
parents: 8567
diff changeset
   328
      Simulator::Stop ();
50484f99be63 REM helper deactivates PHYs instead of removing, and exit when done by default
Nicola Baldo <nbaldo@cttc.es>
parents: 8567
diff changeset
   329
    }
8560
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   330
}
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   331
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   332
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   333
} // namespace ns3