run check-style on src/lte/

This commit is contained in:
Nicola Baldo
2011-06-17 17:41:40 +02:00
parent 705c30aec9
commit 8cfced2f89
24 changed files with 486 additions and 490 deletions

View File

@@ -38,19 +38,19 @@ int main (int argc, char *argv[])
double radius = 50.0;
uint32_t numUes = 1;
CommandLine cmd;
cmd.AddValue ("enbDist", "distance between the two eNBs", enbDist);
cmd.AddValue ("radius", "the radius of the disc where UEs are placed around an eNB", radius);
cmd.AddValue ("numUes", "how many UEs are attached to each eNB", numUes);
cmd.Parse (argc, argv);
ConfigStore inputConfig;
inputConfig.ConfigureDefaults ();
// parse again so you can override default values from the command line
cmd.Parse (argc, argv);
// determine the string tag that identifies this simulation run
// this tag is then appended to all filenames
@@ -58,13 +58,13 @@ int main (int argc, char *argv[])
GlobalValue::GetValueByName ("RngRun", runValue);
std::ostringstream tag;
tag << "_enbDist" << std::setw(3) << std::setfill ('0') << std::fixed << std::setprecision (0) << enbDist
<< "_radius" << std::setw(3) << std::setfill ('0') << std::fixed << std::setprecision (0) << radius
<< "_numUes" << std::setw(3) << std::setfill('0') << numUes
<< "_rngRun" << std::setw(3) << std::setfill('0') << runValue.Get () ;
tag << "_enbDist" << std::setw (3) << std::setfill ('0') << std::fixed << std::setprecision (0) << enbDist
<< "_radius" << std::setw (3) << std::setfill ('0') << std::fixed << std::setprecision (0) << radius
<< "_numUes" << std::setw (3) << std::setfill ('0') << numUes
<< "_rngRun" << std::setw (3) << std::setfill ('0') << runValue.Get () ;
Ptr<LenaHelper> lena = CreateObject<LenaHelper> ();
// Create Nodes: eNodeB and UE
NodeContainer enbNodes;
NodeContainer ueNodes1, ueNodes2;
@@ -72,7 +72,7 @@ int main (int argc, char *argv[])
ueNodes1.Create (numUes);
ueNodes2.Create (numUes);
// Position of eNBs
// Position of eNBs
Ptr<ListPositionAllocator> positionAlloc = CreateObject<ListPositionAllocator> ();
positionAlloc->Add (Vector (0.0, 0.0, 0.0));
positionAlloc->Add (Vector (enbDist, 0.0, 0.0));
@@ -98,8 +98,8 @@ int main (int argc, char *argv[])
"rho", DoubleValue (radius));
ue2mobility.SetMobilityModel ("ns3::ConstantPositionMobilityModel");
ue2mobility.Install (ueNodes2);
// Create Devices and install them in the Nodes (eNB and UE)
NetDeviceContainer enbDevs;
@@ -121,7 +121,7 @@ int main (int argc, char *argv[])
Simulator::Stop (Seconds (10));
// Insert RLC Performance Calculator
// Insert RLC Performance Calculator
std::string dlOutFname = "DlRlcStats";
dlOutFname.append (tag.str ());
std::string ulOutFname = "UlRlcStats";

View File

@@ -40,18 +40,18 @@ int main (int argc, char *argv[])
ConfigStore inputConfig;
inputConfig.ConfigureDefaults ();
// parse again so you can override default values from the command line
cmd.Parse (argc, argv);
Ptr<LenaHelper> lena = CreateObject<LenaHelper> ();
//lena->EnableLogComponents ();
// LogComponentEnable ("LtePhy", LOG_LEVEL_ALL);
LogComponentEnable ("LteEnbPhy", LOG_LEVEL_ALL);
LogComponentEnable ("LteEnbPhy", LOG_LEVEL_ALL);
// LogComponentEnable ("LteUePhy", LOG_LEVEL_ALL);
LogComponentEnable ("PfFfMacScheduler", LOG_LEVEL_ALL);
LogComponentEnable ("PfFfMacScheduler", LOG_LEVEL_ALL);
// Create Nodes: eNodeB and UE
NodeContainer enbNodes;

View File

@@ -37,7 +37,7 @@ int main (int argc, char *argv[])
ConfigStore inputConfig;
inputConfig.ConfigureDefaults ();
// parse again so you can override default values from the command line
cmd.Parse (argc, argv);
@@ -79,9 +79,9 @@ int main (int argc, char *argv[])
lena->EnableRlcTraces ();
double distance_temp [] = {10000,10000,10000}; //{10000, 10000, 10000};
double distance_temp [] = { 10000,10000,10000}; //{10000, 10000, 10000};
std::vector<double> userDistance;
userDistance.assign(distance_temp, distance_temp+3);
userDistance.assign (distance_temp, distance_temp + 3);
for (int i = 0; i < 3; i++)
{
Ptr<ConstantPositionMobilityModel> mm = ueNodes.Get (i)->GetObject<ConstantPositionMobilityModel> ();

View File

@@ -45,13 +45,13 @@ int main (int argc, char *argv[])
cmd.AddValue ("nUe", "Number of UEs", nUe);
cmd.AddValue ("radius", "the radius of the disc where UEs are placed around an eNB", radius);
cmd.Parse (argc, argv);
ConfigStore inputConfig;
inputConfig.ConfigureDefaults ();
// parse again so you can override default values from the command line
cmd.Parse (argc, argv);
// determine the string tag that identifies this simulation run
// this tag is then appended to all filenames
@@ -66,7 +66,7 @@ int main (int argc, char *argv[])
*/
Ptr<LenaHelper> lena = CreateObject<LenaHelper> ();
lena->EnableLogComponents ();
// Create Nodes: eNodeB and UE
NodeContainer enbNodes;
vector<NodeContainer> ueNodes;
@@ -76,15 +76,15 @@ int main (int argc, char *argv[])
{
NodeContainer ueNode;
ueNode.Create (nUe);
ueNodes.push_back(ueNode);
ueNodes.push_back (ueNode);
}
// Position of eNBs
// Position of eNBs
Ptr<ListPositionAllocator> positionAlloc = CreateObject<ListPositionAllocator> ();
for (uint32_t i = 0; i < nEnb; i++)
{
positionAlloc->Add (Vector (enbDist*i, enbDist*i, 0.0));
}
{
positionAlloc->Add (Vector (enbDist * i, enbDist * i, 0.0));
}
MobilityHelper enbMobility;
enbMobility.SetMobilityModel ("ns3::ConstantPositionMobilityModel");
@@ -97,9 +97,9 @@ int main (int argc, char *argv[])
{
MobilityHelper ueMob;
ueMob.SetPositionAllocator ("ns3::UniformDiscPositionAllocator",
"X", DoubleValue (enbDist*i),
"Y", DoubleValue (enbDist*i),
"rho", DoubleValue (radius));
"X", DoubleValue (enbDist * i),
"Y", DoubleValue (enbDist * i),
"rho", DoubleValue (radius));
ueMob.SetMobilityModel ("ns3::ConstantPositionMobilityModel");
ueMobility.push_back (ueMob);
ueMobility[i].Install (ueNodes[i]);

View File

@@ -91,16 +91,16 @@ TypeId LenaHelper::GetTypeId (void)
.SetParent<Object> ()
.AddConstructor<LenaHelper> ()
.AddAttribute ("Scheduler",
"The type of scheduler to be used for eNBs",
"The type of scheduler to be used for eNBs",
StringValue ("ns3::PfFfMacScheduler"),
MakeStringAccessor (&LenaHelper::SetSchedulerType),
MakeStringAccessor (&LenaHelper::SetSchedulerType),
MakeStringChecker ())
.AddAttribute ("PropagationModel",
"The type of propagation model to be used",
"The type of propagation model to be used",
StringValue ("ns3::FriisSpectrumPropagationLossModel"),
MakeStringAccessor (&LenaHelper::SetPropagationModelType),
MakeStringAccessor (&LenaHelper::SetPropagationModelType),
MakeStringChecker ())
;
;
return tid;
}
@@ -186,7 +186,7 @@ LenaHelper::InstallSingleEnbDevice (Ptr<Node> n)
{
Ptr<LteSpectrumPhy> dlPhy = CreateObject<LteSpectrumPhy> ();
Ptr<LteSpectrumPhy> ulPhy = CreateObject<LteSpectrumPhy> ();
Ptr<LteEnbPhy> phy = CreateObject<LteEnbPhy> (dlPhy, ulPhy);
Ptr<LteCqiSinrChunkProcessor> p = Create<LteCqiSinrChunkProcessor> (phy->GetObject<LtePhy> ());
@@ -203,7 +203,7 @@ LenaHelper::InstallSingleEnbDevice (Ptr<Node> n)
m_uplinkChannel->AddRx (ulPhy);
Ptr<LteEnbMac> mac = CreateObject<LteEnbMac> ();
Ptr<FfMacScheduler> sched = m_schedulerFactory.Create<FfMacScheduler> ();
Ptr<FfMacScheduler> sched = m_schedulerFactory.Create<FfMacScheduler> ();
Ptr<LteEnbRrc> rrc = CreateObject<LteEnbRrc> ();
@@ -253,7 +253,7 @@ LenaHelper::InstallSingleUeDevice (Ptr<Node> n)
ulPhy->SetMobility (mm);
m_downlinkChannel->AddRx (dlPhy);
Ptr<LteUeMac> mac = CreateObject<LteUeMac> ();
Ptr<LteUeRrc> rrc = CreateObject<LteUeRrc> ();
@@ -381,14 +381,14 @@ DlSchedulingCallback (Ptr<MacStatsCalculator> mac, std::string path,
uint32_t frameNo, uint32_t subframeNo, uint16_t rnti,
uint8_t mcsTb1, uint16_t sizeTb1, uint8_t mcsTb2, uint16_t sizeTb2)
{
mac->DlScheduling(frameNo, subframeNo, rnti, mcsTb1, sizeTb1, mcsTb2, sizeTb2);
mac->DlScheduling (frameNo, subframeNo, rnti, mcsTb1, sizeTb1, mcsTb2, sizeTb2);
}
void
LenaHelper::EnableDlMacTraces (void)
{
Config::Connect("/NodeList/0/DeviceList/0/LteEnbMac/DlScheduling",
MakeBoundCallback(&DlSchedulingCallback, macStats));
Config::Connect ("/NodeList/0/DeviceList/0/LteEnbMac/DlScheduling",
MakeBoundCallback (&DlSchedulingCallback, macStats));
}
void
@@ -396,14 +396,14 @@ UlSchedulingCallback (Ptr<MacStatsCalculator> mac, std::string path,
uint32_t frameNo, uint32_t subframeNo, uint16_t rnti,
uint8_t mcs, uint16_t size)
{
mac->UlScheduling(frameNo, subframeNo, rnti, mcs, size);
mac->UlScheduling (frameNo, subframeNo, rnti, mcs, size);
}
void
LenaHelper::EnableUlMacTraces (void)
{
Config::Connect("/NodeList/0/DeviceList/0/LteEnbMac/UlScheduling",
MakeBoundCallback(&UlSchedulingCallback, macStats));
Config::Connect ("/NodeList/0/DeviceList/0/LteEnbMac/UlScheduling",
MakeBoundCallback (&UlSchedulingCallback, macStats));
}
void
@@ -421,13 +421,13 @@ FindImsiFromEnbRlcPath (std::string path)
// /NodeList/#NodeId/DeviceList/#DeviceId/LteEnbRrc/UeMap/#C-RNTI/RadioBearerMap/#LCID/LteRlc/RxPDU
// We retrieve the UeInfo accociated to the C-RNTI and perform the IMSI lookup
std::string ueMapPath = path.substr (0, path.find("/RadioBearerMap"));
std::string ueMapPath = path.substr (0, path.find ("/RadioBearerMap"));
Config::MatchContainer match = Config::LookupMatches (ueMapPath);
if (match.GetN () != 0)
{
Ptr<Object> ueInfo = match.Get(0);
return ueInfo->GetObject<UeInfo> ()->GetImsi ();
Ptr<Object> ueInfo = match.Get (0);
return ueInfo->GetObject<UeInfo> ()->GetImsi ();
}
else
{
@@ -443,13 +443,13 @@ FindImsiFromUeRlc (std::string path)
// /NodeList/#NodeId/DeviceList/#DeviceId/LteUeRrc/RlcMap/#LCID/RxPDU
// We retrieve the LteUeNetDevice path
std::string lteUeNetDevicePath = path.substr (0, path.find("/LteUeRrc"));
std::string lteUeNetDevicePath = path.substr (0, path.find ("/LteUeRrc"));
Config::MatchContainer match = Config::LookupMatches (lteUeNetDevicePath);
if (match.GetN () != 0)
{
Ptr<Object> ueNetDevice = match.Get(0);
return ueNetDevice->GetObject<LteUeNetDevice> ()->GetImsi ();
Ptr<Object> ueNetDevice = match.Get (0);
return ueNetDevice->GetObject<LteUeNetDevice> ()->GetImsi ();
}
else
{
@@ -461,7 +461,7 @@ FindImsiFromUeRlc (std::string path)
void
DlTxPduCallback (Ptr<RlcStatsCalculator> rlcStats, std::string path,
uint16_t rnti, uint8_t lcid, uint32_t packetSize)
uint16_t rnti, uint8_t lcid, uint32_t packetSize)
{
uint64_t imsi = FindImsiFromEnbRlcPath (path);
rlcStats->DlTxPdu (imsi, rnti, lcid, packetSize);
@@ -469,7 +469,7 @@ DlTxPduCallback (Ptr<RlcStatsCalculator> rlcStats, std::string path,
void
DlRxPduCallback (Ptr<RlcStatsCalculator> rlcStats, std::string path,
uint16_t rnti, uint8_t lcid, uint32_t packetSize, uint64_t delay)
uint16_t rnti, uint8_t lcid, uint32_t packetSize, uint64_t delay)
{
uint64_t imsi = FindImsiFromUeRlc (path);
rlcStats->DlRxPdu (imsi, rnti, lcid, packetSize, delay);
@@ -479,22 +479,22 @@ void
LenaHelper::EnableDlRlcTraces (void)
{
Config::Connect ("/NodeList/*/DeviceList/*/LteEnbRrc/UeMap/*/RadioBearerMap/*/LteRlc/TxPDU",
MakeBoundCallback(&DlTxPduCallback, rlcStats));
MakeBoundCallback (&DlTxPduCallback, rlcStats));
Config::Connect ("/NodeList/*/DeviceList/*/LteUeRrc/RlcMap/*/RxPDU",
MakeBoundCallback(&DlRxPduCallback, rlcStats));
MakeBoundCallback (&DlRxPduCallback, rlcStats));
}
void
UlTxPduCallback(Ptr<RlcStatsCalculator> rlcStats, std::string path,
uint16_t rnti, uint8_t lcid, uint32_t packetSize)
UlTxPduCallback (Ptr<RlcStatsCalculator> rlcStats, std::string path,
uint16_t rnti, uint8_t lcid, uint32_t packetSize)
{
uint64_t imsi = FindImsiFromUeRlc (path);
rlcStats->UlTxPdu (imsi, rnti, lcid, packetSize);
}
void
UlRxPduCallback(Ptr<RlcStatsCalculator> rlcStats, std::string path,
uint16_t rnti, uint8_t lcid, uint32_t packetSize, uint64_t delay)
UlRxPduCallback (Ptr<RlcStatsCalculator> rlcStats, std::string path,
uint16_t rnti, uint8_t lcid, uint32_t packetSize, uint64_t delay)
{
uint64_t imsi = FindImsiFromEnbRlcPath (path);
rlcStats->UlRxPdu (imsi, rnti, lcid, packetSize, delay);
@@ -505,10 +505,10 @@ UlRxPduCallback(Ptr<RlcStatsCalculator> rlcStats, std::string path,
void
LenaHelper::EnableUlRlcTraces (void)
{
Config::Connect("/NodeList/*/DeviceList/*/LteUeRrc/RlcMap/*/TxPDU",
MakeBoundCallback(&UlTxPduCallback, rlcStats));
Config::Connect ("/NodeList/*/DeviceList/*/LteUeRrc/RlcMap/*/TxPDU",
MakeBoundCallback (&UlTxPduCallback, rlcStats));
Config::Connect ("/NodeList/0/DeviceList/*/LteEnbRrc/UeMap/*/RadioBearerMap/*/LteRlc/RxPDU",
MakeBoundCallback(&UlRxPduCallback, rlcStats));
MakeBoundCallback (&UlRxPduCallback, rlcStats));
}
Ptr<RlcStatsCalculator>

View File

@@ -120,14 +120,14 @@ public:
* \param bearer the characteristics of the bearer to be activated
*/
void ActivateEpsBearer (Ptr<NetDevice> ueDevice, EpsBearer bearer);
/**
*
*
* \param type the type of scheduler to be used for the eNBs
*/
void SetSchedulerType (std::string type);
/**
* set an attribute for the scheduler to be created
*/
@@ -139,7 +139,7 @@ public:
* \param type the type of propagation model to be used for the eNBs
*/
void SetPropagationModelType (std::string type);
/**
* set an attribute for the propagation model to be created
*/
@@ -185,12 +185,10 @@ public:
Ptr<RlcStatsCalculator> GetRlcStats (void);
protected:
// inherited from Object
virtual void DoStart (void);
private:
Ptr<NetDevice> InstallSingleEnbDevice (Ptr<Node> n);
Ptr<NetDevice> InstallSingleUeDevice (Ptr<Node> n);
@@ -198,7 +196,7 @@ private:
Ptr<SpectrumChannel> m_downlinkChannel;
Ptr<SpectrumChannel> m_uplinkChannel;
ObjectFactory m_schedulerFactory;
ObjectFactory m_propagationModelFactory;

View File

@@ -29,17 +29,17 @@ NS_LOG_COMPONENT_DEFINE ("MacStatsCalculator");
NS_OBJECT_ENSURE_REGISTERED (MacStatsCalculator);
MacStatsCalculator::MacStatsCalculator() :
m_dlOutputFilename (""),
m_dlFirstWrite(true),
MacStatsCalculator::MacStatsCalculator ()
: m_dlOutputFilename (""),
m_dlFirstWrite (true),
m_ulOutputFilename (""),
m_ulFirstWrite(true)
m_ulFirstWrite (true)
{
NS_LOG_FUNCTION (this);
}
MacStatsCalculator::~MacStatsCalculator()
MacStatsCalculator::~MacStatsCalculator ()
{
NS_LOG_FUNCTION (this);
}
@@ -60,7 +60,7 @@ MacStatsCalculator::GetTypeId (void)
StringValue ("UlMacStats.csv"),
MakeStringAccessor (&MacStatsCalculator::SetUlOutputFilename),
MakeStringChecker ())
;
;
return tid;
}
@@ -87,11 +87,11 @@ MacStatsCalculator::DlScheduling (uint32_t frameNo, uint32_t subframeNo, uint16_
if ( m_dlFirstWrite == true )
{
outFile.open (m_dlOutputFilename.c_str ());
if (! outFile.is_open ())
{
NS_LOG_ERROR ("Can't open file " << m_dlOutputFilename.c_str ());
return;
}
if (!outFile.is_open ())
{
NS_LOG_ERROR ("Can't open file " << m_dlOutputFilename.c_str ());
return;
}
m_dlFirstWrite = false;
outFile << "# time\tframe\tsframe\tRNTI\tmcsTb1\tsizeTb1\tmcsTb2\tsizeTb2";
outFile << std::endl;
@@ -99,22 +99,22 @@ MacStatsCalculator::DlScheduling (uint32_t frameNo, uint32_t subframeNo, uint16_
else
{
outFile.open (m_dlOutputFilename.c_str (), std::ios_base::app);
if (! outFile.is_open ())
{
NS_LOG_ERROR ("Can't open file " << m_dlOutputFilename.c_str ());
return;
}
if (!outFile.is_open ())
{
NS_LOG_ERROR ("Can't open file " << m_dlOutputFilename.c_str ());
return;
}
}
outFile << Simulator::Now ().GetNanoSeconds () / (double) 1e9 << "\t";
outFile << frameNo << "\t";
outFile << subframeNo << "\t";
outFile << rnti<< "\t";
outFile << (uint32_t) mcsTb1 << "\t";
outFile << sizeTb1 << "\t";
outFile << (uint32_t) mcsTb2 << "\t";
outFile << sizeTb2 << std::endl;
outFile.close ();
outFile << Simulator::Now ().GetNanoSeconds () / (double) 1e9 << "\t";
outFile << frameNo << "\t";
outFile << subframeNo << "\t";
outFile << rnti << "\t";
outFile << (uint32_t) mcsTb1 << "\t";
outFile << sizeTb1 << "\t";
outFile << (uint32_t) mcsTb2 << "\t";
outFile << sizeTb2 << std::endl;
outFile.close ();
}
void
@@ -128,11 +128,11 @@ MacStatsCalculator::UlScheduling (uint32_t frameNo, uint32_t subframeNo, uint16_
if ( m_ulFirstWrite == true )
{
outFile.open (m_ulOutputFilename.c_str ());
if (! outFile.is_open ())
{
NS_LOG_ERROR ("Can't open file " << m_ulOutputFilename.c_str ());
return;
}
if (!outFile.is_open ())
{
NS_LOG_ERROR ("Can't open file " << m_ulOutputFilename.c_str ());
return;
}
m_ulFirstWrite = false;
outFile << "# time\tframe\tsframe\tRNTI\tmcs\tsize";
outFile << std::endl;
@@ -140,20 +140,20 @@ MacStatsCalculator::UlScheduling (uint32_t frameNo, uint32_t subframeNo, uint16_
else
{
outFile.open (m_ulOutputFilename.c_str (), std::ios_base::app);
if (! outFile.is_open ())
{
NS_LOG_ERROR ("Can't open file " << m_ulOutputFilename.c_str ());
return;
}
if (!outFile.is_open ())
{
NS_LOG_ERROR ("Can't open file " << m_ulOutputFilename.c_str ());
return;
}
}
outFile << Simulator::Now ().GetNanoSeconds () / (double) 1e9 << "\t";
outFile << frameNo << "\t";
outFile << subframeNo << "\t";
outFile << rnti<< "\t";
outFile << (uint32_t) mcs << "\t";
outFile << size << std::endl;
outFile.close ();
outFile << Simulator::Now ().GetNanoSeconds () / (double) 1e9 << "\t";
outFile << frameNo << "\t";
outFile << subframeNo << "\t";
outFile << rnti << "\t";
outFile << (uint32_t) mcs << "\t";
outFile << size << std::endl;
outFile.close ();
}

View File

@@ -99,7 +99,6 @@ public:
private:
std::string m_dlOutputFilename;
bool m_dlFirstWrite;

View File

@@ -27,13 +27,13 @@
namespace ns3 {
ImsiLcidPair::ImsiLcidPair ()
ImsiLcidPair::ImsiLcidPair ()
{
}
ImsiLcidPair::ImsiLcidPair (const uint64_t a, const uint8_t b)
: m_imsi(a),
m_lcId(b)
ImsiLcidPair::ImsiLcidPair (const uint64_t a, const uint8_t b)
: m_imsi (a),
m_lcId (b)
{
}
@@ -54,16 +54,16 @@ NS_LOG_COMPONENT_DEFINE ("RlcStatsCalculator");
NS_OBJECT_ENSURE_REGISTERED (RlcStatsCalculator);
RlcStatsCalculator::RlcStatsCalculator() :
m_dlOutputFilename (""),
RlcStatsCalculator::RlcStatsCalculator ()
: m_dlOutputFilename (""),
m_ulOutputFilename (""),
m_firstWrite(true)
m_firstWrite (true)
{
NS_LOG_FUNCTION (this);
}
RlcStatsCalculator::~RlcStatsCalculator()
RlcStatsCalculator::~RlcStatsCalculator ()
{
NS_LOG_FUNCTION (this);
ShowResults ();
@@ -87,14 +87,14 @@ RlcStatsCalculator::GetTypeId (void)
MakeStringChecker ())
.AddAttribute ("StartTime",
"Start time of the on going epoch.",
TimeValue ( Seconds(0.) ),
TimeValue ( Seconds (0.) ),
MakeTimeAccessor (&RlcStatsCalculator::m_startTime),
MakeTimeChecker ())
.AddAttribute("EpochDuration",
"Epoch duration.", TimeValue(Seconds(0.25)),
MakeTimeAccessor(&RlcStatsCalculator::m_epochDuration),
MakeTimeChecker())
;
.AddAttribute ("EpochDuration",
"Epoch duration.", TimeValue (Seconds (0.25)),
MakeTimeAccessor (&RlcStatsCalculator::m_epochDuration),
MakeTimeChecker ())
;
return tid;
}
@@ -148,8 +148,8 @@ RlcStatsCalculator::UlRxPdu (uint64_t imsi, uint16_t rnti, uint8_t lcid, uint32_
m_ulRxPackets[p]++;
m_ulRxData[p] += packetSize;
Uint64StatsMap::iterator it = m_ulDelay.find(p);
if (it == m_ulDelay.end())
Uint64StatsMap::iterator it = m_ulDelay.find (p);
if (it == m_ulDelay.end ())
{
NS_LOG_DEBUG (this << " Creating UL stats calculators for IMSI " << p.m_imsi << " and LCI " << (uint32_t) p.m_lcId );
m_ulDelay[p] = CreateObject<MinMaxAvgTotalCalculator<uint64_t> > ();
@@ -172,14 +172,14 @@ RlcStatsCalculator::DlRxPdu (uint64_t imsi, uint16_t rnti, uint8_t lcid, uint32_
m_dlRxPackets[p]++;
m_dlRxData[p] += packetSize;
Uint64StatsMap::iterator it = m_dlDelay.find(p);
if (it == m_dlDelay.end())
Uint64StatsMap::iterator it = m_dlDelay.find (p);
if (it == m_dlDelay.end ())
{
NS_LOG_DEBUG (this << " Creating DL stats calculators for IMSI " << p.m_imsi << " and LCI " << (uint32_t) p.m_lcId );
m_dlDelay[p] = CreateObject<MinMaxAvgTotalCalculator<uint64_t> > ();
m_dlPduSize[p] = CreateObject<MinMaxAvgTotalCalculator<uint32_t> > ();
}
m_dlDelay[p]->Update(delay);
m_dlDelay[p]->Update (delay);
m_dlPduSize[p]->Update (packetSize);
}
CheckEpoch ();
@@ -192,25 +192,25 @@ RlcStatsCalculator::ShowResults (void)
NS_LOG_FUNCTION (this << m_ulOutputFilename.c_str () << m_dlOutputFilename.c_str () );
NS_LOG_INFO ("Write Rlc Stats in " << m_ulOutputFilename.c_str () <<
" and in " << m_dlOutputFilename.c_str ());
std::ofstream ulOutFile;
std::ofstream dlOutFile;
if ( m_firstWrite == true )
{
ulOutFile.open (m_ulOutputFilename.c_str ());
if (! ulOutFile.is_open ())
{
NS_LOG_ERROR ("Can't open file " << m_ulOutputFilename.c_str ());
return;
}
if (!ulOutFile.is_open ())
{
NS_LOG_ERROR ("Can't open file " << m_ulOutputFilename.c_str ());
return;
}
dlOutFile.open (m_dlOutputFilename.c_str ());
if (! dlOutFile.is_open ())
{
NS_LOG_ERROR ("Can't open file " << m_dlOutputFilename.c_str ());
return;
}
if (!dlOutFile.is_open ())
{
NS_LOG_ERROR ("Can't open file " << m_dlOutputFilename.c_str ());
return;
}
m_firstWrite = false;
ulOutFile << "% start\tend\tIMSI\tRNTI\tLCID\tnTxPDUs\tTxBytes\tnRxPDUs\tRxBytes\t";
ulOutFile << "delay\tstdDev\tmin\tmax\t";
@@ -224,22 +224,22 @@ RlcStatsCalculator::ShowResults (void)
else
{
ulOutFile.open (m_ulOutputFilename.c_str (), std::ios_base::app);
if (! ulOutFile.is_open ())
{
NS_LOG_ERROR ("Can't open file " << m_ulOutputFilename.c_str ());
return;
}
if (!ulOutFile.is_open ())
{
NS_LOG_ERROR ("Can't open file " << m_ulOutputFilename.c_str ());
return;
}
dlOutFile.open (m_dlOutputFilename.c_str (), std::ios_base::app);
if (! dlOutFile.is_open ())
{
NS_LOG_ERROR ("Can't open file " << m_dlOutputFilename.c_str ());
return;
}
if (!dlOutFile.is_open ())
{
NS_LOG_ERROR ("Can't open file " << m_dlOutputFilename.c_str ());
return;
}
}
WriteUlResults(ulOutFile);
WriteDlResults(dlOutFile);
WriteUlResults (ulOutFile);
WriteDlResults (dlOutFile);
}
@@ -249,7 +249,7 @@ RlcStatsCalculator::WriteUlResults (std::ofstream& outFile)
// Get the unique IMSI / LCID list
std::vector<ImsiLcidPair > pairVector;
for (Uint32Map::iterator it = m_ulTxPackets.begin(); it != m_ulTxPackets.end(); ++it)
for (Uint32Map::iterator it = m_ulTxPackets.begin (); it != m_ulTxPackets.end (); ++it)
{
if (find (pairVector.begin (), pairVector.end (), (*it).first ) == pairVector.end () )
{
@@ -258,11 +258,11 @@ RlcStatsCalculator::WriteUlResults (std::ofstream& outFile)
}
Time endTime = m_startTime + m_epochDuration;
for (std::vector<ImsiLcidPair>::iterator it = pairVector.begin(); it != pairVector.end(); ++it)
for (std::vector<ImsiLcidPair>::iterator it = pairVector.begin (); it != pairVector.end (); ++it)
{
ImsiLcidPair p = *it;
outFile << m_startTime.GetNanoSeconds () / 1.0e9 << "\t";
outFile << endTime.GetNanoSeconds() / 1.0e9 << "\t";
outFile << endTime.GetNanoSeconds () / 1.0e9 << "\t";
outFile << p.m_imsi << "\t";
outFile << m_flowId[p].m_rnti << "\t";
outFile << (uint32_t) m_flowId[p].m_lcId << "\t";
@@ -271,12 +271,12 @@ RlcStatsCalculator::WriteUlResults (std::ofstream& outFile)
outFile << GetUlRxPackets (p.m_imsi, p.m_lcId) << "\t";
outFile << GetUlRxData (p.m_imsi, p.m_lcId) << "\t";
std::vector<double> stats = GetUlDelayStats (p.m_imsi, p.m_lcId);
for( std::vector<double>::iterator it = stats.begin (); it != stats.end (); ++it )
for ( std::vector<double>::iterator it = stats.begin (); it != stats.end (); ++it )
{
outFile << (*it) * 1e-9 << "\t";
}
stats = GetUlPduSizeStats (p.m_imsi, p.m_lcId);
for( std::vector<double>::iterator it = stats.begin (); it != stats.end (); ++it )
for ( std::vector<double>::iterator it = stats.begin (); it != stats.end (); ++it )
{
outFile << (*it) << "\t";
}
@@ -291,7 +291,7 @@ RlcStatsCalculator::WriteDlResults (std::ofstream& outFile)
{
// Get the unique IMSI list
std::vector<ImsiLcidPair > pairVector;
for (Uint32Map::iterator it = m_dlTxPackets.begin(); it != m_dlTxPackets.end(); ++it)
for (Uint32Map::iterator it = m_dlTxPackets.begin (); it != m_dlTxPackets.end (); ++it)
{
if (find (pairVector.begin (), pairVector.end (), (*it).first ) == pairVector.end () )
{
@@ -300,11 +300,11 @@ RlcStatsCalculator::WriteDlResults (std::ofstream& outFile)
}
Time endTime = m_startTime + m_epochDuration;
for (std::vector<ImsiLcidPair>::iterator pair = pairVector.begin(); pair != pairVector.end(); ++pair)
for (std::vector<ImsiLcidPair>::iterator pair = pairVector.begin (); pair != pairVector.end (); ++pair)
{
ImsiLcidPair p = *pair;
outFile << m_startTime.GetNanoSeconds () / 1.0e9 << "\t";
outFile << endTime.GetNanoSeconds() / 1.0e9 << "\t";
outFile << endTime.GetNanoSeconds () / 1.0e9 << "\t";
outFile << p.m_imsi << "\t";
outFile << m_flowId[p].m_rnti << "\t";
outFile << (uint32_t) m_flowId[p].m_lcId << "\t";
@@ -313,12 +313,12 @@ RlcStatsCalculator::WriteDlResults (std::ofstream& outFile)
outFile << GetDlRxPackets (p.m_imsi, p.m_lcId) << "\t";
outFile << GetDlRxData (p.m_imsi, p.m_lcId) << "\t";
std::vector<double> stats = GetDlDelayStats (p.m_imsi, p.m_lcId);
for( std::vector<double>::iterator it = stats.begin (); it != stats.end (); ++it )
for ( std::vector<double>::iterator it = stats.begin (); it != stats.end (); ++it )
{
outFile << (*it) * 1e-9 << "\t";
}
stats = GetDlPduSizeStats (p.m_imsi, p.m_lcId);
for( std::vector<double>::iterator it = stats.begin (); it != stats.end (); ++it )
for ( std::vector<double>::iterator it = stats.begin (); it != stats.end (); ++it )
{
outFile << (*it) << "\t";
}
@@ -331,19 +331,19 @@ RlcStatsCalculator::WriteDlResults (std::ofstream& outFile)
void
RlcStatsCalculator::ResetResults (void)
{
m_ulTxPackets.erase (m_ulTxPackets.begin (), m_ulTxPackets.end () );
m_ulRxPackets.erase (m_ulRxPackets.begin (), m_ulRxPackets.end () );
m_ulRxData.erase (m_ulRxData.begin (), m_ulRxData.end () );
m_ulTxData.erase (m_ulTxData.begin (), m_ulTxData.end () );
m_ulDelay.erase (m_ulDelay.begin (), m_ulDelay.end () );
m_ulPduSize.erase (m_ulPduSize.begin (), m_ulPduSize.end () );
m_ulTxPackets.erase (m_ulTxPackets.begin (), m_ulTxPackets.end () );
m_ulRxPackets.erase (m_ulRxPackets.begin (), m_ulRxPackets.end () );
m_ulRxData.erase (m_ulRxData.begin (), m_ulRxData.end () );
m_ulTxData.erase (m_ulTxData.begin (), m_ulTxData.end () );
m_ulDelay.erase (m_ulDelay.begin (), m_ulDelay.end () );
m_ulPduSize.erase (m_ulPduSize.begin (), m_ulPduSize.end () );
m_dlTxPackets.erase (m_dlTxPackets.begin (), m_dlTxPackets.end () );
m_dlRxPackets.erase (m_dlRxPackets.begin (), m_dlRxPackets.end () );
m_dlRxData.erase (m_dlRxData.begin (), m_dlRxData.end () );
m_dlTxData.erase (m_dlTxData.begin (), m_dlTxData.end () );
m_dlDelay.erase (m_dlDelay.begin (), m_dlDelay.end () );
m_dlPduSize.erase (m_dlPduSize.begin (), m_dlPduSize.end () );
m_dlTxPackets.erase (m_dlTxPackets.begin (), m_dlTxPackets.end () );
m_dlRxPackets.erase (m_dlRxPackets.begin (), m_dlRxPackets.end () );
m_dlRxData.erase (m_dlRxData.begin (), m_dlRxData.end () );
m_dlTxData.erase (m_dlTxData.begin (), m_dlTxData.end () );
m_dlDelay.erase (m_dlDelay.begin (), m_dlDelay.end () );
m_dlPduSize.erase (m_dlPduSize.begin (), m_dlPduSize.end () );
}
void
@@ -352,9 +352,9 @@ RlcStatsCalculator::CheckEpoch (void)
if ( Simulator::Now () > m_startTime + m_epochDuration )
{
std::cout << "JNNNNNNNNNG New epoch! startTime " << m_startTime << " epoch duration " << m_epochDuration << std::endl;
ShowResults();
ResetResults();
StartEpoch();
ShowResults ();
ResetResults ();
StartEpoch ();
}
}
@@ -400,7 +400,7 @@ RlcStatsCalculator::GetUlDelay (uint64_t imsi, uint8_t lcid)
Uint64StatsMap::iterator it = m_ulDelay.find (p);
if ( it == m_ulDelay.end () )
{
NS_LOG_ERROR("UL delay for " << imsi << " - " << lcid << " not found");
NS_LOG_ERROR ("UL delay for " << imsi << " - " << lcid << " not found");
return 0;
}
@@ -415,14 +415,14 @@ RlcStatsCalculator::GetUlDelayStats (uint64_t imsi, uint8_t lcid)
Uint64StatsMap::iterator it = m_ulDelay.find (p);
if ( it == m_ulDelay.end () )
{
NS_LOG_ERROR("UL delay for " << imsi << " - " << lcid << " not found");
NS_LOG_ERROR ("UL delay for " << imsi << " - " << lcid << " not found");
return stats;
}
stats.push_back(m_ulDelay[p]->getMean ());
stats.push_back(m_ulDelay[p]->getStddev ());
stats.push_back(m_ulDelay[p]->getMin ());
stats.push_back(m_ulDelay[p]->getMax ());
stats.push_back (m_ulDelay[p]->getMean ());
stats.push_back (m_ulDelay[p]->getStddev ());
stats.push_back (m_ulDelay[p]->getMin ());
stats.push_back (m_ulDelay[p]->getMax ());
return stats;
}
@@ -434,7 +434,7 @@ RlcStatsCalculator::GetUlPduSizeStats (uint64_t imsi, uint8_t lcid)
Uint32StatsMap::iterator it = m_ulPduSize.find (p);
if ( it == m_ulPduSize.end () )
{
NS_LOG_ERROR("UL PDU Size for " << imsi << " - " << lcid << " not found");
NS_LOG_ERROR ("UL PDU Size for " << imsi << " - " << lcid << " not found");
return stats;
}
@@ -480,7 +480,7 @@ RlcStatsCalculator::GetDlDelay (uint64_t imsi, uint8_t lcid)
Uint64StatsMap::iterator it = m_dlDelay.find (p);
if ( it == m_dlDelay.end () )
{
NS_LOG_ERROR("DL delay for " << imsi << " not found");
NS_LOG_ERROR ("DL delay for " << imsi << " not found");
return 0;
}
return m_dlDelay[p]->getMean ();
@@ -495,14 +495,14 @@ RlcStatsCalculator::GetDlDelayStats (uint64_t imsi, uint8_t lcid)
if ( it == m_dlDelay.end () )
{
NS_LOG_ERROR("DL delay for " << imsi << " not found");
NS_LOG_ERROR ("DL delay for " << imsi << " not found");
return stats;
}
stats.push_back(m_dlDelay[p]->getMean ());
stats.push_back(m_dlDelay[p]->getStddev ());
stats.push_back(m_dlDelay[p]->getMin ());
stats.push_back(m_dlDelay[p]->getMax ());
stats.push_back (m_dlDelay[p]->getMean ());
stats.push_back (m_dlDelay[p]->getStddev ());
stats.push_back (m_dlDelay[p]->getMin ());
stats.push_back (m_dlDelay[p]->getMax ());
return stats;
}
@@ -515,14 +515,14 @@ RlcStatsCalculator::GetDlPduSizeStats (uint64_t imsi, uint8_t lcid)
if ( it == m_dlPduSize.end () )
{
NS_LOG_ERROR("DL delay for " << imsi << " not found");
NS_LOG_ERROR ("DL delay for " << imsi << " not found");
return stats;
}
stats.push_back(m_dlPduSize[p]->getMean ());
stats.push_back(m_dlPduSize[p]->getStddev ());
stats.push_back(m_dlPduSize[p]->getMin ());
stats.push_back(m_dlPduSize[p]->getMax ());
stats.push_back (m_dlPduSize[p]->getMean ());
stats.push_back (m_dlPduSize[p]->getStddev ());
stats.push_back (m_dlPduSize[p]->getMin ());
stats.push_back (m_dlPduSize[p]->getMax ());
return stats;
}

View File

@@ -30,7 +30,7 @@
#include <fstream>
namespace ns3 {
struct ImsiLcidPair
{
@@ -66,7 +66,6 @@ typedef std::map<ImsiLcidPair, LteFlowId_t> FlowIdMap;
class RlcStatsCalculator : public Object
{
public:
/**
* Class constructor
*/
@@ -77,9 +76,9 @@ public:
*/
virtual ~RlcStatsCalculator ();
/**
* Inherited from ns3::Object
*/
/**
* Inherited from ns3::Object
*/
static TypeId GetTypeId (void);
/**

View File

@@ -201,7 +201,7 @@ LteDownlinkSinrTestCase::DoRun (void)
{
// Create phy tag (different for each packet burst)
// and add to the first packet
pktTag[pb] = LtePhyTag (100 * (pb+1));
pktTag[pb] = LtePhyTag (100 * (pb + 1));
pkt[pb][i]->AddPacketTag ( pktTag[pb] );
}
@@ -246,12 +246,12 @@ LteDownlinkSinrTestCase::DoRun (void)
*/
// eNB sends data to 2 UEs through 2 subcarriers
Simulator::Schedule (ts, &LteSpectrumPhy::StartRx, dlPhy, packetBursts[0], m_sv, dlPhy->GetSpectrumType(), ds);
Simulator::Schedule (ts, &LteSpectrumPhy::StartRx, dlPhy, packetBursts[0], m_sv, dlPhy->GetSpectrumType (), ds);
Simulator::Schedule (ti1, &LteSpectrumPhy::StartRx, dlPhy, packetBursts[1], i1, dlPhy->GetSpectrumType(), di1);
Simulator::Schedule (ti2, &LteSpectrumPhy::StartRx, dlPhy, packetBursts[2], i2, dlPhy->GetSpectrumType(), di2);
Simulator::Schedule (ti3, &LteSpectrumPhy::StartRx, dlPhy, packetBursts[3], i3, dlPhy->GetSpectrumType(), di3);
Simulator::Schedule (ti4, &LteSpectrumPhy::StartRx, dlPhy, packetBursts[4], i4, dlPhy->GetSpectrumType(), di4);
Simulator::Schedule (ti1, &LteSpectrumPhy::StartRx, dlPhy, packetBursts[1], i1, dlPhy->GetSpectrumType (), di1);
Simulator::Schedule (ti2, &LteSpectrumPhy::StartRx, dlPhy, packetBursts[2], i2, dlPhy->GetSpectrumType (), di2);
Simulator::Schedule (ti3, &LteSpectrumPhy::StartRx, dlPhy, packetBursts[3], i3, dlPhy->GetSpectrumType (), di3);
Simulator::Schedule (ti4, &LteSpectrumPhy::StartRx, dlPhy, packetBursts[4], i4, dlPhy->GetSpectrumType (), di4);
Simulator::Stop (Seconds (5.0));
Simulator::Run ();

View File

@@ -41,16 +41,16 @@ public:
class LteDownlinkSinrTestCase : public TestCase
{
public:
LteDownlinkSinrTestCase (Ptr<SpectrumValue> sv, Ptr<SpectrumValue> sinr, std::string name);
virtual ~LteDownlinkSinrTestCase ();
public:
LteDownlinkSinrTestCase (Ptr<SpectrumValue> sv, Ptr<SpectrumValue> sinr, std::string name);
virtual ~LteDownlinkSinrTestCase ();
private:
virtual void DoRun (void);
private:
virtual void DoRun (void);
Ptr<SpectrumValue> m_sv;
Ptr<const SpectrumModel> m_sm;
Ptr<SpectrumValue> m_sinr;
Ptr<SpectrumValue> m_sv;
Ptr<const SpectrumModel> m_sm;
Ptr<SpectrumValue> m_sinr;
};

View File

@@ -39,14 +39,14 @@ protected:
uint16_t m_earfcn;
double m_f;
private:
virtual void DoRun (void);
private:
virtual void DoRun (void);
};
LteEarfcnTestCase::LteEarfcnTestCase (const char* str, uint16_t earfcn, double f)
: TestCase (str),
m_earfcn (earfcn),
m_f (f)
m_earfcn (earfcn),
m_f (f)
{
NS_LOG_FUNCTION (this << str << earfcn << f);
}
@@ -67,8 +67,8 @@ class LteEarfcnDlTestCase : public LteEarfcnTestCase
public:
LteEarfcnDlTestCase (const char* str, uint16_t earfcn, double f);
private:
virtual void DoRun (void);
private:
virtual void DoRun (void);
};
LteEarfcnDlTestCase::LteEarfcnDlTestCase (const char* str, uint16_t earfcn, double f)
@@ -79,7 +79,7 @@ LteEarfcnDlTestCase::LteEarfcnDlTestCase (const char* str, uint16_t earfcn, doub
void
LteEarfcnDlTestCase::DoRun (void)
{
// LogLevel logLevel = (LogLevel)(LOG_PREFIX_FUNC | LOG_PREFIX_TIME | LOG_LEVEL_ALL);
// LogLevel logLevel = (LogLevel)(LOG_PREFIX_FUNC | LOG_PREFIX_TIME | LOG_LEVEL_ALL);
// LogComponentEnable ("LteSpectrumValueHelper", logLevel);
// LogComponentEnable ("LteTestEarfcn", logLevel);
@@ -93,8 +93,8 @@ class LteEarfcnUlTestCase : public LteEarfcnTestCase
public:
LteEarfcnUlTestCase (const char* str, uint16_t earfcn, double f);
private:
virtual void DoRun (void);
private:
virtual void DoRun (void);
};
LteEarfcnUlTestCase::LteEarfcnUlTestCase (const char* str, uint16_t earfcn, double f)

View File

@@ -47,15 +47,15 @@ LteTestDlSchedulingCallback (LteInterferenceTestCase *testcase, std::string path
uint32_t frameNo, uint32_t subframeNo, uint16_t rnti,
uint8_t mcsTb1, uint16_t sizeTb1, uint8_t mcsTb2, uint16_t sizeTb2)
{
testcase->DlScheduling(frameNo, subframeNo, rnti, mcsTb1, sizeTb1, mcsTb2, sizeTb2);
testcase->DlScheduling (frameNo, subframeNo, rnti, mcsTb1, sizeTb1, mcsTb2, sizeTb2);
}
void
LteTestUlSchedulingCallback (LteInterferenceTestCase *testcase, std::string path,
uint32_t frameNo, uint32_t subframeNo, uint16_t rnti,
uint8_t mcs, uint16_t sizeTb)
uint32_t frameNo, uint32_t subframeNo, uint16_t rnti,
uint8_t mcs, uint16_t sizeTb)
{
testcase->UlScheduling(frameNo, subframeNo, rnti, mcs, sizeTb);
testcase->UlScheduling (frameNo, subframeNo, rnti, mcs, sizeTb);
}
@@ -68,7 +68,7 @@ LteInterferenceTestSuite::LteInterferenceTestSuite ()
{
NS_LOG_INFO ("Creating LteInterferenceTestSuite");
AddTestCase (new LteInterferenceTestCase ("d1=3000, d2=6000", 3000.000000, 6000.000000, 3.844681, 1.714583, 0.761558, 0.389662, 6, 4));
AddTestCase (new LteInterferenceTestCase ("d1=3000, d2=6000", 3000.000000, 6000.000000, 3.844681, 1.714583, 0.761558, 0.389662, 6, 4));
AddTestCase (new LteInterferenceTestCase ("d1=50, d2=10", 50.000000, 10.000000, 0.040000, 0.040000, 0.010399, 0.010399, 0, 0));
AddTestCase (new LteInterferenceTestCase ("d1=50, d2=20", 50.000000, 20.000000, 0.160000, 0.159998, 0.041154, 0.041153, 0, 0));
AddTestCase (new LteInterferenceTestCase ("d1=50, d2=50", 50.000000, 50.000000, 0.999997, 0.999907, 0.239828, 0.239808, 2, 2));
@@ -79,7 +79,7 @@ LteInterferenceTestSuite::LteInterferenceTestSuite ()
AddTestCase (new LteInterferenceTestCase ("d1=50, d2=10000", 50.000000, 10000.000000, 35964.181431, 8505.970614, 12.667381, 10.588084, 28, 28));
AddTestCase (new LteInterferenceTestCase ("d1=50, d2=100000", 50.000000, 100000.000000, 327284.773828, 10774.181090, 15.853097, 10.928917, 28, 28));
AddTestCase (new LteInterferenceTestCase ("d1=50, d2=1000000", 50.000000, 1000000.000000, 356132.574152, 10802.988445, 15.974963, 10.932767, 28, 28));
}
static LteInterferenceTestSuite lteLinkAdaptationWithInterferenceTestSuite;
@@ -93,8 +93,8 @@ LteInterferenceTestCase::LteInterferenceTestCase (std::string name, double d1, d
: TestCase (name),
m_d1 (d1),
m_d2 (d2),
m_dlSinrDb (10*log10(dlSinr)),
m_ulSinrDb (10*log10(ulSinr)),
m_dlSinrDb (10 * log10 (dlSinr)),
m_ulSinrDb (10 * log10 (ulSinr)),
m_dlSe (dlSe),
m_ulSe (ulSe),
m_dlMcs (dlMcs),
@@ -129,7 +129,7 @@ LteInterferenceTestCase::DoRun (void)
NodeContainer allNodes = NodeContainer ( enbNodes, ueNodes1, ueNodes2);
// the topology is the following:
// d2
// d2
// UE1-----------eNB2
// | |
// d1| |d1
@@ -178,10 +178,10 @@ LteInterferenceTestCase::DoRun (void)
enbPhy->GetUplinkSpectrumPhy ()->AddSinrChunkProcessor (testUlSinr);
Config::Connect ("/NodeList/0/DeviceList/0/LteEnbMac/DlScheduling",
MakeBoundCallback(&LteTestDlSchedulingCallback, this));
MakeBoundCallback (&LteTestDlSchedulingCallback, this));
Config::Connect ("/NodeList/0/DeviceList/0/LteEnbMac/UlScheduling",
MakeBoundCallback(&LteTestUlSchedulingCallback, this));
MakeBoundCallback (&LteTestUlSchedulingCallback, this));
Simulator::Stop (Seconds (0.005));
@@ -199,7 +199,7 @@ LteInterferenceTestCase::DoRun (void)
void
LteInterferenceTestCase::DlScheduling (uint32_t frameNo, uint32_t subframeNo, uint16_t rnti,
uint8_t mcsTb1, uint16_t sizeTb1, uint8_t mcsTb2, uint16_t sizeTb2)
uint8_t mcsTb1, uint16_t sizeTb1, uint8_t mcsTb2, uint16_t sizeTb2)
{
/**
* Note:
@@ -214,7 +214,7 @@ LteInterferenceTestCase::DlScheduling (uint32_t frameNo, uint32_t subframeNo, ui
void
LteInterferenceTestCase::UlScheduling (uint32_t frameNo, uint32_t subframeNo, uint16_t rnti,
uint8_t mcs, uint16_t sizeTb)
uint8_t mcs, uint16_t sizeTb)
{
/**
* Note:

View File

@@ -43,16 +43,16 @@ class LteInterferenceTestCase : public TestCase
public:
LteInterferenceTestCase (std::string name, double d1, double d2, double dlSinr, double ulSinr, double dlSe, double ulSe, uint16_t dlMcs, uint16_t ulMcs);
virtual ~LteInterferenceTestCase ();
void DlScheduling (uint32_t frameNo, uint32_t subframeNo, uint16_t rnti,
uint8_t mcsTb1, uint16_t sizeTb1, uint8_t mcsTb2, uint16_t sizeTb2);
uint8_t mcsTb1, uint16_t sizeTb1, uint8_t mcsTb2, uint16_t sizeTb2);
void UlScheduling (uint32_t frameNo, uint32_t subframeNo, uint16_t rnti,
uint8_t mcs, uint16_t sizeTb);
private:
virtual void DoRun (void);
double m_d1;
double m_d2;

View File

@@ -44,10 +44,10 @@ using namespace ns3;
void
LteTestDlSchedulingCallback (LteLinkAdaptationTestCase *testcase, std::string path,
uint32_t frameNo, uint32_t subframeNo, uint16_t rnti,
uint8_t mcsTb1, uint16_t sizeTb1, uint8_t mcsTb2, uint16_t sizeTb2)
uint32_t frameNo, uint32_t subframeNo, uint16_t rnti,
uint8_t mcsTb1, uint16_t sizeTb1, uint8_t mcsTb2, uint16_t sizeTb2)
{
testcase->DlScheduling(frameNo, subframeNo, rnti, mcsTb1, sizeTb1, mcsTb2, sizeTb2);
testcase->DlScheduling (frameNo, subframeNo, rnti, mcsTb1, sizeTb1, mcsTb2, sizeTb2);
}
/**
@@ -60,59 +60,59 @@ LteLinkAdaptationTestSuite::LteLinkAdaptationTestSuite ()
NS_LOG_INFO ("Creating LteLinkAdaptionTestSuite");
struct SnrEfficiencyMcs
{
double snrDb;
double efficiency;
int mcsIndex;
};
{
double snrDb;
double efficiency;
int mcsIndex;
};
/**
* Test vectors: SNRDB, Spectral Efficiency, MCS index
* From XXX
*/
SnrEfficiencyMcs snrEfficiencyMcs[] = {
{-5.00000, 0.08024, -1},
{-4.00000, 0.10030, -1},
{-3.00000, 0.12518, -1},
{-2.00000, 0.15589, 0},
{-1.00000, 0.19365, 0},
{0.00000, 0.23983, 2},
{1.00000, 0.29593, 2},
{2.00000, 0.36360, 2},
{3.00000, 0.44451, 4},
{4.00000, 0.54031, 4},
{5.00000, 0.65251, 6},
{6.00000, 0.78240, 6},
{7.00000, 0.93086, 8},
{8.00000, 1.09835, 8},
{9.00000, 1.28485, 10},
{10.00000, 1.48981, 12},
{11.00000, 1.71229, 12},
{12.00000, 1.95096, 14},
{13.00000, 2.20429, 14},
{14.00000, 2.47062, 16},
{15.00000, 2.74826, 18},
{16.00000, 3.03560, 18},
{17.00000, 3.33115, 20},
{18.00000, 3.63355, 20},
{19.00000, 3.94163, 22},
{20.00000, 4.25439, 22},
{21.00000, 4.57095, 24},
{22.00000, 4.89060, 24},
{23.00000, 5.21276, 26},
{24.00000, 5.53693, 26},
{25.00000, 5.86271, 28},
{26.00000, 6.18980, 28},
{27.00000, 6.51792, 28},
{28.00000, 6.84687, 28},
{29.00000, 7.17649, 28},
{30.00000, 7.50663, 28},
{ -5.00000, 0.08024, -1},
{ -4.00000, 0.10030, -1},
{ -3.00000, 0.12518, -1},
{ -2.00000, 0.15589, 0},
{ -1.00000, 0.19365, 0},
{ 0.00000, 0.23983, 2},
{ 1.00000, 0.29593, 2},
{ 2.00000, 0.36360, 2},
{ 3.00000, 0.44451, 4},
{ 4.00000, 0.54031, 4},
{ 5.00000, 0.65251, 6},
{ 6.00000, 0.78240, 6},
{ 7.00000, 0.93086, 8},
{ 8.00000, 1.09835, 8},
{ 9.00000, 1.28485, 10},
{ 10.00000, 1.48981, 12},
{ 11.00000, 1.71229, 12},
{ 12.00000, 1.95096, 14},
{ 13.00000, 2.20429, 14},
{ 14.00000, 2.47062, 16},
{ 15.00000, 2.74826, 18},
{ 16.00000, 3.03560, 18},
{ 17.00000, 3.33115, 20},
{ 18.00000, 3.63355, 20},
{ 19.00000, 3.94163, 22},
{ 20.00000, 4.25439, 22},
{ 21.00000, 4.57095, 24},
{ 22.00000, 4.89060, 24},
{ 23.00000, 5.21276, 26},
{ 24.00000, 5.53693, 26},
{ 25.00000, 5.86271, 28},
{ 26.00000, 6.18980, 28},
{ 27.00000, 6.51792, 28},
{ 28.00000, 6.84687, 28},
{ 29.00000, 7.17649, 28},
{ 30.00000, 7.50663, 28},
};
int numOfTests = sizeof (snrEfficiencyMcs) / sizeof (SnrEfficiencyMcs);
double txPowerDbm = 30; // default eNB TX power over whole bandwdith
double ktDbm = -174; // reference LTE noise PSD
double noisePowerDbm = ktDbm + 10*log10(25*180000); // corresponds to kT*bandwidth in linear units
double noisePowerDbm = ktDbm + 10 * log10 (25 * 180000); // corresponds to kT*bandwidth in linear units
double receiverNoiseFigureDb = 9.0; // default UE noise figure
for ( int i = 0 ; i < numOfTests; i++ )
@@ -200,7 +200,7 @@ LteLinkAdaptationTestCase::DoRun (void)
uePhy->GetDownlinkSpectrumPhy ()->AddSinrChunkProcessor (testSinr);
Config::Connect ("/NodeList/0/DeviceList/0/LteEnbMac/DlScheduling",
MakeBoundCallback(&LteTestDlSchedulingCallback, this));
MakeBoundCallback (&LteTestDlSchedulingCallback, this));
Simulator::Stop (Seconds (0.005));
Simulator::Run ();

View File

@@ -39,20 +39,20 @@ public:
class LteLinkAdaptationTestCase : public TestCase
{
public:
LteLinkAdaptationTestCase (std::string name, double snrDb, double loss, uint16_t mcsIndex);
LteLinkAdaptationTestCase ();
virtual ~LteLinkAdaptationTestCase ();
public:
LteLinkAdaptationTestCase (std::string name, double snrDb, double loss, uint16_t mcsIndex);
LteLinkAdaptationTestCase ();
virtual ~LteLinkAdaptationTestCase ();
void DlScheduling (uint32_t frameNo, uint32_t subframeNo, uint16_t rnti,
uint8_t mcsTb1, uint16_t sizeTb1, uint8_t mcsTb2, uint16_t sizeTb2);
void DlScheduling (uint32_t frameNo, uint32_t subframeNo, uint16_t rnti,
uint8_t mcsTb1, uint16_t sizeTb1, uint8_t mcsTb2, uint16_t sizeTb2);
private:
virtual void DoRun (void);
private:
virtual void DoRun (void);
double m_snrDb;
double m_loss;
uint16_t m_mcsIndex;
double m_snrDb;
double m_loss;
uint16_t m_mcsIndex;
};

View File

@@ -52,11 +52,11 @@ NS_LOG_COMPONENT_DEFINE ("LenaTestPfFfMacCheduler");
using namespace ns3;
LenaTestPfFfMacSchedulerSuite::LenaTestPfFfMacSchedulerSuite ()
: TestSuite ("lte-pf-ff-mac-scheduler", SYSTEM)
: TestSuite ("lte-pf-ff-mac-scheduler", SYSTEM)
{
SetVerbose (true);
NS_LOG_INFO ("creating LenaTestPfFfMacSchedulerSuite");
//Test Case 1: AMC works in PF
// DOWNLINK - DISTANCE 0 -> MCS 28 -> Itbs 26 (from table 7.1.7.2.1-1 of 36.213)
@@ -106,7 +106,7 @@ LenaTestPfFfMacSchedulerSuite::LenaTestPfFfMacSchedulerSuite ()
// 3 users -> 8 PRB at Itbs 11 -> 201 -> 201000 bytes/sec
// 6 users -> 4 PRB at Itbs 11 -> 97 -> 97000 bytes/sec
// 12 users -> 2 PRB at Itbs 11 -> 47 -> 47000 bytes/sec
// 15 users -> 1 PRB at Itbs 11 -> 22 -> 22000 bytes/sec
// 15 users -> 1 PRB at Itbs 11 -> 22 -> 22000 bytes/sec
AddTestCase (new LenaPfFfMacSchedulerTestCase1 (1,0,6000,903000,621000));
AddTestCase (new LenaPfFfMacSchedulerTestCase1 (3,0,6000,301000,201000));
AddTestCase (new LenaPfFfMacSchedulerTestCase1 (6,0,6000,150500,97000));
@@ -136,13 +136,13 @@ LenaTestPfFfMacSchedulerSuite::LenaTestPfFfMacSchedulerSuite ()
// 3 users -> 309000 among 3 users -> 103000 bytes/sec
// 6 users -> 309000 among 6 users -> 51500 bytes/sec
// 12 users -> 309000 among 12 users -> 25750 bytes/sec
// 15 users -> 309000 among 15 users -> 20600 bytes/sec
// 15 users -> 309000 among 15 users -> 20600 bytes/sec
// UPLINK - DISTANCE 15000 -> MCS 6 -> Itbs 6 (from table 7.1.7.2.1-1 of 36.213)
// 1 user -> 25 PRB at Itbs 6 -> 233 -> 233000 bytes/sec
// 3 users -> 8 PRB at Itbs 6 -> 69 -> 69000 bytes/sec
// 6 users -> 4 PRB at Itbs 6 -> 32 -> 32000 bytes/sec
// 12 users -> 2 PRB at Itbs 6 -> 15 -> 15000 bytes/sec
// 15 users -> 1 PRB at Itbs 6 -> 7 -> 7000 bytes/sec
// 15 users -> 1 PRB at Itbs 6 -> 7 -> 7000 bytes/sec
AddTestCase (new LenaPfFfMacSchedulerTestCase1 (1,0,15000,309000,233000));
AddTestCase (new LenaPfFfMacSchedulerTestCase1 (3,0,15000,103000,69000));
AddTestCase (new LenaPfFfMacSchedulerTestCase1 (6,0,15000,51500,32000));
@@ -150,7 +150,7 @@ LenaTestPfFfMacSchedulerSuite::LenaTestPfFfMacSchedulerSuite ()
AddTestCase (new LenaPfFfMacSchedulerTestCase1 (15,0,15000,20600,7000));
// Test Case 2: fairness check
std::vector<uint16_t> dist;
dist.push_back (0); // User 0 distance --> MCS 28
dist.push_back (3000); // User 1 distance --> MCS 24
@@ -204,11 +204,11 @@ LenaPfFfMacSchedulerTestCase1::DoRun (void)
// LogComponentEnable ("LteEnbMac", LOG_LEVEL_ALL);
// LogComponentEnable ("LteUeMac", LOG_LEVEL_ALL);
// LogComponentEnable ("LteRlc", LOG_LEVEL_ALL);
//
// LogComponentEnable ("LtePhy", LOG_LEVEL_ALL);
// LogComponentEnable ("LteEnbPhy", LOG_LEVEL_ALL);
// LogComponentEnable ("LteUePhy", LOG_LEVEL_ALL);
//
// LogComponentEnable ("LtePhy", LOG_LEVEL_ALL);
// LogComponentEnable ("LteEnbPhy", LOG_LEVEL_ALL);
// LogComponentEnable ("LteUePhy", LOG_LEVEL_ALL);
// LogComponentEnable ("LteSpectrumPhy", LOG_LEVEL_ALL);
// LogComponentEnable ("LteInterference", LOG_LEVEL_ALL);
// LogComponentEnable ("LteSinrChunkProcessor", LOG_LEVEL_ALL);
@@ -223,7 +223,7 @@ LenaPfFfMacSchedulerTestCase1::DoRun (void)
// LogComponentEnable ("LteNetDevice", LOG_LEVEL_ALL);
// LogComponentEnable ("LteUeNetDevice", LOG_LEVEL_ALL);
// LogComponentEnable ("LteEnbNetDevice", LOG_LEVEL_ALL);
// LogComponentEnable ("PfFfMacScheduler", LOG_LEVEL_ALL);
LogComponentEnable ("LenaTestPfFfMacCheduler", LOG_LEVEL_ALL);
// LogComponentEnable ("LteAmc", LOG_LEVEL_ALL);
@@ -232,7 +232,7 @@ LenaPfFfMacSchedulerTestCase1::DoRun (void)
/**
* Initialize Simulation Scenario: 1 eNB and m_nUser UEs
*/
SetVerbose (true);
Ptr<LenaHelper> lena = CreateObject<LenaHelper> ();
@@ -241,36 +241,36 @@ LenaPfFfMacSchedulerTestCase1::DoRun (void)
NodeContainer ueNodes;
enbNodes.Create (1);
ueNodes.Create (m_nUser);
// Install Mobility Model
MobilityHelper mobility;
mobility.SetMobilityModel ("ns3::ConstantPositionMobilityModel");
mobility.Install (enbNodes);
mobility.SetMobilityModel ("ns3::ConstantPositionMobilityModel");
mobility.Install (ueNodes);
// Create Devices and install them in the Nodes (eNB and UE)
NetDeviceContainer enbDevs;
NetDeviceContainer ueDevs;
lena->SetSchedulerType ("ns3::PfFfMacScheduler");
enbDevs = lena->InstallEnbDevice (enbNodes);
ueDevs = lena->InstallUeDevice (ueNodes);
// Attach a UE to a eNB
lena->Attach (ueDevs, enbDevs.Get (0));
// Activate an EPS bearer
enum EpsBearer::Qci q = EpsBearer::GBR_CONV_VOICE;
EpsBearer bearer (q);
lena->ActivateEpsBearer (ueDevs, bearer);
lena->SetAttribute ("PropagationModel", StringValue ("ns3::FriisSpectrumPropagationLossModel"));
Ptr<LteEnbNetDevice> lteEnbDev = enbDevs.Get (0)->GetObject<LteEnbNetDevice> ();
Ptr<LteEnbPhy> enbPhy = lteEnbDev->GetPhy ();
enbPhy->SetAttribute ("TxPower", DoubleValue (30.0));
enbPhy->SetAttribute ("NoiseFigure", DoubleValue (5.0));
// Set UEs' position and power
for (int i = 0; i < m_nUser; i++)
{
@@ -281,29 +281,29 @@ LenaPfFfMacSchedulerTestCase1::DoRun (void)
uePhy->SetAttribute ("TxPower", DoubleValue (23.0));
uePhy->SetAttribute ("NoiseFigure", DoubleValue (9.0));
}
lena->EnableRlcTraces();
lena->EnableRlcTraces ();
double simulationTime = 1.0;
double tolerance = 0.1;
Simulator::Stop (Seconds (simulationTime));
Ptr<RlcStatsCalculator> rlcStats = lena->GetRlcStats ();
rlcStats->SetAttribute("EpochDuration", TimeValue(Seconds(simulationTime)));
rlcStats->SetAttribute ("EpochDuration", TimeValue (Seconds (simulationTime)));
Simulator::Run ();
/**
* Check that the downlink assignation is done in a "proportional fair" manner
*/
NS_LOG_INFO("DL - Test with " << m_nUser << " user(s) at distance " << m_dist);
NS_LOG_INFO ("DL - Test with " << m_nUser << " user(s) at distance " << m_dist);
std::vector <uint64_t> dlDataRxed;
for (int i = 0; i < m_nUser; i++)
{
// get the imsi
uint64_t imsi = ueDevs.Get (i)-> GetObject<LteUeNetDevice> ()->GetImsi ();
uint64_t imsi = ueDevs.Get (i)->GetObject<LteUeNetDevice> ()->GetImsi ();
// get the lcId
uint8_t lcId = ueDevs.Get (i)-> GetObject<LteUeNetDevice> ()->GetRrc ()->GetLcIdVector ().at(0);
uint8_t lcId = ueDevs.Get (i)->GetObject<LteUeNetDevice> ()->GetRrc ()->GetLcIdVector ().at (0);
dlDataRxed.push_back (rlcStats->GetDlRxData (imsi, lcId));
NS_LOG_INFO ("\tUser " << i << " imsi " << imsi << " bytes rxed " << (double)dlDataRxed.at (i) << " thr " << (double)dlDataRxed.at (i) / simulationTime << " ref " << m_thrRefDl);
}
@@ -315,20 +315,20 @@ LenaPfFfMacSchedulerTestCase1::DoRun (void)
*/
for (int i = 0; i < m_nUser; i++)
{
NS_TEST_ASSERT_MSG_EQ_TOL ((double)dlDataRxed.at (i) / simulationTime, m_thrRefDl, m_thrRefDl * tolerance, " Unfair Throughput!");
NS_TEST_ASSERT_MSG_EQ_TOL ((double)dlDataRxed.at (i) / simulationTime, m_thrRefDl, m_thrRefDl * tolerance, " Unfair Throughput!");
}
/**
* Check that the uplink assignation is done in a "proportional fair" manner
*/
NS_LOG_INFO("UL - Test with " << m_nUser << " user(s) at distance " << m_dist);
NS_LOG_INFO ("UL - Test with " << m_nUser << " user(s) at distance " << m_dist);
std::vector <uint64_t> ulDataRxed;
for (int i = 0; i < m_nUser; i++)
{
// get the imsi
uint64_t imsi = ueDevs.Get (i)-> GetObject<LteUeNetDevice> ()->GetImsi ();
uint64_t imsi = ueDevs.Get (i)->GetObject<LteUeNetDevice> ()->GetImsi ();
// get the lcId
uint8_t lcId = ueDevs.Get (i)-> GetObject<LteUeNetDevice> ()->GetRrc ()->GetLcIdVector ().at(0);
uint8_t lcId = ueDevs.Get (i)->GetObject<LteUeNetDevice> ()->GetRrc ()->GetLcIdVector ().at (0);
ulDataRxed.push_back (rlcStats->GetUlRxData (imsi, lcId));
NS_LOG_INFO ("\tUser " << i << " imsi " << imsi << " bytes rxed " << (double)ulDataRxed.at (i) << " thr " << (double)ulDataRxed.at (i) / simulationTime << " ref " << m_thrRefUl);
}
@@ -340,7 +340,7 @@ LenaPfFfMacSchedulerTestCase1::DoRun (void)
*/
for (int i = 0; i < m_nUser; i++)
{
NS_TEST_ASSERT_MSG_EQ_TOL ((double)ulDataRxed.at (i) / simulationTime, m_thrRefUl, m_thrRefUl * tolerance, " Unfair Throughput!");
NS_TEST_ASSERT_MSG_EQ_TOL ((double)ulDataRxed.at (i) / simulationTime, m_thrRefUl, m_thrRefUl * tolerance, " Unfair Throughput!");
}
Simulator::Destroy ();
@@ -384,7 +384,7 @@ LenaPfFfMacSchedulerTestCase2::DoRun (void)
// LogComponentEnable ("LtePhy", LOG_LEVEL_ALL);
// LogComponentEnable ("LteEnbPhy", LOG_LEVEL_ALL);
// LogComponentEnable ("LteUePhy", LOG_LEVEL_ALL);
// LogComponentEnable ("LteSpectrumPhy", LOG_LEVEL_ALL);
// LogComponentEnable ("LteInterference", LOG_LEVEL_ALL);
// LogComponentEnable ("LteSinrChunkProcessor", LOG_LEVEL_ALL);
@@ -399,54 +399,54 @@ LenaPfFfMacSchedulerTestCase2::DoRun (void)
// LogComponentEnable ("LteNetDevice", LOG_LEVEL_ALL);
// LogComponentEnable ("LteUeNetDevice", LOG_LEVEL_ALL);
// LogComponentEnable ("LteEnbNetDevice", LOG_LEVEL_ALL);
// LogComponentEnable ("PfFfMacScheduler", LOG_LEVEL_ALL);
LogComponentEnable ("LenaTestPfFfMacCheduler", LOG_LEVEL_ALL);
// LogComponentEnable ("LteAmc", LOG_LEVEL_ALL);
// LogComponentEnable ("RlcStatsCalculator", LOG_LEVEL_ALL);
/**
* Initialize Simulation Scenario: 1 eNB and m_nUser UEs
*/
SetVerbose (true);
Ptr<LenaHelper> lena = CreateObject<LenaHelper> ();
// Create Nodes: eNodeB and UE
NodeContainer enbNodes;
NodeContainer ueNodes;
enbNodes.Create (1);
ueNodes.Create (m_nUser);
// Install Mobility Model
MobilityHelper mobility;
mobility.SetMobilityModel ("ns3::ConstantPositionMobilityModel");
mobility.Install (enbNodes);
mobility.SetMobilityModel ("ns3::ConstantPositionMobilityModel");
mobility.Install (ueNodes);
// Create Devices and install them in the Nodes (eNB and UE)
NetDeviceContainer enbDevs;
NetDeviceContainer ueDevs;
lena->SetSchedulerType ("ns3::PfFfMacScheduler");
enbDevs = lena->InstallEnbDevice (enbNodes);
ueDevs = lena->InstallUeDevice (ueNodes);
// Attach a UE to a eNB
lena->Attach (ueDevs, enbDevs.Get (0));
// Activate an EPS bearer
enum EpsBearer::Qci q = EpsBearer::GBR_CONV_VOICE;
EpsBearer bearer (q);
lena->ActivateEpsBearer (ueDevs, bearer);
lena->SetAttribute ("PropagationModel", StringValue ("ns3::FriisSpectrumPropagationLossModel"));
Ptr<LteEnbNetDevice> lteEnbDev = enbDevs.Get (0)->GetObject<LteEnbNetDevice> ();
Ptr<LteEnbPhy> enbPhy = lteEnbDev->GetPhy ();
enbPhy->SetAttribute ("TxPower", DoubleValue (30.0));
enbPhy->SetAttribute ("NoiseFigure", DoubleValue (5.0));
// Set UEs' position and power
for (int i = 0; i < m_nUser; i++)
{
@@ -457,34 +457,34 @@ LenaPfFfMacSchedulerTestCase2::DoRun (void)
uePhy->SetAttribute ("TxPower", DoubleValue (23.0));
uePhy->SetAttribute ("NoiseFigure", DoubleValue (9.0));
}
lena->EnableRlcTraces();
lena->EnableRlcTraces ();
double simulationTime = 0.4;
double tolerance = 0.1;
Simulator::Stop (Seconds (simulationTime));
Ptr<RlcStatsCalculator> rlcStats = lena->GetRlcStats ();
rlcStats->SetAttribute("EpochDuration", TimeValue(Seconds(simulationTime)));
rlcStats->SetAttribute ("EpochDuration", TimeValue (Seconds (simulationTime)));
Simulator::Run ();
NS_LOG_INFO("DL - Test with " << m_nUser << " user(s)");
NS_LOG_INFO ("DL - Test with " << m_nUser << " user(s)");
std::vector <uint64_t> dlDataRxed;
double totalData = 0;
double totalEstThrPf = 0;
for (int i = 0; i < m_nUser; i++)
{
// get the imsi
uint64_t imsi = ueDevs.Get (i)-> GetObject<LteUeNetDevice> ()->GetImsi ();
uint64_t imsi = ueDevs.Get (i)->GetObject<LteUeNetDevice> ()->GetImsi ();
// get the lcId
uint8_t lcId = ueDevs.Get (i)-> GetObject<LteUeNetDevice> ()->GetRrc ()->GetLcIdVector ().at(0);
uint8_t lcId = ueDevs.Get (i)->GetObject<LteUeNetDevice> ()->GetRrc ()->GetLcIdVector ().at (0);
dlDataRxed.push_back (rlcStats->GetDlRxData (imsi, lcId));
totalData += (double)dlDataRxed.at (i);
NS_LOG_INFO ("\tUser " << i << " dist " << m_dist.at (i) << " imsi " << imsi << " bytes rxed " << (double)dlDataRxed.at (i) << " thr " << (double)dlDataRxed.at (i) / simulationTime << " ref " << m_nUser);
totalEstThrPf += m_estThrPfDl.at (i);
}
/**
* Check that the assignation is done in a "proportional fair" manner among users
* with different SINRs: the bandwidht should be distributed according to the
@@ -495,27 +495,27 @@ LenaPfFfMacSchedulerTestCase2::DoRun (void)
double thrRatio = (double)dlDataRxed.at (i) / totalData;
double estThrRatio = (double)m_estThrPfDl.at (i) / totalEstThrPf;
NS_LOG_INFO ("\tUser " << i << " thrRatio " << thrRatio << " estThrRatio " << estThrRatio);
NS_TEST_ASSERT_MSG_EQ_TOL (estThrRatio, thrRatio, tolerance, " Unfair Throughput!");
NS_TEST_ASSERT_MSG_EQ_TOL (estThrRatio, thrRatio, tolerance, " Unfair Throughput!");
}
/**
* Check that the assignation in uplink is done in a round robin manner.
*/
NS_LOG_INFO ("UL - Test with " << m_nUser);
std::vector <uint64_t> ulDataRxed;
for (int i = 0; i < m_nUser; i++)
{
// get the imsi
uint64_t imsi = ueDevs.Get (i)->GetObject<LteUeNetDevice> ()->GetImsi ();
// get the lcId
uint8_t lcId = ueDevs.Get (i)->GetObject<LteUeNetDevice> ()->GetRrc ()->GetLcIdVector ().at (0);
ulDataRxed.push_back (rlcStats->GetUlRxData (imsi, lcId));
NS_LOG_INFO ("\tUser " << i << " dist " << m_dist.at (i) << " bytes rxed " << (double)ulDataRxed.at (i) << " thr " << (double)ulDataRxed.at (i) / simulationTime << " ref " << (double)m_estThrPfUl.at (i));
NS_TEST_ASSERT_MSG_EQ_TOL ((double)ulDataRxed.at (i) / simulationTime, (double)m_estThrPfUl.at (i), (double)m_estThrPfUl.at (i) * tolerance, " Unfair Throughput!");
}
/**
* Check that the assignation in uplink is done in a round robin manner.
*/
NS_LOG_INFO("UL - Test with " << m_nUser);
std::vector <uint64_t> ulDataRxed;
for (int i = 0; i < m_nUser; i++)
{
// get the imsi
uint64_t imsi = ueDevs.Get (i)-> GetObject<LteUeNetDevice> ()->GetImsi ();
// get the lcId
uint8_t lcId = ueDevs.Get (i)-> GetObject<LteUeNetDevice> ()->GetRrc ()->GetLcIdVector().at(0);
ulDataRxed.push_back (rlcStats->GetUlRxData (imsi, lcId));
NS_LOG_INFO ("\tUser " << i << " dist " << m_dist.at (i) << " bytes rxed " << (double)ulDataRxed.at (i) << " thr " << (double)ulDataRxed.at (i) / simulationTime << " ref " << (double)m_estThrPfUl.at (i));
NS_TEST_ASSERT_MSG_EQ_TOL ((double)ulDataRxed.at (i) / simulationTime, (double)m_estThrPfUl.at (i), (double)m_estThrPfUl.at (i) * tolerance, " Unfair Throughput!");
}
Simulator::Destroy ();
}

View File

@@ -39,32 +39,32 @@ using namespace ns3;
*/
class LenaPfFfMacSchedulerTestCase1 : public TestCase
{
public:
LenaPfFfMacSchedulerTestCase1 (uint16_t nUser, uint16_t nLc, uint16_t dist, double thrRefDl, double thrRefUl);
virtual ~LenaPfFfMacSchedulerTestCase1 ();
public:
LenaPfFfMacSchedulerTestCase1 (uint16_t nUser, uint16_t nLc, uint16_t dist, double thrRefDl, double thrRefUl);
virtual ~LenaPfFfMacSchedulerTestCase1 ();
private:
virtual void DoRun (void);
uint16_t m_nUser;
uint16_t m_nLc;
uint16_t m_dist;
double m_thrRefDl;
double m_thrRefUl;
private:
virtual void DoRun (void);
uint16_t m_nUser;
uint16_t m_nLc;
uint16_t m_dist;
double m_thrRefDl;
double m_thrRefUl;
};
class LenaPfFfMacSchedulerTestCase2 : public TestCase
{
public:
LenaPfFfMacSchedulerTestCase2 (uint16_t nUser, std::vector<uint16_t> dist, std::vector<uint32_t> estThrPfDl, std::vector<uint32_t> estThrPfUl);
virtual ~LenaPfFfMacSchedulerTestCase2 ();
private:
virtual void DoRun (void);
uint16_t m_nUser;
std::vector<uint16_t> m_dist;
std::vector<uint32_t> m_estThrPfDl;
std::vector<uint32_t> m_estThrPfUl;
public:
LenaPfFfMacSchedulerTestCase2 (uint16_t nUser, std::vector<uint16_t> dist, std::vector<uint32_t> estThrPfDl, std::vector<uint32_t> estThrPfUl);
virtual ~LenaPfFfMacSchedulerTestCase2 ();
private:
virtual void DoRun (void);
uint16_t m_nUser;
std::vector<uint16_t> m_dist;
std::vector<uint32_t> m_estThrPfDl;
std::vector<uint32_t> m_estThrPfUl;
};
@@ -72,8 +72,8 @@ class LenaPfFfMacSchedulerTestCase2 : public TestCase
class LenaTestPfFfMacSchedulerSuite : public TestSuite
{
public:
LenaTestPfFfMacSchedulerSuite ();
public:
LenaTestPfFfMacSchedulerSuite ();
};

View File

@@ -50,12 +50,12 @@ using namespace ns3;
LenaTestRrFfMacSchedulerSuite::LenaTestRrFfMacSchedulerSuite ()
: TestSuite ("lte-rr-ff-mac-scheduler", SYSTEM)
: TestSuite ("lte-rr-ff-mac-scheduler", SYSTEM)
{
SetVerbose (true);
NS_LOG_INFO ("creating LenaRrFfMacSchedulerTestCase");
// DOWNLINK- DISTANCE 0 -> MCS 28 -> Itbs 26 (from table 7.1.7.2.1-1 of 36.213)
// 1 user -> 24 PRB at Itbs 26 -> 2196 -> 2196000 bytes/sec
// 3 users -> 8 PRB at Itbs 26 -> 749 -> 749000 bytes/sec
@@ -76,14 +76,14 @@ LenaTestRrFfMacSchedulerSuite::LenaTestRrFfMacSchedulerSuite ()
AddTestCase (new LenaRrFfMacSchedulerTestCase (9,0,0,185000,185000));
AddTestCase (new LenaRrFfMacSchedulerTestCase (12,0,0,185000,185000));
AddTestCase (new LenaRrFfMacSchedulerTestCase (15,0,0,148000,89000));
// DOWNLINK - DISTANCE 3000 -> MCS 22 -> Itbs 20 (from table 7.1.7.2.1-1 of 36.213)
// 1 user -> 24 PRB at Itbs 20 -> 1383 -> 1383000 bytes/sec
// 3 users -> 8 PRB at Itbs 20 -> 469 -> 469000 bytes/sec
// 6 users -> 4 PRB at Itbs 20 -> 233 -> 233000 bytes/sec
// 9 user -> 2 PRB at Itbs 20 -> 113 -> 113000 bytes/sec
// 12 users -> 2 PRB at Itbs 20 -> 113 -> 113000 bytes/sec
// 15 users -> 2 PRB at Itbs 20 * 0.8 -> 90.4 -> 90400 bytes/sec
// 15 users -> 2 PRB at Itbs 20 * 0.8 -> 90.4 -> 90400 bytes/sec
// UPLINK - DISTANCE 3000 -> MCS 20 -> Itbs 18 (from table 7.1.7.2.1-1 of 36.213)
// 1 user -> 25 PRB at Itbs 18 -> 1239 -> 1239000 bytes/sec
// 3 users -> 8 PRB at Itbs 18 -> 389 -> 389000 bytes/sec
@@ -97,28 +97,28 @@ LenaTestRrFfMacSchedulerSuite::LenaTestRrFfMacSchedulerSuite ()
AddTestCase (new LenaRrFfMacSchedulerTestCase (9,0,3000,113000,97000));
AddTestCase (new LenaRrFfMacSchedulerTestCase (12,0,3000,113000,97000));
AddTestCase (new LenaRrFfMacSchedulerTestCase (15,0,3000,90400,47000));
// DOWNLINK - DISTANCE 6000 -> MCS 16 -> Itbs 15 (from table 7.1.7.2.1-1 of 36.213)
// 1 user -> 24 PRB at Itbs 15 -> 903 -> 903000 bytes/sec
// 3 users -> 8 PRB at Itbs 15 -> 309 -> 309000 bytes/sec
// 6 users -> 4 PRB at Itbs 15 -> 153 -> 153000 bytes/sec
// 9 user -> 2 PRB at Itbs 15 -> 75 -> 75000 bytes/sec
// 12 users -> 2 PRB at Itbs 15 -> 75 -> 75000 bytes/sec
// 15 users -> 2 PRB at Itbs 15 * 0.8 -> 60 -> 60000 bytes/sec
// 15 users -> 2 PRB at Itbs 15 * 0.8 -> 60 -> 60000 bytes/sec
// UPLINK - DISTANCE 6000 -> MCS 12 -> Itbs 11 (from table 7.1.7.2.1-1 of 36.213)
// 1 user -> 25 PRB at Itbs 11 -> 621 -> 621000 bytes/sec
// 3 users -> 8 PRB at Itbs 11 -> 201 -> 201000 bytes/sec
// 6 users -> 4 PRB at Itbs 11 -> 97 -> 97000 bytes/sec
// 9 user -> 2 PRB at Itbs 11 -> 47 -> 47000 bytes/sec
// 12 users -> 2 PRB at Itbs 11 -> 47 -> 47000 bytes/sec
// 15 users -> 1 PRB at Itbs 11 -> 22 -> 22000 bytes/sec
// 15 users -> 1 PRB at Itbs 11 -> 22 -> 22000 bytes/sec
AddTestCase (new LenaRrFfMacSchedulerTestCase (1,0,6000,903000,621000));
AddTestCase (new LenaRrFfMacSchedulerTestCase (3,0,6000,309000,201000));
AddTestCase (new LenaRrFfMacSchedulerTestCase (6,0,6000,153000,97000));
AddTestCase (new LenaRrFfMacSchedulerTestCase (9,0,6000,75000,47000));
AddTestCase (new LenaRrFfMacSchedulerTestCase (12,0,6000,75000,47000));
AddTestCase (new LenaRrFfMacSchedulerTestCase (15,0,6000,60000,22000));
// DOWNLINK - DISTANCE 9000 -> MCS 12 -> Itbs 11 (from table 7.1.7.2.1-1 of 36.213)
// 1 user -> 24 PRB at Itbs 11 -> 597 -> 597000 bytes/sec
// 3 users -> 8 PRB at Itbs 11 -> 201 -> 201000 bytes/sec
@@ -132,46 +132,46 @@ LenaTestRrFfMacSchedulerSuite::LenaTestRrFfMacSchedulerSuite ()
// 6 users -> 4 PRB at Itbs 8 -> 67 -> 67000 bytes/sec
// 9 user -> 2 PRB at Itbs 8 -> 32 -> 32000 bytes/sec
// 12 users -> 2 PRB at Itbs 8 -> 32 -> 32000 bytes/sec
// 15 users -> 1 PRB at Itbs 8 -> 15 -> 15000 bytes/sec
// 15 users -> 1 PRB at Itbs 8 -> 15 -> 15000 bytes/sec
AddTestCase (new LenaRrFfMacSchedulerTestCase (1,0,9000,597000,437000));
AddTestCase (new LenaRrFfMacSchedulerTestCase (3,0,9000,201000,137000));
AddTestCase (new LenaRrFfMacSchedulerTestCase (6,0,9000,97000,67000));
AddTestCase (new LenaRrFfMacSchedulerTestCase (9,0,9000,47000,32000));
AddTestCase (new LenaRrFfMacSchedulerTestCase (12,0,9000,47000,32000));
AddTestCase (new LenaRrFfMacSchedulerTestCase (15,0,9000,37600,15000));
// DOWNLINK - DISTANCE 15000 -> MCS 6 -> Itbs 6 (from table 7.1.7.2.1-1 of 36.213)
// 1 user -> 24 PRB at Itbs 6 -> 309 -> 309000 bytes/sec
// 3 users -> 8 PRB at Itbs 6 -> 101 -> 101000 bytes/sec
// 6 users -> 4 PRB at Itbs 6 -> 49 -> 49000 bytes/sec
// 9 user -> 2 PRB at Itbs 6 -> 22 -> 22000 bytes/sec
// 12 users -> 2 PRB at Itbs 6 -> 22 -> 22000 bytes/sec
// 15 users -> 2 PRB at Itbs 6 * 0.8 -> 17.6 -> 17600 bytes/sec
// 15 users -> 2 PRB at Itbs 6 * 0.8 -> 17.6 -> 17600 bytes/sec
// UPLINK - DISTANCE 15000 -> MCS 6 -> Itbs 6 (from table 7.1.7.2.1-1 of 36.213)
// 1 user -> 25 PRB at Itbs 6 -> 233 -> 233000 bytes/sec
// 3 users -> 8 PRB at Itbs 6 -> 69 -> 69000 bytes/sec
// 6 users -> 4 PRB at Itbs 6 -> 32 -> 32000 bytes/sec
// 9 user -> 2 PRB at Itbs 6 -> 15 -> 15000 bytes/sec
// 12 users -> 2 PRB at Itbs 6 -> 15 -> 15000 bytes/sec
// 15 users -> 1 PRB at Itbs 6 -> 7 -> 7000 bytes/sec
// 15 users -> 1 PRB at Itbs 6 -> 7 -> 7000 bytes/sec
AddTestCase (new LenaRrFfMacSchedulerTestCase (1,0,15000,309000,233000));
AddTestCase (new LenaRrFfMacSchedulerTestCase (3,0,15000,101000,69000));
AddTestCase (new LenaRrFfMacSchedulerTestCase (6,0,15000,49000,32000));
AddTestCase (new LenaRrFfMacSchedulerTestCase (9,0,15000,22000,15000));
AddTestCase (new LenaRrFfMacSchedulerTestCase (12,0,15000,22000,15000));
AddTestCase (new LenaRrFfMacSchedulerTestCase (15,0,15000,17600,7000));
}
static LenaTestRrFfMacSchedulerSuite lenaTestRrFfMacSchedulerSuite;
LenaRrFfMacSchedulerTestCase::LenaRrFfMacSchedulerTestCase (uint16_t nUser, uint16_t nLc, uint16_t dist, double thrRefDl, double thrRefUl)
: TestCase (""),
m_nUser (nUser),
m_nLc (nLc),
m_dist (dist),
m_thrRefDl (thrRefDl),
m_thrRefUl (thrRefUl)
m_nUser (nUser),
m_nLc (nLc),
m_dist (dist),
m_thrRefDl (thrRefDl),
m_thrRefUl (thrRefUl)
{
std::ostringstream oss;
oss << nUser << " UEs, distance " << dist << " m" ;
@@ -214,51 +214,51 @@ LenaRrFfMacSchedulerTestCase::DoRun (void)
LogComponentEnable ("LenaTestRrFfMacCheduler", LOG_LEVEL_ALL);
// LogComponentEnable ("LteAmc", LOG_LEVEL_ALL);
// LogComponentEnable ("RlcStatsCalculator", LOG_LEVEL_ALL);
/**
* Initialize Simulation Scenario: 1 eNB and m_nUser UEs
*/
SetVerbose (true);
Ptr<LenaHelper> lena = CreateObject<LenaHelper> ();
// Create Nodes: eNodeB and UE
NodeContainer enbNodes;
NodeContainer ueNodes;
enbNodes.Create (1);
ueNodes.Create (m_nUser);
// Install Mobility Model
MobilityHelper mobility;
mobility.SetMobilityModel ("ns3::ConstantPositionMobilityModel");
mobility.Install (enbNodes);
mobility.SetMobilityModel ("ns3::ConstantPositionMobilityModel");
mobility.Install (ueNodes);
// Create Devices and install them in the Nodes (eNB and UE)
NetDeviceContainer enbDevs;
NetDeviceContainer ueDevs;
lena->SetSchedulerType ("ns3::RrFfMacScheduler");
enbDevs = lena->InstallEnbDevice (enbNodes);
ueDevs = lena->InstallUeDevice (ueNodes);
// Attach a UE to a eNB
lena->Attach (ueDevs, enbDevs.Get (0));
lena->Attach (ueDevs, enbDevs.Get (0));
// Activate an EPS bearer
enum EpsBearer::Qci q = EpsBearer::GBR_CONV_VOICE;
EpsBearer bearer (q);
lena->ActivateEpsBearer (ueDevs, bearer);
lena->SetAttribute ("PropagationModel", StringValue ("ns3::FriisSpectrumPropagationLossModel"));
Ptr<LteEnbNetDevice> lteEnbDev = enbDevs.Get (0)->GetObject<LteEnbNetDevice> ();
Ptr<LteEnbPhy> enbPhy = lteEnbDev->GetPhy ();
enbPhy->SetAttribute ("TxPower", DoubleValue (30.0));
enbPhy->SetAttribute ("NoiseFigure", DoubleValue (5.0));
// Set UEs' position and power
for (int i = 0; i < m_nUser; i++)
{
@@ -269,45 +269,45 @@ LenaRrFfMacSchedulerTestCase::DoRun (void)
uePhy->SetAttribute ("TxPower", DoubleValue (23.0));
uePhy->SetAttribute ("NoiseFigure", DoubleValue (9.0));
}
lena->EnableRlcTraces ();
double simulationTime = 0.4;
double tolerance = 0.1;
Simulator::Stop (Seconds (simulationTime));
Ptr<RlcStatsCalculator> rlcStats = lena->GetRlcStats ();
rlcStats->SetAttribute ("EpochDuration", TimeValue(Seconds(simulationTime)));
Ptr<RlcStatsCalculator> rlcStats = lena->GetRlcStats ();
rlcStats->SetAttribute ("EpochDuration", TimeValue (Seconds (simulationTime)));
Simulator::Run ();
/**
* Check that the assignation is done in a RR fashion
*/
NS_LOG_INFO("DL - Test with " << m_nUser << " user(s) at distance " << m_dist);
NS_LOG_INFO ("DL - Test with " << m_nUser << " user(s) at distance " << m_dist);
std::vector <uint64_t> dlDataRxed;
for (int i = 0; i < m_nUser; i++)
{
// get the imsi
uint64_t imsi = ueDevs.Get (i)-> GetObject<LteUeNetDevice> ()->GetImsi ();
uint64_t imsi = ueDevs.Get (i)->GetObject<LteUeNetDevice> ()->GetImsi ();
// get the lcId
uint8_t lcId = ueDevs.Get (i)-> GetObject<LteUeNetDevice> ()->GetRrc ()->GetLcIdVector().at(0);
uint8_t lcId = ueDevs.Get (i)->GetObject<LteUeNetDevice> ()->GetRrc ()->GetLcIdVector ().at (0);
dlDataRxed.push_back (rlcStats->GetDlRxData (imsi, lcId));
NS_LOG_INFO ("\tUser " << i << " imsi " << imsi << " bytes rxed " << (double)dlDataRxed.at (i) << " thr " << (double)dlDataRxed.at (i) / simulationTime << " ref " << m_thrRefDl);
NS_TEST_ASSERT_MSG_EQ_TOL ((double)dlDataRxed.at (i) / simulationTime, m_thrRefDl, m_thrRefDl * tolerance, " Unfair Throughput!");
NS_TEST_ASSERT_MSG_EQ_TOL ((double)dlDataRxed.at (i) / simulationTime, m_thrRefDl, m_thrRefDl * tolerance, " Unfair Throughput!");
}
NS_LOG_INFO("UL - Test with " << m_nUser << " user(s) at distance " << m_dist);
NS_LOG_INFO ("UL - Test with " << m_nUser << " user(s) at distance " << m_dist);
std::vector <uint64_t> ulDataRxed;
for (int i = 0; i < m_nUser; i++)
{
// get the imsi
uint64_t imsi = ueDevs.Get (i)-> GetObject<LteUeNetDevice> ()->GetImsi ();
uint64_t imsi = ueDevs.Get (i)->GetObject<LteUeNetDevice> ()->GetImsi ();
// get the lcId
uint8_t lcId = ueDevs.Get (i)-> GetObject<LteUeNetDevice> ()->GetRrc ()->GetLcIdVector().at(0);
uint8_t lcId = ueDevs.Get (i)->GetObject<LteUeNetDevice> ()->GetRrc ()->GetLcIdVector ().at (0);
ulDataRxed.push_back (rlcStats->GetUlRxData (imsi, lcId));
NS_LOG_INFO ("\tUser " << i << " imsi " << imsi << " bytes txed " << (double)ulDataRxed.at (i) << " thr " << (double)ulDataRxed.at (i) / simulationTime << " ref " << m_thrRefUl);
NS_TEST_ASSERT_MSG_EQ_TOL ((double)ulDataRxed.at (i) / simulationTime, m_thrRefUl, m_thrRefUl * tolerance, " Unfair Throughput!");
NS_TEST_ASSERT_MSG_EQ_TOL ((double)ulDataRxed.at (i) / simulationTime, m_thrRefUl, m_thrRefUl * tolerance, " Unfair Throughput!");
}
Simulator::Destroy ();

View File

@@ -39,26 +39,26 @@ using namespace ns3;
*/
class LenaRrFfMacSchedulerTestCase : public TestCase
{
public:
LenaRrFfMacSchedulerTestCase (uint16_t nUser, uint16_t nLc, uint16_t dist, double thrRefDl, double thrRefUl);
virtual ~LenaRrFfMacSchedulerTestCase ();
public:
LenaRrFfMacSchedulerTestCase (uint16_t nUser, uint16_t nLc, uint16_t dist, double thrRefDl, double thrRefUl);
virtual ~LenaRrFfMacSchedulerTestCase ();
private:
virtual void DoRun (void);
uint16_t m_nUser;
uint16_t m_nLc;
uint16_t m_dist;
double m_thrRefDl;
double m_thrRefUl;
private:
virtual void DoRun (void);
uint16_t m_nUser;
uint16_t m_nLc;
uint16_t m_dist;
double m_thrRefDl;
double m_thrRefUl;
};
class LenaTestRrFfMacSchedulerSuite : public TestSuite
{
public:
LenaTestRrFfMacSchedulerSuite ();
public:
LenaTestRrFfMacSchedulerSuite ();
};

View File

@@ -38,10 +38,10 @@ public:
protected:
Ptr<SpectrumModel> m_actual;
Ptr<SpectrumModel> m_expected;
Ptr<SpectrumModel> m_expected;
private:
virtual void DoRun (void);
private:
virtual void DoRun (void);
};
LteSpectrumModelTestCase::LteSpectrumModelTestCase (const char* str, uint16_t earfcn, uint8_t bw, std::vector<double> fcs)
@@ -49,7 +49,7 @@ LteSpectrumModelTestCase::LteSpectrumModelTestCase (const char* str, uint16_t ea
{
NS_LOG_FUNCTION (this << str << earfcn << bw);
m_actual = LteSpectrumValueHelper::GetSpectrumModel (earfcn, bw);
m_expected = Create<SpectrumModel> (fcs);
m_expected = Create<SpectrumModel> (fcs);
}
LteSpectrumModelTestCase::~LteSpectrumModelTestCase ()
@@ -74,18 +74,18 @@ public:
protected:
Ptr<SpectrumValue> m_actual;
Ptr<SpectrumValue> m_expected;
Ptr<SpectrumValue> m_expected;
private:
virtual void DoRun (void);
private:
virtual void DoRun (void);
};
LteNoisePsdTestCase::LteNoisePsdTestCase (const char* str, uint16_t earfcn, uint8_t bw, double noiseFigureDb, SpectrumValue& expected)
: TestCase (str),
m_actual (LteSpectrumValueHelper::CreateNoisePowerSpectralDensity (earfcn, bw, noiseFigureDb)),
m_expected (Create<SpectrumValue> (expected))
m_actual (LteSpectrumValueHelper::CreateNoisePowerSpectralDensity (earfcn, bw, noiseFigureDb)),
m_expected (Create<SpectrumValue> (expected))
{
NS_LOG_FUNCTION (this << str << earfcn << bw << noiseFigureDb);
NS_LOG_FUNCTION (this << str << earfcn << bw << noiseFigureDb);
}
LteNoisePsdTestCase::~LteNoisePsdTestCase ()
@@ -111,18 +111,18 @@ public:
protected:
Ptr<SpectrumValue> m_actual;
Ptr<SpectrumValue> m_expected;
Ptr<SpectrumValue> m_expected;
private:
virtual void DoRun (void);
private:
virtual void DoRun (void);
};
LteTxPsdTestCase::LteTxPsdTestCase (const char* str, uint16_t earfcn, uint8_t bw, double txPowerDbm, std::vector<int> activeRbs, SpectrumValue& expected)
: TestCase (str),
m_actual (LteSpectrumValueHelper::CreateTxPowerSpectralDensity (earfcn, bw, txPowerDbm, activeRbs)),
m_expected (Create<SpectrumValue> (expected))
m_actual (LteSpectrumValueHelper::CreateTxPowerSpectralDensity (earfcn, bw, txPowerDbm, activeRbs)),
m_expected (Create<SpectrumValue> (expected))
{
NS_LOG_FUNCTION (this << str << earfcn << bw << txPowerDbm);
NS_LOG_FUNCTION (this << str << earfcn << bw << txPowerDbm);
}
LteTxPsdTestCase::~LteTxPsdTestCase ()

View File

@@ -194,7 +194,7 @@ LteUplinkSinrTestCase::DoRun (void)
// Phy tags
LtePhyTag pktTag[numOfPbs];
/**
* Build packet burst (Data and interference)
*/
@@ -234,7 +234,7 @@ LteUplinkSinrTestCase::DoRun (void)
{
// Create phy tag (different for each packet burst)
// and add to the first packet
pktTag[pb] = LtePhyTag (100 * (pb+1));
pktTag[pb] = LtePhyTag (100 * (pb + 1));
pkt[pb][i]->AddPacketTag ( pktTag[pb] );
}
@@ -279,13 +279,13 @@ LteUplinkSinrTestCase::DoRun (void)
*/
// 2 UEs send data to the eNB through 2 subcarriers
Simulator::Schedule (ts, &LteSpectrumPhy::StartRx, ulPhy, packetBursts[0], m_sv1, ulPhy->GetSpectrumType(), ds);
Simulator::Schedule (ts, &LteSpectrumPhy::StartRx, ulPhy, packetBursts[1], m_sv2, ulPhy->GetSpectrumType(), ds);
Simulator::Schedule (ts, &LteSpectrumPhy::StartRx, ulPhy, packetBursts[0], m_sv1, ulPhy->GetSpectrumType (), ds);
Simulator::Schedule (ts, &LteSpectrumPhy::StartRx, ulPhy, packetBursts[1], m_sv2, ulPhy->GetSpectrumType (), ds);
Simulator::Schedule (ti1, &LteSpectrumPhy::StartRx, ulPhy, packetBursts[2], i1, ulPhy->GetSpectrumType(), di1);
Simulator::Schedule (ti2, &LteSpectrumPhy::StartRx, ulPhy, packetBursts[3], i2, ulPhy->GetSpectrumType(), di2);
Simulator::Schedule (ti3, &LteSpectrumPhy::StartRx, ulPhy, packetBursts[4], i3, ulPhy->GetSpectrumType(), di3);
Simulator::Schedule (ti4, &LteSpectrumPhy::StartRx, ulPhy, packetBursts[5], i4, ulPhy->GetSpectrumType(), di4);
Simulator::Schedule (ti1, &LteSpectrumPhy::StartRx, ulPhy, packetBursts[2], i1, ulPhy->GetSpectrumType (), di1);
Simulator::Schedule (ti2, &LteSpectrumPhy::StartRx, ulPhy, packetBursts[3], i2, ulPhy->GetSpectrumType (), di2);
Simulator::Schedule (ti3, &LteSpectrumPhy::StartRx, ulPhy, packetBursts[4], i3, ulPhy->GetSpectrumType (), di3);
Simulator::Schedule (ti4, &LteSpectrumPhy::StartRx, ulPhy, packetBursts[5], i4, ulPhy->GetSpectrumType (), di4);
Simulator::Stop (Seconds (5.0));
Simulator::Run ();

View File

@@ -41,17 +41,17 @@ public:
class LteUplinkSinrTestCase : public TestCase
{
public:
LteUplinkSinrTestCase (Ptr<SpectrumValue> sv1, Ptr<SpectrumValue> sv2, Ptr<SpectrumValue> sinr, std::string name);
virtual ~LteUplinkSinrTestCase ();
public:
LteUplinkSinrTestCase (Ptr<SpectrumValue> sv1, Ptr<SpectrumValue> sv2, Ptr<SpectrumValue> sinr, std::string name);
virtual ~LteUplinkSinrTestCase ();
private:
virtual void DoRun (void);
private:
virtual void DoRun (void);
Ptr<SpectrumValue> m_sv1;
Ptr<SpectrumValue> m_sv2;
Ptr<const SpectrumModel> m_sm;
Ptr<SpectrumValue> m_sinr;
Ptr<SpectrumValue> m_sv1;
Ptr<SpectrumValue> m_sv2;
Ptr<const SpectrumModel> m_sm;
Ptr<SpectrumValue> m_sinr;
};