A Discrete-Event Network Simulator
API
Loading...
Searching...
No Matches
three-gpp-channel-model.h
Go to the documentation of this file.
1/*
2 * Copyright (c) 2015, NYU WIRELESS, Tandon School of Engineering,
3 * New York University
4 * Copyright (c) 2019 SIGNET Lab, Department of Information Engineering,
5 * University of Padova
6 *
7 * SPDX-License-Identifier: GPL-2.0-only
8 */
9
10#ifndef THREE_GPP_CHANNEL_H
11#define THREE_GPP_CHANNEL_H
12
14
15#include "ns3/angles.h"
16#include "ns3/boolean.h"
17#include "ns3/channel-condition-model.h"
18#include "ns3/deprecated.h"
19
20#include <complex.h>
21#include <unordered_map>
22
23namespace ns3
24{
25
26class MobilityModel;
27
28/**
29 * @ingroup spectrum
30 * @brief Channel Matrix Generation following 3GPP TR 38.901
31 *
32 * The class implements the channel matrix generation procedure
33 * described in 3GPP TR 38.901.
34 *
35 * @see GetChannel
36 */
38{
39 public:
40 /**
41 * Constructor
42 */
44
45 /**
46 * Destructor
47 */
48 ~ThreeGppChannelModel() override;
49
50 void DoDispose() override;
51
52 /**
53 * Get the type ID
54 * @return the object TypeId
55 */
56 static TypeId GetTypeId();
57
58 /**
59 * Set the channel condition model
60 * @param model a pointer to the ChannelConditionModel object
61 */
63
64 /**
65 * Get the associated channel condition model
66 * @return a pointer to the ChannelConditionModel object
67 */
69
70 /**
71 * Sets the center frequency of the model
72 * @param f the center frequency in Hz
73 */
74 void SetFrequency(double f);
75
76 /**
77 * Returns the center frequency
78 * @return the center frequency in Hz
79 */
80 double GetFrequency() const;
81
82 /**
83 * Sets the propagation scenario
84 * @param scenario the propagation scenario
85 */
86 void SetScenario(const std::string& scenario);
87
88 /**
89 * Returns the propagation scenario
90 * @return the propagation scenario
91 */
92 std::string GetScenario() const;
93
94 /**
95 * Looks for the channel matrix associated to the aMob and bMob pair in m_channelMatrixMap.
96 * If found, it checks if it has to be updated. If not found or if it has to
97 * be updated, it generates a new uncorrelated channel matrix using the
98 * method GetNewChannel and updates m_channelMap.
99 *
100 * @param aMob mobility model of the a device
101 * @param bMob mobility model of the b device
102 * @param aAntenna antenna of the a device
103 * @param bAntenna antenna of the b device
104 * @return the channel matrix
105 */
109 Ptr<const PhasedArrayModel> bAntenna) override;
110
111 /**
112 * Looks for the channel params associated to the aMob and bMob pair in
113 * m_channelParamsMap. If not found it will return a nullptr.
114 *
115 * @param aMob mobility model of the a device
116 * @param bMob mobility model of the b device
117 * @return the channel params
118 */
120 Ptr<const MobilityModel> bMob) const override;
121 /**
122 * @brief Assign a fixed random variable stream number to the random variables
123 * used by this model.
124 *
125 * @param stream first stream index to use
126 * @return the number of stream indices assigned by this model
127 */
128 int64_t AssignStreams(int64_t stream);
129
130 protected:
131 /**
132 * Wrap an (azimuth, inclination) angle pair in a valid range.
133 * Specifically, inclination must be in [0, M_PI] and azimuth in [0, 2*M_PI).
134 * If the inclination angle is outside of its range, the azimuth angle is
135 * rotated by M_PI.
136 * This methods aims specifically at solving the problem of generating angles at
137 * the boundaries of the angle domain, specifically, generating angle distributions
138 * close to inclinationRad=0 and inclinationRad=M_PI.
139 *
140 * @param azimuthRad the azimuth angle in radians
141 * @param inclinationRad the inclination angle in radians
142 * @return the wrapped (azimuth, inclination) angle pair in radians
143 */
144 static std::pair<double, double> WrapAngles(double azimuthRad, double inclinationRad);
145
146 /**
147 * Extends the struct ChannelParams by including information that is used
148 * within the ThreeGppChannelModel class
149 */
151 {
153 m_losCondition; //!< contains the information about the LOS state of the channel
155 m_o2iCondition; //!< contains the information about the O2I state of the channel
156 // TODO these are not currently used, they have to be correctly set when including the
157 // spatial consistent update procedure
158 /*The following parameters are stored for spatial consistent updating. The notation is
159 that of 3GPP technical reports, but it can apply also to other channel realizations*/
161 Vector m_preLocUT; //!< location of UT when generating the previous channel
162 Vector m_locUT; //!< location of UT
164 m_norRvAngles; //!< stores the normal variable for random angles angle[cluster][id]
165 //!< generated for equation (7.6-11)-(7.6-14), where id =
166 //!< 0(aoa),1(zoa),2(aod),3(zod)
167 double m_DS; //!< delay spread
168 double m_K_factor; //!< K factor
169 uint8_t m_reducedClusterNumber; //!< reduced cluster number;
171 m_rayAodRadian; //!< the vector containing AOD angles
173 m_rayAoaRadian; //!< the vector containing AOA angles
175 m_rayZodRadian; //!< the vector containing ZOD angles
177 m_rayZoaRadian; //!< the vector containing ZOA angles
180 m_crossPolarizationPowerRatios; //!< cross polarization power ratios
181 Vector m_speed; //!< velocity
182 double m_dis2D; //!< 2D distance between tx and rx
183 double m_dis3D; //!< 3D distance between tx and rx
184 DoubleVector m_clusterPower; //!< cluster powers
185 DoubleVector m_attenuation_dB; //!< vector that stores the attenuation of the blockage
186 uint8_t m_cluster1st; //!< index of the first strongest cluster
187 uint8_t m_cluster2nd; //!< index of the second strongest cluster
188 };
189
190 /**
191 * Data structure that stores the parameters of 3GPP TR 38.901, Table 7.5-6,
192 * for a certain scenario
193 */
194 struct ParamsTable : public SimpleRefCount<ParamsTable>
195 {
196 uint8_t m_numOfCluster = 0; //!< Number of clusters
197 uint8_t m_raysPerCluster = 0; //!< Number of rays per cluster
198 double m_uLgDS = 0; //!< Mean value of 10-base logarithm of delay spread
199 double m_sigLgDS = 0; //!< Standard deviation value of 10-base logarithm of delay spread
200 double m_uLgASD =
201 0; //!< Mean value of 10-base logarithm of azimuth angle spread of departure
202 double m_sigLgASD =
203 0; //!< Standard deviation of 10-base logarithm of azimuth angle spread of departure
204 double m_uLgASA = 0; //!< Mean value of 10-base logarithm of azimuth angle spread of arrival
205 double m_sigLgASA =
206 0; //!< Standard deviation of 10-base logarithm of azimuth angle spread of arrival
207 double m_uLgZSA = 0; //!< Mean value of 10-base logarithm of zenith angle spread of arrival
208 double m_sigLgZSA =
209 0; //!< Standard deviation of 10-base logarithm of zenith angle spread of arrival
210 double m_uLgZSD =
211 0; //!< Mean value of 10-base logarithm of zenith angle spread of departure
212 double m_sigLgZSD =
213 0; //!< Standard deviation of 10-base logarithm of zenith angle spread of departure
214 double m_offsetZOD = 0; //!< Offset of zenith angle of departure
215 double m_cDS = 0; //!< Cluster DS
216 double m_cASD = 0; //!< Cluster ASD (Azimuth angle Spread of Departure)
217 double m_cASA = 0; //!< Cluster ASA (Azimuth angle Spread of Arrival)
218 double m_cZSA = 0; //!< Cluster ZSA (Zenith angle Spread of Arrival)
219 double m_uK = 0; //!< Mean of K-factor
220 double m_sigK = 0; //!< Standard deviation of K-factor
221 double m_rTau = 0; //!< Delay scaling parameter
222 double m_uXpr = 0; //!< Mean of Cross-Polarization Ratio
223 double m_sigXpr = 0; //!< Standard deviation of Cross-Polarization Ratio
224 double m_perClusterShadowingStd = 0; //!< Per cluster shadowing standard deviation
225 double m_sqrtC[7][7]; //!< The square root matrix and follows the order of [SF, K, DS, ASD,
226 //!< ASA, ZSD, ZSA]
227 };
228
229 /**
230 * Get the parameters needed to apply the channel generation procedure
231 * @param channelCondition the channel condition
232 * @param hBS the height of the BS
233 * @param hUT the height of the UT
234 * @param distance2D the 2D distance between tx and rx
235 * @return the parameters table
236 */
237 NS_DEPRECATED_3_41("Use GetThreeGppTable(const Ptr<const MobilityModel>, const Ptr<const "
238 "MobilityModel>, Ptr<const ChannelCondition>) instead")
239 Ptr<const ParamsTable> GetThreeGppTable(Ptr<const ChannelCondition> channelCondition,
240 double hBS,
241 double hUT,
242 double distance2D) const;
243
244 /**
245 * Get the parameters needed to apply the channel generation procedure
246 * @param aMob the mobility model of node A
247 * @param bMob the mobility model of node B
248 * @param channelCondition the channel condition
249 * @return the parameters table
250 */
251 virtual Ptr<const ParamsTable> GetThreeGppTable(
252 const Ptr<const MobilityModel> aMob,
253 const Ptr<const MobilityModel> bMob,
254 Ptr<const ChannelCondition> channelCondition) const;
255
256 /**
257 * Prepare 3gpp channel parameters among the nodes a and b.
258 * The function does the following steps described in 3GPP 38.901:
259 *
260 * Step 4: Generate large scale parameters. All LSPS are uncorrelated.
261 * Step 5: Generate Delays.
262 * Step 6: Generate cluster powers.
263 * Step 7: Generate arrival and departure angles for both azimuth and elevation.
264 * Step 8: Coupling of rays within a cluster for both azimuth and elevation
265 * shuffle all the arrays to perform random coupling
266 * Step 9: Generate the cross polarization power ratios
267 * Step 10: Draw initial phases
268 *
269 * All relevant generated parameters are added then to ThreeGppChannelParams
270 * which is the return value of this function.
271 * @param channelCondition the channel condition
272 * @param table3gpp the 3gpp parameters from the table
273 * @param aMob the a node mobility model
274 * @param bMob the b node mobility model
275 * @return ThreeGppChannelParams structure with all the channel parameters generated
276 * according 38.901 steps from 4 to 10.
277 */
279 const Ptr<const ChannelCondition> channelCondition,
280 const Ptr<const ParamsTable> table3gpp,
281 const Ptr<const MobilityModel> aMob,
282 const Ptr<const MobilityModel> bMob) const;
283
284 /**
285 * Compute the channel matrix between two nodes a and b, and their
286 * antenna arrays aAntenna and bAntenna using the procedure
287 * described in 3GPP TR 38.901
288 * @param channelParams the channel parameters previously generated for the pair of
289 * nodes a and b
290 * @param table3gpp the 3gpp parameters table
291 * @param sMob the mobility model of node s
292 * @param uMob the mobility model of node u
293 * @param sAntenna the antenna array of node s
294 * @param uAntenna the antenna array of node u
295 * @return the channel realization
296 */
297
298 virtual Ptr<ChannelMatrix> GetNewChannel(Ptr<const ThreeGppChannelParams> channelParams,
299 Ptr<const ParamsTable> table3gpp,
300 const Ptr<const MobilityModel> sMob,
301 const Ptr<const MobilityModel> uMob,
302 Ptr<const PhasedArrayModel> sAntenna,
303 Ptr<const PhasedArrayModel> uAntenna) const;
304 /**
305 * Applies the blockage model A described in 3GPP TR 38.901
306 * @param channelParams the channel parameters structure
307 * @param clusterAOA vector containing the azimuth angle of arrival for each cluster
308 * @param clusterZOA vector containing the zenith angle of arrival for each cluster
309 * @return vector containing the power attenuation for each cluster
310 */
312 const Ptr<ThreeGppChannelModel::ThreeGppChannelParams> channelParams,
313 const DoubleVector& clusterAOA,
314 const DoubleVector& clusterZOA) const;
315
316 /**
317 * Check if the channel params has to be updated
318 * @param channelParams channel params
319 * @param channelCondition the channel condition
320 * @return true if the channel params has to be updated, false otherwise
321 */
322 bool ChannelParamsNeedsUpdate(Ptr<const ThreeGppChannelParams> channelParams,
323 Ptr<const ChannelCondition> channelCondition) const;
324
325 /**
326 * Check if the channel matrix has to be updated (it needs update when the channel params
327 * generation time is more recent than channel matrix generation time
328 * @param channelParams channel params structure
329 * @param channelMatrix channel matrix structure
330 * @return true if the channel matrix has to be updated, false otherwise
331 */
332 bool ChannelMatrixNeedsUpdate(Ptr<const ThreeGppChannelParams> channelParams,
333 Ptr<const ChannelMatrix> channelMatrix);
334
335 /**
336 * Check if the channel matrix has to be updated due to
337 * changes in the number of antenna ports
338 * @param aAntenna the antenna array of node a
339 * @param bAntenna the antenna array of node b
340 * @param channelMatrix channel matrix structure
341 * @return true if the channel matrix has to be updated, false otherwise
342 */
343 bool AntennaSetupChanged(Ptr<const PhasedArrayModel> aAntenna,
344 Ptr<const PhasedArrayModel> bAntenna,
345 Ptr<const ChannelMatrix> channelMatrix);
346
347 std::unordered_map<uint64_t, Ptr<ChannelMatrix>>
348 m_channelMatrixMap; //!< map containing the channel realizations per pair of
349 //!< PhasedAntennaArray instances, the key of this map is reciprocal
350 //!< uniquely identifies a pair of PhasedAntennaArrays
351 std::unordered_map<uint64_t, Ptr<ThreeGppChannelParams>>
352 m_channelParamsMap; //!< map containing the common channel parameters per pair of nodes, the
353 //!< key of this map is reciprocal and uniquely identifies a pair of
354 //!< nodes
355 Time m_updatePeriod; //!< the channel update period
356 double m_frequency; //!< the operating frequency
357 std::string m_scenario; //!< the 3GPP scenario
358 Ptr<ChannelConditionModel> m_channelConditionModel; //!< the channel condition model
359 Ptr<UniformRandomVariable> m_uniformRv; //!< uniform random variable
360 Ptr<NormalRandomVariable> m_normalRv; //!< normal random variable
362 m_uniformRvShuffle; //!< uniform random variable used to shuffle array in GetNewChannel
363
364 // Variable used to compute the additional Doppler contribution for the delayed
365 // (reflected) paths, as described in 3GPP TR 37.885 v15.3.0, Sec. 6.2.3.
366 double m_vScatt; //!< value used to compute the additional Doppler contribution for the delayed
367 //!< paths
368 Ptr<UniformRandomVariable> m_uniformRvDoppler; //!< uniform random variable, used to compute the
369 //!< additional Doppler contribution
370
371 // parameters for the blockage model
372 bool m_blockage; //!< enables the blockage model A
373 uint16_t m_numNonSelfBlocking; //!< number of non-self-blocking regions
374 bool m_portraitMode; //!< true if portrait mode, false if landscape
375 double m_blockerSpeed; //!< the blocker speed
376
377 static const uint8_t PHI_INDEX = 0; //!< index of the PHI value in the m_nonSelfBlocking array
378 static const uint8_t X_INDEX = 1; //!< index of the X value in the m_nonSelfBlocking array
379 static const uint8_t THETA_INDEX =
380 2; //!< index of the THETA value in the m_nonSelfBlocking array
381 static const uint8_t Y_INDEX = 3; //!< index of the Y value in the m_nonSelfBlocking array
382 static const uint8_t R_INDEX = 4; //!< index of the R value in the m_nonSelfBlocking array
383};
384} // namespace ns3
385
386#endif /* THREE_GPP_CHANNEL_H */
Carries information about the LOS/NLOS channel state.
O2iConditionValue
Possible values for Outdoor to Indoor condition.
LosConditionValue
Possible values for Line-of-Sight condition.
Models the channel condition.
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.
std::vector< Double2DVector > Double3DVector
Type definition for 3D matrices of doubles.
std::vector< DoubleVector > Double2DVector
Type definition for matrices of doubles.
Keep track of the current position and velocity of an object.
The normal (Gaussian) distribution Random Number Generator (RNG) that allows stream numbers to be set...
Class implementing the phased array model virtual base class.
Smart pointer class similar to boost::intrusive_ptr.
A template-based reference counting class.
Channel Matrix Generation following 3GPP TR 38.901.
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.
int64_t AssignStreams(int64_t stream)
Assign a fixed random variable stream number to the random variables used by this model.
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.
bool m_portraitMode
true if portrait mode, false if landscape
bool ChannelParamsNeedsUpdate(Ptr< const ThreeGppChannelParams > channelParams, Ptr< const ChannelCondition > channelCondition) const
Check if the channel params has to be updated.
Ptr< NormalRandomVariable > m_normalRv
normal random variable
static const uint8_t Y_INDEX
index of the Y value in the m_nonSelfBlocking array
bool m_blockage
enables the blockage model A
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.
~ThreeGppChannelModel() override
Destructor.
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 tim...
static const uint8_t THETA_INDEX
index of the THETA value in the m_nonSelfBlocking array
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...
static std::pair< double, double > WrapAngles(double azimuthRad, double inclinationRad)
Wrap an (azimuth, inclination) angle pair in a valid range.
double m_blockerSpeed
the blocker speed
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.
void SetFrequency(double f)
Sets the center frequency of the 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...
Ptr< UniformRandomVariable > m_uniformRv
uniform random variable
void DoDispose() override
Destructor implementation.
void SetScenario(const std::string &scenario)
Sets the propagation scenario.
void SetChannelConditionModel(Ptr< ChannelConditionModel > model)
Set the channel condition model.
Ptr< UniformRandomVariable > m_uniformRvDoppler
uniform random variable, used to compute the additional Doppler contribution
uint16_t m_numNonSelfBlocking
number of non-self-blocking regions
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.
std::string GetScenario() const
Returns the propagation scenario.
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 ...
static const uint8_t PHI_INDEX
index of the PHI value in the m_nonSelfBlocking array
double m_frequency
the operating frequency
double m_vScatt
value used to compute the additional Doppler contribution for the delayed paths
Ptr< ChannelConditionModel > GetChannelConditionModel() const
Get the associated channel condition model.
Ptr< ChannelConditionModel > m_channelConditionModel
the channel condition model
std::string m_scenario
the 3GPP scenario
static const uint8_t R_INDEX
index of the R value in the m_nonSelfBlocking array
static TypeId GetTypeId()
Get the type ID.
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.
double GetFrequency() const
Returns the center frequency.
Time m_updatePeriod
the channel update period
static const uint8_t X_INDEX
index of the X value in the m_nonSelfBlocking array
Ptr< UniformRandomVariable > m_uniformRvShuffle
uniform random variable used to shuffle array in GetNewChannel
Simulation virtual time values and global simulation resolution.
Definition nstime.h:94
a unique identifier for an interface.
Definition type-id.h:49
The uniform distribution Random Number Generator (RNG).
#define NS_DEPRECATED_3_41(msg)
Tag for things deprecated in version ns-3.41.
Definition deprecated.h:112
Every class exported by the ns3 library is enclosed in the ns3 namespace.
STL namespace.
Data structure that stores a channel realization.
Data structure that stores channel parameters.
Data structure that stores the parameters of 3GPP TR 38.901, Table 7.5-6, for a certain scenario.
double m_sqrtC[7][7]
The square root matrix and follows the order of [SF, K, DS, ASD, ASA, ZSD, ZSA].
double m_sigLgZSD
Standard deviation of 10-base logarithm of zenith angle spread of departure.
double m_cASD
Cluster ASD (Azimuth angle Spread of Departure)
double m_uLgZSD
Mean value of 10-base logarithm of zenith angle spread of departure.
double m_uLgASA
Mean value of 10-base logarithm of azimuth angle spread of arrival.
double m_sigXpr
Standard deviation of Cross-Polarization Ratio.
double m_uLgASD
Mean value of 10-base logarithm of azimuth angle spread of departure.
double m_cASA
Cluster ASA (Azimuth angle Spread of Arrival)
uint8_t m_raysPerCluster
Number of rays per cluster.
double m_sigK
Standard deviation of K-factor.
double m_perClusterShadowingStd
Per cluster shadowing standard deviation.
double m_sigLgASD
Standard deviation of 10-base logarithm of azimuth angle spread of departure.
double m_offsetZOD
Offset of zenith angle of departure.
double m_uLgDS
Mean value of 10-base logarithm of delay spread.
double m_sigLgASA
Standard deviation of 10-base logarithm of azimuth angle spread of arrival.
double m_uLgZSA
Mean value of 10-base logarithm of zenith angle spread of arrival.
double m_cZSA
Cluster ZSA (Zenith angle Spread of Arrival)
double m_sigLgZSA
Standard deviation of 10-base logarithm of zenith angle spread of arrival.
double m_uXpr
Mean of Cross-Polarization Ratio.
double m_sigLgDS
Standard deviation value of 10-base logarithm of delay spread.
Extends the struct ChannelParams by including information that is used within the ThreeGppChannelMode...
MatrixBasedChannelModel::Double2DVector m_rayAoaRadian
the vector containing AOA angles
MatrixBasedChannelModel::Double3DVector m_clusterPhase
the initial random phases
MatrixBasedChannelModel::Double2DVector m_norRvAngles
stores the normal variable for random angles angle[cluster][id] generated for equation (7....
ChannelCondition::LosConditionValue m_losCondition
contains the information about the LOS state of the channel
MatrixBasedChannelModel::Double2DVector m_rayZodRadian
the vector containing ZOD angles
ChannelCondition::O2iConditionValue m_o2iCondition
contains the information about the O2I state of the channel
MatrixBasedChannelModel::Double2DVector m_rayAodRadian
the vector containing AOD angles
DoubleVector m_attenuation_dB
vector that stores the attenuation of the blockage
Vector m_preLocUT
location of UT when generating the previous channel
MatrixBasedChannelModel::Double2DVector m_rayZoaRadian
the vector containing ZOA angles
MatrixBasedChannelModel::Double2DVector m_nonSelfBlocking
store the blockages
uint8_t m_cluster1st
index of the first strongest cluster
MatrixBasedChannelModel::Double2DVector m_crossPolarizationPowerRatios
cross polarization power ratios
uint8_t m_cluster2nd
index of the second strongest cluster