src/devices/wifi/propagation-loss-model.h
author Timo Bingmann <timo.bingmann@student.kit.edu>
Fri, 09 Jan 2009 09:39:42 +0100
changeset 4059 251351372d8d
parent 3909 4e7e594b0b7e
child 4464 be1414b398a0
permissions -rw-r--r--
PropagationLossModel::GetLoss -> CalcRxPower. Add ThreeLogDistancePropagationLossModel.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
2034
8664ab76ff85 add missing headers
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2032
diff changeset
     1
/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
8664ab76ff85 add missing headers
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2032
diff changeset
     2
/*
8664ab76ff85 add missing headers
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2032
diff changeset
     3
 * Copyright (c) 2005,2006,2007 INRIA
8664ab76ff85 add missing headers
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2032
diff changeset
     4
 *
8664ab76ff85 add missing headers
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2032
diff changeset
     5
 * This program is free software; you can redistribute it and/or modify
8664ab76ff85 add missing headers
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2032
diff changeset
     6
 * it under the terms of the GNU General Public License version 2 as 
8664ab76ff85 add missing headers
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2032
diff changeset
     7
 * published by the Free Software Foundation;
8664ab76ff85 add missing headers
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2032
diff changeset
     8
 *
8664ab76ff85 add missing headers
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2032
diff changeset
     9
 * This program is distributed in the hope that it will be useful,
8664ab76ff85 add missing headers
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2032
diff changeset
    10
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
8664ab76ff85 add missing headers
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2032
diff changeset
    11
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
8664ab76ff85 add missing headers
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2032
diff changeset
    12
 * GNU General Public License for more details.
8664ab76ff85 add missing headers
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2032
diff changeset
    13
 *
8664ab76ff85 add missing headers
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2032
diff changeset
    14
 * You should have received a copy of the GNU General Public License
8664ab76ff85 add missing headers
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2032
diff changeset
    15
 * along with this program; if not, write to the Free Software
8664ab76ff85 add missing headers
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2032
diff changeset
    16
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
8664ab76ff85 add missing headers
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2032
diff changeset
    17
 *
8664ab76ff85 add missing headers
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2032
diff changeset
    18
 * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
4059
251351372d8d PropagationLossModel::GetLoss -> CalcRxPower. Add ThreeLogDistancePropagationLossModel.
Timo Bingmann <timo.bingmann@student.kit.edu>
parents: 3909
diff changeset
    19
 * Contributions: Timo Bingmann <timo.bingmann@student.kit.edu>
2034
8664ab76ff85 add missing headers
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2032
diff changeset
    20
 */
4059
251351372d8d PropagationLossModel::GetLoss -> CalcRxPower. Add ThreeLogDistancePropagationLossModel.
Timo Bingmann <timo.bingmann@student.kit.edu>
parents: 3909
diff changeset
    21
1882
061f7f7f9992 start of work towards port of wifi code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    22
#ifndef PROPAGATION_LOSS_MODEL_H
061f7f7f9992 start of work towards port of wifi code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    23
#define PROPAGATION_LOSS_MODEL_H
061f7f7f9992 start of work towards port of wifi code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    24
061f7f7f9992 start of work towards port of wifi code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    25
#include "ns3/object.h"
2336
28ce210b91bb bug 133: automate RandomVariable memory management.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2072
diff changeset
    26
#include "ns3/random-variable.h"
1882
061f7f7f9992 start of work towards port of wifi code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    27
061f7f7f9992 start of work towards port of wifi code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    28
namespace ns3 {
061f7f7f9992 start of work towards port of wifi code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    29
2031
567dbc2475fc replace distance by a pair of mobility models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1985
diff changeset
    30
class MobilityModel;
567dbc2475fc replace distance by a pair of mobility models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1985
diff changeset
    31
2032
dac45a8371f9 doxygen PropagationLossModel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2031
diff changeset
    32
/**
dac45a8371f9 doxygen PropagationLossModel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2031
diff changeset
    33
 * \brief Modelize the propagation loss through a transmission medium
dac45a8371f9 doxygen PropagationLossModel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2031
diff changeset
    34
 *
4059
251351372d8d PropagationLossModel::GetLoss -> CalcRxPower. Add ThreeLogDistancePropagationLossModel.
Timo Bingmann <timo.bingmann@student.kit.edu>
parents: 3909
diff changeset
    35
 * Calculate the receive power (dbm) from a transmit power (dbm)
251351372d8d PropagationLossModel::GetLoss -> CalcRxPower. Add ThreeLogDistancePropagationLossModel.
Timo Bingmann <timo.bingmann@student.kit.edu>
parents: 3909
diff changeset
    36
 * and a mobility model for the source and destination positions.
2032
dac45a8371f9 doxygen PropagationLossModel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2031
diff changeset
    37
 */
1882
061f7f7f9992 start of work towards port of wifi code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    38
class PropagationLossModel : public Object
061f7f7f9992 start of work towards port of wifi code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    39
{
061f7f7f9992 start of work towards port of wifi code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    40
public:
2940
8fb456039670 add missing TypeId in base class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2677
diff changeset
    41
  static TypeId GetTypeId (void);
8fb456039670 add missing TypeId in base class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2677
diff changeset
    42
3907
56e477db65b2 add composite capability to PropagationLossModel base class.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3388
diff changeset
    43
  PropagationLossModel ();
1882
061f7f7f9992 start of work towards port of wifi code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    44
  virtual ~PropagationLossModel ();
3907
56e477db65b2 add composite capability to PropagationLossModel base class.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3388
diff changeset
    45
56e477db65b2 add composite capability to PropagationLossModel base class.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3388
diff changeset
    46
  void SetNext (Ptr<PropagationLossModel> next);
56e477db65b2 add composite capability to PropagationLossModel base class.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3388
diff changeset
    47
2032
dac45a8371f9 doxygen PropagationLossModel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2031
diff changeset
    48
  /**
4059
251351372d8d PropagationLossModel::GetLoss -> CalcRxPower. Add ThreeLogDistancePropagationLossModel.
Timo Bingmann <timo.bingmann@student.kit.edu>
parents: 3909
diff changeset
    49
   * \param txPowerDbm current transmission power (in dBm)
2032
dac45a8371f9 doxygen PropagationLossModel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2031
diff changeset
    50
   * \param a the mobility model of the source
dac45a8371f9 doxygen PropagationLossModel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2031
diff changeset
    51
   * \param b the mobility model of the destination
4059
251351372d8d PropagationLossModel::GetLoss -> CalcRxPower. Add ThreeLogDistancePropagationLossModel.
Timo Bingmann <timo.bingmann@student.kit.edu>
parents: 3909
diff changeset
    52
   * \returns the reception power after adding/multiplying propagation loss (in dBm)
2032
dac45a8371f9 doxygen PropagationLossModel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2031
diff changeset
    53
   */
4059
251351372d8d PropagationLossModel::GetLoss -> CalcRxPower. Add ThreeLogDistancePropagationLossModel.
Timo Bingmann <timo.bingmann@student.kit.edu>
parents: 3909
diff changeset
    54
  double CalcRxPower (double txPowerDbm,
251351372d8d PropagationLossModel::GetLoss -> CalcRxPower. Add ThreeLogDistancePropagationLossModel.
Timo Bingmann <timo.bingmann@student.kit.edu>
parents: 3909
diff changeset
    55
                      Ptr<MobilityModel> a,
251351372d8d PropagationLossModel::GetLoss -> CalcRxPower. Add ThreeLogDistancePropagationLossModel.
Timo Bingmann <timo.bingmann@student.kit.edu>
parents: 3909
diff changeset
    56
                      Ptr<MobilityModel> b) const;
3907
56e477db65b2 add composite capability to PropagationLossModel base class.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3388
diff changeset
    57
private:
56e477db65b2 add composite capability to PropagationLossModel base class.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3388
diff changeset
    58
  PropagationLossModel (const PropagationLossModel &o);
56e477db65b2 add composite capability to PropagationLossModel base class.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3388
diff changeset
    59
  PropagationLossModel &operator = (const PropagationLossModel &o);
4059
251351372d8d PropagationLossModel::GetLoss -> CalcRxPower. Add ThreeLogDistancePropagationLossModel.
Timo Bingmann <timo.bingmann@student.kit.edu>
parents: 3909
diff changeset
    60
  virtual double DoCalcRxPower (double txPowerDbm,
251351372d8d PropagationLossModel::GetLoss -> CalcRxPower. Add ThreeLogDistancePropagationLossModel.
Timo Bingmann <timo.bingmann@student.kit.edu>
parents: 3909
diff changeset
    61
                                Ptr<MobilityModel> a,
251351372d8d PropagationLossModel::GetLoss -> CalcRxPower. Add ThreeLogDistancePropagationLossModel.
Timo Bingmann <timo.bingmann@student.kit.edu>
parents: 3909
diff changeset
    62
                                Ptr<MobilityModel> b) const = 0;
3907
56e477db65b2 add composite capability to PropagationLossModel base class.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3388
diff changeset
    63
56e477db65b2 add composite capability to PropagationLossModel base class.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3388
diff changeset
    64
  Ptr<PropagationLossModel> m_next;
1959
f64684973ea8 support DefaultValue
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1882
diff changeset
    65
};
f64684973ea8 support DefaultValue
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1882
diff changeset
    66
2032
dac45a8371f9 doxygen PropagationLossModel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2031
diff changeset
    67
/**
4059
251351372d8d PropagationLossModel::GetLoss -> CalcRxPower. Add ThreeLogDistancePropagationLossModel.
Timo Bingmann <timo.bingmann@student.kit.edu>
parents: 3909
diff changeset
    68
 * \brief The propagation loss follows a random distribution.
2032
dac45a8371f9 doxygen PropagationLossModel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2031
diff changeset
    69
 */ 
1959
f64684973ea8 support DefaultValue
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1882
diff changeset
    70
class RandomPropagationLossModel : public PropagationLossModel
f64684973ea8 support DefaultValue
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1882
diff changeset
    71
{
f64684973ea8 support DefaultValue
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1882
diff changeset
    72
public:
2549
fe90cf0b2c63 port propagation models and channel to attributes.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2336
diff changeset
    73
  static TypeId GetTypeId (void);
fe90cf0b2c63 port propagation models and channel to attributes.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2336
diff changeset
    74
1959
f64684973ea8 support DefaultValue
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1882
diff changeset
    75
  RandomPropagationLossModel ();
f64684973ea8 support DefaultValue
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1882
diff changeset
    76
  virtual ~RandomPropagationLossModel ();
f64684973ea8 support DefaultValue
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1882
diff changeset
    77
3907
56e477db65b2 add composite capability to PropagationLossModel base class.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3388
diff changeset
    78
private:
3908
232d52317a18 fix build.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3907
diff changeset
    79
  RandomPropagationLossModel (const RandomPropagationLossModel &o);
232d52317a18 fix build.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3907
diff changeset
    80
  RandomPropagationLossModel & operator = (const RandomPropagationLossModel &o);
4059
251351372d8d PropagationLossModel::GetLoss -> CalcRxPower. Add ThreeLogDistancePropagationLossModel.
Timo Bingmann <timo.bingmann@student.kit.edu>
parents: 3909
diff changeset
    81
  virtual double DoCalcRxPower (double txPowerDbm,
251351372d8d PropagationLossModel::GetLoss -> CalcRxPower. Add ThreeLogDistancePropagationLossModel.
Timo Bingmann <timo.bingmann@student.kit.edu>
parents: 3909
diff changeset
    82
                                Ptr<MobilityModel> a,
251351372d8d PropagationLossModel::GetLoss -> CalcRxPower. Add ThreeLogDistancePropagationLossModel.
Timo Bingmann <timo.bingmann@student.kit.edu>
parents: 3909
diff changeset
    83
                                Ptr<MobilityModel> b) const;
2336
28ce210b91bb bug 133: automate RandomVariable memory management.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2072
diff changeset
    84
  RandomVariable m_variable;
1882
061f7f7f9992 start of work towards port of wifi code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    85
};
061f7f7f9992 start of work towards port of wifi code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    86
2032
dac45a8371f9 doxygen PropagationLossModel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2031
diff changeset
    87
/**
dac45a8371f9 doxygen PropagationLossModel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2031
diff changeset
    88
 * \brief a Friis propagation loss model
dac45a8371f9 doxygen PropagationLossModel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2031
diff changeset
    89
 *
2062
88302488c05b Document the friis propagation model.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2045
diff changeset
    90
 * The Friis propagation loss model was first described in
88302488c05b Document the friis propagation model.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2045
diff changeset
    91
 * "A Note on a Simple Transmission Formula", by 
88302488c05b Document the friis propagation model.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2045
diff changeset
    92
 * "Harald T. Friis".
88302488c05b Document the friis propagation model.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2045
diff changeset
    93
 * 
88302488c05b Document the friis propagation model.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2045
diff changeset
    94
 * The original equation was described as:
88302488c05b Document the friis propagation model.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2045
diff changeset
    95
 *  \f$ \frac{P_r}{P_t} = \frac{A_r A_t}{d^2\lambda^2} \f$
88302488c05b Document the friis propagation model.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2045
diff changeset
    96
 *  with the following equation for the case of an
88302488c05b Document the friis propagation model.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2045
diff changeset
    97
 *  isotropic antenna with no heat loss:
88302488c05b Document the friis propagation model.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2045
diff changeset
    98
 *  \f$ A_{isotr.} = \frac{\lambda^2}{4\pi} \f$
88302488c05b Document the friis propagation model.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2045
diff changeset
    99
 *
88302488c05b Document the friis propagation model.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2045
diff changeset
   100
 * The final equation becomes:
88302488c05b Document the friis propagation model.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2045
diff changeset
   101
 * \f$ \frac{P_r}{P_t} = \frac{\lambda^2}{(4 \pi d)^2} \f$
88302488c05b Document the friis propagation model.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2045
diff changeset
   102
 *
88302488c05b Document the friis propagation model.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2045
diff changeset
   103
 * Modern extensions to this original equation are:
88302488c05b Document the friis propagation model.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2045
diff changeset
   104
 * \f$ P_r = \frac{P_t G_t G_r \lambda^2}{(4 \pi d)^2 L}\f$
88302488c05b Document the friis propagation model.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2045
diff changeset
   105
 *
88302488c05b Document the friis propagation model.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2045
diff changeset
   106
 * With:
88302488c05b Document the friis propagation model.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2045
diff changeset
   107
 *  - \f$ P_r \f$ : reception power (W)
88302488c05b Document the friis propagation model.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2045
diff changeset
   108
 *  - \f$ P_t \f$ : transmission power (W)
88302488c05b Document the friis propagation model.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2045
diff changeset
   109
 *  - \f$ G_t \f$ : transmission gain (unit-less)
88302488c05b Document the friis propagation model.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2045
diff changeset
   110
 *  - \f$ G_r \f$ : reception gain (unit-less)
88302488c05b Document the friis propagation model.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2045
diff changeset
   111
 *  - \f$ \lambda \f$ : wavelength (m)
88302488c05b Document the friis propagation model.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2045
diff changeset
   112
 *  - \f$ d \f$ : distance (m)
88302488c05b Document the friis propagation model.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2045
diff changeset
   113
 *  - \f$ L \f$ : system loss (unit-less)
88302488c05b Document the friis propagation model.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2045
diff changeset
   114
 *
2064
a1adc9960e50 handle min distance for friis model in a saner way
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2063
diff changeset
   115
 *
a1adc9960e50 handle min distance for friis model in a saner way
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2063
diff changeset
   116
 * This model is invalid for small distance values.
a1adc9960e50 handle min distance for friis model in a saner way
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2063
diff changeset
   117
 * The current implementation returns the txpower as the rxpower
2595
b504951bcca8 fix doxygen errors
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2549
diff changeset
   118
 * for any distance smaller than MinDistance.
2032
dac45a8371f9 doxygen PropagationLossModel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2031
diff changeset
   119
 */
1882
061f7f7f9992 start of work towards port of wifi code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   120
class FriisPropagationLossModel : public PropagationLossModel
061f7f7f9992 start of work towards port of wifi code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   121
{
061f7f7f9992 start of work towards port of wifi code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   122
public:
2549
fe90cf0b2c63 port propagation models and channel to attributes.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2336
diff changeset
   123
  static TypeId GetTypeId (void);
1882
061f7f7f9992 start of work towards port of wifi code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   124
  FriisPropagationLossModel ();
2032
dac45a8371f9 doxygen PropagationLossModel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2031
diff changeset
   125
  /**
dac45a8371f9 doxygen PropagationLossModel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2031
diff changeset
   126
   * \param frequency (Hz)
dac45a8371f9 doxygen PropagationLossModel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2031
diff changeset
   127
   * \param speed (m/s)
dac45a8371f9 doxygen PropagationLossModel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2031
diff changeset
   128
   *
dac45a8371f9 doxygen PropagationLossModel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2031
diff changeset
   129
   * Set the main wavelength used in the Friis model 
dac45a8371f9 doxygen PropagationLossModel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2031
diff changeset
   130
   * calculation.
dac45a8371f9 doxygen PropagationLossModel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2031
diff changeset
   131
   */
1882
061f7f7f9992 start of work towards port of wifi code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   132
  void SetLambda (double frequency, double speed);
2032
dac45a8371f9 doxygen PropagationLossModel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2031
diff changeset
   133
  /**
dac45a8371f9 doxygen PropagationLossModel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2031
diff changeset
   134
   * \param lambda (m) the wavelength
dac45a8371f9 doxygen PropagationLossModel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2031
diff changeset
   135
   *
dac45a8371f9 doxygen PropagationLossModel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2031
diff changeset
   136
   * Set the main wavelength used in the Friis model 
dac45a8371f9 doxygen PropagationLossModel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2031
diff changeset
   137
   * calculation.
dac45a8371f9 doxygen PropagationLossModel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2031
diff changeset
   138
   */
1882
061f7f7f9992 start of work towards port of wifi code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   139
  void SetLambda (double lambda);
2032
dac45a8371f9 doxygen PropagationLossModel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2031
diff changeset
   140
  /**
dac45a8371f9 doxygen PropagationLossModel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2031
diff changeset
   141
   * \param systemLoss (dimension-less)
dac45a8371f9 doxygen PropagationLossModel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2031
diff changeset
   142
   *
dac45a8371f9 doxygen PropagationLossModel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2031
diff changeset
   143
   * Set the system loss used by the Friis propagation model.
dac45a8371f9 doxygen PropagationLossModel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2031
diff changeset
   144
   */
1882
061f7f7f9992 start of work towards port of wifi code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   145
  void SetSystemLoss (double systemLoss);
2064
a1adc9960e50 handle min distance for friis model in a saner way
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2063
diff changeset
   146
a1adc9960e50 handle min distance for friis model in a saner way
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2063
diff changeset
   147
  /**
a1adc9960e50 handle min distance for friis model in a saner way
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2063
diff changeset
   148
   * \param minDistance the minimum distance
a1adc9960e50 handle min distance for friis model in a saner way
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2063
diff changeset
   149
   *
a1adc9960e50 handle min distance for friis model in a saner way
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2063
diff changeset
   150
   * Below this distance, the txpower is returned
a1adc9960e50 handle min distance for friis model in a saner way
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2063
diff changeset
   151
   * unmodified as the rxpower.
a1adc9960e50 handle min distance for friis model in a saner way
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2063
diff changeset
   152
   */
a1adc9960e50 handle min distance for friis model in a saner way
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2063
diff changeset
   153
  void SetMinDistance (double minDistance);
a1adc9960e50 handle min distance for friis model in a saner way
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2063
diff changeset
   154
2032
dac45a8371f9 doxygen PropagationLossModel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2031
diff changeset
   155
  /**
3388
0258bd0793ab add missing implementations
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2940
diff changeset
   156
   * \returns the minimum distance.
0258bd0793ab add missing implementations
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2940
diff changeset
   157
   */
0258bd0793ab add missing implementations
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2940
diff changeset
   158
  double GetMinDistance (void) const;
0258bd0793ab add missing implementations
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2940
diff changeset
   159
0258bd0793ab add missing implementations
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2940
diff changeset
   160
  /**
2032
dac45a8371f9 doxygen PropagationLossModel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2031
diff changeset
   161
   * \returns the current wavelength (m)
dac45a8371f9 doxygen PropagationLossModel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2031
diff changeset
   162
   */
1882
061f7f7f9992 start of work towards port of wifi code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   163
  double GetLambda (void) const;
2032
dac45a8371f9 doxygen PropagationLossModel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2031
diff changeset
   164
  /**
dac45a8371f9 doxygen PropagationLossModel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2031
diff changeset
   165
   * \returns the current system loss (dimention-less)
dac45a8371f9 doxygen PropagationLossModel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2031
diff changeset
   166
   */
1882
061f7f7f9992 start of work towards port of wifi code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   167
  double GetSystemLoss (void) const;
061f7f7f9992 start of work towards port of wifi code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   168
061f7f7f9992 start of work towards port of wifi code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   169
private:
3908
232d52317a18 fix build.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3907
diff changeset
   170
  FriisPropagationLossModel (const FriisPropagationLossModel &o);
232d52317a18 fix build.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3907
diff changeset
   171
  FriisPropagationLossModel & operator = (const FriisPropagationLossModel &o);
4059
251351372d8d PropagationLossModel::GetLoss -> CalcRxPower. Add ThreeLogDistancePropagationLossModel.
Timo Bingmann <timo.bingmann@student.kit.edu>
parents: 3909
diff changeset
   172
  virtual double DoCalcRxPower (double txPowerDbm,
251351372d8d PropagationLossModel::GetLoss -> CalcRxPower. Add ThreeLogDistancePropagationLossModel.
Timo Bingmann <timo.bingmann@student.kit.edu>
parents: 3909
diff changeset
   173
                                Ptr<MobilityModel> a,
251351372d8d PropagationLossModel::GetLoss -> CalcRxPower. Add ThreeLogDistancePropagationLossModel.
Timo Bingmann <timo.bingmann@student.kit.edu>
parents: 3909
diff changeset
   174
                                Ptr<MobilityModel> b) const;
1882
061f7f7f9992 start of work towards port of wifi code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   175
  double DbmToW (double dbm) const;
061f7f7f9992 start of work towards port of wifi code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   176
  double DbmFromW (double w) const;
061f7f7f9992 start of work towards port of wifi code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   177
061f7f7f9992 start of work towards port of wifi code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   178
  static const double PI;
061f7f7f9992 start of work towards port of wifi code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   179
  double m_lambda;
061f7f7f9992 start of work towards port of wifi code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   180
  double m_systemLoss;
2064
a1adc9960e50 handle min distance for friis model in a saner way
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2063
diff changeset
   181
  double m_minDistance;
1882
061f7f7f9992 start of work towards port of wifi code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   182
};
061f7f7f9992 start of work towards port of wifi code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   183
2032
dac45a8371f9 doxygen PropagationLossModel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2031
diff changeset
   184
/**
2063
8663fe258bce document log distance propagation loss model.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2062
diff changeset
   185
 * \brief a log distance propagation model.
8663fe258bce document log distance propagation loss model.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2062
diff changeset
   186
 *
8663fe258bce document log distance propagation loss model.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2062
diff changeset
   187
 * This model calculates the reception power with a so-called
8663fe258bce document log distance propagation loss model.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2062
diff changeset
   188
 * log-distance propagation model:
8663fe258bce document log distance propagation loss model.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2062
diff changeset
   189
 * \f$ L = L_0 + 10 n log_{10}(\frac{d}{d_0})\f$
2032
dac45a8371f9 doxygen PropagationLossModel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2031
diff changeset
   190
 *
2063
8663fe258bce document log distance propagation loss model.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2062
diff changeset
   191
 * where:
8663fe258bce document log distance propagation loss model.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2062
diff changeset
   192
 *  - \f$ n \f$ : the path loss distance exponent
8663fe258bce document log distance propagation loss model.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2062
diff changeset
   193
 *  - \f$ d_0 \f$ : reference distance (m)
8663fe258bce document log distance propagation loss model.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2062
diff changeset
   194
 *  - \f$ L_0 \f$ : path loss at reference distance (dB)
8663fe258bce document log distance propagation loss model.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2062
diff changeset
   195
 *  - \f$ d \f$ : distance (m)
8663fe258bce document log distance propagation loss model.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2062
diff changeset
   196
 *  - \f$ L \f$ : path loss (dB)
8663fe258bce document log distance propagation loss model.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2062
diff changeset
   197
 *
8663fe258bce document log distance propagation loss model.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2062
diff changeset
   198
 * When the path loss is requested at a distance smaller than
8663fe258bce document log distance propagation loss model.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2062
diff changeset
   199
 * the reference distance, the tx power is returned.
8663fe258bce document log distance propagation loss model.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2062
diff changeset
   200
 *
2032
dac45a8371f9 doxygen PropagationLossModel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2031
diff changeset
   201
 */
2063
8663fe258bce document log distance propagation loss model.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2062
diff changeset
   202
class LogDistancePropagationLossModel : public PropagationLossModel
1882
061f7f7f9992 start of work towards port of wifi code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   203
{
061f7f7f9992 start of work towards port of wifi code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   204
public:
2549
fe90cf0b2c63 port propagation models and channel to attributes.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2336
diff changeset
   205
  static TypeId GetTypeId (void);
2063
8663fe258bce document log distance propagation loss model.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2062
diff changeset
   206
  LogDistancePropagationLossModel ();
1882
061f7f7f9992 start of work towards port of wifi code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   207
2032
dac45a8371f9 doxygen PropagationLossModel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2031
diff changeset
   208
  /**
dac45a8371f9 doxygen PropagationLossModel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2031
diff changeset
   209
   * \param n the path loss exponent.
dac45a8371f9 doxygen PropagationLossModel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2031
diff changeset
   210
   * Set the path loss exponent.
dac45a8371f9 doxygen PropagationLossModel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2031
diff changeset
   211
   */
1882
061f7f7f9992 start of work towards port of wifi code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   212
  void SetPathLossExponent (double n);
2032
dac45a8371f9 doxygen PropagationLossModel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2031
diff changeset
   213
  /** 
dac45a8371f9 doxygen PropagationLossModel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2031
diff changeset
   214
   * \returns the current path loss exponent.
dac45a8371f9 doxygen PropagationLossModel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2031
diff changeset
   215
   */
1882
061f7f7f9992 start of work towards port of wifi code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   216
  double GetPathLossExponent (void) const;
061f7f7f9992 start of work towards port of wifi code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   217
3909
4e7e594b0b7e get rid of reference model for log distance model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3908
diff changeset
   218
  void SetReference (double referenceDistance, double referenceLoss);
1882
061f7f7f9992 start of work towards port of wifi code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   219
  
061f7f7f9992 start of work towards port of wifi code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   220
private:
3908
232d52317a18 fix build.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3907
diff changeset
   221
  LogDistancePropagationLossModel (const LogDistancePropagationLossModel &o);
232d52317a18 fix build.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3907
diff changeset
   222
  LogDistancePropagationLossModel & operator = (const LogDistancePropagationLossModel &o);
4059
251351372d8d PropagationLossModel::GetLoss -> CalcRxPower. Add ThreeLogDistancePropagationLossModel.
Timo Bingmann <timo.bingmann@student.kit.edu>
parents: 3909
diff changeset
   223
  virtual double DoCalcRxPower (double txPowerDbm,
251351372d8d PropagationLossModel::GetLoss -> CalcRxPower. Add ThreeLogDistancePropagationLossModel.
Timo Bingmann <timo.bingmann@student.kit.edu>
parents: 3909
diff changeset
   224
                                Ptr<MobilityModel> a,
251351372d8d PropagationLossModel::GetLoss -> CalcRxPower. Add ThreeLogDistancePropagationLossModel.
Timo Bingmann <timo.bingmann@student.kit.edu>
parents: 3909
diff changeset
   225
                                Ptr<MobilityModel> b) const;
1959
f64684973ea8 support DefaultValue
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1882
diff changeset
   226
  static Ptr<PropagationLossModel> CreateDefaultReference (void);
1882
061f7f7f9992 start of work towards port of wifi code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   227
061f7f7f9992 start of work towards port of wifi code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   228
  double m_exponent;
2063
8663fe258bce document log distance propagation loss model.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2062
diff changeset
   229
  double m_referenceDistance;
3909
4e7e594b0b7e get rid of reference model for log distance model
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3908
diff changeset
   230
  double m_referenceLoss;
1882
061f7f7f9992 start of work towards port of wifi code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   231
};
061f7f7f9992 start of work towards port of wifi code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   232
4059
251351372d8d PropagationLossModel::GetLoss -> CalcRxPower. Add ThreeLogDistancePropagationLossModel.
Timo Bingmann <timo.bingmann@student.kit.edu>
parents: 3909
diff changeset
   233
/**
251351372d8d PropagationLossModel::GetLoss -> CalcRxPower. Add ThreeLogDistancePropagationLossModel.
Timo Bingmann <timo.bingmann@student.kit.edu>
parents: 3909
diff changeset
   234
 * \brief A log distance path loss propagation model with three distance
251351372d8d PropagationLossModel::GetLoss -> CalcRxPower. Add ThreeLogDistancePropagationLossModel.
Timo Bingmann <timo.bingmann@student.kit.edu>
parents: 3909
diff changeset
   235
 * fields. This model is the same as ns3::LogDistancePropagationLossModel
251351372d8d PropagationLossModel::GetLoss -> CalcRxPower. Add ThreeLogDistancePropagationLossModel.
Timo Bingmann <timo.bingmann@student.kit.edu>
parents: 3909
diff changeset
   236
 * except that it has three distance fields: near, middle and far with
251351372d8d PropagationLossModel::GetLoss -> CalcRxPower. Add ThreeLogDistancePropagationLossModel.
Timo Bingmann <timo.bingmann@student.kit.edu>
parents: 3909
diff changeset
   237
 * different exponents.
251351372d8d PropagationLossModel::GetLoss -> CalcRxPower. Add ThreeLogDistancePropagationLossModel.
Timo Bingmann <timo.bingmann@student.kit.edu>
parents: 3909
diff changeset
   238
 *
251351372d8d PropagationLossModel::GetLoss -> CalcRxPower. Add ThreeLogDistancePropagationLossModel.
Timo Bingmann <timo.bingmann@student.kit.edu>
parents: 3909
diff changeset
   239
 * Within each field the reception power is calculated using the log-distance
251351372d8d PropagationLossModel::GetLoss -> CalcRxPower. Add ThreeLogDistancePropagationLossModel.
Timo Bingmann <timo.bingmann@student.kit.edu>
parents: 3909
diff changeset
   240
 * propagation equation:
251351372d8d PropagationLossModel::GetLoss -> CalcRxPower. Add ThreeLogDistancePropagationLossModel.
Timo Bingmann <timo.bingmann@student.kit.edu>
parents: 3909
diff changeset
   241
 * \f[ L = L_0 + 10 \cdot n_0 log_{10}(\frac{d}{d_0})\f]
251351372d8d PropagationLossModel::GetLoss -> CalcRxPower. Add ThreeLogDistancePropagationLossModel.
Timo Bingmann <timo.bingmann@student.kit.edu>
parents: 3909
diff changeset
   242
 * Each field begins where the previous ends and all together form a continuous function.
251351372d8d PropagationLossModel::GetLoss -> CalcRxPower. Add ThreeLogDistancePropagationLossModel.
Timo Bingmann <timo.bingmann@student.kit.edu>
parents: 3909
diff changeset
   243
 *
251351372d8d PropagationLossModel::GetLoss -> CalcRxPower. Add ThreeLogDistancePropagationLossModel.
Timo Bingmann <timo.bingmann@student.kit.edu>
parents: 3909
diff changeset
   244
 * There are three valid distance fields: near, middle, far. Actually four: the
251351372d8d PropagationLossModel::GetLoss -> CalcRxPower. Add ThreeLogDistancePropagationLossModel.
Timo Bingmann <timo.bingmann@student.kit.edu>
parents: 3909
diff changeset
   245
 * first from 0 to the reference distance is invalid and returns txPowerDbm.
251351372d8d PropagationLossModel::GetLoss -> CalcRxPower. Add ThreeLogDistancePropagationLossModel.
Timo Bingmann <timo.bingmann@student.kit.edu>
parents: 3909
diff changeset
   246
 *
251351372d8d PropagationLossModel::GetLoss -> CalcRxPower. Add ThreeLogDistancePropagationLossModel.
Timo Bingmann <timo.bingmann@student.kit.edu>
parents: 3909
diff changeset
   247
 * \f[ \underbrace{0 \cdots\cdots}_{=0} \underbrace{d_0 \cdots\cdots}_{n_0} \underbrace{d_1 \cdots\cdots}_{n_1} \underbrace{d_2 \cdots\cdots}_{n_2} \infty \f]
251351372d8d PropagationLossModel::GetLoss -> CalcRxPower. Add ThreeLogDistancePropagationLossModel.
Timo Bingmann <timo.bingmann@student.kit.edu>
parents: 3909
diff changeset
   248
 *
251351372d8d PropagationLossModel::GetLoss -> CalcRxPower. Add ThreeLogDistancePropagationLossModel.
Timo Bingmann <timo.bingmann@student.kit.edu>
parents: 3909
diff changeset
   249
 * Complete formula for the path loss in dB:
251351372d8d PropagationLossModel::GetLoss -> CalcRxPower. Add ThreeLogDistancePropagationLossModel.
Timo Bingmann <timo.bingmann@student.kit.edu>
parents: 3909
diff changeset
   250
 *
251351372d8d PropagationLossModel::GetLoss -> CalcRxPower. Add ThreeLogDistancePropagationLossModel.
Timo Bingmann <timo.bingmann@student.kit.edu>
parents: 3909
diff changeset
   251
 * \f[\displaystyle L =
251351372d8d PropagationLossModel::GetLoss -> CalcRxPower. Add ThreeLogDistancePropagationLossModel.
Timo Bingmann <timo.bingmann@student.kit.edu>
parents: 3909
diff changeset
   252
\begin{cases}
251351372d8d PropagationLossModel::GetLoss -> CalcRxPower. Add ThreeLogDistancePropagationLossModel.
Timo Bingmann <timo.bingmann@student.kit.edu>
parents: 3909
diff changeset
   253
0 & d < d_0 \\
251351372d8d PropagationLossModel::GetLoss -> CalcRxPower. Add ThreeLogDistancePropagationLossModel.
Timo Bingmann <timo.bingmann@student.kit.edu>
parents: 3909
diff changeset
   254
L_0 + 10 \cdot n_0 \log_{10}(\frac{d}{d_0}) & d_0 \leq d < d_1 \\
251351372d8d PropagationLossModel::GetLoss -> CalcRxPower. Add ThreeLogDistancePropagationLossModel.
Timo Bingmann <timo.bingmann@student.kit.edu>
parents: 3909
diff changeset
   255
L_0 + 10 \cdot n_0 \log_{10}(\frac{d_1}{d_0}) + 10 \cdot n_1 \log_{10}(\frac{d}{d_1}) & d_1 \leq d < d_2 \\
251351372d8d PropagationLossModel::GetLoss -> CalcRxPower. Add ThreeLogDistancePropagationLossModel.
Timo Bingmann <timo.bingmann@student.kit.edu>
parents: 3909
diff changeset
   256
L_0 + 10 \cdot n_0 \log_{10}(\frac{d_1}{d_0}) + 10 \cdot n_1 \log_{10}(\frac{d_2}{d_1}) + 10 \cdot n_2 \log_{10}(\frac{d}{d_2})& d_2 \leq d
251351372d8d PropagationLossModel::GetLoss -> CalcRxPower. Add ThreeLogDistancePropagationLossModel.
Timo Bingmann <timo.bingmann@student.kit.edu>
parents: 3909
diff changeset
   257
\end{cases}\f]
251351372d8d PropagationLossModel::GetLoss -> CalcRxPower. Add ThreeLogDistancePropagationLossModel.
Timo Bingmann <timo.bingmann@student.kit.edu>
parents: 3909
diff changeset
   258
 *
251351372d8d PropagationLossModel::GetLoss -> CalcRxPower. Add ThreeLogDistancePropagationLossModel.
Timo Bingmann <timo.bingmann@student.kit.edu>
parents: 3909
diff changeset
   259
 * where:
251351372d8d PropagationLossModel::GetLoss -> CalcRxPower. Add ThreeLogDistancePropagationLossModel.
Timo Bingmann <timo.bingmann@student.kit.edu>
parents: 3909
diff changeset
   260
 *  - \f$ L \f$ : resulting path loss (dB)
251351372d8d PropagationLossModel::GetLoss -> CalcRxPower. Add ThreeLogDistancePropagationLossModel.
Timo Bingmann <timo.bingmann@student.kit.edu>
parents: 3909
diff changeset
   261
 *  - \f$ d \f$ : distance (m)
251351372d8d PropagationLossModel::GetLoss -> CalcRxPower. Add ThreeLogDistancePropagationLossModel.
Timo Bingmann <timo.bingmann@student.kit.edu>
parents: 3909
diff changeset
   262
 *  - \f$ d_0, d_1, d_2 \f$ : three distance fields (m)
251351372d8d PropagationLossModel::GetLoss -> CalcRxPower. Add ThreeLogDistancePropagationLossModel.
Timo Bingmann <timo.bingmann@student.kit.edu>
parents: 3909
diff changeset
   263
 *  - \f$ n_0, n_1, n_2 \f$ : path loss distance exponent for each field (unitless)
251351372d8d PropagationLossModel::GetLoss -> CalcRxPower. Add ThreeLogDistancePropagationLossModel.
Timo Bingmann <timo.bingmann@student.kit.edu>
parents: 3909
diff changeset
   264
 *  - \f$ L_0 \f$ : path loss at reference distance (dB)
251351372d8d PropagationLossModel::GetLoss -> CalcRxPower. Add ThreeLogDistancePropagationLossModel.
Timo Bingmann <timo.bingmann@student.kit.edu>
parents: 3909
diff changeset
   265
 *
251351372d8d PropagationLossModel::GetLoss -> CalcRxPower. Add ThreeLogDistancePropagationLossModel.
Timo Bingmann <timo.bingmann@student.kit.edu>
parents: 3909
diff changeset
   266
 * When the path loss is requested at a distance smaller than the reference
251351372d8d PropagationLossModel::GetLoss -> CalcRxPower. Add ThreeLogDistancePropagationLossModel.
Timo Bingmann <timo.bingmann@student.kit.edu>
parents: 3909
diff changeset
   267
 * distance \f$ d_0 \f$, the tx power (with no path loss) is returned. The
251351372d8d PropagationLossModel::GetLoss -> CalcRxPower. Add ThreeLogDistancePropagationLossModel.
Timo Bingmann <timo.bingmann@student.kit.edu>
parents: 3909
diff changeset
   268
 * reference distance defaults to 1m and reference loss defaults to
251351372d8d PropagationLossModel::GetLoss -> CalcRxPower. Add ThreeLogDistancePropagationLossModel.
Timo Bingmann <timo.bingmann@student.kit.edu>
parents: 3909
diff changeset
   269
 * ns3::FriisPropagationLossModel with 5.15 GHz and is thus \f$ L_0 \f$ = 46.67 dB.
251351372d8d PropagationLossModel::GetLoss -> CalcRxPower. Add ThreeLogDistancePropagationLossModel.
Timo Bingmann <timo.bingmann@student.kit.edu>
parents: 3909
diff changeset
   270
 */
251351372d8d PropagationLossModel::GetLoss -> CalcRxPower. Add ThreeLogDistancePropagationLossModel.
Timo Bingmann <timo.bingmann@student.kit.edu>
parents: 3909
diff changeset
   271
251351372d8d PropagationLossModel::GetLoss -> CalcRxPower. Add ThreeLogDistancePropagationLossModel.
Timo Bingmann <timo.bingmann@student.kit.edu>
parents: 3909
diff changeset
   272
class ThreeLogDistancePropagationLossModel : public PropagationLossModel
251351372d8d PropagationLossModel::GetLoss -> CalcRxPower. Add ThreeLogDistancePropagationLossModel.
Timo Bingmann <timo.bingmann@student.kit.edu>
parents: 3909
diff changeset
   273
{
251351372d8d PropagationLossModel::GetLoss -> CalcRxPower. Add ThreeLogDistancePropagationLossModel.
Timo Bingmann <timo.bingmann@student.kit.edu>
parents: 3909
diff changeset
   274
public:
251351372d8d PropagationLossModel::GetLoss -> CalcRxPower. Add ThreeLogDistancePropagationLossModel.
Timo Bingmann <timo.bingmann@student.kit.edu>
parents: 3909
diff changeset
   275
  static TypeId GetTypeId (void);
251351372d8d PropagationLossModel::GetLoss -> CalcRxPower. Add ThreeLogDistancePropagationLossModel.
Timo Bingmann <timo.bingmann@student.kit.edu>
parents: 3909
diff changeset
   276
  ThreeLogDistancePropagationLossModel ();
251351372d8d PropagationLossModel::GetLoss -> CalcRxPower. Add ThreeLogDistancePropagationLossModel.
Timo Bingmann <timo.bingmann@student.kit.edu>
parents: 3909
diff changeset
   277
251351372d8d PropagationLossModel::GetLoss -> CalcRxPower. Add ThreeLogDistancePropagationLossModel.
Timo Bingmann <timo.bingmann@student.kit.edu>
parents: 3909
diff changeset
   278
  // Parameters are all accessible via attributes.
251351372d8d PropagationLossModel::GetLoss -> CalcRxPower. Add ThreeLogDistancePropagationLossModel.
Timo Bingmann <timo.bingmann@student.kit.edu>
parents: 3909
diff changeset
   279
251351372d8d PropagationLossModel::GetLoss -> CalcRxPower. Add ThreeLogDistancePropagationLossModel.
Timo Bingmann <timo.bingmann@student.kit.edu>
parents: 3909
diff changeset
   280
private:
251351372d8d PropagationLossModel::GetLoss -> CalcRxPower. Add ThreeLogDistancePropagationLossModel.
Timo Bingmann <timo.bingmann@student.kit.edu>
parents: 3909
diff changeset
   281
  ThreeLogDistancePropagationLossModel (const ThreeLogDistancePropagationLossModel& o);
251351372d8d PropagationLossModel::GetLoss -> CalcRxPower. Add ThreeLogDistancePropagationLossModel.
Timo Bingmann <timo.bingmann@student.kit.edu>
parents: 3909
diff changeset
   282
  ThreeLogDistancePropagationLossModel& operator= (const ThreeLogDistancePropagationLossModel& o);
251351372d8d PropagationLossModel::GetLoss -> CalcRxPower. Add ThreeLogDistancePropagationLossModel.
Timo Bingmann <timo.bingmann@student.kit.edu>
parents: 3909
diff changeset
   283
251351372d8d PropagationLossModel::GetLoss -> CalcRxPower. Add ThreeLogDistancePropagationLossModel.
Timo Bingmann <timo.bingmann@student.kit.edu>
parents: 3909
diff changeset
   284
  virtual double DoCalcRxPower (double txPowerDbm,
251351372d8d PropagationLossModel::GetLoss -> CalcRxPower. Add ThreeLogDistancePropagationLossModel.
Timo Bingmann <timo.bingmann@student.kit.edu>
parents: 3909
diff changeset
   285
                                Ptr<MobilityModel> a,
251351372d8d PropagationLossModel::GetLoss -> CalcRxPower. Add ThreeLogDistancePropagationLossModel.
Timo Bingmann <timo.bingmann@student.kit.edu>
parents: 3909
diff changeset
   286
                                Ptr<MobilityModel> b) const;
251351372d8d PropagationLossModel::GetLoss -> CalcRxPower. Add ThreeLogDistancePropagationLossModel.
Timo Bingmann <timo.bingmann@student.kit.edu>
parents: 3909
diff changeset
   287
251351372d8d PropagationLossModel::GetLoss -> CalcRxPower. Add ThreeLogDistancePropagationLossModel.
Timo Bingmann <timo.bingmann@student.kit.edu>
parents: 3909
diff changeset
   288
  double m_distance0;
251351372d8d PropagationLossModel::GetLoss -> CalcRxPower. Add ThreeLogDistancePropagationLossModel.
Timo Bingmann <timo.bingmann@student.kit.edu>
parents: 3909
diff changeset
   289
  double m_distance1;
251351372d8d PropagationLossModel::GetLoss -> CalcRxPower. Add ThreeLogDistancePropagationLossModel.
Timo Bingmann <timo.bingmann@student.kit.edu>
parents: 3909
diff changeset
   290
  double m_distance2;
251351372d8d PropagationLossModel::GetLoss -> CalcRxPower. Add ThreeLogDistancePropagationLossModel.
Timo Bingmann <timo.bingmann@student.kit.edu>
parents: 3909
diff changeset
   291
251351372d8d PropagationLossModel::GetLoss -> CalcRxPower. Add ThreeLogDistancePropagationLossModel.
Timo Bingmann <timo.bingmann@student.kit.edu>
parents: 3909
diff changeset
   292
  double m_exponent0;
251351372d8d PropagationLossModel::GetLoss -> CalcRxPower. Add ThreeLogDistancePropagationLossModel.
Timo Bingmann <timo.bingmann@student.kit.edu>
parents: 3909
diff changeset
   293
  double m_exponent1;
251351372d8d PropagationLossModel::GetLoss -> CalcRxPower. Add ThreeLogDistancePropagationLossModel.
Timo Bingmann <timo.bingmann@student.kit.edu>
parents: 3909
diff changeset
   294
  double m_exponent2;
251351372d8d PropagationLossModel::GetLoss -> CalcRxPower. Add ThreeLogDistancePropagationLossModel.
Timo Bingmann <timo.bingmann@student.kit.edu>
parents: 3909
diff changeset
   295
251351372d8d PropagationLossModel::GetLoss -> CalcRxPower. Add ThreeLogDistancePropagationLossModel.
Timo Bingmann <timo.bingmann@student.kit.edu>
parents: 3909
diff changeset
   296
  double m_referenceLoss;
251351372d8d PropagationLossModel::GetLoss -> CalcRxPower. Add ThreeLogDistancePropagationLossModel.
Timo Bingmann <timo.bingmann@student.kit.edu>
parents: 3909
diff changeset
   297
};
251351372d8d PropagationLossModel::GetLoss -> CalcRxPower. Add ThreeLogDistancePropagationLossModel.
Timo Bingmann <timo.bingmann@student.kit.edu>
parents: 3909
diff changeset
   298
1882
061f7f7f9992 start of work towards port of wifi code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   299
} // namespace ns3
061f7f7f9992 start of work towards port of wifi code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   300
061f7f7f9992 start of work towards port of wifi code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   301
#endif /* PROPAGATION_LOSS_MODEL_H */