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 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License version 2 as
9 * published by the Free Software Foundation;
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19 */
20
21#ifndef THREE_GPP_CHANNEL_H
22#define THREE_GPP_CHANNEL_H
23
25
26#include "ns3/angles.h"
27#include "ns3/deprecated.h"
28#include <ns3/boolean.h>
29#include <ns3/channel-condition-model.h>
30
31#include <complex.h>
32#include <unordered_map>
33
34namespace ns3
35{
36
37class MobilityModel;
38
39/**
40 * \ingroup spectrum
41 * \brief Channel Matrix Generation following 3GPP TR 38.901
42 *
43 * The class implements the channel matrix generation procedure
44 * described in 3GPP TR 38.901.
45 *
46 * \see GetChannel
47 */
49{
50 public:
51 /**
52 * Constructor
53 */
55
56 /**
57 * Destructor
58 */
59 ~ThreeGppChannelModel() override;
60
61 void DoDispose() override;
62
63 /**
64 * Get the type ID
65 * \return the object TypeId
66 */
67 static TypeId GetTypeId();
68
69 /**
70 * Set the channel condition model
71 * \param model a pointer to the ChannelConditionModel object
72 */
74
75 /**
76 * Get the associated channel condition model
77 * \return a pointer to the ChannelConditionModel object
78 */
80
81 /**
82 * Sets the center frequency of the model
83 * \param f the center frequency in Hz
84 */
85 void SetFrequency(double f);
86
87 /**
88 * Returns the center frequency
89 * \return the center frequency in Hz
90 */
91 double GetFrequency() const;
92
93 /**
94 * Sets the propagation scenario
95 * \param scenario the propagation scenario
96 */
97 void SetScenario(const std::string& scenario);
98
99 /**
100 * Returns the propagation scenario
101 * \return the propagation scenario
102 */
103 std::string GetScenario() const;
104
105 /**
106 * Looks for the channel matrix associated to the aMob and bMob pair in m_channelMatrixMap.
107 * If found, it checks if it has to be updated. If not found or if it has to
108 * be updated, it generates a new uncorrelated channel matrix using the
109 * method GetNewChannel and updates m_channelMap.
110 *
111 * \param aMob mobility model of the a device
112 * \param bMob mobility model of the b device
113 * \param aAntenna antenna of the a device
114 * \param bAntenna antenna of the b device
115 * \return the channel matrix
116 */
120 Ptr<const PhasedArrayModel> bAntenna) override;
121
122 /**
123 * Looks for the channel params associated to the aMob and bMob pair in
124 * m_channelParamsMap. If not found it will return a nullptr.
125 *
126 * \param aMob mobility model of the a device
127 * \param bMob mobility model of the b device
128 * \return the channel params
129 */
131 Ptr<const MobilityModel> bMob) const override;
132 /**
133 * \brief Assign a fixed random variable stream number to the random variables
134 * used by this model.
135 *
136 * \param stream first stream index to use
137 * \return the number of stream indices assigned by this model
138 */
139 int64_t AssignStreams(int64_t stream);
140
141 protected:
142 /**
143 * Wrap an (azimuth, inclination) angle pair in a valid range.
144 * Specifically, inclination must be in [0, M_PI] and azimuth in [0, 2*M_PI).
145 * If the inclination angle is outside of its range, the azimuth angle is
146 * rotated by M_PI.
147 * This methods aims specifically at solving the problem of generating angles at
148 * the boundaries of the angle domain, specifically, generating angle distributions
149 * close to inclinationRad=0 and inclinationRad=M_PI.
150 *
151 * \param azimuthRad the azimuth angle in radians
152 * \param inclinationRad the inclination angle in radians
153 * \return the wrapped (azimuth, inclination) angle pair in radians
154 */
155 static std::pair<double, double> WrapAngles(double azimuthRad, double inclinationRad);
156
157 /**
158 * \brief Shuffle the elements of a simple sequence container of type double
159 * \param first Pointer to the first element among the elements to be shuffled
160 * \param last Pointer to the last element among the elements to be shuffled
161 */
162 void Shuffle(double* first, double* last) const;
163
164 /**
165 * Extends the struct ChannelParams by including information that is used
166 * within the ThreeGppChannelModel class
167 */
169 {
171 m_losCondition; //!< contains the information about the LOS state of the channel
173 m_o2iCondition; //!< contains the information about the O2I state of the channel
174 // TODO these are not currently used, they have to be correctly set when including the
175 // spatial consistent update procedure
176 /*The following parameters are stored for spatial consistent updating. The notation is
177 that of 3GPP technical reports, but it can apply also to other channel realizations*/
179 Vector m_preLocUT; //!< location of UT when generating the previous channel
180 Vector m_locUT; //!< location of UT
182 m_norRvAngles; //!< stores the normal variable for random angles angle[cluster][id]
183 //!< generated for equation (7.6-11)-(7.6-14), where id =
184 //!< 0(aoa),1(zoa),2(aod),3(zod)
185 double m_DS; //!< delay spread
186 double m_K_factor; //!< K factor
187 uint8_t m_reducedClusterNumber; //!< reduced cluster number;
189 m_rayAodRadian; //!< the vector containing AOD angles
191 m_rayAoaRadian; //!< the vector containing AOA angles
193 m_rayZodRadian; //!< the vector containing ZOD angles
195 m_rayZoaRadian; //!< the vector containing ZOA angles
198 m_crossPolarizationPowerRatios; //!< cross polarization power ratios
199 Vector m_speed; //!< velocity
200 double m_dis2D; //!< 2D distance between tx and rx
201 double m_dis3D; //!< 3D distance between tx and rx
202 DoubleVector m_clusterPower; //!< cluster powers
203 DoubleVector m_attenuation_dB; //!< vector that stores the attenuation of the blockage
204 uint8_t m_cluster1st; //!< index of the first strongest cluster
205 uint8_t m_cluster2nd; //!< index of the second strongest cluster
206 };
207
208 /**
209 * Data structure that stores the parameters of 3GPP TR 38.901, Table 7.5-6,
210 * for a certain scenario
211 */
212 struct ParamsTable : public SimpleRefCount<ParamsTable>
213 {
214 uint8_t m_numOfCluster = 0; //!< Number of clusters
215 uint8_t m_raysPerCluster = 0; //!< Number of rays per cluster
216 double m_uLgDS = 0; //!< Mean value of 10-base logarithm of delay spread
217 double m_sigLgDS = 0; //!< Standard deviation value of 10-base logarithm of delay spread
218 double m_uLgASD =
219 0; //!< Mean value of 10-base logarithm of azimuth angle spread of departure
220 double m_sigLgASD =
221 0; //!< Standard deviation of 10-base logarithm of azimuth angle spread of departure
222 double m_uLgASA = 0; //!< Mean value of 10-base logarithm of azimuth angle spread of arrival
223 double m_sigLgASA =
224 0; //!< Standard deviation of 10-base logarithm of azimuth angle spread of arrival
225 double m_uLgZSA = 0; //!< Mean value of 10-base logarithm of zenith angle spread of arrival
226 double m_sigLgZSA =
227 0; //!< Standard deviation of 10-base logarithm of zenith angle spread of arrival
228 double m_uLgZSD =
229 0; //!< Mean value of 10-base logarithm of zenith angle spread of departure
230 double m_sigLgZSD =
231 0; //!< Standard deviation of 10-base logarithm of zenith angle spread of departure
232 double m_offsetZOD = 0; //!< Offset of zenith angle of departure
233 double m_cDS = 0; //!< Cluster DS
234 double m_cASD = 0; //!< Cluster ASD (Azimuth angle Spread of Departure)
235 double m_cASA = 0; //!< Cluster ASA (Azimuth angle Spread of Arrival)
236 double m_cZSA = 0; //!< Cluster ZSA (Zenith angle Spread of Arrival)
237 double m_uK = 0; //!< Mean of K-factor
238 double m_sigK = 0; //!< Standard deviation of K-factor
239 double m_rTau = 0; //!< Delay scaling parameter
240 double m_uXpr = 0; //!< Mean of Cross-Polarization Ratio
241 double m_sigXpr = 0; //!< Standard deviation of Cross-Polarization Ratio
242 double m_perClusterShadowingStd = 0; //!< Per cluster shadowing standard deviation
243 double m_sqrtC[7][7]; //!< The square root matrix and follows the order of [SF, K, DS, ASD,
244 //!< ASA, ZSD, ZSA]
245 };
246
247 /**
248 * Get the parameters needed to apply the channel generation procedure
249 * \param channelCondition the channel condition
250 * \param hBS the height of the BS
251 * \param hUT the height of the UT
252 * \param distance2D the 2D distance between tx and rx
253 * \return the parameters table
254 * \deprecated Use GetThreeGppTable(const Ptr<const MobilityModel> aMob, const Ptr<const
255 * MobilityModel> bMob, Ptr<const ChannelCondition> channelCondition) instead
256 */
257 NS_DEPRECATED_3_41("Use GetThreeGppTable(const Ptr<const MobilityModel>, const Ptr<const "
258 "MobilityModel>, Ptr<const ChannelCondition>) instead")
259 Ptr<const ParamsTable> GetThreeGppTable(Ptr<const ChannelCondition> channelCondition,
260 double hBS,
261 double hUT,
262 double distance2D) const;
263
264 /**
265 * Get the parameters needed to apply the channel generation procedure
266 * \param aMob the mobility model of node A
267 * \param bMob the mobility model of node B
268 * \param channelCondition the channel condition
269 * \return the parameters table
270 */
271 virtual Ptr<const ParamsTable> GetThreeGppTable(
272 const Ptr<const MobilityModel> aMob,
273 const Ptr<const MobilityModel> bMob,
274 Ptr<const ChannelCondition> channelCondition) const;
275
276 /**
277 * Prepare 3gpp channel parameters among the nodes a and b.
278 * The function does the following steps described in 3GPP 38.901:
279 *
280 * Step 4: Generate large scale parameters. All LSPS are uncorrelated.
281 * Step 5: Generate Delays.
282 * Step 6: Generate cluster powers.
283 * Step 7: Generate arrival and departure angles for both azimuth and elevation.
284 * Step 8: Coupling of rays within a cluster for both azimuth and elevation
285 * shuffle all the arrays to perform random coupling
286 * Step 9: Generate the cross polarization power ratios
287 * Step 10: Draw initial phases
288 *
289 * All relevant generated parameters are added then to ThreeGppChannelParams
290 * which is the return value of this function.
291 * \param channelCondition the channel condition
292 * \param table3gpp the 3gpp parameters from the table
293 * \param aMob the a node mobility model
294 * \param bMob the b node mobility model
295 * \return ThreeGppChannelParams structure with all the channel parameters generated
296 * according 38.901 steps from 4 to 10.
297 */
299 const Ptr<const ChannelCondition> channelCondition,
300 const Ptr<const ParamsTable> table3gpp,
301 const Ptr<const MobilityModel> aMob,
302 const Ptr<const MobilityModel> bMob) const;
303
304 /**
305 * Compute the channel matrix between two nodes a and b, and their
306 * antenna arrays aAntenna and bAntenna using the procedure
307 * described in 3GPP TR 38.901
308 * \param channelParams the channel parameters previously generated for the pair of
309 * nodes a and b
310 * \param table3gpp the 3gpp parameters table
311 * \param sMob the mobility model of node s
312 * \param uMob the mobility model of node u
313 * \param sAntenna the antenna array of node s
314 * \param uAntenna the antenna array of node u
315 * \return the channel realization
316 */
317
318 virtual Ptr<ChannelMatrix> GetNewChannel(Ptr<const ThreeGppChannelParams> channelParams,
319 Ptr<const ParamsTable> table3gpp,
320 const Ptr<const MobilityModel> sMob,
321 const Ptr<const MobilityModel> uMob,
322 Ptr<const PhasedArrayModel> sAntenna,
323 Ptr<const PhasedArrayModel> uAntenna) const;
324 /**
325 * Applies the blockage model A described in 3GPP TR 38.901
326 * \param channelParams the channel parameters structure
327 * \param clusterAOA vector containing the azimuth angle of arrival for each cluster
328 * \param clusterZOA vector containing the zenith angle of arrival for each cluster
329 * \return vector containing the power attenuation for each cluster
330 */
332 const Ptr<ThreeGppChannelModel::ThreeGppChannelParams> channelParams,
333 const DoubleVector& clusterAOA,
334 const DoubleVector& clusterZOA) const;
335
336 /**
337 * Check if the channel params has to be updated
338 * \param channelParams channel params
339 * \param channelCondition the channel condition
340 * \return true if the channel params has to be updated, false otherwise
341 */
342 bool ChannelParamsNeedsUpdate(Ptr<const ThreeGppChannelParams> channelParams,
343 Ptr<const ChannelCondition> channelCondition) const;
344
345 /**
346 * Check if the channel matrix has to be updated (it needs update when the channel params
347 * generation time is more recent than channel matrix generation time
348 * \param channelParams channel params structure
349 * \param channelMatrix channel matrix structure
350 * \return true if the channel matrix has to be updated, false otherwise
351 */
352 bool ChannelMatrixNeedsUpdate(Ptr<const ThreeGppChannelParams> channelParams,
353 Ptr<const ChannelMatrix> channelMatrix);
354
355 /**
356 * Check if the channel matrix has to be updated due to
357 * changes in the number of antenna ports
358 * \param aAntenna the antenna array of node a
359 * \param bAntenna the antenna array of node b
360 * \param channelMatrix channel matrix structure
361 * \return true if the channel matrix has to be updated, false otherwise
362 */
363 bool AntennaSetupChanged(Ptr<const PhasedArrayModel> aAntenna,
364 Ptr<const PhasedArrayModel> bAntenna,
365 Ptr<const ChannelMatrix> channelMatrix);
366
367 std::unordered_map<uint64_t, Ptr<ChannelMatrix>>
368 m_channelMatrixMap; //!< map containing the channel realizations per pair of
369 //!< PhasedAntennaArray instances, the key of this map is reciprocal
370 //!< uniquely identifies a pair of PhasedAntennaArrays
371 std::unordered_map<uint64_t, Ptr<ThreeGppChannelParams>>
372 m_channelParamsMap; //!< map containing the common channel parameters per pair of nodes, the
373 //!< key of this map is reciprocal and uniquely identifies a pair of
374 //!< nodes
375 Time m_updatePeriod; //!< the channel update period
376 double m_frequency; //!< the operating frequency
377 std::string m_scenario; //!< the 3GPP scenario
378 Ptr<ChannelConditionModel> m_channelConditionModel; //!< the channel condition model
379 Ptr<UniformRandomVariable> m_uniformRv; //!< uniform random variable
380 Ptr<NormalRandomVariable> m_normalRv; //!< normal random variable
382 m_uniformRvShuffle; //!< uniform random variable used to shuffle array in GetNewChannel
383
384 // Variable used to compute the additional Doppler contribution for the delayed
385 // (reflected) paths, as described in 3GPP TR 37.885 v15.3.0, Sec. 6.2.3.
386 double m_vScatt; //!< value used to compute the additional Doppler contribution for the delayed
387 //!< paths
388 Ptr<UniformRandomVariable> m_uniformRvDoppler; //!< uniform random variable, used to compute the
389 //!< additional Doppler contribution
390
391 // parameters for the blockage model
392 bool m_blockage; //!< enables the blockage model A
393 uint16_t m_numNonSelfBlocking; //!< number of non-self-blocking regions
394 bool m_portraitMode; //!< true if portrait mode, false if landscape
395 double m_blockerSpeed; //!< the blocker speed
396
397 static const uint8_t PHI_INDEX = 0; //!< index of the PHI value in the m_nonSelfBlocking array
398 static const uint8_t X_INDEX = 1; //!< index of the X value in the m_nonSelfBlocking array
399 static const uint8_t THETA_INDEX =
400 2; //!< index of the THETA value in the m_nonSelfBlocking array
401 static const uint8_t Y_INDEX = 3; //!< index of the Y value in the m_nonSelfBlocking array
402 static const uint8_t R_INDEX = 4; //!< index of the R value in the m_nonSelfBlocking array
403};
404} // namespace ns3
405
406#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.
Definition: ptr.h:77
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.
void Shuffle(double *first, double *last) const
Shuffle the elements of a simple sequence container of type double.
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:105
a unique identifier for an interface.
Definition: type-id.h:59
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:109
Definition: first.py:1
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