Debug and verification of pathloss models COST231, ITU1411 LOS, ITU1411 NLOS over rooftop
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
|
||||
@@ -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 ();
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user