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
ComplexMatrixArray Complex3DVector
Create an alias for 3D complex vectors.
ComplexMatrixArray Complex2DVector
Create an alias for 2D complex vectors.
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 ...
Keep track of the current position and velocity of an object.
Object()
Caller graph was not generated because of its size.
Smart pointer class similar to boost::intrusive_ptr.
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),...