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 "ns3/random-variable-stream.h"
26#include <ns3/data-rate.h>
27#include <ns3/event-id.h>
28#include <ns3/ff-mac-common.h>
29#include <ns3/generic-phy.h>
30#include <ns3/lte-common.h>
31#include <ns3/lte-harq-phy.h>
32#include <ns3/lte-interference.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/spectrum-channel.h>
39#include <ns3/spectrum-interference.h>
40#include <ns3/spectrum-phy.h>
41#include <ns3/spectrum-value.h>
42
43#include <map>
44
45namespace ns3
46{
47
49struct TbId_t
50{
51 uint16_t m_rnti;
52 uint8_t m_layer;
53
54 public:
55 TbId_t();
62 TbId_t(const uint16_t a, const uint8_t b);
63
64 friend bool operator==(const TbId_t& a, const TbId_t& b);
65 friend bool operator<(const TbId_t& a, const TbId_t& b);
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
85class LteNetDevice;
86class AntennaModel;
91
104
113
120
126
132
138
149{
150 public:
152 ~LteSpectrumPhy() override;
153
157 enum State
158 {
166 };
167
172 static TypeId GetTypeId();
173 // inherited from Object
174 void DoDispose() override;
175
176 // inherited from SpectrumPhy
177 void SetChannel(Ptr<SpectrumChannel> c) override;
178 void SetMobility(Ptr<MobilityModel> m) override;
179 void SetDevice(Ptr<NetDevice> d) override;
180 Ptr<MobilityModel> GetMobility() const override;
181 Ptr<NetDevice> GetDevice() const override;
183 Ptr<Object> GetAntenna() const override;
184 void StartRx(Ptr<SpectrumSignalParameters> params) override;
205
212
219
224 void Reset();
225
232
246 Time duration);
247
258 bool StartTxDlCtrlFrame(std::list<Ptr<LteControlMessage>> ctrlMsgList, bool pss);
259
266 bool StartTxUlSrsFrame();
267
275
283
291
299
307
315
323
328 void SetState(State newState);
329
335 void SetCellId(uint16_t cellId);
336
341 void SetComponentCarrierId(uint8_t componentCarrierId);
342
350
358
365
373
381
388
402 void AddExpectedTb(uint16_t rnti,
403 uint8_t ndi,
404 uint16_t size,
405 uint8_t mcs,
406 std::vector<int> map,
407 uint8_t layer,
408 uint8_t harqId,
409 uint8_t rv,
410 bool downlink);
422 void RemoveExpectedTb(uint16_t rnti);
423
429 void UpdateSinrPerceived(const SpectrumValue& sinr);
430
436 void SetTransmissionMode(uint8_t txMode);
437
443
445 friend class LteUePhy;
446
455 int64_t AssignStreams(int64_t stream);
456
457 private:
463 void ChangeState(State newState);
465 void EndTxData();
467 void EndTxDlCtrl();
469 void EndTxUlSrs();
471 void EndRxData();
473 void EndRxDlCtrl();
475 void EndRxUlSrs();
476
483 void SetTxModeGain(uint8_t txMode, double gain);
484
488
490
494 std::list<Ptr<PacketBurst>> m_rxPacketBurstList;
495
496 std::list<Ptr<LteControlMessage>> m_txControlMessageList;
497 std::list<Ptr<LteControlMessage>> m_rxControlMessageList;
498
502
511
516
522
525
526 uint16_t m_cellId;
527
531
537
539 uint8_t m_layersNum;
540 std::vector<double> m_txModeGain;
541
547
553
559
564};
565
566} // namespace ns3
567
568#endif /* LTE_SPECTRUM_PHY_H */
interface for antenna radiation pattern models
Definition: antenna-model.h:54
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
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 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
bool StartTxDlCtrlFrame(std::list< Ptr< LteControlMessage > > ctrlMsgList, bool pss)
Start a transmission of control frame in DL.
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
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 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:51
Smart pointer class similar to boost::intrusive_ptr.
Definition: ptr.h:78
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:60
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...
#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.