A Discrete-Event Network Simulator
API
lte-ue-phy.cc
Go to the documentation of this file.
1 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
2 /*
3  * Copyright (c) 2010 TELEMATICS LAB, DEE - Politecnico di Bari
4  * Copyright (c) 2018 Fraunhofer ESK : RLF extensions
5  *
6  * This program is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License version 2 as
8  * published by the Free Software Foundation;
9  *
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13  * GNU General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public License
16  * along with this program; if not, write to the Free Software
17  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18  *
19  * Author: Giuseppe Piro <g.piro@poliba.it>
20  * Marco Miozzo <marco.miozzo@cttc.es>
21  * Nicola Baldo <nbaldo@cttc.es>
22  * Modified by:
23  * Vignesh Babu <ns3-dev@esk.fraunhofer.de> (RLF extensions)
24  */
25 
26 #include <ns3/object-factory.h>
27 #include <ns3/log.h>
28 #include <ns3/node.h>
29 #include <cfloat>
30 #include <cmath>
31 #include <ns3/simulator.h>
32 #include <ns3/double.h>
33 #include "lte-ue-phy.h"
34 #include "lte-enb-phy.h"
35 #include "lte-net-device.h"
36 #include "lte-ue-net-device.h"
37 #include "lte-enb-net-device.h"
39 #include "lte-amc.h"
40 #include "lte-ue-mac.h"
41 #include "ff-mac-common.h"
42 #include "lte-chunk-processor.h"
43 #include <ns3/lte-common.h>
44 #include <ns3/pointer.h>
45 #include <ns3/boolean.h>
46 #include <ns3/lte-ue-power-control.h>
47 
48 namespace ns3 {
49 
50 NS_LOG_COMPONENT_DEFINE ("LteUePhy");
51 
52 
53 
61 static const Time UL_DATA_DURATION = NanoSeconds (1e6 - 71429 - 1);
62 
67 static const Time UL_SRS_DELAY_FROM_SUBFRAME_START = NanoSeconds (1e6 - 71429);
68 
69 
70 
71 
73 // member SAP forwarders
75 
78 {
79 public:
86 
87  // inherited from LtePhySapProvider
88  virtual void SendMacPdu (Ptr<Packet> p);
90  virtual void SendRachPreamble (uint32_t prachId, uint32_t raRnti);
91  virtual void NotifyConnectionSuccessful ();
92 
93 private:
95 };
96 
98 {}
99 
100 void
102 {
103  m_phy->DoSendMacPdu (p);
104 }
105 
106 void
108 {
110 }
111 
112 void
113 UeMemberLteUePhySapProvider::SendRachPreamble (uint32_t prachId, uint32_t raRnti)
114 {
115  m_phy->DoSendRachPreamble (prachId, raRnti);
116 }
117 
118 void
120 {
122 }
123 
124 
126 // LteUePhy methods
128 
130 static const std::string g_uePhyStateName[LteUePhy::NUM_STATES] =
131 {
132  "CELL_SEARCH",
133  "SYNCHRONIZED"
134 };
135 
140 static inline const std::string & ToString (LteUePhy::State s)
141 {
142  return g_uePhyStateName[s];
143 }
144 
145 
146 NS_OBJECT_ENSURE_REGISTERED (LteUePhy);
147 
148 
150 {
151  NS_LOG_FUNCTION (this);
152  NS_FATAL_ERROR ("This constructor should not be called");
153 }
154 
156  : LtePhy (dlPhy, ulPhy),
157  m_uePhySapUser (0),
158  m_ueCphySapUser (0),
159  m_state (CELL_SEARCH),
160  m_subframeNo (0),
161  m_rsReceivedPowerUpdated (false),
162  m_rsInterferencePowerUpdated (false),
163  m_dataInterferencePowerUpdated (false),
164  m_pssReceived (false),
165  m_ueMeasurementsFilterPeriod (MilliSeconds (200)),
166  m_ueMeasurementsFilterLast (MilliSeconds (0)),
167  m_rsrpSinrSampleCounter (0),
168  m_imsi (0)
169 {
170  m_amc = CreateObject <LteAmc> ();
171  m_powerControl = CreateObject <LteUePowerControl> ();
175 
176  NS_ASSERT_MSG (Simulator::Now ().GetNanoSeconds () == 0,
177  "Cannot create UE devices after simulation started");
179 
180  DoReset ();
181 }
182 
183 
185 {
186  m_txModeGain.clear ();
187 }
188 
189 void
191 {
192  NS_LOG_FUNCTION (this);
193  delete m_uePhySapProvider;
194  delete m_ueCphySapProvider;
196 }
197 
198 
199 
200 TypeId
202 {
203  static TypeId tid = TypeId ("ns3::LteUePhy")
204  .SetParent<LtePhy> ()
205  .SetGroupName ("Lte")
206  .AddConstructor<LteUePhy> ()
207  .AddAttribute ("TxPower",
208  "Transmission power in dBm",
209  DoubleValue (10.0),
212  MakeDoubleChecker<double> ())
213  .AddAttribute ("NoiseFigure",
214  "Loss (dB) in the Signal-to-Noise-Ratio due to non-idealities in the receiver."
215  " According to Wikipedia (http://en.wikipedia.org/wiki/Noise_figure), this is "
216  "\"the difference in decibels (dB) between"
217  " the noise output of the actual receiver to the noise output of an "
218  " ideal receiver with the same overall gain and bandwidth when the receivers "
219  " are connected to sources at the standard noise temperature T0.\" "
220  "In this model, we consider T0 = 290K.",
221  DoubleValue (9.0),
224  MakeDoubleChecker<double> ())
225  .AddAttribute ("TxMode1Gain",
226  "Transmission mode 1 gain in dB",
227  DoubleValue (0.0),
229  MakeDoubleChecker<double> ())
230  .AddAttribute ("TxMode2Gain",
231  "Transmission mode 2 gain in dB",
232  DoubleValue (4.2),
234  MakeDoubleChecker<double> ())
235  .AddAttribute ("TxMode3Gain",
236  "Transmission mode 3 gain in dB",
237  DoubleValue (-2.8),
239  MakeDoubleChecker<double> ())
240  .AddAttribute ("TxMode4Gain",
241  "Transmission mode 4 gain in dB",
242  DoubleValue (0.0),
244  MakeDoubleChecker<double> ())
245  .AddAttribute ("TxMode5Gain",
246  "Transmission mode 5 gain in dB",
247  DoubleValue (0.0),
249  MakeDoubleChecker<double> ())
250  .AddAttribute ("TxMode6Gain",
251  "Transmission mode 6 gain in dB",
252  DoubleValue (0.0),
254  MakeDoubleChecker<double> ())
255  .AddAttribute ("TxMode7Gain",
256  "Transmission mode 7 gain in dB",
257  DoubleValue (0.0),
259  MakeDoubleChecker<double> ())
260  .AddTraceSource ("ReportCurrentCellRsrpSinr",
261  "RSRP and SINR statistics.",
263  "ns3::LteUePhy::RsrpSinrTracedCallback")
264  .AddAttribute ("RsrpSinrSamplePeriod",
265  "The sampling period for reporting RSRP-SINR stats (default value 1)",
266  UintegerValue (1),
268  MakeUintegerChecker<uint16_t> ())
269  .AddTraceSource ("ReportUlPhyResourceBlocks",
270  "UL transmission PHY layer resource blocks.",
272  "ns3::LteUePhy::UlPhyResourceBlocksTracedCallback")
273  .AddTraceSource ("ReportPowerSpectralDensity",
274  "Power Spectral Density data.",
276  "ns3::LteUePhy::PowerSpectralDensityTracedCallback")
277  .AddTraceSource ("UlPhyTransmission",
278  "DL transmission PHY layer statistics.",
280  "ns3::PhyTransmissionStatParameters::TracedCallback")
281  .AddAttribute ("DlSpectrumPhy",
282  "The downlink LteSpectrumPhy associated to this LtePhy",
284  PointerValue (),
286  MakePointerChecker <LteSpectrumPhy> ())
287  .AddAttribute ("UlSpectrumPhy",
288  "The uplink LteSpectrumPhy associated to this LtePhy",
290  PointerValue (),
292  MakePointerChecker <LteSpectrumPhy> ())
293  .AddAttribute ("RsrqUeMeasThreshold",
294  "Receive threshold for PSS on RSRQ [dB]",
295  DoubleValue (-1000.0),
297  MakeDoubleChecker<double> ())
298  .AddAttribute ("UeMeasurementsFilterPeriod",
299  "Time period for reporting UE measurements, i.e., the"
300  "length of layer-1 filtering.",
301  TimeValue (MilliSeconds (200)),
303  MakeTimeChecker ())
304  .AddAttribute ("DownlinkCqiPeriodicity",
305  "Periodicity in milliseconds for reporting the"
306  "wideband and subband downlink CQIs to the eNB",
307  TimeValue (MilliSeconds (1)),
309  MakeTimeChecker ())
310  .AddTraceSource ("ReportUeMeasurements",
311  "Report UE measurements RSRP (dBm) and RSRQ (dB).",
313  "ns3::LteUePhy::RsrpRsrqTracedCallback")
314  .AddTraceSource ("StateTransition",
315  "Trace fired upon every UE PHY state transition",
317  "ns3::LteUePhy::StateTracedCallback")
318  .AddAttribute ("EnableUplinkPowerControl",
319  "If true, Uplink Power Control will be enabled.",
320  BooleanValue (true),
323  .AddAttribute ("Qout",
324  "corresponds to 10% block error rate of a hypothetical PDCCH transmission"
325  "taking into account the PCFICH errors with transmission parameters."
326  "see 3GPP TS 36.213 4.2.1 and TS 36.133 7.6",
327  DoubleValue (-5),
329  MakeDoubleChecker<double> ())
330  .AddAttribute ("Qin",
331  "corresponds to 2% block error rate of a hypothetical PDCCH transmission"
332  "taking into account the PCFICH errors with transmission parameters."
333  "see 3GPP TS 36.213 4.2.1 and TS 36.133 7.6",
334  DoubleValue (-3.9),
336  MakeDoubleChecker<double> ())
337  .AddAttribute ("NumQoutEvalSf",
338  "This specifies the total number of consecutive subframes"
339  "which corresponds to the Qout evaluation period",
340  UintegerValue (200), //see 3GPP 3GPP TS 36.133 7.6.2.1
343  MakeUintegerChecker<uint16_t> ())
344  .AddAttribute ("NumQinEvalSf",
345  "This specifies the total number of consecutive subframes"
346  "which corresponds to the Qin evaluation period",
347  UintegerValue (100), //see 3GPP 3GPP TS 36.133 7.6.2.1
350  MakeUintegerChecker<uint16_t> ())
351  .AddAttribute ("EnableRlfDetection",
352  "If true, RLF detection will be enabled.",
353  BooleanValue (true),
356  ;
357  return tid;
358 }
359 
360 void
362 {
363  NS_LOG_FUNCTION (this);
364 
365  NS_ABORT_MSG_IF (m_netDevice == nullptr, "LteNetDevice is not available in LteUePhy");
366  Ptr<Node> node = m_netDevice->GetNode ();
367  NS_ABORT_MSG_IF (node == nullptr, "Node is not available in the LteNetDevice of LteUePhy");
368  uint32_t nodeId = node->GetId ();
369 
370  //ScheduleWithContext() is needed here to set context for logs,
371  //because Initialize() is called outside of Node::AddDevice().
372 
374 
376 }
377 
378 void
380 {
381  NS_LOG_FUNCTION (this);
382  m_uePhySapUser = s;
383 }
384 
387 {
388  NS_LOG_FUNCTION (this);
389  return (m_uePhySapProvider);
390 }
391 
392 
393 void
395 {
396  NS_LOG_FUNCTION (this);
397  m_ueCphySapUser = s;
398 }
399 
402 {
403  NS_LOG_FUNCTION (this);
404  return (m_ueCphySapProvider);
405 }
406 
407 void
409 {
410  NS_LOG_FUNCTION (this << nf);
411  m_noiseFigure = nf;
412 }
413 
414 double
416 {
417  NS_LOG_FUNCTION (this);
418  return m_noiseFigure;
419 }
420 
421 void
423 {
424  NS_LOG_FUNCTION (this << pow);
425  m_txPower = pow;
426  m_powerControl->SetTxPower (pow);
427 }
428 
429 double
431 {
432  NS_LOG_FUNCTION (this);
433  return m_txPower;
434 }
435 
438 {
439  NS_LOG_FUNCTION (this);
440  return m_powerControl;
441 }
442 
443 uint8_t
445 {
446  return (m_macChTtiDelay);
447 }
448 
451 {
452  return m_downlinkSpectrumPhy;
453 }
454 
457 {
458  return m_uplinkSpectrumPhy;
459 }
460 
461 void
462 LteUePhy::SetNumQoutEvalSf (uint16_t numSubframes)
463 {
464  NS_LOG_FUNCTION (this << numSubframes);
465  NS_ABORT_MSG_IF (numSubframes % 10 != 0, "Number of subframes used for Qout "
466  "evaluation must be multiple of 10");
467  m_numOfQoutEvalSf = numSubframes;
468 }
469 
470 void
471 LteUePhy::SetNumQinEvalSf (uint16_t numSubframes)
472 {
473  NS_LOG_FUNCTION (this << numSubframes);
474  NS_ABORT_MSG_IF (numSubframes % 10 != 0, "Number of subframes used for Qin "
475  "evaluation must be multiple of 10");
476  m_numOfQinEvalSf = numSubframes;
477 }
478 
479 uint16_t
481 {
482  NS_LOG_FUNCTION (this);
483  return m_numOfQoutEvalSf;
484 }
485 
486 uint16_t
488 {
489  NS_LOG_FUNCTION (this);
490  return m_numOfQinEvalSf;
491 }
492 
493 void
495 {
496  NS_LOG_FUNCTION (this);
497 
498  SetMacPdu (p);
499 }
500 
501 
502 void
504 {
506 }
507 
508 void
510 {
511  NS_LOG_FUNCTION (this);
512 
514 
516  m_uplinkSpectrumPhy->SetTxPowerSpectralDensity (txPsd);
517 }
518 
519 
520 void
521 LteUePhy::SetSubChannelsForReception (std::vector <int> mask)
522 {
523  NS_LOG_FUNCTION (this);
525 }
526 
527 
528 std::vector <int>
530 {
531  NS_LOG_FUNCTION (this);
533 }
534 
535 
536 std::vector <int>
538 {
539  NS_LOG_FUNCTION (this);
541 }
542 
543 
546 {
547  NS_LOG_FUNCTION (this);
548  LteSpectrumValueHelper psdHelper;
551 
552  return psd;
553 }
554 
555 void
557 {
558  NS_LOG_FUNCTION (this);
568  if (m_cellId == 0)
569  {
570  return;
571  }
572  m_ctrlSinrForRlf = sinr;
573  GenerateCqiRsrpRsrq (sinr);
574 }
575 
576 void
578 {
579  NS_LOG_FUNCTION (this << sinr);
580 
582  NS_ASSERT (m_cellId > 0);
583 
584  if (m_dlConfigured && m_ulConfigured && (m_rnti > 0))
585  {
586  // check periodic wideband CQI
588  {
589  NS_LOG_DEBUG ("Reporting P10 CQI at : " << Simulator::Now ().As (Time::MS)
590  << ". Last reported at : " << m_p10CqiLast.As (Time::MS));
591  Ptr<LteUeNetDevice> thisDevice = GetDevice ()->GetObject<LteUeNetDevice> ();
593  if (msg)
594  {
596  }
598  }
599  // check aperiodic high-layer configured subband CQI
601  {
602  NS_LOG_DEBUG ("Reporting A30 CQI at : " << Simulator::Now ().As (Time::MS)
603  << ". Last reported at : " << m_a30CqiLast.As (Time::MS));
604  Ptr<LteUeNetDevice> thisDevice = GetDevice ()->GetObject<LteUeNetDevice> ();
606  if (msg)
607  {
609  }
611  }
612  }
613 
614  // Generate PHY trace
617  {
618  NS_ASSERT_MSG (m_rsReceivedPowerUpdated, " RS received power info obsolete");
619  // RSRP evaluated as averaged received power among RBs
620  double sum = 0.0;
621  uint8_t rbNum = 0;
622  Values::const_iterator it;
624  {
625  // convert PSD [W/Hz] to linear power [W] for the single RE
626  // we consider only one RE for the RS since the channel is
627  // flat within the same RB
628  double powerTxW = ((*it) * 180000.0) / 12.0;
629  sum += powerTxW;
630  rbNum++;
631  }
632  double rsrp = (rbNum > 0) ? (sum / rbNum) : DBL_MAX;
633  // averaged SINR among RBs
634  double avSinr = ComputeAvgSinr (sinr);
635 
636  NS_LOG_INFO (this << " cellId " << m_cellId << " rnti " << m_rnti << " RSRP " << rsrp << " SINR " << avSinr << " ComponentCarrierId " << (uint16_t) m_componentCarrierId);
637  //trigger RLF detection only when UE has an active RRC connection
638  //and RLF detection attribute is set to true
640  {
641  double avrgSinrForRlf = ComputeAvgSinr (m_ctrlSinrForRlf);
642  RlfDetection (10 * log10 (avrgSinrForRlf));
643  }
644 
647  }
648 
649  if (m_pssReceived)
650  {
651  // measure instantaneous RSRQ now
652  NS_ASSERT_MSG (m_rsInterferencePowerUpdated, " RS interference power info obsolete");
653 
654  std::list <PssElement>::iterator itPss = m_pssList.begin ();
655  while (itPss != m_pssList.end ())
656  {
657  uint16_t rbNum = 0;
658  double rssiSum = 0.0;
659 
660  Values::const_iterator itIntN = m_rsInterferencePower.ConstValuesBegin ();
661  Values::const_iterator itPj = m_rsReceivedPower.ConstValuesBegin ();
662  for (itPj = m_rsReceivedPower.ConstValuesBegin ();
664  itIntN++, itPj++)
665  {
666  rbNum++;
667  // convert PSD [W/Hz] to linear power [W] for the single RE
668  double interfPlusNoisePowerTxW = ((*itIntN) * 180000.0) / 12.0;
669  double signalPowerTxW = ((*itPj) * 180000.0) / 12.0;
670  rssiSum += (2 * (interfPlusNoisePowerTxW + signalPowerTxW));
671  }
672 
673  NS_ASSERT (rbNum == (*itPss).nRB);
674  double rsrq_dB = 10 * log10 ((*itPss).pssPsdSum / rssiSum);
675 
676  if (rsrq_dB > m_pssReceptionThreshold)
677  {
678  NS_LOG_INFO (this << " PSS RNTI " << m_rnti << " cellId " << m_cellId
679  << " has RSRQ " << rsrq_dB << " and RBnum " << rbNum);
680  // store measurements
681  std::map <uint16_t, UeMeasurementsElement>::iterator itMeasMap;
682  itMeasMap = m_ueMeasurementsMap.find ((*itPss).cellId);
683  if (itMeasMap != m_ueMeasurementsMap.end ())
684  {
685  (*itMeasMap).second.rsrqSum += rsrq_dB;
686  (*itMeasMap).second.rsrqNum++;
687  }
688  else
689  {
690  NS_LOG_WARN ("race condition of bug 2091 occurred");
691  }
692  }
693 
694  itPss++;
695 
696  } // end of while (itPss != m_pssList.end ())
697 
698  m_pssList.clear ();
699 
700  } // end of if (m_pssReceived)
701 
702 } // end of void LteUePhy::GenerateCtrlCqiReport (const SpectrumValue& sinr)
703 
704 double
706 {
707  NS_LOG_FUNCTION (this);
708 
709  // averaged SINR among RBs
710  double sum = 0.0;
711  uint8_t rbNum = 0;
712  Values::const_iterator it;
713 
714  for (it = sinr.ConstValuesBegin (); it != sinr.ConstValuesEnd (); it++)
715  {
716  sum += (*it);
717  rbNum++;
718  }
719 
720  double avrgSinr = (rbNum > 0) ? (sum / rbNum) : DBL_MAX;
721 
722  return avrgSinr;
723 }
724 
725 void
727 {
728  // Not used by UE, CQI are based only on RS
729 }
730 
731 void
733 {
734  NS_LOG_FUNCTION (this);
735 
745  if (m_cellId == 0)
746  {
747  return;
748  }
749 
751  //NOTE: The SINR received by this method is
752  //based on CTRL, which is not used to compute
753  //PDSCH (i.e., data) based SINR. It is used
754  //for RLF detection.
755  m_ctrlSinrForRlf = sinr;
756 
759  {
760  // we have a measurement of interf + noise for the denominator
761  // of SINR = S/(I+N)
762  mixedSinr /= m_dataInterferencePower;
764  NS_LOG_LOGIC ("data interf measurement available, SINR = " << mixedSinr);
765  }
766  else
767  {
768  // we did not see any interference on data, so interference is
769  // there and we have only noise at the denominator of SINR
770  mixedSinr /= (*m_noisePsd);
771  NS_LOG_LOGIC ("no data interf measurement available, SINR = " << mixedSinr);
772  }
773 
774  /*
775  * some RBs are not used in PDSCH and their SINR is very high
776  * for example with bandwidth 25, last RB is not used
777  * it can make avgSinr value very high, what is incorrect
778  */
779  uint32_t rbgSize = GetRbgSize ();
780  uint32_t modulo = m_dlBandwidth % rbgSize;
781  double avgMixedSinr = 0;
782  uint32_t usedRbgNum = 0;
783  for (uint32_t i = 0; i < (m_dlBandwidth - 1 - modulo); i++)
784  {
785  usedRbgNum++;
786  avgMixedSinr += mixedSinr[i];
787  }
788  avgMixedSinr = avgMixedSinr / usedRbgNum;
789  for (uint32_t i = 0; i < modulo; i++)
790  {
791  mixedSinr[m_dlBandwidth - 1 - i] = avgMixedSinr;
792  }
793 
794  GenerateCqiRsrpRsrq (mixedSinr);
795 }
796 
797 void
799 {
800  NS_LOG_FUNCTION (this << interf);
802  m_rsInterferencePower = interf;
803 }
804 
805 void
807 {
808  NS_LOG_FUNCTION (this << interf);
809 
811  m_dataInterferencePower = interf;
812 }
813 
814 void
816 {
817  NS_LOG_FUNCTION (this << power);
819  m_rsReceivedPower = power;
820 
822  {
823  double sum = 0;
824  uint32_t rbNum = 0;
825  Values::const_iterator it;
827  {
828  double powerTxW = ((*it) * 180000);
829  sum += powerTxW;
830  rbNum++;
831  }
832  double rsrp = 10 * log10 (sum) + 30;
833 
834  NS_LOG_INFO ("RSRP: " << rsrp);
835  m_powerControl->SetRsrp (rsrp);
836  }
837 }
838 
841 {
842  NS_LOG_FUNCTION (this);
843 
844 
845  // apply transmission mode gain
847  SpectrumValue newSinr = sinr;
848  newSinr *= m_txModeGain.at (m_transmissionMode);
849 
850  // CREATE DlCqiLteControlMessage
851  Ptr<DlCqiLteControlMessage> msg = Create<DlCqiLteControlMessage> ();
852  CqiListElement_s dlcqi;
853  std::vector<int> cqi;
855  {
856  cqi = m_amc->CreateCqiFeedbacks (newSinr, m_dlBandwidth);
857 
859  int nbSubChannels = cqi.size ();
860  double cqiSum = 0.0;
861  int activeSubChannels = 0;
862  // average the CQIs of the different RBs
863  for (int i = 0; i < nbSubChannels; i++)
864  {
865  if (cqi.at (i) != -1)
866  {
867  cqiSum += cqi.at (i);
868  activeSubChannels++;
869  }
870  NS_LOG_DEBUG (this << " subch " << i << " cqi " << cqi.at (i));
871  }
872  dlcqi.m_rnti = m_rnti;
873  dlcqi.m_ri = 1; // not yet used
874  dlcqi.m_cqiType = CqiListElement_s::P10; // Peridic CQI using PUCCH wideband
875  NS_ASSERT_MSG (nLayer > 0, " nLayer negative");
876  NS_ASSERT_MSG (nLayer < 3, " nLayer limit is 2s");
877  for (int i = 0; i < nLayer; i++)
878  {
879  if (activeSubChannels > 0)
880  {
881  dlcqi.m_wbCqi.push_back ((uint16_t) cqiSum / activeSubChannels);
882  }
883  else
884  {
885  // approximate with the worst case -> CQI = 1
886  dlcqi.m_wbCqi.push_back (1);
887  }
888  }
889  //NS_LOG_DEBUG (this << " Generate P10 CQI feedback " << (uint16_t) cqiSum / activeSubChannels);
890  dlcqi.m_wbPmi = 0; // not yet used
891  // dl.cqi.m_sbMeasResult others CQI report modes: not yet implemented
892  }
894  {
895  cqi = m_amc->CreateCqiFeedbacks (newSinr, GetRbgSize ());
897  int nbSubChannels = cqi.size ();
898  int rbgSize = GetRbgSize ();
899  double cqiSum = 0.0;
900  int cqiNum = 0;
901  SbMeasResult_s rbgMeas;
902  //NS_LOG_DEBUG (this << " Create A30 CQI feedback, RBG " << rbgSize << " cqiNum " << nbSubChannels << " band " << (uint16_t)m_dlBandwidth);
903  for (int i = 0; i < nbSubChannels; i++)
904  {
905  if (cqi.at (i) != -1)
906  {
907  cqiSum += cqi.at (i);
908  }
909  // else "nothing" no CQI is treated as CQI = 0 (worst case scenario)
910  cqiNum++;
911  if (cqiNum == rbgSize)
912  {
913  // average the CQIs of the different RBGs
914  //NS_LOG_DEBUG (this << " RBG CQI " << (uint16_t) cqiSum / rbgSize);
915  HigherLayerSelected_s hlCqi;
916  hlCqi.m_sbPmi = 0; // not yet used
917  for (int i = 0; i < nLayer; i++)
918  {
919  hlCqi.m_sbCqi.push_back ((uint16_t) cqiSum / rbgSize);
920  }
921  rbgMeas.m_higherLayerSelected.push_back (hlCqi);
922  cqiSum = 0.0;
923  cqiNum = 0;
924  }
925  }
926  dlcqi.m_rnti = m_rnti;
927  dlcqi.m_ri = 1; // not yet used
928  dlcqi.m_cqiType = CqiListElement_s::A30; // Aperidic CQI using PUSCH
929  //dlcqi.m_wbCqi.push_back ((uint16_t) cqiSum / nbSubChannels);
930  dlcqi.m_wbPmi = 0; // not yet used
931  dlcqi.m_sbMeasResult = rbgMeas;
932  }
933 
934  msg->SetDlCqi (dlcqi);
935  return msg;
936 }
937 
938 
939 void
941 {
942  NS_LOG_FUNCTION (this << Simulator::Now ());
943  NS_LOG_DEBUG (this << " Report UE Measurements ");
944 
946 
947  std::map <uint16_t, UeMeasurementsElement>::iterator it;
948  for (it = m_ueMeasurementsMap.begin (); it != m_ueMeasurementsMap.end (); it++)
949  {
950  double avg_rsrp = (*it).second.rsrpSum / (double)(*it).second.rsrpNum;
951  double avg_rsrq = (*it).second.rsrqSum / (double)(*it).second.rsrqNum;
952  /*
953  * In CELL_SEARCH state, this may result in avg_rsrq = 0/0 = -nan.
954  * UE RRC must take this into account when receiving measurement reports.
955  * TODO remove this shortcoming by calculating RSRQ during CELL_SEARCH
956  */
957  NS_LOG_DEBUG (this << " CellId " << (*it).first
958  << " RSRP " << avg_rsrp
959  << " (nSamples " << (uint16_t)(*it).second.rsrpNum << ")"
960  << " RSRQ " << avg_rsrq
961  << " (nSamples " << (uint16_t)(*it).second.rsrqNum << ")"
962  << " ComponentCarrierID " << (uint16_t)m_componentCarrierId);
963 
965  newEl.m_cellId = (*it).first;
966  newEl.m_rsrp = avg_rsrp;
967  newEl.m_rsrq = avg_rsrq;
968  ret.m_ueMeasurementsList.push_back (newEl);
970 
971  // report to UE measurements trace
972  m_reportUeMeasurements (m_rnti, (*it).first, avg_rsrp, avg_rsrq, ((*it).first == m_cellId ? 1 : 0), m_componentCarrierId);
973  }
974 
975  // report to RRC
977 
978  m_ueMeasurementsMap.clear ();
980 }
981 
982 void
984 {
985  NS_LOG_FUNCTION (this << cqiPeriodicity);
986  m_a30CqiPeriodicity = cqiPeriodicity;
987  m_p10CqiPeriodicity = cqiPeriodicity;
988 }
989 
990 void
992 {
993  NS_LOG_FUNCTION (this << msg);
994 
995  SetControlMessages (msg);
996 }
997 
998 void
999 LteUePhy::DoSendRachPreamble (uint32_t raPreambleId, uint32_t raRnti)
1000 {
1001  NS_LOG_FUNCTION (this << raPreambleId);
1002 
1003  // unlike other control messages, RACH preamble is sent ASAP
1004  Ptr<RachPreambleLteControlMessage> msg = Create<RachPreambleLteControlMessage> ();
1005  msg->SetRapId (raPreambleId);
1006  m_raPreambleId = raPreambleId;
1007  m_raRnti = raRnti;
1008  m_controlMessagesQueue.at (0).push_back (msg);
1009 }
1010 
1011 void
1013 {
1019  if (m_componentCarrierId == 0)
1020  {
1021  m_isConnected = true;
1022  // Initialize the parameters for radio link failure detection
1024  }
1025 }
1026 
1027 
1028 
1029 void
1031 {
1032  NS_LOG_FUNCTION (this);
1033 
1034  std::list<Ptr<LteControlMessage> >::iterator it;
1035  NS_LOG_DEBUG (this << " I am rnti = " << m_rnti << " and I received msgs " << (uint16_t) msgList.size ());
1036  for (it = msgList.begin (); it != msgList.end (); it++)
1037  {
1038  Ptr<LteControlMessage> msg = (*it);
1039 
1040  if (msg->GetMessageType () == LteControlMessage::DL_DCI)
1041  {
1042  Ptr<DlDciLteControlMessage> msg2 = DynamicCast<DlDciLteControlMessage> (msg);
1043 
1044  DlDciListElement_s dci = msg2->GetDci ();
1045  if (dci.m_rnti != m_rnti)
1046  {
1047  // DCI not for me
1048  continue;
1049  }
1050 
1051  if (dci.m_resAlloc != 0)
1052  {
1053  NS_FATAL_ERROR ("Resource Allocation type not implemented");
1054  }
1055 
1056  std::vector <int> dlRb;
1057 
1058  // translate the DCI to Spectrum framework
1059  uint32_t mask = 0x1;
1060  for (int i = 0; i < 32; i++)
1061  {
1062  if (((dci.m_rbBitmap & mask) >> i) == 1)
1063  {
1064  for (int k = 0; k < GetRbgSize (); k++)
1065  {
1066  dlRb.push_back ((i * GetRbgSize ()) + k);
1067 // NS_LOG_DEBUG(this << " RNTI " << m_rnti << " RBG " << i << " DL-DCI allocated PRB " << (i*GetRbgSize()) + k);
1068  }
1069  }
1070  mask = (mask << 1);
1071  }
1073  {
1075  }
1076 
1077 
1078  // send TB info to LteSpectrumPhy
1079  NS_LOG_DEBUG (this << " UE " << m_rnti << " DL-DCI " << dci.m_rnti << " bitmap " << dci.m_rbBitmap);
1080  for (uint8_t i = 0; i < dci.m_tbsSize.size (); i++)
1081  {
1082  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 /* DL */);
1083  }
1084 
1086 
1087 
1088  }
1089  else if (msg->GetMessageType () == LteControlMessage::UL_DCI)
1090  {
1091  // set the uplink bandwidth according to the UL-CQI
1092  Ptr<UlDciLteControlMessage> msg2 = DynamicCast<UlDciLteControlMessage> (msg);
1093  UlDciListElement_s dci = msg2->GetDci ();
1094  if (dci.m_rnti != m_rnti)
1095  {
1096  // DCI not for me
1097  continue;
1098  }
1099  NS_LOG_INFO (this << " UL DCI");
1100  std::vector <int> ulRb;
1101  for (int i = 0; i < dci.m_rbLen; i++)
1102  {
1103  ulRb.push_back (i + dci.m_rbStart);
1104  //NS_LOG_DEBUG (this << " UE RB " << i + dci.m_rbStart);
1105  }
1108  // fire trace of UL Tx PHY stats
1109  HarqProcessInfoList_t harqInfoList = m_harqPhyModule->GetHarqProcessInfoUl (m_rnti, 0);
1111  params.m_cellId = m_cellId;
1112  params.m_imsi = 0; // it will be set by DlPhyTransmissionCallback in LteHelper
1114  params.m_rnti = m_rnti;
1115  params.m_txMode = 0; // always SISO for UE
1116  params.m_layer = 0;
1117  params.m_mcs = dci.m_mcs;
1118  params.m_size = dci.m_tbSize;
1119  params.m_rv = harqInfoList.size ();
1120  params.m_ndi = dci.m_ndi;
1121  params.m_ccId = m_componentCarrierId;
1122  m_ulPhyTransmission (params);
1123  // pass the info to the MAC
1125  }
1126  else if (msg->GetMessageType () == LteControlMessage::RAR)
1127  {
1128  Ptr<RarLteControlMessage> rarMsg = DynamicCast<RarLteControlMessage> (msg);
1129  if (rarMsg->GetRaRnti () == m_raRnti)
1130  {
1131  for (std::list<RarLteControlMessage::Rar>::const_iterator it = rarMsg->RarListBegin (); it != rarMsg->RarListEnd (); ++it)
1132  {
1133  if (it->rapId != m_raPreambleId)
1134  {
1135  // UL grant not for me
1136  continue;
1137  }
1138  else
1139  {
1140  NS_LOG_INFO ("received RAR RNTI " << m_raRnti);
1141  // set the uplink bandwidth according to the UL grant
1142  std::vector <int> ulRb;
1143  for (int i = 0; i < it->rarPayload.m_grant.m_rbLen; i++)
1144  {
1145  ulRb.push_back (i + it->rarPayload.m_grant.m_rbStart);
1146  }
1147 
1149  // pass the info to the MAC
1151  // reset RACH variables with out of range values
1152  m_raPreambleId = 255;
1153  m_raRnti = 11;
1154  }
1155  }
1156  }
1157  }
1158  else if (msg->GetMessageType () == LteControlMessage::MIB)
1159  {
1160  NS_LOG_INFO ("received MIB");
1161  NS_ASSERT (m_cellId > 0);
1162  Ptr<MibLteControlMessage> msg2 = DynamicCast<MibLteControlMessage> (msg);
1164  }
1165  else if (msg->GetMessageType () == LteControlMessage::SIB1)
1166  {
1167  NS_LOG_INFO ("received SIB1");
1168  NS_ASSERT (m_cellId > 0);
1169  Ptr<Sib1LteControlMessage> msg2 = DynamicCast<Sib1LteControlMessage> (msg);
1171  }
1172  else
1173  {
1174  // pass the message to UE-MAC
1176  }
1177 
1178  }
1179 
1180 
1181 }
1182 
1183 
1184 void
1186 {
1187  NS_LOG_FUNCTION (this << cellId << (*p));
1188 
1189  double sum = 0.0;
1190  uint16_t nRB = 0;
1191  Values::const_iterator itPi;
1192  for (itPi = p->ConstValuesBegin (); itPi != p->ConstValuesEnd (); itPi++)
1193  {
1194  // convert PSD [W/Hz] to linear power [W] for the single RE
1195  double powerTxW = ((*itPi) * 180000.0) / 12.0;
1196  sum += powerTxW;
1197  nRB++;
1198  }
1199 
1200  // measure instantaneous RSRP now
1201  double rsrp_dBm = 10 * log10 (1000 * (sum / (double)nRB));
1202  NS_LOG_INFO (this << " PSS RNTI " << m_rnti << " cellId " << m_cellId
1203  << " has RSRP " << rsrp_dBm << " and RBnum " << nRB);
1204  // note that m_pssReceptionThreshold does not apply here
1205 
1206  // store measurements
1207  std::map <uint16_t, UeMeasurementsElement>::iterator itMeasMap = m_ueMeasurementsMap.find (cellId);
1208  if (itMeasMap == m_ueMeasurementsMap.end ())
1209  {
1210  // insert new entry
1211  UeMeasurementsElement newEl;
1212  newEl.rsrpSum = rsrp_dBm;
1213  newEl.rsrpNum = 1;
1214  newEl.rsrqSum = 0;
1215  newEl.rsrqNum = 0;
1216  m_ueMeasurementsMap.insert (std::pair <uint16_t, UeMeasurementsElement> (cellId, newEl));
1217  }
1218  else
1219  {
1220  (*itMeasMap).second.rsrpSum += rsrp_dBm;
1221  (*itMeasMap).second.rsrpNum++;
1222  }
1223 
1224  /*
1225  * Collect the PSS for later processing in GenerateCtrlCqiReport()
1226  * (to be called from ChunkProcessor after RX is finished).
1227  */
1228  m_pssReceived = true;
1229  PssElement el;
1230  el.cellId = cellId;
1231  el.pssPsdSum = sum;
1232  el.nRB = nRB;
1233  m_pssList.push_back (el);
1234 
1235 } // end of void LteUePhy::ReceivePss (uint16_t cellId, Ptr<SpectrumValue> p)
1236 
1237 
1238 void
1240 {
1242 }
1243 
1244 
1245 void
1246 LteUePhy::SubframeIndication (uint32_t frameNo, uint32_t subframeNo)
1247 {
1248  NS_LOG_FUNCTION (this << frameNo << subframeNo);
1249 
1250  NS_ASSERT_MSG (frameNo > 0, "the SRS index check code assumes that frameNo starts at 1");
1251 
1252  // refresh internal variables
1253  m_rsReceivedPowerUpdated = false;
1255  m_pssReceived = false;
1256 
1257  if (m_ulConfigured)
1258  {
1259  // update uplink transmission mask according to previous UL-CQIs
1260  std::vector <int> rbMask = m_subChannelsForTransmissionQueue.at (0);
1262 
1263  // shift the queue
1264  for (uint8_t i = 1; i < m_macChTtiDelay; i++)
1265  {
1267  }
1269 
1271  {
1272 
1273  NS_ASSERT_MSG (subframeNo > 0 && subframeNo <= 10, "the SRS index check code assumes that subframeNo starts at 1");
1274  if ((((frameNo - 1) * 10 + (subframeNo - 1)) % m_srsPeriodicity) == m_srsSubframeOffset)
1275  {
1276  NS_LOG_INFO ("frame " << frameNo << " subframe " << subframeNo << " sending SRS (offset=" << m_srsSubframeOffset << ", period=" << m_srsPeriodicity << ")");
1279  this);
1280  }
1281  }
1282 
1283  std::list<Ptr<LteControlMessage> > ctrlMsg = GetControlMessages ();
1284  // send packets in queue
1285  NS_LOG_LOGIC (this << " UE - start slot for PUSCH + PUCCH - RNTI " << m_rnti << " CELLID " << m_cellId);
1286  // send the current burts of packets
1288  if (pb)
1289  {
1291  {
1294  }
1295  m_uplinkSpectrumPhy->StartTxDataFrame (pb, ctrlMsg, UL_DATA_DURATION);
1296  }
1297  else
1298  {
1299  // send only PUCCH (ideal: fake null bandwidth signal)
1300  if (ctrlMsg.size () > 0)
1301  {
1302  NS_LOG_LOGIC (this << " UE - start TX PUCCH (NO PUSCH)");
1303  std::vector <int> dlRb;
1304 
1306  {
1308  }
1309 
1311  m_uplinkSpectrumPhy->StartTxDataFrame (pb, ctrlMsg, UL_DATA_DURATION);
1312  }
1313  else
1314  {
1315  NS_LOG_LOGIC (this << " UE - UL NOTHING TO SEND");
1316  }
1317  }
1318  } // m_configured
1319 
1320  // trigger the MAC
1321  m_uePhySapUser->SubframeIndication (frameNo, subframeNo);
1322 
1323  m_subframeNo = subframeNo;
1324  ++subframeNo;
1325  if (subframeNo > 10)
1326  {
1327  ++frameNo;
1328  subframeNo = 1;
1329  }
1330 
1331  // schedule next subframe indication
1332  Simulator::Schedule (Seconds (GetTti ()), &LteUePhy::SubframeIndication, this, frameNo, subframeNo);
1333 }
1334 
1335 
1336 void
1338 {
1339  NS_LOG_FUNCTION (this << " UE " << m_rnti << " start tx SRS, cell Id " << (uint32_t) m_cellId);
1340  NS_ASSERT (m_cellId > 0);
1341  // set the current tx power spectral density (full bandwidth)
1342  std::vector <int> dlRb;
1343  for (uint8_t i = 0; i < m_ulBandwidth; i++)
1344  {
1345  dlRb.push_back (i);
1346  }
1347 
1349  {
1351  }
1352 
1354  m_uplinkSpectrumPhy->StartTxUlSrsFrame ();
1355 }
1356 
1357 
1358 void
1360 {
1361  NS_LOG_FUNCTION (this);
1362 
1363  m_rnti = 0;
1364  m_cellId = 0;
1365  m_isConnected = false;
1366  m_transmissionMode = 0;
1367  m_srsPeriodicity = 0;
1368  m_srsConfigured = false;
1369  m_dlConfigured = false;
1370  m_ulConfigured = false;
1371  m_raPreambleId = 255; // value out of range
1372  m_raRnti = 11; // value out of range
1376  m_paLinear = 1;
1377 
1378  m_packetBurstQueue.clear ();
1379  m_controlMessagesQueue.clear ();
1381  for (int i = 0; i < m_macChTtiDelay; i++)
1382  {
1383  Ptr<PacketBurst> pb = CreateObject <PacketBurst> ();
1384  m_packetBurstQueue.push_back (pb);
1385  std::list<Ptr<LteControlMessage> > l;
1386  m_controlMessagesQueue.push_back (l);
1387  }
1388  std::vector <int> ulRb;
1390 
1392  m_downlinkSpectrumPhy->Reset ();
1393  m_uplinkSpectrumPhy->Reset ();
1394  m_pssList.clear ();
1399  m_downlinkSpectrumPhy->m_interferenceCtrl->EndRx ();
1400  m_downlinkSpectrumPhy->m_interferenceData->EndRx ();
1401 
1402 } // end of void LteUePhy::DoReset ()
1403 
1404 void
1405 LteUePhy::DoStartCellSearch (uint32_t dlEarfcn)
1406 {
1407  NS_LOG_FUNCTION (this << dlEarfcn);
1408  m_dlEarfcn = dlEarfcn;
1409  DoSetDlBandwidth (6); // configure DL for receiving PSS
1411 }
1412 
1413 void
1414 LteUePhy::DoSynchronizeWithEnb (uint16_t cellId, uint32_t dlEarfcn)
1415 {
1416  NS_LOG_FUNCTION (this << cellId << dlEarfcn);
1417  m_dlEarfcn = dlEarfcn;
1418  DoSynchronizeWithEnb (cellId);
1419 }
1420 
1421 void
1423 {
1424  NS_LOG_FUNCTION (this << cellId);
1425 
1426  if (cellId == 0)
1427  {
1428  NS_FATAL_ERROR ("Cell ID shall not be zero");
1429  }
1430 
1431  m_cellId = cellId;
1432  m_downlinkSpectrumPhy->SetCellId (cellId);
1433  m_uplinkSpectrumPhy->SetCellId (cellId);
1434 
1435  // configure DL for receiving the BCH with the minimum bandwidth
1436  DoSetDlBandwidth (6);
1437 
1438  m_dlConfigured = false;
1439  m_ulConfigured = false;
1440 
1442 }
1443 
1444 void
1445 LteUePhy::DoSetDlBandwidth (uint16_t dlBandwidth)
1446 {
1447  NS_LOG_FUNCTION (this << (uint32_t) dlBandwidth);
1448  if (m_dlBandwidth != dlBandwidth or !m_dlConfigured)
1449  {
1450  m_dlBandwidth = dlBandwidth;
1451 
1452  static const int Type0AllocationRbg[4] = {
1453  10, // RGB size 1
1454  26, // RGB size 2
1455  63, // RGB size 3
1456  110 // RGB size 4
1457  }; // see table 7.1.6.1-1 of 36.213
1458  for (int i = 0; i < 4; i++)
1459  {
1460  if (dlBandwidth < Type0AllocationRbg[i])
1461  {
1462  m_rbgSize = i + 1;
1463  break;
1464  }
1465  }
1466 
1468  m_downlinkSpectrumPhy->SetNoisePowerSpectralDensity (m_noisePsd);
1469  m_downlinkSpectrumPhy->GetChannel ()->AddRx (m_downlinkSpectrumPhy);
1470  }
1471  m_dlConfigured = true;
1472 }
1473 
1474 
1475 void
1476 LteUePhy::DoConfigureUplink (uint32_t ulEarfcn, uint16_t ulBandwidth)
1477 {
1478  m_ulEarfcn = ulEarfcn;
1479  m_ulBandwidth = ulBandwidth;
1480  m_ulConfigured = true;
1481 }
1482 
1483 void
1484 LteUePhy::DoConfigureReferenceSignalPower (int8_t referenceSignalPower)
1485 {
1486  NS_LOG_FUNCTION (this);
1487  m_powerControl->ConfigureReferenceSignalPower (referenceSignalPower);
1488 }
1489 
1490 void
1491 LteUePhy::DoSetRnti (uint16_t rnti)
1492 {
1493  NS_LOG_FUNCTION (this << rnti);
1494  m_rnti = rnti;
1495 
1498 }
1499 
1500 void
1502 {
1503  NS_LOG_FUNCTION (this << (uint16_t)txMode);
1504  m_transmissionMode = txMode;
1505  m_downlinkSpectrumPhy->SetTransmissionMode (txMode);
1506 }
1507 
1508 void
1510 {
1511  NS_LOG_FUNCTION (this << srcCi);
1514  m_srsConfigured = true;
1515 
1516  // a guard time is needed for the case where the SRS periodicity is changed dynamically at run time
1517  // if we use a static one, we can have a 0ms guard time
1519  NS_LOG_DEBUG (this << " UE SRS P " << m_srsPeriodicity << " RNTI " << m_rnti << " offset " << m_srsSubframeOffset << " cellId " << m_cellId << " CI " << srcCi);
1520 }
1521 
1522 void
1524 {
1525  NS_LOG_FUNCTION (this << pa);
1526  m_paLinear = pow (10,(pa / 10));
1527 }
1528 
1529 void
1530 LteUePhy::DoSetRsrpFilterCoefficient (uint8_t rsrpFilterCoefficient)
1531 {
1532  NS_LOG_FUNCTION (this << (uint16_t) (rsrpFilterCoefficient));
1533  m_powerControl->SetRsrpFilterCoefficient (rsrpFilterCoefficient);
1534 }
1535 
1536 void
1538 {
1539  NS_LOG_FUNCTION (this);
1540  m_downlinkSpectrumPhy->m_harqPhyModule->ClearDlHarqBuffer (m_rnti); //flush HARQ buffers
1543  m_pssReceived = false;
1544  DoReset ();
1545 }
1546 
1547 void
1549 {
1550  NS_LOG_FUNCTION (this);
1551 
1553 }
1554 
1555 void
1557 {
1558  NS_LOG_FUNCTION (this);
1559  // indicates that the downlink radio link quality has to be monitored for in-sync indications
1560  m_downlinkInSync = false;
1561 }
1562 
1563 void
1564 LteUePhy::DoSetImsi (uint64_t imsi)
1565 {
1566  NS_LOG_FUNCTION (this);
1567  m_imsi = imsi;
1568 }
1569 
1570 void
1572 {
1573  NS_LOG_FUNCTION (this);
1574  m_numOfSubframes = 0;
1575  m_sinrDbFrame = 0;
1576  m_numOfFrames = 0;
1577  m_downlinkInSync = true;
1578 }
1579 
1580 void
1581 LteUePhy::RlfDetection (double sinrDb)
1582 {
1583  NS_LOG_FUNCTION (this << sinrDb);
1584  m_sinrDbFrame += sinrDb;
1585  m_numOfSubframes++;
1586  NS_LOG_LOGIC ("No of Subframes: " << m_numOfSubframes << " UE synchronized: " << m_downlinkInSync);
1587  //check for out_of_snyc indications first when UE is both DL and UL synchronized
1588  //m_downlinkInSync=true indicates that the evaluation is for out-of-sync indications
1589  if (m_downlinkInSync && m_numOfSubframes == 10)
1590  {
1596  {
1597  m_numOfFrames++; //increment the counter if a frame cannot be decoded
1598  NS_LOG_LOGIC ("No of Frames which cannot be decoded: " << m_numOfFrames);
1599  }
1600  else
1601  {
1607  NS_LOG_INFO ("Resetting frame counter at phy. Current value = " << m_numOfFrames);
1608  m_numOfFrames = 0;
1609  // Also reset the sync indicator counter at RRC
1611  }
1612  m_numOfSubframes = 0;
1613  m_sinrDbFrame = 0;
1614  }
1621  {
1622  NS_LOG_LOGIC ("At " << Simulator::Now ().As (Time::MS)
1623  << " ms UE PHY sending out of snyc indication to UE RRC layer");
1625  m_numOfFrames = 0;
1626  }
1627  //check for in_snyc indications when T310 timer is started
1628  //m_downlinkInSync=false indicates that the evaluation is for in-sync indications
1629  if (!m_downlinkInSync && m_numOfSubframes == 10)
1630  {
1637  {
1638  m_numOfFrames++; //increment the counter if a frame can be decoded
1639  NS_LOG_LOGIC ("No of Frames successfully decoded: " << m_numOfFrames);
1640  }
1641  else
1642  {
1648  m_numOfFrames = 0;
1649  // Also reset the sync indicator counter at RRC
1651  }
1652  m_numOfSubframes = 0;
1653  m_sinrDbFrame = 0;
1654  }
1660  {
1661  NS_LOG_LOGIC ("At " << Simulator::Now ().As (Time::MS)
1662  << " ms UE PHY sending in snyc indication to UE RRC layer");
1664  m_numOfFrames = 0;
1665  }
1666 }
1667 
1668 
1669 void
1671 {
1672  SetTxModeGain (1, gain);
1673 }
1674 
1675 void
1677 {
1678  SetTxModeGain (2, gain);
1679 }
1680 
1681 void
1683 {
1684  SetTxModeGain (3, gain);
1685 }
1686 
1687 void
1689 {
1690  SetTxModeGain (4, gain);
1691 }
1692 
1693 void
1695 {
1696  SetTxModeGain (5, gain);
1697 }
1698 
1699 void
1701 {
1702  SetTxModeGain (6, gain);
1703 }
1704 
1705 void
1707 {
1708  SetTxModeGain (7, gain);
1709 }
1710 
1711 
1712 void
1713 LteUePhy::SetTxModeGain (uint8_t txMode, double gain)
1714 {
1715  NS_LOG_FUNCTION (this << gain);
1716  // convert to linear
1717  double gainLin = std::pow (10.0, (gain / 10.0));
1718  if (m_txModeGain.size () < txMode)
1719  {
1720  m_txModeGain.resize (txMode);
1721  }
1722  std::vector <double> temp;
1723  temp = m_txModeGain;
1724  m_txModeGain.clear ();
1725  for (uint8_t i = 0; i < temp.size (); i++)
1726  {
1727  if (i == txMode - 1)
1728  {
1729  m_txModeGain.push_back (gainLin);
1730  }
1731  else
1732  {
1733  m_txModeGain.push_back (temp.at (i));
1734  }
1735  }
1736  // forward the info to DL LteSpectrumPhy
1737  m_downlinkSpectrumPhy->SetTxModeGain (txMode, gain);
1738 }
1739 
1740 
1741 
1742 void
1744 {
1745  NS_LOG_FUNCTION (this);
1746  // get the feedback from LteSpectrumPhy and send it through ideal PUCCH to eNB
1747  Ptr<DlHarqFeedbackLteControlMessage> msg = Create<DlHarqFeedbackLteControlMessage> ();
1748  msg->SetDlHarqFeedback (m);
1749  SetControlMessages (msg);
1750 }
1751 
1752 void
1754 {
1755  m_harqPhyModule = harq;
1756 }
1757 
1758 
1761 {
1762  NS_LOG_FUNCTION (this);
1763  return m_state;
1764 }
1765 
1766 
1767 void
1769 {
1770  NS_LOG_FUNCTION (this << newState);
1771  State oldState = m_state;
1772  m_state = newState;
1773  NS_LOG_INFO (this << " cellId=" << m_cellId << " rnti=" << m_rnti
1774  << " UePhy " << ToString (oldState)
1775  << " --> " << ToString (newState));
1776  m_stateTransitionTrace (m_cellId, m_rnti, oldState, newState);
1777 }
1778 
1779 
1780 } // namespace ns3
ns3::TypeId
a unique identifier for an interface.
Definition: type-id.h:59
NS_LOG_COMPONENT_DEFINE
#define NS_LOG_COMPONENT_DEFINE(name)
Define a Log component with a specific name.
Definition: log.h:205
ns3::LteUePhy::UeMemberLteUePhySapProvider
friend class UeMemberLteUePhySapProvider
allow UeMemberLteUePhySapProvider class friend access
Definition: lte-ue-phy.h:58
ns3::LteUePhy
The LteSpectrumPhy models the physical layer of LTE.
Definition: lte-ue-phy.h:55
lte-ue-net-device.h
lte-enb-phy.h
ns3::LteUePhy::SetTxMode3Gain
void SetTxMode3Gain(double gain)
Set transmit mode 3 gain function.
Definition: lte-ue-phy.cc:1682
ns3::PhyTransmissionStatParameters::m_ccId
uint8_t m_ccId
component carrier id
Definition: lte-common.h:198
ns3::LteUePhy::GetNoiseFigure
double GetNoiseFigure() const
Get noise figure.
Definition: lte-ue-phy.cc:415
ns3::LteUePhy::GetTypeId
static TypeId GetTypeId(void)
Get the type ID.
Definition: lte-ue-phy.cc:201
ns3::LteUePhy::m_reportPowerSpectralDensity
TracedCallback< uint16_t, Ptr< SpectrumValue > > m_reportPowerSpectralDensity
The ReportsPowerSpectralDensity trace source.
Definition: lte-ue-phy.h:813
ns3::LteUePhy::m_ueCphySapUser
LteUeCphySapUser * m_ueCphySapUser
UE CPhy SAP user.
Definition: lte-ue-phy.h:687
ns3::LteUePowerControl::ConfigureReferenceSignalPower
void ConfigureReferenceSignalPower(int8_t referenceSignalPower)
Configure reference signal power (dBm) function.
Definition: lte-ue-power-control.cc:161
ns3::LteUeCphySapUser::RecvMasterInformationBlock
virtual void RecvMasterInformationBlock(uint16_t cellId, LteRrcSap::MasterInformationBlock mib)=0
Relay an MIB message from the PHY entity to the RRC layer.
NS_OBJECT_ENSURE_REGISTERED
#define NS_OBJECT_ENSURE_REGISTERED(type)
Register an Object subclass with the TypeId system.
Definition: object-base.h:45
NS_ASSERT
#define NS_ASSERT(condition)
At runtime, in debugging builds, if this condition is not true, the program prints the source file,...
Definition: assert.h:67
lte-chunk-processor.h
ns3::LteUeCphySapUser::UeMeasurementsParameters::m_componentCarrierId
uint8_t m_componentCarrierId
component carrier ID
Definition: lte-ue-cphy-sap.h:233
ns3::MakeTimeChecker
Ptr< const AttributeChecker > MakeTimeChecker(const Time min, const Time max)
Helper to make a Time checker with bounded range.
Definition: time.cc:533
ns3::BooleanValue
AttributeValue implementation for Boolean.
Definition: boolean.h:37
ns3::SpectrumValue::ConstValuesEnd
Values::const_iterator ConstValuesEnd() const
Definition: spectrum-value.cc:75
ns3::LteUePhy::m_rsReceivedPower
SpectrumValue m_rsReceivedPower
RS receive power.
Definition: lte-ue-phy.h:716
ns3::LteUePhy::m_ctrlSinrForRlf
SpectrumValue m_ctrlSinrForRlf
the CTRL SINR used for RLF detection
Definition: lte-ue-phy.h:841
ns3::LteUePowerControl::SetRnti
void SetRnti(uint16_t rnti)
Set the RNTI function.
Definition: lte-ue-power-control.cc:174
ns3::Simulator::ScheduleWithContext
static void ScheduleWithContext(uint32_t context, Time const &delay, FUNC f, Ts &&... args)
Schedule an event with the given context.
Definition: simulator.h:571
ns3::LteUePhy::m_isConnected
bool m_isConnected
set when UE RRC is in CONNECTED_NORMALLY state
Definition: lte-ue-phy.h:819
ns3::LteUePhy::GetState
State GetState() const
Get state of the UE physical layer.
Definition: lte-ue-phy.cc:1760
ns3::LtePhy::m_uplinkSpectrumPhy
Ptr< LteSpectrumPhy > m_uplinkSpectrumPhy
The uplink LteSpectrumPhy associated to this LtePhy.
Definition: lte-phy.h:243
ns3::LteUePhy::DoSendLteControlMessage
virtual void DoSendLteControlMessage(Ptr< LteControlMessage > msg)
Send LTE control message function.
Definition: lte-ue-phy.cc:991
ns3::LteUePhy::SendSrs
void SendSrs()
Send the SRS signal in the last symbols of the frame.
Definition: lte-ue-phy.cc:1337
ns3::LteUePhy::GetNumQinEvalSf
uint16_t GetNumQinEvalSf() const
Get number of Qin evaluation subframes.
Definition: lte-ue-phy.cc:487
ns3::Node::GetId
uint32_t GetId(void) const
Definition: node.cc:109
ns3::PhyTransmissionStatParameters::m_txMode
uint8_t m_txMode
the transmission Mode
Definition: lte-common.h:192
ns3::LteUePhy::m_srsStartTime
Time m_srsStartTime
SRS start time.
Definition: lte-ue-phy.h:697
ns3::LteUePhy::DoResetPhyAfterRlf
void DoResetPhyAfterRlf()
Reset Phy after radio link failure function.
Definition: lte-ue-phy.cc:1537
ns3::LteUePhy::DoConfigureReferenceSignalPower
void DoConfigureReferenceSignalPower(int8_t referenceSignalPower)
Configure reference signal power function.
Definition: lte-ue-phy.cc:1484
ns3::LteControlMessage::RAR
@ RAR
Definition: lte-control-messages.h:61
ns3::Simulator::Now
static Time Now(void)
Return the current simulation virtual time.
Definition: simulator.cc:195
ns3
Every class exported by the ns3 library is enclosed in the ns3 namespace.
ns3::HigherLayerSelected_s
See section 4.3.27 higherLayerSelected.
Definition: ff-mac-common.h:455
ns3::LtePhy::m_dlEarfcn
uint32_t m_dlEarfcn
The downlink carrier frequency.
Definition: lte-phy.h:281
ns3::LteUePhy::DoStartCellSearch
void DoStartCellSearch(uint32_t dlEarfcn)
Start the cell search function.
Definition: lte-ue-phy.cc:1405
ns3::LteUePhy::GetLteUeCphySapProvider
LteUeCphySapProvider * GetLteUeCphySapProvider()
Get the CPHY SAP provider.
Definition: lte-ue-phy.cc:401
ns3::LtePhy::GetRbgSize
uint8_t GetRbgSize(void) const
Definition: lte-phy.cc:186
ns3::LteUePhy::m_powerControl
Ptr< LteUePowerControl > m_powerControl
Pointer to UE Uplink Power Control entity.
Definition: lte-ue-phy.h:669
ns3::LteUePhy::GetNumQoutEvalSf
uint16_t GetNumQoutEvalSf() const
Get number of Qout evaluation subframes.
Definition: lte-ue-phy.cc:480
ns3::LteUeCphySapUser::ReportUeMeasurements
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...
ns3::LteUeCphySapUser::UeMeasurementsElement::m_rsrp
double m_rsrp
[dBm]
Definition: lte-ue-cphy-sap.h:225
ns3::ToString
static const std::string & ToString(EpcUeNas::State s)
Definition: epc-ue-nas.cc:50
ns3::UeMemberLteUePhySapProvider::SendMacPdu
virtual void SendMacPdu(Ptr< Packet > p)
Send the MAC PDU to the channel.
Definition: lte-ue-phy.cc:101
ns3::LteUePhy::ReportUeMeasurements
void ReportUeMeasurements()
Layer-1 filtering of RSRP and RSRQ measurements and reporting to the RRC entity.
Definition: lte-ue-phy.cc:940
ns3::UeMemberLteUePhySapProvider::NotifyConnectionSuccessful
virtual void NotifyConnectionSuccessful()
Notify PHY about the successful RRC connection establishment.
Definition: lte-ue-phy.cc:119
ns3::LteUePhy::m_noisePsd
Ptr< SpectrumValue > m_noisePsd
Noise power spectral density for the configured bandwidth.
Definition: lte-ue-phy.h:816
ns3::LteUePowerControl::SetRsrp
void SetRsrp(double value)
Set RSRP function.
Definition: lte-ue-power-control.cc:253
ns3::LteUePhy::m_downlinkInSync
bool m_downlinkInSync
when set, DL SINR evaluation for out-of-sync indications is conducted.
Definition: lte-ue-phy.h:837
ns3::LteUePhy::SetDownlinkCqiPeriodicity
void SetDownlinkCqiPeriodicity(Time cqiPeriodicity)
Set the periodicty for the downlink periodic wideband and aperiodic subband CQI reporting.
Definition: lte-ue-phy.cc:983
ns3::LteUePhy::SetTxPower
void SetTxPower(double pow)
Set transmit power.
Definition: lte-ue-phy.cc:422
ns3::LteUePhy::ReportDataInterference
virtual void ReportDataInterference(const SpectrumValue &interf)
Create the mixed CQI report.
Definition: lte-ue-phy.cc:806
ns3::LteUePhy::DoSetRsrpFilterCoefficient
void DoSetRsrpFilterCoefficient(uint8_t rsrpFilterCoefficient)
Do set RSRP filter coefficient.
Definition: lte-ue-phy.cc:1530
ns3::LteUePhy::m_subChannelsForTransmissionQueue
std::vector< std::vector< int > > m_subChannelsForTransmissionQueue
subchannels for transmission queue
Definition: lte-ue-phy.h:658
ns3::LteUePhy::GenerateCqiRsrpRsrq
void GenerateCqiRsrpRsrq(const SpectrumValue &sinr)
Get CQI, RSRP, and RSRQ.
Definition: lte-ue-phy.cc:577
ns3::CqiListElement_s::m_ri
uint8_t m_ri
RI.
Definition: ff-mac-common.h:486
ns3::LteUePhy::ReportInterference
virtual void ReportInterference(const SpectrumValue &interf)
generate a report based on the linear interference and noise power perceived during DATA frame NOTE: ...
Definition: lte-ue-phy.cc:798
ns3::LteUePhy::SubframeIndication
void SubframeIndication(uint32_t frameNo, uint32_t subframeNo)
trigger from eNB the start from a new frame
Definition: lte-ue-phy.cc:1246
NS_LOG_WARN
#define NS_LOG_WARN(msg)
Use NS_LOG to output a message of level LOG_WARN.
Definition: log.h:265
ns3::LteUePhy::m_ulConfigured
bool m_ulConfigured
UL configured?
Definition: lte-ue-phy.h:702
ns3::LtePhy::m_txPower
double m_txPower
Transmission power in dBm.
Definition: lte-phy.h:249
ns3::LteUePhy::m_sinrDbFrame
double m_sinrDbFrame
the average SINR per radio frame
Definition: lte-ue-phy.h:840
ns3::LteUePhy::SetTxMode7Gain
void SetTxMode7Gain(double gain)
Set transmit mode 7 gain function.
Definition: lte-ue-phy.cc:1706
ns3::LteUePhy::UeMeasurementsElement::rsrpNum
uint8_t rsrpNum
Number of RSRP samples.
Definition: lte-ue-phy.h:744
ns3::LteUePhy::DoSetTransmissionMode
void DoSetTransmissionMode(uint8_t txMode)
Set transmission mode function.
Definition: lte-ue-phy.cc:1501
ns3::LteUeCphySapUser
Service Access Point (SAP) offered by the UE PHY to the UE RRC for control purposes.
Definition: lte-ue-cphy-sap.h:209
ns3::PointerValue
Hold objects of type Ptr<T>.
Definition: pointer.h:37
ns3::PhyTransmissionStatParameters::m_imsi
uint64_t m_imsi
IMSI of the scheduled UE.
Definition: lte-common.h:190
ns3::LtePhy::m_controlMessagesQueue
std::vector< std::list< Ptr< LteControlMessage > > > m_controlMessagesQueue
A queue of control messages to be sent.
Definition: lte-phy.h:291
ns3::LteUeCphySapUser::UeMeasurementsElement::m_rsrq
double m_rsrq
[dB]
Definition: lte-ue-cphy-sap.h:226
ns3::LteUePhy::m_raPreambleId
uint32_t m_raPreambleId
RA preamble ID.
Definition: lte-ue-phy.h:764
ns3::TypeId::ATTR_GET
@ ATTR_GET
The attribute can be read.
Definition: type-id.h:64
ns3::DlDciListElement_s::m_resAlloc
uint8_t m_resAlloc
The type of resource allocation.
Definition: ff-mac-common.h:98
ns3::CqiListElement_s
See section 4.3.24 cqiListElement.
Definition: ff-mac-common.h:484
ns3::LteUePhy::DoReset
void DoReset()
Do Reset function.
Definition: lte-ue-phy.cc:1359
ns3::LteUePhy::PssElement::cellId
uint16_t cellId
cell ID
Definition: lte-ue-phy.h:728
ns3::DlDciListElement_s
See section 4.3.1 dlDciListElement.
Definition: ff-mac-common.h:94
ns3::Time::As
TimeWithUnit As(const enum Unit unit=Time::AUTO) const
Attach a unit to a Time, to facilitate output in a specific unit.
Definition: time.cc:429
ns3::LteSpectrumValueHelper::CreateNoisePowerSpectralDensity
static Ptr< SpectrumValue > CreateNoisePowerSpectralDensity(uint32_t earfcn, uint16_t bandwidth, double noiseFigure)
create a SpectrumValue that models the power spectral density of AWGN
Definition: lte-spectrum-value-helper.cc:360
ns3::LteUePowerControl::SetRsrpFilterCoefficient
void SetRsrpFilterCoefficient(uint8_t rsrpFilterCoefficient)
Set RSRP function.
Definition: lte-ue-power-control.cc:271
ns3::LteUePhy::m_srsSubframeOffset
uint16_t m_srsSubframeOffset
SRS subframe offset.
Definition: lte-ue-phy.h:695
ns3::LtePhy::GetDevice
Ptr< LteNetDevice > GetDevice() const
Get the device where the phy layer is attached.
Definition: lte-phy.cc:100
ns3::LtePhy::m_dlBandwidth
uint16_t m_dlBandwidth
The DL bandwidth in number of PRBs.
Definition: lte-phy.h:274
ns3::Simulator::Schedule
static EventId Schedule(Time const &delay, FUNC f, Ts &&... args)
Schedule an event to expire after delay.
Definition: simulator.h:556
ns3::MakeBooleanAccessor
Ptr< const AttributeAccessor > MakeBooleanAccessor(T1 a1)
Create an AttributeAccessor for a class data member, or a lone class get functor or set method.
Definition: boolean.h:85
ns3::DlDciListElement_s::m_rnti
uint16_t m_rnti
RNTI.
Definition: ff-mac-common.h:95
ns3::LtePhy::GetSrsPeriodicity
uint16_t GetSrsPeriodicity(uint16_t srcCi) const
Definition: lte-phy.cc:150
ns3::LteUePhy::m_rsInterferencePower
SpectrumValue m_rsInterferencePower
RS interference power.
Definition: lte-ue-phy.h:719
ns3::LteUePhy::UeMeasurementsElement::rsrqNum
uint8_t rsrqNum
Number of RSRQ samples.
Definition: lte-ue-phy.h:746
ns3::TypeId::SetParent
TypeId SetParent(TypeId tid)
Set the parent TypeId.
Definition: type-id.cc:923
ns3::LteUePhy::m_numOfQinEvalSf
uint16_t m_numOfQinEvalSf
the downlink radio link quality is estimated over this period for detecting in-syncs
Definition: lte-ue-phy.h:835
ns3::LtePhy::m_netDevice
Ptr< LteNetDevice > m_netDevice
Pointer to the NetDevice where this PHY layer is attached.
Definition: lte-phy.h:232
ns3::DoubleValue
This class can be used to hold variables of floating point type such as 'double' or 'float'.
Definition: double.h:41
ns3::UlDciListElement_s::m_rnti
uint16_t m_rnti
RNTI.
Definition: ff-mac-common.h:142
ns3::LteUePhy::m_rsrpSinrSamplePeriod
uint16_t m_rsrpSinrSamplePeriod
The RsrpSinrSamplePeriod attribute.
Definition: lte-ue-phy.h:777
ns3::LtePhy::GetControlMessages
std::list< Ptr< LteControlMessage > > GetControlMessages(void)
Definition: lte-phy.cc:225
ns3::LteUePhy::DoSetSrsConfigurationIndex
void DoSetSrsConfigurationIndex(uint16_t srcCi)
Set SRS configuration index function.
Definition: lte-ue-phy.cc:1509
ns3::LteUePhy::GetMacChDelay
uint8_t GetMacChDelay(void) const
Get MAC to Channel delay.
Definition: lte-ue-phy.cc:444
ns3::LteUePowerControl::SetCellId
void SetCellId(uint16_t cellId)
Set the cell ID function.
Definition: lte-ue-power-control.cc:168
ns3::MakeTraceSourceAccessor
Ptr< const TraceSourceAccessor > MakeTraceSourceAccessor(T a)
Create a TraceSourceAccessor which will control access to the underlying trace source.
Definition: trace-source-accessor.h:202
ns3::LteUePhy::GenerateDataCqiReport
virtual void GenerateDataCqiReport(const SpectrumValue &sinr)
generate a CQI report based on the given SINR of Data frame (used for PUSCH CQIs)
Definition: lte-ue-phy.cc:726
ns3::HigherLayerSelected_s::m_sbPmi
uint8_t m_sbPmi
sb PMI
Definition: ff-mac-common.h:456
ns3::LteControlMessage::DL_DCI
@ DL_DCI
Definition: lte-control-messages.h:56
ns3::LteControlMessage::SIB1
@ SIB1
Definition: lte-control-messages.h:63
ns3::LteUePhy::m_a30CqiPeriodicity
Time m_a30CqiPeriodicity
SubBand Aperiodic CQI.
Definition: lte-ue-phy.h:680
ns3::LteUePhy::m_amc
Ptr< LteAmc > m_amc
AMC.
Definition: lte-ue-phy.h:661
ns3::LteUePhy::GenerateCtrlCqiReport
virtual void GenerateCtrlCqiReport(const SpectrumValue &sinr)
generate a CQI report based on the given SINR of Ctrl frame
Definition: lte-ue-phy.cc:556
ns3::CqiListElement_s::P10
@ P10
Definition: ff-mac-common.h:490
ns3::LteUePhy::CreateTxPowerSpectralDensity
virtual Ptr< SpectrumValue > CreateTxPowerSpectralDensity()
Create the PSD for the TX.
Definition: lte-ue-phy.cc:545
ns3::LteUePowerControl::GetPuschTxPower
double GetPuschTxPower(std::vector< int > rb)
Get PUSCH transmit power function.
Definition: lte-ue-power-control.cc:431
UL_PUSCH_TTIS_DELAY
#define UL_PUSCH_TTIS_DELAY
Definition: lte-common.h:28
ns3::LteUePhy::m_ulPhyTransmission
TracedCallback< PhyTransmissionStatParameters > m_ulPhyTransmission
The UlPhyTransmission trace source.
Definition: lte-ue-phy.h:799
ns3::Ptr< Packet >
NS_FATAL_ERROR
#define NS_FATAL_ERROR(msg)
Report a fatal error with a message and terminate.
Definition: fatal-error.h:165
ns3::LteUePhy::m_state
State m_state
The current UE PHY state.
Definition: lte-ue-phy.h:705
ns3::LteUePhy::CELL_SEARCH
@ CELL_SEARCH
Definition: lte-ue-phy.h:68
ns3::LteUePhy::SetSubChannelsForTransmission
void SetSubChannelsForTransmission(std::vector< int > mask)
Set a list of sub channels to use in TX.
Definition: lte-ue-phy.cc:509
ns3::LteControlMessage::MIB
@ MIB
Definition: lte-control-messages.h:62
ns3::LteUePhy::m_p10CqiPeriodicity
Time m_p10CqiPeriodicity
Wideband Periodic CQI. 2, 5, 10, 16, 20, 32, 40, 64, 80 or 160 ms.
Definition: lte-ue-phy.h:672
ns3::LteUePhy::m_sendSrsEvent
EventId m_sendSrsEvent
send SRS event
Definition: lte-ue-phy.h:792
ns3::LtePhy::m_macChTtiDelay
uint8_t m_macChTtiDelay
Delay between MAC and channel layer in terms of TTIs.
Definition: lte-phy.h:301
ns3::LteUePhy::EnqueueDlHarqFeedback
virtual void EnqueueDlHarqFeedback(DlInfoListElement_s mes)
Enqueue the downlink HARQ feedback generated by LteSpectrumPhy.
Definition: lte-ue-phy.cc:1743
ns3::UL_DATA_DURATION
static const Time UL_DATA_DURATION
Duration of the data portion of a UL subframe.
Definition: lte-ue-phy.cc:61
ns3::PhyTransmissionStatParameters::m_rv
uint8_t m_rv
the redundancy version (HARQ)
Definition: lte-common.h:196
ns3::LteUeCphySapUser::NotifyInSync
virtual void NotifyInSync()=0
Send an in sync indication to UE RRC.
ns3::LteUePhy::m_rnti
uint16_t m_rnti
the RNTI
Definition: lte-ue-phy.h:689
ns3::LteUePhy::NUM_STATES
@ NUM_STATES
Definition: lte-ue-phy.h:70
ns3::LteUePhy::m_rsrpSinrSampleCounter
uint16_t m_rsrpSinrSampleCounter
The RsrpSinrSampleCounter attribute.
Definition: lte-ue-phy.h:782
bianchi11ax.k
int k
Definition: bianchi11ax.py:129
ns3::LteSpectrumValueHelper
This class defines all functions to create spectrum model for lte.
Definition: lte-spectrum-value-helper.h:37
ns3::DlDciListElement_s::m_tbsSize
std::vector< uint16_t > m_tbsSize
The TBs size.
Definition: ff-mac-common.h:99
ns3::LteUePhy::SetTxMode5Gain
void SetTxMode5Gain(double gain)
Set transmit mode 5 gain function.
Definition: lte-ue-phy.cc:1694
ns3::LteUeCphySapUser::RecvSystemInformationBlockType1
virtual void RecvSystemInformationBlockType1(uint16_t cellId, LteRrcSap::SystemInformationBlockType1 sib1)=0
Relay an SIB1 message from the PHY entity to the RRC layer.
ns3::LteUePhy::SetTxMode6Gain
void SetTxMode6Gain(double gain)
Set transmit mode 6 gain function.
Definition: lte-ue-phy.cc:1700
ns3::UlDciListElement_s
See section 4.3.2 ulDciListElement.
Definition: ff-mac-common.h:141
ns3::NanoSeconds
Time NanoSeconds(uint64_t value)
Construct a Time in the indicated unit.
Definition: nstime.h:1313
ns3::LteUePhy::m_reportUlPhyResourceBlocks
TracedCallback< uint16_t, const std::vector< int > & > m_reportUlPhyResourceBlocks
The ReportUlPhyResourceBlocks trace source.
Definition: lte-ue-phy.h:806
ns3::HigherLayerSelected_s::m_sbCqi
std::vector< uint8_t > m_sbCqi
sb CQI
Definition: ff-mac-common.h:457
ns3::CqiListElement_s::A30
@ A30
Definition: ff-mac-common.h:490
ns3::LtePhy
The LtePhy models the physical layer of LTE.
Definition: lte-phy.h:53
ns3::LteUePowerControl::SetTxPower
void SetTxPower(double value)
Set transmit power function.
Definition: lte-ue-power-control.cc:151
ns3::LteUePhy::ReceivePss
virtual void ReceivePss(uint16_t cellId, Ptr< SpectrumValue > p)
Receive PSS function.
Definition: lte-ue-phy.cc:1185
ns3::LteUePhy::SetLteUePhySapUser
void SetLteUePhySapUser(LteUePhySapUser *s)
Set the PHY SAP User.
Definition: lte-ue-phy.cc:379
ns3::LteUePhy::m_uePhySapUser
LteUePhySapUser * m_uePhySapUser
UE Phy SAP user.
Definition: lte-ue-phy.h:684
ns3::LteUePhy::m_uePhySapProvider
LteUePhySapProvider * m_uePhySapProvider
UE Phy SAP provider.
Definition: lte-ue-phy.h:683
NS_LOG_INFO
#define NS_LOG_INFO(msg)
Use NS_LOG to output a message of level LOG_INFO.
Definition: log.h:281
ns3::LteUePhy::DoInitialize
virtual void DoInitialize(void)
Initialize() implementation.
Definition: lte-ue-phy.cc:361
ns3::LteUePhy::SetHarqPhyModule
void SetHarqPhyModule(Ptr< LteHarqPhy > harq)
Set the HARQ PHY module.
Definition: lte-ue-phy.cc:1753
ns3::LtePhy::m_packetBurstQueue
std::vector< Ptr< PacketBurst > > m_packetBurstQueue
A queue of packet bursts to be sent.
Definition: lte-phy.h:289
ns3::MilliSeconds
Time MilliSeconds(uint64_t value)
Construct a Time in the indicated unit.
Definition: nstime.h:1297
ns3::LteUePhy::m_dataInterferencePower
SpectrumValue m_dataInterferencePower
data interference power
Definition: lte-ue-phy.h:722
ns3::LtePhy::GetTti
double GetTti(void) const
Definition: lte-phy.cc:142
ns3::UlDciListElement_s::m_rbStart
uint8_t m_rbStart
start
Definition: ff-mac-common.h:143
ns3::LteUePhy::DoDispose
virtual void DoDispose(void)
Destructor implementation.
Definition: lte-ue-phy.cc:190
ns3::LteUeCphySapUser::UeMeasurementsParameters
UeMeasurementsParameters structure.
Definition: lte-ue-cphy-sap.h:231
ns3::EventId::Cancel
void Cancel(void)
This method is syntactic sugar for the ns3::Simulator::Cancel method.
Definition: event-id.cc:53
ns3::LteUeNetDevice
The LteUeNetDevice class implements the UE net device.
Definition: lte-ue-net-device.h:57
lte-net-device.h
ns3::UeMemberLteUePhySapProvider::SendRachPreamble
virtual void SendRachPreamble(uint32_t prachId, uint32_t raRnti)
Send a preamble on the PRACH.
Definition: lte-ue-phy.cc:113
ns3::LteUePhy::DoSetRnti
void DoSetRnti(uint16_t rnti)
Set RNTI function.
Definition: lte-ue-phy.cc:1491
ns3::LteUePhy::DoConfigureUplink
void DoConfigureUplink(uint32_t ulEarfcn, uint16_t ulBandwidth)
Configure UL uplink function.
Definition: lte-ue-phy.cc:1476
ns3::MakeBooleanChecker
Ptr< const AttributeChecker > MakeBooleanChecker(void)
Definition: boolean.cc:121
ns3::LteUePhy::GenerateMixedCqiReport
virtual void GenerateMixedCqiReport(const SpectrumValue &sinr)
Create the mixed CQI report.
Definition: lte-ue-phy.cc:732
ns3::LteUePhy::RlfDetection
void RlfDetection(double sinrdB)
Radio link failure detection function.
Definition: lte-ue-phy.cc:1581
ns3::LteUePhy::GetTxPower
double GetTxPower() const
Get transmit power.
Definition: lte-ue-phy.cc:430
ns3::SpectrumValue
Set of values corresponding to a given SpectrumModel.
Definition: spectrum-value.h:59
ns3::LteUePhy::GetSubChannelsForReception
std::vector< int > GetSubChannelsForReception(void)
Get a list of sub channels to use in RX.
Definition: lte-ue-phy.cc:537
ns3::UlDciListElement_s::m_ndi
uint8_t m_ndi
NDI.
Definition: ff-mac-common.h:147
ns3::LtePhy::m_componentCarrierId
uint8_t m_componentCarrierId
component carrier Id used to address sap
Definition: lte-phy.h:311
ns3::Time
Simulation virtual time values and global simulation resolution.
Definition: nstime.h:104
ff-mac-common.h
ns3::LteUePhy::m_imsi
uint64_t m_imsi
the IMSI of the UE
Definition: lte-ue-phy.h:842
ns3::LteUePhy::DoSetPa
void DoSetPa(double pa)
Set PA function.
Definition: lte-ue-phy.cc:1523
ns3::UL_SRS_DELAY_FROM_SUBFRAME_START
static const Time UL_SRS_DELAY_FROM_SUBFRAME_START
Delay from subframe start to transmission of SRS.
Definition: lte-ue-phy.cc:67
ns3::LteUePowerControl::ReportTpc
void ReportTpc(uint8_t tpc)
Set RSRP function.
Definition: lte-ue-power-control.cc:278
ns3::LteUePhy::m_raRnti
uint32_t m_raRnti
RA RNTI.
Definition: lte-ue-phy.h:765
ns3::LtePhy::m_downlinkSpectrumPhy
Ptr< LteSpectrumPhy > m_downlinkSpectrumPhy
The downlink LteSpectrumPhy associated to this LtePhy.
Definition: lte-phy.h:238
ns3::LtePhy::GetSrsSubframeOffset
uint16_t GetSrsSubframeOffset(uint16_t srcCi) const
Definition: lte-phy.cc:168
ns3::CqiListElement_s::m_sbMeasResult
struct SbMeasResult_s m_sbMeasResult
sb measure result
Definition: ff-mac-common.h:495
NS_ABORT_MSG_IF
#define NS_ABORT_MSG_IF(cond, msg)
Abnormal program termination if a condition is true, with a message.
Definition: abort.h:108
ns3::LteUePhy::InitializeRlfParams
void InitializeRlfParams()
Initialize radio link failure parameters.
Definition: lte-ue-phy.cc:1571
ns3::LteUePhy::ReceiveLteControlMessageList
virtual void ReceiveLteControlMessageList(std::list< Ptr< LteControlMessage > > msgList)
Receive LTE control message list function.
Definition: lte-ue-phy.cc:1030
ns3::UeMemberLteUePhySapProvider::UeMemberLteUePhySapProvider
UeMemberLteUePhySapProvider(LteUePhy *phy)
Constructor.
Definition: lte-ue-phy.cc:97
ns3::LteSpectrumValueHelper::CreateUlTxPowerSpectralDensity
static Ptr< SpectrumValue > CreateUlTxPowerSpectralDensity(uint16_t earfcn, uint16_t bandwidth, double powerTx, std::vector< int > activeRbs)
create a spectrum value representing the uplink power spectral density of a signal to be transmitted.
Definition: lte-spectrum-value-helper.cc:336
NS_ASSERT_MSG
#define NS_ASSERT_MSG(condition, message)
At runtime, in debugging builds, if this condition is not true, the program prints the message to out...
Definition: assert.h:88
ns3::LteUePhy::m_enableRlfDetection
bool m_enableRlfDetection
Flag to enable/disable RLF detection.
Definition: lte-ue-phy.h:843
ns3::LteUeCphySapUser::NotifyOutOfSync
virtual void NotifyOutOfSync()=0
Send an out of sync indication to UE RRC.
ns3::LteUePhy::SwitchToState
void SwitchToState(State s)
Switch the UE PHY to the given state.
Definition: lte-ue-phy.cc:1768
ns3::PhyTransmissionStatParameters::m_mcs
uint8_t m_mcs
MCS for transport block.
Definition: lte-common.h:194
ns3::Object::DoInitialize
virtual void DoInitialize(void)
Initialize() implementation.
Definition: object.cc:353
list
#define list
Definition: openflow-interface.h:47
lte-enb-net-device.h
lte-ue-phy.h
ns3::HarqProcessInfoList_t
std::vector< HarqProcessInfoElement_t > HarqProcessInfoList_t
HarqProcessInfoList_t typedef.
Definition: lte-harq-phy.h:48
ns3::LtePhy::DoDispose
void DoDispose()
Destructor implementation.
Definition: lte-phy.cc:78
ns3::PhyTransmissionStatParameters::m_size
uint16_t m_size
Size of transport block.
Definition: lte-common.h:195
ns3::LteUePhy::m_a30CqiLast
Time m_a30CqiLast
last aperiodic CQI
Definition: lte-ue-phy.h:681
ns3::PhyTransmissionStatParameters::m_cellId
uint16_t m_cellId
Cell ID of the attached Enb.
Definition: lte-common.h:189
ns3::LtePhy::m_rbgSize
uint8_t m_rbgSize
The RB group size according to the bandwidth.
Definition: lte-phy.h:276
ns3::UeMemberLteUePhySapProvider::SendLteControlMessage
virtual void SendLteControlMessage(Ptr< LteControlMessage > msg)
Send SendLteControlMessage (PDCCH map, CQI feedbacks) using the ideal control channel.
Definition: lte-ue-phy.cc:107
ns3::LteUePhy::m_pssReceived
bool m_pssReceived
PSS received?
Definition: lte-ue-phy.h:724
NS_LOG_LOGIC
#define NS_LOG_LOGIC(msg)
Use NS_LOG to output a message of level LOG_LOGIC.
Definition: log.h:289
ns3::MakePointerAccessor
Ptr< const AttributeAccessor > MakePointerAccessor(T1 a1)
Create an AttributeAccessor for a class data member, or a lone class get functor or set method.
Definition: pointer.h:227
ns3::Type0AllocationRbg
static const int Type0AllocationRbg[4]
Type 0 RGB allocation.
Definition: lte-ffr-algorithm.cc:32
ns3::SbMeasResult_s::m_higherLayerSelected
std::vector< struct HigherLayerSelected_s > m_higherLayerSelected
higher layer selected
Definition: ff-mac-common.h:476
ns3::LteUePhySapProvider
Service Access Point (SAP) offered by the UE-PHY to the UE-MAC.
Definition: lte-ue-phy-sap.h:39
ns3::CqiListElement_s::m_wbCqi
std::vector< uint8_t > m_wbCqi
wb CQI
Definition: ff-mac-common.h:492
ns3::LteUeCphySapProvider
Service Access Point (SAP) offered by the UE PHY to the UE RRC for control purposes.
Definition: lte-ue-cphy-sap.h:42
ns3::MakeDoubleAccessor
Ptr< const AttributeAccessor > MakeDoubleAccessor(T1 a1)
Create an AttributeAccessor for a class data member, or a lone class get functor or set method.
Definition: double.h:42
ns3::LteUePhy::QueueSubChannelsForTransmission
void QueueSubChannelsForTransmission(std::vector< int > rbMap)
Queue subchannels for transmission function.
Definition: lte-ue-phy.cc:1239
ns3::Time::GetMilliSeconds
int64_t GetMilliSeconds(void) const
Get an approximation of the time stored in this instance in the indicated unit.
Definition: nstime.h:384
ns3::LtePhy::m_ulBandwidth
uint16_t m_ulBandwidth
The UL bandwidth in number of PRBs.
Definition: lte-phy.h:269
ns3::LteUePhy::m_srsConfigured
uint16_t m_srsConfigured
SRS configured.
Definition: lte-ue-phy.h:696
ns3::LteUePhy::SetTxMode1Gain
void SetTxMode1Gain(double gain)
Set transmit mode 1 gain function.
Definition: lte-ue-phy.cc:1670
lte-ue-mac.h
ns3::LteUePhy::UeMeasurementsElement::rsrpSum
double rsrpSum
Sum of RSRP sample values in linear unit.
Definition: lte-ue-phy.h:743
ns3::LteUePhy::m_reportCurrentCellRsrpSinrTrace
TracedCallback< uint16_t, uint16_t, double, double, uint8_t > m_reportCurrentCellRsrpSinrTrace
The ReportCurrentCellRsrpSinr trace source.
Definition: lte-ue-phy.h:772
ns3::LteUePhy::m_reportUeMeasurements
TracedCallback< uint16_t, uint16_t, double, double, bool, uint8_t > m_reportUeMeasurements
The ReportUeMeasurements trace source.
Definition: lte-ue-phy.h:790
ns3::LteUePhy::m_transmissionMode
uint8_t m_transmissionMode
the transmission mode
Definition: lte-ue-phy.h:691
ns3::SbMeasResult_s
See section 4.3.25 sbMeasResult.
Definition: ff-mac-common.h:474
NS_LOG_DEBUG
#define NS_LOG_DEBUG(msg)
Use NS_LOG to output a message of level LOG_DEBUG.
Definition: log.h:273
ns3::DlDciListElement_s::m_mcs
std::vector< uint8_t > m_mcs
MCS.
Definition: ff-mac-common.h:100
ns3::LtePhy::m_noiseFigure
double m_noiseFigure
Loss (dB) in the Signal-to-Noise-Ratio due to non-idealities in the receiver.
Definition: lte-phy.h:261
ns3::LteUePhy::DoSetDlBandwidth
void DoSetDlBandwidth(uint16_t dlBandwidth)
Set DL bandwidth function.
Definition: lte-ue-phy.cc:1445
ns3::LteUePhy::m_rsInterferencePowerUpdated
bool m_rsInterferencePowerUpdated
RS interference power updated?
Definition: lte-ue-phy.h:718
ns3::LteUeCphySapUser::UeMeasurementsElement::m_cellId
uint16_t m_cellId
cell ID
Definition: lte-ue-cphy-sap.h:224
lte-spectrum-value-helper.h
ns3::CqiListElement_s::m_wbPmi
uint8_t m_wbPmi
wb PMI
Definition: ff-mac-common.h:493
ns3::LteUePhy::m_ueMeasurementsMap
std::map< uint16_t, UeMeasurementsElement > m_ueMeasurementsMap
Store measurement results during the last layer-1 filtering period.
Definition: lte-ue-phy.h:753
ns3::LteUePhy::DoResetRlfParams
void DoResetRlfParams()
Reset radio link failure parameters.
Definition: lte-ue-phy.cc:1548
ns3::LteUePhy::GetDlSpectrumPhy
Ptr< LteSpectrumPhy > GetDlSpectrumPhy() const
Get Downlink spectrum phy.
Definition: lte-ue-phy.cc:450
ns3::Seconds
Time Seconds(double value)
Construct a Time in the indicated unit.
Definition: nstime.h:1289
lte-amc.h
ns3::LteUePhy::GetSubChannelsForTransmission
std::vector< int > GetSubChannelsForTransmission(void)
Get a list of sub channels to use in RX.
Definition: lte-ue-phy.cc:529
ns3::LteUeCphySapUser::ResetSyncIndicationCounter
virtual void ResetSyncIndicationCounter()=0
Reset the sync indication counter.
ns3::PhyTransmissionStatParameters::m_layer
uint8_t m_layer
the layer (cw) of the transmission
Definition: lte-common.h:193
ns3::LtePhy::m_cellId
uint16_t m_cellId
Cell identifier.
Definition: lte-phy.h:308
ns3::LteUePhy::UeMeasurementsElement
Summary results of measuring a specific cell. Used for layer-1 filtering.
Definition: lte-ue-phy.h:742
ns3::LteUeCphySapUser::UeMeasurementsElement
Parameters of the ReportUeMeasurements primitive: RSRP [dBm] and RSRQ [dB] See section 5....
Definition: lte-ue-cphy-sap.h:223
ns3::LteUePhy::m_subChannelsForReception
std::vector< int > m_subChannelsForReception
A list of sub channels to use in RX.
Definition: lte-ue-phy.h:656
ns3::UlDciListElement_s::m_mcs
uint8_t m_mcs
MCS.
Definition: ff-mac-common.h:146
ns3::UlDciListElement_s::m_rbLen
uint8_t m_rbLen
length
Definition: ff-mac-common.h:144
ns3::LteUePhy::SetNumQoutEvalSf
void SetNumQoutEvalSf(uint16_t numSubframes)
Set number of Qout evaluation subframes.
Definition: lte-ue-phy.cc:462
ns3::LteUePhy::DoStartInSnycDetection
void DoStartInSnycDetection()
Start in Snyc detection function.
Definition: lte-ue-phy.cc:1556
ns3::TimeValue
AttributeValue implementation for Time.
Definition: nstime.h:1353
ns3::LteUePhy::m_txModeGain
std::vector< double > m_txModeGain
the transmit mode gain
Definition: lte-ue-phy.h:692
NS_LOG_FUNCTION
#define NS_LOG_FUNCTION(parameters)
If log level LOG_FUNCTION is enabled, this macro will output all input parameters separated by ",...
Definition: log-macros-enabled.h:244
ns3::LteUePhy::DoSynchronizeWithEnb
void DoSynchronizeWithEnb(uint16_t cellId)
Synchronize with ENB function.
Definition: lte-ue-phy.cc:1422
ns3::LteControlMessage::UL_DCI
@ UL_DCI
Definition: lte-control-messages.h:56
ns3::LteUePhy::State
State
The states of the UE PHY entity.
Definition: lte-ue-phy.h:67
ns3::LteUePhy::m_p10CqiLast
Time m_p10CqiLast
last periodic CQI
Definition: lte-ue-phy.h:673
ns3::LteUePhy::LteUePhy
LteUePhy()
Definition: lte-ue-phy.cc:149
ns3::LteUePhy::m_numOfQoutEvalSf
uint16_t m_numOfQoutEvalSf
the downlink radio link quality is estimated over this period for detecting out-of-syncs
Definition: lte-ue-phy.h:834
ns3::PhyTransmissionStatParameters::m_ndi
uint8_t m_ndi
new data indicator flag
Definition: lte-common.h:197
ns3::LtePhy::SetMacPdu
void SetMacPdu(Ptr< Packet > p)
Definition: lte-phy.cc:192
ns3::LteUePhy::m_dlConfigured
bool m_dlConfigured
DL configured?
Definition: lte-ue-phy.h:701
ns3::LteUePhy::SetNumQinEvalSf
void SetNumQinEvalSf(uint16_t numSubframes)
Set number of Qin evaluation subframes.
Definition: lte-ue-phy.cc:471
ns3::LteUePhy::ReportRsReceivedPower
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 ...
Definition: lte-ue-phy.cc:815
ns3::PhyTransmissionStatParameters::m_rnti
uint16_t m_rnti
C-RNTI scheduled.
Definition: lte-common.h:191
ns3::LteUePhy::m_rsReceivedPowerUpdated
bool m_rsReceivedPowerUpdated
RS receive power updated?
Definition: lte-ue-phy.h:715
ns3::LteUeCphySapUser::UeMeasurementsParameters::m_ueMeasurementsList
std::vector< struct UeMeasurementsElement > m_ueMeasurementsList
UE measurement list.
Definition: lte-ue-cphy-sap.h:232
ns3::LteUePhy::CreateDlCqiFeedbackMessage
Ptr< DlCqiLteControlMessage > CreateDlCqiFeedbackMessage(const SpectrumValue &sinr)
Create the DL CQI feedback from SINR values perceived at the physical layer with the signal received ...
Definition: lte-ue-phy.cc:840
ns3::UintegerValue
Hold an unsigned integer type.
Definition: uinteger.h:44
ns3::DlDciListElement_s::m_tpc
uint8_t m_tpc
Tx power control command.
Definition: ff-mac-common.h:111
ns3::LtePhy::m_ulEarfcn
uint32_t m_ulEarfcn
The uplink carrier frequency.
Definition: lte-phy.h:286
ns3::LteUePhy::GetUplinkPowerControl
Ptr< LteUePowerControl > GetUplinkPowerControl() const
Get Uplink power control.
Definition: lte-ue-phy.cc:437
ns3::LteUePhy::ComputeAvgSinr
double ComputeAvgSinr(const SpectrumValue &sinr)
Compute average SINR among the RBs.
Definition: lte-ue-phy.cc:705
ns3::LteUePhy::SetLteUeCphySapUser
void SetLteUeCphySapUser(LteUeCphySapUser *s)
Set the CPHY SAP User.
Definition: lte-ue-phy.cc:394
ns3::LteUePhy::m_stateTransitionTrace
TracedCallback< uint16_t, uint16_t, State, State > m_stateTransitionTrace
The StateTransition trace source.
Definition: lte-ue-phy.h:710
ns3::LteUePhy::SYNCHRONIZED
@ SYNCHRONIZED
Definition: lte-ue-phy.h:69
ns3::PhyTransmissionStatParameters::m_timestamp
int64_t m_timestamp
in millisecond
Definition: lte-common.h:188
ns3::LteUePhy::UeMeasurementsElement::rsrqSum
double rsrqSum
Sum of RSRQ sample values in linear unit.
Definition: lte-ue-phy.h:745
ns3::LteUePhy::PhyPduReceived
void PhyPduReceived(Ptr< Packet > p)
PhySpectrum received a new PHY-PDU.
Definition: lte-ue-phy.cc:503
ns3::LteUePhy::~LteUePhy
virtual ~LteUePhy()
Definition: lte-ue-phy.cc:184
ns3::LteUePowerControl::GetPucchTxPower
double GetPucchTxPower(std::vector< int > rb)
Get PUCCH transmit power function.
Definition: lte-ue-power-control.cc:444
ns3::LteUePhy::m_ueCphySapProvider
LteUeCphySapProvider * m_ueCphySapProvider
UE CPhy SAP provider.
Definition: lte-ue-phy.h:686
ns3::PhyTransmissionStatParameters
PhyTransmissionStatParameters structure.
Definition: lte-common.h:187
ns3::LteUePhy::m_subframeNo
uint8_t m_subframeNo
Definition: lte-ue-phy.h:713
ns3::LteUePhy::m_qOut
double m_qOut
The 'Qout' attribute.
Definition: lte-ue-phy.h:832
ns3::LteUePhy::SetTxModeGain
void SetTxModeGain(uint8_t txMode, double gain)
Set transmit mode gain function.
Definition: lte-ue-phy.cc:1713
ns3::DlInfoListElement_s
See section 4.3.23 dlInfoListElement.
Definition: ff-mac-common.h:430
ns3::MakeUintegerAccessor
Ptr< const AttributeAccessor > MakeUintegerAccessor(T1 a1)
Create an AttributeAccessor for a class data member, or a lone class get functor or set method.
Definition: uinteger.h:45
ns3::LteUePhy::SetNoiseFigure
void SetNoiseFigure(double nf)
Set noise figure.
Definition: lte-ue-phy.cc:408
ns3::LteUePhy::PssElement::pssPsdSum
double pssPsdSum
PSS PSD sum.
Definition: lte-ue-phy.h:729
ns3::LteUePhySapUser::SubframeIndication
virtual void SubframeIndication(uint32_t frameNo, uint32_t subframeNo)=0
Trigger the start from a new frame (input from Phy layer)
ns3::LteUePhy::GetLteUePhySapProvider
LteUePhySapProvider * GetLteUePhySapProvider()
Get the PHY SAP provider.
Definition: lte-ue-phy.cc:386
ns3::TransmissionModesLayers::TxMode2LayerNum
static uint8_t TxMode2LayerNum(uint8_t txMode)
Transmit mode 2 layer number.
Definition: lte-common.cc:212
ns3::DlDciListElement_s::m_rbBitmap
uint32_t m_rbBitmap
RB bitmap.
Definition: ff-mac-common.h:96
ns3::LteUePhySapUser
Service Access Point (SAP) offered by the PHY to the MAC.
Definition: lte-ue-phy-sap.h:82
ns3::LteUePhy::PssElement::nRB
uint16_t nRB
number of RB
Definition: lte-ue-phy.h:730
ns3::LteUePhy::m_numOfSubframes
uint16_t m_numOfSubframes
count the number of subframes for which the downlink radio link quality is estimated
Definition: lte-ue-phy.h:838
ns3::LteUePhy::DoNotifyConnectionSuccessful
virtual void DoNotifyConnectionSuccessful()
Notify PHY about the successful RRC connection establishment.
Definition: lte-ue-phy.cc:1012
ns3::DlDciListElement_s::m_ndi
std::vector< uint8_t > m_ndi
New data indicator.
Definition: ff-mac-common.h:101
ns3::CqiListElement_s::m_rnti
uint16_t m_rnti
RNTI.
Definition: ff-mac-common.h:485
ns3::LteUePhy::m_paLinear
double m_paLinear
PA linear.
Definition: lte-ue-phy.h:699
ns3::LteUePhy::m_pssReceptionThreshold
double m_pssReceptionThreshold
The RsrqUeMeasThreshold attribute.
Definition: lte-ue-phy.h:738
ns3::LteUePhySapUser::ReceivePhyPdu
virtual void ReceivePhyPdu(Ptr< Packet > p)=0
Receive Phy Pdu funtion.
ns3::LteUePhy::DoSendMacPdu
virtual void DoSendMacPdu(Ptr< Packet > p)
Queue the MAC PDU to be sent (according to m_macChTtiDelay)
Definition: lte-ue-phy.cc:494
ns3::LteUePhy::m_subChannelsForTransmission
std::vector< int > m_subChannelsForTransmission
A list of sub channels to use in TX.
Definition: lte-ue-phy.h:654
ns3::LtePhy::SetControlMessages
void SetControlMessages(Ptr< LteControlMessage > m)
Definition: lte-phy.cc:217
ns3::LteUePhy::PssElement
PssElement structure.
Definition: lte-ue-phy.h:727
ns3::UeMemberLteUePhySapProvider
UeMemberLteUePhySapProvider class.
Definition: lte-ue-phy.cc:78
ns3::LteUePhy::SetSubChannelsForReception
void SetSubChannelsForReception(std::vector< int > mask)
Get a list of sub channels to use in RX.
Definition: lte-ue-phy.cc:521
ns3::DlDciListElement_s::m_rv
std::vector< uint8_t > m_rv
Redundancy version.
Definition: ff-mac-common.h:102
ns3::LteUePhy::GetUlSpectrumPhy
Ptr< LteSpectrumPhy > GetUlSpectrumPhy() const
Get Uplink spectrum phy.
Definition: lte-ue-phy.cc:456
ns3::SpectrumValue::ConstValuesBegin
Values::const_iterator ConstValuesBegin() const
Definition: spectrum-value.cc:69
ns3::LteUePhy::m_pssList
std::list< PssElement > m_pssList
PSS list.
Definition: lte-ue-phy.h:732
ns3::Time::MS
@ MS
millisecond
Definition: nstime.h:116
ns3::LteUePhy::SetTxMode4Gain
void SetTxMode4Gain(double gain)
Set transmit mode 4 gain function.
Definition: lte-ue-phy.cc:1688
ns3::UeMemberLteUePhySapProvider::m_phy
LteUePhy * m_phy
the Phy
Definition: lte-ue-phy.cc:94
ns3::LteUePhy::SetTxMode2Gain
void SetTxMode2Gain(double gain)
Set transmit mode 2 gain function.
Definition: lte-ue-phy.cc:1676
ns3::LteUePhySapUser::ReceiveLteControlMessage
virtual void ReceiveLteControlMessage(Ptr< LteControlMessage > msg)=0
Receive SendLteControlMessage (PDCCH map, CQI feedbacks) using the ideal control channel.
ns3::LteUePhy::m_harqPhyModule
Ptr< LteHarqPhy > m_harqPhyModule
HARQ phy module.
Definition: lte-ue-phy.h:762
ns3::UlDciListElement_s::m_tbSize
uint16_t m_tbSize
size
Definition: ff-mac-common.h:145
ns3::LteUePhy::m_numOfFrames
uint16_t m_numOfFrames
count the number of frames for which the downlink radio link quality is estimated
Definition: lte-ue-phy.h:839
ns3::LteUePhy::m_qIn
double m_qIn
The 'Qin' attribute.
Definition: lte-ue-phy.h:825
ns3::LteUePhy::m_srsPeriodicity
uint16_t m_srsPeriodicity
SRS periodicity.
Definition: lte-ue-phy.h:694
third.phy
phy
Definition: third.py:93
ns3::MakeTimeAccessor
Ptr< const AttributeAccessor > MakeTimeAccessor(T1 a1)
Create an AttributeAccessor for a class data member, or a lone class get functor or set method.
Definition: nstime.h:1354
ns3::LteUePhy::m_ueMeasurementsFilterPeriod
Time m_ueMeasurementsFilterPeriod
The UeMeasurementsFilterPeriod attribute.
Definition: lte-ue-phy.h:758
ns3::g_uePhyStateName
static const std::string g_uePhyStateName[LteUePhy::NUM_STATES]
Map each of UE PHY states to its string representation.
Definition: lte-ue-phy.cc:130
ns3::LteUePowerControl::GetSrsTxPower
double GetSrsTxPower(std::vector< int > rb)
Get SRS transmit power function.
Definition: lte-ue-power-control.cc:456
ns3::LtePhy::GetPacketBurst
Ptr< PacketBurst > GetPacketBurst(void)
Definition: lte-phy.cc:198
ns3::LteUePhy::m_enableUplinkPowerControl
bool m_enableUplinkPowerControl
The EnableUplinkPowerControl attribute.
Definition: lte-ue-phy.h:667
ns3::DlDciListElement_s::m_harqProcess
uint8_t m_harqProcess
HARQ process.
Definition: ff-mac-common.h:112
ns3::LteUePhy::m_dataInterferencePowerUpdated
bool m_dataInterferencePowerUpdated
data interference power updated?
Definition: lte-ue-phy.h:721
ns3::LteUePhy::DoSetImsi
void DoSetImsi(uint64_t imsi)
Set IMSI.
Definition: lte-ue-phy.cc:1564
ns3::LteUePhy::DoSendRachPreamble
virtual void DoSendRachPreamble(uint32_t prachId, uint32_t raRnti)
Send RACH preamble function.
Definition: lte-ue-phy.cc:999
ns3::LteUePhy::MemberLteUeCphySapProvider< LteUePhy >
friend class MemberLteUeCphySapProvider< LteUePhy >
allow MemberLteUeCphySapProvider<LteUePhy> class friend access
Definition: lte-ue-phy.h:60