A Discrete-Event Network Simulator
API
lte-spectrum-phy.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2009 CTTC
3  *
4  * This program is free software; you can redistribute it and/or modify
5  * it under the terms of the GNU General Public License version 2 as
6  * published by the Free Software Foundation;
7  *
8  * This program is distributed in the hope that it will be useful,
9  * but WITHOUT ANY WARRANTY; without even the implied warranty of
10  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11  * GNU General Public License for more details.
12  *
13  * You should have received a copy of the GNU General Public License
14  * along with this program; if not, write to the Free Software
15  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
16  *
17  * Author: Nicola Baldo <nbaldo@cttc.es>
18  * Giuseppe Piro <g.piro@poliba.it>
19  * Modified by: Marco Miozzo <mmiozzo@cttc.es> (introduce physical error model)
20  */
21 
22 #ifndef LTE_SPECTRUM_PHY_H
23 #define LTE_SPECTRUM_PHY_H
24 
25 #include "ff-mac-common.h"
26 #include "lte-common.h"
27 #include "lte-harq-phy.h"
28 #include "lte-interference.h"
29 
30 #include <ns3/data-rate.h>
31 #include <ns3/event-id.h>
32 #include <ns3/generic-phy.h>
33 #include <ns3/mobility-model.h>
34 #include <ns3/net-device.h>
35 #include <ns3/nstime.h>
36 #include <ns3/packet-burst.h>
37 #include <ns3/packet.h>
38 #include <ns3/random-variable-stream.h>
39 #include <ns3/spectrum-channel.h>
40 #include <ns3/spectrum-interference.h>
41 #include <ns3/spectrum-phy.h>
42 #include <ns3/spectrum-value.h>
43 
44 #include <map>
45 
46 namespace ns3
47 {
48 
50 struct TbId_t
51 {
52  uint16_t m_rnti;
53  uint8_t m_layer;
54 
55  public:
56  TbId_t();
63  TbId_t(const uint16_t a, const uint8_t b);
64 
65  friend bool operator==(const TbId_t& a, const TbId_t& b);
66  friend bool operator<(const TbId_t& a, const TbId_t& b);
67 };
68 
70 struct tbInfo_t
71 {
72  uint8_t ndi;
73  uint16_t size;
74  uint8_t mcs;
75  std::vector<int> rbBitmap;
76  uint8_t harqProcessId;
77  uint8_t rv;
78  double mi;
79  bool downlink;
80  bool corrupt;
82 };
83 
84 typedef std::map<TbId_t, tbInfo_t> expectedTbs_t;
85 
86 class LteNetDevice;
87 class AntennaModel;
88 class LteControlMessage;
92 
105 
114 
121 
127 
133 
139 
150 {
151  public:
152  LteSpectrumPhy();
153  ~LteSpectrumPhy() override;
154 
158  enum State
159  {
166  RX_UL_SRS
167  };
168 
173  static TypeId GetTypeId();
174  // inherited from Object
175  void DoDispose() override;
176 
177  // inherited from SpectrumPhy
178  void SetChannel(Ptr<SpectrumChannel> c) override;
179  void SetMobility(Ptr<MobilityModel> m) override;
180  void SetDevice(Ptr<NetDevice> d) override;
181  Ptr<MobilityModel> GetMobility() const override;
182  Ptr<NetDevice> GetDevice() const override;
184  Ptr<Object> GetAntenna() const override;
206 
213 
220 
225  void Reset();
226 
233 
246  std::list<Ptr<LteControlMessage>> ctrlMsgList,
247  Time duration);
248 
259  bool StartTxDlCtrlFrame(std::list<Ptr<LteControlMessage>> ctrlMsgList, bool pss);
260 
267  bool StartTxUlSrsFrame();
268 
276 
284 
292 
300 
308 
316 
324 
329  void SetState(State newState);
330 
336  void SetCellId(uint16_t cellId);
337 
342  void SetComponentCarrierId(uint8_t componentCarrierId);
343 
351 
359 
366 
374 
382 
389 
403  void AddExpectedTb(uint16_t rnti,
404  uint8_t ndi,
405  uint16_t size,
406  uint8_t mcs,
407  std::vector<int> map,
408  uint8_t layer,
409  uint8_t harqId,
410  uint8_t rv,
411  bool downlink);
423  void RemoveExpectedTb(uint16_t rnti);
424 
430  void UpdateSinrPerceived(const SpectrumValue& sinr);
431 
437  void SetTransmissionMode(uint8_t txMode);
438 
444 
446  friend class LteUePhy;
447 
456  int64_t AssignStreams(int64_t stream);
457 
458  private:
464  void ChangeState(State newState);
466  void EndTxData();
468  void EndTxDlCtrl();
470  void EndTxUlSrs();
472  void EndRxData();
474  void EndRxDlCtrl();
476  void EndRxUlSrs();
477 
484  void SetTxModeGain(uint8_t txMode, double gain);
485 
489 
491 
495  std::list<Ptr<PacketBurst>> m_rxPacketBurstList;
496 
497  std::list<Ptr<LteControlMessage>> m_txControlMessageList;
498  std::list<Ptr<LteControlMessage>> m_rxControlMessageList;
499 
503 
512 
517 
523 
526 
527  uint16_t m_cellId;
528 
532 
538 
540  uint8_t m_layersNum;
541  std::vector<double> m_txModeGain;
542 
548 
554 
560 
565 };
566 
567 } // namespace ns3
568 
569 #endif /* LTE_SPECTRUM_PHY_H */
interface for antenna radiation pattern models
Definition: antenna-model.h:55
An identifier for simulation events.
Definition: event-id.h:55
The LteControlMessage provides a basic implementations for control messages (such as PDCCH allocation...
LteNetDevice provides basic implementation for all LTE network devices.
The LteSpectrumPhy models the physical layer of LTE.
void RemoveExpectedTb(uint16_t rnti)
Remove expected transport block.
Ptr< const SpectrumModel > m_rxSpectrumModel
the spectrum model
TracedCallback< Ptr< const PacketBurst > > m_phyTxEndTrace
the phy transmit end trace callback
bool m_dataErrorModelEnabled
when true (default) the phy error model is enabled
void SetState(State newState)
Set the state of the phy layer.
Ptr< LteInterference > m_interferenceData
the data interference
uint8_t m_transmissionMode
for UEs: store the transmission mode
EventId m_endRxDlCtrlEvent
end receive DL control event
void AddCtrlSinrChunkProcessor(Ptr< LteChunkProcessor > p)
void AddDataSinrChunkProcessor(Ptr< LteChunkProcessor > p)
LtePhyUlHarqFeedbackCallback m_ltePhyUlHarqFeedbackCallback
the LTE phy UL HARQ feedback callback
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< MobilityModel > GetMobility() const override
Get the associated MobilityModel instance.
Ptr< const SpectrumModel > GetRxSpectrumModel() const override
void SetHarqPhyModule(Ptr< LteHarqPhy > harq)
Set HARQ phy function.
LtePhyRxPssCallback m_ltePhyRxPssCallback
the LTE phy receive PSS callback
void StartRxDlCtrl(Ptr< LteSpectrumSignalParametersDlCtrlFrame > lteDlCtrlRxParams)
Start receive DL control function.
void StartRxUlSrs(Ptr< LteSpectrumSignalParametersUlSrsFrame > lteUlSrsRxParams)
Start receive UL SRS function.
void AddDataPowerChunkProcessor(Ptr< LteChunkProcessor > p)
EventId m_endRxDataEvent
end receive data event
void SetLtePhyRxPssCallback(LtePhyRxPssCallback c)
set the callback for the reception of the PSS as part of the interconnections between the LteSpectrum...
void SetAntenna(Ptr< AntennaModel > a)
set the AntennaModel to be used
void StartRxData(Ptr< LteSpectrumSignalParametersDataFrame > params)
Start receive data function.
TracedCallback< PhyReceptionStatParameters > m_dlPhyReception
Trace information regarding PHY stats from DL Rx perspective PhyReceptionStatParameters (see lte-comm...
Ptr< NetDevice > m_device
the device
Ptr< SpectrumChannel > GetChannel()
TracedCallback< Ptr< const PacketBurst > > m_phyTxStartTrace
the phy transmit start trace callback
void DoDispose() override
Destructor implementation.
void EndTxData()
End transmit data function.
void SetTransmissionMode(uint8_t txMode)
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...
SpectrumValue m_sinrPerceived
the preceived SINR
Ptr< SpectrumValue > m_txPsd
the transmit PSD
void AddInterferenceDataChunkProcessor(Ptr< LteChunkProcessor > p)
LteChunkProcessor devoted to evaluate interference + noise power in data symbols of the subframe.
void SetDevice(Ptr< NetDevice > d) override
Set the associated NetDevice instance.
void ChangeState(State newState)
Change state function.
void SetTxModeGain(uint8_t txMode, double gain)
Set transmit mode gain function.
std::vector< double > m_txModeGain
duplicate value of LteUePhy
int64_t AssignStreams(int64_t stream)
Assign a fixed random variable stream number to the random variables used by this model.
Ptr< NetDevice > GetDevice() const override
Get the associated NetDevice instance.
Time m_firstRxStart
the first receive start
Ptr< LteHarqPhy > m_harqPhyModule
the HARQ phy module
void SetLtePhyRxDataEndOkCallback(LtePhyRxDataEndOkCallback c)
set the callback for the successful end of a RX, as part of the interconnections between the PHY and ...
void EndRxUlSrs()
End receive UL SRS function.
void SetLtePhyUlHarqFeedbackCallback(LtePhyUlHarqFeedbackCallback c)
set the callback for the UL HARQ feedback as part of the interconnections between the LteSpectrumPhy ...
void SetChannel(Ptr< SpectrumChannel > c) override
Set the channel attached to this device.
void SetComponentCarrierId(uint8_t componentCarrierId)
TracedCallback< Ptr< const PacketBurst > > m_phyRxStartTrace
the phy receive start trace callback
expectedTbs_t m_expectedTbs
the expected TBS
void EndTxUlSrs()
End transmit UL SRS function.
void SetNoisePowerSpectralDensity(Ptr< const SpectrumValue > noisePsd)
set the noise power spectral density
void UpdateSinrPerceived(const SpectrumValue &sinr)
Ptr< SpectrumChannel > m_channel
the channel
void EndRxDlCtrl()
End receive DL control function.
void SetTxPowerSpectralDensity(Ptr< SpectrumValue > txPsd)
set the Power Spectral Density of outgoing signals in W/Hz.
EventId m_endTxEvent
end transmit event
LtePhyRxDataEndOkCallback m_ltePhyRxDataEndOkCallback
the LTE phy receive data end ok callback
void SetLtePhyRxCtrlEndErrorCallback(LtePhyRxCtrlEndErrorCallback c)
set the callback for the erroneous end of a RX ctrl frame, as part of the interconnections between th...
State m_state
the state
uint16_t m_cellId
the cell ID
Ptr< AntennaModel > m_antenna
the antenna model
void SetLtePhyDlHarqFeedbackCallback(LtePhyDlHarqFeedbackCallback c)
set the callback for the DL HARQ feedback as part of the interconnections between the LteSpectrumPhy ...
Time m_firstRxDuration
the first receive duration
Ptr< PacketBurst > m_txPacketBurst
the transmit packet burst
uint8_t m_componentCarrierId
the component carrier ID
void StartRx(Ptr< SpectrumSignalParameters > params) override
Notify the SpectrumPhy instance of an incoming signal.
Ptr< Object > GetAntenna() const override
Get the AntennaModel used by this SpectrumPhy instance for transmission and/or reception.
LtePhyRxDataEndErrorCallback m_ltePhyRxDataEndErrorCallback
the LTE phy receive data end error callback
static TypeId GetTypeId()
Get the type ID.
uint8_t m_layersNum
layers num
Ptr< MobilityModel > m_mobility
the modility model
TracedCallback< PhyReceptionStatParameters > m_ulPhyReception
Trace information regarding PHY stats from UL Rx perspective PhyReceptionStatParameters (see lte-comm...
void SetMobility(Ptr< MobilityModel > m) override
Set the mobility model associated with this device.
LtePhyDlHarqFeedbackCallback m_ltePhyDlHarqFeedbackCallback
the LTE phy DL HARQ feedback callback
void EndTxDlCtrl()
End transmit DL control function.
std::list< Ptr< LteControlMessage > > m_rxControlMessageList
the receive control message list
void AddRsPowerChunkProcessor(Ptr< LteChunkProcessor > p)
Ptr< LteInterference > m_interferenceCtrl
the control interference
TracedCallback< Ptr< const Packet > > m_phyRxEndErrorTrace
the phy receive end error trace callback
void EndRxData()
End receive data function.
std::list< Ptr< LteControlMessage > > m_txControlMessageList
the transmit control message list
bool m_ctrlErrorModelEnabled
when true (default) the phy error model is enabled for DL ctrl frame
bool StartTxDataFrame(Ptr< PacketBurst > pb, std::list< Ptr< LteControlMessage >> ctrlMsgList, Time duration)
Start a transmission of data frame in DL and UL.
std::list< Ptr< PacketBurst > > m_rxPacketBurstList
the receive burst list
void AddInterferenceCtrlChunkProcessor(Ptr< LteChunkProcessor > p)
LteChunkProcessor devoted to evaluate interference + noise power in control symbols of the subframe.
TracedCallback< Ptr< const Packet > > m_phyRxEndOkTrace
the phy receive end ok trace callback
bool StartTxUlSrsFrame()
Start a transmission of control frame in UL.
bool StartTxDlCtrlFrame(std::list< Ptr< LteControlMessage >> ctrlMsgList, bool pss)
Start a transmission of control frame in DL.
LtePhyRxCtrlEndErrorCallback m_ltePhyRxCtrlEndErrorCallback
the LTE phy receive control end error callback
void SetLtePhyRxCtrlEndOkCallback(LtePhyRxCtrlEndOkCallback c)
set the callback for the successful end of a RX ctrl frame, as part of the interconnections between t...
void Reset()
reset the internal state
EventId m_endRxUlSrsEvent
end receive UL SRS event
void SetCellId(uint16_t cellId)
LtePhyRxCtrlEndOkCallback m_ltePhyRxCtrlEndOkCallback
the LTE phy receive control end ok callback
Ptr< UniformRandomVariable > m_random
Provides uniform random variables.
The LteSpectrumPhy models the physical layer of LTE.
Definition: lte-ue-phy.h:52
Smart pointer class similar to boost::intrusive_ptr.
Definition: ptr.h:77
Abstract base class for Spectrum-aware PHY layers.
Definition: spectrum-phy.h:46
Set of values corresponding to a given SpectrumModel.
Simulation virtual time values and global simulation resolution.
Definition: nstime.h:105
Forward calls to a chain of Callback.
a unique identifier for an interface.
Definition: type-id.h:59
Every class exported by the ns3 library is enclosed in the ns3 namespace.
Callback< void, Ptr< Packet > > LtePhyRxDataEndOkCallback
This method is used by the LteSpectrumPhy to notify the PHY that a previously started RX attempt has ...
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.
std::map< TbId_t, tbInfo_t > expectedTbs_t
expectedTbs_t typedef
Callback< void > LtePhyRxDataEndErrorCallback
This method is used by the LteSpectrumPhy to notify the PHY that a previously started RX attempt has ...
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...
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...
Callback< void > LtePhyRxCtrlEndErrorCallback
This method is used by the LteSpectrumPhy to notify the PHY that a previously started RX of a control...
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...
params
Fit Fluctuating Two Ray model to the 3GPP TR 38.901 using the Anderson-Darling goodness-of-fit ##.
#define list
Signal parameters for Lte Data Frame (PDSCH), and eventually after some control messages through othe...
Signal parameters for Lte DL Ctrl Frame (RS, PCFICH and PDCCH)
TbId_t structure.
friend bool operator<(const TbId_t &a, const TbId_t &b)
Less than operator.
uint8_t m_layer
layer
uint16_t m_rnti
RNTI.
friend bool operator==(const TbId_t &a, const TbId_t &b)
Equality operator.
tbInfo_t structure
uint8_t harqProcessId
HARQ process id.
uint8_t mcs
MCS.
std::vector< int > rbBitmap
Resource block bitmap.
uint8_t rv
Redundancy version.
bool corrupt
whether is corrupt
bool harqFeedbackSent
is HARQ feedback sent
double mi
Mutual information.
bool downlink
whether is downlink
uint16_t size
Transport block size.
uint8_t ndi
New data indicator.