From 27ee6a36979748ad721e3e830c7f2b84853dd082 Mon Sep 17 00:00:00 2001
From: Tim Schubert <tim.schubert@tu-bs.de>
Date: Mon, 10 Aug 2020 13:31:01 +0200
Subject: [PATCH] Add link params to model with attributes
---
model/leo-oneweb-constants.h | 2 +-
model/leo-propagation-loss-model.cc | 26 +++++++++++++++++++++-----
model/leo-propagation-loss-model.h | 19 +++++++++++++++++--
model/leo-starlink-constants.h | 4 ++--
model/leo-telesat-constants.h | 2 +-
model/mock-channel.cc | 3 ++-
model/mock-net-device.cc | 18 ++++++++++++++++++
model/mock-net-device.h | 15 +++++++++++++++
8 files changed, 77 insertions(+), 12 deletions(-)
diff --git a/model/leo-oneweb-constants.h b/model/leo-oneweb-constants.h
index 012d29e..cdbccc1 100644
--- a/model/leo-oneweb-constants.h
+++ b/model/leo-oneweb-constants.h
@@ -24,7 +24,7 @@ namespace ns3 {
#define LEO_ONEWEB_FREQUENCY 28.5 // GHz
#define LEO_ONEWEB_BANDWIDTH 0.25 // GHz
#define LEO_ONEWEB_TX_ANTENNA_D 2.4 // m
-#define LEO_ONEWEB_EIRP 63.2 // dBW
+#define LEO_ONEWEB_EIRP 93.2 // dBm
#define LEO_ONEWEB_MODCOD "256APSK 32/45" // -
#define LEO_ONEWEB_ROLL_OFF_FACTOR 0.1 // -
#define LEO_ONEWEB_SPECTRAL_EFF 5.1 // bps/Hz
diff --git a/model/leo-propagation-loss-model.cc b/model/leo-propagation-loss-model.cc
index 613e2e1..e2106f3 100644
--- a/model/leo-propagation-loss-model.cc
+++ b/model/leo-propagation-loss-model.cc
@@ -26,10 +26,25 @@ LeoPropagationLossModel::GetTypeId (void)
DoubleValue (1000000.0),
MakeDoubleAccessor (&LeoPropagationLossModel::m_cutoffDistance),
MakeDoubleChecker<double> ())
- .AddAttribute ("MaxAngle",
+ .AddAttribute ("ElevationAngle",
"Cut-off angle for signal propagation",
DoubleValue (20.0),
- MakeDoubleAccessor (&LeoPropagationLossModel::m_cutoffAngle),
+ MakeDoubleAccessor (&LeoPropagationLossModel::m_elevationAngle),
+ MakeDoubleChecker<double> ())
+ .AddAttribute ("AtmosphericLoss",
+ "Atmospheric loss due to attenuation in dB",
+ DoubleValue (0.0),
+ MakeDoubleAccessor (&LeoPropagationLossModel::m_atmosphericLoss),
+ MakeDoubleChecker<double> ())
+ .AddAttribute ("FreeSpacePathLoss",
+ "Free space path loss in dB",
+ DoubleValue (0.0),
+ MakeDoubleAccessor (&LeoPropagationLossModel::m_atmosphericLoss),
+ MakeDoubleChecker<double> ())
+ .AddAttribute ("LinkMargin",
+ "Link margin in dB",
+ DoubleValue (0.0),
+ MakeDoubleAccessor (&LeoPropagationLossModel::m_linkMargin),
MakeDoubleChecker<double> ())
;
return tid;
@@ -61,13 +76,14 @@ LeoPropagationLossModel::DoCalcRxPower (double txPowerDbm,
Ptr<MobilityModel> a,
Ptr<MobilityModel> b) const
{
- if (a->GetDistanceFrom (b) > m_cutoffDistance && GetAngle (a, b) > m_cutoffAngle)
+ if (a->GetDistanceFrom (b) > m_cutoffDistance && GetAngle (a, b) > m_elevationAngle / 2.0)
{
return 0.0;
}
- double rxc = 0.0;//-m_variable->GetValue ();
- //NS_LOG_DEBUG ("attenuation coefficient="<<rxc<<"Db");
+ double rxc = -m_atmosphericLoss - m_freeSpacePathLoss;
+ NS_LOG_DEBUG ("attenuation coefficient= " << rxc << " dB");
+
return txPowerDbm + rxc;
}
diff --git a/model/leo-propagation-loss-model.h b/model/leo-propagation-loss-model.h
index 84696e4..d1b8176 100644
--- a/model/leo-propagation-loss-model.h
+++ b/model/leo-propagation-loss-model.h
@@ -25,9 +25,24 @@ private:
double m_cutoffDistance;
/**
- * Cutoff angle for signal
+ * Maximum elevation angle
*/
- double m_cutoffAngle;
+ double m_elevationAngle;
+
+ /**
+ * Atmospheric loss
+ */
+ double m_atmosphericLoss;
+
+ /**
+ * Free space path loss (FSPL)
+ */
+ double m_freeSpacePathLoss;
+
+ /**
+ * Link margin
+ */
+ double m_linkMargin;
/**
* Returns the Rx Power taking into account only the particular
diff --git a/model/leo-starlink-constants.h b/model/leo-starlink-constants.h
index 3c00a8d..f4a7f09 100644
--- a/model/leo-starlink-constants.h
+++ b/model/leo-starlink-constants.h
@@ -24,14 +24,14 @@ namespace ns3 {
#define LEO_STARLINK_FREQUENCY 28.5 // GHz
#define LEO_STARLINK_BANDWIDTH 0.5 // GHz
#define LEO_STARLINK_TX_ANTENNA_D 3.5 // m
-#define LEO_STARLINK_EIRP 68.4 // dBW
+#define LEO_STARLINK_EIRP 98.4 // dBm
#define LEO_STARLINK_MODCOD "256APSK 3/4" // -
#define LEO_STARLINK_ROLL_OFF_FACTOR 0.1 // -
#define LEO_STARLINK_SPECTRAL_EFF 5.4 // bps/Hz
#define LEO_STARLINK_PATH_DISTANCE 1684 // km
#define LEO_STARLINK_ELEVATION_ANGLE 40 // deg
#define LEO_STARLINK_FSPL 186.1 // dB
-#define LEO_STARLINK_ATMOSPHERIC_LOSS 2.9 // dB
+#define LEO_STARLINK_ATMOSPHERIC_LOSS 2.9 // dBm
#define LEO_STARLINK_RX_ANTENNA_GAIN 40.9 // dBi
#define LEO_STARLINK_SYSTEM_TEMP 535.9 // K
#define LEO_STARLINK_G_T 13.6 // dB/K
diff --git a/model/leo-telesat-constants.h b/model/leo-telesat-constants.h
index c44f90d..f2f9709 100644
--- a/model/leo-telesat-constants.h
+++ b/model/leo-telesat-constants.h
@@ -24,7 +24,7 @@ namespace ns3 {
#define LEO_TELESAT_FREQUENCY 28.5 // GHz
#define LEO_TELESAT_BANDWIDTH 2.1 // GHz
#define LEO_TELESAT_TX_ANTENNA_D 3.5 // m
-#define LEO_TELESAT_EIRP 75.9 // dBW
+#define LEO_TELESAT_EIRP 105.9 // dBm
#define LEO_TELESAT_MODCOD "64APSK 3/4" // -
#define LEO_TELESAT_ROLL_OFF_FACTOR 0.1 // -
#define LEO_TELESAT_SPECTRAL_EFF 4.1 // bps/Hz
diff --git a/model/mock-channel.cc b/model/mock-channel.cc
index 4e44332..60ccc8b 100644
--- a/model/mock-channel.cc
+++ b/model/mock-channel.cc
@@ -173,7 +173,8 @@ MockChannel::Deliver (
Ptr<PropagationLossModel> pLoss = GetPropagationLoss ();
if (pLoss != 0)
{
- if (pLoss->CalcRxPower (1.0, srcMob, dstMob) == 0.0)
+ // check if Rx power is below link margin
+ if (pLoss->CalcRxPower (src->GetTxPower (), srcMob, dstMob) == 0.0)
{
return false;
}
diff --git a/model/mock-net-device.cc b/model/mock-net-device.cc
index 6abdb77..6327900 100644
--- a/model/mock-net-device.cc
+++ b/model/mock-net-device.cc
@@ -28,6 +28,7 @@
#include "ns3/net-device-queue-interface.h"
#include "ns3/ethernet-header.h"
#include "ns3/ethernet-trailer.h"
+#include "ns3/double.h"
#include "mock-channel.h"
#include "mock-net-device.h"
@@ -69,6 +70,11 @@ MockNetDevice::GetTypeId (void)
TimeValue (Seconds (0.0)),
MakeTimeAccessor (&MockNetDevice::m_tInterframeGap),
MakeTimeChecker ())
+ .AddAttribute ("TxPower",
+ "Transmit power in dBm",
+ DoubleValue (1.0),
+ MakeDoubleAccessor (&MockNetDevice::m_txPower),
+ MakeDoubleChecker<double> ())
//
// Transmit queueing discipline for the device which includes its own set
@@ -765,4 +771,16 @@ MockNetDevice::IsPointToPoint() const
return false;
}
+double
+MockNetDevice::GetTxPower () const
+{
+ return m_txPower;
+}
+
+void
+MockNetDevice::SetTxPower (double txPower)
+{
+ m_txPower = txPower;
+}
+
} // namespace ns3
diff --git a/model/mock-net-device.h b/model/mock-net-device.h
index 7cb491d..971bdc7 100644
--- a/model/mock-net-device.h
+++ b/model/mock-net-device.h
@@ -91,6 +91,16 @@ public:
*/
bool Attach (Ptr<MockChannel> ch);
+ /**
+ * Get the transmission power in dbm
+ */
+ double GetTxPower () const;
+
+ /**
+ * Set the transmission power in dbm
+ */
+ void SetTxPower (double txPower);
+
/**
* Attach a queue to the MockNetDevice.
*
@@ -280,6 +290,11 @@ private:
READY, /**< The transmitter is ready to begin transmission of a packet */
BUSY /**< The transmitter is busy transmitting a packet */
};
+ /**
+ * Transmission power used for transmissions
+ */
+ double m_txPower;
+
/**
* The state of the Net Device transmit state machine.
*/