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
45namespace ns3 {
46
48struct 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
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
83typedef std::map<TbId_t, tbInfo_t> expectedTbs_t;
84
85
86class LteNetDevice;
87class AntennaModel;
92
105
106
115
122
128
129
135
141
142
143
154{
155
156public:
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;
183 Ptr<Object> GetAntenna () const;
205
212
219
224 void Reset ();
225
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
274
282
290
298
306
314
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);
414 void RemoveExpectedTb (uint16_t rnti);
415
421 void UpdateSinrPerceived (const SpectrumValue& sinr);
422
428 void SetTransmissionMode (uint8_t txMode);
429
430
436
438 friend class LteUePhy;
439
448 int64_t AssignStreams (int64_t stream);
449
450private:
456 void ChangeState (State newState);
458 void EndTxData ();
460 void EndTxDlCtrl ();
462 void EndTxUlSrs ();
464 void EndRxData ();
466 void EndRxDlCtrl ();
468 void EndRxUlSrs ();
469
476 void SetTxModeGain (uint8_t txMode, double gain);
477
478
482
484
488 std::list<Ptr<PacketBurst> > m_rxPacketBurstList;
489
490 std::list<Ptr<LteControlMessage> > m_txControlMessageList;
491 std::list<Ptr<LteControlMessage> > m_rxControlMessageList;
492
493
497
503
506
510
513
514 uint16_t m_cellId;
515
519
524
526 uint8_t m_layersNum;
527 std::vector <double> m_txModeGain;
528
532
533
539
540
546
551
552
553};
554
555
556
557
558
559
560}
561
562#endif /* LTE_SPECTRUM_PHY_H */
interface for antenna radiation pattern models
Definition: antenna-model.h:56
An identifier for simulation events.
Definition: event-id.h:54
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.
void SetChannel(Ptr< SpectrumChannel > c)
Set the channel attached to this device.
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)
virtual void DoDispose()
Destructor implementation.
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)
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
bool StartTxDataFrame(Ptr< PacketBurst > pb, std::list< Ptr< LteControlMessage > > ctrlMsgList, Time duration)
Start a transmission of data frame in DL and UL.
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 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 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.
Time m_firstRxStart
the first receive start
Ptr< NetDevice > GetDevice() const
Get the associated NetDevice instance.
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 ...
Ptr< MobilityModel > GetMobility() const
Get the associated MobilityModel instance.
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
Ptr< Object > GetAntenna() const
Get the AntennaModel used by this SpectrumPhy instance for transmission and/or reception.
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< const SpectrumModel > GetRxSpectrumModel() const
Ptr< AntennaModel > m_antenna
the antenna model
void SetMobility(Ptr< MobilityModel > m)
Set the mobility model associated with this device.
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
LtePhyRxDataEndErrorCallback m_ltePhyRxDataEndErrorCallback
the LTE phy receive data end error callback
bool StartTxDlCtrlFrame(std::list< Ptr< LteControlMessage > > ctrlMsgList, bool pss)
Start a transmission of control frame in DL.
uint8_t m_layersNum
layers num
void SetDevice(Ptr< NetDevice > d)
Set the associated NetDevice instance.
Ptr< MobilityModel > m_mobility
the modility model
TracedCallback< PhyReceptionStatParameters > m_ulPhyReception
Trace information regarding PHY stats from UL Rx perspective PhyReceptionStatParameters (see lte-comm...
LtePhyDlHarqFeedbackCallback m_ltePhyDlHarqFeedbackCallback
the LTE phy DL HARQ feedback callback
void EndTxDlCtrl()
End transmit DL control function.
static TypeId GetTypeId(void)
Get the type ID.
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
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.
LtePhyRxCtrlEndErrorCallback m_ltePhyRxCtrlEndErrorCallback
the LTE phy receive control end error callback
void StartRx(Ptr< SpectrumSignalParameters > params)
Notify the SpectrumPhy instance of an incoming signal.
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:55
Smart pointer class similar to boost::intrusive_ptr.
Definition: ptr.h:78
Abstract base class for Spectrum-aware PHY layers.
Definition: spectrum-phy.h:47
Set of values corresponding to a given SpectrumModel.
Simulation virtual time values and global simulation resolution.
Definition: nstime.h:104
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 > LtePhyRxCtrlEndErrorCallback
This method is used by the LteSpectrumPhy to notify the PHY that a previously started RX of a control...
std::map< TbId_t, tbInfo_t > expectedTbs_t
expectedTbs_t typedef
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 > LtePhyRxDataEndErrorCallback
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.
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...
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, DlInfoListElement_s > LtePhyDlHarqFeedbackCallback
This method is used by the LteSpectrumPhy to notify the PHY about the status of a certain DL HARQ pro...
#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.