A Discrete-Event Network Simulator
API
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
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 
48  Ptr<LteHelper> lteHelper = CreateObject<LteHelper> ();
49 
50  uint8_t bandwidth = 25;
51  double d1 = 0;
52 
53  // Create Nodes: eNodeB and UE
54  NodeContainer enbNodes;
55  NodeContainer ueNodes;
56  enbNodes.Create (1);
57  ueNodes.Create (1);
58  NodeContainer allNodes = NodeContainer ( enbNodes, ueNodes);
59 
60 /* the topology is the following:
61  *
62  * eNB1-------------------------UE
63  * d1
64  */
65 
66  // Install Mobility Model
67  Ptr<ListPositionAllocator> positionAlloc = CreateObject<ListPositionAllocator> ();
68  positionAlloc->Add (Vector (0.0, 0.0, 0.0)); // eNB1
69  positionAlloc->Add (Vector (d1, 0.0, 0.0)); // UE1
70 
71  MobilityHelper mobility;
72  mobility.SetMobilityModel ("ns3::ConstantPositionMobilityModel");
73  mobility.SetPositionAllocator (positionAlloc);
74  mobility.Install (allNodes);
75 
76  // Create Devices and install them in the Nodes (eNB and UE)
77  NetDeviceContainer enbDevs;
78  NetDeviceContainer ueDevs;
79  lteHelper->SetSchedulerType ("ns3::PfFfMacScheduler");
80 
81  lteHelper->SetEnbDeviceAttribute ("DlBandwidth", UintegerValue (bandwidth));
82  lteHelper->SetEnbDeviceAttribute ("UlBandwidth", UintegerValue (bandwidth));
83 
84  enbDevs = lteHelper->InstallEnbDevice (enbNodes);
85  ueDevs = lteHelper->InstallUeDevice (ueNodes);
86 
87  // Attach a UE to a eNB
88  lteHelper->Attach (ueDevs, enbDevs.Get (0));
89 
90  // Activate a data radio bearer
92  EpsBearer bearer (q);
93  lteHelper->ActivateDataRadioBearer (ueDevs, bearer);
94 
95  Simulator::Stop (Seconds (0.500));
96  Simulator::Run ();
97 
99  return 0;
100 }
Hold a bool native type.
Definition: boolean.h:38
NetDeviceContainer InstallEnbDevice(NodeContainer c)
create a set of eNB 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 until one of:
Definition: simulator.cc:157
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:709
void ActivateDataRadioBearer(NetDeviceContainer ueDevices, EpsBearer bearer)
Call ActivateDataRadioBearer (ueDevice, bearer) for each UE device in a given set.
Definition: lte-helper.cc:963
a 3d vector
Definition: vector.h:31
void SetSchedulerType(std::string type)
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.
Hold an unsigned integer type.
Definition: uinteger.h:46
holds a vector of ns3::NetDevice pointers
static void Destroy(void)
Every event scheduled by the Simulator::insertAtDestroy method is invoked.
Definition: simulator.cc:121
void SetDefault(std::string name, const AttributeValue &value)
Definition: config.cc:677
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)
If an event invokes this method, it will be the last event scheduled by the Simulator::run method bef...
Definition: simulator.cc:165
Time Seconds(double value)
Construct a Time in the indicated unit.
Definition: nstime.h:845
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...
Hold a floating point type.
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 LteEnbNetDevice to be created
Definition: lte-helper.cc:307