support DefaultValue
This commit is contained in:
@@ -1,16 +1,98 @@
|
||||
#include "propagation-loss-model.h"
|
||||
#include "ns3/default-value.h"
|
||||
#include "ns3/random-variable-default-value.h"
|
||||
#include <math.h>
|
||||
|
||||
namespace ns3 {
|
||||
|
||||
enum ModelType {
|
||||
FRIIS,
|
||||
RANDOM,
|
||||
PATH_LOSS
|
||||
};
|
||||
|
||||
static EnumDefaultValue<enum ModelType> g_modelType
|
||||
("PropagationLossModelType",
|
||||
"The type of propagation loss model.",
|
||||
PATH_LOSS, "PathLoss",
|
||||
FRIIS, "Friis",
|
||||
RANDOM, "Random",
|
||||
0, (void *)0);
|
||||
|
||||
static NumericDefaultValue<double> g_friisLambda
|
||||
("FriisPropagationLambda",
|
||||
"The wavelength to use by default for every FriisPropagationLossModel (default is 5.15 GHz at 300 000 km/s).",
|
||||
300000000.0 / 5.150e9);
|
||||
|
||||
static NumericDefaultValue<double> g_friisSystemLoss
|
||||
("FriisPropagationSystemLoss",
|
||||
"The system loss to use by default for every FriisPropagationLossModel",
|
||||
1.0);
|
||||
|
||||
static RandomVariableDefaultValue g_random
|
||||
("RandomPropagation",
|
||||
"The distribution (in dbm) to choose the propagation loss.",
|
||||
"Constant:1.0");
|
||||
|
||||
static NumericDefaultValue<double> g_pathLossExponent
|
||||
("PathLossPropagationExponent",
|
||||
"The exponent of the Path Loss propagation model",
|
||||
3.0);
|
||||
|
||||
static EnumDefaultValue<enum ModelType> g_pathLossReference
|
||||
("PathLossPropagationReferenceType",
|
||||
"The type of reference propagation model.",
|
||||
FRIIS, "Friis",
|
||||
RANDOM, "Random",
|
||||
0, (void *)0);
|
||||
|
||||
const double FriisPropagationLossModel::PI = 3.1415;
|
||||
|
||||
PropagationLossModel::~PropagationLossModel ()
|
||||
{}
|
||||
|
||||
Ptr<PropagationLossModel>
|
||||
PropagationLossModel::CreateDefault (void)
|
||||
{
|
||||
switch (g_modelType.GetValue ()) {
|
||||
case FRIIS:
|
||||
return Create<FriisPropagationLossModel> ();
|
||||
break;
|
||||
case RANDOM:
|
||||
return Create<RandomPropagationLossModel> ();
|
||||
break;
|
||||
case PATH_LOSS:
|
||||
return Create<PathLossPropagationLossModel> ();
|
||||
break;
|
||||
default:
|
||||
NS_ASSERT (false);
|
||||
return 0;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
RandomPropagationLossModel::RandomPropagationLossModel ()
|
||||
: m_variable (g_random.GetCopy ())
|
||||
{}
|
||||
|
||||
RandomPropagationLossModel::RandomPropagationLossModel (const RandomVariable &variable)
|
||||
: m_variable (variable.Copy ())
|
||||
{}
|
||||
RandomPropagationLossModel::~RandomPropagationLossModel ()
|
||||
{
|
||||
delete m_variable;
|
||||
}
|
||||
|
||||
double
|
||||
RandomPropagationLossModel::GetRxPower (double txPowerDbm,
|
||||
double distance) const
|
||||
{
|
||||
return txPowerDbm - m_variable->GetValue ();
|
||||
}
|
||||
|
||||
FriisPropagationLossModel::FriisPropagationLossModel ()
|
||||
: m_lambda (),
|
||||
m_systemLoss (1.0)
|
||||
: m_lambda (g_friisLambda.GetValue ()),
|
||||
m_systemLoss (g_friisSystemLoss.GetValue ())
|
||||
{}
|
||||
void
|
||||
FriisPropagationLossModel::SetSystemLoss (double systemLoss)
|
||||
@@ -83,6 +165,8 @@ FriisPropagationLossModel::GetRxPower (double txPowerDbm,
|
||||
|
||||
|
||||
PathLossPropagationLossModel::PathLossPropagationLossModel ()
|
||||
: m_exponent (g_pathLossExponent.GetValue ()),
|
||||
m_reference (CreateDefaultReference ())
|
||||
{}
|
||||
|
||||
void
|
||||
@@ -90,12 +174,35 @@ PathLossPropagationLossModel::SetPathLossExponent (double n)
|
||||
{
|
||||
m_exponent = n;
|
||||
}
|
||||
void
|
||||
PathLossPropagationLossModel::SetReferenceModel (Ptr<PropagationLossModel> model)
|
||||
{
|
||||
m_reference = model;
|
||||
}
|
||||
double
|
||||
PathLossPropagationLossModel::GetPathLossExponent (void) const
|
||||
{
|
||||
return m_exponent;
|
||||
}
|
||||
|
||||
Ptr<PropagationLossModel>
|
||||
PathLossPropagationLossModel::CreateDefaultReference (void)
|
||||
{
|
||||
switch (g_pathLossReference.GetValue ()) {
|
||||
case RANDOM:
|
||||
return Create<RandomPropagationLossModel> ();
|
||||
break;
|
||||
case FRIIS:
|
||||
return Create<FriisPropagationLossModel> ();
|
||||
break;
|
||||
case PATH_LOSS:
|
||||
default:
|
||||
NS_ASSERT (false);
|
||||
return 0;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
double
|
||||
PathLossPropagationLossModel::DbToW (double db) const
|
||||
{
|
||||
|
||||
@@ -5,12 +5,29 @@
|
||||
|
||||
namespace ns3 {
|
||||
|
||||
class RandomVariable;
|
||||
|
||||
class PropagationLossModel : public Object
|
||||
{
|
||||
public:
|
||||
virtual ~PropagationLossModel ();
|
||||
virtual double GetRxPower (double txPowerDbm,
|
||||
double distance) const = 0;
|
||||
|
||||
static Ptr<PropagationLossModel> CreateDefault (void);
|
||||
};
|
||||
|
||||
class RandomPropagationLossModel : public PropagationLossModel
|
||||
{
|
||||
public:
|
||||
RandomPropagationLossModel ();
|
||||
RandomPropagationLossModel (const RandomVariable &variable);
|
||||
virtual ~RandomPropagationLossModel ();
|
||||
|
||||
virtual double GetRxPower (double txPowerDbm,
|
||||
double distance) const;
|
||||
private:
|
||||
RandomVariable *m_variable;
|
||||
};
|
||||
|
||||
class FriisPropagationLossModel : public PropagationLossModel
|
||||
@@ -48,8 +65,8 @@ public:
|
||||
double distance) const;
|
||||
private:
|
||||
double DbToW (double db) const;
|
||||
static Ptr<PropagationLossModel> CreateDefaultReference (void);
|
||||
|
||||
double m_lambda;
|
||||
double m_exponent;
|
||||
Ptr<PropagationLossModel> m_reference;
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user