23 #include <ns3/object-factory.h>
26 #include <ns3/simulator.h>
27 #include <ns3/double.h>
38 #include <ns3/lte-common.h>
73 virtual void SetBandwidth (uint8_t ulBandwidth, uint8_t dlBandwidth);
144 m_amc = CreateObject <LteAmc> ();
151 std::list<Ptr<LteControlMessage> > l;
154 std::vector <int> ulRb;
158 "Cannot create UE devices after simulation started");
183 .AddConstructor<LteUePhy> ()
184 .AddAttribute (
"TxPower",
185 "Transmission power in dBm",
189 MakeDoubleChecker<double> ())
190 .AddAttribute (
"NoiseFigure",
191 "Loss (dB) in the Signal-to-Noise-Ratio due to non-idealities in the receiver."
192 " According to Wikipedia (http://en.wikipedia.org/wiki/Noise_figure), this is "
193 "\"the difference in decibels (dB) between"
194 " the noise output of the actual receiver to the noise output of an "
195 " ideal receiver with the same overall gain and bandwidth when the receivers "
196 " are connected to sources at the standard noise temperature T0.\" "
197 "In this model, we consider T0 = 290K.",
201 MakeDoubleChecker<double> ())
202 .AddAttribute (
"TxMode1Gain",
203 "Transmission mode 1 gain in dB",
206 MakeDoubleChecker<double> ())
207 .AddAttribute (
"TxMode2Gain",
208 "Transmission mode 2 gain in dB",
211 MakeDoubleChecker<double> ())
212 .AddAttribute (
"TxMode3Gain",
213 "Transmission mode 3 gain in dB",
216 MakeDoubleChecker<double> ())
217 .AddAttribute (
"TxMode4Gain",
218 "Transmission mode 4 gain in dB",
221 MakeDoubleChecker<double> ())
222 .AddAttribute (
"TxMode5Gain",
223 "Transmission mode 5 gain in dB",
226 MakeDoubleChecker<double> ())
227 .AddAttribute (
"TxMode6Gain",
228 "Transmission mode 6 gain in dB",
231 MakeDoubleChecker<double> ())
232 .AddAttribute (
"TxMode7Gain",
233 "Transmission mode 7 gain in dB",
236 MakeDoubleChecker<double> ())
406 std::vector<int> cqi;
412 int nbSubChannels = cqi.size ();
414 int activeSubChannels = 0;
416 for (
int i = 0; i < nbSubChannels; i++)
418 if (cqi.at (i) != -1)
420 cqiSum += cqi.at (i);
423 NS_LOG_DEBUG (
this <<
" subch " << i <<
" cqi " << cqi.at (i));
430 for (
int i = 0; i < nLayer; i++)
432 if (activeSubChannels > 0)
434 dlcqi.m_wbCqi.push_back ((uint16_t) cqiSum / activeSubChannels);
439 dlcqi.m_wbCqi.push_back (1);
450 int nbSubChannels = cqi.size ();
456 for (
int i = 0; i < nbSubChannels; i++)
458 if (cqi.at (i) != -1)
460 cqiSum += cqi.at (i);
464 if (cqiNum == rbgSize)
470 for (
int i = 0; i < nLayer; i++)
472 hlCqi.
m_sbCqi.push_back ((uint16_t) cqiSum / rbgSize);
484 dlcqi.m_sbMeasResult = rbgMeas;
487 msg->SetDlCqi (dlcqi);
508 std::list<Ptr<LteControlMessage> >::iterator it;
509 for (it = msgList.begin (); it != msgList.end(); it++)
524 if (dci.m_resAlloc != 0)
529 std::vector <int> dlRb;
533 for (
int i = 0; i < 32; i++)
535 if (((dci.m_rbBitmap & mask) >> i) == 1)
539 dlRb.push_back ((i * GetRbgSize ()) + k);
547 NS_LOG_DEBUG (
this <<
" UE " <<
m_rnti <<
" DL-DCI " << dci.m_rnti <<
" bitmap " << dci.m_rbBitmap);
548 for (uint8_t i = 0; i < dci.m_tbsSize.size (); i++)
568 std::vector <int> ulRb;
569 for (
int i = 0; i < dci.m_rbLen; i++)
571 ulRb.push_back (i + dci.m_rbStart);
644 if (ctrlMsg.size ()>0)
646 NS_LOG_LOGIC (
this <<
" UE - start TX PUCCH (NO PUSCH)");
647 std::vector <int> dlRb;
678 std::vector <int> dlRb;
773 double gainLin = std::pow (10.0, (gain / 10.0));
778 std::vector <double> temp;
781 for (uint8_t i = 0; i < temp.size (); i++)