10#ifndef MATRIX_BASED_CHANNEL_H
11#define MATRIX_BASED_CHANNEL_H
14#include <ns3/matrix-array.h>
15#include <ns3/nstime.h>
16#include <ns3/object.h>
17#include <ns3/phased-array-model.h>
18#include <ns3/vector.h>
96 NS_ASSERT_MSG((sAntennaId == aAntennaId && uAntennaId == bAntennaId) ||
97 (sAntennaId == bAntennaId && uAntennaId == aAntennaId),
98 "This channel matrix does not represent the channel among the antenna "
99 "arrays for which are provided IDs.");
100 return (sAntennaId == bAntennaId && uAntennaId == aAntennaId);
212 return (uint64_t)std::min(a, b) << 32 | std::max(a, b);
This is an interface for a channel model that can be described by a channel matrix,...
std::vector< double > DoubleVector
Type definition for vectors of doubles.
static const uint8_t AOA_INDEX
index of the AOA value in the m_angle array
static const uint8_t ZOD_INDEX
index of the ZOD value in the m_angle array
static const uint8_t AOD_INDEX
index of the AOD value in the m_angle array
virtual Ptr< const ChannelParams > GetParams(Ptr< const MobilityModel > aMob, Ptr< const MobilityModel > bMob) const =0
Returns a channel parameters structure used to obtain the channel between the nodes with mobility obj...
~MatrixBasedChannelModel() override
Destructor for MatrixBasedChannelModel.
static const uint8_t ZOA_INDEX
index of the ZOA value in the m_angle array
std::vector< Double2DVector > Double3DVector
Type definition for 3D matrices of doubles.
std::vector< DoubleVector > Double2DVector
Type definition for matrices of doubles.
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,...
virtual Ptr< const ChannelMatrix > GetChannel(Ptr< const MobilityModel > aMob, Ptr< const MobilityModel > bMob, Ptr< const PhasedArrayModel > aAntenna, Ptr< const PhasedArrayModel > bAntenna)=0
Returns a matrix with a realization of the channel between the nodes with mobility objects passed as ...
A base class which provides memory management and object aggregation.
Smart pointer class similar to boost::intrusive_ptr.
A template-based reference counting class.
Simulation virtual time values and global simulation resolution.
#define NS_ASSERT_MSG(condition, message)
At runtime, in debugging builds, if this condition is not true, the program prints the message to out...
Every class exported by the ns3 library is enclosed in the ns3 namespace.
MatrixArray< std::complex< double > > ComplexMatrixArray
Create an alias for MatrixArray using complex type.
Data structure that stores a channel realization.
Complex3DVector m_channel
Channel matrix H[u][s][n].
bool IsReverse(uint32_t aAntennaId, uint32_t bAntennaId) const
Returns true if the ChannelMatrix object was generated considering node b as transmitter and node a a...
std::pair< uint32_t, uint32_t > m_antennaPair
The first element is the ID of the antenna of the s-node (the antenna of the transmitter when the cha...
Time m_generatedTime
Generation time.
std::pair< uint32_t, uint32_t > m_nodeIds
The first element is the s-node ID (the transmitter when the channel was generated),...
Data structure that stores channel parameters.
DoubleVector m_delay
Cluster delay in nanoseconds.
Double2DVector m_angle
Cluster angle angle[direction][n], where direction = 0(AOA), 1(ZOA), 2(AOD), 3(ZOD) in degree.
ComplexMatrixArray m_cachedDelaySincos
Matrix array that holds the precomputed delay sincos.
virtual ~ChannelParams()=default
Destructor for ChannelParams.
double m_cachedRbWidth
Auxiliary variable to m_cachedDelaySincos.
DoubleVector m_alpha
Alpha term per cluster as described in 3GPP TR 37.885 v15.3.0, Sec.
std::vector< std::vector< std::pair< double, double > > > m_cachedAngleSincos
Sin/cos of cluster angle angle[direction][n], where direction = 0(AOA), 1(ZOA), 2(AOD),...
Time m_generatedTime
Generation time.
DoubleVector m_D
D term per cluster as described in 3GPP TR 37.885 v15.3.0, Sec.
std::pair< uint32_t, uint32_t > m_nodeIds
The first element is the s-node ID (the transmitter when the channel params were generated),...