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 ()) - .AddAttribute ("MaxAngle", + .AddAttribute ("ElevationAngle", "Cut-off angle for signal propagation", DoubleValue (20.0), - MakeDoubleAccessor (&LeoPropagationLossModel::m_cutoffAngle), + MakeDoubleAccessor (&LeoPropagationLossModel::m_elevationAngle), + MakeDoubleChecker ()) + .AddAttribute ("AtmosphericLoss", + "Atmospheric loss due to attenuation in dB", + DoubleValue (0.0), + MakeDoubleAccessor (&LeoPropagationLossModel::m_atmosphericLoss), + MakeDoubleChecker ()) + .AddAttribute ("FreeSpacePathLoss", + "Free space path loss in dB", + DoubleValue (0.0), + MakeDoubleAccessor (&LeoPropagationLossModel::m_atmosphericLoss), + MakeDoubleChecker ()) + .AddAttribute ("LinkMargin", + "Link margin in dB", + DoubleValue (0.0), + MakeDoubleAccessor (&LeoPropagationLossModel::m_linkMargin), MakeDoubleChecker ()) ; return tid; @@ -61,13 +76,14 @@ LeoPropagationLossModel::DoCalcRxPower (double txPowerDbm, Ptr a, Ptr 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="< 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 ()) // // 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 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. */