A Discrete-Event Network Simulator
API
lte-spectrum-phy.h
Go to the documentation of this file.
1 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
2 /*
3  * Copyright (c) 2009 CTTC
4  *
5  * This program is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License version 2 as
7  * published by the Free Software Foundation;
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program; if not, write to the Free Software
16  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17  *
18  * Author: Nicola Baldo <nbaldo@cttc.es>
19  * Giuseppe Piro <g.piro@poliba.it>
20  * Modified by: Marco Miozzo <mmiozzo@cttc.es> (introduce physical error model)
21  */
22 
23 #ifndef LTE_SPECTRUM_PHY_H
24 #define LTE_SPECTRUM_PHY_H
25 
26 #include <ns3/event-id.h>
27 #include <ns3/spectrum-value.h>
28 #include <ns3/mobility-model.h>
29 #include <ns3/packet.h>
30 #include <ns3/nstime.h>
31 #include <ns3/net-device.h>
32 #include <ns3/spectrum-phy.h>
33 #include <ns3/spectrum-channel.h>
34 #include <ns3/spectrum-interference.h>
35 #include <ns3/data-rate.h>
36 #include <ns3/generic-phy.h>
37 #include <ns3/packet-burst.h>
38 #include <ns3/lte-interference.h>
39 #include "ns3/random-variable-stream.h"
40 #include <map>
41 #include <ns3/ff-mac-common.h>
42 #include <ns3/lte-harq-phy.h>
43 #include <ns3/lte-common.h>
44 
45 namespace ns3 {
46 
48 struct TbId_t
49 {
50  uint16_t m_rnti;
51  uint8_t m_layer;
52 
53  public:
54  TbId_t ();
61  TbId_t (const uint16_t a, const uint8_t b);
62 
63  friend bool operator == (const TbId_t &a, const TbId_t &b);
64  friend bool operator < (const TbId_t &a, const TbId_t &b);
65 };
66 
67 
69 struct tbInfo_t
70 {
71  uint8_t ndi;
72  uint16_t size;
73  uint8_t mcs;
74  std::vector<int> rbBitmap;
75  uint8_t harqProcessId;
76  uint8_t rv;
77  double mi;
78  bool downlink;
79  bool corrupt;
81 };
82 
83 typedef std::map<TbId_t, tbInfo_t> expectedTbs_t;
84 
85 
86 class LteNetDevice;
87 class AntennaModel;
88 class LteControlMessage;
92 
105 
106 
115 
122 
128 
129 
135 
141 
142 
143 
154 {
155 
156 public:
157  LteSpectrumPhy ();
158  virtual ~LteSpectrumPhy ();
159 
163  enum State
164  {
166  };
167 
172  static TypeId GetTypeId (void);
173  // inherited from Object
174  virtual void DoDispose ();
175 
176  // inherited from SpectrumPhy
179  void SetDevice (Ptr<NetDevice> d);
181  Ptr<NetDevice> GetDevice () const;
204  void SetHarqPhyModule (Ptr<LteHarqPhy> harq);
205 
212 
219 
224  void Reset ();
225 
231  void SetAntenna (Ptr<AntennaModel> a);
232 
244  bool StartTxDataFrame (Ptr<PacketBurst> pb, std::list<Ptr<LteControlMessage> > ctrlMsgList, Time duration);
245 
256  bool StartTxDlCtrlFrame (std::list<Ptr<LteControlMessage> > ctrlMsgList, bool pss);
257 
258 
265  bool StartTxUlSrsFrame ();
266 
273  void SetLtePhyRxDataEndErrorCallback (LtePhyRxDataEndErrorCallback c);
274 
281  void SetLtePhyRxDataEndOkCallback (LtePhyRxDataEndOkCallback c);
282 
289  void SetLtePhyRxCtrlEndOkCallback (LtePhyRxCtrlEndOkCallback c);
290 
297  void SetLtePhyRxCtrlEndErrorCallback (LtePhyRxCtrlEndErrorCallback c);
298 
305  void SetLtePhyRxPssCallback (LtePhyRxPssCallback c);
306 
313  void SetLtePhyDlHarqFeedbackCallback (LtePhyDlHarqFeedbackCallback c);
314 
321  void SetLtePhyUlHarqFeedbackCallback (LtePhyUlHarqFeedbackCallback c);
322 
327  void SetState (State newState);
328 
334  void SetCellId (uint16_t cellId);
335 
340  void SetComponentCarrierId (uint8_t componentCarrierId);
341 
349 
357 
364 
372 
380 
381 
388 
402  void AddExpectedTb (uint16_t rnti, uint8_t ndi, uint16_t size, uint8_t mcs, std::vector<int> map, uint8_t layer, uint8_t harqId, uint8_t rv, bool downlink);
403 
404 
410  void UpdateSinrPerceived (const SpectrumValue& sinr);
411 
417  void SetTransmissionMode (uint8_t txMode);
418 
419 
425 
427  friend class LteUePhy;
428 
437  int64_t AssignStreams (int64_t stream);
438 
439 private:
445  void ChangeState (State newState);
447  void EndTxData ();
449  void EndTxDlCtrl ();
451  void EndTxUlSrs ();
453  void EndRxData ();
455  void EndRxDlCtrl ();
457  void EndRxUlSrs ();
458 
465  void SetTxModeGain (uint8_t txMode, double gain);
466 
467 
471 
473 
477  std::list<Ptr<PacketBurst> > m_rxPacketBurstList;
478 
479  std::list<Ptr<LteControlMessage> > m_txControlMessageList;
480  std::list<Ptr<LteControlMessage> > m_rxControlMessageList;
481 
482 
486 
492 
493  LtePhyRxDataEndErrorCallback m_ltePhyRxDataEndErrorCallback;
494  LtePhyRxDataEndOkCallback m_ltePhyRxDataEndOkCallback;
495 
496  LtePhyRxCtrlEndOkCallback m_ltePhyRxCtrlEndOkCallback;
497  LtePhyRxCtrlEndErrorCallback m_ltePhyRxCtrlEndErrorCallback;
498  LtePhyRxPssCallback m_ltePhyRxPssCallback;
499 
502 
503  uint16_t m_cellId;
504 
506  expectedTbs_t m_expectedTbs;
508 
513 
515  uint8_t m_layersNum;
516  std::vector <double> m_txModeGain;
517 
519  LtePhyDlHarqFeedbackCallback m_ltePhyDlHarqFeedbackCallback;
520  LtePhyUlHarqFeedbackCallback m_ltePhyUlHarqFeedbackCallback;
521 
522 
528 
529 
535 
540 
541 
542 };
543 
544 
545 
546 
547 
548 
549 }
550 
551 #endif /* LTE_SPECTRUM_PHY_H */
Ptr< LteHarqPhy > m_harqPhyModule
the HARQ phy module
void EndTxData()
End transmit data function.
Simulation virtual time values and global simulation resolution.
Definition: nstime.h:102
Smart pointer class similar to boost::intrusive_ptr.
Definition: ptr.h:73
void StartRxData(Ptr< LteSpectrumSignalParametersDataFrame > params)
Start receive data function.
Abstract base class for Spectrum-aware PHY layers.
Definition: spectrum-phy.h:45
Ptr< LteInterference > m_interferenceCtrl
the control interference
LtePhyRxCtrlEndOkCallback m_ltePhyRxCtrlEndOkCallback
the LTE phy receive control end ok callback
TracedCallback< Ptr< const PacketBurst > > m_phyTxEndTrace
the phy transmit end trace callback
The LteControlMessage provides a basic implementations for control messages (such as PDCCH allocation...
void AddDataSinrChunkProcessor(Ptr< LteChunkProcessor > p)
Time m_firstRxStart
the first receive start
void SetState(State newState)
Set the state of the phy layer.
bool harqFeedbackSent
is HARQ feedback sent
Forward calls to a chain of Callback.
void StartRxUlSrs(Ptr< LteSpectrumSignalParametersUlSrsFrame > lteUlSrsRxParams)
Start receive UL SRS function.
TracedCallback< Ptr< const Packet > > m_phyRxEndErrorTrace
the phy receive end error trace callback
void SetLtePhyRxDataEndErrorCallback(LtePhyRxDataEndErrorCallback c)
set the callback for the end of a RX in error, as part of the interconnections between the PHY and th...
void SetTxModeGain(uint8_t txMode, double gain)
Set transmit mode gain function.
LtePhyRxCtrlEndErrorCallback m_ltePhyRxCtrlEndErrorCallback
the LTE phy receive control end error callback
void SetTransmissionMode(uint8_t txMode)
Ptr< SpectrumChannel > m_channel
the channel
std::list< Ptr< LteControlMessage > > m_txControlMessageList
the transmit control message list
Callback< void, UlInfoListElement_s > LtePhyUlHarqFeedbackCallback
This method is used by the LteSpectrumPhy to notify the PHY about the status of a certain UL HARQ pro...
expectedTbs_t m_expectedTbs
the expected TBS
Signal parameters for Lte Data Frame (PDSCH), and eventually after some control messages through othe...
Ptr< LteInterference > m_interferenceData
the data interference
Callback< void > LtePhyRxCtrlEndErrorCallback
This method is used by the LteSpectrumPhy to notify the PHY that a previously started RX of a control...
Ptr< SpectrumChannel > GetChannel()
uint8_t harqProcessId
HARQ process id.
LtePhyRxDataEndErrorCallback m_ltePhyRxDataEndErrorCallback
the LTE phy receive data end error callback
bool downlink
whether is downlink
void AddCtrlSinrChunkProcessor(Ptr< LteChunkProcessor > p)
void SetNoisePowerSpectralDensity(Ptr< const SpectrumValue > noisePsd)
set the noise power spectral density
Ptr< UniformRandomVariable > m_random
Provides uniform random variables.
void SetDevice(Ptr< NetDevice > d)
Set the associated NetDevice instance.
std::list< Ptr< PacketBurst > > m_rxPacketBurstList
the receive burst list
Callback< void, std::list< Ptr< LteControlMessage > > > LtePhyRxCtrlEndOkCallback
This method is used by the LteSpectrumPhy to notify the PHY that a previously started RX of a control...
void AddInterferenceCtrlChunkProcessor(Ptr< LteChunkProcessor > p)
LteChunkProcessor devoted to evaluate interference + noise power in control symbols of the subframe...
void SetLtePhyUlHarqFeedbackCallback(LtePhyUlHarqFeedbackCallback c)
set the callback for the UL HARQ feedback as part of the interconnections between the LteSpectrumPhy ...
void EndRxData()
End receive data function.
void ChangeState(State newState)
Change state function.
std::list< Ptr< LteControlMessage > > m_rxControlMessageList
the receive control message list
void SetLtePhyRxCtrlEndOkCallback(LtePhyRxCtrlEndOkCallback c)
set the callback for the successful end of a RX ctrl frame, as part of the interconnections between t...
Time m_firstRxDuration
the first receive duration
void SetTxPowerSpectralDensity(Ptr< SpectrumValue > txPsd)
set the Power Spectral Density of outgoing signals in W/Hz.
void SetLtePhyRxCtrlEndErrorCallback(LtePhyRxCtrlEndErrorCallback c)
set the callback for the erroneous end of a RX ctrl frame, as part of the interconnections between th...
friend bool operator==(const TbId_t &a, const TbId_t &b)
Equality operator.
Ptr< AntennaModel > m_antenna
the antenna model
TracedCallback< Ptr< const PacketBurst > > m_phyRxStartTrace
the phy receive start trace callback
uint8_t m_componentCarrierId
the component carrier ID
LtePhyRxDataEndOkCallback m_ltePhyRxDataEndOkCallback
the LTE phy receive data end ok callback
void EndTxUlSrs()
End transmit UL SRS function.
void AddDataPowerChunkProcessor(Ptr< LteChunkProcessor > p)
void EndTxDlCtrl()
End transmit DL control function.
bool StartTxDataFrame(Ptr< PacketBurst > pb, std::list< Ptr< LteControlMessage > > ctrlMsgList, Time duration)
Start a transmission of data frame in DL and UL.
uint8_t m_transmissionMode
for UEs: store the transmission mode
std::map< TbId_t, tbInfo_t > expectedTbs_t
expectedTbs_t typedef
bool corrupt
whether is corrupt
Ptr< MobilityModel > m_mobility
the modility model
void SetHarqPhyModule(Ptr< LteHarqPhy > harq)
Set HARQ phy function.
uint8_t m_layersNum
layers num
int64_t AssignStreams(int64_t stream)
Assign a fixed random variable stream number to the random variables used by this model...
#define list
State m_state
the state
virtual void DoDispose()
Destructor implementation.
Ptr< SpectrumValue > m_txPsd
the transmit PSD
friend bool operator<(const TbId_t &a, const TbId_t &b)
Less than operator.
void SetAntenna(Ptr< AntennaModel > a)
set the AntennaModel to be used
uint16_t m_rnti
RNTI.
EventId m_endRxDlCtrlEvent
end receive DL control event
void SetComponentCarrierId(uint8_t componentCarrierId)
bool m_dataErrorModelEnabled
when true (default) the phy error model is enabled
Every class exported by the ns3 library is enclosed in the ns3 namespace.
void EndRxDlCtrl()
End receive DL control function.
Callback< void, uint16_t, Ptr< SpectrumValue > > LtePhyRxPssCallback
This method is used by the LteSpectrumPhy to notify the UE PHY that a PSS has been received...
void AddExpectedTb(uint16_t rnti, uint8_t ndi, uint16_t size, uint8_t mcs, std::vector< int > map, uint8_t layer, uint8_t harqId, uint8_t rv, bool downlink)
Ptr< const SpectrumModel > GetRxSpectrumModel() const
Ptr< AntennaModel > GetRxAntenna()
Get the AntennaModel used by the NetDevice for reception.
Ptr< MobilityModel > GetMobility()
Get the associated MobilityModel instance.
Ptr< const SpectrumModel > m_rxSpectrumModel
the spectrum model
Signal parameters for Lte DL Ctrl Frame (RS, PCFICH and PDCCH)
LtePhyDlHarqFeedbackCallback m_ltePhyDlHarqFeedbackCallback
the LTE phy DL HARQ feedback callback
Ptr< PacketBurst > m_txPacketBurst
the transmit packet burst
uint16_t size
size
void SetChannel(Ptr< SpectrumChannel > c)
Set the channel attached to this device.
TbId_t sturcture.
void AddInterferenceDataChunkProcessor(Ptr< LteChunkProcessor > p)
LteChunkProcessor devoted to evaluate interference + noise power in data symbols of the subframe...
EventId m_endTxEvent
end transmit event
void Reset()
reset the internal state
TracedCallback< PhyReceptionStatParameters > m_ulPhyReception
Trace information regarding PHY stats from UL Rx perspective PhyReceptionStatParameters (see lte-comm...
Ptr< NetDevice > m_device
the device
bool m_ctrlErrorModelEnabled
when true (default) the phy error model is enabled for DL ctrl frame
LtePhyUlHarqFeedbackCallback m_ltePhyUlHarqFeedbackCallback
the LTE phy UL HARQ feedback callback
static TypeId GetTypeId(void)
Get the type ID.
TracedCallback< Ptr< const Packet > > m_phyRxEndOkTrace
the phy receive end ok trace callback
uint8_t mcs
mcs
uint8_t m_layer
layer
bool StartTxDlCtrlFrame(std::list< Ptr< LteControlMessage > > ctrlMsgList, bool pss)
Start a transmission of control frame in DL.
uint16_t m_cellId
the cell ID
void SetLtePhyDlHarqFeedbackCallback(LtePhyDlHarqFeedbackCallback c)
set the callback for the DL HARQ feedback as part of the interconnections between the LteSpectrumPhy ...
An identifier for simulation events.
Definition: event-id.h:53
Ptr< NetDevice > GetDevice() const
Get the associated NetDevice instance.
void SetLtePhyRxPssCallback(LtePhyRxPssCallback c)
set the callback for the reception of the PSS as part of the interconnections between the LteSpectrum...
LtePhyRxPssCallback m_ltePhyRxPssCallback
the LTE phy receive PSS callback
void EndRxUlSrs()
End receive UL SRS function.
uint8_t ndi
ndi
Callback< void, DlInfoListElement_s > LtePhyDlHarqFeedbackCallback
This method is used by the LteSpectrumPhy to notify the PHY about the status of a certain DL HARQ pro...
EventId m_endRxUlSrsEvent
end receive UL SRS event
void SetLtePhyRxDataEndOkCallback(LtePhyRxDataEndOkCallback c)
set the callback for the successful end of a RX, as part of the interconnections between the PHY and ...
void AddRsPowerChunkProcessor(Ptr< LteChunkProcessor > p)
void SetMobility(Ptr< MobilityModel > m)
Set the mobility model associated with this device.
Callback< void, Ptr< Packet > > LtePhyRxDataEndOkCallback
This method is used by the LteSpectrumPhy to notify the PHY that a previously started RX attempt has ...
tbInfo_t structure
The LteSpectrumPhy models the physical layer of LTE.
Definition: lte-ue-phy.h:51
LteNetDevice provides basic implementation for all LTE network devices.
void StartRx(Ptr< SpectrumSignalParameters > params)
Notify the SpectrumPhy instance of an incoming signal.
TracedCallback< Ptr< const PacketBurst > > m_phyTxStartTrace
the phy transmit start trace callback
Set of values corresponding to a given SpectrumModel.
interface for antenna radiation pattern models
Definition: antenna-model.h:44
void StartRxDlCtrl(Ptr< LteSpectrumSignalParametersDlCtrlFrame > lteDlCtrlRxParams)
Start receive DL control function.
a unique identifier for an interface.
Definition: type-id.h:58
void UpdateSinrPerceived(const SpectrumValue &sinr)
EventId m_endRxDataEvent
end receive data event
bool StartTxUlSrsFrame()
Start a transmission of control frame in UL.
void SetCellId(uint16_t cellId)
std::vector< int > rbBitmap
rb bitmap
SpectrumValue m_sinrPerceived
the preceived SINR
std::vector< double > m_txModeGain
duplicate value of LteUePhy
TracedCallback< PhyReceptionStatParameters > m_dlPhyReception
Trace information regarding PHY stats from DL Rx perspective PhyReceptionStatParameters (see lte-comm...
The LteSpectrumPhy models the physical layer of LTE.
Callback< void > LtePhyRxDataEndErrorCallback
This method is used by the LteSpectrumPhy to notify the PHY that a previously started RX attempt has ...