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

How to implement mmWave in ns3

To implement the mmWave (millimetre wave) communication in ns3 has contains to simulate the mmWave module that were implemented by NYU wireless. This module extends ns3 to support high-frequency mmWave communications that contains features like 5G NR (New Radio) capabilities. Here we provide the detailed procedure on how to implement the mmWave in ns3:

Step-by-Step Implementation:

  1. Set Up ns3 Environment
    1. Download and Install ns3: Install the ns3 in the system.
    2. Download the mmWave Module: We need to install the mmWave module from the NYU Wireless GitHub repository and then clone the repository using the following command:

git clone https://github.com/nyuwireless-unipd/ns3-mmwave.git

  • Integrate mmWave with ns-3: Merge the mmWave module with your ns-3 installation by copying the mmwave directory into the src directory of your ns-3 installation.
  • Build ns3 with mmWave: Configure and build ns-3 with the mmWave module:

./waf configure –enable-examples –enable-tests

./waf build

2.      Create a New Simulation Script

Create a new C++ script for your simulation. For this example, we will create a basic mmWave network with one base station (gNB) and one user equipment (UE).

3.      Include Necessary Headers

Include the necessary ns-3 headers in your script.

#include “ns3/core-module.h”

#include “ns3/network-module.h”

#include “ns3/internet-module.h”

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

#include “ns3/applications-module.h”

#include “ns3/mobility-module.h”

#include “ns3/config-store-module.h”

#include “ns3/mmwave-helper.h”

#include “ns3/mmwave-point-to-point-epc-helper.h”

4.      Define the Network Topology

Set up the basic network topology, including nodes, devices, and links.

using namespace ns3;

NS_LOG_COMPONENT_DEFINE (“mmWaveExample”);

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

CommandLine cmd;

cmd.Parse (argc, argv);

// Create nodes

NodeContainer ueNodes;

ueNodes.Create (1);

NodeContainer gnbNodes;

gnbNodes.Create (1);

// Set up mmWave and EPC

Ptr<MmWaveHelper> mmwaveHelper = CreateObject<MmWaveHelper> ();

Ptr<PointToPointEpcHelper> epcHelper = CreateObject<MmWavePointToPointEpcHelper> ();

mmwaveHelper->SetEpcHelper (epcHelper);

Ptr<Node> pgw = epcHelper->GetPgwNode ();

// Create a remote host

NodeContainer remoteHostContainer;

remoteHostContainer.Create (1);

Ptr<Node> remoteHost = remoteHostContainer.Get (0);

InternetStackHelper internet;

internet.Install (remoteHostContainer);

// Create the Internet

PointToPointHelper p2ph;

p2ph.SetDeviceAttribute (“DataRate”, DataRateValue (DataRate (“1Gbps”)));

p2ph.SetChannelAttribute (“Delay”, TimeValue (MilliSeconds (10)));

NetDeviceContainer internetDevices = p2ph.Install (pgw, remoteHost);

Ipv4AddressHelper ipv4h;

ipv4h.SetBase (“1.0.0.0”, “255.0.0.0”);

Ipv4InterfaceContainer internetIpIfaces = ipv4h.Assign (internetDevices);

// Set up the IP for the remote host

Ipv4StaticRoutingHelper ipv4RoutingHelper;

Ptr<Ipv4StaticRouting> remoteHostStaticRouting = ipv4RoutingHelper.GetStaticRouting (remoteHost->GetObject<Ipv4> ());

remoteHostStaticRouting->AddNetworkRouteTo (Ipv4Address (“7.0.0.0”), Ipv4Mask (“255.0.0.0”), 1);

// Install mmWave Devices in gNB and UEs

NetDeviceContainer gnbNetDev = mmwaveHelper->InstallGnbDevice (gnbNodes);

NetDeviceContainer ueNetDev = mmwaveHelper->InstallUeDevice (ueNodes);

// Install the IP stack on the UEs

internet.Install (ueNodes);

Ipv4InterfaceContainer ueIpIface;

ueIpIface = epcHelper->AssignUeIpv4Address (NetDeviceContainer (ueNetDev));

// Attach the UEs to the gNB

mmwaveHelper->AttachToClosestEnb (ueNetDev, gnbNetDev);

// Install and start applications on UEs and remote host

uint16_t dlPort = 1234;

uint16_t ulPort = 2000;

ApplicationContainer clientApps;

ApplicationContainer serverApps;

// Create a PacketSinkApplication and install it on the UEs

PacketSinkHelper packetSinkHelper (“ns3::UdpSocketFactory”, InetSocketAddress (Ipv4Address::GetAny (), dlPort));

serverApps.Add (packetSinkHelper.Install (ueNodes.Get (0)));

// Create a UdpClientApplication and install it on the remote host

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

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

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

clientApps.Add (dlClient.Install (remoteHost));

// Install and start applications on UEs and remote host

serverApps.Start (Seconds (1.0));

clientApps.Start (Seconds (1.0));

// Set up mobility

MobilityHelper mobility;

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

mobility.Install (gnbNodes);

mobility.SetPositionAllocator (“ns3::GridPositionAllocator”,

“MinX”, DoubleValue (0.0),

“MinY”, DoubleValue (0.0),

“DeltaX”, DoubleValue (5.0),

“DeltaY”, DoubleValue (10.0),

“GridWidth”, UintegerValue (2),

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

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

mobility.Install (ueNodes);

// Enable pcap tracing

p2ph.EnablePcapAll (“mmwave-example”);

// Run simulation

Simulator::Stop (Seconds (10.0));

Simulator::Run ();

Simulator::Destroy ();

return 0;

}

Explanation

  • Network Topology: The script sets up a basic mmWave network with one gNB (base station) and one UE (user equipment).
  • mmWave and EPC Setup: The MmWaveHelper and MmWavePointToPointEpcHelper are used to set up the mmWave network with an EPC core network.
  • Internet Setup: A remote host is connected to the EPC’s PGW to simulate an external server.
  • IP Configuration: IP addresses are assigned to the devices, and static routing is set up for the remote host.
  • Applications: A UDP client is installed on the remote host to send data to the UE, and a PacketSink application is installed on the UE to receive the data.
  • Mobility: The gNB and UE are given fixed positions using the ConstantPositionMobilityModel.
  • PCAP Tracing: PCAP tracing is enabled to capture packets for analysis.
  1. Build and Run the Script

Save the script and build it using the ns-3 build system (waf).

./waf configure

./waf build

./waf –run mmwave-example

Extending the Example

Here, we provide to extend of this sample that contains the more complex scenarios, such as:

  • Multiple UEs and gNBs: Add more UEs and gNBs to simulate a larger network.
  • Dynamic Mobility Models: Use more advanced mobility models such as RandomWaypointMobilityModel to simulate movement.
  • Advanced Applications: Implement TCP traffic, video streaming, or other advanced applications to study performance.
  • Custom Channel Models: Implement custom channel models to simulate specific environmental conditions.

The given below is the sample setup of multiple UEs and gNBs:

NodeContainer ueNodes;

ueNodes.Create (10); // Create 10 UEs

NodeContainer gnbNodes;

gnbNodes.Create (2); // Create 2 gNBs

Continue with the rest of the script, ensuring to modify the attachment and application installation accordingly

In the whole, we discussed about how the mmWave (millimetre wave) communication will implement by NYU wireless communication and also it support high-frequency mmWave communications that contains features like 5G NR (New Radio) capabilities. We also provide the additional information regarding the mmwave.

We’ve work with mmWave in ns3, getting great implementation results and doing a comparison analysis to support high-frequency mmWave communications, along with an explanation.