22 #ifndef MATRIX_BASED_CHANNEL_H 23 #define MATRIX_BASED_CHANNEL_H 26 #include <ns3/object.h> 27 #include <ns3/nstime.h> 28 #include <ns3/vector.h> 29 #include <ns3/three-gpp-antenna-array-model.h> 81 bool IsReverse (
const uint32_t aId,
const uint32_t bId)
const 85 NS_ASSERT_MSG ((sId == aId && uId == bId) || (sId == bId && uId == aId),
86 "This matrix represents the channel between " << sId <<
" and " << uId);
87 return (sId == bId && uId == aId);
120 static constexpr uint32_t
GetKey (uint32_t x1, uint32_t x2)
122 return (((x1 + x2) * (x1 + x2 + 1)) / 2) + x2;
134 #endif // MATRIX_BASED_CHANNEL_H This is an interface for a channel model that can be described by a channel matrix, e.g., the 3GPP Spatial Channel Models, which is generally used in combination with antenna arrays.
Simulation virtual time values and global simulation resolution.
Smart pointer class similar to boost::intrusive_ptr.
std::vector< Complex2DVector > Complex3DVector
type definition for complex 3D matrices
Time m_generatedTime
generation time
std::vector< double > DoubleVector
type definition for vectors of doubles
DoubleVector m_delay
cluster delay in nanoseconds.
std::pair< uint32_t, uint32_t > m_nodeIds
the first element is the s-node ID (the transmitter when the channel was generated), the second element is the u-node ID (the receiver when the channel was generated)
static const uint8_t AOD_INDEX
index of the AOD value in the m_angle array
virtual ~MatrixBasedChannelModel()
Destructor for MatrixBasedChannelModel.
static const uint8_t ZOA_INDEX
index of the ZOA value in the m_angle array
Complex3DVector m_channel
channel matrix H[u][s][n].
Every class exported by the ns3 library is enclosed in the ns3 namespace.
std::vector< ThreeGppAntennaArrayModel::ComplexVector > Complex2DVector
type definition for complex matrices
static constexpr uint32_t GetKey(uint32_t x1, uint32_t x2)
Calculate the channel key using the Cantor function.
virtual Ptr< const ChannelMatrix > GetChannel(Ptr< const MobilityModel > aMob, Ptr< const MobilityModel > bMob, Ptr< const ThreeGppAntennaArrayModel > aAntenna, Ptr< const ThreeGppAntennaArrayModel > bAntenna)=0
Returns a matrix with a realization of the channel between the nodes with mobility objects passed as ...
std::vector< DoubleVector > Double2DVector
type definition for matrices of doubles
Double2DVector m_angle
cluster angle angle[direction][n], where direction = 0(AOA), 1(ZOA), 2(AOD), 3(ZOD) in degree...
std::vector< Double2DVector > Double3DVector
type definition for 3D matrices of doubles
#define NS_ASSERT_MSG(condition, message)
At runtime, in debugging builds, if this condition is not true, the program prints the message to out...
bool IsReverse(const uint32_t aId, const uint32_t bId) const
Returns true if the ChannelMatrix object was generated considering node b as transmitter and node a a...
virtual ~ChannelMatrix()=default
Destructor for ChannelMatrix.
static const uint8_t AOA_INDEX
index of the AOA value in the m_angle array
Data structure that stores a channel realization.
A base class which provides memory management and object aggregation.
A template-based reference counting class.
static const uint8_t ZOD_INDEX
index of the ZOD value in the m_angle array