Channel Matrix Generation following 3GPP TR 38.901. More...
#include "three-gpp-channel-model.h"
Classes | |
struct | ParamsTable |
Data structure that stores the parameters of 3GPP TR 38.901, Table 7.5-6, for a certain scenario. More... | |
struct | ThreeGppChannelParams |
Extends the struct ChannelParams by including information that is used within the ThreeGppChannelModel class. More... | |
Public Member Functions | |
ThreeGppChannelModel () | |
Constructor. | |
~ThreeGppChannelModel () override | |
Destructor. | |
int64_t | AssignStreams (int64_t stream) |
Assign a fixed random variable stream number to the random variables used by this model. | |
void | DoDispose () override |
Destructor implementation. | |
Ptr< const ChannelMatrix > | GetChannel (Ptr< const MobilityModel > aMob, Ptr< const MobilityModel > bMob, Ptr< const PhasedArrayModel > aAntenna, Ptr< const PhasedArrayModel > bAntenna) override |
Looks for the channel matrix associated to the aMob and bMob pair in m_channelMatrixMap. | |
Ptr< ChannelConditionModel > | GetChannelConditionModel () const |
Get the associated channel condition model. | |
double | GetFrequency () const |
Returns the center frequency. | |
Ptr< const ChannelParams > | GetParams (Ptr< const MobilityModel > aMob, Ptr< const MobilityModel > bMob) const override |
Looks for the channel params associated to the aMob and bMob pair in m_channelParamsMap. | |
std::string | GetScenario () const |
Returns the propagation scenario. | |
void | SetChannelConditionModel (Ptr< ChannelConditionModel > model) |
Set the channel condition model. | |
void | SetFrequency (double f) |
Sets the center frequency of the model. | |
void | SetScenario (const std::string &scenario) |
Sets the propagation scenario. | |
Public Member Functions inherited from ns3::MatrixBasedChannelModel | |
~MatrixBasedChannelModel () override | |
Destructor for MatrixBasedChannelModel. | |
Public Member Functions inherited from ns3::Object | |
Object () | |
Constructor. | |
~Object () override | |
Destructor. | |
void | AggregateObject (Ptr< Object > other) |
Aggregate two Objects together. | |
void | Dispose () |
Dispose of this Object. | |
AggregateIterator | GetAggregateIterator () const |
Get an iterator to the Objects aggregated to this one. | |
TypeId | GetInstanceTypeId () const override |
Get the most derived TypeId for this Object. | |
template<typename T > | |
Ptr< T > | GetObject () const |
Get a pointer to the requested aggregated Object. | |
template<> | |
Ptr< Object > | GetObject () const |
Specialization of () for objects of type ns3::Object. | |
template<typename T > | |
Ptr< T > | GetObject (TypeId tid) const |
Get a pointer to the requested aggregated Object by TypeId. | |
template<> | |
Ptr< Object > | GetObject (TypeId tid) const |
Specialization of (TypeId tid) for objects of type ns3::Object. | |
void | Initialize () |
Invoke DoInitialize on all Objects aggregated to this one. | |
bool | IsInitialized () const |
Check if the object has been initialized. | |
void | UnidirectionalAggregateObject (Ptr< Object > other) |
Aggregate an Object to another Object. | |
Public Member Functions inherited from ns3::SimpleRefCount< Object, ObjectBase, ObjectDeleter > | |
SimpleRefCount () | |
Default constructor. | |
SimpleRefCount (const SimpleRefCount &o) | |
Copy constructor. | |
uint32_t | GetReferenceCount () const |
Get the reference count of the object. | |
SimpleRefCount & | operator= (const SimpleRefCount &o) |
Assignment operator. | |
void | Ref () const |
Increment the reference count. | |
void | Unref () const |
Decrement the reference count. | |
Public Member Functions inherited from ns3::ObjectBase | |
virtual | ~ObjectBase () |
Virtual destructor. | |
void | GetAttribute (std::string name, AttributeValue &value, bool permissive=false) const |
Get the value of an attribute, raising fatal errors if unsuccessful. | |
bool | GetAttributeFailSafe (std::string name, AttributeValue &value) const |
Get the value of an attribute without raising errors. | |
void | SetAttribute (std::string name, const AttributeValue &value) |
Set a single attribute, raising fatal errors if unsuccessful. | |
bool | SetAttributeFailSafe (std::string name, const AttributeValue &value) |
Set a single attribute without raising errors. | |
bool | TraceConnect (std::string name, std::string context, const CallbackBase &cb) |
Connect a TraceSource to a Callback with a context. | |
bool | TraceConnectWithoutContext (std::string name, const CallbackBase &cb) |
Connect a TraceSource to a Callback without a context. | |
bool | TraceDisconnect (std::string name, std::string context, const CallbackBase &cb) |
Disconnect from a TraceSource a Callback previously connected with a context. | |
bool | TraceDisconnectWithoutContext (std::string name, const CallbackBase &cb) |
Disconnect from a TraceSource a Callback previously connected without a context. | |
Static Public Member Functions | |
static TypeId | GetTypeId () |
Get the type ID. | |
Static Public Member Functions inherited from ns3::MatrixBasedChannelModel | |
static uint64_t | GetKey (uint32_t a, uint32_t b) |
Generate a unique value for the pair of unsigned integer of 32 bits, where the order does not matter, i.e., the same value will be returned for (a,b) and (b,a). | |
Static Public Member Functions inherited from ns3::Object | |
static TypeId | GetTypeId () |
Register this type. | |
Static Public Member Functions inherited from ns3::ObjectBase | |
static TypeId | GetTypeId () |
Get the type ID. | |
Protected Member Functions | |
bool | AntennaSetupChanged (Ptr< const PhasedArrayModel > aAntenna, Ptr< const PhasedArrayModel > bAntenna, Ptr< const ChannelMatrix > channelMatrix) |
Check if the channel matrix has to be updated due to changes in the number of antenna ports. | |
DoubleVector | CalcAttenuationOfBlockage (const Ptr< ThreeGppChannelModel::ThreeGppChannelParams > channelParams, const DoubleVector &clusterAOA, const DoubleVector &clusterZOA) const |
Applies the blockage model A described in 3GPP TR 38.901. | |
bool | ChannelMatrixNeedsUpdate (Ptr< const ThreeGppChannelParams > channelParams, Ptr< const ChannelMatrix > channelMatrix) |
Check if the channel matrix has to be updated (it needs update when the channel params generation time is more recent than channel matrix generation time. | |
bool | ChannelParamsNeedsUpdate (Ptr< const ThreeGppChannelParams > channelParams, Ptr< const ChannelCondition > channelCondition) const |
Check if the channel params has to be updated. | |
Ptr< ThreeGppChannelParams > | GenerateChannelParameters (const Ptr< const ChannelCondition > channelCondition, const Ptr< const ParamsTable > table3gpp, const Ptr< const MobilityModel > aMob, const Ptr< const MobilityModel > bMob) const |
Prepare 3gpp channel parameters among the nodes a and b. | |
virtual Ptr< ChannelMatrix > | GetNewChannel (Ptr< const ThreeGppChannelParams > channelParams, Ptr< const ParamsTable > table3gpp, const Ptr< const MobilityModel > sMob, const Ptr< const MobilityModel > uMob, Ptr< const PhasedArrayModel > sAntenna, Ptr< const PhasedArrayModel > uAntenna) const |
Compute the channel matrix between two nodes a and b, and their antenna arrays aAntenna and bAntenna using the procedure described in 3GPP TR 38.901. | |
virtual Ptr< const ParamsTable > | GetThreeGppTable (const Ptr< const MobilityModel > aMob, const Ptr< const MobilityModel > bMob, Ptr< const ChannelCondition > channelCondition) const |
Get the parameters needed to apply the channel generation procedure. | |
Ptr< const ParamsTable > | GetThreeGppTable (Ptr< const ChannelCondition > channelCondition, double hBS, double hUT, double distance2D) const |
Get the parameters needed to apply the channel generation procedure. | |
void | Shuffle (double *first, double *last) const |
Shuffle the elements of a simple sequence container of type double. | |
Protected Member Functions inherited from ns3::Object | |
Object (const Object &o) | |
Copy an Object. | |
virtual void | DoInitialize () |
Initialize() implementation. | |
virtual void | NotifyNewAggregate () |
Notify all Objects aggregated to this one of a new Object being aggregated. | |
Protected Member Functions inherited from ns3::ObjectBase | |
void | ConstructSelf (const AttributeConstructionList &attributes) |
Complete construction of ObjectBase; invoked by derived classes. | |
virtual void | NotifyConstructionCompleted () |
Notifier called once the ObjectBase is fully constructed. | |
Static Protected Member Functions | |
static std::pair< double, double > | WrapAngles (double azimuthRad, double inclinationRad) |
Wrap an (azimuth, inclination) angle pair in a valid range. | |
Protected Attributes | |
bool | m_blockage |
enables the blockage model A | |
double | m_blockerSpeed |
the blocker speed | |
Ptr< ChannelConditionModel > | m_channelConditionModel |
the channel condition model | |
std::unordered_map< uint64_t, Ptr< ChannelMatrix > > | m_channelMatrixMap |
map containing the channel realizations per pair of PhasedAntennaArray instances, the key of this map is reciprocal uniquely identifies a pair of PhasedAntennaArrays | |
std::unordered_map< uint64_t, Ptr< ThreeGppChannelParams > > | m_channelParamsMap |
map containing the common channel parameters per pair of nodes, the key of this map is reciprocal and uniquely identifies a pair of nodes | |
double | m_frequency |
the operating frequency | |
Ptr< NormalRandomVariable > | m_normalRv |
normal random variable | |
uint16_t | m_numNonSelfBlocking |
number of non-self-blocking regions | |
bool | m_portraitMode |
true if portrait mode, false if landscape | |
std::string | m_scenario |
the 3GPP scenario | |
Ptr< UniformRandomVariable > | m_uniformRv |
uniform random variable | |
Ptr< UniformRandomVariable > | m_uniformRvDoppler |
uniform random variable, used to compute the additional Doppler contribution | |
Ptr< UniformRandomVariable > | m_uniformRvShuffle |
uniform random variable used to shuffle array in GetNewChannel | |
Time | m_updatePeriod |
the channel update period | |
double | m_vScatt |
value used to compute the additional Doppler contribution for the delayed paths | |
Static Protected Attributes | |
static const uint8_t | PHI_INDEX = 0 |
index of the PHI value in the m_nonSelfBlocking array | |
static const uint8_t | R_INDEX = 4 |
index of the R value in the m_nonSelfBlocking array | |
static const uint8_t | THETA_INDEX |
index of the THETA value in the m_nonSelfBlocking array | |
static const uint8_t | X_INDEX = 1 |
index of the X value in the m_nonSelfBlocking array | |
static const uint8_t | Y_INDEX = 3 |
index of the Y value in the m_nonSelfBlocking array | |
Additional Inherited Members | |
Public Types inherited from ns3::MatrixBasedChannelModel | |
using | Complex2DVector = ComplexMatrixArray |
Create an alias for 2D complex vectors. | |
using | Complex3DVector = ComplexMatrixArray |
Create an alias for 3D complex vectors. | |
using | Double2DVector = std::vector<DoubleVector> |
Type definition for matrices of doubles. | |
using | Double3DVector = std::vector<Double2DVector> |
Type definition for 3D matrices of doubles. | |
using | DoubleVector = std::vector<double> |
Type definition for vectors of doubles. | |
Static Public Attributes inherited from ns3::MatrixBasedChannelModel | |
static const uint8_t | AOA_INDEX = 0 |
index of the AOA value in the m_angle array | |
static const uint8_t | AOD_INDEX = 2 |
index of the AOD value in the m_angle array | |
static const uint8_t | ZOA_INDEX = 1 |
index of the ZOA value in the m_angle array | |
static const uint8_t | ZOD_INDEX = 3 |
index of the ZOD value in the m_angle array | |
Related Symbols inherited from ns3::ObjectBase | |
static TypeId | GetObjectIid () |
Ensure the TypeId for ObjectBase gets fully configured to anchor the inheritance tree properly. | |
Channel Matrix Generation following 3GPP TR 38.901.
The class implements the channel matrix generation procedure described in 3GPP TR 38.901.
Definition at line 37 of file three-gpp-channel-model.h.
ns3::ThreeGppChannelModel::ThreeGppChannelModel | ( | ) |
Constructor.
Definition at line 1067 of file three-gpp-channel-model.cc.
References ns3::CreateObject(), m_normalRv, m_uniformRv, m_uniformRvDoppler, m_uniformRvShuffle, and NS_LOG_FUNCTION.
|
override |
|
protected |
Check if the channel matrix has to be updated due to changes in the number of antenna ports.
aAntenna | the antenna array of node a |
bAntenna | the antenna array of node b |
channelMatrix | channel matrix structure |
Definition at line 2453 of file three-gpp-channel-model.cc.
Referenced by GetChannel().
int64_t ns3::ThreeGppChannelModel::AssignStreams | ( | int64_t | stream | ) |
Assign a fixed random variable stream number to the random variables used by this model.
stream | first stream index to use |
Definition at line 3878 of file three-gpp-channel-model.cc.
References m_normalRv, m_uniformRv, m_uniformRvDoppler, m_uniformRvShuffle, and NS_LOG_FUNCTION.
|
protected |
Applies the blockage model A described in 3GPP TR 38.901.
channelParams | the channel parameters structure |
clusterAOA | vector containing the azimuth angle of arrival for each cluster |
clusterZOA | vector containing the zenith angle of arrival for each cluster |
Definition at line 3618 of file three-gpp-channel-model.cc.
References ns3::DegreesToRadians(), m_blockerSpeed, m_frequency, m_normalRv, m_numNonSelfBlocking, m_portraitMode, m_scenario, m_uniformRv, ns3::Now(), NS_ASSERT_MSG, NS_LOG_FUNCTION, NS_LOG_INFO, ns3::ChannelCondition::O2I, PHI_INDEX, R_INDEX, THETA_INDEX, X_INDEX, and Y_INDEX.
Referenced by GenerateChannelParameters().
|
protected |
Check if the channel matrix has to be updated (it needs update when the channel params generation time is more recent than channel matrix generation time.
channelParams | channel params structure |
channelMatrix | channel matrix structure |
Definition at line 2446 of file three-gpp-channel-model.cc.
Referenced by GetChannel().
|
protected |
Check if the channel params has to be updated.
channelParams | channel params |
channelCondition | the channel condition |
Definition at line 2419 of file three-gpp-channel-model.cc.
References ns3::Time::IsZero(), m_updatePeriod, ns3::Now(), ns3::Simulator::Now(), ns3::Time::NS, NS_LOG_DEBUG, and NS_LOG_FUNCTION.
Referenced by GetChannel().
|
overridevirtual |
Destructor implementation.
This method is called by Dispose() or by the Object's destructor, whichever comes first.
Subclasses are expected to implement their real destruction code in an overridden version of this method and chain up to their parent's implementation once they are done. i.e, for simplicity, the destructor of every subclass should be empty and its content should be moved to the associated DoDispose() method.
It is safe to call GetObject() from within this method.
Reimplemented from ns3::Object.
Definition at line 1085 of file three-gpp-channel-model.cc.
References m_channelConditionModel, m_channelMatrixMap, m_channelParamsMap, and NS_LOG_FUNCTION.
|
protected |
Prepare 3gpp channel parameters among the nodes a and b.
The function does the following steps described in 3GPP 38.901:
Step 4: Generate large scale parameters. All LSPS are uncorrelated. Step 5: Generate Delays. Step 6: Generate cluster powers. Step 7: Generate arrival and departure angles for both azimuth and elevation. Step 8: Coupling of rays within a cluster for both azimuth and elevation shuffle all the arrays to perform random coupling Step 9: Generate the cross polarization power ratios Step 10: Draw initial phases
All relevant generated parameters are added then to ThreeGppChannelParams which is the return value of this function.
channelCondition | the channel condition |
table3gpp | the 3gpp parameters from the table |
aMob | the a node mobility model |
bMob | the b node mobility model |
Definition at line 2577 of file three-gpp-channel-model.cc.
References CalcAttenuationOfBlockage(), ns3::Create(), ns3::DEG2RAD, ns3::DegreesToRadians(), ns3::Angles::GetAzimuth(), ns3::Node::GetId(), ns3::Angles::GetInclination(), ns3::ChannelCondition::LOS, m_blockage, m_normalRv, m_uniformRv, m_uniformRvDoppler, m_vScatt, ns3::Simulator::Now(), NS_ASSERT, NS_FATAL_ERROR, NS_LOG_FUNCTION, NS_LOG_INFO, ns3::offSetAlpha, ns3::RadiansToDegrees(), Shuffle(), and WrapAngles().
Referenced by GetChannel().
|
overridevirtual |
Looks for the channel matrix associated to the aMob and bMob pair in m_channelMatrixMap.
If found, it checks if it has to be updated. If not found or if it has to be updated, it generates a new uncorrelated channel matrix using the method GetNewChannel and updates m_channelMap.
aMob | mobility model of the a device |
bMob | mobility model of the b device |
aAntenna | antenna of the a device |
bAntenna | antenna of the b device |
Implements ns3::MatrixBasedChannelModel.
Definition at line 2468 of file three-gpp-channel-model.cc.
References AntennaSetupChanged(), ChannelMatrixNeedsUpdate(), ChannelParamsNeedsUpdate(), GenerateChannelParameters(), ns3::Node::GetId(), ns3::MatrixBasedChannelModel::GetKey(), GetNewChannel(), GetThreeGppTable(), m_channelConditionModel, m_channelMatrixMap, m_channelParamsMap, NS_LOG_DEBUG, and NS_LOG_FUNCTION.
Ptr< ChannelConditionModel > ns3::ThreeGppChannelModel::GetChannelConditionModel | ( | ) | const |
Get the associated channel condition model.
Definition at line 1172 of file three-gpp-channel-model.cc.
References m_channelConditionModel, and NS_LOG_FUNCTION.
Referenced by GetTypeId().
double ns3::ThreeGppChannelModel::GetFrequency | ( | ) | const |
Returns the center frequency.
Definition at line 1188 of file three-gpp-channel-model.cc.
References m_frequency, and NS_LOG_FUNCTION.
Referenced by GetTypeId().
|
protectedvirtual |
Compute the channel matrix between two nodes a and b, and their antenna arrays aAntenna and bAntenna using the procedure described in 3GPP TR 38.901.
channelParams | the channel parameters previously generated for the pair of nodes a and b |
table3gpp | the 3gpp parameters table |
sMob | the mobility model of node s |
uMob | the mobility model of node u |
sAntenna | the antenna array of node s |
uAntenna | the antenna array of node u |
Definition at line 3227 of file three-gpp-channel-model.cc.
References ns3::Create(), ns3::Angles::GetAzimuth(), ns3::Node::GetId(), ns3::Angles::GetInclination(), ns3::ValArray< T >::GetNumCols(), ns3::ValArray< T >::GetNumPages(), ns3::ValArray< T >::GetNumRows(), ns3::ChannelCondition::LOS, m_frequency, ns3::Simulator::Now(), NS_ASSERT, NS_ASSERT_MSG, NS_LOG_DEBUG, NS_LOG_FUNCTION, and NS_LOG_INFO.
Referenced by GetChannel().
|
overridevirtual |
Looks for the channel params associated to the aMob and bMob pair in m_channelParamsMap.
If not found it will return a nullptr.
aMob | mobility model of the a device |
bMob | mobility model of the b device |
Implements ns3::MatrixBasedChannelModel.
Definition at line 2557 of file three-gpp-channel-model.cc.
References ns3::Node::GetId(), ns3::MatrixBasedChannelModel::GetKey(), m_channelParamsMap, NS_LOG_FUNCTION, and NS_LOG_WARN.
std::string ns3::ThreeGppChannelModel::GetScenario | ( | ) | const |
Returns the propagation scenario.
Definition at line 1210 of file three-gpp-channel-model.cc.
References m_scenario, and NS_LOG_FUNCTION.
Referenced by GetTypeId().
|
protectedvirtual |
Get the parameters needed to apply the channel generation procedure.
aMob | the mobility model of node A |
bMob | the mobility model of node B |
channelCondition | the channel condition |
Definition at line 1217 of file three-gpp-channel-model.cc.
References ns3::cASA, ns3::cASD, ns3::cDS, ns3::ConstCast(), ns3::Create(), ns3::cZSA, ns3::DynamicCast(), m_frequency, m_scenario, NS_ASSERT_MSG, NS_FATAL_ERROR, NS_LOG_FUNCTION, NS_LOG_UNCOND, NS_LOG_WARN, ns3::NTNDenseUrbanLOS, ns3::NTNDenseUrbanNLOS, ns3::NTNRuralLOS, ns3::NTNRuralNLOS, ns3::NTNSuburbanLOS, ns3::NTNSuburbanNLOS, ns3::NTNUrbanLOS, ns3::NTNUrbanNLOS, ns3::numOfCluster, ns3::perClusterShadowingStd, ns3::raysPerCluster, ns3::rTau, ns3::sigK, ns3::sigLgASA, ns3::sigLgASD, ns3::sigLgDS, ns3::sigLgZSA, ns3::sigLgZSD, ns3::sigXpr, ns3::sqrtC_NTN_DenseUrban_LOS, ns3::sqrtC_NTN_DenseUrban_NLOS, ns3::sqrtC_NTN_Rural_LOS, ns3::sqrtC_NTN_Rural_NLOS_Ka, ns3::sqrtC_NTN_Rural_NLOS_S, ns3::sqrtC_NTN_Suburban_LOS, ns3::sqrtC_NTN_Suburban_NLOS, ns3::sqrtC_NTN_Urban_LOS, ns3::sqrtC_NTN_Urban_NLOS, ns3::sqrtC_office_LOS, ns3::sqrtC_office_NLOS, ns3::sqrtC_RMa_LOS, ns3::sqrtC_RMa_NLOS, ns3::sqrtC_RMa_O2I, ns3::sqrtC_UMa_LOS, ns3::sqrtC_UMa_NLOS, ns3::sqrtC_UMa_O2I, ns3::sqrtC_UMi_LOS, ns3::sqrtC_UMi_NLOS, ns3::sqrtC_UMi_O2I, ns3::uK, ns3::uLgASA, ns3::uLgASD, ns3::uLgDS, ns3::uLgZSA, ns3::uLgZSD, and ns3::uXpr.
|
protected |
Get the parameters needed to apply the channel generation procedure.
channelCondition | the channel condition |
hBS | the height of the BS |
hUT | the height of the UT |
distance2D | the 2D distance between tx and rx |
Referenced by GetChannel().
|
static |
Get the type ID.
Definition at line 1098 of file three-gpp-channel-model.cc.
References GetChannelConditionModel(), GetFrequency(), GetScenario(), m_blockage, m_blockerSpeed, m_numNonSelfBlocking, m_portraitMode, m_updatePeriod, m_vScatt, ns3::MakeBooleanAccessor(), ns3::MakeBooleanChecker(), ns3::MakeDoubleAccessor(), ns3::MakeDoubleChecker(), ns3::MakeIntegerAccessor(), ns3::MakeIntegerChecker(), ns3::MakePointerAccessor(), ns3::MakePointerChecker(), ns3::MakeStringAccessor(), ns3::MakeStringChecker(), ns3::MakeTimeAccessor(), ns3::MakeTimeChecker(), ns3::MilliSeconds(), SetChannelConditionModel(), SetFrequency(), ns3::TypeId::SetGroupName(), ns3::TypeId::SetParent(), and SetScenario().
void ns3::ThreeGppChannelModel::SetChannelConditionModel | ( | Ptr< ChannelConditionModel > | model | ) |
Set the channel condition model.
model | a pointer to the ChannelConditionModel object |
Definition at line 1165 of file three-gpp-channel-model.cc.
References m_channelConditionModel, and NS_LOG_FUNCTION.
Referenced by GetTypeId().
void ns3::ThreeGppChannelModel::SetFrequency | ( | double | f | ) |
Sets the center frequency of the model.
f | the center frequency in Hz |
Definition at line 1179 of file three-gpp-channel-model.cc.
References m_frequency, NS_ASSERT_MSG, and NS_LOG_FUNCTION.
Referenced by GetTypeId().
void ns3::ThreeGppChannelModel::SetScenario | ( | const std::string & | scenario | ) |
Sets the propagation scenario.
scenario | the propagation scenario |
Definition at line 1195 of file three-gpp-channel-model.cc.
References m_scenario, NS_ASSERT_MSG, and NS_LOG_FUNCTION.
Referenced by GetTypeId().
Shuffle the elements of a simple sequence container of type double.
first | Pointer to the first element among the elements to be shuffled |
last | Pointer to the last element among the elements to be shuffled |
Definition at line 3869 of file three-gpp-channel-model.cc.
References m_uniformRvShuffle.
Referenced by GenerateChannelParameters().
|
staticprotected |
Wrap an (azimuth, inclination) angle pair in a valid range.
Specifically, inclination must be in [0, M_PI] and azimuth in [0, 2*M_PI). If the inclination angle is outside of its range, the azimuth angle is rotated by M_PI. This methods aims specifically at solving the problem of generating angles at the boundaries of the angle domain, specifically, generating angle distributions close to inclinationRad=0 and inclinationRad=M_PI.
azimuthRad | the azimuth angle in radians |
inclinationRad | the inclination angle in radians |
Definition at line 3597 of file three-gpp-channel-model.cc.
References NS_ASSERT_MSG, and ns3::WrapTo2Pi().
Referenced by GenerateChannelParameters().
|
protected |
enables the blockage model A
Definition at line 379 of file three-gpp-channel-model.h.
Referenced by GenerateChannelParameters(), and GetTypeId().
|
protected |
the blocker speed
Definition at line 382 of file three-gpp-channel-model.h.
Referenced by CalcAttenuationOfBlockage(), and GetTypeId().
|
protected |
the channel condition model
Definition at line 365 of file three-gpp-channel-model.h.
Referenced by DoDispose(), GetChannel(), GetChannelConditionModel(), and SetChannelConditionModel().
|
protected |
map containing the channel realizations per pair of PhasedAntennaArray instances, the key of this map is reciprocal uniquely identifies a pair of PhasedAntennaArrays
Definition at line 355 of file three-gpp-channel-model.h.
Referenced by DoDispose(), and GetChannel().
|
protected |
map containing the common channel parameters per pair of nodes, the key of this map is reciprocal and uniquely identifies a pair of nodes
Definition at line 359 of file three-gpp-channel-model.h.
Referenced by DoDispose(), GetChannel(), and GetParams().
|
protected |
the operating frequency
Definition at line 363 of file three-gpp-channel-model.h.
Referenced by CalcAttenuationOfBlockage(), GetFrequency(), GetNewChannel(), GetThreeGppTable(), and SetFrequency().
|
protected |
normal random variable
Definition at line 367 of file three-gpp-channel-model.h.
Referenced by ThreeGppChannelModel(), AssignStreams(), CalcAttenuationOfBlockage(), and GenerateChannelParameters().
|
protected |
number of non-self-blocking regions
Definition at line 380 of file three-gpp-channel-model.h.
Referenced by CalcAttenuationOfBlockage(), and GetTypeId().
|
protected |
true if portrait mode, false if landscape
Definition at line 381 of file three-gpp-channel-model.h.
Referenced by CalcAttenuationOfBlockage(), and GetTypeId().
|
protected |
the 3GPP scenario
Definition at line 364 of file three-gpp-channel-model.h.
Referenced by CalcAttenuationOfBlockage(), GetScenario(), GetThreeGppTable(), and SetScenario().
|
protected |
uniform random variable
Definition at line 366 of file three-gpp-channel-model.h.
Referenced by ThreeGppChannelModel(), AssignStreams(), CalcAttenuationOfBlockage(), and GenerateChannelParameters().
|
protected |
uniform random variable, used to compute the additional Doppler contribution
Definition at line 375 of file three-gpp-channel-model.h.
Referenced by ThreeGppChannelModel(), AssignStreams(), and GenerateChannelParameters().
|
protected |
uniform random variable used to shuffle array in GetNewChannel
Definition at line 369 of file three-gpp-channel-model.h.
Referenced by ThreeGppChannelModel(), AssignStreams(), and Shuffle().
|
protected |
the channel update period
Definition at line 362 of file three-gpp-channel-model.h.
Referenced by ChannelParamsNeedsUpdate(), and GetTypeId().
|
protected |
value used to compute the additional Doppler contribution for the delayed paths
Definition at line 373 of file three-gpp-channel-model.h.
Referenced by GenerateChannelParameters(), and GetTypeId().
|
staticprotected |
index of the PHI value in the m_nonSelfBlocking array
Definition at line 384 of file three-gpp-channel-model.h.
Referenced by CalcAttenuationOfBlockage().
|
staticprotected |
index of the R value in the m_nonSelfBlocking array
Definition at line 389 of file three-gpp-channel-model.h.
Referenced by CalcAttenuationOfBlockage().
|
staticprotected |
index of the THETA value in the m_nonSelfBlocking array
Definition at line 386 of file three-gpp-channel-model.h.
Referenced by CalcAttenuationOfBlockage().
|
staticprotected |
index of the X value in the m_nonSelfBlocking array
Definition at line 385 of file three-gpp-channel-model.h.
Referenced by CalcAttenuationOfBlockage().
|
staticprotected |
index of the Y value in the m_nonSelfBlocking array
Definition at line 388 of file three-gpp-channel-model.h.
Referenced by CalcAttenuationOfBlockage().