A Discrete-Event Network Simulator
API
Loading...
Searching...
No Matches
propagation-loss-model.h
Go to the documentation of this file.
1/*
2 * Copyright (c) 2005,2006,2007 INRIA
3 *
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License version 2 as
6 * published by the Free Software Foundation;
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program; if not, write to the Free Software
15 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
16 *
17 * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
18 * Contributions: Timo Bingmann <timo.bingmann@student.kit.edu>
19 * Contributions: Gary Pei <guangyu.pei@boeing.com> for fixed RSS
20 * Contributions: Tom Hewer <tomhewer@mac.com> for two ray ground model
21 * Pavel Boyko <boyko@iitp.ru> for matrix
22 */
23
24#ifndef PROPAGATION_LOSS_MODEL_H
25#define PROPAGATION_LOSS_MODEL_H
26
27#include "ns3/object.h"
28#include "ns3/random-variable-stream.h"
29
30#include <unordered_map>
31
32namespace ns3
33{
34
45class MobilityModel;
46
56{
57 public:
63 static TypeId GetTypeId();
64
66 ~PropagationLossModel() override;
67
68 // Delete copy constructor and assignment operator to avoid misuse
71
81
92
102 double CalcRxPower(double txPowerDbm, Ptr<MobilityModel> a, Ptr<MobilityModel> b) const;
103
115 int64_t AssignStreams(int64_t stream);
116
117 protected:
127 virtual int64_t DoAssignStreams(int64_t stream) = 0;
128
129 private:
138 virtual double DoCalcRxPower(double txPowerDbm,
140 Ptr<MobilityModel> b) const = 0;
141
143};
144
151{
152 public:
157 static TypeId GetTypeId();
158
161
162 // Delete copy constructor and assignment operator to avoid misuse
165
166 private:
167 double DoCalcRxPower(double txPowerDbm,
169 Ptr<MobilityModel> b) const override;
170 int64_t DoAssignStreams(int64_t stream) override;
171
173};
174
253{
254 public:
259 static TypeId GetTypeId();
261
262 // Delete copy constructor and assignment operator to avoid misuse
265
272 void SetFrequency(double frequency);
278 void SetSystemLoss(double systemLoss);
279
286 void SetMinLoss(double minLoss);
287
291 double GetMinLoss() const;
292
296 double GetFrequency() const;
300 double GetSystemLoss() const;
301
302 private:
303 double DoCalcRxPower(double txPowerDbm,
305 Ptr<MobilityModel> b) const override;
306 int64_t DoAssignStreams(int64_t stream) override;
307
313 double DbmToW(double dbm) const;
314
320 double DbmFromW(double w) const;
321
322 double m_lambda;
323 double m_frequency;
325 double m_minLoss;
326};
327
357{
358 public:
363 static TypeId GetTypeId();
365
366 // Delete copy constructor and assignment operator to avoid misuse
369
376 void SetFrequency(double frequency);
377
383 void SetSystemLoss(double systemLoss);
390 void SetMinDistance(double minDistance);
394 double GetMinDistance() const;
395
399 double GetFrequency() const;
400
404 double GetSystemLoss() const;
410 void SetHeightAboveZ(double heightAboveZ);
411
412 private:
413 double DoCalcRxPower(double txPowerDbm,
415 Ptr<MobilityModel> b) const override;
416 int64_t DoAssignStreams(int64_t stream) override;
417
423 double DbmToW(double dbm) const;
424
430 double DbmFromW(double w) const;
431
432 double m_lambda;
433 double m_frequency;
437};
438
460{
461 public:
466 static TypeId GetTypeId();
468
469 // Delete copy constructor and assignment operator to avoid misuse
472
477 void SetPathLossExponent(double n);
481 double GetPathLossExponent() const;
482
488 void SetReference(double referenceDistance, double referenceLoss);
489
490 private:
491 double DoCalcRxPower(double txPowerDbm,
493 Ptr<MobilityModel> b) const override;
494
495 int64_t DoAssignStreams(int64_t stream) override;
496
502
503 double m_exponent;
506};
507
550{
551 public:
556 static TypeId GetTypeId();
558
559 // Delete copy constructor and assignment operator to avoid misuse
562 delete;
563
564 // Parameters are all accessible via attributes.
565
566 private:
567 double DoCalcRxPower(double txPowerDbm,
569 Ptr<MobilityModel> b) const override;
570
571 int64_t DoAssignStreams(int64_t stream) override;
572
573 double m_distance0;
574 double m_distance1;
575 double m_distance2;
576
577 double m_exponent0;
578 double m_exponent1;
579 double m_exponent2;
580
582};
583
613{
614 public:
619 static TypeId GetTypeId();
620
622
623 // Delete copy constructor and assignment operator to avoid misuse
626
627 // Parameters are all accessible via attributes.
628
629 private:
630 double DoCalcRxPower(double txPowerDbm,
632 Ptr<MobilityModel> b) const override;
633
634 int64_t DoAssignStreams(int64_t stream) override;
635
636 double m_distance1;
637 double m_distance2;
638
639 double m_m0;
640 double m_m1;
641 double m_m2;
642
645};
646
661{
662 public:
667 static TypeId GetTypeId();
668
670 ~FixedRssLossModel() override;
671
672 // Delete copy constructor and assignment operator to avoid misuse
675
681 void SetRss(double rss);
682
683 private:
684 double DoCalcRxPower(double txPowerDbm,
686 Ptr<MobilityModel> b) const override;
687
688 int64_t DoAssignStreams(int64_t stream) override;
689
690 double m_rss;
691};
692
703{
704 public:
709 static TypeId GetTypeId();
710
713
714 // Delete copy constructor and assignment operator to avoid misuse
717
727 void SetLoss(Ptr<MobilityModel> a, Ptr<MobilityModel> b, double loss, bool symmetric = true);
728
733 void SetDefaultLoss(double defaultLoss);
734
735 private:
736 double DoCalcRxPower(double txPowerDbm,
738 Ptr<MobilityModel> b) const override;
739
740 int64_t DoAssignStreams(int64_t stream) override;
741
742 double m_default;
743
745 typedef std::pair<const Ptr<MobilityModel>, const Ptr<MobilityModel>> MobilityPair;
746
753 {
754 public:
760 size_t operator()(const MobilityPair& key) const
761 {
762 return uint64_t(key.first.operator->()) ^ uint64_t(key.second.operator->());
763 }
764 };
765
766 std::unordered_map<MobilityPair, double, MobilityPairHasher>
768};
769
782{
783 public:
788 static TypeId GetTypeId();
790
791 // Delete copy constructor and assignment operator to avoid misuse
794
795 private:
796 double DoCalcRxPower(double txPowerDbm,
798 Ptr<MobilityModel> b) const override;
799
800 int64_t DoAssignStreams(int64_t stream) override;
801
802 double m_range;
803};
804
805} // namespace ns3
806
807#endif /* PROPAGATION_LOSS_MODEL_H */
Return a constant received power level independent of the transmit power.
double m_rss
the received signal strength
double DoCalcRxPower(double txPowerDbm, Ptr< MobilityModel > a, Ptr< MobilityModel > b) const override
PropagationLossModel.
FixedRssLossModel & operator=(const FixedRssLossModel &)=delete
int64_t DoAssignStreams(int64_t stream) override
Assign a fixed random variable stream number to the random variables used by this model.
FixedRssLossModel(const FixedRssLossModel &)=delete
static TypeId GetTypeId()
Get the type ID.
a Friis propagation loss model
double m_lambda
the carrier wavelength
double DbmFromW(double w) const
Transforms a Watt value to Dbm.
double m_frequency
the carrier frequency
int64_t DoAssignStreams(int64_t stream) override
Assign a fixed random variable stream number to the random variables used by this model.
FriisPropagationLossModel(const FriisPropagationLossModel &)=delete
double DbmToW(double dbm) const
Transforms a Dbm value to Watt.
double DoCalcRxPower(double txPowerDbm, Ptr< MobilityModel > a, Ptr< MobilityModel > b) const override
PropagationLossModel.
static TypeId GetTypeId()
Get the type ID.
FriisPropagationLossModel & operator=(const FriisPropagationLossModel &)=delete
a log distance propagation model.
LogDistancePropagationLossModel & operator=(const LogDistancePropagationLossModel &)=delete
LogDistancePropagationLossModel(const LogDistancePropagationLossModel &)=delete
void SetReference(double referenceDistance, double referenceLoss)
Set the reference path loss at a given distance.
double DoCalcRxPower(double txPowerDbm, Ptr< MobilityModel > a, Ptr< MobilityModel > b) const override
PropagationLossModel.
static TypeId GetTypeId()
Get the type ID.
static Ptr< PropagationLossModel > CreateDefaultReference()
Creates a default reference loss model.
int64_t DoAssignStreams(int64_t stream) override
Assign a fixed random variable stream number to the random variables used by this model.
size_t operator()(const MobilityPair &key) const
Get the hash for a MobilityPair.
The propagation loss is fixed for each pair of nodes and doesn't depend on their actual positions.
void SetLoss(Ptr< MobilityModel > a, Ptr< MobilityModel > b, double loss, bool symmetric=true)
Set loss (in dB, positive) between pair of ns-3 objects (typically, nodes).
void SetDefaultLoss(double defaultLoss)
Set the default propagation loss (in dB, positive) to be used, infinity if not set.
std::unordered_map< MobilityPair, double, MobilityPairHasher > m_loss
Propagation loss between pair of nodes.
MatrixPropagationLossModel(const MatrixPropagationLossModel &)=delete
MatrixPropagationLossModel & operator=(const MatrixPropagationLossModel &)=delete
int64_t DoAssignStreams(int64_t stream) override
Assign a fixed random variable stream number to the random variables used by this model.
std::pair< const Ptr< MobilityModel >, const Ptr< MobilityModel > > MobilityPair
Typedef: Mobility models pair.
double DoCalcRxPower(double txPowerDbm, Ptr< MobilityModel > a, Ptr< MobilityModel > b) const override
PropagationLossModel.
static TypeId GetTypeId()
Get the type ID.
Nakagami-m fast fading propagation loss model.
Ptr< ErlangRandomVariable > m_erlangRandomVariable
Erlang random variable.
double m_m0
m for distances smaller than Distance1
NakagamiPropagationLossModel(const NakagamiPropagationLossModel &)=delete
Ptr< GammaRandomVariable > m_gammaRandomVariable
Gamma random variable.
int64_t DoAssignStreams(int64_t stream) override
Assign a fixed random variable stream number to the random variables used by this model.
NakagamiPropagationLossModel & operator=(const NakagamiPropagationLossModel &)=delete
double m_m1
m for distances smaller than Distance2
double m_m2
m for distances greater than Distance2
double DoCalcRxPower(double txPowerDbm, Ptr< MobilityModel > a, Ptr< MobilityModel > b) const override
PropagationLossModel.
static TypeId GetTypeId()
Get the type ID.
A base class which provides memory management and object aggregation.
Definition: object.h:89
Models the propagation loss through a transmission medium.
PropagationLossModel & operator=(const PropagationLossModel &)=delete
virtual int64_t DoAssignStreams(int64_t stream)=0
Assign a fixed random variable stream number to the random variables used by this model.
Ptr< PropagationLossModel > m_next
Next propagation loss model in the list.
double CalcRxPower(double txPowerDbm, Ptr< MobilityModel > a, Ptr< MobilityModel > b) const
Returns the Rx Power taking into account all the PropagationLossModel(s) chained to the current one.
static TypeId GetTypeId()
Get the type ID.
virtual double DoCalcRxPower(double txPowerDbm, Ptr< MobilityModel > a, Ptr< MobilityModel > b) const =0
PropagationLossModel.
int64_t AssignStreams(int64_t stream)
If this loss model uses objects of type RandomVariableStream, set the stream numbers to the integers ...
void SetNext(Ptr< PropagationLossModel > next)
Enables a chain of loss models to act on the signal.
PropagationLossModel(const PropagationLossModel &)=delete
Ptr< PropagationLossModel > GetNext()
Gets the next PropagationLossModel in the chain of loss models that act on the signal.
Smart pointer class similar to boost::intrusive_ptr.
Definition: ptr.h:77
The propagation loss follows a random distribution.
RandomPropagationLossModel & operator=(const RandomPropagationLossModel &)=delete
static TypeId GetTypeId()
Get the type ID.
double DoCalcRxPower(double txPowerDbm, Ptr< MobilityModel > a, Ptr< MobilityModel > b) const override
PropagationLossModel.
Ptr< RandomVariableStream > m_variable
random generator
int64_t DoAssignStreams(int64_t stream) override
Assign a fixed random variable stream number to the random variables used by this model.
RandomPropagationLossModel(const RandomPropagationLossModel &)=delete
The propagation loss depends only on the distance (range) between transmitter and receiver.
RangePropagationLossModel & operator=(const RangePropagationLossModel &)=delete
static TypeId GetTypeId()
Get the type ID.
int64_t DoAssignStreams(int64_t stream) override
Assign a fixed random variable stream number to the random variables used by this model.
RangePropagationLossModel(const RangePropagationLossModel &)=delete
double DoCalcRxPower(double txPowerDbm, Ptr< MobilityModel > a, Ptr< MobilityModel > b) const override
PropagationLossModel.
double m_range
Maximum Transmission Range (meters)
A log distance path loss propagation model with three distance fields.
double m_referenceLoss
The reference loss at distance d0 (dB).
int64_t DoAssignStreams(int64_t stream) override
Assign a fixed random variable stream number to the random variables used by this model.
double m_distance0
Beginning of the first (near) distance field.
double m_distance2
Beginning of the third (far) distance field.
ThreeLogDistancePropagationLossModel(const ThreeLogDistancePropagationLossModel &)=delete
double m_exponent2
The exponent for the third field.
double m_distance1
Beginning of the second (middle) distance field.
ThreeLogDistancePropagationLossModel & operator=(const ThreeLogDistancePropagationLossModel &)=delete
double m_exponent0
The exponent for the first field.
double m_exponent1
The exponent for the second field.
double DoCalcRxPower(double txPowerDbm, Ptr< MobilityModel > a, Ptr< MobilityModel > b) const override
PropagationLossModel.
a Two-Ray Ground propagation loss model ported from NS2
double DbmToW(double dbm) const
Transforms a Dbm value to Watt.
double m_minDistance
minimum distance for the model
double m_heightAboveZ
antenna height above the node's Z coordinate
static TypeId GetTypeId()
Get the type ID.
double DbmFromW(double w) const
Transforms a Watt value to Dbm.
int64_t DoAssignStreams(int64_t stream) override
Assign a fixed random variable stream number to the random variables used by this model.
double DoCalcRxPower(double txPowerDbm, Ptr< MobilityModel > a, Ptr< MobilityModel > b) const override
PropagationLossModel.
TwoRayGroundPropagationLossModel(const TwoRayGroundPropagationLossModel &)=delete
TwoRayGroundPropagationLossModel & operator=(const TwoRayGroundPropagationLossModel &)=delete
a unique identifier for an interface.
Definition: type-id.h:59
Every class exported by the ns3 library is enclosed in the ns3 namespace.