The source code for the new module lives in the directory src/mmwave
.
A brief description of the module' classes follows.
The class MmWaveSpectrumPhy
inherits from SpectrumPhy
and handles the transmission
and reception of signals through the SpectrumChannel
. Each mmWave device has one
or multiple MmWaveSpectrumPhy
instances, which are controlled by the PHY layer and
act as interface(s) towards the SpectrumChannel
(s).
When the current slot is assigned for data or control transmission to a certain
device, its PHY layer triggers the associated MmWaveSpectrumPhy
instance by
calling the method StartTxDataFrames ()
or StartTxDlControlFrames ()
, respectively.
The MmWaveSpectrumPhy
instance creates the structure
MmwaveSpectrumSignalParametersDataFrame
or MmWaveSpectrumSignalParametersDlCtrlFrame
containing the signal parameters, such as the signal duration, the Power Spectral
Density (PSD) and the information carried, and forwards it to the SpectrumChannel
by calling the method StartTx ()
. This behavior is depicted in this figure:
When a signal is received, the SpectrumChannel
triggers the MmWaveSpectrumPhy
instance by scheduling a call to the method StartRx ()
.
First, it checks if the signal carries data or control information and then
calls the method StartRxData ()
or StartRxCtrl ()
, respectively. If the signal
is neither a mmWave data nor mmWave control signal, or it belongs to another
cell, it is treated as interferer.
The following figure shows the call graph in case of data
reception.
The method StartRxData ()
stores the received packets and schedule a call to
EndRxData ()
after the signal duration.
The method EndRxData ()
determined if the received transport block is corrupted
or not by applying the error model implemented in the class MmWaveMiErrorModel
.
If the transport block is not corrupted, it fires the callback m_phyRxDataEndOkCallback
to trigger the PHY layer reception operations.
Also, it takes care of updating the corresponding HARQ process status and of
sending the HARQ feedback by relying on the associated MmWaveHarqPhy
instance.
The method StartRxCtrl ()
stores the received packets and schedules a call to
EndRxCtrl ()
after the signal duration.
The error model is not applied to control messages, then the method EndRxCtrl ()
simply fires the callback m_phyRxCtrlEndOkCallback
to trigger the PHY layer.
MmWaveBeamformingModel
is a base class handling the beamforming operations.
The classes deriving from MmWaveBeamformingModel
implement specific beamforming
schemes.
It holds a pointer to an instance of the class PhasedArrayModel
implementing
the antenna model.
The main method is SetBeamformingVectorForDevice ()
, which computes the
beamforming vector to communicate with a specific device and configures
the antenna.
The class MmWaveDftBeamforming
implements a DFT-based beamforming algorithm which points the beam in the LOS direction towards the other device. It holds a pointer to the mobility model associated to the device in
order to retrieve its position.
When the method SetBeamformingVectorForDevice ()
is called, it computes the
beamforming vector using a DFT-based algorithm and properly configures the
antenna weights by calling the method SetBeamformingVector ()
on the
associated antenna object.
This class implements an ideal beamforming algorithm based on the SVD decomposition of the channel matrix. The beamforming vectors are computed using the power method described in [ZP2017], Section 5. This is an ideal method, in the sense that it assumes the perfect knowledge of the channel matrix.
The class MmWaveErrorModel
is a base class handling the error model and the PHY layer
abstraction. In particular, all the derived classes implement the computation of the TB BLER,
starting from the SNR calculated by the MmWaveSpectrumPhy
class. This implementation has been
adapted from the release 1.0 of the 5G-LENA simulator [5GLENA] presented in [LW2020].
In order to configure the specific ErrorModel
of choice, the following attributes must be
set to the same value:
ns3::MmWaveSpectrumPhy::ErrorModelType
and ns3::MmWaveAmc::ErrorModelType
.
Accordingly, a configuration example is:
Config::SetDefault ("ns3::MmWaveSpectrumPhy::ErrorModelType", TypeIdValue (MmWaveEesmIrT1::GetTypeId ()));
Config::SetDefault ("ns3::MmWaveAmc::ErrorModelType", TypeIdValue (MmWaveEesmIrT1::GetTypeId ()));
The class MmWaveEesmErrorModel
implements an Effective Exponential SNR Mapping
(EESM)-based PHY layer abstraction, based on the 3GPP NR specifications.
In particular, LDPC coding and MCS up to 256-QAM are considered.
Different MCS Tables (T1 and T2) and HARQ methods (Incremental Redundancy (IR)
and Chase Combining (CC)) are provided; the corresponding SNR to BLER mappings
are implemented in the specific MmWaveEesmXXTY
(XX = IR, CC; Y = 1, 2) derived
class.
The class MmWaveLteMiErrorModel
implements a Mutual Information (MI)-based PHY layer
abstraction, based on the 3GPP LTE specifications and IR HARQ.
[ZP2020] T. Zugno, M. Polese, N. Patriciello, B. Bojović, S. Lagen, M. Zorzi, “Implementation of A Spatial Channel Model for ns-3”, Submitted to the Workshop on ns-3 (WNS3 ’20).
[MZ2018] Marco Mezzavilla, Menglei Zhang, Michele Polese, Russell Ford, Sourjya Dutta, Sundeep Rangan, Michele Zorzi, “End-to-End Simulation of 5G mmWave Networks”, IEEE Communications Surveys and Tutorials. 2018.
[ZP2018] Tommaso Zugno, Michele Polese, and Michele Zorzi. 2018. “Integration of carrier aggregation and dual connectivity for the ns-3 mmWave module.” In Proceedings of the 10th Workshop on ns-3 (WNS3 '18). ACM, New York, NY, USA, 45-52.
[ZP2017] Menglei Zhang, Michele Polese, Marco Mezzavilla, Sundeep Rangan, and Michele Zorzi. 2017. “ns-3 Implementation of the 3GPP MIMO Channel Model for Frequency Spectrum above 6 GHz.” In Proceedings of the Workshop on ns-3 (WNS3 '17). ACM, New York, NY, USA, 71-78.
[RP2018] M. Rebato, M. Polese, and M. Zorzi, “Multi-Sector and Multi-Panel Performance in 5G mmWave Cellular Networks,” in IEEE Global Communications Conference: Communication QoS, Reliability and Modeling (Globecom2018 CQRM), Abu Dhabi, UAE, Dec 2018
[PM2016] M. Polese, M. Mezzavilla, and M. Zorzi, “Performance Comparison of Dual Connectivity and Hard Handover for LTE-5G Tight Integration,” in SIMUTools 2016
[Lw2020] S. Lagen, K. Wanuga, H. Elkotby, S. Goyal, N. Patriciello and L. Giupponi, "New radio physical layer abstraction for system-level simulations of 5G networks." in IEEE International Conference on Communications (ICC), Jun 2020
[5GLENA] Please refer to https://5g-lena.cttc.es/ for further details and https://gitlab.com/cttc-lena/nr/-/tree/v1.0 for the reference code.