From 7293dbbad1353f2ee1e5a06ac37b310cc12b5a59 Mon Sep 17 00:00:00 2001 From: Tim Schubert Date: Mon, 10 Aug 2020 18:28:59 +0200 Subject: [PATCH] Add user link parameters --- helper/leo-channel-helper.cc | 70 ++++++++++++++++++++------- helper/leo-channel-helper.h | 4 +- model/leo-mock-net-device.cc | 17 +++++++ model/leo-mock-net-device.h | 5 ++ model/leo-oneweb-constants.h | 73 +++++++++++++++++++---------- model/leo-propagation-loss-model.cc | 8 ++-- model/leo-starlink-constants.h | 73 +++++++++++++++++++---------- model/leo-telesat-constants.h | 73 +++++++++++++++++++---------- model/mock-channel.cc | 2 +- model/mock-channel.h | 2 +- model/mock-net-device.cc | 10 +++- model/mock-net-device.h | 6 ++- 12 files changed, 247 insertions(+), 96 deletions(-) diff --git a/helper/leo-channel-helper.cc b/helper/leo-channel-helper.cc index bb6c984..78dab68 100644 --- a/helper/leo-channel-helper.cc +++ b/helper/leo-channel-helper.cc @@ -40,25 +40,55 @@ LeoChannelHelper::LeoChannelHelper (std::string constellation) : } void -LeoChannelHelper::SetConstellation (std::string constellation); +LeoChannelHelper::SetConstellation (std::string constellation) { - if (constellation == "Starlink") + if (constellation == "StarlinkGateway") { - SetConstellationAttributes (LEO_STARLINK_EIRP, - LEO_STARLINK_ELEVATION_ANGLE, - LEO_STARLINK_FSPL, - LEO_STARLINK_ATMOSPHERIC_LOSS, - LEO_STARLINK_LINK_MARGIN, - LEO_STARLINK_DATA_RATE); + SetConstellationAttributes (LEO_STARLINK_GATEWAY_EIRP, + LEO_STARLINK_GATEWAY_ELEVATION_ANGLE, + LEO_STARLINK_GATEWAY_FSPL, + LEO_STARLINK_GATEWAY_ATMOSPHERIC_LOSS, + LEO_STARLINK_GATEWAY_LINK_MARGIN, + LEO_STARLINK_GATEWAY_DATA_RATE, + LEO_STARLINK_GATEWAY_RX_ANTENNA_GAIN, + 0.0 // TODO + ); } - else if (constellation == "Telesat") + else if (constellation == "StarlinkUser") { - SetConstellationAttributes (LEO_TELESAT_EIRP, - LEO_TELESAT_ELEVATION_ANGLE, - LEO_TELESAT_FSPL, - LEO_TELESAT_ATMOSPHERIC_LOSS, - LEO_TELESAT_LINK_MARGIN, - LEO_TELESAT_DATA_RATE); + SetConstellationAttributes (LEO_STARLINK_USER_EIRP, + LEO_STARLINK_USER_ELEVATION_ANGLE, + LEO_STARLINK_USER_FSPL, + LEO_STARLINK_USER_ATMOSPHERIC_LOSS, + LEO_STARLINK_USER_LINK_MARGIN, + LEO_STARLINK_USER_DATA_RATE, + LEO_STARLINK_USER_RX_ANTENNA_GAIN, + 0.0 + ); + } + else if (constellation == "TelesatGateway") + { + SetConstellationAttributes (LEO_TELESAT_GATEWAY_EIRP, + LEO_TELESAT_GATEWAY_ELEVATION_ANGLE, + LEO_TELESAT_GATEWAY_FSPL, + LEO_TELESAT_GATEWAY_ATMOSPHERIC_LOSS, + LEO_TELESAT_GATEWAY_LINK_MARGIN, + LEO_TELESAT_GATEWAY_DATA_RATE, + LEO_TELESAT_GATEWAY_RX_ANTENNA_GAIN, + 0.0 + ); + } + else if (constellation == "TelesatUser") + { + SetConstellationAttributes (LEO_TELESAT_USER_EIRP, + LEO_TELESAT_USER_ELEVATION_ANGLE, + LEO_TELESAT_USER_FSPL, + LEO_TELESAT_USER_ATMOSPHERIC_LOSS, + LEO_TELESAT_USER_LINK_MARGIN, + LEO_TELESAT_USER_DATA_RATE, + LEO_TELESAT_USER_RX_ANTENNA_GAIN, + 0.0 + ); } else { @@ -72,11 +102,19 @@ LeoChannelHelper::SetConstellationAttributes (double eirp, double fspl, double atmosphericLoss, double linkMargin, - double dataRate) + double dataRate, + double rxGain, + double rxLoss) { m_gndDeviceFactory.Set ("TxPower", DoubleValue (eirp)); m_satDeviceFactory.Set ("TxPower", DoubleValue (eirp)); + m_gndDeviceFactory.Set ("RxGain", DoubleValue (rxGain)); + m_gndDeviceFactory.Set ("RxLoss", DoubleValue (rxLoss)); + + m_satDeviceFactory.Set ("RxLoss", DoubleValue (rxGain)); + m_satDeviceFactory.Set ("RxGain", DoubleValue (rxLoss)); + m_gndDeviceFactory.Set ("DataRate", DoubleValue (dataRate)); m_satDeviceFactory.Set ("DataRate", DoubleValue (dataRate)); diff --git a/helper/leo-channel-helper.h b/helper/leo-channel-helper.h index 6cad740..4f869ed 100644 --- a/helper/leo-channel-helper.h +++ b/helper/leo-channel-helper.h @@ -76,7 +76,9 @@ private: double fspl, double atmosphericLoss, double linkMargin, - double dataRate); + double dataRate, + double rxGain, + double rxLoss); }; }; diff --git a/model/leo-mock-net-device.cc b/model/leo-mock-net-device.cc index b0ddf05..2a36f43 100644 --- a/model/leo-mock-net-device.cc +++ b/model/leo-mock-net-device.cc @@ -2,6 +2,7 @@ #include "ns3/log.h" #include "ns3/enum.h" +#include "ns3/double.h" #include "leo-mock-net-device.h" @@ -25,6 +26,16 @@ LeoMockNetDevice::GetTypeId (void) MakeEnumChecker ( DeviceType::GND, "ns3::LeoMockNetDevice::NetDeviceType::GND", DeviceType::SAT, "ns3::LeoMockNetDevice::NetDeviceType::SAT")) + .AddAttribute ("ReceiverGain", + "Receiver gain in dBm", + DoubleValue (0.0), + MakeDoubleAccessor (&LeoMockNetDevice::m_rxGain), + MakeDoubleChecker ()) + .AddAttribute ("ReceiverLoss", + "Receiver loss in dBm", + DoubleValue (0.0), + MakeDoubleAccessor (&LeoMockNetDevice::m_rxLoss), + MakeDoubleChecker ()) ; return tid; }; @@ -45,4 +56,10 @@ LeoMockNetDevice::SetDeviceType (LeoMockNetDevice::DeviceType deviceType) m_deviceType = deviceType; } +double +LeoMockNetDevice::DoCalcRxPower (double rxPower) const +{ + return rxPower - m_rxLoss + m_rxGain; +} + }; /* namspace ns3 */ diff --git a/model/leo-mock-net-device.h b/model/leo-mock-net-device.h index db6281f..a45e46b 100644 --- a/model/leo-mock-net-device.h +++ b/model/leo-mock-net-device.h @@ -30,8 +30,13 @@ public: DeviceType GetDeviceType () const; void SetDeviceType (DeviceType deviceType); +protected: + virtual double DoCalcRxPower (double rxPower) const; + private: DeviceType m_deviceType; + double m_rxLoss; + double m_rxGain; }; }; diff --git a/model/leo-oneweb-constants.h b/model/leo-oneweb-constants.h index cdbccc1..d74e847 100644 --- a/model/leo-oneweb-constants.h +++ b/model/leo-oneweb-constants.h @@ -21,30 +21,55 @@ 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 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 -#define LEO_ONEWEB_PATH_DISTANCE 1504 // km -#define LEO_ONEWEB_ELEVATION_ANGLE 55 // deg -#define LEO_ONEWEB_FSPL 185.1 // dB -#define LEO_ONEWEB_ATMOSPHERIC_LOSS 2.3 // dB -#define LEO_ONEWEB_RX_ANTENNA_GAIN 37.8 // dBi -#define LEO_ONEWEB_SYSTEM_TEMP 447.2 // K -#define LEO_ONEWEB_G_T 11.3 // dB/K -#define LEO_ONEWEB_RX_C_N0 32.5 // dB -#define LEO_ONEWEB_RX_C_ACI 27 // dB -#define LEO_ONEWEB_RX_C_ASI 27 // dB -#define LEO_ONEWEB_RX_C_XPI 25 // dB -#define LEO_ONEWEB_HPA_C_3IM 30 // dB -#define LEO_ONEWEB_RX_EB_N0_I0 13.3 // dB -#define LEO_ONEWEB_REQ_EB_N0 12.3 // dB -#define LEO_ONEWEB_LINK_MARGIN 1.03 // dB -#define LEO_ONEWEB_DATA_RATE 1341.1 // Mbps -#define LEO_ONEWEB_SHANNON_LIMIT 1.06 // dB +// gateway uplink +#define LEO_ONEWEB_GATEWAY_FREQUENCY 28.5 // GHz +#define LEO_ONEWEB_GATEWAY_BANDWIDTH 0.25 // GHz +#define LEO_ONEWEB_GATEWAY_TX_ANTENNA_D 2.4 // m +#define LEO_ONEWEB_GATEWAY_EIRP 93.2 // dBm +#define LEO_ONEWEB_GATEWAY_MODCOD "256APSK 32/45" // - +#define LEO_ONEWEB_GATEWAY_ROLL_OFF_FACTOR 0.1 // - +#define LEO_ONEWEB_GATEWAY_SPECTRAL_EFF 5.1 // bps/Hz +#define LEO_ONEWEB_GATEWAY_PATH_DISTANCE 1504 // km +#define LEO_ONEWEB_GATEWAY_ELEVATION_ANGLE 55 // deg +#define LEO_ONEWEB_GATEWAY_FSPL 185.1 // dB +#define LEO_ONEWEB_GATEWAY_ATMOSPHERIC_LOSS 2.3 // dB +#define LEO_ONEWEB_GATEWAY_RX_ANTENNA_GAIN 37.8 // dBi +#define LEO_ONEWEB_GATEWAY_SYSTEM_TEMP 447.2 // K +#define LEO_ONEWEB_GATEWAY_G_T 11.3 // dB/K +#define LEO_ONEWEB_GATEWAY_RX_C_N0 32.5 // dB +#define LEO_ONEWEB_GATEWAY_RX_C_ACI 27 // dB +#define LEO_ONEWEB_GATEWAY_RX_C_ASI 27 // dB +#define LEO_ONEWEB_GATEWAY_RX_C_XPI 25 // dB +#define LEO_ONEWEB_GATEWAY_HPA_C_3IM 30 // dB +#define LEO_ONEWEB_GATEWAY_RX_EB_N0_I0 13.3 // dB +#define LEO_ONEWEB_GATEWAY_REQ_EB_N0 12.3 // dB +#define LEO_ONEWEB_GATEWAY_LINK_MARGIN 1.03 // dB +#define LEO_ONEWEB_GATEWAY_DATA_RATE 1341.1 // Mbps +#define LEO_ONEWEB_GATEWAY_SHANNON_LIMIT 1.06 // dB + +// user uplink +#define LEO_ONEWEB_USER_FREQUENCY 18.5 // GHz +#define LEO_ONEWEB_USER_BANDWIDTH 0.25 // GHz +#define LEO_ONEWEB_USER_EIRP 36.0 // dBm +#define LEO_ONEWEB_USER_MODCOD "16APSK28/45" // - +#define LEO_ONEWEB_USER_ROLL_OFF_FACTOR 0.1 // - +#define LEO_ONEWEB_USER_SPECTRAL_EFF 2.23 // bps/Hz +#define LEO_ONEWEB_USER_PATH_DISTANCE 2439 // km +#define LEO_ONEWEB_USER_ELEVATION_ANGLE 20 // deg +#define LEO_ONEWEB_USER_FSPL 185.5 // dB +#define LEO_ONEWEB_USER_ATMOSPHERIC_LOSS 2.0 // dB +#define LEO_ONEWEB_GATEWAY_RX_ANTENNA_D 1 // m +#define LEO_ONEWEB_USER_RX_ANTENNA_GAIN 43.5 // dBi +#define LEO_ONEWEB_USER_SYSTEM_TEMP 285.3 // K +#define LEO_ONEWEB_USER_RX_C_N0 9.6 // dB +#define LEO_ONEWEB_USER_RX_C_ASI 30 // dB +#define LEO_ONEWEB_USER_RX_C_XPI 25 // dB +#define LEO_ONEWEB_USER_HPA_C_3IM 20 // dB +#define LEO_ONEWEB_USER_RX_EB_N0_I0 5.5 // dB +#define LEO_ONEWEB_USER_REQ_EB_N0 4.6 // dB +#define LEO_ONEWEB_USER_LINK_MARGIN 0.85 // dB +#define LEO_ONEWEB_USER_DATA_RATE 558.7 // Mbps +#define LEO_ONEWEB_USER_SHANNON_LIMIT 1.49 // dB }; diff --git a/model/leo-propagation-loss-model.cc b/model/leo-propagation-loss-model.cc index e2106f3..3dd889b 100644 --- a/model/leo-propagation-loss-model.cc +++ b/model/leo-propagation-loss-model.cc @@ -81,10 +81,12 @@ LeoPropagationLossModel::DoCalcRxPower (double txPowerDbm, return 0.0; } - double rxc = -m_atmosphericLoss - m_freeSpacePathLoss; - NS_LOG_DEBUG ("attenuation coefficient= " << rxc << " dB"); + // txPowerDbm includes tx antenna gain and losses + // receiver loss and gain added at net device + // P_{RX} = P_{TX} + G_{TX} - L_{TX} - L_{FS} - L_M + G_{RX} - L_{RX} + double rxc = txPowerDbm - m_atmosphericLoss - m_freeSpacePathLoss - m_linkMargin; - return txPowerDbm + rxc; + return rxc; } int64_t diff --git a/model/leo-starlink-constants.h b/model/leo-starlink-constants.h index a170eb0..73c409a 100644 --- a/model/leo-starlink-constants.h +++ b/model/leo-starlink-constants.h @@ -21,30 +21,55 @@ 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 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_RX_ANTENNA_GAIN 40.9 // dBi -#define LEO_STARLINK_SYSTEM_TEMP 535.9 // K -#define LEO_STARLINK_G_T 13.6 // dB/K -#define LEO_STARLINK_RX_C_N0 32.4 // dB -#define LEO_STARLINK_RX_C_ACI 27 // dB -#define LEO_STARLINK_RX_C_ASI 27 // dB -#define LEO_STARLINK_RX_C_XPI 25 // dB -#define LEO_STARLINK_HPA_C_3IM 30 // dB -#define LEO_STARLINK_RX_EB_N0_I0 13.3 // dB -#define LEO_STARLINK_REQ_EB_N0 12.3 // dB -#define LEO_STARLINK_LINK_MARGIN 1.02 // dB -#define LEO_STARLINK_DATA_RATE 2682.1 // Mbps -#define LEO_STARLINK_SHANNON_LIMIT 1.06 // dB +// gateway uplink +#define LEO_STARLINK_GATEWAY_FREQUENCY 28.5 // GHz +#define LEO_STARLINK_GATEWAY_BANDWIDTH 0.5 // GHz +#define LEO_STARLINK_GATEWAY_TX_ANTENNA_D 3.5 // m +#define LEO_STARLINK_GATEWAY_EIRP 98.4 // dBm +#define LEO_STARLINK_GATEWAY_MODCOD "256APSK 3/4" // - +#define LEO_STARLINK_GATEWAY_ROLL_OFF_FACTOR 0.1 // - +#define LEO_STARLINK_GATEWAY_SPECTRAL_EFF 5.4 // bps/Hz +#define LEO_STARLINK_GATEWAY_PATH_DISTANCE 1684 // km +#define LEO_STARLINK_GATEWAY_ELEVATION_ANGLE 40 // deg +#define LEO_STARLINK_GATEWAY_FSPL 186.1 // dB +#define LEO_STARLINK_GATEWAY_ATMOSPHERIC_LOSS 2.9 // dB +#define LEO_STARLINK_GATEWAY_RX_ANTENNA_GAIN 40.9 // dBi +#define LEO_STARLINK_GATEWAY_SYSTEM_TEMP 535.9 // K +#define LEO_STARLINK_GATEWAY_G_T 13.6 // dB/K +#define LEO_STARLINK_GATEWAY_RX_C_N0 32.4 // dB +#define LEO_STARLINK_GATEWAY_RX_C_ACI 27 // dB +#define LEO_STARLINK_GATEWAY_RX_C_ASI 27 // dB +#define LEO_STARLINK_GATEWAY_RX_C_XPI 25 // dB +#define LEO_STARLINK_GATEWAY_HPA_C_3IM 30 // dB +#define LEO_STARLINK_GATEWAY_RX_EB_N0_I0 13.3 // dB +#define LEO_STARLINK_GATEWAY_REQ_EB_N0 12.3 // dB +#define LEO_STARLINK_GATEWAY_LINK_MARGIN 1.02 // dB +#define LEO_STARLINK_GATEWAY_DATA_RATE 2682.1 // Mbps +#define LEO_STARLINK_GATEWAY_SHANNON_LIMIT 1.06 // dB + +// user uplink +#define LEO_STARLINK_USER_FREQUENCY 13.5 // GHz +#define LEO_STARLINK_USER_BANDWIDTH 0.25 // GHz +#define LEO_STARLINK_USER_EIRP 66.7 // dBm +#define LEO_STARLINK_USER_MODCOD "16APSK3/4" // - +#define LEO_STARLINK_USER_ROLL_OFF_FACTOR 0.1 // - +#define LEO_STARLINK_USER_SPECTRAL_EFF 2.7 // bps/Hz +#define LEO_STARLINK_USER_PATH_DISTANCE 1684 // km +#define LEO_STARLINK_USER_ELEVATION_ANGLE 40 // deg +#define LEO_STARLINK_USER_FSPL 179.6 // dB +#define LEO_STARLINK_USER_ATMOSPHERIC_LOSS 0.53 // dB +#define LEO_STARLINK_GATEWAY_RX_ANTENNA_D 0.7 // m +#define LEO_STARLINK_USER_RX_ANTENNA_GAIN 37.7 // dBi +#define LEO_STARLINK_USER_SYSTEM_TEMP 362.9 // K +#define LEO_STARLINK_USER_RX_C_N0 12.0 // dB +#define LEO_STARLINK_USER_RX_C_ASI 25 // dB +#define LEO_STARLINK_USER_RX_C_XPI 22 // dB +#define LEO_STARLINK_USER_HPA_C_3IM 25 // dB +#define LEO_STARLINK_USER_RX_EB_N0_I0 6.7 // dB +#define LEO_STARLINK_USER_REQ_EB_N0 5.9 // dB +#define LEO_STARLINK_USER_LINK_MARGIN 0.82 // dB +#define LEO_STARLINK_USER_DATA_RATE 674.3 // Mbps +#define LEO_STARLINK_USER_SHANNON_LIMIT 1.46 // dB }; diff --git a/model/leo-telesat-constants.h b/model/leo-telesat-constants.h index f2f9709..5673978 100644 --- a/model/leo-telesat-constants.h +++ b/model/leo-telesat-constants.h @@ -21,30 +21,55 @@ 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 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 -#define LEO_TELESAT_PATH_DISTANCE 2439 // km -#define LEO_TELESAT_ELEVATION_ANGLE 20 // deg -#define LEO_TELESAT_FSPL 189.3 // dB -#define LEO_TELESAT_ATMOSPHERIC_LOSS 4.8 // dB -#define LEO_TELESAT_RX_ANTENNA_GAIN 31.8 // dBi -#define LEO_TELESAT_SYSTEM_TEMP 868.4 // K -#define LEO_TELESAT_G_T 2.4 // dB/K -#define LEO_TELESAT_RX_C_N0 25.6 // dB -#define LEO_TELESAT_RX_C_ACI 27 // dB -#define LEO_TELESAT_RX_C_ASI 23.5 // dB -#define LEO_TELESAT_RX_C_XPI 25 // dB -#define LEO_TELESAT_HPA_C_3IM 25 // dB -#define LEO_TELESAT_RX_EB_N0_I0 11.4 // dB -#define LEO_TELESAT_REQ_EB_N0 11.0 // dB -#define LEO_TELESAT_LINK_MARGIN 0.36 // dB -#define LEO_TELESAT_DATA_RATE 9857.1 // Mbps -#define LEO_TELESAT_SHANNON_LIMIT 1.09 // dB +// gateway uplink +#define LEO_TELESAT_GATEWAY_FREQUENCY 28.5 // GHz +#define LEO_TELESAT_GATEWAY_BANDWIDTH 2.1 // GHz +#define LEO_TELESAT_GATEWAY_TX_ANTENNA_D 3.5 // m +#define LEO_TELESAT_GATEWAY_EIRP 105.9 // dBm +#define LEO_TELESAT_GATEWAY_MODCOD "64APSK 3/4" // - +#define LEO_TELESAT_GATEWAY_ROLL_OFF_FACTOR 0.1 // - +#define LEO_TELESAT_GATEWAY_SPECTRAL_EFF 4.1 // bps/Hz +#define LEO_TELESAT_GATEWAY_PATH_DISTANCE 2439 // km +#define LEO_TELESAT_GATEWAY_ELEVATION_ANGLE 20 // deg +#define LEO_TELESAT_GATEWAY_FSPL 189.3 // dB +#define LEO_TELESAT_GATEWAY_ATMOSPHERIC_LOSS 4.8 // dB +#define LEO_TELESAT_GATEWAY_RX_ANTENNA_GAIN 31.8 // dBi +#define LEO_TELESAT_GATEWAY_SYSTEM_TEMP 868.4 // K +#define LEO_TELESAT_GATEWAY_G_T 2.4 // dB/K +#define LEO_TELESAT_GATEWAY_RX_C_N0 25.6 // dB +#define LEO_TELESAT_GATEWAY_RX_C_ACI 27 // dB +#define LEO_TELESAT_GATEWAY_RX_C_ASI 23.5 // dB +#define LEO_TELESAT_GATEWAY_RX_C_XPI 25 // dB +#define LEO_TELESAT_GATEWAY_HPA_C_3IM 25 // dB +#define LEO_TELESAT_GATEWAY_RX_EB_N0_I0 11.4 // dB +#define LEO_TELESAT_GATEWAY_REQ_EB_N0 11.0 // dB +#define LEO_TELESAT_GATEWAY_LINK_MARGIN 0.36 // dB +#define LEO_TELESAT_GATEWAY_DATA_RATE 9857.1 // Mbps +#define LEO_TELESAT_GATEWAY_SHANNON_LIMIT 1.09 // dB + +// user uplink +#define LEO_TELESAT_USER_FREQUENCY 13.5 // GHz +#define LEO_TELESAT_USER_BANDWIDTH 0.25 // GHz +#define LEO_TELESAT_USER_EIRP 64.6 // dBm +#define LEO_TELESAT_USER_MODCOD "16APSK2/3" // - +#define LEO_TELESAT_USER_ROLL_OFF_FACTOR 0.1 // - +#define LEO_TELESAT_USER_SPECTRAL_EFF 2.4 // bps/Hz +#define LEO_TELESAT_USER_PATH_DISTANCE 1504 // km +#define LEO_TELESAT_USER_ELEVATION_ANGLE 55 // deg +#define LEO_TELESAT_USER_FSPL 178.6 // dB +#define LEO_TELESAT_USER_ATMOSPHERIC_LOSS 0.41 // dB +#define LEO_TELESAT_GATEWAY_RX_ANTENNA_D 0.75 // m +#define LEO_TELESAT_USER_RX_ANTENNA_GAIN 38.3 // dBi +#define LEO_TELESAT_USER_SYSTEM_TEMP 350.1 // K +#define LEO_TELESAT_USER_RX_C_N0 10.5 // dB +#define LEO_TELESAT_USER_RX_C_ASI 25 // dB +#define LEO_TELESAT_USER_RX_C_XPI 20 // dB +#define LEO_TELESAT_USER_HPA_C_3IM 30 // dB +#define LEO_TELESAT_USER_RX_EB_N0_I0 5.9 // dB +#define LEO_TELESAT_USER_REQ_EB_N0 5.2 // dB +#define LEO_TELESAT_USER_LINK_MARGIN 0.76 // dB +#define LEO_TELESAT_USER_DATA_RATE 599.4 // Mbps +#define LEO_TELESAT_USER_SHANNON_LIMIT 1.49 // dB }; diff --git a/model/mock-channel.cc b/model/mock-channel.cc index 8a695c6..b8f32ff 100644 --- a/model/mock-channel.cc +++ b/model/mock-channel.cc @@ -156,7 +156,7 @@ MockChannel::GetPropagationLoss () const } void -MockChannel::SetPropagationLoss (PropagationLossModel model) +MockChannel::SetPropagationLoss (Ptr model) { m_propagationLoss = model; } diff --git a/model/mock-channel.h b/model/mock-channel.h index 674e3ca..a529234 100644 --- a/model/mock-channel.h +++ b/model/mock-channel.h @@ -73,7 +73,7 @@ public: virtual bool TransmitStart (Ptr p, uint32_t devId, Address dst, Time txTime) = 0; Ptr GetPropagationLoss () const; - void SetPropagationLoss (PropagationLossModel model); + void SetPropagationLoss (Ptr model); protected: TracedCallback, // Packet being transmitted diff --git a/model/mock-net-device.cc b/model/mock-net-device.cc index fb7def4..4e11ed0 100644 --- a/model/mock-net-device.cc +++ b/model/mock-net-device.cc @@ -414,12 +414,18 @@ MockNetDevice::SetReceiveErrorModel (Ptr em) m_receiveErrorModel = em; } +double +MockNetDevice::DoCalcRxPower (double rxPower) const +{ + return rxPower; +} + void MockNetDevice::Receive (Ptr packet, Ptr senderDevice, double rxPower) { - NS_LOG_FUNCTION (this << packet << senderDevice); + NS_LOG_FUNCTION (this << packet << senderDevice << rxPower); if (senderDevice == this) { @@ -428,6 +434,8 @@ MockNetDevice::Receive (Ptr packet, m_phyRxEndTrace (packet); + rxPower = DoCalcRxPower (rxPower); + if (rxPower < m_rxThreshold) { // Received power is below threshold diff --git a/model/mock-net-device.h b/model/mock-net-device.h index 35d25bb..37ca1e3 100644 --- a/model/mock-net-device.h +++ b/model/mock-net-device.h @@ -147,8 +147,10 @@ public: * arrived at the device. * * \param p Ptr to the received packet. + * \param senderDevice sender + * \param rxPower RX power excluding receiver gain and loss */ - void Receive (Ptr p, Ptr senderDevice); + void Receive (Ptr p, Ptr senderDevice, double rxPower); // The remaining methods are documented in ns3::NetDevice* @@ -206,6 +208,8 @@ protected: virtual void DoInitialize (void); virtual void NotifyNewAggregate (void); + virtual double DoCalcRxPower (double rxPower) const; + private: /**