A Discrete-Event Network Simulator
API
ns3::ThreeGppChannelModel Class Reference

Channel Matrix Generation following 3GPP TR 38.901. More...

#include "three-gpp-channel-model.h"

+ Inheritance diagram for ns3::ThreeGppChannelModel:
+ Collaboration diagram for ns3::ThreeGppChannelModel:

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. More...
 
 ~ThreeGppChannelModel ()
 Destructor. More...
 
int64_t AssignStreams (int64_t stream)
 Assign a fixed random variable stream number to the random variables used by this model. More...
 
void DoDispose () override
 Destructor implementation. More...
 
Ptr< const ChannelMatrixGetChannel (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. More...
 
Ptr< ChannelConditionModelGetChannelConditionModel () const
 Get the associated channel condition model. More...
 
double GetFrequency (void) const
 Returns the center frequency. More...
 
Ptr< const ChannelParamsGetParams (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. More...
 
std::string GetScenario (void) const
 Returns the propagation scenario. More...
 
void SetChannelConditionModel (Ptr< ChannelConditionModel > model)
 Set the channel condition model. More...
 
void SetFrequency (double f)
 Sets the center frequency of the model. More...
 
void SetScenario (const std::string &scenario)
 Sets the propagation scenario. More...
 
- Public Member Functions inherited from ns3::MatrixBasedChannelModel
virtual ~MatrixBasedChannelModel ()
 Destructor for MatrixBasedChannelModel. More...
 
- Public Member Functions inherited from ns3::Object
 Object ()
 Constructor. More...
 
virtual ~Object ()
 Destructor. More...
 
void AggregateObject (Ptr< Object > other)
 Aggregate two Objects together. More...
 
void Dispose (void)
 Dispose of this Object. More...
 
AggregateIterator GetAggregateIterator (void) const
 Get an iterator to the Objects aggregated to this one. More...
 
virtual TypeId GetInstanceTypeId (void) const
 Get the most derived TypeId for this Object. More...
 
template<>
Ptr< ObjectGetObject () const
 Specialization of () for objects of type ns3::Object. More...
 
template<typename T >
Ptr< T > GetObject (TypeId tid) const
 Get a pointer to the requested aggregated Object by TypeId. More...
 
template<>
Ptr< ObjectGetObject (TypeId tid) const
 Specialization of (TypeId tid) for objects of type ns3::Object. More...
 
template<typename T >
Ptr< T > GetObject (void) const
 Get a pointer to the requested aggregated Object. More...
 
void Initialize (void)
 Invoke DoInitialize on all Objects aggregated to this one. More...
 
bool IsInitialized (void) const
 Check if the object has been initialized. More...
 
- Public Member Functions inherited from ns3::SimpleRefCount< Object, ObjectBase, ObjectDeleter >
 SimpleRefCount ()
 Default constructor. More...
 
 SimpleRefCount (const SimpleRefCount &o[[maybe_unused]])
 Copy constructor. More...
 
uint32_t GetReferenceCount (void) const
 Get the reference count of the object. More...
 
SimpleRefCountoperator= ([[maybe_unused]] const SimpleRefCount &o)
 Assignment operator. More...
 
void Ref (void) const
 Increment the reference count. More...
 
void Unref (void) const
 Decrement the reference count. More...
 
- Public Member Functions inherited from ns3::ObjectBase
virtual ~ObjectBase ()
 Virtual destructor. More...
 
void GetAttribute (std::string name, AttributeValue &value) const
 Get the value of an attribute, raising fatal errors if unsuccessful. More...
 
bool GetAttributeFailSafe (std::string name, AttributeValue &value) const
 Get the value of an attribute without raising erros. More...
 
void SetAttribute (std::string name, const AttributeValue &value)
 Set a single attribute, raising fatal errors if unsuccessful. More...
 
bool SetAttributeFailSafe (std::string name, const AttributeValue &value)
 Set a single attribute without raising errors. More...
 
bool TraceConnect (std::string name, std::string context, const CallbackBase &cb)
 Connect a TraceSource to a Callback with a context. More...
 
bool TraceConnectWithoutContext (std::string name, const CallbackBase &cb)
 Connect a TraceSource to a Callback without a context. More...
 
bool TraceDisconnect (std::string name, std::string context, const CallbackBase &cb)
 Disconnect from a TraceSource a Callback previously connected with a context. More...
 
bool TraceDisconnectWithoutContext (std::string name, const CallbackBase &cb)
 Disconnect from a TraceSource a Callback previously connected without a context. More...
 

Static Public Member Functions

static TypeId GetTypeId ()
 Get the type ID. More...
 
- 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). More...
 
- Static Public Member Functions inherited from ns3::Object
static TypeId GetTypeId (void)
 Register this type. More...
 
- Static Public Member Functions inherited from ns3::ObjectBase
static TypeId GetTypeId (void)
 Get the type ID. More...
 

Protected Member Functions

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. More...
 
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. More...
 
bool ChannelParamsNeedsUpdate (Ptr< const ThreeGppChannelParams > channelParams, Ptr< const ChannelCondition > channelCondition) const
 Check if the channel params has to be updated. More...
 
Ptr< ThreeGppChannelParamsGenerateChannelParameters (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. More...
 
virtual Ptr< ChannelMatrixGetNewChannel (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. More...
 
virtual Ptr< const ParamsTableGetThreeGppTable (Ptr< const ChannelCondition > channelCondition, double hBS, double hUT, double distance2D) const
 Get the parameters needed to apply the channel generation procedure. More...
 
void Shuffle (double *first, double *last) const
 Shuffle the elements of a simple sequence container of type double. More...
 
- Protected Member Functions inherited from ns3::Object
 Object (const Object &o)
 Copy an Object. More...
 
virtual void DoInitialize (void)
 Initialize() implementation. More...
 
virtual void NotifyNewAggregate (void)
 Notify all Objects aggregated to this one of a new Object being aggregated. More...
 
- Protected Member Functions inherited from ns3::ObjectBase
void ConstructSelf (const AttributeConstructionList &attributes)
 Complete construction of ObjectBase; invoked by derived classes. More...
 
virtual void NotifyConstructionCompleted (void)
 Notifier called once the ObjectBase is fully constructed. More...
 

Static Protected Member Functions

static std::pair< double, double > WrapAngles (double azimuthRad, double inclinationRad)
 Wrap an (azimuth, inclination) angle pair in a valid range. More...
 

Protected Attributes

bool m_blockage
 enables the blockage model A More...
 
double m_blockerSpeed
 the blocker speed More...
 
Ptr< ChannelConditionModelm_channelConditionModel
 the channel condition model More...
 
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 More...
 
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 More...
 
double m_frequency
 the operating frequency More...
 
Ptr< NormalRandomVariablem_normalRv
 normal random variable More...
 
uint16_t m_numNonSelfBlocking
 number of non-self-blocking regions More...
 
bool m_portraitMode
 true if potrait mode, false if landscape More...
 
std::string m_scenario
 the 3GPP scenario More...
 
Ptr< UniformRandomVariablem_uniformRv
 uniform random variable More...
 
Ptr< UniformRandomVariablem_uniformRvDoppler
 uniform random variable, used to compute the additional Doppler contribution More...
 
Ptr< UniformRandomVariablem_uniformRvShuffle
 uniform random variable used to shuffle array in GetNewChannel More...
 
Time m_updatePeriod
 the channel update period More...
 
double m_vScatt
 value used to compute the additional Doppler contribution for the delayed paths More...
 

Static Protected Attributes

static const uint8_t PHI_INDEX = 0
 index of the PHI value in the m_nonSelfBlocking array More...
 
static const uint8_t R_INDEX = 4
 index of the R value in the m_nonSelfBlocking array More...
 
static const uint8_t THETA_INDEX = 2
 index of the THETA value in the m_nonSelfBlocking array More...
 
static const uint8_t X_INDEX = 1
 index of the X value in the m_nonSelfBlocking array More...
 
static const uint8_t Y_INDEX = 3
 index of the Y value in the m_nonSelfBlocking array More...
 

Additional Inherited Members

- Public Types inherited from ns3::MatrixBasedChannelModel
typedef std::vector< PhasedArrayModel::ComplexVectorComplex2DVector
 type definition for complex matrices More...
 
typedef std::vector< Complex2DVectorComplex3DVector
 type definition for complex 3D matrices More...
 
typedef std::vector< DoubleVectorDouble2DVector
 type definition for matrices of doubles More...
 
typedef std::vector< Double2DVectorDouble3DVector
 type definition for 3D matrices of doubles More...
 
typedef std::vector< double > DoubleVector
 type definition for vectors of doubles More...
 
- Static Public Attributes inherited from ns3::MatrixBasedChannelModel
static const uint8_t AOA_INDEX = 0
 index of the AOA value in the m_angle array More...
 
static const uint8_t AOD_INDEX = 2
 index of the AOD value in the m_angle array More...
 
static const uint8_t ZOA_INDEX = 1
 index of the ZOA value in the m_angle array More...
 
static const uint8_t ZOD_INDEX = 3
 index of the ZOD value in the m_angle array More...
 

Detailed Description

Channel Matrix Generation following 3GPP TR 38.901.

Introspection did not find any typical Config paths.

The class implements the channel matrix generation procedure described in 3GPP TR 38.901.

See also
GetChannel


Attributes

  • Frequency: The operating Frequency in Hz
    • Set with class: ns3::DoubleValue
    • Underlying type: double -1.79769e+308:1.79769e+308
    • Initial value: 5e+08
    • Flags: construct write read
  • Scenario: The 3GPP scenario (RMa, UMa, UMi-StreetCanyon, InH-OfficeOpen, InH-OfficeMixed)
    • Set with class: StringValue
    • Underlying type:
    • Initial value: UMa
    • Flags: construct write read
  • ChannelConditionModel: Pointer to the channel condition model
  • UpdatePeriod: Specify the channel coherence time
    • Set with class: ns3::TimeValue
    • Underlying type: Time +9.22337e+18ns:+9.22337e+18ns
    • Initial value: +0ns
    • Flags: construct write read
  • Blockage: Enable blockage model A (sec 7.6.4.1)
    • Set with class: BooleanValue
    • Underlying type: bool
    • Initial value: false
    • Flags: construct write read
  • NumNonselfBlocking: number of non-self-blocking regions
    • Set with class: ns3::IntegerValue
    • Underlying type: uint16_t 0:65535
    • Initial value: 4
    • Flags: construct write read
  • PortraitMode: true for portrait mode, false for landscape mode
    • Set with class: BooleanValue
    • Underlying type: bool
    • Initial value: true
    • Flags: construct write read
  • BlockerSpeed: The speed of moving blockers, the unit is m/s
    • Set with class: ns3::DoubleValue
    • Underlying type: double -1.79769e+308:1.79769e+308
    • Initial value: 1
    • Flags: construct write read
  • vScatt: Maximum speed of the vehicle in the layout (see 3GPP TR 37.885 v15.3.0, Sec. 6.2.3).Used to compute the additional contribution for the Doppler ofdelayed (reflected) paths
    • Set with class: ns3::DoubleValue
    • Underlying type: double 0:1.79769e+308
    • Initial value: 0
    • Flags: construct write read

No TraceSources are defined for this type.
Size of this type is 256 bytes (on a 64-bit architecture).

Definition at line 48 of file three-gpp-channel-model.h.

Constructor & Destructor Documentation

◆ ThreeGppChannelModel()

ns3::ThreeGppChannelModel::ThreeGppChannelModel ( )

Constructor.

Definition at line 244 of file three-gpp-channel-model.cc.

References m_normalRv, m_uniformRv, m_uniformRvDoppler, m_uniformRvShuffle, and NS_LOG_FUNCTION.

◆ ~ThreeGppChannelModel()

ns3::ThreeGppChannelModel::~ThreeGppChannelModel ( )

Destructor.

Definition at line 256 of file three-gpp-channel-model.cc.

References NS_LOG_FUNCTION.

Member Function Documentation

◆ AssignStreams()

int64_t ns3::ThreeGppChannelModel::AssignStreams ( int64_t  stream)

Assign a fixed random variable stream number to the random variables used by this model.

Parameters
streamfirst stream index to use
Returns
the number of stream indices assigned by this model

Definition at line 2265 of file three-gpp-channel-model.cc.

References m_normalRv, m_uniformRv, m_uniformRvDoppler, m_uniformRvShuffle, NS_LOG_FUNCTION, and ns3::RandomVariableStream::SetStream().

+ Here is the call graph for this function:

◆ CalcAttenuationOfBlockage()

MatrixBasedChannelModel::DoubleVector ns3::ThreeGppChannelModel::CalcAttenuationOfBlockage ( const Ptr< ThreeGppChannelModel::ThreeGppChannelParams channelParams,
const DoubleVector clusterAOA,
const DoubleVector clusterZOA 
) const
protected

Applies the blockage model A described in 3GPP TR 38.901.

Parameters
channelParamsthe channel parameters structure
clusterAOAvector containing the azimuth angle of arrival for each cluster
clusterZOAvector containing the zenith angle of arrival for each cluster
Returns
vector containing the power attenuation for each cluster

Definition at line 2037 of file three-gpp-channel-model.cc.

References ns3::DegreesToRadians(), ns3::UniformRandomVariable::GetValue(), 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().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ ChannelMatrixNeedsUpdate()

bool ns3::ThreeGppChannelModel::ChannelMatrixNeedsUpdate ( Ptr< const ThreeGppChannelParams channelParams,
Ptr< const ChannelMatrix channelMatrix 
)
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.

Parameters
channelParamschannel params structure
channelMatrixchannel matrix structure
Returns
true if the channel matrix has to be updated, false otherwise

Definition at line 1068 of file three-gpp-channel-model.cc.

Referenced by GetChannel().

+ Here is the caller graph for this function:

◆ ChannelParamsNeedsUpdate()

bool ns3::ThreeGppChannelModel::ChannelParamsNeedsUpdate ( Ptr< const ThreeGppChannelParams channelParams,
Ptr< const ChannelCondition channelCondition 
) const
protected

Check if the channel params has to be updated.

Parameters
channelParamschannel params
channelConditionthe channel condition
Returns
true if the channel params has to be updated, false otherwise

Definition at line 1042 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().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ DoDispose()

void ns3::ThreeGppChannelModel::DoDispose ( void  )
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 262 of file three-gpp-channel-model.cc.

References m_channelConditionModel, m_channelMatrixMap, m_channelParamsMap, and NS_LOG_FUNCTION.

◆ GenerateChannelParameters()

Ptr< ThreeGppChannelModel::ThreeGppChannelParams > ns3::ThreeGppChannelModel::GenerateChannelParameters ( const Ptr< const ChannelCondition channelCondition,
const Ptr< const ParamsTable table3gpp,
const Ptr< const MobilityModel aMob,
const Ptr< const MobilityModel bMob 
) const
protected

Prepare 3gpp channel parameters among the nodes a and b.

The function does the followin 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.

Parameters
channelConditionthe channel condition
table3gppthe 3gpp parameters from the table
aMobthe a node mobility model
bMobthe b node mobility model
Returns
ThreeGppChannelParams structure with all the channel parameters generated according 38.901 steps from 4 to 10.

Definition at line 1196 of file three-gpp-channel-model.cc.

References sample-rng-plot::alpha, CalcAttenuationOfBlockage(), ns3::DegreesToRadians(), ns3::Angles::GetAzimuth(), ns3::Node::GetId(), ns3::Angles::GetInclination(), ns3::UniformRandomVariable::GetValue(), ns3::ChannelCondition::LOS, m_blockage, m_normalRv, m_uniformRv, m_uniformRvDoppler, m_vScatt, max, min, ns3::Simulator::Now(), NS_ASSERT, NS_FATAL_ERROR, NS_LOG_FUNCTION, NS_LOG_INFO, ns3::offSetAlpha, ns3::RadiansToDegrees(), Shuffle(), and WrapAngles().

Referenced by GetChannel().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ GetChannel()

Ptr< const MatrixBasedChannelModel::ChannelMatrix > ns3::ThreeGppChannelModel::GetChannel ( Ptr< const MobilityModel aMob,
Ptr< const MobilityModel bMob,
Ptr< const PhasedArrayModel aAntenna,
Ptr< const PhasedArrayModel bAntenna 
)
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.

Parameters
aMobmobility model of the a device
bMobmobility model of the b device
aAntennaantenna of the a device
bAntennaantenna of the b device
Returns
the channel matrix

Implements ns3::MatrixBasedChannelModel.

Definition at line 1082 of file three-gpp-channel-model.cc.

References ChannelMatrixNeedsUpdate(), ChannelParamsNeedsUpdate(), GenerateChannelParameters(), ns3::Node::GetId(), ns3::MatrixBasedChannelModel::GetKey(), GetNewChannel(), GetThreeGppTable(), ns3::MatrixBasedChannelModel::ChannelMatrix::m_antennaPair, m_channelConditionModel, m_channelMatrixMap, m_channelParamsMap, max, min, NS_LOG_DEBUG, NS_LOG_FUNCTION, and sample-rng-plot::x.

+ Here is the call graph for this function:

◆ GetChannelConditionModel()

Ptr< ChannelConditionModel > ns3::ThreeGppChannelModel::GetChannelConditionModel ( void  ) const

Get the associated channel condition model.

Returns
a pointer to the ChannelConditionModel object

Definition at line 345 of file three-gpp-channel-model.cc.

References m_channelConditionModel, and NS_LOG_FUNCTION.

Referenced by GetTypeId().

+ Here is the caller graph for this function:

◆ GetFrequency()

double ns3::ThreeGppChannelModel::GetFrequency ( void  ) const

Returns the center frequency.

Returns
the center frequency in Hz

Definition at line 360 of file three-gpp-channel-model.cc.

References m_frequency, and NS_LOG_FUNCTION.

Referenced by GetTypeId().

+ Here is the caller graph for this function:

◆ GetNewChannel()

Ptr< MatrixBasedChannelModel::ChannelMatrix > ns3::ThreeGppChannelModel::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
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.

Parameters
channelParamsthe channel parameters previously generated for the pair of nodes a and b
table3gppthe 3gpp parameters table
sMobthe mobility model of node s
uMobthe mobility model of node u
sAntennathe antenna array of node s
uAntennathe antenna array of node u
Returns
the channel realization

Definition at line 1768 of file three-gpp-channel-model.cc.

References ns3::Angles::GetAzimuth(), ns3::Node::GetId(), ns3::Angles::GetInclination(), bianchi11ax::k, ns3::ChannelCondition::LOS, ns3::MatrixBasedChannelModel::ChannelMatrix::m_channel, m_frequency, ns3::MatrixBasedChannelModel::ChannelMatrix::m_generatedTime, ns3::MatrixBasedChannelModel::ChannelMatrix::m_nodeIds, max, min, ns3::Simulator::Now(), NS_ASSERT, NS_ASSERT_MSG, NS_LOG_DEBUG, NS_LOG_FUNCTION, NS_LOG_INFO, and sample-rng-plot::x.

Referenced by GetChannel().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ GetParams()

Ptr< const MatrixBasedChannelModel::ChannelParams > ns3::ThreeGppChannelModel::GetParams ( Ptr< const MobilityModel aMob,
Ptr< const MobilityModel bMob 
) const
overridevirtual

Looks for the channel params associated to the aMob and bMob pair in m_channelParamsMap.

If not found it will return a nullptr.

Parameters
aMobmobility model of the a device
bMobmobility model of the b device
Returns
the channel params

Implements ns3::MatrixBasedChannelModel.

Definition at line 1175 of file three-gpp-channel-model.cc.

References ns3::Node::GetId(), ns3::MatrixBasedChannelModel::GetKey(), m_channelParamsMap, NS_LOG_FUNCTION, and NS_LOG_WARN.

+ Here is the call graph for this function:

◆ GetScenario()

std::string ns3::ThreeGppChannelModel::GetScenario ( void  ) const

Returns the propagation scenario.

Returns
the propagation scenario

Definition at line 379 of file three-gpp-channel-model.cc.

References m_scenario, and NS_LOG_FUNCTION.

Referenced by GetTypeId().

+ Here is the caller graph for this function:

◆ GetThreeGppTable()

Ptr< const ThreeGppChannelModel::ParamsTable > ns3::ThreeGppChannelModel::GetThreeGppTable ( Ptr< const ChannelCondition channelCondition,
double  hBS,
double  hUT,
double  distance2D 
) const
protectedvirtual

Get the parameters needed to apply the channel generation procedure.

Parameters
channelConditionthe channel condition
hBSthe height of the BS
hUTthe height of the UT
distance2Dthe 2D distance between tx and rx
Returns
the parameters table

Definition at line 386 of file three-gpp-channel-model.cc.

References m_frequency, m_scenario, max, NS_ASSERT_MSG, NS_FATAL_ERROR, NS_LOG_FUNCTION, NS_LOG_WARN, 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, and ns3::sqrtC_UMi_O2I.

Referenced by GetChannel().

+ Here is the caller graph for this function:

◆ GetTypeId()

◆ SetChannelConditionModel()

void ns3::ThreeGppChannelModel::SetChannelConditionModel ( Ptr< ChannelConditionModel model)

Set the channel condition model.

Parameters
modela pointer to the ChannelConditionModel object

Definition at line 338 of file three-gpp-channel-model.cc.

References m_channelConditionModel, and NS_LOG_FUNCTION.

Referenced by GetTypeId().

+ Here is the caller graph for this function:

◆ SetFrequency()

void ns3::ThreeGppChannelModel::SetFrequency ( double  f)

Sets the center frequency of the model.

Parameters
fthe center frequency in Hz

Definition at line 352 of file three-gpp-channel-model.cc.

References f(), m_frequency, NS_ASSERT_MSG, and NS_LOG_FUNCTION.

Referenced by GetTypeId().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ SetScenario()

void ns3::ThreeGppChannelModel::SetScenario ( const std::string &  scenario)

Sets the propagation scenario.

Parameters
scenariothe propagation scenario

Definition at line 367 of file three-gpp-channel-model.cc.

References m_scenario, NS_ASSERT_MSG, and NS_LOG_FUNCTION.

Referenced by GetTypeId().

+ Here is the caller graph for this function:

◆ Shuffle()

void ns3::ThreeGppChannelModel::Shuffle ( double *  first,
double *  last 
) const
protected

Shuffle the elements of a simple sequence container of type double.

Parameters
firstPointer to the first element among the elements to be shuffled
lastPointer to the last element among the elements to be shuffled

Definition at line 2256 of file three-gpp-channel-model.cc.

References ns3::UniformRandomVariable::GetInteger(), m_uniformRvShuffle, and ns3::swap().

Referenced by GenerateChannelParameters().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ WrapAngles()

std::pair< double, double > ns3::ThreeGppChannelModel::WrapAngles ( double  azimuthRad,
double  inclinationRad 
)
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.

Parameters
azimuthRadthe azimuth angle in radians
inclinationRadthe inclination angle in radians
Returns
the wrapped (azimuth, inclination) angle pair in radians

Definition at line 2016 of file three-gpp-channel-model.cc.

References NS_ASSERT_MSG, and ns3::WrapTo2Pi().

Referenced by GenerateChannelParameters().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

Member Data Documentation

◆ m_blockage

bool ns3::ThreeGppChannelModel::m_blockage
protected

enables the blockage model A

Definition at line 331 of file three-gpp-channel-model.h.

Referenced by GenerateChannelParameters(), and GetTypeId().

◆ m_blockerSpeed

double ns3::ThreeGppChannelModel::m_blockerSpeed
protected

the blocker speed

Definition at line 334 of file three-gpp-channel-model.h.

Referenced by CalcAttenuationOfBlockage(), and GetTypeId().

◆ m_channelConditionModel

Ptr<ChannelConditionModel> ns3::ThreeGppChannelModel::m_channelConditionModel
protected

the channel condition model

Definition at line 320 of file three-gpp-channel-model.h.

Referenced by DoDispose(), GetChannel(), GetChannelConditionModel(), and SetChannelConditionModel().

◆ m_channelMatrixMap

std::unordered_map<uint64_t, Ptr<ChannelMatrix> > ns3::ThreeGppChannelModel::m_channelMatrixMap
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 315 of file three-gpp-channel-model.h.

Referenced by DoDispose(), and GetChannel().

◆ m_channelParamsMap

std::unordered_map<uint64_t, Ptr<ThreeGppChannelParams> > ns3::ThreeGppChannelModel::m_channelParamsMap
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 316 of file three-gpp-channel-model.h.

Referenced by DoDispose(), GetChannel(), and GetParams().

◆ m_frequency

double ns3::ThreeGppChannelModel::m_frequency
protected

the operating frequency

Definition at line 318 of file three-gpp-channel-model.h.

Referenced by CalcAttenuationOfBlockage(), GetFrequency(), GetNewChannel(), GetThreeGppTable(), and SetFrequency().

◆ m_normalRv

Ptr<NormalRandomVariable> ns3::ThreeGppChannelModel::m_normalRv
protected

normal random variable

Definition at line 322 of file three-gpp-channel-model.h.

Referenced by ThreeGppChannelModel(), AssignStreams(), CalcAttenuationOfBlockage(), and GenerateChannelParameters().

◆ m_numNonSelfBlocking

uint16_t ns3::ThreeGppChannelModel::m_numNonSelfBlocking
protected

number of non-self-blocking regions

Definition at line 332 of file three-gpp-channel-model.h.

Referenced by CalcAttenuationOfBlockage(), and GetTypeId().

◆ m_portraitMode

bool ns3::ThreeGppChannelModel::m_portraitMode
protected

true if potrait mode, false if landscape

Definition at line 333 of file three-gpp-channel-model.h.

Referenced by CalcAttenuationOfBlockage(), and GetTypeId().

◆ m_scenario

std::string ns3::ThreeGppChannelModel::m_scenario
protected

the 3GPP scenario

Definition at line 319 of file three-gpp-channel-model.h.

Referenced by CalcAttenuationOfBlockage(), GetScenario(), GetThreeGppTable(), and SetScenario().

◆ m_uniformRv

Ptr<UniformRandomVariable> ns3::ThreeGppChannelModel::m_uniformRv
protected

uniform random variable

Definition at line 321 of file three-gpp-channel-model.h.

Referenced by ThreeGppChannelModel(), AssignStreams(), CalcAttenuationOfBlockage(), and GenerateChannelParameters().

◆ m_uniformRvDoppler

Ptr<UniformRandomVariable> ns3::ThreeGppChannelModel::m_uniformRvDoppler
protected

uniform random variable, used to compute the additional Doppler contribution

Definition at line 328 of file three-gpp-channel-model.h.

Referenced by ThreeGppChannelModel(), AssignStreams(), and GenerateChannelParameters().

◆ m_uniformRvShuffle

Ptr<UniformRandomVariable> ns3::ThreeGppChannelModel::m_uniformRvShuffle
protected

uniform random variable used to shuffle array in GetNewChannel

Definition at line 323 of file three-gpp-channel-model.h.

Referenced by ThreeGppChannelModel(), AssignStreams(), and Shuffle().

◆ m_updatePeriod

Time ns3::ThreeGppChannelModel::m_updatePeriod
protected

the channel update period

Definition at line 317 of file three-gpp-channel-model.h.

Referenced by ChannelParamsNeedsUpdate(), and GetTypeId().

◆ m_vScatt

double ns3::ThreeGppChannelModel::m_vScatt
protected

value used to compute the additional Doppler contribution for the delayed paths

Definition at line 327 of file three-gpp-channel-model.h.

Referenced by GenerateChannelParameters(), and GetTypeId().

◆ PHI_INDEX

const uint8_t ns3::ThreeGppChannelModel::PHI_INDEX = 0
staticprotected

index of the PHI value in the m_nonSelfBlocking array

Definition at line 336 of file three-gpp-channel-model.h.

Referenced by CalcAttenuationOfBlockage().

◆ R_INDEX

const uint8_t ns3::ThreeGppChannelModel::R_INDEX = 4
staticprotected

index of the R value in the m_nonSelfBlocking array

Definition at line 340 of file three-gpp-channel-model.h.

Referenced by CalcAttenuationOfBlockage().

◆ THETA_INDEX

const uint8_t ns3::ThreeGppChannelModel::THETA_INDEX = 2
staticprotected

index of the THETA value in the m_nonSelfBlocking array

Definition at line 338 of file three-gpp-channel-model.h.

Referenced by CalcAttenuationOfBlockage().

◆ X_INDEX

const uint8_t ns3::ThreeGppChannelModel::X_INDEX = 1
staticprotected

index of the X value in the m_nonSelfBlocking array

Definition at line 337 of file three-gpp-channel-model.h.

Referenced by CalcAttenuationOfBlockage().

◆ Y_INDEX

const uint8_t ns3::ThreeGppChannelModel::Y_INDEX = 3
staticprotected

index of the Y value in the m_nonSelfBlocking array

Definition at line 339 of file three-gpp-channel-model.h.

Referenced by CalcAttenuationOfBlockage().


The documentation for this class was generated from the following files: