Bug-fix on m_macChTtiDelay management on UE-eNB PHY and consequently update RR-PF schedulers and tests
--- a/src/lte/model/lte-enb-mac.cc Mon Apr 23 15:46:14 2012 +0200
+++ b/src/lte/model/lte-enb-mac.cc Wed Apr 25 15:57:29 2012 +0200
@@ -603,6 +603,7 @@
NS_LOG_FUNCTION (this << " rnti=" << rnti);
FfMacCschedSapProvider::CschedUeConfigReqParameters params;
params.m_rnti = rnti;
+ params.m_transmissionMode = 0; // set to default value (SISO) for avoiding random initialization (valgrind error)
m_cschedSapProvider->CschedUeConfigReq (params);
}
--- a/src/lte/model/lte-enb-phy.cc Mon Apr 23 15:46:14 2012 +0200
+++ b/src/lte/model/lte-enb-phy.cc Wed Apr 25 15:57:29 2012 +0200
@@ -122,6 +122,11 @@
{
m_enbPhySapProvider = new EnbMemberLteEnbPhySapProvider (this);
Simulator::ScheduleNow (&LteEnbPhy::StartFrame, this);
+ for (int i = 0; i < m_macChTtiDelay; i++)
+ {
+ std::list<UlDciIdealControlMessage> l;
+ m_ulDciQueue.push_back (l);
+ }
}
TypeId
@@ -150,7 +155,7 @@
MakeDoubleChecker<double> ())
.AddAttribute ("MacToChannelDelay",
"The delay in TTI units that occurs between a scheduling decision in the MAC and the actual start of the transmission by the PHY. This is intended to be used to model the latency of real PHY and MAC implementations.",
- UintegerValue (1),
+ UintegerValue (2),
MakeUintegerAccessor (&LteEnbPhy::SetMacChDelay,
&LteEnbPhy::GetMacChDelay),
MakeUintegerChecker<uint8_t> ())
@@ -274,9 +279,6 @@
void
LteEnbPhy::DoSendMacPdu (Ptr<Packet> p)
{
-// NS_LOG_FUNCTION (this << pb->GetNPackets () << pb->GetSize ());
-// return GetDownlinkSpectrumPhy ()->StartTx (pb);
-
NS_LOG_FUNCTION (this);
SetMacPdu (p);
}
@@ -354,6 +356,31 @@
++m_nrSubFrames;
NS_LOG_INFO ("-----sub frame " << m_nrSubFrames << "-----");
+
+ // update info on TB to be received
+ std::list<UlDciIdealControlMessage> uldcilist = DequeueUlDci ();
+ std::list<UlDciIdealControlMessage>::iterator dciIt = uldcilist.begin ();
+ for (dciIt = uldcilist.begin (); dciIt!=uldcilist.end (); dciIt++)
+ {
+ std::map <uint16_t, Ptr<LteUePhy> >::iterator it2;
+ it2 = m_ueAttached.find ((*dciIt).GetDci ().m_rnti);
+
+ if (it2 == m_ueAttached.end ())
+ {
+ NS_LOG_ERROR ("UE not attached");
+ }
+ else
+ {
+ // send info of TB to LteSpectrumPhy
+ // translate to allocation map
+ std::vector <int> rbMap;
+ for (int i = (*dciIt).GetDci ().m_rbStart; i < (*dciIt).GetDci ().m_rbStart + (*dciIt).GetDci ().m_rbLen; i++)
+ {
+ rbMap.push_back (i);
+ }
+ m_uplinkSpectrumPhy->AddExpectedTb ((*dciIt).GetDci ().m_rnti, (*dciIt).GetDci ().m_tbSize, (*dciIt).GetDci ().m_mcs, rbMap, 0 /* always SISO*/);
+ }
+ }
// send the current burst of control messages
std::list<Ptr<IdealControlMessage> > ctrlMsg = GetControlMessages ();
@@ -399,6 +426,7 @@
{
std::map <uint16_t, Ptr<LteUePhy> >::iterator it2;
Ptr<UlDciIdealControlMessage> dci = DynamicCast<UlDciIdealControlMessage> (msg);
+ QueueUlDci (*dci);
it2 = m_ueAttached.find (dci->GetDci ().m_rnti);
if (it2 == m_ueAttached.end ())
@@ -408,14 +436,7 @@
else
{
(*it2).second->ReceiveIdealControlMessage (msg);
- // send info of TB to LteSpectrumPhy
- // translate to allocation map
- std::vector <int> rbMap;
- for (int i = dci->GetDci ().m_rbStart; i < dci->GetDci ().m_rbStart + dci->GetDci ().m_rbLen; i++)
- {
- rbMap.push_back (i);
- }
- m_uplinkSpectrumPhy->AddExpectedTb (dci->GetDci ().m_rnti, dci->GetDci ().m_tbSize, dci->GetDci ().m_mcs, rbMap, 0 /* always SISO*/);
+ QueueUlDci (*dci);
}
}
ctrlMsg.pop_front ();
@@ -428,7 +449,7 @@
Ptr<PacketBurst> pb = GetPacketBurst ();
if (pb)
{
- NS_LOG_LOGIC (this << " start TX");
+ NS_LOG_LOGIC (this << " eNB start TX");
m_downlinkSpectrumPhy->StartTx (pb);
}
@@ -492,6 +513,7 @@
for (it = sinr.ConstValuesBegin (); it != sinr.ConstValuesEnd (); it++)
{
double sinrdb = 10 * log10 ((*it));
+// NS_LOG_DEBUG ("ULCQI RB " << i << " value " << sinrdb);
// convert from double to fixed point notation Sxxxxxxxxxxx.xxx
int16_t sinrFp = LteFfConverter::double2fpS11dot3 (sinrdb);
ulcqi.m_sinr.push_back (sinrFp);
@@ -508,5 +530,34 @@
// UL supports only SISO MODE
}
+void
+LteEnbPhy::QueueUlDci (UlDciIdealControlMessage m)
+{
+ NS_LOG_FUNCTION (this);
+ m_ulDciQueue.at (m_macChTtiDelay - 1).push_back (m);
+}
+
+std::list<UlDciIdealControlMessage>
+LteEnbPhy::DequeueUlDci (void)
+{
+ NS_LOG_FUNCTION (this);
+ if (m_ulDciQueue.at (0).size ()>0)
+ {
+ std::list<UlDciIdealControlMessage> ret = m_ulDciQueue.at (0);
+ m_ulDciQueue.erase (m_ulDciQueue.begin ());
+ std::list<UlDciIdealControlMessage> l;
+ m_ulDciQueue.push_back (l);
+ return (ret);
+ }
+ else
+ {
+ m_ulDciQueue.erase (m_ulDciQueue.begin ());
+ std::list<UlDciIdealControlMessage> l;
+ m_ulDciQueue.push_back (l);
+ std::list<UlDciIdealControlMessage> emptylist;
+ return (emptylist);
+ }
+}
+
};
--- a/src/lte/model/lte-enb-phy.h Mon Apr 23 15:46:14 2012 +0200
+++ b/src/lte/model/lte-enb-phy.h Wed Apr 25 15:57:29 2012 +0200
@@ -152,7 +152,17 @@
bool DeleteUePhy (uint16_t rnti);
- virtual void DoSetTransmissionMode (uint16_t rnti, uint8_t txMode);
+ virtual void DoSetTransmissionMode (uint16_t rnti, uint8_t txMode);
+
+ /**
+ * \param m the UL-CQI to be queued
+ */
+ void QueueUlDci (UlDciIdealControlMessage m);
+
+ /**
+ * \returns the list of UL-CQI to be processed
+ */
+ std::list<UlDciIdealControlMessage> DequeueUlDci (void);
/**
@@ -183,6 +193,8 @@
private:
std::map <uint16_t, Ptr<LteUePhy> > m_ueAttached;
+
+ std::vector< std::list<UlDciIdealControlMessage> > m_ulDciQueue; // for storing info on future receptions
LteEnbPhySapProvider* m_enbPhySapProvider;
LteEnbPhySapUser* m_enbPhySapUser;
--- a/src/lte/model/lte-phy.cc Mon Apr 23 15:46:14 2012 +0200
+++ b/src/lte/model/lte-phy.cc Wed Apr 25 15:57:29 2012 +0200
@@ -48,7 +48,7 @@
m_ulBandwidth (0),
m_dlBandwidth (0),
m_rbgSize (0),
- m_macChTtiDelay (1) // 1 TTI delay between MAC and CH
+ m_macChTtiDelay (2) // 1 TTI delay between MAC and CH
{
NS_LOG_FUNCTION (this);
for (int i = 0; i < m_macChTtiDelay; i++)
@@ -235,7 +235,7 @@
void
LtePhy::SetMacPdu (Ptr<Packet> p)
{
- m_packetBurstQueue.at (m_macChTtiDelay - 1)->AddPacket (p);
+ m_packetBurstQueue.at (m_packetBurstQueue.size () - 1)->AddPacket (p);
}
Ptr<PacketBurst>
@@ -260,7 +260,9 @@
void
LtePhy::SetControlMessages (Ptr<IdealControlMessage> m)
{
- m_controlMessagesQueue.at (m_macChTtiDelay - 1).push_back (m);
+ // In uplink the queue of control messages and packet are of different sizes
+ // for avoiding TTI cancellation due to synchronization of subframe triggers
+ m_controlMessagesQueue.at (m_controlMessagesQueue.size () - 1).push_back (m);
}
std::list<Ptr<IdealControlMessage> >
--- a/src/lte/model/lte-ue-phy.cc Mon Apr 23 15:46:14 2012 +0200
+++ b/src/lte/model/lte-ue-phy.cc Wed Apr 25 15:57:29 2012 +0200
@@ -118,6 +118,9 @@
{
m_amc = CreateObject <LteAmc> ();
m_uePhySapProvider = new UeMemberLteUePhySapProvider (this);
+ std::vector <int> ulRb;
+ SetMacChDelay (m_macChTtiDelay + 1); // +1 for avoiding UL/DL trigger synchronization remove 1 TTI of delay
+ m_subChannelsForTransmissionQueue.resize (m_macChTtiDelay, ulRb);
}
@@ -254,7 +257,8 @@
LteUePhy::SetMacChDelay (uint8_t delay)
{
m_macChTtiDelay = delay;
- m_packetBurstQueue.resize (delay);
+ Ptr<PacketBurst> pb = CreateObject <PacketBurst> ();
+ m_packetBurstQueue.resize (delay, pb);
}
uint8_t
@@ -531,7 +535,8 @@
ulRb.push_back (i + dci.m_rbStart);
//NS_LOG_DEBUG (this << " UE RB " << i + dci.m_rbStart);
}
- SetSubChannelsForTransmission (ulRb);
+
+ QueueSubChannelsForTransmission (ulRb);
// pass the info to the MAC
m_uePhySapUser->ReceiveIdealControlMessage (msg);
}
@@ -544,11 +549,27 @@
}
+void
+LteUePhy::QueueSubChannelsForTransmission (std::vector <int> rbMap)
+{
+ m_subChannelsForTransmissionQueue.at (m_macChTtiDelay - 1) = rbMap;
+}
+
void
LteUePhy::SubframeIndication (uint32_t frameNo, uint32_t subframeNo)
{
// trigger from eNB
+
+ // update uplink transmission mask according to previous UL-CQIs
+ SetSubChannelsForTransmission (m_subChannelsForTransmissionQueue.at (0));
+ // shift the queue
+ for (uint8_t i = 1; i < m_macChTtiDelay; i++)
+ {
+ m_subChannelsForTransmissionQueue.at (i-1) = m_subChannelsForTransmissionQueue.at (i);
+ }
+ m_subChannelsForTransmissionQueue.at (m_macChTtiDelay-1).clear ();
+
// send control messages
std::list<Ptr<IdealControlMessage> > ctrlMsg = GetControlMessages ();
@@ -571,7 +592,7 @@
Ptr<PacketBurst> pb = GetPacketBurst ();
if (pb)
{
- NS_LOG_LOGIC (this << " start TX");
+ NS_LOG_LOGIC (this << " UE " << m_rnti << " start TX " << pb->GetNPackets());
m_uplinkSpectrumPhy->StartTx (pb);
}
--- a/src/lte/model/lte-ue-phy.h Mon Apr 23 15:46:14 2012 +0200
+++ b/src/lte/model/lte-ue-phy.h Wed Apr 25 15:57:29 2012 +0200
@@ -213,9 +213,14 @@
void SetTxMode7Gain (double gain);
void SetTxModeGain (uint8_t txMode, double gain);
+ void QueueSubChannelsForTransmission (std::vector <int> rbMap);
+
std::vector <int> m_subChannelsForTransmission;
std::vector <int> m_subChannelsForReception;
+ std::vector< std::vector <int> > m_subChannelsForTransmissionQueue;
+
+
Ptr<LteAmc> m_amc;
Time m_p10CqiPeriocity; /**< Wideband Periodic CQI: 2, 5, 10, 16, 20, 32, 40, 64, 80 or 160 ms */
--- a/src/lte/model/pf-ff-mac-scheduler.cc Mon Apr 23 15:46:14 2012 +0200
+++ b/src/lte/model/pf-ff-mac-scheduler.cc Wed Apr 25 15:57:29 2012 +0200
@@ -211,8 +211,8 @@
: m_cschedSapUser (0),
m_schedSapUser (0),
m_timeWindow (99.0),
- m_schedTtiDelay (2),
- // WILD HACK: based on a m_macChTtiDelay = 1
+ m_schedTtiDelay (4),
+ // WILD HACK: based on a m_macChTtiDelay = 2
m_nextRntiUl (0)
{
m_amc = CreateObject <LteAmc> ();
@@ -1052,14 +1052,14 @@
uint32_t frameNo = (0x3FF & (params.m_sfnSf >> 4));
uint32_t subframeNo = (0xF & params.m_sfnSf);
// NS_LOG_DEBUG (this << " sfn " << frameNo << " sbfn " << subframeNo);
- if (subframeNo <= m_schedTtiDelay)
+ if (subframeNo <= (uint32_t)(m_schedTtiDelay + 1))
{
frameNo--;
- subframeNo = (10 + subframeNo - m_schedTtiDelay) % 11;
+ subframeNo = (10 + subframeNo - (m_schedTtiDelay + 1)) % 11;
}
else
{
- subframeNo = (subframeNo - m_schedTtiDelay) % 11;
+ subframeNo = (subframeNo - (m_schedTtiDelay + 1)) % 11;
}
uint16_t sfnSf = ((0x3FF & frameNo) << 4) | (0xF & subframeNo);
// NS_LOG_DEBUG (this << " Actual sfn " << frameNo << " sbfn " << subframeNo << " sfnSf " << sfnSf);
--- a/src/lte/model/rr-ff-mac-scheduler.cc Mon Apr 23 15:46:14 2012 +0200
+++ b/src/lte/model/rr-ff-mac-scheduler.cc Wed Apr 25 15:57:29 2012 +0200
@@ -212,7 +212,7 @@
RrFfMacScheduler::RrFfMacScheduler ()
: m_cschedSapUser (0),
m_schedSapUser (0),
- m_schedTtiDelay (2),
+ m_schedTtiDelay (4),
// WILD ACK: based on a m_macChTtiDelay = 1
m_nextRntiDl (0),
m_nextRntiUl (0)
@@ -402,7 +402,7 @@
void
RrFfMacScheduler::DoSchedDlTriggerReq (const struct FfMacSchedSapProvider::SchedDlTriggerReqParameters& params)
{
- NS_LOG_FUNCTION (this << " Frame no. " << (params.m_sfnSf >> 4) << " subframe no. " << (0xF & params.m_sfnSf));
+ NS_LOG_FUNCTION (this << " DL Frame no. " << (params.m_sfnSf >> 4) << " subframe no. " << (0xF & params.m_sfnSf));
// API generated by RLC for triggering the scheduling of a DL subframe
RefreshDlCqiMaps ();
@@ -537,7 +537,7 @@
// int totRbg = lcNum * rbgPerFlow;
// totRbg = rbgNum / nTbs;
int tbSize = (m_amc->GetTbSizeFromMcs (newDci.m_mcs.at (0), rbgPerTb * rbgSize) / 8);
- NS_LOG_DEBUG (this << "Allocate user " << newEl.m_rnti << " LCs " << (uint16_t)(*itLcRnti).second << " bytes " << tbSize << " PRBs " << rbgPerTb * rbgSize << " mcs " << (uint16_t) newDci.m_mcs.at (0) << " layers " << nLayer);
+// NS_LOG_DEBUG (this << "Allocate user " << newEl.m_rnti << " LCs " << (uint16_t)(*itLcRnti).second << " bytes " << tbSize << " PRBs " << rbgAllocated * rbgSize << "..." << (rbgAllocated* rbgSize) + (rbgPerTb * rbgSize) - 1 << " mcs " << (uint16_t) newDci.m_mcs.at (0) << " layers " << nLayer);
uint16_t rlcPduSize = tbSize / lcNum;
for (int i = 0; i < lcNum ; i++)
{
@@ -545,7 +545,7 @@
{
RlcPduListElement_s newRlcEl;
newRlcEl.m_logicalChannelIdentity = (*it).m_logicalChannelIdentity;
- NS_LOG_DEBUG (this << "LCID " << (uint32_t) newRlcEl.m_logicalChannelIdentity << " size " << rlcPduSize << " ID " << (*it).m_rnti << " layer " << (uint16_t)j);
+// NS_LOG_DEBUG (this << "LCID " << (uint32_t) newRlcEl.m_logicalChannelIdentity << " size " << rlcPduSize << " ID " << (*it).m_rnti << " layer " << (uint16_t)j);
newRlcEl.m_size = rlcPduSize;
UpdateDlRlcBufferInfo ((*it).m_rnti, newRlcEl.m_logicalChannelIdentity, rlcPduSize);
newRlcPduLe.push_back (newRlcEl);
@@ -720,7 +720,7 @@
{
// no cqi info about this UE
uldci.m_mcs = 0; // MCS 0 -> UL-AMC TBD
- //NS_LOG_DEBUG (this << " UE does not have ULCQI " << (*it).first );
+ NS_LOG_DEBUG (this << " UE does not have ULCQI " << (*it).first );
}
else
{
@@ -728,7 +728,6 @@
double minSinr = (*itCqi).second.at (uldci.m_rbStart);
for (uint16_t i = uldci.m_rbStart; i < uldci.m_rbStart + uldci.m_rbLen; i++)
{
- //NS_LOG_DEBUG (this << " UE " << (*it).first << " has CQI " << (*itCqi).second.at(i));
if ((*itCqi).second.at (i) < minSinr)
{
minSinr = (*itCqi).second.at (i);
@@ -752,7 +751,7 @@
continue; // CQI == 0 means "out of range" (see table 7.2.3-1 of 36.213)
}
uldci.m_mcs = m_amc->GetMcsFromCqi (cqi);
- //NS_LOG_DEBUG (this << " UE " << (*it).first << " minsinr " << minSinr << " -> mcs " << (uint16_t)uldci.m_mcs);
+// NS_LOG_DEBUG (this << " UE " << (*it).first << " minsinr " << minSinr << " -> mcs " << (uint16_t)uldci.m_mcs);
}
@@ -764,7 +763,7 @@
}
uldci.m_tbSize = (m_amc->GetTbSizeFromMcs (uldci.m_mcs, rbPerFlow) / 8); // MCS 0 -> UL-AMC TBD
- NS_LOG_DEBUG (this << " UE " << (*it).first << " startPRB " << (uint32_t)uldci.m_rbStart << " nPRB " << (uint32_t)uldci.m_rbLen << " CQI " << cqi << " MCS " << (uint32_t)uldci.m_mcs << " TBsize " << uldci.m_tbSize);
+// NS_LOG_DEBUG (this << " UE " << (*it).first << " startPRB " << (uint32_t)uldci.m_rbStart << " nPRB " << (uint32_t)uldci.m_rbLen << " CQI " << cqi << " MCS " << (uint32_t)uldci.m_mcs << " TBsize " << uldci.m_tbSize);
UpdateUlRlcBufferInfo (uldci.m_rnti, uldci.m_tbSize);
uldci.m_ndi = 1;
uldci.m_cceIndex = 0;
@@ -851,19 +850,18 @@
RrFfMacScheduler::DoSchedUlCqiInfoReq (const struct FfMacSchedSapProvider::SchedUlCqiInfoReqParameters& params)
{
NS_LOG_FUNCTION (this);
-// NS_LOG_DEBUG (this << " RX SFNID " << params.m_sfnSf);
+ NS_LOG_DEBUG (this << " RX SFNID " << params.m_sfnSf);
// correlate info on UL-CQIs with previous scheduling -> calculate m_sfnSf of transmission
uint32_t frameNo = (0x3FF & (params.m_sfnSf >> 4));
uint32_t subframeNo = (0xF & params.m_sfnSf);
- //NS_LOG_DEBUG (this << " sfn " << frameNo << " sbfn " << subframeNo);
- if (subframeNo <= m_schedTtiDelay)
+ if (subframeNo <= (uint32_t)(m_schedTtiDelay + 1))
{
frameNo--;
- subframeNo = (10 + subframeNo - m_schedTtiDelay) % 11;
+ subframeNo = (10 + subframeNo - (m_schedTtiDelay + 1)) % 11;
}
else
{
- subframeNo = (subframeNo - m_schedTtiDelay) % 11;
+ subframeNo = (subframeNo - (m_schedTtiDelay + 1)) % 11;
}
uint16_t sfnSf = ((0x3FF & frameNo) << 4) | (0xF & subframeNo);
// NS_LOG_DEBUG (this << " Actual sfn " << frameNo << " sbfn " << subframeNo << " sfnSf " << sfnSf);
@@ -880,7 +878,7 @@
{
// convert from fixed point notation Sxxxxxxxxxxx.xxx to double
double sinr = LteFfConverter::fpS11dot3toDouble (params.m_ulCqi.m_sinr.at (i));
- //NS_LOG_DEBUG (this << " UE " << (*itMap).second.at (i) << " SINRfp " << params.m_ulCqi.m_sinr.at (i) << " sinrdb " << sinr);
+// NS_LOG_DEBUG (this << " RB " << i << "UE " << (*itMap).second.at (i) << " SINRfp " << params.m_ulCqi.m_sinr.at (i) << " sinrdb " << sinr);
itCqi = m_ueCqi.find ((*itMap).second.at (i));
if (itCqi == m_ueCqi.end ())
{
--- a/src/lte/test/lte-test-interference.cc Mon Apr 23 15:46:14 2012 +0200
+++ b/src/lte/test/lte-test-interference.cc Wed Apr 25 15:57:29 2012 +0200
@@ -202,7 +202,7 @@
MakeBoundCallback (&LteTestUlSchedulingCallback, this));
- Simulator::Stop (Seconds (0.006));
+ Simulator::Stop (Seconds (0.010));
Simulator::Run ();
@@ -232,7 +232,7 @@
* For first 4 subframeNo in the first frameNo, the MCS cannot be properly evaluated,
* because CQI feedback is still not available at the eNB.
*/
- if ( (frameNo > 1) || (subframeNo > 4) )
+ if ( (frameNo > 1) || (subframeNo > 8) )
{
NS_TEST_ASSERT_MSG_EQ ((uint16_t)mcsTb1, m_dlMcs, "Wrong DL MCS ");
}
@@ -247,7 +247,7 @@
* For first 5 subframeNo in the first frameNo, the MCS cannot be properly evaluated,
* because CQI feedback is still not available at the eNB.
*/
- if ( (frameNo > 1) || (subframeNo > 5) )
+ if ( (frameNo > 1) || (subframeNo > 9) )
{
NS_TEST_ASSERT_MSG_EQ ((uint16_t)mcs, m_ulMcs, "Wrong UL MCS");
}
--- a/src/lte/test/lte-test-link-adaptation.cc Mon Apr 23 15:46:14 2012 +0200
+++ b/src/lte/test/lte-test-link-adaptation.cc Wed Apr 25 15:57:29 2012 +0200
@@ -206,7 +206,7 @@
Config::Connect ("/NodeList/0/DeviceList/0/LteEnbMac/DlScheduling",
MakeBoundCallback (&LteTestDlSchedulingCallback, this));
- Simulator::Stop (Seconds (0.005));
+ Simulator::Stop (Seconds (0.007));
Simulator::Run ();
double calculatedSinrDb = 10.0 * log10 (testSinr->GetSinr ()->operator[] (0));
@@ -232,7 +232,7 @@
* For first 4 subframeNo in the first frameNo, the MCS cannot be properly evaluated,
* because CQI feedback is still not available at the eNB.
*/
- if ( (frameNo > 1) || (subframeNo > 4) )
+ if ( (frameNo > 1) || (subframeNo > 6) )
{
NS_LOG_INFO (m_snrDb << "\t" << m_mcsIndex << "\t" << (uint16_t)mcsTb1);
--- a/src/lte/test/test-lte-antenna.cc Mon Apr 23 15:46:14 2012 +0200
+++ b/src/lte/test/test-lte-antenna.cc Wed Apr 25 15:57:29 2012 +0200
@@ -144,7 +144,7 @@
enbphy->GetUplinkSpectrumPhy ()->AddSinrChunkProcessor (testUlSinr);
- Simulator::Stop (Seconds (0.006));
+ Simulator::Stop (Seconds (0.010));
Simulator::Run ();