src/lte/helper/radio-environment-map-helper.h
author Marco Miozzo <marco.miozzo@cttc.es>
Mon, 03 Jun 2013 17:01:52 +0200
changeset 10080 1b36e2276e15
parent 8693 478733ab87b7
child 10892 3e86fac77082
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 Centre Tecnologic de Telecomunicacions de Catalunya (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
#ifndef RADIO_ENVIRONMENT_MAP_HELPER_H
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    23
#define RADIO_ENVIRONMENT_MAP_HELPER_H
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    24
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    25
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    26
#include <ns3/object.h>
8688
b6abf3b8d4f5 memory-efficient RadioEnvironmentMapHelper
Nicola Baldo <nbaldo@cttc.es>
parents: 8609
diff changeset
    27
#include <fstream>
8560
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    28
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    29
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    30
namespace ns3 {
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    31
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    32
class RemSpectrumPhy;
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    33
class Node;
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    34
class NetDevice;
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    35
class SpectrumChannel;
10080
1b36e2276e15 Move from BuildingsMobilityModel to BuildingMobilityInfo source, tests and examples
Marco Miozzo <marco.miozzo@cttc.es>
parents: 8693
diff changeset
    36
//class BuildingsMobilityModel;
1b36e2276e15 Move from BuildingsMobilityModel to BuildingMobilityInfo source, tests and examples
Marco Miozzo <marco.miozzo@cttc.es>
parents: 8693
diff changeset
    37
class MobilityModel;
8560
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    38
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    39
/** 
8693
478733ab87b7 MultiModelSpectrumChannel working with LTE
Nicola Baldo <nbaldo@cttc.es>
parents: 8688
diff changeset
    40
 * Generates a 2D map of the SINR from the strongest transmitter in the downlink of an LTE FDD system.
8560
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    41
 * 
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
class RadioEnvironmentMapHelper : public Object
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
public:  
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
  RadioEnvironmentMapHelper ();
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    48
  virtual ~RadioEnvironmentMapHelper ();
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    49
  
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    50
  // inherited from Object
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    51
  virtual void DoDispose (void);
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    52
  static TypeId GetTypeId (void);
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    53
8688
b6abf3b8d4f5 memory-efficient RadioEnvironmentMapHelper
Nicola Baldo <nbaldo@cttc.es>
parents: 8609
diff changeset
    54
  /** 
8693
478733ab87b7 MultiModelSpectrumChannel working with LTE
Nicola Baldo <nbaldo@cttc.es>
parents: 8688
diff changeset
    55
   * \return the bandwidth (in num of RBs) over which SINR is calculated
478733ab87b7 MultiModelSpectrumChannel working with LTE
Nicola Baldo <nbaldo@cttc.es>
parents: 8688
diff changeset
    56
   */
478733ab87b7 MultiModelSpectrumChannel working with LTE
Nicola Baldo <nbaldo@cttc.es>
parents: 8688
diff changeset
    57
  uint8_t GetBandwidth () const;
478733ab87b7 MultiModelSpectrumChannel working with LTE
Nicola Baldo <nbaldo@cttc.es>
parents: 8688
diff changeset
    58
478733ab87b7 MultiModelSpectrumChannel working with LTE
Nicola Baldo <nbaldo@cttc.es>
parents: 8688
diff changeset
    59
  /** 
478733ab87b7 MultiModelSpectrumChannel working with LTE
Nicola Baldo <nbaldo@cttc.es>
parents: 8688
diff changeset
    60
   *
478733ab87b7 MultiModelSpectrumChannel working with LTE
Nicola Baldo <nbaldo@cttc.es>
parents: 8688
diff changeset
    61
   * \param bw  the bandwidth (in num of RBs) over which SINR is calculated
478733ab87b7 MultiModelSpectrumChannel working with LTE
Nicola Baldo <nbaldo@cttc.es>
parents: 8688
diff changeset
    62
   */
478733ab87b7 MultiModelSpectrumChannel working with LTE
Nicola Baldo <nbaldo@cttc.es>
parents: 8688
diff changeset
    63
  void SetBandwidth (uint8_t bw);
478733ab87b7 MultiModelSpectrumChannel working with LTE
Nicola Baldo <nbaldo@cttc.es>
parents: 8688
diff changeset
    64
478733ab87b7 MultiModelSpectrumChannel working with LTE
Nicola Baldo <nbaldo@cttc.es>
parents: 8688
diff changeset
    65
  /** 
8688
b6abf3b8d4f5 memory-efficient RadioEnvironmentMapHelper
Nicola Baldo <nbaldo@cttc.es>
parents: 8609
diff changeset
    66
   * Deploy the RemSpectrumPhy objects that generate the map according to the specified settings.
b6abf3b8d4f5 memory-efficient RadioEnvironmentMapHelper
Nicola Baldo <nbaldo@cttc.es>
parents: 8609
diff changeset
    67
   * 
b6abf3b8d4f5 memory-efficient RadioEnvironmentMapHelper
Nicola Baldo <nbaldo@cttc.es>
parents: 8609
diff changeset
    68
   */
8560
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    69
  void Install ();
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
private:
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    72
8688
b6abf3b8d4f5 memory-efficient RadioEnvironmentMapHelper
Nicola Baldo <nbaldo@cttc.es>
parents: 8609
diff changeset
    73
  void DelayedInstall ();
b6abf3b8d4f5 memory-efficient RadioEnvironmentMapHelper
Nicola Baldo <nbaldo@cttc.es>
parents: 8609
diff changeset
    74
  void RunOneIteration (double xMin, double xMax, double yMin, double yMax);
b6abf3b8d4f5 memory-efficient RadioEnvironmentMapHelper
Nicola Baldo <nbaldo@cttc.es>
parents: 8609
diff changeset
    75
  void PrintAndReset ();
b6abf3b8d4f5 memory-efficient RadioEnvironmentMapHelper
Nicola Baldo <nbaldo@cttc.es>
parents: 8609
diff changeset
    76
  void Finalize ();
8560
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    77
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    78
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    79
  struct RemPoint 
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    80
  {
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    81
    Ptr<RemSpectrumPhy> phy;
10080
1b36e2276e15 Move from BuildingsMobilityModel to BuildingMobilityInfo source, tests and examples
Marco Miozzo <marco.miozzo@cttc.es>
parents: 8693
diff changeset
    82
    Ptr<MobilityModel> bmm;
8560
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    83
  };
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    84
8609
db24d2db55d4 revised REM implementation
Nicola Baldo <nbaldo@cttc.es>
parents: 8578
diff changeset
    85
  std::list<RemPoint> m_rem;
8560
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    86
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    87
  double m_xMin;
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    88
  double m_xMax;
8609
db24d2db55d4 revised REM implementation
Nicola Baldo <nbaldo@cttc.es>
parents: 8578
diff changeset
    89
  uint16_t m_xRes;
8688
b6abf3b8d4f5 memory-efficient RadioEnvironmentMapHelper
Nicola Baldo <nbaldo@cttc.es>
parents: 8609
diff changeset
    90
  double m_xStep;
8560
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    91
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    92
  double m_yMin;
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    93
  double m_yMax;
8609
db24d2db55d4 revised REM implementation
Nicola Baldo <nbaldo@cttc.es>
parents: 8578
diff changeset
    94
  uint16_t m_yRes;
8688
b6abf3b8d4f5 memory-efficient RadioEnvironmentMapHelper
Nicola Baldo <nbaldo@cttc.es>
parents: 8609
diff changeset
    95
  double m_yStep;
b6abf3b8d4f5 memory-efficient RadioEnvironmentMapHelper
Nicola Baldo <nbaldo@cttc.es>
parents: 8609
diff changeset
    96
b6abf3b8d4f5 memory-efficient RadioEnvironmentMapHelper
Nicola Baldo <nbaldo@cttc.es>
parents: 8609
diff changeset
    97
  uint32_t m_maxPointsPerIteration;
8693
478733ab87b7 MultiModelSpectrumChannel working with LTE
Nicola Baldo <nbaldo@cttc.es>
parents: 8688
diff changeset
    98
478733ab87b7 MultiModelSpectrumChannel working with LTE
Nicola Baldo <nbaldo@cttc.es>
parents: 8688
diff changeset
    99
  uint16_t m_earfcn;
478733ab87b7 MultiModelSpectrumChannel working with LTE
Nicola Baldo <nbaldo@cttc.es>
parents: 8688
diff changeset
   100
  uint16_t m_bandwidth;
478733ab87b7 MultiModelSpectrumChannel working with LTE
Nicola Baldo <nbaldo@cttc.es>
parents: 8688
diff changeset
   101
 
8560
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   102
  double m_z;
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   103
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   104
  std::string m_channelPath;
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   105
  std::string m_outputFile;
8578
50484f99be63 REM helper deactivates PHYs instead of removing, and exit when done by default
Nicola Baldo <nbaldo@cttc.es>
parents: 8560
diff changeset
   106
8609
db24d2db55d4 revised REM implementation
Nicola Baldo <nbaldo@cttc.es>
parents: 8578
diff changeset
   107
  bool m_stopWhenDone;
8560
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   108
  
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   109
  Ptr<SpectrumChannel> m_channel;
8609
db24d2db55d4 revised REM implementation
Nicola Baldo <nbaldo@cttc.es>
parents: 8578
diff changeset
   110
db24d2db55d4 revised REM implementation
Nicola Baldo <nbaldo@cttc.es>
parents: 8578
diff changeset
   111
  double m_noisePower;
8688
b6abf3b8d4f5 memory-efficient RadioEnvironmentMapHelper
Nicola Baldo <nbaldo@cttc.es>
parents: 8609
diff changeset
   112
b6abf3b8d4f5 memory-efficient RadioEnvironmentMapHelper
Nicola Baldo <nbaldo@cttc.es>
parents: 8609
diff changeset
   113
  std::ofstream m_outFile;
b6abf3b8d4f5 memory-efficient RadioEnvironmentMapHelper
Nicola Baldo <nbaldo@cttc.es>
parents: 8609
diff changeset
   114
8560
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   115
};
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   116
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   117
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   118
}
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   119
729a6248d9d3 added support to generate Radio Environment Maps
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   120
#endif /* RADIO_ENVIRONMENT_MAP_HELPER_H */