A Discrete-Event Network Simulator
API
lena-uplink-power-control.cc
Go to the documentation of this file.
1 /* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
2 /*
3  * Copyright (c) 2014 Piotr Gawlowicz
4  *
5  * This program is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License version 2 as
7  * published by the Free Software Foundation;
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program; if not, write to the Free Software
16  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17  *
18  * Author: Piotr Gawlowicz <gawlowicz.p@gmail.com>
19  *
20  */
21 
22 #include "ns3/core-module.h"
23 #include "ns3/network-module.h"
24 #include "ns3/mobility-module.h"
25 #include "ns3/lte-module.h"
26 #include "ns3/config-store.h"
27 #include <ns3/buildings-helper.h>
28 
29 using namespace ns3;
30 
31 /*
32  * This example show how to configure and how Uplink Power Control works.
33  */
34 
35 int main (int argc, char *argv[])
36 {
37  Config::SetDefault ("ns3::LteHelper::UseIdealRrc", BooleanValue (false));
38 
39  double eNbTxPower = 30;
40  Config::SetDefault ("ns3::LteEnbPhy::TxPower", DoubleValue (eNbTxPower));
41  Config::SetDefault ("ns3::LteUePhy::TxPower", DoubleValue (10.0));
42  Config::SetDefault ("ns3::LteUePhy::EnableUplinkPowerControl", BooleanValue (true));
43 
44  Config::SetDefault ("ns3::LteUePowerControl::ClosedLoop", BooleanValue (true));
45  Config::SetDefault ("ns3::LteUePowerControl::AccumulationEnabled", BooleanValue (true));
46  Config::SetDefault ("ns3::LteUePowerControl::Alpha", DoubleValue (1.0));
47 
49  cmd.Parse (argc, argv);
50 
51  Ptr<LteHelper> lteHelper = CreateObject<LteHelper> ();
52 
53  uint8_t bandwidth = 25;
54  double d1 = 0;
55 
56  // Create Nodes: eNodeB and UE
57  NodeContainer enbNodes;
58  NodeContainer ueNodes;
59  enbNodes.Create (1);
60  ueNodes.Create (1);
61  NodeContainer allNodes = NodeContainer ( enbNodes, ueNodes);
62 
63 /* the topology is the following:
64  *
65  * eNB1-------------------------UE
66  * d1
67  */
68 
69  // Install Mobility Model
70  Ptr<ListPositionAllocator> positionAlloc = CreateObject<ListPositionAllocator> ();
71  positionAlloc->Add (Vector (0.0, 0.0, 0.0)); // eNB1
72  positionAlloc->Add (Vector (d1, 0.0, 0.0)); // UE1
73 
75  mobility.SetMobilityModel ("ns3::ConstantPositionMobilityModel");
76  mobility.SetPositionAllocator (positionAlloc);
77  mobility.Install (allNodes);
78 
79  // Create Devices and install them in the Nodes (eNB and UE)
80  NetDeviceContainer enbDevs;
81  NetDeviceContainer ueDevs;
82  lteHelper->SetSchedulerType ("ns3::PfFfMacScheduler");
83 
84  lteHelper->SetEnbDeviceAttribute ("DlBandwidth", UintegerValue (bandwidth));
85  lteHelper->SetEnbDeviceAttribute ("UlBandwidth", UintegerValue (bandwidth));
86 
87  enbDevs = lteHelper->InstallEnbDevice (enbNodes);
88  ueDevs = lteHelper->InstallUeDevice (ueNodes);
89 
90  // Attach a UE to a eNB
91  lteHelper->Attach (ueDevs, enbDevs.Get (0));
92 
93  // Activate a data radio bearer
95  EpsBearer bearer (q);
96  lteHelper->ActivateDataRadioBearer (ueDevs, bearer);
97 
98  Simulator::Stop (Seconds (0.500));
99  Simulator::Run ();
100 
102  return 0;
103 }
AttributeValue implementation for Boolean.
Definition: boolean.h:34
NetDeviceContainer InstallEnbDevice(NodeContainer c)
Create a set of eNodeB devices.
Definition: lte-helper.cc:382
Ptr< NetDevice > Get(uint32_t i) const
Get the Ptr stored in this container at a given index.
static void Run(void)
Run the simulation.
Definition: simulator.cc:201
void Attach(NetDeviceContainer ueDevices)
Enables automatic attachment of a set of UE devices to a suitable cell using Idle mode initial cell s...
Definition: lte-helper.cc:716
void ActivateDataRadioBearer(NetDeviceContainer ueDevices, EpsBearer bearer)
Activate a Data Radio Bearer on a given UE devices (for LTE-only simulation).
Definition: lte-helper.cc:1046
tuple cmd
Definition: second.py:35
void SetSchedulerType(std::string type)
Set the type of scheduler to be used by eNodeB devices.
Definition: lte-helper.cc:225
This class contains the specification of EPS Bearers.
Definition: eps-bearer.h:71
void Install(Ptr< Node > node) const
"Layout" a single node according to the current position allocator type.
tuple mobility
Definition: third.py:101
Hold an unsigned integer type.
Definition: uinteger.h:44
holds a vector of ns3::NetDevice pointers
Parse command-line arguments.
Definition: command-line.h:205
static void Destroy(void)
Execute the events scheduled with ScheduleDestroy().
Definition: simulator.cc:165
Every class exported by the ns3 library is enclosed in the ns3 namespace.
keep track of a set of node pointers.
void SetMobilityModel(std::string type, std::string n1="", const AttributeValue &v1=EmptyAttributeValue(), std::string n2="", const AttributeValue &v2=EmptyAttributeValue(), std::string n3="", const AttributeValue &v3=EmptyAttributeValue(), std::string n4="", const AttributeValue &v4=EmptyAttributeValue(), std::string n5="", const AttributeValue &v5=EmptyAttributeValue(), std::string n6="", const AttributeValue &v6=EmptyAttributeValue(), std::string n7="", const AttributeValue &v7=EmptyAttributeValue(), std::string n8="", const AttributeValue &v8=EmptyAttributeValue(), std::string n9="", const AttributeValue &v9=EmptyAttributeValue())
NetDeviceContainer InstallUeDevice(NodeContainer c)
Create a set of UE devices.
Definition: lte-helper.cc:397
Helper class used to assign positions and mobility models to nodes.
static void Stop(void)
Tell the Simulator the calling event should be the last one executed.
Definition: simulator.cc:209
Time Seconds(double value)
Construct a Time in the indicated unit.
Definition: nstime.h:895
void SetDefault(std::string name, const AttributeValue &value)
Definition: config.cc:774
void Add(Vector v)
Add a position to the list of positions.
void Parse(int argc, char *argv[])
Parse the program arguments.
void Create(uint32_t n)
Create n nodes and append pointers to them to the end of this NodeContainer.
void SetPositionAllocator(Ptr< PositionAllocator > allocator)
Set the position allocator which will be used to allocate the initial position of every node initiali...
This class can be used to hold variables of floating point type such as 'double' or 'float'...
Definition: double.h:41
Qci
QoS Class Indicator.
Definition: eps-bearer.h:77
void SetEnbDeviceAttribute(std::string n, const AttributeValue &v)
Set an attribute for the eNodeB devices (LteEnbNetDevice) to be created.
Definition: lte-helper.cc:307