A Discrete-Event Network Simulator
API
Loading...
Searching...
No Matches
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
46namespace ns3
47{
48
50struct 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
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
84typedef std::map<TbId_t, tbInfo_t> expectedTbs_t;
85
86class LteNetDevice;
87class AntennaModel;
92
105
114
121
127
133
139
150{
151 public:
153 ~LteSpectrumPhy() override;
154
158 enum State
159 {
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;
185 void StartRx(Ptr<SpectrumSignalParameters> params) 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:54
Callback template class.
Definition: callback.h:438
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:52
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: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...
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.