23 #include <ns3/object-factory.h>
27 #include <ns3/simulator.h>
28 #include <ns3/double.h>
39 #include <ns3/lte-common.h>
40 #include <ns3/pointer.h>
41 #include <ns3/boolean.h>
42 #include <ns3/lte-ue-power-control.h>
138 m_state (CELL_SEARCH),
140 m_rsReceivedPowerUpdated (false),
141 m_rsInterferencePowerUpdated (false),
142 m_dataInterferencePowerUpdated (false),
143 m_pssReceived (false),
146 m_rsrpSinrSampleCounter (0)
148 m_amc = CreateObject <LteAmc> ();
155 "Cannot create UE devices after simulation started");
184 .AddConstructor<LteUePhy> ()
185 .AddAttribute (
"TxPower",
186 "Transmission power in dBm",
190 MakeDoubleChecker<double> ())
191 .AddAttribute (
"NoiseFigure",
192 "Loss (dB) in the Signal-to-Noise-Ratio due to non-idealities in the receiver."
193 " According to Wikipedia (http://en.wikipedia.org/wiki/Noise_figure), this is "
194 "\"the difference in decibels (dB) between"
195 " the noise output of the actual receiver to the noise output of an "
196 " ideal receiver with the same overall gain and bandwidth when the receivers "
197 " are connected to sources at the standard noise temperature T0.\" "
198 "In this model, we consider T0 = 290K.",
202 MakeDoubleChecker<double> ())
203 .AddAttribute (
"TxMode1Gain",
204 "Transmission mode 1 gain in dB",
207 MakeDoubleChecker<double> ())
208 .AddAttribute (
"TxMode2Gain",
209 "Transmission mode 2 gain in dB",
212 MakeDoubleChecker<double> ())
213 .AddAttribute (
"TxMode3Gain",
214 "Transmission mode 3 gain in dB",
217 MakeDoubleChecker<double> ())
218 .AddAttribute (
"TxMode4Gain",
219 "Transmission mode 4 gain in dB",
222 MakeDoubleChecker<double> ())
223 .AddAttribute (
"TxMode5Gain",
224 "Transmission mode 5 gain in dB",
227 MakeDoubleChecker<double> ())
228 .AddAttribute (
"TxMode6Gain",
229 "Transmission mode 6 gain in dB",
232 MakeDoubleChecker<double> ())
233 .AddAttribute (
"TxMode7Gain",
234 "Transmission mode 7 gain in dB",
237 MakeDoubleChecker<double> ())
238 .AddTraceSource (
"ReportCurrentCellRsrpSinr",
239 "RSRP and SINR statistics.",
241 .AddAttribute (
"RsrpSinrSamplePeriod",
242 "The sampling period for reporting RSRP-SINR stats (default value 1)",
245 MakeUintegerChecker<uint16_t> ())
246 .AddTraceSource (
"UlPhyTransmission",
247 "DL transmission PHY layer statistics.",
249 .AddAttribute (
"DlSpectrumPhy",
250 "The downlink LteSpectrumPhy associated to this LtePhy",
254 MakePointerChecker <LteSpectrumPhy> ())
255 .AddAttribute (
"UlSpectrumPhy",
256 "The uplink LteSpectrumPhy associated to this LtePhy",
260 MakePointerChecker <LteSpectrumPhy> ())
261 .AddAttribute (
"RsrqUeMeasThreshold",
262 "Receive threshold for PSS on RSRQ [dB]",
265 MakeDoubleChecker<double> ())
266 .AddAttribute (
"UeMeasurementsFilterPeriod",
267 "Time period for reporting UE measurements (default 200 ms.) ",
271 .AddTraceSource (
"ReportUeMeasurements",
272 "Report UE measurements RSRP (dBm) and RSRQ (dB).",
274 .AddTraceSource (
"StateTransition",
275 "Trace fired upon every UE PHY state transition",
277 .AddAttribute (
"EnableUplinkPowerControl",
278 "If true Uplink Power Control will be enabled",
281 MakeBooleanChecker ())
487 Values::const_iterator it;
493 double powerTxW = ((*it) * 180000.0) / 12.0;
497 double rsrp = (rbNum > 0) ? (sum / rbNum) : DBL_MAX;
506 double avSinr = (rbNum > 0) ? (sum / rbNum) : DBL_MAX;
518 std::list <PssElement>::iterator itPss =
m_pssList.begin ();
522 double rsrqSum = 0.0;
532 double noisePowerTxW = ((*itIntN) * 180000.0) / 12.0;
533 double intPowerTxW = ((*itPj) * 180000.0) / 12.0;
534 rsrqSum += (2 * (noisePowerTxW + intPowerTxW));
538 double rsrq_dB = 10 * log10 ((*itPss).pssPsdSum / rsrqSum);
543 <<
" has RSRQ " << rsrq_dB <<
" and RBnum " << rbNum);
545 std::map <uint16_t, UeMeasurementsElement>::iterator itMeasMap;
548 (*itMeasMap).second.rsrqSum += rsrq_dB;
549 (*itMeasMap).second.rsrqNum++;
610 Values::const_iterator it;
616 double powerTxW = ((*it) * 180000.0) / 12.0;
620 double rsrp = (rbNum > 0) ? (sum / rbNum) : DBL_MAX;
629 double avSinr = (rbNum > 0) ? (sum / rbNum) : DBL_MAX;
641 std::list <PssElement>::iterator itPss =
m_pssList.begin ();
645 double rsrqSum = 0.0;
655 double noisePowerTxW = ((*itIntN) * 180000.0) / 12.0;
656 double intPowerTxW = ((*itPj) * 180000.0) / 12.0;
657 rsrqSum += (2 * (noisePowerTxW + intPowerTxW));
661 double rsrq_dB = 10 * log10 ((*itPss).pssPsdSum / rsrqSum);
666 <<
" has RSRQ " << rsrq_dB <<
" and RBnum " << rbNum);
668 std::map <uint16_t, UeMeasurementsElement>::iterator itMeasMap;
671 (*itMeasMap).second.rsrqSum += rsrq_dB;
672 (*itMeasMap).second.rsrqNum++;
713 Values::const_iterator it;
716 double powerTxW = ((*it) * 180000);
720 double rsrp = 10 * log10 (sum) + 30;
741 std::vector<int> cqi;
747 int nbSubChannels = cqi.size ();
749 int activeSubChannels = 0;
751 for (
int i = 0; i < nbSubChannels; i++)
753 if (cqi.at (i) != -1)
755 cqiSum += cqi.at (i);
758 NS_LOG_DEBUG (
this <<
" subch " << i <<
" cqi " << cqi.at (i));
765 for (
int i = 0; i < nLayer; i++)
767 if (activeSubChannels > 0)
769 dlcqi.m_wbCqi.push_back ((uint16_t) cqiSum / activeSubChannels);
774 dlcqi.m_wbCqi.push_back (1);
785 int nbSubChannels = cqi.size ();
791 for (
int i = 0; i < nbSubChannels; i++)
793 if (cqi.at (i) != -1)
795 cqiSum += cqi.at (i);
799 if (cqiNum == rbgSize)
805 for (
int i = 0; i < nLayer; i++)
807 hlCqi.
m_sbCqi.push_back ((uint16_t) cqiSum / rbgSize);
819 dlcqi.m_sbMeasResult = rbgMeas;
822 msg->SetDlCqi (dlcqi);
835 std::map <uint16_t, UeMeasurementsElement>::iterator it;
838 double avg_rsrp = (*it).second.rsrpSum / (double)(*it).second.rsrpNum;
839 double avg_rsrq = (*it).second.rsrqSum / (
double)(*it).second.rsrqNum;
846 <<
" RSRP " << avg_rsrp
847 <<
" (nSamples " << (uint16_t)(*it).second.rsrpNum <<
")"
848 <<
" RSRQ " << avg_rsrq
849 <<
" (nSamples " << (uint16_t)(*it).second.rsrqNum <<
")");
883 msg->SetRapId (raPreambleId);
895 std::list<Ptr<LteControlMessage> >::iterator it;
896 for (it = msgList.begin (); it != msgList.end (); it++)
911 if (dci.m_resAlloc != 0)
916 std::vector <int> dlRb;
920 for (
int i = 0; i < 32; i++)
922 if (((dci.m_rbBitmap & mask) >> i) == 1)
926 dlRb.push_back ((i * GetRbgSize ()) + k);
939 NS_LOG_DEBUG (
this <<
" UE " <<
m_rnti <<
" DL-DCI " << dci.m_rnti <<
" bitmap " << dci.m_rbBitmap);
940 for (uint8_t i = 0; i < dci.m_tbsSize.size (); i++)
942 m_downlinkSpectrumPhy->AddExpectedTb (dci.m_rnti, dci.m_ndi.at (i), dci.m_tbsSize.at (i), dci.m_mcs.at (i), dlRb, i, dci.m_harqProcess, dci.m_rv.at (i),
true );
960 std::vector <int> ulRb;
961 for (
int i = 0; i < dci.m_rbLen; i++)
963 ulRb.push_back (i + dci.m_rbStart);
976 params.
m_mcs = dci.m_mcs;
977 params.
m_size = dci.m_tbSize;
978 params.
m_rv = harqInfoList.size ();
979 params.
m_ndi = dci.m_ndi;
987 if (rarMsg->GetRaRnti () ==
m_raRnti)
989 for (std::list<RarLteControlMessage::Rar>::const_iterator it = rarMsg->RarListBegin (); it != rarMsg->RarListEnd (); ++it)
1000 std::vector <int> ulRb;
1001 for (
int i = 0; i < it->rarPayload.m_grant.m_rbLen; i++)
1003 ulRb.push_back (i + it->rarPayload.m_grant.m_rbStart);
1049 Values::const_iterator itPi;
1053 double powerTxW = ((*itPi) * 180000.0) / 12.0;
1059 double rsrp_dBm = 10 * log10 (1000 * (sum / (
double)nRB));
1061 <<
" has RSRP " << rsrp_dBm <<
" and RBnum " << nRB);
1065 std::map <uint16_t, UeMeasurementsElement>::iterator itMeasMap =
m_ueMeasurementsMap.find (cellId);
1078 (*itMeasMap).second.rsrpSum += rsrp_dBm;
1079 (*itMeasMap).second.rsrpNum++;
1108 NS_ASSERT_MSG (frameNo > 0,
"the SRS index check code assumes that frameNo starts at 1");
1131 NS_ASSERT_MSG (subframeNo > 0 && subframeNo <= 10,
"the SRS index check code assumes that subframeNo starts at 1");
1158 if (ctrlMsg.size ()>0)
1160 NS_LOG_LOGIC (
this <<
" UE - start TX PUCCH (NO PUSCH)");
1161 std::vector <int> dlRb;
1183 if (subframeNo > 10)
1200 std::vector <int> dlRb;
1240 std::list<Ptr<LteControlMessage> > l;
1243 std::vector <int> ulRb;
1306 for (
int i = 0; i < 4; i++)
1308 if (dlBandwidth < Type0AllocationRbg[i])
1419 double gainLin = std::pow (10.0, (gain / 10.0));
1424 std::vector <double> temp;
1427 for (uint8_t i = 0; i < temp.size (); i++)
1450 msg->SetDlHarqFeedback (m);
1476 <<
" UePhy " <<
ToString (oldState)
1477 <<
" --> " <<
ToString (newState));
Values::const_iterator ConstValuesEnd() const
See section 4.3.1 dlDciListElement.
double GetNoiseFigure() const
void SetTxPower(double value)
Ptr< LteSpectrumPhy > GetUlSpectrumPhy() const
Simulation virtual time values and global simulation resolution.
uint8_t m_txMode
the transmission Mode
#define NS_LOG_FUNCTION(parameters)
If log level LOG_FUNCTION is enabled, this macro will output all input parameters separated by "...
virtual void ReceiveLteControlMessage(Ptr< LteControlMessage > msg)=0
Receive SendLteControlMessage (PDCCH map, CQI feedbacks) using the ideal control channel.
See section 4.3.25 sbMeasResult.
std::vector< struct UeMeasurementsElement > m_ueMeasurementsList
virtual void GenerateMixedCqiReport(const SpectrumValue &sinr)
LteUePhySapUser * m_uePhySapUser
void SetTxMode5Gain(double gain)
void SetCellId(uint16_t cellId)
virtual void SendMacPdu(Ptr< Packet > p)
Send the MAC PDU to the channel.
#define NS_OBJECT_ENSURE_REGISTERED(type)
Register the class in the ns-3 factory.
virtual void GenerateDataCqiReport(const SpectrumValue &sinr)
generate a CQI report based on the given SINR of Data frame (used for PUSCH CQIs) ...
std::list< PssElement > m_pssList
void SetTxMode2Gain(double gain)
uint8_t GetMacChDelay(void) const
void DoConfigureUplink(uint16_t ulEarfcn, uint8_t ulBandwidth)
std::vector< Ptr< PacketBurst > > m_packetBurstQueue
std::vector< int > GetSubChannelsForTransmission(void)
Get a list of sub channels to use in RX.
virtual void GenerateCtrlCqiReport(const SpectrumValue &sinr)
generate a CQI report based on the given SINR of Ctrl frame
TracedCallback< uint16_t, uint16_t, double, double > m_reportCurrentCellRsrpSinrTrace
Trace information regarding RSRP and average SINR (see TS 36.214) uint16_t cellId, uint16_t rnti, double rsrp, double sinr.
double GetPuschTxPower(std::vector< int > rb)
void SetSubChannelsForTransmission(std::vector< int > mask)
Set a list of sub channels to use in TX.
uint16_t GetSrsPeriodicity(uint16_t srcCi) const
double GetTti(void) const
LteUePhySapProvider * m_uePhySapProvider
#define NS_ASSERT(condition)
At runtime, in debugging builds, if this condition is not true, the program prints the source file...
void SetTxMode6Gain(double gain)
#define NS_LOG_COMPONENT_DEFINE(name)
Define a Log component with a specific name.
Time MilliSeconds(uint64_t value)
Construct a Time in the indicated unit.
Ptr< LteSpectrumPhy > m_downlinkSpectrumPhy
See section 4.3.2 ulDciListElement.
Service Access Point (SAP) offered by the UE PHY to the UE RRC for control purposes.
virtual void SendLteControlMessage(Ptr< LteControlMessage > msg)
Send SendLteControlMessage (PDCCH map, CQI feedbacks) using the ideal control channel.
See section 4.3.24 cqiListElement.
std::vector< double > m_txModeGain
#define NS_LOG_INFO(msg)
Use NS_LOG to output a message of level LOG_INFO.
#define NS_FATAL_ERROR(msg)
fatal error handling
SpectrumValue m_dataInterferencePower
static EventId Schedule(Time const &time, MEM mem_ptr, OBJ obj)
Schedule an event to expire at the relative time "time" is reached.
void QueueSubChannelsForTransmission(std::vector< int > rbMap)
uint8_t m_rv
the redundancy version (HARQ)
Service Access Point (SAP) offered by the PHY to the MAC.
void SetTxModeGain(uint8_t txMode, double gain)
Ptr< LteUePowerControl > m_powerControl
virtual void DoSendMacPdu(Ptr< Packet > p)
Queue the MAC PDU to be sent (according to m_macChTtiDelay)
std::vector< int > GetSubChannelsForReception(void)
Get a list of sub channels to use in RX.
This class defines all functions to create spectrum model for lte.
uint8_t m_transmissionMode
void SetHarqPhyModule(Ptr< LteHarqPhy > harq)
Set the HARQ PHY module.
Ptr< LteNetDevice > GetDevice()
Get the device where the phy layer is attached.
void DoSetSrsConfigurationIndex(uint16_t srcCi)
Ptr< const AttributeChecker > MakeTimeChecker(const Time min, const Time max)
Helper to make a Time checker with bounded range.
State
The states of the UE PHY entity.
static const int Type0AllocationRbg[4]
void DoSetTransmissionMode(uint8_t txMode)
The attribute can be read.
UeMemberLteUePhySapProvider(LteUePhy *phy)
Template for the implementation of the LteUeCphySapProvider as a member of an owner class of type C t...
double m_pssReceptionThreshold
TracedCallback< uint16_t, uint16_t, double, double, bool > m_reportUeMeasurements
Trace information regarding RSRP and RSRQ (see TS 36.214) uint16_t rnti, uint16_t cellId...
uint16_t GetSrsSubframeOffset(uint16_t srcCi) const
void DoSynchronizeWithEnb(uint16_t cellId)
LteUeCphySapUser * m_ueCphySapUser
void DoSetDlBandwidth(uint8_t ulBandwidth)
void DoDispose()
This method is called by Object::Dispose or by the object's destructor, whichever comes first...
Attribute for objects of type ns3::Time.
uint8_t GetRbgSize(void) const
uint16_t m_rsrpSinrSamplePeriod
Time NanoSeconds(uint64_t value)
Construct a Time in the indicated unit.
uint64_t m_imsi
IMSI of the scheduled UE.
See section 4.3.27 higherLayerSelected.
Service Access Point (SAP) offered by the UE PHY to the UE RRC for control purposes.
void SetLteUePhySapUser(LteUePhySapUser *s)
Set the PHY SAP User.
Hold an unsigned integer type.
void DoConfigureReferenceSignalPower(int8_t referenceSignalPower)
void SetTxMode3Gain(double gain)
static uint8_t TxMode2LayerNum(uint8_t txMode)
Ptr< DlCqiLteControlMessage > CreateDlCqiFeedbackMessage(const SpectrumValue &sinr)
Create the DL CQI feedback from SINR values perceived at the physical layer with the signal received ...
void SetTxMode4Gain(double gain)
void SwitchToState(State s)
TracedCallback< uint16_t, uint16_t, State, State > m_stateTransitionTrace
void SendSrs()
Send the SRS signal in the last symbols of the frame.
bool m_rsInterferencePowerUpdated
virtual void RecvSystemInformationBlockType1(uint16_t cellId, LteRrcSap::SystemInformationBlockType1 sib1)=0
Relay an SIB1 message from the PHY entity to the RRC layer.
#define NS_LOG_LOGIC(msg)
Use NS_LOG to output a message of level LOG_LOGIC.
std::vector< uint8_t > m_sbCqi
void SetTxMode7Gain(double gain)
Ptr< LteUePowerControl > GetUplinkPowerControl() const
virtual void RecvMasterInformationBlock(uint16_t cellId, LteRrcSap::MasterInformationBlock mib)=0
Relay an MIB message from the PHY entity to the RRC layer.
See section 4.3.23 dlInfoListElement.
virtual void DoSendRachPreamble(uint32_t prachId, uint32_t raRnti)
uint8_t m_mcs
MCS for transport block.
virtual void ReportDataInterference(const SpectrumValue &interf)
virtual void ReceiveLteDlHarqFeedback(DlInfoListElement_s mes)
PhySpectrum generated a new DL HARQ feedback.
bool m_enableUplinkPowerControl
static const Time UL_DATA_DURATION
Ptr< LteHarqPhy > m_harqPhyModule
void DoStartCellSearch(uint16_t dlEarfcn)
void SetControlMessages(Ptr< LteControlMessage > m)
Ptr< const TraceSourceAccessor > MakeTraceSourceAccessor(T a)
uint16_t m_rsrpSinrSampleCounter
SpectrumValue m_rsReceivedPower
double GetTxPower() const
uint16_t m_srsSubframeOffset
static EventId ScheduleNow(MEM mem_ptr, OBJ obj)
Schedule an event to expire Now.
uint16_t m_size
Size of transport block.
static Time Now(void)
Return the "current simulation time".
uint8_t m_ndi
new data indicator flag
void SubframeIndication(uint32_t frameNo, uint32_t subframeNo)
trigger from eNB the start from a new frame
virtual void DoInitialize(void)
This method is called only once by Object::Initialize.
void SetRnti(uint16_t rnti)
#define NS_ASSERT_MSG(condition, message)
At runtime, in debugging builds, if this condition is not true, the program prints the message to out...
static Ptr< SpectrumValue > CreateTxPowerSpectralDensity(uint16_t earfcn, uint8_t bandwidth, double powerTx, std::vector< int > activeRbs)
create a spectrum value representing the power spectral density of a signal to be transmitted...
void SetTxMode1Gain(double gain)
std::vector< int > m_subChannelsForTransmission
Time m_p10CqiPeriocity
Wideband Periodic CQI: 2, 5, 10, 16, 20, 32, 40, 64, 80 or 160 ms.
std::vector< std::vector< int > > m_subChannelsForTransmissionQueue
std::list< Ptr< LteControlMessage > > GetControlMessages(void)
static const std::string & ToString(EpcUeNas::State s)
LteUeCphySapProvider * m_ueCphySapProvider
std::map< uint16_t, UeMeasurementsElement > m_ueMeasurementsMap
Ptr< PacketBurst > GetPacketBurst(void)
uint16_t m_cellId
Cell ID of the attached Enb.
static const std::string g_uePhyStateName[LteUePhy::NUM_STATES]
std::vector< int > m_subChannelsForReception
Service Access Point (SAP) offered by the UE-PHY to the UE-MAC.
static const Time UL_SRS_DELAY_FROM_SUBFRAME_START
#define NS_LOG_DEBUG(msg)
Use NS_LOG to output a message of level LOG_DEBUG.
uint8_t m_layer
the layer (cw) of the transmission
Time Seconds(double value)
Construct a Time in the indicated unit.
virtual void ReceiveLteControlMessageList(std::list< Ptr< LteControlMessage > >)
void SetTxPower(double pow)
virtual void ReceivePss(uint16_t cellId, Ptr< SpectrumValue > p)
double GetPucchTxPower(std::vector< int > rb)
uint16_t m_srsPeriodicity
LteUePhySapProvider * GetLteUePhySapProvider()
Get the PHY SAP provider.
void Cancel(void)
This method is syntactic sugar for the ns3::Simulator::cancel method.
virtual void SendRachPreamble(uint32_t prachId, uint32_t raRnti)
send a preamble on the PRACH
void SetLteUeCphySapUser(LteUeCphySapUser *s)
Set the CPHY SAP User.
SpectrumValue m_rsInterferencePower
friend class UeMemberLteUePhySapProvider
double GetSrsTxPower(std::vector< int > rb)
void PhyPduReceived(Ptr< Packet > p)
PhySpectrum received a new PHY-PDU.
Values::const_iterator ConstValuesBegin() const
void SetRsrp(double value)
virtual void DoSendLteControlMessage(Ptr< LteControlMessage > msg)
std::vector< std::list< Ptr< LteControlMessage > > > m_controlMessagesQueue
bool m_rsReceivedPowerUpdated
void ConfigureReferenceSignalPower(int8_t referenceSignalPower)
The LteSpectrumPhy models the physical layer of LTE.
Ptr< LteSpectrumPhy > GetDlSpectrumPhy() const
Ptr< LteSpectrumPhy > m_uplinkSpectrumPhy
virtual void ReportRsReceivedPower(const SpectrumValue &power)
generate a report based on the linear RS power perceived during CTRL frame NOTE: used only by UE for ...
Time m_p10CqiLast
SubBand Aperiodic CQI: activated by DCI format 0 or Random Access Response Grant. ...
Parameters of the ReportUeMeasurements primitive: RSRP [dBm] and RSRQ [dB] See section 5...
LteUeCphySapProvider * GetLteUeCphySapProvider()
Get the CPHY SAP provider.
Hold a floating point type.
Set of values corresponding to a given SpectrumModel.
void SetMacPdu(Ptr< Packet > p)
std::vector< struct HigherLayerSelected_s > m_higherLayerSelected
a unique identifier for an interface.
int64_t GetMilliSeconds(void) const
Get an approximation of the time stored in this instance in the indicated unit.
TypeId SetParent(TypeId tid)
bool m_dataInterferencePowerUpdated
void SetNoiseFigure(double nf)
virtual void DoInitialize(void)
This method is called only once by Object::Initialize.
TracedCallback< PhyTransmissionStatParameters > m_ulPhyTransmission
Trace information regarding PHY stats from DL Tx perspective PhyTrasmissionStatParameters see lte-com...
uint16_t m_rnti
C-RNTI scheduled.
static TypeId GetTypeId(void)
The LtePhy models the physical layer of LTE.
void ReportUeMeasurements()
Layer-1 filtering of RSRP and RSRQ measurements and reporting to the RRC entity.
virtual void ReportInterference(const SpectrumValue &interf)
generate a report based on the linear interference and noise power perceived during DATA frame NOTE: ...
virtual void ReceivePhyPdu(Ptr< Packet > p)=0
Called by the Phy to notify the MAC of the reception of a new PHY-PDU.
static Ptr< SpectrumValue > CreateNoisePowerSpectralDensity(uint16_t earfcn, uint8_t bandwidth, double noiseFigure)
create a SpectrumValue that models the power spectral density of AWGN
virtual Ptr< SpectrumValue > CreateTxPowerSpectralDensity()
Create the PSD for the TX.
void ReportTpc(uint8_t tpc)
#define UL_PUSCH_TTIS_DELAY
void DoSetRnti(uint16_t rnti)
virtual void SubframeIndication(uint32_t frameNo, uint32_t subframeNo)=0
Trigger the start from a new frame (input from Phy layer)
virtual void ReportUeMeasurements(UeMeasurementsParameters params)=0
Send a report of RSRP and RSRQ values perceived from PSS by the PHY entity (after applying layer-1 fi...
std::vector< HarqProcessInfoElement_t > HarqProcessInfoList_t
void SetSubChannelsForReception(std::vector< int > mask)
Get a list of sub channels to use in RX.
The LteUeNetDevice class implements the UE net device.
virtual void DoDispose(void)
This method is called by Object::Dispose or by the object's destructor, whichever comes first...
Time m_ueMeasurementsFilterPeriod