src/devices/wifi/propagation-loss-model.h
changeset 6068 a2127017ecb4
parent 6067 ccbdc2b19ea5
parent 6062 f62b76f5c92a
child 6069 c21754b56036
--- a/src/devices/wifi/propagation-loss-model.h	Thu Feb 25 13:51:59 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,375 +0,0 @@
-/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
-/*
- * Copyright (c) 2005,2006,2007 INRIA
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as 
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- *
- * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
- * Contributions: Timo Bingmann <timo.bingmann@student.kit.edu>
- * Contributions: Gary Pei <guangyu.pei@boeing.com> for fixed RSS
- */
-
-#ifndef PROPAGATION_LOSS_MODEL_H
-#define PROPAGATION_LOSS_MODEL_H
-
-#include "ns3/object.h"
-#include "ns3/random-variable.h"
-
-namespace ns3 {
-
-class MobilityModel;
-
-/**
- * \brief Modelize the propagation loss through a transmission medium
- *
- * Calculate the receive power (dbm) from a transmit power (dbm)
- * and a mobility model for the source and destination positions.
- */
-class PropagationLossModel : public Object
-{
-public:
-  static TypeId GetTypeId (void);
-
-  PropagationLossModel ();
-  virtual ~PropagationLossModel ();
-
-  void SetNext (Ptr<PropagationLossModel> next);
-
-  /**
-   * \param txPowerDbm current transmission power (in dBm)
-   * \param a the mobility model of the source
-   * \param b the mobility model of the destination
-   * \returns the reception power after adding/multiplying propagation loss (in dBm)
-   */
-  double CalcRxPower (double txPowerDbm,
-                      Ptr<MobilityModel> a,
-                      Ptr<MobilityModel> b) const;
-private:
-  PropagationLossModel (const PropagationLossModel &o);
-  PropagationLossModel &operator = (const PropagationLossModel &o);
-  virtual double DoCalcRxPower (double txPowerDbm,
-                                Ptr<MobilityModel> a,
-                                Ptr<MobilityModel> b) const = 0;
-
-  Ptr<PropagationLossModel> m_next;
-};
-
-/**
- * \brief The propagation loss follows a random distribution.
- */ 
-class RandomPropagationLossModel : public PropagationLossModel
-{
-public:
-  static TypeId GetTypeId (void);
-
-  RandomPropagationLossModel ();
-  virtual ~RandomPropagationLossModel ();
-
-private:
-  RandomPropagationLossModel (const RandomPropagationLossModel &o);
-  RandomPropagationLossModel & operator = (const RandomPropagationLossModel &o);
-  virtual double DoCalcRxPower (double txPowerDbm,
-                                Ptr<MobilityModel> a,
-                                Ptr<MobilityModel> b) const;
-  RandomVariable m_variable;
-};
-
-/**
- * \brief a Friis propagation loss model
- *
- * The Friis propagation loss model was first described in
- * "A Note on a Simple Transmission Formula", by 
- * "Harald T. Friis".
- * 
- * The original equation was described as:
- *  \f$ \frac{P_r}{P_t} = \frac{A_r A_t}{d^2\lambda^2} \f$
- *  with the following equation for the case of an
- *  isotropic antenna with no heat loss:
- *  \f$ A_{isotr.} = \frac{\lambda^2}{4\pi} \f$
- *
- * The final equation becomes:
- * \f$ \frac{P_r}{P_t} = \frac{\lambda^2}{(4 \pi d)^2} \f$
- *
- * Modern extensions to this original equation are:
- * \f$ P_r = \frac{P_t G_t G_r \lambda^2}{(4 \pi d)^2 L}\f$
- *
- * With:
- *  - \f$ P_r \f$ : reception power (W)
- *  - \f$ P_t \f$ : transmission power (W)
- *  - \f$ G_t \f$ : transmission gain (unit-less)
- *  - \f$ G_r \f$ : reception gain (unit-less)
- *  - \f$ \lambda \f$ : wavelength (m)
- *  - \f$ d \f$ : distance (m)
- *  - \f$ L \f$ : system loss (unit-less)
- *
- *
- * This model is invalid for small distance values.
- * The current implementation returns the txpower as the rxpower
- * for any distance smaller than MinDistance.
- */
-class FriisPropagationLossModel : public PropagationLossModel
-{
-public:
-  static TypeId GetTypeId (void);
-  FriisPropagationLossModel ();
-  /**
-   * \param frequency (Hz)
-   * \param speed (m/s)
-   *
-   * Set the main wavelength used in the Friis model 
-   * calculation.
-   */
-  void SetLambda (double frequency, double speed);
-  /**
-   * \param lambda (m) the wavelength
-   *
-   * Set the main wavelength used in the Friis model 
-   * calculation.
-   */
-  void SetLambda (double lambda);
-  /**
-   * \param systemLoss (dimension-less)
-   *
-   * Set the system loss used by the Friis propagation model.
-   */
-  void SetSystemLoss (double systemLoss);
-
-  /**
-   * \param minDistance the minimum distance
-   *
-   * Below this distance, the txpower is returned
-   * unmodified as the rxpower.
-   */
-  void SetMinDistance (double minDistance);
-
-  /**
-   * \returns the minimum distance.
-   */
-  double GetMinDistance (void) const;
-
-  /**
-   * \returns the current wavelength (m)
-   */
-  double GetLambda (void) const;
-  /**
-   * \returns the current system loss (dimention-less)
-   */
-  double GetSystemLoss (void) const;
-
-private:
-  FriisPropagationLossModel (const FriisPropagationLossModel &o);
-  FriisPropagationLossModel & operator = (const FriisPropagationLossModel &o);
-  virtual double DoCalcRxPower (double txPowerDbm,
-                                Ptr<MobilityModel> a,
-                                Ptr<MobilityModel> b) const;
-  double DbmToW (double dbm) const;
-  double DbmFromW (double w) const;
-
-  static const double PI;
-  double m_lambda;
-  double m_systemLoss;
-  double m_minDistance;
-};
-
-/**
- * \brief a log distance propagation model.
- *
- * This model calculates the reception power with a so-called
- * log-distance propagation model:
- * \f$ L = L_0 + 10 n log_{10}(\frac{d}{d_0})\f$
- *
- * where:
- *  - \f$ n \f$ : the path loss distance exponent
- *  - \f$ d_0 \f$ : reference distance (m)
- *  - \f$ L_0 \f$ : path loss at reference distance (dB)
- *  - \f$ d \f$ : distance (m)
- *  - \f$ L \f$ : path loss (dB)
- *
- * When the path loss is requested at a distance smaller than
- * the reference distance, the tx power is returned.
- *
- */
-class LogDistancePropagationLossModel : public PropagationLossModel
-{
-public:
-  static TypeId GetTypeId (void);
-  LogDistancePropagationLossModel ();
-
-  /**
-   * \param n the path loss exponent.
-   * Set the path loss exponent.
-   */
-  void SetPathLossExponent (double n);
-  /** 
-   * \returns the current path loss exponent.
-   */
-  double GetPathLossExponent (void) const;
-
-  void SetReference (double referenceDistance, double referenceLoss);
-  
-private:
-  LogDistancePropagationLossModel (const LogDistancePropagationLossModel &o);
-  LogDistancePropagationLossModel & operator = (const LogDistancePropagationLossModel &o);
-  virtual double DoCalcRxPower (double txPowerDbm,
-                                Ptr<MobilityModel> a,
-                                Ptr<MobilityModel> b) const;
-  static Ptr<PropagationLossModel> CreateDefaultReference (void);
-
-  double m_exponent;
-  double m_referenceDistance;
-  double m_referenceLoss;
-};
-
-/**
- * \brief A log distance path loss propagation model with three distance
- * fields. This model is the same as ns3::LogDistancePropagationLossModel
- * except that it has three distance fields: near, middle and far with
- * different exponents.
- *
- * Within each field the reception power is calculated using the log-distance
- * propagation equation:
- * \f[ L = L_0 + 10 \cdot n_0 log_{10}(\frac{d}{d_0})\f]
- * Each field begins where the previous ends and all together form a continuous function.
- *
- * There are three valid distance fields: near, middle, far. Actually four: the
- * first from 0 to the reference distance is invalid and returns txPowerDbm.
- *
- * \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]
- *
- * Complete formula for the path loss in dB:
- *
- * \f[\displaystyle L =
-\begin{cases}
-0 & d < d_0 \\
-L_0 + 10 \cdot n_0 \log_{10}(\frac{d}{d_0}) & d_0 \leq d < d_1 \\
-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 \\
-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
-\end{cases}\f]
- *
- * where:
- *  - \f$ L \f$ : resulting path loss (dB)
- *  - \f$ d \f$ : distance (m)
- *  - \f$ d_0, d_1, d_2 \f$ : three distance fields (m)
- *  - \f$ n_0, n_1, n_2 \f$ : path loss distance exponent for each field (unitless)
- *  - \f$ L_0 \f$ : path loss at reference distance (dB)
- *
- * When the path loss is requested at a distance smaller than the reference
- * distance \f$ d_0 \f$, the tx power (with no path loss) is returned. The
- * reference distance defaults to 1m and reference loss defaults to
- * ns3::FriisPropagationLossModel with 5.15 GHz and is thus \f$ L_0 \f$ = 46.67 dB.
- */
-
-class ThreeLogDistancePropagationLossModel : public PropagationLossModel
-{
-public:
-  static TypeId GetTypeId (void);
-  ThreeLogDistancePropagationLossModel ();
-
-  // Parameters are all accessible via attributes.
-
-private:
-  ThreeLogDistancePropagationLossModel (const ThreeLogDistancePropagationLossModel& o);
-  ThreeLogDistancePropagationLossModel& operator= (const ThreeLogDistancePropagationLossModel& o);
-
-  virtual double DoCalcRxPower (double txPowerDbm,
-                                Ptr<MobilityModel> a,
-                                Ptr<MobilityModel> b) const;
-
-  double m_distance0;
-  double m_distance1;
-  double m_distance2;
-
-  double m_exponent0;
-  double m_exponent1;
-  double m_exponent2;
-
-  double m_referenceLoss;
-};
-
-/**
- * \brief Nakagami-m fast fading propagation loss model.
- *
- * The Nakagami-m distribution is applied to the power level. The probability
- * density function is defined as
- * \f[ p(x; m, \omega) = \frac{2 m^m}{\Gamma(m) \omega^m} x^{2m - 1} e^{-\frac{m}{\omega} x^2} = 2 x \cdot p_{\text{Gamma}}(x^2, m, \frac{m}{\omega}) \f]
- * with \f$ m \f$ the fading depth parameter and \f$ \omega \f$ the average received power.
- *
- * It is implemented by either a ns3::GammaVariable or a ns3::ErlangVariable
- * random variable.
- *
- * Like in ns3::ThreeLogDistancePropagationLossModel, the m parameter is varied
- * over three distance fields:
- * \f[ \underbrace{0 \cdots\cdots}_{m_0} \underbrace{d_1 \cdots\cdots}_{m_1} \underbrace{d_2 \cdots\cdots}_{m_2} \infty \f]
- *
- * For m = 1 the Nakagami-m distribution equals the Rayleigh distribution. Thus
- * this model also implements Rayleigh distribution based fast fading.
- */
-
-class NakagamiPropagationLossModel : public PropagationLossModel
-{
-public:
-  static TypeId GetTypeId (void);
-
-  NakagamiPropagationLossModel ();
-
-  // Parameters are all accessible via attributes.
-
-private:
-  NakagamiPropagationLossModel (const NakagamiPropagationLossModel& o);
-  NakagamiPropagationLossModel& operator= (const NakagamiPropagationLossModel& o);
-
-  virtual double DoCalcRxPower (double txPowerDbm,
-                                Ptr<MobilityModel> a,
-                                Ptr<MobilityModel> b) const;
-
-  double m_distance1;
-  double m_distance2;
-
-  double m_m0;
-  double m_m1;
-  double m_m2;
-
-  ErlangVariable        m_erlangRandomVariable;
-  GammaVariable         m_gammaRandomVariable;
-};
-
-/**
- * \brief The propagation loss is fixed. The user can set received power level.
- */ 
-class FixedRssLossModel : public PropagationLossModel
-{
-public:
-  static TypeId GetTypeId (void);
-
-  FixedRssLossModel ();
-  virtual ~FixedRssLossModel ();
-  /**
-   * \param rss (dBm) the received signal strength
-   *
-   * Set the RSS.
-   */
-  void SetRss (double rss);
-
-private:
-  FixedRssLossModel (const FixedRssLossModel &o);
-  FixedRssLossModel & operator = (const FixedRssLossModel &o);
-  virtual double DoCalcRxPower (double txPowerDbm,
-                                Ptr<MobilityModel> a,
-                                Ptr<MobilityModel> b) const;
-  double m_rss;
-};
-
-} // namespace ns3
-
-#endif /* PROPAGATION_LOSS_MODEL_H */