A Discrete-Event Network Simulator
API
Loading...
Searching...
No Matches
three-gpp-antenna-model.cc
Go to the documentation of this file.
1/*
2 * Copyright (c) 2020 University of Padova, Dep. of Information Engineering, SIGNET lab.
3 *
4 * SPDX-License-Identifier: GPL-2.0-only
5 */
6
8
9#include "antenna-model.h"
10
11#include <ns3/double.h>
12#include <ns3/log.h>
13
14#include <cmath>
15
16namespace ns3
17{
18
19NS_LOG_COMPONENT_DEFINE("ThreeGppAntennaModel");
20
21NS_OBJECT_ENSURE_REGISTERED(ThreeGppAntennaModel);
22
23TypeId
25{
26 static TypeId tid = TypeId("ns3::ThreeGppAntennaModel")
28 .SetGroupName("Antenna")
29 .AddConstructor<ThreeGppAntennaModel>();
30 return tid;
31}
32
34 : m_verticalBeamwidthDegrees{65},
35 m_horizontalBeamwidthDegrees{65},
36 m_aMax{30},
37 m_slaV{30},
38 m_geMax{8.0}
39{
40}
41
45
46double
51
52double
57
58double
60{
61 return m_slaV;
62}
63
64double
69
70double
75
76double
78{
79 NS_LOG_FUNCTION(this << a);
80
81 double phiDeg = RadiansToDegrees(a.GetAzimuth());
82 double thetaDeg = RadiansToDegrees(a.GetInclination());
83
84 NS_ASSERT_MSG(-180.0 <= phiDeg && phiDeg <= 180.0, "Out of boundaries: phiDeg=" << phiDeg);
85 NS_ASSERT_MSG(0.0 <= thetaDeg && thetaDeg <= 180.0, "Out of boundaries: thetaDeg=" << thetaDeg);
86
87 // compute the radiation power pattern using equations in table 7.3-1 in
88 // 3GPP TR 38.901
89 double vertGain = -std::min(m_slaV,
90 12 * pow((thetaDeg - 90) / m_verticalBeamwidthDegrees,
91 2)); // vertical cut of the radiation power pattern (dB)
92 double horizGain = -std::min(m_aMax,
93 12 * pow(phiDeg / m_horizontalBeamwidthDegrees,
94 2)); // horizontal cut of the radiation power pattern (dB)
95
96 double gainDb =
97 m_geMax - std::min(m_aMax, -(vertGain + horizGain)); // 3D radiation power pattern (dB)
98
99 NS_LOG_DEBUG("gain=" << gainDb << " dB");
100 return gainDb;
101}
102
103} // namespace ns3
Class holding the azimuth and inclination angles of spherical coordinates.
Definition angles.h:107
double GetInclination() const
Getter for inclination angle.
Definition angles.cc:236
double GetAzimuth() const
Getter for azimuth angle.
Definition angles.cc:230
interface for antenna radiation pattern models
Antenna model based on a parabolic approximation of the main lobe radiation pattern.
double m_geMax
maximum directional gain of the antenna element (G_{E,max}) [dBi]
double GetAntennaElementGain() const
Get the maximum directional gain of the antenna element.
static TypeId GetTypeId()
Get the type ID.
double m_horizontalBeamwidthDegrees
beamwidth in the horizontal direction [deg]
double GetVerticalBeamwidth() const
Get the vertical beamwidth of the antenna element.
double GetHorizontalBeamwidth() const
Get the horizontal beamwidth of the antenna element.
double m_verticalBeamwidthDegrees
beamwidth in the vertical direction [deg]
double GetGainDb(Angles a) override
this method is expected to be re-implemented by each antenna model
double m_aMax
maximum attenuation (A_{max}) [dB]
double GetMaxAttenuation() const
Get the maximum attenuation of the antenna element.
double GetSlaV() const
Get the side-lobe attenuation in the vertical direction of the antenna element.
double m_slaV
side-lobe attenuation in the vertical direction (SLA_V) [dB]
a unique identifier for an interface.
Definition type-id.h:48
TypeId SetParent(TypeId tid)
Set the parent TypeId.
Definition type-id.cc:1001
#define NS_ASSERT_MSG(condition, message)
At runtime, in debugging builds, if this condition is not true, the program prints the message to out...
Definition assert.h:75
#define NS_LOG_COMPONENT_DEFINE(name)
Define a Log component with a specific name.
Definition log.h:191
#define NS_LOG_DEBUG(msg)
Use NS_LOG to output a message of level LOG_DEBUG.
Definition log.h:257
#define NS_LOG_FUNCTION(parameters)
If log level LOG_FUNCTION is enabled, this macro will output all input parameters separated by ",...
#define NS_OBJECT_ENSURE_REGISTERED(type)
Register an Object subclass with the TypeId system.
Definition object-base.h:35
Every class exported by the ns3 library is enclosed in the ns3 namespace.
double RadiansToDegrees(double radians)
converts radians to degrees
Definition angles.cc:34