A Discrete-Event Network Simulator
API
channel-condition-model.h
Go to the documentation of this file.
1 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
2 /*
3  * Copyright (c) 2019 SIGNET Lab, Department of Information Engineering,
4  * University of Padova
5  *
6  * This program is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License version 2 as
8  * published by the Free Software Foundation;
9  *
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13  * GNU General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public License
16  * along with this program; if not, write to the Free Software
17  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18  */
19 
20 #ifndef CHANNEL_CONDITION_MODEL_H
21 #define CHANNEL_CONDITION_MODEL_H
22 
23 #include "ns3/object.h"
24 #include "ns3/random-variable-stream.h"
25 #include "ns3/vector.h"
26 #include "ns3/nstime.h"
27 #include <unordered_map>
28 
29 namespace ns3 {
30 
31 class MobilityModel;
32 
41 class ChannelCondition : public Object
42 {
43 
44 public:
49  {
50  LOS,
51  NLOS,
54  };
55 
60  {
61  O2O,
62  O2I,
63  I2I,
65  };
66 
72  static TypeId GetTypeId (void);
73 
78 
84  ChannelCondition (LosConditionValue losCondition, O2iConditionValue o2iCondition = O2O);
85 
89  virtual ~ChannelCondition ();
90 
98 
105  void SetLosCondition (LosConditionValue losCondition);
106 
114 
121  void SetO2iCondition (O2iConditionValue o2iCondition);
122 
128  bool IsLos () const;
129 
139  bool IsNlos () const;
140 
146  bool IsNlosv () const;
147 
153  bool IsO2i () const;
154 
160  bool IsO2o () const;
161 
167  bool IsI2i () const;
168 
175  bool IsEqual (Ptr<const ChannelCondition> otherCondition) const;
176 
177 private:
180 
188  friend std::ostream& operator<< (std::ostream& os, LosConditionValue cond);
189 
190 };
191 
201 {
202 public:
208  static TypeId GetTypeId (void);
209 
214 
218  virtual ~ChannelConditionModel ();
219 
229 
239  virtual int64_t AssignStreams (int64_t stream) = 0;
240 
247 
255 };
256 
263 {
264 public:
270  static TypeId GetTypeId (void);
271 
276 
281 
290 
297 
305 
315  virtual int64_t AssignStreams (int64_t stream) override;
316 };
317 
324 {
325 public:
331  static TypeId GetTypeId (void);
332 
337 
342 
351 
358 
366 
376  virtual int64_t AssignStreams (int64_t stream) override;
377 };
378 
385 {
386 public:
392  static TypeId GetTypeId (void);
393 
398 
403 
412 
419 
427 
437  virtual int64_t AssignStreams (int64_t stream) override;
438 };
439 
447 {
448 public:
454  static TypeId GetTypeId (void);
455 
460 
464  virtual ~ThreeGppChannelConditionModel () override;
465 
478 
488  virtual int64_t AssignStreams (int64_t stream) override;
489 
490 protected:
491  virtual void DoDispose () override;
492 
497  {
502  };
503 
510  static double Calculate2dDistance (const Vector &a, const Vector &b);
511 
513 
514 private:
524 
532  virtual double ComputePlos (Ptr<const MobilityModel> a, Ptr<const MobilityModel> b) const = 0;
533 
542 
550 
554  struct Item
555  {
558  };
559 
560  std::unordered_map<uint32_t, Item> m_channelConditionMap;
562 };
563 
573 {
574 public:
580  static TypeId GetTypeId (void);
581 
586 
590  virtual ~ThreeGppRmaChannelConditionModel () override;
591 
592 private:
601  virtual double ComputePlos (Ptr<const MobilityModel> a, Ptr<const MobilityModel> b) const override;
602 };
603 
613 {
614 public:
620  static TypeId GetTypeId (void);
621 
626 
630  virtual ~ThreeGppUmaChannelConditionModel () override;
631 
632 private:
641  virtual double ComputePlos (Ptr<const MobilityModel> a, Ptr<const MobilityModel> b) const override;
642 };
643 
653 {
654 public:
660  static TypeId GetTypeId (void);
661 
666 
671 
672 private:
681  virtual double ComputePlos (Ptr<const MobilityModel> a, Ptr<const MobilityModel> b) const override;
682 };
683 
693 {
694 public:
700  static TypeId GetTypeId (void);
701 
706 
711 
712 private:
721  virtual double ComputePlos (Ptr<const MobilityModel> a, Ptr<const MobilityModel> b) const override;
722 };
723 
733 {
734 public:
740  static TypeId GetTypeId (void);
741 
746 
751 
752 private:
761  virtual double ComputePlos (Ptr<const MobilityModel> a, Ptr<const MobilityModel> b) const override;
762 };
763 
764 } // end ns3 namespace
765 
766 #endif /* CHANNEL_CONDITION_MODEL_H */
Los condition not defined.
virtual double ComputePlos(Ptr< const MobilityModel > a, Ptr< const MobilityModel > b) const =0
Compute the LOS probability.
Simulation virtual time values and global simulation resolution.
Definition: nstime.h:103
virtual int64_t AssignStreams(int64_t stream) override
If this model uses objects of type RandomVariableStream, set the stream numbers to the integers start...
bool IsO2i() const
Return true if the channel is outdoor-to-indoor.
Smart pointer class similar to boost::intrusive_ptr.
Definition: ptr.h:73
VehicleDensity
Determine the density of vehicles in a V2V scenario.
Models the channel condition.
virtual ~ThreeGppIndoorOpenOfficeChannelConditionModel() override
Destructor for the ThreeGppIndoorOpenOfficeChannelConditionModel class.
LosConditionValue m_losCondition
contains the information about the LOS state of the channel
virtual double ComputePlos(Ptr< const MobilityModel > a, Ptr< const MobilityModel > b) const override
Compute the LOS probability as specified in Table 7.4.2-1 of 3GPP TR 38.901 for the UMi-Street Canyon...
Struct to store the channel condition in the m_channelConditionMap.
NeverLosVehicleChannelConditionModel & operator=(const NeverLosVehicleChannelConditionModel &)=delete
Copy constructor.
ThreeGppChannelConditionModel()
Constructor for the ThreeGppRmaChannelConditionModel class.
void SetO2iCondition(O2iConditionValue o2iCondition)
Set the O2iConditionValue contaning the information about the O2I state of the channel.
static TypeId GetTypeId(void)
Get the type ID.
bool IsLos() const
Return true if the channel condition is LOS.
virtual Ptr< ChannelCondition > GetChannelCondition(Ptr< const MobilityModel > a, Ptr< const MobilityModel > b) const override
Computes the condition of the channel between a and b, that will be always non-LoS.
static double Calculate2dDistance(const Vector &a, const Vector &b)
Computes the 2D distance between two 3D vectors.
std::unordered_map< uint32_t, Item > m_channelConditionMap
map to store the channel conditions
virtual ~ChannelConditionModel()
Destructor for the ChannelConditionModel class.
bool IsNlosv() const
Return true if the channel condition is NLOSv.
ThreeGppUmiStreetCanyonChannelConditionModel()
Constructor for the ThreeGppUmiStreetCanyonChannelConditionModel class.
LosConditionValue GetLosCondition() const
Get the LosConditionValue contaning the information about the LOS/NLOS state of the channel...
Ptr< UniformRandomVariable > m_uniformVar
uniform random variable
ThreeGppIndoorOpenOfficeChannelConditionModel()
Constructor for the ThreeGppIndoorOpenOfficeChannelConditionModel class.
ChannelConditionModel & operator=(const ChannelConditionModel &)=delete
Copy constructor.
static uint32_t GetKey(Ptr< const MobilityModel > a, Ptr< const MobilityModel > b)
Returns a unique and reciprocal key for the channel between a and b.
virtual ~ThreeGppIndoorMixedOfficeChannelConditionModel() override
Destructor for the ThreeGppIndoorMixedOfficeChannelConditionModel class.
ThreeGppUmaChannelConditionModel()
Constructor for the ThreeGppUmaChannelConditionModel class.
static TypeId GetTypeId(void)
Get the type ID.
static TypeId GetTypeId(void)
Get the type ID.
virtual int64_t AssignStreams(int64_t stream) override
If this model uses objects of type RandomVariableStream, set the stream numbers to the integers start...
virtual ~ThreeGppUmiStreetCanyonChannelConditionModel() override
Destructor for the ThreeGppUmiStreetCanyonChannelConditionModel class.
Ptr< ChannelCondition > m_condition
the channel condition
static TypeId GetTypeId(void)
Get the type ID.
ThreeGppIndoorMixedOfficeChannelConditionModel()
Constructor for the ThreeGppIndoorMixedOfficeChannelConditionModel class.
virtual int64_t AssignStreams(int64_t stream)=0
If this model uses objects of type RandomVariableStream, set the stream numbers to the integers start...
Base class for the 3GPP channel condition models.
AlwaysLosChannelConditionModel & operator=(const AlwaysLosChannelConditionModel &)=delete
Copy constructor.
bool IsNlos() const
Return true if the channel condition is NLOS.
Computes the channel condition for the RMa scenario.
Computes the channel condition for the UMa scenario.
virtual double ComputePlos(Ptr< const MobilityModel > a, Ptr< const MobilityModel > b) const override
Compute the LOS probability as specified in Table 7.4.2-1 of 3GPP TR 38.901 for the RMa scenario...
virtual ~ThreeGppRmaChannelConditionModel() override
Destructor for the ThreeGppRmaChannelConditionModel class.
virtual Ptr< ChannelCondition > GetChannelCondition(Ptr< const MobilityModel > a, Ptr< const MobilityModel > b) const override
Computes the condition of the channel between a and b, that will be always LoS.
Computes the channel condition for the Indoor Mixed Office scenario.
virtual Ptr< ChannelCondition > GetChannelCondition(Ptr< const MobilityModel > a, Ptr< const MobilityModel > b) const =0
Computes the condition of the channel between a and b.
Every class exported by the ns3 library is enclosed in the ns3 namespace.
virtual double ComputePlos(Ptr< const MobilityModel > a, Ptr< const MobilityModel > b) const override
Compute the LOS probability as specified in Table 7.4.2-1 of 3GPP TR 38.901 for the Indoor Mixed Offi...
virtual double ComputePlos(Ptr< const MobilityModel > a, Ptr< const MobilityModel > b) const override
Compute the LOS probability as specified in Table 7.4.2-1 of 3GPP TR 38.901 for the Indoor Open Offic...
Computes the channel condition for the Indoor Open Office scenario.
virtual Ptr< ChannelCondition > GetChannelCondition(Ptr< const MobilityModel > a, Ptr< const MobilityModel > b) const override
Retrieve the condition of the channel between a and b.
static TypeId GetTypeId(void)
Get the type ID.
virtual ~ChannelCondition()
Destructor for the ChannelCondition class.
static TypeId GetTypeId(void)
Get the type ID.
virtual void DoDispose() override
Destructor implementation.
static TypeId GetTypeId(void)
Get the type ID.
Carries information about the LOS/NLOS channel state.
virtual double ComputePnlos(Ptr< const MobilityModel > a, Ptr< const MobilityModel > b) const
Compute the NLOS probability.
bool IsEqual(Ptr< const ChannelCondition > otherCondition) const
Return true if this instance is equivalent to the one passed as argument.
NeverLosChannelConditionModel & operator=(const NeverLosChannelConditionModel &)=delete
Copy constructor.
ChannelConditionModel()
Constructor for the ChannelConditionModel class.
Time m_updatePeriod
the update period for the channel condition
ThreeGppRmaChannelConditionModel()
Constructor for the ThreeGppRmaChannelConditionModel class.
friend std::ostream & operator<<(std::ostream &os, LosConditionValue cond)
Prints a LosConditionValue to output.
O2iConditionValue
Possible values for Outdoor to Indoor condition.
virtual ~NeverLosChannelConditionModel()
Destructor.
void SetLosCondition(LosConditionValue losCondition)
Set the LosConditionValue with the information about the LOS/NLOS state of the channel.
Models a never in-LoS condition model.
virtual ~ThreeGppChannelConditionModel() override
Destructor for the ThreeGppRmaChannelConditionModel class.
virtual ~ThreeGppUmaChannelConditionModel() override
Destructor for the ThreeGppUmaChannelConditionModel class.
static TypeId GetTypeId(void)
Get the type ID.
Outdoor to Indoor condition not defined.
Ptr< ChannelCondition > ComputeChannelCondition(Ptr< const MobilityModel > a, Ptr< const MobilityModel > b) const
This method computes the channel condition based on a probabilistic model that is specific for the sc...
Time m_generatedTime
the time when the condition was generated
bool IsO2o() const
Return true if the channel is outdoor-to-outdoor.
Models a never in-LoS condition model caused by a blocking vehicle.
O2iConditionValue m_o2iCondition
contains the information about the O2I state of the channel
virtual Ptr< ChannelCondition > GetChannelCondition(Ptr< const MobilityModel > a, Ptr< const MobilityModel > b) const override
Computes the condition of the channel between a and b, that will be always NLOSv. ...
O2iConditionValue GetO2iCondition() const
Get the O2iConditionValue contaning the information about the O2I state of the channel.
Models an always in-LoS condition model.
A base class which provides memory management and object aggregation.
Definition: object.h:87
bool IsI2i() const
Return true if the channel is indoor-to-indoor.
LosConditionValue
Possible values for Line-of-Sight condition.
ChannelCondition()
Constructor for the ChannelCondition class.
Computes the channel condition for the UMi-Street canyon scenario.
a unique identifier for an interface.
Definition: type-id.h:58
virtual int64_t AssignStreams(int64_t stream) override
If this model uses objects of type RandomVariableStream, set the stream numbers to the integers start...
Non Line of Sight due to a vehicle.
virtual int64_t AssignStreams(int64_t stream) override
If this model uses objects of type RandomVariableStream, set the stream numbers to the integers start...
virtual double ComputePlos(Ptr< const MobilityModel > a, Ptr< const MobilityModel > b) const override
Compute the LOS probability as specified in Table 7.4.2-1 of 3GPP TR 38.901 for the UMa scenario...