src/buildings/model/buildings-propagation-loss-model.h
author Marco Miozzo <marco.miozzo@cttc.es>
Mon, 03 Jun 2013 17:01:52 +0200
changeset 10080 1b36e2276e15
parent 9014 9bcea2a55b9b
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:
8184
b2d61f172004 Add Building class, BuildingMobilityModel and BuildingPropagationModel
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
     1
/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
b2d61f172004 Add Building class, BuildingMobilityModel and BuildingPropagationModel
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
     2
/*
8734
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents: 8643
diff changeset
     3
 * Copyright (c) 2011, 2012 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
8184
b2d61f172004 Add Building class, BuildingMobilityModel and BuildingPropagationModel
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
     4
 *
b2d61f172004 Add Building class, BuildingMobilityModel and BuildingPropagationModel
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
     5
 * This program is free software; you can redistribute it and/or modify
b2d61f172004 Add Building class, BuildingMobilityModel and BuildingPropagationModel
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
     6
 * it under the terms of the GNU General Public License version 2 as
b2d61f172004 Add Building class, BuildingMobilityModel and BuildingPropagationModel
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
     7
 * published by the Free Software Foundation;
b2d61f172004 Add Building class, BuildingMobilityModel and BuildingPropagationModel
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
     8
 *
b2d61f172004 Add Building class, BuildingMobilityModel and BuildingPropagationModel
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
     9
 * This program is distributed in the hope that it will be useful,
b2d61f172004 Add Building class, BuildingMobilityModel and BuildingPropagationModel
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
    10
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
b2d61f172004 Add Building class, BuildingMobilityModel and BuildingPropagationModel
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
    11
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
b2d61f172004 Add Building class, BuildingMobilityModel and BuildingPropagationModel
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
    12
 * GNU General Public License for more details.
b2d61f172004 Add Building class, BuildingMobilityModel and BuildingPropagationModel
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
    13
 *
b2d61f172004 Add Building class, BuildingMobilityModel and BuildingPropagationModel
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
    14
 * You should have received a copy of the GNU General Public License
b2d61f172004 Add Building class, BuildingMobilityModel and BuildingPropagationModel
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
    15
 * along with this program; if not, write to the Free Software
b2d61f172004 Add Building class, BuildingMobilityModel and BuildingPropagationModel
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
    16
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
b2d61f172004 Add Building class, BuildingMobilityModel and BuildingPropagationModel
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
    17
 *
b2d61f172004 Add Building class, BuildingMobilityModel and BuildingPropagationModel
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
    18
 * Author: Marco Miozzo  <marco.miozzo@cttc.es>
8734
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents: 8643
diff changeset
    19
 *         Nicola Baldo <nbaldo@cttc.es>
8184
b2d61f172004 Add Building class, BuildingMobilityModel and BuildingPropagationModel
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
    20
 * 
b2d61f172004 Add Building class, BuildingMobilityModel and BuildingPropagationModel
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
    21
 */
b2d61f172004 Add Building class, BuildingMobilityModel and BuildingPropagationModel
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
    22
b2d61f172004 Add Building class, BuildingMobilityModel and BuildingPropagationModel
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
    23
#ifndef BUILDINGS_PROPAGATION_LOSS_MODEL_H_
b2d61f172004 Add Building class, BuildingMobilityModel and BuildingPropagationModel
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
    24
#define BUILDINGS_PROPAGATION_LOSS_MODEL_H_
b2d61f172004 Add Building class, BuildingMobilityModel and BuildingPropagationModel
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
    25
b2d61f172004 Add Building class, BuildingMobilityModel and BuildingPropagationModel
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
    26
#include "ns3/nstime.h"
b2d61f172004 Add Building class, BuildingMobilityModel and BuildingPropagationModel
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
    27
#include "ns3/propagation-loss-model.h"
8985
7752dc4ce7e9 Replace src/buildings and src/propagation usage of RandomVariable with RandomVariableStream
Mitch Watrous
parents: 8734
diff changeset
    28
#include "ns3/random-variable-stream.h"
8185
34b4d9b91019 Include pathloss models into BuildingsPropagationLossModel: Okumura Hata, ITU-R P.1411, ITU-R P.1238 and wall penetration loss
Marco Miozzo <marco.miozzo@cttc.es>
parents: 8184
diff changeset
    29
#include <ns3/building.h>
34b4d9b91019 Include pathloss models into BuildingsPropagationLossModel: Okumura Hata, ITU-R P.1411, ITU-R P.1238 and wall penetration loss
Marco Miozzo <marco.miozzo@cttc.es>
parents: 8184
diff changeset
    30
#include <ns3/buildings-mobility-model.h>
8184
b2d61f172004 Add Building class, BuildingMobilityModel and BuildingPropagationModel
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
    31
8216
e16fcf31809f Shadowing model introduced in BuildingPathlossModel
Marco Miozzo <marco.miozzo@cttc.es>
parents: 8208
diff changeset
    32
8184
b2d61f172004 Add Building class, BuildingMobilityModel and BuildingPropagationModel
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
    33
namespace ns3 {
b2d61f172004 Add Building class, BuildingMobilityModel and BuildingPropagationModel
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
    34
8216
e16fcf31809f Shadowing model introduced in BuildingPathlossModel
Marco Miozzo <marco.miozzo@cttc.es>
parents: 8208
diff changeset
    35
class ShadowingLossModel;
e16fcf31809f Shadowing model introduced in BuildingPathlossModel
Marco Miozzo <marco.miozzo@cttc.es>
parents: 8208
diff changeset
    36
class JakesFadingLossModel;
8332
c6d3c7862cfb Style fixed in buildings module
mmiozzo
parents: 8283
diff changeset
    37
8184
b2d61f172004 Add Building class, BuildingMobilityModel and BuildingPropagationModel
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
    38
/**
b2d61f172004 Add Building class, BuildingMobilityModel and BuildingPropagationModel
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
    39
 * \ingroup propagation
b2d61f172004 Add Building class, BuildingMobilityModel and BuildingPropagationModel
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
    40
 *
8734
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents: 8643
diff changeset
    41
 *  This model provides means for simulating the following propagation
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents: 8643
diff changeset
    42
 *  phenomena in the presence of buildings: 
8184
b2d61f172004 Add Building class, BuildingMobilityModel and BuildingPropagationModel
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
    43
 *
8734
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents: 8643
diff changeset
    44
 *   - shadowing (indoor, outdoor)
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents: 8643
diff changeset
    45
 *   - external wall penetration loss
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents: 8643
diff changeset
    46
 *   - internal wall penetration loss
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents: 8643
diff changeset
    47
 *  
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents: 8643
diff changeset
    48
 *  The distance-dependent component of propagation loss is deferred
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents: 8643
diff changeset
    49
 *  to derived classes which are expected to implement the GetLoss method.
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents: 8643
diff changeset
    50
 *  
10080
1b36e2276e15 Move from BuildingsMobilityModel to BuildingMobilityInfo source, tests and examples
Marco Miozzo <marco.miozzo@cttc.es>
parents: 9014
diff changeset
    51
 *  \warning This model works only when MobilityBuildingInfo is aggreegated
1b36e2276e15 Move from BuildingsMobilityModel to BuildingMobilityInfo source, tests and examples
Marco Miozzo <marco.miozzo@cttc.es>
parents: 9014
diff changeset
    52
 *  to the mobility model
8184
b2d61f172004 Add Building class, BuildingMobilityModel and BuildingPropagationModel
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
    53
 *
b2d61f172004 Add Building class, BuildingMobilityModel and BuildingPropagationModel
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
    54
 */
b2d61f172004 Add Building class, BuildingMobilityModel and BuildingPropagationModel
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
    55
b2d61f172004 Add Building class, BuildingMobilityModel and BuildingPropagationModel
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
    56
class BuildingsPropagationLossModel : public PropagationLossModel
b2d61f172004 Add Building class, BuildingMobilityModel and BuildingPropagationModel
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
    57
{
b2d61f172004 Add Building class, BuildingMobilityModel and BuildingPropagationModel
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
    58
b2d61f172004 Add Building class, BuildingMobilityModel and BuildingPropagationModel
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
    59
public:
b2d61f172004 Add Building class, BuildingMobilityModel and BuildingPropagationModel
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
    60
  static TypeId GetTypeId (void);
b2d61f172004 Add Building class, BuildingMobilityModel and BuildingPropagationModel
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
    61
9014
9bcea2a55b9b remove static random variable from buildings module
Tom Henderson <tomh@tomh.org>
parents: 8985
diff changeset
    62
  BuildingsPropagationLossModel ();
8184
b2d61f172004 Add Building class, BuildingMobilityModel and BuildingPropagationModel
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
    63
  /**
b2d61f172004 Add Building class, BuildingMobilityModel and BuildingPropagationModel
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
    64
   * \param a the mobility model of the source
b2d61f172004 Add Building class, BuildingMobilityModel and BuildingPropagationModel
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
    65
   * \param b the mobility model of the destination
b2d61f172004 Add Building class, BuildingMobilityModel and BuildingPropagationModel
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
    66
   * \returns the propagation loss (in dBm)
b2d61f172004 Add Building class, BuildingMobilityModel and BuildingPropagationModel
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
    67
   */
8643
3c7d21485f21 Update BuildingPropagationLossModel for working in Hybrid and Simple modes
Marco Miozzo <marco.miozzo@cttc.es>
parents: 8636
diff changeset
    68
  virtual double GetLoss (Ptr<MobilityModel> a, Ptr<MobilityModel> b) const = 0;
8332
c6d3c7862cfb Style fixed in buildings module
mmiozzo
parents: 8283
diff changeset
    69
8734
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents: 8643
diff changeset
    70
  // inherited from PropagationLossModel
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents: 8643
diff changeset
    71
  virtual double DoCalcRxPower (double txPowerDbm, Ptr<MobilityModel> a, Ptr<MobilityModel> b) const;
8332
c6d3c7862cfb Style fixed in buildings module
mmiozzo
parents: 8283
diff changeset
    72
8643
3c7d21485f21 Update BuildingPropagationLossModel for working in Hybrid and Simple modes
Marco Miozzo <marco.miozzo@cttc.es>
parents: 8636
diff changeset
    73
protected:
10080
1b36e2276e15 Move from BuildingsMobilityModel to BuildingMobilityInfo source, tests and examples
Marco Miozzo <marco.miozzo@cttc.es>
parents: 9014
diff changeset
    74
  double ExternalWallLoss (Ptr<MobilityBuildingInfo> a) const;
1b36e2276e15 Move from BuildingsMobilityModel to BuildingMobilityInfo source, tests and examples
Marco Miozzo <marco.miozzo@cttc.es>
parents: 9014
diff changeset
    75
  double HeightLoss (Ptr<MobilityBuildingInfo> n) const;
1b36e2276e15 Move from BuildingsMobilityModel to BuildingMobilityInfo source, tests and examples
Marco Miozzo <marco.miozzo@cttc.es>
parents: 9014
diff changeset
    76
  double InternalWallsLoss (Ptr<MobilityBuildingInfo> a, Ptr<MobilityBuildingInfo> b) const;
8643
3c7d21485f21 Update BuildingPropagationLossModel for working in Hybrid and Simple modes
Marco Miozzo <marco.miozzo@cttc.es>
parents: 8636
diff changeset
    77
  
8734
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents: 8643
diff changeset
    78
  double GetShadowing (Ptr<MobilityModel> a, Ptr<MobilityModel> b) const;
8332
c6d3c7862cfb Style fixed in buildings module
mmiozzo
parents: 8283
diff changeset
    79
8636
555a0a67af36 BuildingsPropagationLossModel: added internal wall loss
Nicola Baldo <nbaldo@cttc.es>
parents: 8577
diff changeset
    80
  double m_lossInternalWall; // in meters
8332
c6d3c7862cfb Style fixed in buildings module
mmiozzo
parents: 8283
diff changeset
    81
8636
555a0a67af36 BuildingsPropagationLossModel: added internal wall loss
Nicola Baldo <nbaldo@cttc.es>
parents: 8577
diff changeset
    82
  
8577
48bd78934632 faster implementation of shadowing in BuildingsPropagationLossModel
Nicola Baldo <nbaldo@cttc.es>
parents: 8332
diff changeset
    83
  class ShadowingLoss
8332
c6d3c7862cfb Style fixed in buildings module
mmiozzo
parents: 8283
diff changeset
    84
  {
8577
48bd78934632 faster implementation of shadowing in BuildingsPropagationLossModel
Nicola Baldo <nbaldo@cttc.es>
parents: 8332
diff changeset
    85
  public:
48bd78934632 faster implementation of shadowing in BuildingsPropagationLossModel
Nicola Baldo <nbaldo@cttc.es>
parents: 8332
diff changeset
    86
    ShadowingLoss ();
9014
9bcea2a55b9b remove static random variable from buildings module
Tom Henderson <tomh@tomh.org>
parents: 8985
diff changeset
    87
    ShadowingLoss (double shadowingValue, Ptr<MobilityModel> receiver);
8577
48bd78934632 faster implementation of shadowing in BuildingsPropagationLossModel
Nicola Baldo <nbaldo@cttc.es>
parents: 8332
diff changeset
    88
    double GetLoss () const;
48bd78934632 faster implementation of shadowing in BuildingsPropagationLossModel
Nicola Baldo <nbaldo@cttc.es>
parents: 8332
diff changeset
    89
    Ptr<MobilityModel> GetReceiver (void) const;
8643
3c7d21485f21 Update BuildingPropagationLossModel for working in Hybrid and Simple modes
Marco Miozzo <marco.miozzo@cttc.es>
parents: 8636
diff changeset
    90
  protected:
9014
9bcea2a55b9b remove static random variable from buildings module
Tom Henderson <tomh@tomh.org>
parents: 8985
diff changeset
    91
    double m_shadowingValue;
8577
48bd78934632 faster implementation of shadowing in BuildingsPropagationLossModel
Nicola Baldo <nbaldo@cttc.es>
parents: 8332
diff changeset
    92
    Ptr<MobilityModel> m_receiver;
8216
e16fcf31809f Shadowing model introduced in BuildingPathlossModel
Marco Miozzo <marco.miozzo@cttc.es>
parents: 8208
diff changeset
    93
  };
8577
48bd78934632 faster implementation of shadowing in BuildingsPropagationLossModel
Nicola Baldo <nbaldo@cttc.es>
parents: 8332
diff changeset
    94
48bd78934632 faster implementation of shadowing in BuildingsPropagationLossModel
Nicola Baldo <nbaldo@cttc.es>
parents: 8332
diff changeset
    95
  mutable std::map<Ptr<MobilityModel>,  std::map<Ptr<MobilityModel>, ShadowingLoss> > m_shadowingLossMap;
10080
1b36e2276e15 Move from BuildingsMobilityModel to BuildingMobilityInfo source, tests and examples
Marco Miozzo <marco.miozzo@cttc.es>
parents: 9014
diff changeset
    96
  double EvaluateSigma (Ptr<MobilityBuildingInfo> a, Ptr<MobilityBuildingInfo> b) const;
8332
c6d3c7862cfb Style fixed in buildings module
mmiozzo
parents: 8283
diff changeset
    97
c6d3c7862cfb Style fixed in buildings module
mmiozzo
parents: 8283
diff changeset
    98
8216
e16fcf31809f Shadowing model introduced in BuildingPathlossModel
Marco Miozzo <marco.miozzo@cttc.es>
parents: 8208
diff changeset
    99
  double m_shadowingSigmaExtWalls;
e16fcf31809f Shadowing model introduced in BuildingPathlossModel
Marco Miozzo <marco.miozzo@cttc.es>
parents: 8208
diff changeset
   100
  double m_shadowingSigmaOutdoor;
e16fcf31809f Shadowing model introduced in BuildingPathlossModel
Marco Miozzo <marco.miozzo@cttc.es>
parents: 8208
diff changeset
   101
  double m_shadowingSigmaIndoor;
9014
9bcea2a55b9b remove static random variable from buildings module
Tom Henderson <tomh@tomh.org>
parents: 8985
diff changeset
   102
  Ptr<NormalRandomVariable> m_randVariable;
8184
b2d61f172004 Add Building class, BuildingMobilityModel and BuildingPropagationModel
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
   103
8985
7752dc4ce7e9 Replace src/buildings and src/propagation usage of RandomVariable with RandomVariableStream
Mitch Watrous
parents: 8734
diff changeset
   104
  virtual int64_t DoAssignStreams (int64_t stream);
8184
b2d61f172004 Add Building class, BuildingMobilityModel and BuildingPropagationModel
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
   105
};
b2d61f172004 Add Building class, BuildingMobilityModel and BuildingPropagationModel
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
   106
b2d61f172004 Add Building class, BuildingMobilityModel and BuildingPropagationModel
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
   107
}
b2d61f172004 Add Building class, BuildingMobilityModel and BuildingPropagationModel
Marco Miozzo <marco.miozzo@cttc.es>
parents:
diff changeset
   108
8643
3c7d21485f21 Update BuildingPropagationLossModel for working in Hybrid and Simple modes
Marco Miozzo <marco.miozzo@cttc.es>
parents: 8636
diff changeset
   109
#endif /* BUILDINGS_PROPAGATION_LOSS_MODEL_H_ */