diff --git a/examples/leo-circular-orbit-tracing-example.cc b/examples/leo-circular-orbit-tracing-example.cc index 4ccb63e..28c1045 100644 --- a/examples/leo-circular-orbit-tracing-example.cc +++ b/examples/leo-circular-orbit-tracing-example.cc @@ -62,7 +62,7 @@ int main(int argc, char *argv[]) outfile << "Time,Satellite,x,y,z,Speed" << std::endl; - Simulator::Stop (Hours (24)); + Simulator::Stop (Hours (1)); Simulator::Run (); Simulator::Destroy (); } diff --git a/examples/leo-delay-tracing-example.cc b/examples/leo-delay-tracing-example.cc index 66cb3f9..7969fcc 100644 --- a/examples/leo-delay-tracing-example.cc +++ b/examples/leo-delay-tracing-example.cc @@ -33,12 +33,11 @@ public: int main (int argc, char *argv[]) { std::vector<Orbit> orbits = { - Orbit (1.150, 53.0, 32, 50), - Orbit (1.110, 53.8, 32, 50), - Orbit (1.130, 74.0, 8, 50), - Orbit (1.275, 81, 5, 75), - Orbit (1.325, 70, 6, 75), - + Orbit (1150, 53.0, 32, 50), + Orbit (1110, 53.8, 32, 50), + Orbit (1130, 74.0, 8, 50), + Orbit (1275, 81, 5, 75), + Orbit (1325, 70, 6, 75), }; NodeContainer satellites; for (Orbit orb: orbits) @@ -64,8 +63,7 @@ int main (int argc, char *argv[]) NetDeviceContainer islNet, utNet; IslHelper islCh; - islCh.SetDeviceAttribute ("DataRate", StringValue ("10Mbps")); - islCh.SetDeviceAttribute ("ReceiveErrorModel", StringValue ("ns3::BurstErrorModel")); + islCh.SetDeviceAttribute ("DataRate", StringValue ("1Gbps")); islCh.SetChannelAttribute ("PropagationDelay", StringValue ("ns3::ConstantSpeedPropagationDelayModel")); islCh.SetChannelAttribute ("PropagationLoss", StringValue ("ns3::IslPropagationLossModel")); islNet = islCh.Install (satellites); @@ -76,15 +74,15 @@ int main (int argc, char *argv[]) // Install internet stack on nodes AodvHelper aodv; - aodv.Set ("HelloInterval", TimeValue (Seconds (10))); + aodv.Set ("HelloInterval", TimeValue (Seconds (1))); aodv.Set ("TtlStart", UintegerValue (10)); aodv.Set ("TtlIncrement", UintegerValue (10)); - aodv.Set ("TtlThreshold", UintegerValue (1000)); + aodv.Set ("TtlThreshold", UintegerValue (100)); aodv.Set ("RreqRetries", UintegerValue (100)); - aodv.Set ("RreqRateLimit", UintegerValue (100)); - aodv.Set ("RerrRateLimit", UintegerValue (100)); - aodv.Set ("ActiveRouteTimeout", TimeValue (Seconds (10))); - aodv.Set ("NextHopWait", TimeValue (MilliSeconds (100))); + aodv.Set ("RreqRateLimit", UintegerValue (10)); + aodv.Set ("RerrRateLimit", UintegerValue (10)); + aodv.Set ("ActiveRouteTimeout", TimeValue (Minutes (1))); + aodv.Set ("NextHopWait", TimeValue (MilliSeconds (200))); aodv.Set ("NetDiameter", UintegerValue (1000)); aodv.Set ("PathDiscoveryTime", TimeValue (Seconds (1))); @@ -107,9 +105,10 @@ int main (int argc, char *argv[]) // install a client on one of the terminals ApplicationContainer clientApps; Address remote = stations.Get (1)->GetObject<Ipv4> ()->GetAddress (1, 0).GetLocal ();//utIp.GetAddress (1, 0); + std::cout << "REMOTE=" << Ipv4Address::ConvertFrom (remote); UdpClientHelper echoClient (remote, 9); echoClient.SetAttribute ("MaxPackets", UintegerValue (360)); - echoClient.SetAttribute ("Interval", TimeValue (Seconds (1.0))); + echoClient.SetAttribute ("Interval", TimeValue (Seconds (10.0))); echoClient.SetAttribute ("PacketSize", UintegerValue (1024)); clientApps.Add (echoClient.Install (stations.Get (3))); diff --git a/model/leo-propagation-loss-model.cc b/model/leo-propagation-loss-model.cc index 1b372b1..29761fe 100644 --- a/model/leo-propagation-loss-model.cc +++ b/model/leo-propagation-loss-model.cc @@ -23,13 +23,15 @@ LeoPropagationLossModel::GetTypeId (void) .AddConstructor<LeoPropagationLossModel> () .AddAttribute ("MaxDistance", "Cut-off distance for signal propagation", - DoubleValue (1000000.0), - MakeDoubleAccessor (&LeoPropagationLossModel::m_cutoffDistance), + DoubleValue (3000), + MakeDoubleAccessor (&LeoPropagationLossModel::SetCutoffDistance, + &LeoPropagationLossModel::GetCutoffDistance), MakeDoubleChecker<double> ()) .AddAttribute ("ElevationAngle", "Cut-off angle for signal propagation", DoubleValue (M_PI / 9), - MakeDoubleAccessor (&LeoPropagationLossModel::m_elevationAngle), + MakeDoubleAccessor (&LeoPropagationLossModel::SetElevationAngle, + &LeoPropagationLossModel::GetElevationAngle), MakeDoubleChecker<double> ()) .AddAttribute ("AtmosphericLoss", "Atmospheric loss due to attenuation in dB", @@ -71,21 +73,56 @@ LeoPropagationLossModel::GetAngle (Ptr<MobilityModel> a, Ptr<MobilityModel> b) return acos (prod / norm); } +void +LeoPropagationLossModel::SetElevationAngle (double angle) +{ + m_elevationAngle = angle * (M_PI/180.0); +} + +double +LeoPropagationLossModel::GetElevationAngle () const +{ + return m_elevationAngle * (180.0/M_PI); +} + +void +LeoPropagationLossModel::SetCutoffDistance (double d) +{ + m_cutoffDistance = d * 1000.0; +} + +double +LeoPropagationLossModel::GetCutoffDistance () const +{ + return m_cutoffDistance / 1000.0; +} + double LeoPropagationLossModel::DoCalcRxPower (double txPowerDbm, Ptr<MobilityModel> a, Ptr<MobilityModel> b) const { - if (a->GetDistanceFrom (b) > m_cutoffDistance || GetAngle (a, b) > m_elevationAngle / 2.0) + double distance = a->GetDistanceFrom (b); + double angle = GetAngle (a, b); + double rxc = txPowerDbm - m_atmosphericLoss - m_freeSpacePathLoss - m_linkMargin; + + NS_LOG_DEBUG ("LEO propagation: a=" << a->GetPosition () << " b=" << b->GetPosition () << " m_cutOff="<<m_cutoffDistance<<" m_angle="<<m_elevationAngle<<" dist=" << distance << "angle=" << angle << "rxc=" << rxc); + + if (distance > m_cutoffDistance) { + NS_LOG_DEBUG ("LEO DROP DISTANCE: " << distance); + return -1000.0; + } + + if (angle > m_elevationAngle / 2.0) + { + NS_LOG_DEBUG ("LEO DROP ANGLE: " << angle <<"; " << distance); return -1000.0; } // 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; - NS_LOG_DEBUG("rxc="<<rxc); return rxc; } diff --git a/model/leo-propagation-loss-model.h b/model/leo-propagation-loss-model.h index d1b8176..52eb96a 100644 --- a/model/leo-propagation-loss-model.h +++ b/model/leo-propagation-loss-model.h @@ -61,6 +61,12 @@ private: * can return zero */ virtual int64_t DoAssignStreams (int64_t stream); + + void SetElevationAngle (double angle); + double GetElevationAngle () const; + + void SetCutoffDistance (double d); + double GetCutoffDistance () const; }; } diff --git a/model/mock-channel.cc b/model/mock-channel.cc index baf1cd4..1256771 100644 --- a/model/mock-channel.cc +++ b/model/mock-channel.cc @@ -179,11 +179,6 @@ MockChannel::Deliver ( if (srcMob != 0 && dstMob != 0) { - // performance optimization - if (srcMob->GetDistanceFrom (dstMob) > 3.0e6) - { - return false; - } Ptr<PropagationLossModel> pLoss = GetPropagationLoss (); if (pLoss != 0) { diff --git a/utils/plot-satellites.gnuplot b/utils/plot-satellites.gnuplot index c36b468..cc35ed1 100644 --- a/utils/plot-satellites.gnuplot +++ b/utils/plot-satellites.gnuplot @@ -26,6 +26,6 @@ numsamples=ARG4 do for [j=0:numsamples-1] { splot [-pi:pi][-pi/2:pi/2] EARTH*cos(u)*cos(v), EARTH*sin(u)*cos(v), EARTH*sin(v), \ ground using 1:2:3 lt rgb "green", \ - sats using 3:4:5:2 every ::(j*numsats)::((j+1)*numsats) lt rgb "blue" + sats using 3:4:5:2 every ::(j*numsats)::((j+1)*numsats) }