src/devices/wifi/propagation-loss-model.h
author Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
Fri, 15 Feb 2008 20:03:48 +0100
changeset 2336 28ce210b91bb
parent 2072 d46dde3cabbe
child 2549 fe90cf0b2c63
permissions -rw-r--r--
bug 133: automate RandomVariable memory management.
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>
8664ab76ff85 add missing headers
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2032
diff changeset
    19
 */
1882
061f7f7f9992 start of work towards port of wifi code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    20
#ifndef PROPAGATION_LOSS_MODEL_H
061f7f7f9992 start of work towards port of wifi code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    21
#define PROPAGATION_LOSS_MODEL_H
061f7f7f9992 start of work towards port of wifi code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    22
061f7f7f9992 start of work towards port of wifi code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    23
#include "ns3/object.h"
2336
28ce210b91bb bug 133: automate RandomVariable memory management.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2072
diff changeset
    24
#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
    25
061f7f7f9992 start of work towards port of wifi code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    26
namespace ns3 {
061f7f7f9992 start of work towards port of wifi code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    27
2031
567dbc2475fc replace distance by a pair of mobility models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1985
diff changeset
    28
class MobilityModel;
567dbc2475fc replace distance by a pair of mobility models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1985
diff changeset
    29
2032
dac45a8371f9 doxygen PropagationLossModel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2031
diff changeset
    30
/**
dac45a8371f9 doxygen PropagationLossModel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2031
diff changeset
    31
 * \brief Modelize the propagation loss through a transmission medium
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
 * Calculate the receive power (dbm) from a transmit power (dbm),
dac45a8371f9 doxygen PropagationLossModel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2031
diff changeset
    34
 * and, a mobility model for the source and destination positions.
dac45a8371f9 doxygen PropagationLossModel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2031
diff changeset
    35
 */
1882
061f7f7f9992 start of work towards port of wifi code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    36
class PropagationLossModel : public Object
061f7f7f9992 start of work towards port of wifi code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    37
{
061f7f7f9992 start of work towards port of wifi code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    38
public:
061f7f7f9992 start of work towards port of wifi code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    39
  virtual ~PropagationLossModel ();
2032
dac45a8371f9 doxygen PropagationLossModel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2031
diff changeset
    40
  /**
dac45a8371f9 doxygen PropagationLossModel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2031
diff changeset
    41
   * \param txPowerDbm the tx power
dac45a8371f9 doxygen PropagationLossModel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2031
diff changeset
    42
   * \param a the mobility model of the source
dac45a8371f9 doxygen PropagationLossModel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2031
diff changeset
    43
   * \param b the mobility model of the destination
dac45a8371f9 doxygen PropagationLossModel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2031
diff changeset
    44
   * \returns the receive power (dbm)
dac45a8371f9 doxygen PropagationLossModel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2031
diff changeset
    45
   */
1882
061f7f7f9992 start of work towards port of wifi code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    46
  virtual double GetRxPower (double txPowerDbm,
2031
567dbc2475fc replace distance by a pair of mobility models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1985
diff changeset
    47
			     Ptr<MobilityModel> a,
567dbc2475fc replace distance by a pair of mobility models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1985
diff changeset
    48
			     Ptr<MobilityModel> b) const = 0;
1959
f64684973ea8 support DefaultValue
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1882
diff changeset
    49
2032
dac45a8371f9 doxygen PropagationLossModel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2031
diff changeset
    50
  /**
dac45a8371f9 doxygen PropagationLossModel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2031
diff changeset
    51
   * \returns the default propagation loss model as specified
2045
d44a90e4c03f use valueref where needed.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2043
diff changeset
    52
   * by \valueref{PropagationLossModelType}.
2032
dac45a8371f9 doxygen PropagationLossModel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2031
diff changeset
    53
   */
1959
f64684973ea8 support DefaultValue
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1882
diff changeset
    54
  static Ptr<PropagationLossModel> CreateDefault (void);
f64684973ea8 support DefaultValue
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1882
diff changeset
    55
};
f64684973ea8 support DefaultValue
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1882
diff changeset
    56
2032
dac45a8371f9 doxygen PropagationLossModel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2031
diff changeset
    57
/**
dac45a8371f9 doxygen PropagationLossModel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2031
diff changeset
    58
 * \brief The propagation loss is random
dac45a8371f9 doxygen PropagationLossModel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2031
diff changeset
    59
 */ 
1959
f64684973ea8 support DefaultValue
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1882
diff changeset
    60
class RandomPropagationLossModel : public PropagationLossModel
f64684973ea8 support DefaultValue
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1882
diff changeset
    61
{
f64684973ea8 support DefaultValue
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1882
diff changeset
    62
public:
2032
dac45a8371f9 doxygen PropagationLossModel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2031
diff changeset
    63
  /**
2045
d44a90e4c03f use valueref where needed.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2043
diff changeset
    64
   * Use the default parameters from \valueref{RandomPropagationLossDistribution}.
2032
dac45a8371f9 doxygen PropagationLossModel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2031
diff changeset
    65
   */
1959
f64684973ea8 support DefaultValue
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1882
diff changeset
    66
  RandomPropagationLossModel ();
2032
dac45a8371f9 doxygen PropagationLossModel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2031
diff changeset
    67
  /**
dac45a8371f9 doxygen PropagationLossModel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2031
diff changeset
    68
   * \param variable the RandomVariable to use for this
dac45a8371f9 doxygen PropagationLossModel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2031
diff changeset
    69
   * instance.
dac45a8371f9 doxygen PropagationLossModel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2031
diff changeset
    70
   */
1959
f64684973ea8 support DefaultValue
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1882
diff changeset
    71
  RandomPropagationLossModel (const RandomVariable &variable);
f64684973ea8 support DefaultValue
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1882
diff changeset
    72
  virtual ~RandomPropagationLossModel ();
f64684973ea8 support DefaultValue
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1882
diff changeset
    73
f64684973ea8 support DefaultValue
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1882
diff changeset
    74
  virtual double GetRxPower (double txPowerDbm,
2031
567dbc2475fc replace distance by a pair of mobility models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1985
diff changeset
    75
			     Ptr<MobilityModel> a,
567dbc2475fc replace distance by a pair of mobility models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1985
diff changeset
    76
			     Ptr<MobilityModel> b) const;
1959
f64684973ea8 support DefaultValue
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1882
diff changeset
    77
private:
2336
28ce210b91bb bug 133: automate RandomVariable memory management.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2072
diff changeset
    78
  RandomVariable m_variable;
1882
061f7f7f9992 start of work towards port of wifi code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    79
};
061f7f7f9992 start of work towards port of wifi code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    80
2032
dac45a8371f9 doxygen PropagationLossModel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2031
diff changeset
    81
/**
dac45a8371f9 doxygen PropagationLossModel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2031
diff changeset
    82
 * \brief a Friis propagation loss model
dac45a8371f9 doxygen PropagationLossModel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2031
diff changeset
    83
 *
2062
88302488c05b Document the friis propagation model.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2045
diff changeset
    84
 * 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
    85
 * "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
    86
 * "Harald T. Friis".
88302488c05b Document the friis propagation model.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2045
diff changeset
    87
 * 
88302488c05b Document the friis propagation model.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2045
diff changeset
    88
 * The original equation was described as:
88302488c05b Document the friis propagation model.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2045
diff changeset
    89
 *  \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
    90
 *  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
    91
 *  isotropic antenna with no heat loss:
88302488c05b Document the friis propagation model.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2045
diff changeset
    92
 *  \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
    93
 *
88302488c05b Document the friis propagation model.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2045
diff changeset
    94
 * The final equation becomes:
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{\lambda^2}{(4 \pi d)^2} \f$
88302488c05b Document the friis propagation model.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2045
diff changeset
    96
 *
88302488c05b Document the friis propagation model.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2045
diff changeset
    97
 * Modern extensions to this original equation are:
88302488c05b Document the friis propagation model.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2045
diff changeset
    98
 * \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
    99
 *
88302488c05b Document the friis propagation model.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2045
diff changeset
   100
 * With:
88302488c05b Document the friis propagation model.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2045
diff changeset
   101
 *  - \f$ P_r \f$ : reception power (W)
88302488c05b Document the friis propagation model.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2045
diff changeset
   102
 *  - \f$ P_t \f$ : transmission power (W)
88302488c05b Document the friis propagation model.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2045
diff changeset
   103
 *  - \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
   104
 *  - \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
   105
 *  - \f$ \lambda \f$ : wavelength (m)
88302488c05b Document the friis propagation model.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2045
diff changeset
   106
 *  - \f$ d \f$ : distance (m)
88302488c05b Document the friis propagation model.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2045
diff changeset
   107
 *  - \f$ L \f$ : system loss (unit-less)
88302488c05b Document the friis propagation model.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2045
diff changeset
   108
 *
2064
a1adc9960e50 handle min distance for friis model in a saner way
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2063
diff changeset
   109
 *
a1adc9960e50 handle min distance for friis model in a saner way
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2063
diff changeset
   110
 * 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
   111
 * The current implementation returns the txpower 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
   112
 * for any distance smaller than \valueref{FriisPropagationLossMinDistance}.
2032
dac45a8371f9 doxygen PropagationLossModel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2031
diff changeset
   113
 */
1882
061f7f7f9992 start of work towards port of wifi code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   114
class FriisPropagationLossModel : public PropagationLossModel
061f7f7f9992 start of work towards port of wifi code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   115
{
061f7f7f9992 start of work towards port of wifi code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   116
public:
2032
dac45a8371f9 doxygen PropagationLossModel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2031
diff changeset
   117
  /**
2045
d44a90e4c03f use valueref where needed.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2043
diff changeset
   118
   * Use the default parameters from \valueref{FriisPropagationLossLambda},
2064
a1adc9960e50 handle min distance for friis model in a saner way
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2063
diff changeset
   119
   * \valueref{FriisPropagationLossSystemLoss}, and,
a1adc9960e50 handle min distance for friis model in a saner way
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2063
diff changeset
   120
   * \valueref{FriisPropagationLossMinDistance}.
2032
dac45a8371f9 doxygen PropagationLossModel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2031
diff changeset
   121
   */
1882
061f7f7f9992 start of work towards port of wifi code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   122
  FriisPropagationLossModel ();
2032
dac45a8371f9 doxygen PropagationLossModel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2031
diff changeset
   123
  /**
dac45a8371f9 doxygen PropagationLossModel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2031
diff changeset
   124
   * \param frequency (Hz)
dac45a8371f9 doxygen PropagationLossModel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2031
diff changeset
   125
   * \param speed (m/s)
dac45a8371f9 doxygen PropagationLossModel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2031
diff changeset
   126
   *
dac45a8371f9 doxygen PropagationLossModel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2031
diff changeset
   127
   * Set the main wavelength used in the Friis model 
dac45a8371f9 doxygen PropagationLossModel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2031
diff changeset
   128
   * calculation.
dac45a8371f9 doxygen PropagationLossModel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2031
diff changeset
   129
   */
1882
061f7f7f9992 start of work towards port of wifi code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   130
  void SetLambda (double frequency, double speed);
2032
dac45a8371f9 doxygen PropagationLossModel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2031
diff changeset
   131
  /**
dac45a8371f9 doxygen PropagationLossModel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2031
diff changeset
   132
   * \param lambda (m) the wavelength
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
   * Set the main wavelength used in the Friis model 
dac45a8371f9 doxygen PropagationLossModel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2031
diff changeset
   135
   * calculation.
dac45a8371f9 doxygen PropagationLossModel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2031
diff changeset
   136
   */
1882
061f7f7f9992 start of work towards port of wifi code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   137
  void SetLambda (double lambda);
2032
dac45a8371f9 doxygen PropagationLossModel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2031
diff changeset
   138
  /**
dac45a8371f9 doxygen PropagationLossModel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2031
diff changeset
   139
   * \param systemLoss (dimension-less)
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
   * Set the system loss used by the Friis propagation model.
dac45a8371f9 doxygen PropagationLossModel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2031
diff changeset
   142
   */
1882
061f7f7f9992 start of work towards port of wifi code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   143
  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
   144
a1adc9960e50 handle min distance for friis model in a saner way
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2063
diff changeset
   145
  /**
a1adc9960e50 handle min distance for friis model in a saner way
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2063
diff changeset
   146
   * \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
   147
   *
a1adc9960e50 handle min distance for friis model in a saner way
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2063
diff changeset
   148
   * 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
   149
   * 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
   150
   */
a1adc9960e50 handle min distance for friis model in a saner way
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2063
diff changeset
   151
  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
   152
2032
dac45a8371f9 doxygen PropagationLossModel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2031
diff changeset
   153
  /**
dac45a8371f9 doxygen PropagationLossModel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2031
diff changeset
   154
   * \returns the current wavelength (m)
dac45a8371f9 doxygen PropagationLossModel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2031
diff changeset
   155
   */
1882
061f7f7f9992 start of work towards port of wifi code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   156
  double GetLambda (void) const;
2032
dac45a8371f9 doxygen PropagationLossModel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2031
diff changeset
   157
  /**
dac45a8371f9 doxygen PropagationLossModel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2031
diff changeset
   158
   * \returns the current system loss (dimention-less)
dac45a8371f9 doxygen PropagationLossModel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2031
diff changeset
   159
   */
1882
061f7f7f9992 start of work towards port of wifi code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   160
  double GetSystemLoss (void) const;
061f7f7f9992 start of work towards port of wifi code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   161
061f7f7f9992 start of work towards port of wifi code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   162
  virtual double GetRxPower (double txPowerDbm,
2031
567dbc2475fc replace distance by a pair of mobility models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1985
diff changeset
   163
			     Ptr<MobilityModel> a,
567dbc2475fc replace distance by a pair of mobility models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1985
diff changeset
   164
			     Ptr<MobilityModel> b) const;
1882
061f7f7f9992 start of work towards port of wifi code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   165
private:
061f7f7f9992 start of work towards port of wifi code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   166
  double DbmToW (double dbm) const;
061f7f7f9992 start of work towards port of wifi code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   167
  double DbmFromW (double w) 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
  static const double PI;
061f7f7f9992 start of work towards port of wifi code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   170
  double m_lambda;
061f7f7f9992 start of work towards port of wifi code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   171
  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
   172
  double m_minDistance;
1882
061f7f7f9992 start of work towards port of wifi code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   173
};
061f7f7f9992 start of work towards port of wifi code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   174
2032
dac45a8371f9 doxygen PropagationLossModel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2031
diff changeset
   175
/**
2063
8663fe258bce document log distance propagation loss model.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2062
diff changeset
   176
 * \brief a log distance propagation model.
8663fe258bce document log distance propagation loss model.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2062
diff changeset
   177
 *
8663fe258bce document log distance propagation loss model.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2062
diff changeset
   178
 * 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
   179
 * log-distance propagation model:
8663fe258bce document log distance propagation loss model.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2062
diff changeset
   180
 * \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
   181
 *
2063
8663fe258bce document log distance propagation loss model.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2062
diff changeset
   182
 * where:
8663fe258bce document log distance propagation loss model.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2062
diff changeset
   183
 *  - \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
   184
 *  - \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
   185
 *  - \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
   186
 *  - \f$ d \f$ : distance (m)
8663fe258bce document log distance propagation loss model.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2062
diff changeset
   187
 *  - \f$ L \f$ : path loss (dB)
8663fe258bce document log distance propagation loss model.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2062
diff changeset
   188
 *
8663fe258bce document log distance propagation loss model.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2062
diff changeset
   189
 * 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
   190
 * 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
   191
 *
2032
dac45a8371f9 doxygen PropagationLossModel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2031
diff changeset
   192
 */
2063
8663fe258bce document log distance propagation loss model.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2062
diff changeset
   193
class LogDistancePropagationLossModel : public PropagationLossModel
1882
061f7f7f9992 start of work towards port of wifi code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   194
{
061f7f7f9992 start of work towards port of wifi code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   195
public:
2032
dac45a8371f9 doxygen PropagationLossModel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2031
diff changeset
   196
  /**
dac45a8371f9 doxygen PropagationLossModel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2031
diff changeset
   197
   * Use the default parameters from
2063
8663fe258bce document log distance propagation loss model.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2062
diff changeset
   198
   * \valueref{LogDistancePropagationLossExponent}, and,
8663fe258bce document log distance propagation loss model.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2062
diff changeset
   199
   * \valueref{LogDistancePropagationLossReferenceType}
2032
dac45a8371f9 doxygen PropagationLossModel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2031
diff changeset
   200
   * to create a new propagation loss model.
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
  LogDistancePropagationLossModel ();
1882
061f7f7f9992 start of work towards port of wifi code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   203
2032
dac45a8371f9 doxygen PropagationLossModel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2031
diff changeset
   204
  /**
dac45a8371f9 doxygen PropagationLossModel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2031
diff changeset
   205
   * \param n the path loss exponent.
dac45a8371f9 doxygen PropagationLossModel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2031
diff changeset
   206
   * Set the path loss exponent.
dac45a8371f9 doxygen PropagationLossModel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2031
diff changeset
   207
   */
1882
061f7f7f9992 start of work towards port of wifi code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   208
  void SetPathLossExponent (double n);
2032
dac45a8371f9 doxygen PropagationLossModel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2031
diff changeset
   209
  /** 
dac45a8371f9 doxygen PropagationLossModel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2031
diff changeset
   210
   * \returns the current 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
  double GetPathLossExponent (void) const;
061f7f7f9992 start of work towards port of wifi code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   213
2032
dac45a8371f9 doxygen PropagationLossModel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2031
diff changeset
   214
  /**
dac45a8371f9 doxygen PropagationLossModel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2031
diff changeset
   215
   * \param model the reference propagation model
dac45a8371f9 doxygen PropagationLossModel
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2031
diff changeset
   216
   */
1882
061f7f7f9992 start of work towards port of wifi code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   217
  void SetReferenceModel (Ptr<PropagationLossModel> model);
2063
8663fe258bce document log distance propagation loss model.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2062
diff changeset
   218
8663fe258bce document log distance propagation loss model.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2062
diff changeset
   219
  void SetReferenceDistance (double referenceDistance);
1882
061f7f7f9992 start of work towards port of wifi code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   220
  
061f7f7f9992 start of work towards port of wifi code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   221
  virtual double GetRxPower (double txPowerDbm,
2031
567dbc2475fc replace distance by a pair of mobility models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1985
diff changeset
   222
			     Ptr<MobilityModel> a,
567dbc2475fc replace distance by a pair of mobility models
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1985
diff changeset
   223
			     Ptr<MobilityModel> b) const;
1882
061f7f7f9992 start of work towards port of wifi code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   224
private:
1959
f64684973ea8 support DefaultValue
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1882
diff changeset
   225
  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
   226
061f7f7f9992 start of work towards port of wifi code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   227
  double m_exponent;
2063
8663fe258bce document log distance propagation loss model.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2062
diff changeset
   228
  double m_referenceDistance;
1882
061f7f7f9992 start of work towards port of wifi code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   229
  Ptr<PropagationLossModel> m_reference;
061f7f7f9992 start of work towards port of wifi code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   230
};
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
} // namespace ns3
061f7f7f9992 start of work towards port of wifi code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   233
061f7f7f9992 start of work towards port of wifi code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   234
#endif /* PROPAGATION_LOSS_MODEL_H */