src/propagation/model/itu-r-1411-nlos-over-rooftop-propagation-loss-model.cc
author Vedran Mileti? <rivanvx@gmail.com>
Sat, 01 Sep 2012 20:57:21 +0200
changeset 9063 32755d0516f4
parent 8985 7752dc4ce7e9
child 10410 4d4eb8097fa3
permissions -rw-r--r--
Bug 1237 - code cleanups related to includes
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
8734
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
     1
/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
     2
/*
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
     3
 * Copyright (c) 2011, 2012 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
     4
 *
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
     5
 * This program is free software; you can redistribute it and/or modify
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
     6
 * it under the terms of the GNU General Public License version 2 as
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
     7
 * published by the Free Software Foundation;
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
     8
 *
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
     9
 * This program is distributed in the hope that it will be useful,
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    10
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    11
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    12
 * GNU General Public License for more details.
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    13
 *
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    14
 * You should have received a copy of the GNU General Public License
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    15
 * along with this program; if not, write to the Free Software
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    16
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    17
 *
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    18
 * Author: Marco Miozzo  <marco.miozzo@cttc.es>,
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    19
 *         Nicola Baldo <nbaldo@cttc.es>
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    20
 * 
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    21
 */
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    22
#include "ns3/log.h"
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    23
#include "ns3/double.h"
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    24
#include "ns3/enum.h"
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    25
#include "ns3/mobility-model.h"
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    26
#include <cmath>
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    27
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    28
#include "itu-r-1411-nlos-over-rooftop-propagation-loss-model.h"
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    29
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    30
NS_LOG_COMPONENT_DEFINE ("ItuR1411NlosOverRooftopPropagationLossModel");
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    31
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    32
namespace ns3 {
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    33
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    34
NS_OBJECT_ENSURE_REGISTERED (ItuR1411NlosOverRooftopPropagationLossModel);
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    35
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    36
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    37
TypeId
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    38
ItuR1411NlosOverRooftopPropagationLossModel::GetTypeId (void)
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    39
{
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    40
  static TypeId tid = TypeId ("ns3::ItuR1411NlosOverRooftopPropagationLossModel")
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    41
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    42
    .SetParent<PropagationLossModel> ()
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    43
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    44
    .AddAttribute ("Frequency",
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    45
                   "The Frequency  (default is 2.106 GHz).",
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    46
                   DoubleValue (2160e6),
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    47
                   MakeDoubleAccessor (&ItuR1411NlosOverRooftopPropagationLossModel::SetFrequency),
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    48
                   MakeDoubleChecker<double> ())
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    49
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    50
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    51
    .AddAttribute ("Environment",
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    52
                   "Environment Scenario",
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    53
                   EnumValue (UrbanEnvironment),
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    54
                   MakeEnumAccessor (&ItuR1411NlosOverRooftopPropagationLossModel::m_environment),
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    55
                   MakeEnumChecker (UrbanEnvironment, "Urban",
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    56
                                    SubUrbanEnvironment, "SubUrban",
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    57
                                    OpenAreasEnvironment, "OpenAreas"))
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    58
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    59
    .AddAttribute ("CitySize",
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    60
                   "Dimension of the city",
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    61
                   EnumValue (LargeCity),
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    62
                   MakeEnumAccessor (&ItuR1411NlosOverRooftopPropagationLossModel::m_citySize),
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    63
                   MakeEnumChecker (SmallCity, "Small",
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    64
                                    MediumCity, "Medium",
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    65
                                    LargeCity, "Large"))
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    66
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    67
    .AddAttribute ("RooftopLevel",
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    68
                   "The height of the rooftop level in meters",
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    69
                   DoubleValue (20.0),
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    70
                   MakeDoubleAccessor (&ItuR1411NlosOverRooftopPropagationLossModel::m_rooftopHeight),
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    71
                   MakeDoubleChecker<double> (0.0, 90.0))
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    72
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    73
    .AddAttribute ("StreetsOrientation",
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    74
                   "The orientation of streets in degrees [0,90] with respect to the direction of propagation",
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    75
                   DoubleValue (45.0),
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    76
                   MakeDoubleAccessor (&ItuR1411NlosOverRooftopPropagationLossModel::m_streetsOrientation),
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    77
                   MakeDoubleChecker<double> (0.0, 90.0))
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    78
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    79
    .AddAttribute ("StreetsWidth",
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    80
                   "The width of streets",
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    81
                   DoubleValue (20.0),
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    82
                   MakeDoubleAccessor (&ItuR1411NlosOverRooftopPropagationLossModel::m_streetsWidth),
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    83
                   MakeDoubleChecker<double> (0.0, 1000.0))
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    84
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    85
    .AddAttribute ("BuildingsExtend",
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    86
                   "The distance over which the buildings extend",
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    87
                   DoubleValue (80.0),
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    88
                   MakeDoubleAccessor (&ItuR1411NlosOverRooftopPropagationLossModel::m_buildingsExtend),
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    89
                   MakeDoubleChecker<double> ())
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    90
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    91
    .AddAttribute ("BuildingSeparation",
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    92
                   "The separation between buildings",
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    93
                   DoubleValue (50.0),
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    94
                   MakeDoubleAccessor (&ItuR1411NlosOverRooftopPropagationLossModel::m_buildingSeparation),
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    95
                   MakeDoubleChecker<double> ());
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    96
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    97
  return tid;
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    98
}
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
    99
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   100
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   101
double
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   102
ItuR1411NlosOverRooftopPropagationLossModel::GetLoss (Ptr<MobilityModel> a, Ptr<MobilityModel> b) const
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   103
{
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   104
  NS_LOG_FUNCTION (this << a << b);
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   105
  double Lori = 0.0;
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   106
  double fmhz = m_frequency / 1e6;
8735
b4a468ff2aad revised buildings+propagation after review by Pavel http://codereview.appspot.com/5728062/
Nicola Baldo <nbaldo@cttc.es>
parents: 8734
diff changeset
   107
b4a468ff2aad revised buildings+propagation after review by Pavel http://codereview.appspot.com/5728062/
Nicola Baldo <nbaldo@cttc.es>
parents: 8734
diff changeset
   108
  NS_ASSERT_MSG (((m_streetsOrientation >= 0) && (m_streetsOrientation <= 90)),
b4a468ff2aad revised buildings+propagation after review by Pavel http://codereview.appspot.com/5728062/
Nicola Baldo <nbaldo@cttc.es>
parents: 8734
diff changeset
   109
                 " Street Orientation must be in [0,90]");
b4a468ff2aad revised buildings+propagation after review by Pavel http://codereview.appspot.com/5728062/
Nicola Baldo <nbaldo@cttc.es>
parents: 8734
diff changeset
   110
  if (m_streetsOrientation < 35)
8734
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   111
    {
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   112
      Lori = -10.0 + 0.354 * m_streetsOrientation;
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   113
    }
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   114
  else if ((m_streetsOrientation >= 35)&&(m_streetsOrientation < 55))
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   115
    {
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   116
      Lori = 2.5 + 0.075 * (m_streetsOrientation - 35);
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   117
    }
8735
b4a468ff2aad revised buildings+propagation after review by Pavel http://codereview.appspot.com/5728062/
Nicola Baldo <nbaldo@cttc.es>
parents: 8734
diff changeset
   118
  else // m_streetsOrientation >= 55
8734
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   119
    {
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   120
      Lori = 2.5 + 0.075 * (m_streetsOrientation - 55);
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   121
    }
8735
b4a468ff2aad revised buildings+propagation after review by Pavel http://codereview.appspot.com/5728062/
Nicola Baldo <nbaldo@cttc.es>
parents: 8734
diff changeset
   122
8734
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   123
  double distance = a->GetDistanceFrom (b);
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   124
  double hb = (a->GetPosition ().z > b->GetPosition ().z ? a->GetPosition ().z : b->GetPosition ().z);
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   125
  double hm = (a->GetPosition ().z < b->GetPosition ().z ? a->GetPosition ().z : b->GetPosition ().z);
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   126
  NS_ASSERT_MSG (hm > 0 && hb > 0, "nodes' height must be greater then 0");
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   127
  double Dhb = hb - m_rooftopHeight;
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   128
  double ds = (m_lambda * distance * distance) / (Dhb * Dhb);
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   129
  double Lmsd = 0.0;
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   130
  NS_LOG_LOGIC (this << " build " << m_buildingsExtend << " ds " << ds << " roof " << m_rooftopHeight << " hb " << hb << " lambda " << m_lambda);
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   131
  if (ds < m_buildingsExtend)
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   132
    {
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   133
      double Lbsh = 0.0;
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   134
      double ka = 0.0;
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   135
      double kd = 0.0;
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   136
      double kf = 0.0;
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   137
      if (hb > m_rooftopHeight)
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   138
        {
9063
32755d0516f4 Bug 1237 - code cleanups related to includes
Vedran Mileti? <rivanvx@gmail.com>
parents: 8985
diff changeset
   139
          Lbsh = -18 * std::log10 (1 + Dhb);
8734
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   140
          ka = (fmhz > 2000 ? 71.4 : 54.0);
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   141
          kd = 18.0;
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   142
        }
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   143
      else 
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   144
        {
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   145
          Lbsh = 0;
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   146
          kd = 18.0 - 15 * Dhb / a->GetPosition ().z;
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   147
          if (distance < 500)
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   148
            {
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   149
              ka = 54.0 - 1.6 * Dhb * distance / 1000;
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   150
            }
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   151
          else
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   152
            {
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   153
              ka = 54.0 - 0.8 * Dhb;
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   154
            }
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   155
        }
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   156
      if (fmhz > 2000)
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   157
        {
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   158
          kf = -8;
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   159
        }
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   160
      else if ((m_environment == UrbanEnvironment)&&(m_citySize == LargeCity))
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   161
        {
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   162
          kf = -4 + 0.7 * (fmhz / 925.0 - 1);
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   163
        }
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   164
      else
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   165
        {
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   166
          kf = -4 + 1.5 * (fmhz / 925.0 - 1);
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   167
        }
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   168
9063
32755d0516f4 Bug 1237 - code cleanups related to includes
Vedran Mileti? <rivanvx@gmail.com>
parents: 8985
diff changeset
   169
      Lmsd = Lbsh + ka + kd * std::log10 (distance / 1000.0) + kf * std::log10 (fmhz) - 9.0 * std::log10 (m_buildingSeparation);
8734
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   170
    }
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   171
  else
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   172
    {
9063
32755d0516f4 Bug 1237 - code cleanups related to includes
Vedran Mileti? <rivanvx@gmail.com>
parents: 8985
diff changeset
   173
      double theta = std::atan (Dhb / m_buildingSeparation);
32755d0516f4 Bug 1237 - code cleanups related to includes
Vedran Mileti? <rivanvx@gmail.com>
parents: 8985
diff changeset
   174
      double rho = std::sqrt (Dhb * Dhb + m_buildingSeparation * m_buildingSeparation);
8734
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   175
      double Qm = 0.0;
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   176
      if ((hb > m_rooftopHeight - 1.0) && (hb < m_rooftopHeight + 1.0))
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   177
        {
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   178
          Qm = m_buildingSeparation / distance;
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   179
        }
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   180
      else if (hb > m_rooftopHeight)
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   181
        {
9063
32755d0516f4 Bug 1237 - code cleanups related to includes
Vedran Mileti? <rivanvx@gmail.com>
parents: 8985
diff changeset
   182
          Qm = 2.35 * pow (Dhb / distance * std::sqrt (m_buildingSeparation / m_lambda), 0.9);
8734
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   183
        }
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   184
      else
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   185
        {
9063
32755d0516f4 Bug 1237 - code cleanups related to includes
Vedran Mileti? <rivanvx@gmail.com>
parents: 8985
diff changeset
   186
          Qm = m_buildingSeparation / (2 * M_PI * distance) * std::sqrt (m_lambda / rho) * (1 / theta - (1 / (2 * M_PI + theta)));
8734
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   187
        }
9063
32755d0516f4 Bug 1237 - code cleanups related to includes
Vedran Mileti? <rivanvx@gmail.com>
parents: 8985
diff changeset
   188
      Lmsd = -10 * std::log10 (Qm * Qm);
8734
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   189
    }
9063
32755d0516f4 Bug 1237 - code cleanups related to includes
Vedran Mileti? <rivanvx@gmail.com>
parents: 8985
diff changeset
   190
  double Lbf = 32.4 + 20 * std::log10 (distance / 1000) + 20 * std::log10 (fmhz);
8734
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   191
  double Dhm = m_rooftopHeight - hm;
9063
32755d0516f4 Bug 1237 - code cleanups related to includes
Vedran Mileti? <rivanvx@gmail.com>
parents: 8985
diff changeset
   192
  double Lrts = -8.2 - 10 * std::log10 (m_streetsWidth) + 10 * std::log10 (fmhz) + 20 * std::log10 (Dhm) + Lori;
8734
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   193
  NS_LOG_LOGIC (this << " Lbf " << Lbf << " Lrts " << Lrts << " Dhm" << Dhm << " Lmsd "  << Lmsd);
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   194
  double loss = 0.0;
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   195
  if (Lrts + Lmsd > 0)
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   196
    {
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   197
      loss = Lbf + Lrts + Lmsd;
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   198
    }
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   199
  else
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   200
    {
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   201
      loss = Lbf;
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   202
    }
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   203
  return loss;
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   204
}
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   205
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   206
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   207
void
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   208
ItuR1411NlosOverRooftopPropagationLossModel::SetFrequency (double freq)
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   209
{
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   210
  m_frequency = freq;
8744
5ee0d10aa9bd correct light speed in ITU-R porpagation models
Nicola Baldo <nbaldo@cttc.es>
parents: 8735
diff changeset
   211
  m_lambda = 299792458.0 / freq;
8734
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   212
}
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   213
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   214
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   215
double 
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   216
ItuR1411NlosOverRooftopPropagationLossModel::DoCalcRxPower (double txPowerDbm,
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   217
						Ptr<MobilityModel> a,
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   218
						Ptr<MobilityModel> b) const
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   219
{
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   220
  return (txPowerDbm - GetLoss (a, b));
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   221
}
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   222
8985
7752dc4ce7e9 Replace src/buildings and src/propagation usage of RandomVariable with RandomVariableStream
Mitch Watrous
parents: 8744
diff changeset
   223
int64_t
7752dc4ce7e9 Replace src/buildings and src/propagation usage of RandomVariable with RandomVariableStream
Mitch Watrous
parents: 8744
diff changeset
   224
ItuR1411NlosOverRooftopPropagationLossModel::DoAssignStreams (int64_t stream)
7752dc4ce7e9 Replace src/buildings and src/propagation usage of RandomVariable with RandomVariableStream
Mitch Watrous
parents: 8744
diff changeset
   225
{
7752dc4ce7e9 Replace src/buildings and src/propagation usage of RandomVariable with RandomVariableStream
Mitch Watrous
parents: 8744
diff changeset
   226
  return 0;
7752dc4ce7e9 Replace src/buildings and src/propagation usage of RandomVariable with RandomVariableStream
Mitch Watrous
parents: 8744
diff changeset
   227
}
7752dc4ce7e9 Replace src/buildings and src/propagation usage of RandomVariable with RandomVariableStream
Mitch Watrous
parents: 8744
diff changeset
   228
8734
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   229
403c6e61d201 decouple most propagation models from buildings module
Nicola Baldo <nbaldo@cttc.es>
parents:
diff changeset
   230
} // namespace ns3