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. */