23 #include <ns3/double.h> 25 #include <ns3/abort.h> 26 #include <ns3/pointer.h> 27 #include <ns3/epc-helper.h> 51 TypeId (
"ns3::LteHexGridEnbTopologyHelper")
53 .AddConstructor<LteHexGridEnbTopologyHelper> ()
54 .AddAttribute (
"InterSiteDistance",
55 "The distance [m] between nearby sites",
58 MakeDoubleChecker<double> ())
59 .AddAttribute (
"SectorOffset",
60 "The offset [m] in the position for the node of each sector with respect " 61 "to the center of the three-sector site",
64 MakeDoubleChecker<double> ())
65 .AddAttribute (
"SiteHeight",
66 "The height [m] of each site",
69 MakeDoubleChecker<double> ())
70 .AddAttribute (
"MinX",
"The x coordinate where the hex grid starts.",
73 MakeDoubleChecker<double> ())
74 .AddAttribute (
"MinY",
"The y coordinate where the hex grid starts.",
77 MakeDoubleChecker<double> ())
78 .AddAttribute (
"GridWidth",
"The number of sites in even rows (odd rows will have one additional site).",
81 MakeUintegerChecker<uint32_t> ())
106 const double xydfactor = std::sqrt (0.75);
107 double yd = xydfactor*
m_d;
108 for (uint32_t
n = 0;
n < c.
GetN (); ++
n)
110 uint32_t currentSite =
n / 3;
113 uint32_t rowIndex = biRowIndex*2;
114 uint32_t colIndex = biRowRemainder;
121 <<
" rowIndex " << rowIndex
122 <<
" colIndex " << colIndex
123 <<
" biRowIndex " << biRowIndex
124 <<
" biRowRemainder " << biRowRemainder);
125 double y =
m_yMin + yd * rowIndex;
127 double antennaOrientation;
128 if ((rowIndex % 2) == 0)
140 antennaOrientation = 0;
146 antennaOrientation = 120;
153 antennaOrientation = -120;
164 NS_LOG_LOGIC (
"node " <<
n <<
" at " << pos <<
" antennaOrientation " << antennaOrientation);
uint32_t m_siteHeight
The height [m] of each site.
#define NS_LOG_FUNCTION(parameters)
If log level LOG_FUNCTION is enabled, this macro will output all input parameters separated by "...
NetDeviceContainer InstallEnbDevice(NodeContainer c)
Create a set of eNodeB devices.
#define NS_OBJECT_ENSURE_REGISTERED(type)
Register an Object subclass with the TypeId system.
double m_offset
The offset [m] in the position for the node of each sector with respect to the center of the three-se...
#define NS_LOG_COMPONENT_DEFINE(name)
Define a Log component with a specific name.
uint32_t m_gridWidth
The number of sites in even rows (odd rows will have one additional site)
virtual void DoDispose(void)
Destructor implementation.
void SetLteHelper(Ptr< LteHelper > h)
Set the LteHelper to be used to actually create the EnbNetDevices.
NetDeviceContainer SetPositionAndInstallEnbDevice(NodeContainer c)
Position the nodes on a hex grid and install the corresponding EnbNetDevices with antenna boresight c...
LteHexGridEnbTopologyHelper(void)
Keep track of the current position and velocity of an object.
void Add(NetDeviceContainer other)
Append the contents of another NetDeviceContainer to the end of this container.
Hold an unsigned integer type.
holds a vector of ns3::NetDevice pointers
virtual ~LteHexGridEnbTopologyHelper(void)
double m_yMin
The y coordinate where the hex grid starts.
double m_d
The distance [m] between nearby sites.
uint32_t GetN(void) const
Get the number of Ptr<Node> stored in this container.
Ptr< T > GetObject(void) const
Get a pointer to the requested aggregated Object.
Every class exported by the ns3 library is enclosed in the ns3 namespace.
keep track of a set of node pointers.
virtual void DoDispose(void)
Destructor implementation.
Ptr< LteHelper > m_lteHelper
Pointer to LteHelper object.
void SetPosition(const Vector &position)
NS_LOG_LOGIC("Net device "<< nd<< " is not bridged")
Ptr< const AttributeAccessor > MakeDoubleAccessor(T1 a1)
Create an AttributeAccessor for a class data member, or a lone class get functor or set method...
static TypeId GetTypeId(void)
Register this type.
double m_xMin
The x coordinate where the hex grid starts.
void SetEnbAntennaModelAttribute(std::string n, const AttributeValue &v)
Set an attribute for the eNodeB antenna model to be created.
Ptr< Node > Get(uint32_t i) const
Get the Ptr<Node> stored in this container at a given index.
A base class which provides memory management and object aggregation.
This class can be used to hold variables of floating point type such as 'double' or 'float'...
Ptr< const AttributeAccessor > MakeUintegerAccessor(T1 a1)
Create an AttributeAccessor for a class data member, or a lone class get functor or set method...
a unique identifier for an interface.
void SetFfrAlgorithmAttribute(std::string n, const AttributeValue &v)
Set an attribute for the FFR algorithm to be created.
TypeId SetParent(TypeId tid)
Set the parent TypeId.