Debug and verification of pathloss models COST231, ITU1411 LOS, ITU1411 NLOS over rooftop

This commit is contained in:
Marco Miozzo
2011-07-19 13:29:35 +02:00
parent fe9d3017f7
commit 5b18485c70
9 changed files with 141 additions and 70 deletions

View File

@@ -69,11 +69,13 @@ LenaHelper::DoStart (void)
//Ptr<SpectrumPropagationLossModel> ulPropagationModel = m_propagationModelFactory.Create<SpectrumPropagationLossModel> ();
//m_downlinkChannel->AddSpectrumPropagationLossModel (dlPropagationModel);
//m_uplinkChannel->AddSpectrumPropagationLossModel (ulPropagationModel);
m_downlinkPropagationLossModel = CreateObject<BuildingsPropagationLossModel> ();
//m_downlinkPropagationLossModel = CreateObject<BuildingsPropagationLossModel> ();
m_downlinkPropagationLossModel = m_dlPropagationModelFactory.Create<PropagationLossModel> ();
m_downlinkPropagationLossModel->SetAttribute ("Frequency", DoubleValue (2.1140e9)); // E_UTRA BAND #1 see table 5.5-1 of 36.101
m_downlinkPropagationLossModel->SetAttribute ("Lambda", DoubleValue (300000000.0 /2.1140e9)); // E_UTRA BAND #1 see table 5.5-1 of 36.101
m_uplinkPropagationLossModel = CreateObject<BuildingsPropagationLossModel> ();
m_uplinkPropagationLossModel = CreateObject<BuildingsPropagationLossModel> ();
//m_uplinkPropagationLossModel = CreateObject<BuildingsPropagationLossModel> ();
m_uplinkPropagationLossModel = m_ulPropagationModelFactory.Create<PropagationLossModel> ();
m_uplinkPropagationLossModel->SetAttribute ("Frequency", DoubleValue (1.950e9)); // E_UTRA BAND #1 see table 5.5-1 of 36.101
m_downlinkPropagationLossModel->SetAttribute ("Lambda", DoubleValue (300000000.0 /1.950e9)); // E_UTRA BAND #1 see table 5.5-1 of 36.101
m_downlinkChannel->AddPropagationLossModel (m_downlinkPropagationLossModel);
@@ -139,15 +141,18 @@ void
LenaHelper::SetPropagationModelType (std::string type)
{
NS_LOG_FUNCTION (this << type);
m_propagationModelFactory = ObjectFactory ();
m_propagationModelFactory.SetTypeId (type);
m_dlPropagationModelFactory = ObjectFactory ();
m_dlPropagationModelFactory.SetTypeId (type);
m_ulPropagationModelFactory = ObjectFactory ();
m_ulPropagationModelFactory.SetTypeId (type);
}
void
LenaHelper::SetPropagationModelAttribute (std::string n, const AttributeValue &v)
{
NS_LOG_FUNCTION (this << n);
m_propagationModelFactory.Set (n, v);
m_dlPropagationModelFactory.Set (n, v);
m_ulPropagationModelFactory.Set (n, v);
}

View File

@@ -55,6 +55,7 @@ public:
static TypeId GetTypeId (void);
virtual void DoDispose (void);
/**
* \todo to be implemented
*
@@ -203,6 +204,9 @@ private:
ObjectFactory m_schedulerFactory;
ObjectFactory m_propagationModelFactory;
ObjectFactory m_dlPropagationModelFactory;
ObjectFactory m_ulPropagationModelFactory;
Ptr<MacStatsCalculator> m_macStats;
Ptr<RlcStatsCalculator> m_rlcStats;

View File

@@ -65,6 +65,8 @@ LtePathlossModelTestSuite::LtePathlossModelTestSuite ()
Ptr<LenaHelper> lena = CreateObject<LenaHelper> ();
lena->SetAttribute ("PropagationModel", StringValue ("ns3::BuildingsPropagationLossModel"));
// Create Nodes: eNodeB and UE
NodeContainer enbNodes;
NodeContainer ueNodes;
@@ -78,6 +80,7 @@ LtePathlossModelTestSuite::LtePathlossModelTestSuite ()
mobility.SetMobilityModel ("ns3::BuildingsMobilityModel");
mobility.Install (ueNodes);
NetDeviceContainer enbDevs;
NetDeviceContainer ueDevs;
enbDevs = lena->InstallEnbDevice (enbNodes);
@@ -85,20 +88,32 @@ LtePathlossModelTestSuite::LtePathlossModelTestSuite ()
lena->Attach (ueDevs, enbDevs.Get (0));
double distance = 250;
double hm = 1;
double hb = 30;
// double hr = 20;
Ptr<BuildingsMobilityModel> mm1 = enbNodes.Get (0)->GetObject<BuildingsMobilityModel> ();
mm1->SetPosition (Vector (0.0, 0.0, 1.0));
mm1->SetPosition (Vector (0.0, 0.0, hb));
Ptr<Building> building1 = Create<Building> (0.0, 10.0, 0.0, 10.0, 0.0, 20.0/*, 1, 1, 1*/);
mm1->SetIndoor (building1);
//mm1->SetIndoor (building1);
mm1->SetOutdoor ();
Ptr<BuildingsMobilityModel> mm2 = ueNodes.Get (0)->GetObject<BuildingsMobilityModel> ();
mm2->SetPosition (Vector (1010.0, 0.0, 1.0));
mm2->SetPosition (Vector (distance, 0.0, hm));
Ptr<Building> building = Create<Building> (0.0, 10.0, 0.0, 10.0, 0.0, 20.0/*, 1, 1, 1*/);
mm2->SetOutdoor ();
mm2->SetIndoor (building1);
mm2->SetFloorNumber (2);
//mm2->SetIndoor (building1);
//mm2->SetFloorNumber (2);
double thrLoss = 0.0;
AddTestCase (new LtePathlossModelTestCase (mm1, mm2, thrLoss, "loss = ??"));
AddTestCase (new LtePathlossModelTestCase (mm1, mm2, thrLoss, "loss_COST231_large_cities_urban = ??"));
/**
* TX signal #2: Power Spectral Density (W/Hz) of the signal of interest = [-63 -61] dBm and BW = [20 22] MHz
@@ -175,11 +190,15 @@ LtePathlossModelTestCase::DoRun (void)
Ptr<SpectrumChannel> m_downlinkChannel = CreateObject<SingleModelSpectrumChannel> ();
Ptr<SpectrumChannel> m_uplinkChannel = CreateObject<SingleModelSpectrumChannel> ();
Ptr<BuildingsPropagationLossModel> m_downlinkPropagationLossModel = CreateObject<BuildingsPropagationLossModel> ();
m_downlinkPropagationLossModel->SetAttribute ("Frequency", DoubleValue (2.1140e9)); // E_UTRA BAND #1 see table 5.5-1 of 36.101
m_downlinkPropagationLossModel->SetAttribute ("Lambda", DoubleValue (300000000.0 /2.1140e9)); // E_UTRA BAND #1 see table 5.5-1 of 36.101
double freq = 2.1140e9; // E_UTRA BAND #1 see table 5.5-1 of 36.101
//double freq = 869e6; // E_UTRA BAND #5 see table 5.5-1 of 36.101
//double freq = 2.620e9; // E_UTRA BAND #7 see table 5.5-1 of 36.101
m_downlinkPropagationLossModel->SetAttribute ("Frequency", DoubleValue (freq)); // E_UTRA BAND #1 see table 5.5-1 of 36.101
m_downlinkPropagationLossModel->SetAttribute ("Lambda", DoubleValue (300000000.0 /freq)); // E_UTRA BAND #1 see table 5.5-1 of 36.101
Ptr<BuildingsPropagationLossModel> m_uplinkPropagationLossModel = CreateObject<BuildingsPropagationLossModel> ();
m_uplinkPropagationLossModel->SetAttribute ("Frequency", DoubleValue (1.950e9)); // E_UTRA BAND #1 see table 5.5-1 of 36.101
m_downlinkPropagationLossModel->SetAttribute ("Lambda", DoubleValue (300000000.0 /1.950e9)); // E_UTRA BAND #1 see table 5.5-1 of 36.101
m_uplinkPropagationLossModel->SetAttribute ("Lambda", DoubleValue (300000000.0 /1.950e9)); // E_UTRA BAND #1 see table 5.5-1 of 36.101
m_downlinkChannel->AddPropagationLossModel (m_downlinkPropagationLossModel);
m_uplinkChannel->AddPropagationLossModel (m_uplinkPropagationLossModel);
@@ -188,7 +207,6 @@ LtePathlossModelTestCase::DoRun (void)
Simulator::Stop (Seconds (0.1));
Simulator::Run ();
Simulator::Destroy ();
double loss = m_downlinkPropagationLossModel->GetLoss (m_node1, m_node2);
NS_LOG_INFO ("Calculated loss: " << loss);

View File

@@ -9,7 +9,7 @@ function g = loss_COST231_small_cities_urban(d, hb, hm, f)
assert(isscalar(f));
assert(f > 0);
Fhm = (1.1*log10(f)) -(0.7*hm) -(1.56*log(f)) -0.8;
Fhm = (1.1*log10(f)) -(0.7*hm) -(1.56*log10(f) -0.8);
C = 0;
g = zeros(size(d));
g(find(d > 0)) = 46.3 + (33.9*log10(f)) - (13.82*log10(hb)) + (44.9-(6.55*log10(hb))).*log10(d) - Fhm + C;

View File

@@ -11,19 +11,26 @@ function g = loss_ITU1411_NLOS_over_rooftop (d, hb, hm, hr, f, l, b, st_w, phi,
lambda = 300000000.0 / f;
fmhz = f/1e6;
Dhb = hb - hr;
ds = (lambda.*(d).^2)/Dhb^2;
ds = (lambda*d*d)/(Dhb*Dhb);
if (l>ds)
if (big==1)
kf = 1.5*((f/925)-1);
if (fmhz>2000)
kf = -8;
else
kf = 0.7*((f/925)-1);
if (big==1)
kf = -4+1.5*((fmhz/925)-1);
else
kf = -4+0.7*((fmhz/925)-1);
endif
endif
if (hb>hr)
kd = 18;
ka = 54;
if (fmhz>2000)
ka = 71.4;
else
ka = 54;
endif
Lbsh = -18*log10(1+Dhb);
else
kd = 18 - 15*(Dhb/hr);
@@ -34,19 +41,18 @@ function g = loss_ITU1411_NLOS_over_rooftop (d, hb, hm, hr, f, l, b, st_w, phi,
ka = 54-1.6*Dhb;
endif
endif
Lmsd = Lbsh + ka + kd.*log10(d./1000) + kf*log10(f) - 9*log10(b);
Lmsd = Lbsh + ka + kd.*log10(d./1000) + kf*log10(fmhz) - 9*log10(b);
else
theta = atan (Dhb /b);
rho = sqrt(Dhb^2 + b^2);
if (hb-hr<1)
Qm = b./d;
elseif (hb>hr)
Qm = 2.35*((dhb./d)*sqrt(b/lamda))^0.9;
Qm = 2.35*((Dhb./d)*sqrt(b/lambda))^0.9;
else
Qm = (b/2*pi.*d)*sqrt(lambda/rho)*((1/theta)-(1/(2*pi+theta)));
endif
Lmsd = -10*log(Qm^2);
Lmsd = -10*log10(Qm*Qm);
endif
Dhm = hr-hm;
if (phi<35)
@@ -56,12 +62,9 @@ function g = loss_ITU1411_NLOS_over_rooftop (d, hb, hm, hr, f, l, b, st_w, phi,
else
Lori = 4- 0.114*(phi-55);
endif
Lrts = -8.2 -10*log10(st_w) + 10*log10(fmhz) + 20*log10(Dhm) + Lori;
Lrts = -8.2 -10*log10(st_w) + 10*log10(f) + 20*log10(Dhm) + Lori;
Lbf = 32.4 +20*log10(d/1000) + 20*log10(f);
Lbf = 32.4 +20*log10(d/1000) + 20*log10(fmhz);
g = zeros(size(d));
if (Lrts+Lmsd>0)
L = Lbf + Lrts + Lmsd;

View File

@@ -14,7 +14,6 @@ function g = loss_OH_large_cities_urban(d, hb, hm, f)
else
Ch = 3.2*(log10(11.75*hm))^2-4.97;
endif
g = zeros(size(d));
g(find(d > 0)) = 69.55 + (26.16*log10(f)) - (13.82*log10(hb)) + (44.9-(6.55*log10(hb))).*log10(d) - Ch;

View File

@@ -4,8 +4,11 @@ close all;
%% LTE pathloss model
%% ITU1411, ITU1238, COST231, OH, etc.
f = 2160e6; % carrier freq Hz, EARFCN = 500 (downlink)
d = 100;
f = 2114e6; % carrier freq Hz, EARFCN = 500 (downlink)
%f = 1900e6; % carrier freq Hz, EARFCN = 500 (downlink)
%f = 869e6;
%f = 2620e6;
d = 250;
hb = 30;
hm = 1;
hr = 20;
@@ -49,7 +52,9 @@ alpha = 0.5;
g = loss_ITU1411_NLOS_street_canyons (d, f, w1, w2, x1, x2, alpha);
disp ("The value of ITU1411 in NLOS within street canyons is:"), disp (g)
g = loss_ITU1238 (d, hb, hm, f);
n_floors = 2;
built_t = 1;
g = loss_ITU1238 (d, f, n_floors, built_t);
disp ("The value of ITU1238 is:"), disp (g)

View File

@@ -45,20 +45,20 @@ BuildingsPropagationLossModel::GetTypeId (void)
.AddConstructor<BuildingsPropagationLossModel> ()
.AddAttribute ("Lambda",
"The wavelength (default is 2.3 GHz at 300 000 km/s).",
DoubleValue (300000000.0 / 2.3e9),
"The wavelength (default is 2.106 GHz at 300 000 km/s).",
DoubleValue (300000000.0 / 2160e6),
MakeDoubleAccessor (&BuildingsPropagationLossModel::m_lambda),
MakeDoubleChecker<double> ())
.AddAttribute ("Frequency",
"The Frequency (default is 2.3 GHz).",
DoubleValue (2.3e9),
"The Frequency (default is 2.106 GHz).",
DoubleValue (2160e6),
MakeDoubleAccessor (&BuildingsPropagationLossModel::m_frequency),
MakeDoubleChecker<double> ())
.AddAttribute ("RooftopLevel",
" The height of the rooftop [m].",
DoubleValue (30.0),
DoubleValue (20.0),
MakeDoubleAccessor (&BuildingsPropagationLossModel::m_rooftopHeight),
MakeDoubleChecker<double> ())
@@ -80,7 +80,11 @@ BuildingsPropagationLossModel::GetTypeId (void)
BuildingsPropagationLossModel::BuildingsPropagationLossModel () :
C (0),
m_environment (Urban),
m_citySize (Large)
m_citySize (Large),
m_streetsOrientation (45.0),
m_streetsWidth (20.0),
m_buildingsExtend (80.0),
m_buildingSeparation (50.0)
{
NS_LOG_INFO (this << " BuildingsPropagationLossModel");
}
@@ -121,12 +125,26 @@ BuildingsPropagationLossModel::SetEnvironment (Environment env)
{
m_environment = env;
}
BuildingsPropagationLossModel::Environment
BuildingsPropagationLossModel::GetEnvironment (void) const
{
return m_environment;
}
void
BuildingsPropagationLossModel::SetCitySize (CitySize size)
{
m_citySize = size;
}
BuildingsPropagationLossModel::CitySize
BuildingsPropagationLossModel::GetCitySize (void) const
{
return m_citySize;
}
double
BuildingsPropagationLossModel::OkumuraHata (Ptr<BuildingsMobilityModel> a, Ptr<BuildingsMobilityModel> b) const
@@ -137,29 +155,32 @@ BuildingsPropagationLossModel::OkumuraHata (Ptr<BuildingsMobilityModel> a, Ptr<B
{
// standard Okumura Hata (from wikipedia)
double log_f = log10 (m_frequency);
double log_aHeight = 13.82 * log10 (a->GetPosition ().z);
double hb = (a->GetPosition ().z>b->GetPosition ().z ? a->GetPosition ().z : b->GetPosition ().z);
double hm = (a->GetPosition ().z< b->GetPosition ().z ? a->GetPosition ().z : b->GetPosition ().z);
double log_aHeight = 13.82 * log10 (hb);
double log_bHeight = 0.0;
if (m_citySize == Large)
{
if (m_frequency<200)
{
log_bHeight = 8.29 * pow (log10 (1.54 * b->GetPosition ().z), 2) - 1.1;
log_bHeight = 8.29 * pow (log10 (1.54 * hm), 2) - 1.1;
}
else
{
log_bHeight = 3.2 * pow (log10 (11.75 * b->GetPosition ().z), 2) - 4.97;
log_bHeight = 3.2 * pow (log10 (11.75 * hm), 2) - 4.97;
}
}
else
{
log_bHeight = 0.8 + (1.1*log10(m_frequency) - 0.7)*b->GetPosition ().z - 1.56*log10(m_frequency);
log_bHeight = 0.8 + (1.1*log_f - 0.7)*hm - 1.56*log_f;
}
loss = 69.55 + (26.16 * log_f) - log_aHeight + (((44.9 - (6.55 * log_f) ))*log10 (a->GetDistanceFrom (b))) - log_bHeight;
//NS_LOG_INFO (this << " logf " << 26.16 * log_f << " loga " << log_aHeight << " X " << (((44.9 - (6.55 * log10(hb)) ))*log10 (a->GetDistanceFrom (b))) << " logb " << log_bHeight);
loss = 69.55 + (26.16 * log_f) - log_aHeight + (((44.9 - (6.55 * log10(hb)) ))*log10 (a->GetDistanceFrom (b))) - log_bHeight;
if (m_environment == SubUrban)
{
loss += 2 * (pow(log10 (m_frequency / 28), 2)) - 5.4;
loss += - 2 * (pow(log10 (m_frequency / 28), 2)) - 5.4;
}
else if (m_environment == OpenAreas)
{
@@ -171,18 +192,23 @@ BuildingsPropagationLossModel::OkumuraHata (Ptr<BuildingsMobilityModel> a, Ptr<B
{
// COST 231 Okumura model
double log_f = log10 (m_frequency);
double log_aHeight = 13.83 * log10 (a->GetPosition ().z);
double hb = (a->GetPosition ().z>b->GetPosition ().z ? a->GetPosition ().z : b->GetPosition ().z);
double hm = (a->GetPosition ().z< b->GetPosition ().z ? a->GetPosition ().z : b->GetPosition ().z);
double log_aHeight = 13.82 * log10 (hb);
double log_bHeight = 0.0;
double C = 0.0;
if (m_citySize == Large)
{
log_bHeight = 3.2 * pow ((log10(11.75 * b->GetPosition ().z)),2);
log_bHeight = 3.2 * pow ((log10(11.75 * hm)),2);
C = 3;
}
else
{
log_bHeight = 1.1*log10(m_frequency) - 0.7*b->GetPosition ().z - (1.56*log10(m_frequency) - 0.8);
log_bHeight = 1.1*log_f - 0.7*hm - (1.56*log_f - 0.8);
}
loss = 46.3 + (33.9 * log_f) - log_aHeight + (((44.9 - (6.55 * log_f) ))*log10 (a->GetDistanceFrom (b))) - log_bHeight;
loss = 46.3 + (33.9 * log_f) - log_aHeight + (((44.9 - (6.55 * log10(hb)) ))*log10 (a->GetDistanceFrom (b))) - log_bHeight + C;
}
else if (m_frequency <= 2.690e9) // max 3GPP freq EUTRA band #1
{
@@ -203,7 +229,7 @@ BuildingsPropagationLossModel::ItuR1411 (Ptr<BuildingsMobilityModel> a, Ptr<Buil
{
if (a->GetDistanceFrom (b) < m_itu1411NlosThreshold)
{
return (ItuR1411Los (a,b);)
return (ItuR1411Los (a,b));
}
else
{
@@ -219,7 +245,7 @@ BuildingsPropagationLossModel::ItuR1411Los (Ptr<BuildingsMobilityModel> a, Ptr<B
double lossLow = 0.0;
double lossUp = 0.0;
double pi = 3.141592653589793;
double Lbp = 20*log10(m_lambda*m_lambda/(8*pi*a->GetPosition ().z*b->GetPosition ().z));
double Lbp = abs(20*log10((m_lambda*m_lambda)/(8*pi*a->GetPosition ().z*b->GetPosition ().z)));
double Rbp = (4 * a->GetPosition ().z * b->GetPosition ().z) / m_lambda;
// NS_LOG_INFO (this << " Lbp " << Lbp << " Rbp " << Rbp);
if (dist <= Rbp)
@@ -255,39 +281,41 @@ double
BuildingsPropagationLossModel::ItuR1411NlosOverRooftop (Ptr<BuildingsMobilityModel> a, Ptr<BuildingsMobilityModel> b) const
{
double Lori = 0.0;
double fmhz = m_frequency/1e6;
if ((m_streetsOrientation>=0)&&(m_streetsOrientation<35))
{
Lori = -10.0 + 0.354*m_streetsOrientation;
}
else if ((m_streetsOrientation>=35)&&(m_streetsOrientation<55))
{
Lori = 2.5 + 0.075*m_streetsOrientation;
Lori = 2.5 + 0.075*(m_streetsOrientation - 35);
}
else if ((m_streetsOrientation>=55)&&(m_streetsOrientation<90))
{
Lori = 2.5 + 0.075*m_streetsOrientation;
Lori = 2.5 + 0.075*(m_streetsOrientation - 55);
}
else
{
NS_LOG_ERROR (this << " Street Orientation must be in [0,90]");
}
double Lrts = -8.2 -10*log10(m_streetsWidth) + 20*log10(m_rooftopHeight - b->GetPosition ().z) + Lori;
double distance = a->GetDistanceFrom (b);
double Dhb = a->GetPosition ().z - m_rooftopHeight;
double hb = (a->GetPosition ().z>b->GetPosition ().z ? a->GetPosition ().z : b->GetPosition ().z);
double hm = (a->GetPosition ().z< b->GetPosition ().z ? a->GetPosition ().z : b->GetPosition ().z);
double Dhb = hb - m_rooftopHeight;
double ds = (m_lambda * distance * distance) / (Dhb * Dhb);
double Lmsd = 0.0;
double pi = 3.141592653589793;
//NS_LOG_INFO (this << " build " << m_buildingsExtend << " ds " << ds << " roof " << m_rooftopHeight << " hb " << hb << " lambda " << m_lambda);
if (ds < m_buildingsExtend)
{
double Lbsh = 0.0;
double ka = 0.0;
double kd = 0.0;
double kf = 0.0;
if ((a->GetPosition ().z > m_rooftopHeight) || (b->GetPosition ().z > m_rooftopHeight))
if (hb > m_rooftopHeight)
{
Lbsh = -18*log10(1+Dhb);
ka = 54.0;
ka = (fmhz > 2000 ? 71.4 : 54.0);
kd = 18.0;
}
else
@@ -303,21 +331,25 @@ BuildingsPropagationLossModel::ItuR1411NlosOverRooftop (Ptr<BuildingsMobilityMod
ka = 54.0 - 0.8*Dhb;
}
}
if ((m_environment==Urban)&&(m_citySize==Large))
if (fmhz>2000)
{
kf = 0.7*(m_frequency/925.0 -1);
kf = -8;
}
else if ((m_environment==Urban)&&(m_citySize==Large))
{
kf = -4 + 0.7*(fmhz/925.0 -1);
}
else
{
kf = 1.5*(m_frequency/925.0 -1);
kf = -4 + 1.5*(fmhz/925.0 -1);
}
Lmsd = Lbsh + ka + kd*log10(distance/1000.0) + kf*log10(m_frequency) -9.0*log10(m_buildingSeparation); // CHECK last d (it's "b" in ITU)
Lmsd = Lbsh + ka + kd*log10(distance/1000.0) + kf*log10(fmhz) -9.0*log10(m_buildingSeparation);
}
else
{
double theta = atan (Dhb/m_buildingSeparation);
double rho = sqrt(Dhb*Dhb+m_buildingSeparation*m_buildingSeparation);
double hb = a->GetPosition ().z;
double Qm = 0.0;
if ((hb > m_rooftopHeight -1.0) && (hb < m_rooftopHeight + 1.0))
{
@@ -334,8 +366,10 @@ BuildingsPropagationLossModel::ItuR1411NlosOverRooftop (Ptr<BuildingsMobilityMod
Lmsd = -10*log10(Qm*Qm);
}
double Lbf = 32.4 + 20*log10(distance/1000) + 20*log10(m_frequency);
double Lbf = 32.4 + 20*log10(distance/1000) + 20*log10(fmhz);
double Dhm = m_rooftopHeight - hm;
double Lrts = -8.2 -10*log10 (m_streetsWidth) + 10*log10 (fmhz) + 20*log10 (Dhm) + Lori;
//NS_LOG_INFO (this << " Lbf " << Lbf << " Lrts " << Lrts << " Dhm" << Dhm);
double loss = 0.0;
if (Lrts + Lmsd > 0)
{
@@ -351,6 +385,7 @@ BuildingsPropagationLossModel::ItuR1411NlosOverRooftop (Ptr<BuildingsMobilityMod
double
BuildingsPropagationLossModel::ItuR1411NlosStreetCanyons (Ptr<BuildingsMobilityModel> a, Ptr<BuildingsMobilityModel> b) const
{
NS_LOG_INFO (this);
// reflection pathloss
double x1 = a->GetStreetCrossingDistence ();
double x2 = b->GetStreetCrossingDistence ();

View File

@@ -75,9 +75,11 @@ public:
*/
double GetLoss (Ptr<MobilityModel> a, Ptr<MobilityModel> b) const;
void SetEnvironment (Environment env);
void SetCitySize (CitySize size);
void SetLambda (double lambda);
void SetMinDistance (double minDistance);
Environment GetEnvironment (void) const;
CitySize GetCitySize (void) const;
double GetMinDistance (void) const;
double GetLambda (void) const;
void SetLambda (double frequency, double speed);