Ns3 Projects for B.E/B.Tech M.E/M.Tech PhD Scholars.  Phone-Number:9790238391   E-mail: ns3simulation@gmail.com

How to Implement Satellite Constellations B5G in ns3

To implement the Satellite Constellations Beyond 5G (B5G) in ns3 has several steps. In B5G technologies needs to generate a network simulation that models the behaviour of satellites and their communication with ground stations and user equipment (UE).

The given below is the detailed procedure on how to implement the B5G satellite constellation in ns3.

Step-by-Step Implementation:

Step 1: Set up Your ns3 Environment

Make sure ns3 is installed in the system.

Step 2: Create a New Simulation Script

Create a new simulation script in the scratch directory of your ns-3 installation. For example, create a file named b5g_satellite_constellation.cc.

Step 3: Include Necessary Headers

Include the required ns3 headers at the beginning of your script. Here’s an example:

#include “ns3/core-module.h”

#include “ns3/network-module.h”

#include “ns3/internet-module.h”

#include “ns3/mobility-module.h”

#include “ns3/point-to-point-module.h”

#include “ns3/applications-module.h”

#include “ns3/ipv4-global-routing-helper.h”

#include “ns3/antenna-module.h”

#include “ns3/propagation-module.h”

#include “ns3/satellite-module.h”

#include “ns3/gnb-module.h”

using namespace ns3;

Step 4: Define Command-Line Arguments for Parameterization

Use the CommandLine class to define parameters that can be set through the command line.

int main(int argc, char *argv[])

{

uint32_t numUeNodes = 10;

uint32_t numSatellites = 6;

double simTime = 20.0;

double satelliteAltitude = 600.0; // Altitude in km

CommandLine cmd;

cmd.AddValue(“numUeNodes”, “Number of UE nodes”, numUeNodes);

cmd.AddValue(“numSatellites”, “Number of satellites”, numSatellites);

cmd.AddValue(“simTime”, “Simulation time (seconds)”, simTime);

cmd.AddValue(“satelliteAltitude”, “Satellite altitude (km)”, satelliteAltitude);

cmd.Parse(argc, argv);

NodeContainer ueNodes;

ueNodes.Create(numUeNodes);

NodeContainer satelliteNodes;

satelliteNodes.Create(numSatellites);

NodeContainer gnbNodes;

gnbNodes.Create(1);

// Configure mobility for UE nodes

MobilityHelper ueMobility;

ueMobility.SetPositionAllocator(“ns3::UniformDiscPositionAllocator”,

“X”, DoubleValue(0.0),

“Y”, DoubleValue(0.0),

“rho”, DoubleValue(1000.0));

ueMobility.SetMobilityModel(“ns3::ConstantPositionMobilityModel”);

ueMobility.Install(ueNodes);

// Configure mobility for satellite nodes

MobilityHelper satelliteMobility;

Ptr<ListPositionAllocator> positionAlloc = CreateObject<ListPositionAllocator>();

for (uint32_t i = 0; i < numSatellites; ++i)

{

double angle = i * 360.0 / numSatellites;

double x = 1000.0 * cos(angle * M_PI / 180.0);

double y = 1000.0 * sin(angle * M_PI / 180.0);

positionAlloc->Add(Vector(x, y, satelliteAltitude * 1000)); // Convert km to meters

}

satelliteMobility.SetPositionAllocator(positionAlloc);

satelliteMobility.SetMobilityModel(“ns3::ConstantPositionMobilityModel”);

satelliteMobility.Install(satelliteNodes);

// Configure mobility for gNB node

MobilityHelper gnbMobility;

gnbMobility.SetPositionAllocator(“ns3::GridPositionAllocator”,

“MinX”, DoubleValue(0.0),

“MinY”, DoubleValue(0.0),

“DeltaX”, DoubleValue(0.0),

“DeltaY”, DoubleValue(0.0),

“GridWidth”, UintegerValue(1),

“LayoutType”, StringValue(“RowFirst”));

gnbMobility.SetMobilityModel(“ns3::ConstantPositionMobilityModel”);

gnbMobility.Install(gnbNodes);

// Install 5G Devices to the nodes

NetDeviceContainer gnbDevs;

NetDeviceContainer ueDevs;

NetDeviceContainer satelliteDevs;

GnbHelper gnbHelper;

gnbHelper.SetAttribute(“PathlossModel”, StringValue(“ns3::FriisPropagationLossModel”));

gnbDevs = gnbHelper.InstallGnbDevice(gnbNodes);

ueDevs = gnbHelper.InstallUeDevice(ueNodes);

satelliteDevs = gnbHelper.InstallUeDevice(satelliteNodes);

// Attach UEs to gNB

gnbHelper.Attach(ueDevs, gnbDevs.Get(0));

gnbHelper.Attach(satelliteDevs, gnbDevs.Get(0));

// Install the IP stack on the UEs

InternetStackHelper internet;

internet.Install(ueNodes);

internet.Install(satelliteNodes);

Ipv4AddressHelper ipv4;

ipv4.SetBase(“7.0.0.0”, “255.0.0.0”);

Ipv4InterfaceContainer ueIpIface;

ueIpIface = ipv4.Assign(ueDevs);

Ipv4InterfaceContainer satelliteIpIface;

satelliteIpIface = ipv4.Assign(satelliteDevs);

// Set the default gateway for the UEs and Satellites

Ptr<Node> ueNode = ueNodes.Get(0);

Ptr<Ipv4StaticRouting>ueStaticRouting=Ipv4RoutingHelper::GetRouting<Ipv4StaticRouting>(ueNode->GetObject<Ipv4>()->GetRoutingProtocol());

ueStaticRouting->SetDefaultRoute(Ipv4Address(“7.0.0.1”), 1);

Ptr<Node> satelliteNode = satelliteNodes.Get(0);

Ptr<Ipv4StaticRouting>satelliteStaticRouting=Ipv4RoutingHelper::GetRouting<Ipv4StaticRouting>(satelliteNode->GetObject<Ipv4>()->GetRoutingProtocol());

satelliteStaticRouting->SetDefaultRoute(Ipv4Address(“7.0.0.1”), 1);

// Install and start applications on UEs and remote host

uint16_t dlPort = 1234;

uint16_t ulPort = 2000;

ApplicationContainer clientApps;

ApplicationContainer serverApps;

// UDP downlink flow

UdpClientHelper dlClient(ueIpIface.GetAddress(0), dlPort);

dlClient.SetAttribute(“Interval”, TimeValue(MilliSeconds(10)));

dlClient.SetAttribute(“MaxPackets”, UintegerValue(1000000));

clientApps.Add(dlClient.Install(ueNodes.Get(0)));

UdpServerHelper dlServer(dlPort);

serverApps.Add(dlServer.Install(gnbNodes.Get(0)));

// UDP uplink flow

UdpClientHelperulClient(gnbNodes.Get(0)->GetObject<Ipv4>()->GetAddress(1, 0).GetLocal(), ulPort);

ulClient.SetAttribute(“Interval”, TimeValue(MilliSeconds(10)));

ulClient.SetAttribute(“MaxPackets”, UintegerValue(1000000));

clientApps.Add(ulClient.Install(ueNodes.Get(0)));

UdpServerHelper ulServer(ulPort);

serverApps.Add(ulServer.Install(gnbNodes.Get(0)));

serverApps.Start(Seconds(1.0));

clientApps.Start(Seconds(1.0));

Simulator::Stop(Seconds(simTime));

Simulator::Run();

Simulator::Destroy();

return 0;

}

Step 5: Compile and Run Your Simulation

Compile your simulation script using waf:

./waf configure

./waf build

./waf –run scratch/b5g_satellite_constellation

Step 6: Analyse the Output

Analyse the log output to make sure that the satellite constellation is being employed and that the communication quality is proper for a B5G network. We can use numerous tracing and logging mechanisms offered by ns3.

In conclusion we all know that to simulate and compile Satellite Constellations Beyond 5G in ns3 simulation tool and we offer and supports implementation on Satellite Constellations Beyond 5G  network.