A Discrete-Event Network Simulator
API
Loading...
Searching...
No Matches
dsss-phy.cc
Go to the documentation of this file.
1/*
2 * Copyright (c) 2020 Orange Labs
3 *
4 * SPDX-License-Identifier: GPL-2.0-only
5 *
6 * Authors: Rediet <getachew.redieteab@orange.com>
7 * Sébastien Deronne <sebastien.deronne@gmail.com> (for logic ported from wifi-phy)
8 * Mathieu Lacage <mathieu.lacage@sophia.inria.fr> (for logic ported from wifi-phy)
9 */
10
11#include "dsss-phy.h"
12
13#include "dsss-ppdu.h"
14
15#include "ns3/interference-helper.h"
16#include "ns3/log.h"
17#include "ns3/simulator.h"
18#include "ns3/wifi-phy.h" //only used for static mode constructor
19#include "ns3/wifi-psdu.h"
20#include "ns3/wifi-utils.h"
21
22#include <array>
23
24#undef NS_LOG_APPEND_CONTEXT
25#define NS_LOG_APPEND_CONTEXT WIFI_PHY_NS_LOG_APPEND_CONTEXT(m_wifiPhy)
26
27namespace ns3
28{
29
31
32/*******************************************************
33 * HR/DSSS PHY (IEEE 802.11-2016, clause 16)
34 *******************************************************/
35
36// clang-format off
37
42 { WIFI_PREAMBLE_SHORT, { WIFI_PPDU_FIELD_PREAMBLE, // Short PHY preamble
43 WIFI_PPDU_FIELD_NON_HT_HEADER, // Short PHY header
45};
46
48 // Unique name Code rate Constellation size
49 { "DsssRate1Mbps", { WIFI_CODE_RATE_UNDEFINED, 2 } },
50 { "DsssRate2Mbps", { WIFI_CODE_RATE_UNDEFINED, 4 } },
51 { "DsssRate5_5Mbps", { WIFI_CODE_RATE_UNDEFINED, 16 } },
52 { "DsssRate11Mbps", { WIFI_CODE_RATE_UNDEFINED, 256 } },
53};
54
55// clang-format on
56
57/// DSSS rates in bits per second
58static const std::array<uint64_t, 4> s_dsssRatesBpsList = {1000000, 2000000, 5500000, 11000000};
59
60/**
61 * Get the array of possible DSSS rates.
62 *
63 * @return the DSSS rates in bits per second
64 */
65const std::array<uint64_t, 4>&
70
72{
73 NS_LOG_FUNCTION(this);
74 for (const auto& rate : GetDsssRatesBpsList())
75 {
76 WifiMode mode = GetDsssRate(rate);
77 NS_LOG_LOGIC("Add " << mode << " to list");
78 m_modeList.emplace_back(mode);
79 }
80}
81
86
88DsssPhy::GetSigMode(WifiPpduField field, const WifiTxVector& txVector) const
89{
90 switch (field)
91 {
92 case WIFI_PPDU_FIELD_PREAMBLE: // consider header mode for preamble (useful for
93 // InterferenceHelper)
95 return GetHeaderMode(txVector);
96 default:
97 return PhyEntity::GetSigMode(field, txVector);
98 }
99}
100
103{
104 if (txVector.GetPreambleType() == WIFI_PREAMBLE_LONG ||
105 txVector.GetMode() == GetDsssRate1Mbps())
106 {
107 // Section 16.2.3 "PPDU field definitions" and Section 16.2.2.2 "Long PPDU format"; IEEE Std
108 // 802.11-2016
109 return GetDsssRate1Mbps();
110 }
111 else
112 {
113 // Section 16.2.2.3 "Short PPDU format"; IEEE Std 802.11-2016
114 return GetDsssRate2Mbps();
115 }
116}
117
120{
121 return m_dsssPpduFormats;
122}
123
124Time
126{
127 if (field == WIFI_PPDU_FIELD_PREAMBLE)
128 {
129 return GetPreambleDuration(txVector); // SYNC + SFD or shortSYNC + shortSFD
130 }
131 else if (field == WIFI_PPDU_FIELD_NON_HT_HEADER)
132 {
133 return GetHeaderDuration(txVector); // PHY header or short PHY header
134 }
135 else
136 {
137 return PhyEntity::GetDuration(field, txVector);
138 }
139}
140
141Time
143{
144 if (txVector.GetPreambleType() == WIFI_PREAMBLE_SHORT &&
145 (txVector.GetMode().GetDataRate(MHz_u{22}) > 1000000))
146 {
147 // Section 16.2.2.3 "Short PPDU format" Figure 16-2 "Short PPDU format"; IEEE Std
148 // 802.11-2016
149 return MicroSeconds(72);
150 }
151 else
152 {
153 // Section 16.2.2.2 "Long PPDU format" Figure 16-1 "Long PPDU format"; IEEE Std 802.11-2016
154 return MicroSeconds(144);
155 }
156}
157
158Time
160{
161 if (txVector.GetPreambleType() == WIFI_PREAMBLE_SHORT &&
162 (txVector.GetMode().GetDataRate(MHz_u{22}) > 1000000))
163 {
164 // Section 16.2.2.3 "Short PPDU format" and Figure 16-2 "Short PPDU format"; IEEE Std
165 // 802.11-2016
166 return MicroSeconds(24);
167 }
168 else
169 {
170 // Section 16.2.2.2 "Long PPDU format" and Figure 16-1 "Short PPDU format"; IEEE Std
171 // 802.11-2016
172 return MicroSeconds(48);
173 }
174}
175
176Time
178 const WifiTxVector& txVector,
179 WifiPhyBand /* band */,
180 MpduType /* mpdutype */,
181 bool /* incFlag */,
182 uint32_t& /* totalAmpduSize */,
183 double& /* totalAmpduNumSymbols */,
184 uint16_t /* staId */) const
185{
186 return MicroSeconds(
187 lrint(ceil((size * 8.0) / (txVector.GetMode().GetDataRate(MHz_u{22}) / 1.0e6))));
188}
189
191DsssPhy::BuildPpdu(const WifiConstPsduMap& psdus, const WifiTxVector& txVector, Time ppduDuration)
192{
193 NS_LOG_FUNCTION(this << psdus << txVector << ppduDuration);
194 return Create<DsssPpdu>(psdus.begin()->second,
195 txVector,
197 ppduDuration,
198 ObtainNextUid(txVector));
199}
200
203{
204 NS_LOG_FUNCTION(this << field << *event);
206 {
207 return EndReceiveHeader(event); // PHY header or short PHY header
208 }
209 return PhyEntity::DoEndReceiveField(field, event);
210}
211
214{
215 NS_LOG_FUNCTION(this << *event);
217 NS_LOG_DEBUG("Long/Short PHY header: SNR(dB)=" << RatioToDb(snrPer.snr)
218 << ", PER=" << snrPer.per);
219 PhyFieldRxStatus status(GetRandomValue() > snrPer.per);
220 if (status.isSuccess)
221 {
222 NS_LOG_DEBUG("Received long/short PHY header");
223 if (!IsConfigSupported(event->GetPpdu()))
224 {
226 }
227 }
228 else
229 {
230 NS_LOG_DEBUG("Abort reception because long/short PHY header reception failed");
231 status.reason = L_SIG_FAILURE;
232 status.actionIfFailure = ABORT;
233 }
234 return status;
235}
236
237MHz_u
239{
240 if (m_wifiPhy->GetChannelWidth() > MHz_u{20})
241 {
242 /*
243 * This is a workaround necessary with HE-capable PHYs,
244 * since their DSSS entity will reuse its RxSpectrumModel.
245 * Without this hack, SpectrumWifiPhy::GetBand will crash.
246 * FIXME: see issue #402 for a better solution.
247 */
248 return MHz_u{20};
249 }
250 return PhyEntity::GetRxChannelWidth(txVector);
251}
252
253MHz_u
255{
256 return ppdu ? GetRxChannelWidth(ppdu->GetTxVector()) : MHz_u{22};
257}
258
261{
262 const auto& centerFrequencies = ppdu->GetTxCenterFreqs();
263 NS_ASSERT(centerFrequencies.size() == 1);
264 const auto& txVector = ppdu->GetTxVector();
265 const auto channelWidth = txVector.GetChannelWidth();
266 NS_LOG_FUNCTION(this << centerFrequencies.front() << channelWidth << txPower);
267 NS_ABORT_MSG_IF(channelWidth != MHz_u{22}, "Invalid channel width for DSSS");
268 auto v =
270 txPower,
271 GetGuardBandwidth(channelWidth));
272 return v;
273}
274
275void
277{
278 for (const auto& rate : GetDsssRatesBpsList())
279 {
280 GetDsssRate(rate);
281 }
282}
283
286{
287 switch (rate)
288 {
289 case 1000000:
290 return GetDsssRate1Mbps();
291 case 2000000:
292 return GetDsssRate2Mbps();
293 case 5500000:
294 return GetDsssRate5_5Mbps();
295 case 11000000:
296 return GetDsssRate11Mbps();
297 default:
298 NS_ABORT_MSG("Inexistent rate (" << rate << " bps) requested for HR/DSSS");
299 return WifiMode();
300 }
301}
302
303#define GET_DSSS_MODE(x, m) \
304 WifiMode DsssPhy::Get##x() \
305 { \
306 static WifiMode mode = CreateDsssMode(#x, WIFI_MOD_CLASS_##m); \
307 return mode; \
308 }
309
310// Clause 15 rates (DSSS)
311GET_DSSS_MODE(DsssRate1Mbps, DSSS)
312GET_DSSS_MODE(DsssRate2Mbps, DSSS)
313// Clause 16 rates (HR/DSSS)
314GET_DSSS_MODE(DsssRate5_5Mbps, HR_DSSS)
315GET_DSSS_MODE(DsssRate11Mbps, HR_DSSS)
316#undef GET_DSSS_MODE
317
318WifiMode
319DsssPhy::CreateDsssMode(std::string uniqueName, WifiModulationClass modClass)
320{
321 // Check whether uniqueName is in lookup table
322 const auto it = m_dsssModulationLookupTable.find(uniqueName);
324 "DSSS or HR/DSSS mode cannot be created because it is not in the lookup table!");
326 modClass == WIFI_MOD_CLASS_DSSS || modClass == WIFI_MOD_CLASS_HR_DSSS,
327 "DSSS or HR/DSSS mode must be either WIFI_MOD_CLASS_DSSS or WIFI_MOD_CLASS_HR_DSSS!");
328
330 uniqueName,
331 modClass,
332 true,
333 MakeBoundCallback(&GetCodeRate, uniqueName),
335 MakeCallback(&GetDataRateFromTxVector), // PhyRate is equivalent to DataRate
338}
339
341DsssPhy::GetCodeRate(const std::string& name)
342{
343 return m_dsssModulationLookupTable.at(name).first;
344}
345
346uint16_t
347DsssPhy::GetConstellationSize(const std::string& name)
348{
349 return m_dsssModulationLookupTable.at(name).second;
350}
351
352uint64_t
353DsssPhy::GetDataRateFromTxVector(const WifiTxVector& txVector, uint16_t /* staId */)
354{
355 WifiMode mode = txVector.GetMode();
357}
358
359uint64_t
360DsssPhy::GetDataRate(const std::string& name, WifiModulationClass modClass)
361{
362 uint16_t constellationSize = GetConstellationSize(name);
363 uint16_t divisor = 0;
364 if (modClass == WIFI_MOD_CLASS_DSSS)
365 {
366 divisor = 11;
367 }
368 else if (modClass == WIFI_MOD_CLASS_HR_DSSS)
369 {
370 divisor = 8;
371 }
372 else
373 {
374 NS_FATAL_ERROR("Incorrect modulation class, must specify either WIFI_MOD_CLASS_DSSS or "
375 "WIFI_MOD_CLASS_HR_DSSS!");
376 }
377 auto numberOfBitsPerSubcarrier = static_cast<uint16_t>(log2(constellationSize));
378 uint64_t dataRate = ((11000000 / divisor) * numberOfBitsPerSubcarrier);
379 return dataRate;
380}
381
382bool
384{
385 return true;
386}
387
390{
391 return 4095;
392}
393
394} // namespace ns3
395
396namespace
397{
398
399/**
400 * Constructor class for DSSS modes
401 */
403{
404 public:
406 {
412 phyEntity); // use same entity when plain DSSS modes are used
413 }
414} g_constructor_dsss; ///< the constructor for DSSS modes
415
416} // namespace
Constructor class for DSSS modes.
Definition dsss-phy.cc:403
PhyFieldRxStatus DoEndReceiveField(WifiPpduField field, Ptr< Event > event) override
End receiving a given field, perform amendment-specific actions, and provide the status of the recept...
Definition dsss-phy.cc:202
static uint16_t GetConstellationSize(const std::string &name)
Return the constellation size from the DSSS or HR/DSSS mode's unique name using ModulationLookupTable...
Definition dsss-phy.cc:347
static const PpduFormats m_dsssPpduFormats
DSSS and HR/DSSS PPDU formats.
Definition dsss-phy.h:197
PhyFieldRxStatus EndReceiveHeader(Ptr< Event > event)
End receiving the header, perform DSSS-specific actions, and provide the status of the reception.
Definition dsss-phy.cc:213
static WifiMode CreateDsssMode(std::string uniqueName, WifiModulationClass modClass)
Create a DSSS or HR/DSSS mode from a unique name, the unique name must already be contained inside Mo...
Definition dsss-phy.cc:319
static WifiCodeRate GetCodeRate(const std::string &name)
Return the WifiCodeRate from the DSSS or HR/DSSS mode's unique name using ModulationLookupTable.
Definition dsss-phy.cc:341
static const ModulationLookupTable m_dsssModulationLookupTable
lookup table to retrieve code rate and constellation size corresponding to a unique name of modulatio...
Definition dsss-phy.h:200
static uint64_t GetDataRateFromTxVector(const WifiTxVector &txVector, uint16_t staId)
Return the data rate corresponding to the supplied TXVECTOR.
Definition dsss-phy.cc:353
~DsssPhy() override
Destructor for HR/DSSS PHY.
Definition dsss-phy.cc:82
static WifiMode GetDsssRate5_5Mbps()
Return a WifiMode for HR/DSSS at 5.5 Mbps.
WifiMode GetSigMode(WifiPpduField field, const WifiTxVector &txVector) const override
Get the WifiMode for the SIG field specified by the PPDU field.
Definition dsss-phy.cc:88
static uint64_t GetDataRate(const std::string &name, WifiModulationClass modClass)
Return the data rate from the DSSS or HR/DSSS mode's unique name and the supplied parameters.
Definition dsss-phy.cc:360
static bool IsAllowed(const WifiTxVector &txVector)
Check whether the combination in TXVECTOR is allowed.
Definition dsss-phy.cc:383
Time GetHeaderDuration(const WifiTxVector &txVector) const
Definition dsss-phy.cc:159
Time GetPayloadDuration(uint32_t size, const WifiTxVector &txVector, WifiPhyBand band, MpduType mpdutype, bool incFlag, uint32_t &totalAmpduSize, double &totalAmpduNumSymbols, uint16_t staId) const override
Definition dsss-phy.cc:177
DsssPhy()
Constructor for HR/DSSS PHY.
Definition dsss-phy.cc:71
static WifiMode GetDsssRate(uint64_t rate)
Return a WifiMode for HR/DSSS corresponding to the provided rate.
Definition dsss-phy.cc:285
const PpduFormats & GetPpduFormats() const override
Return the PPDU formats of the PHY.
Definition dsss-phy.cc:119
MHz_u GetMeasurementChannelWidth(const Ptr< const WifiPpdu > ppdu) const override
Return the channel width used to measure the RSSI.
Definition dsss-phy.cc:254
uint32_t GetMaxPsduSize() const override
Get the maximum PSDU size in bytes.
Definition dsss-phy.cc:389
Time GetPreambleDuration(const WifiTxVector &txVector) const
Definition dsss-phy.cc:142
static WifiMode GetDsssRate1Mbps()
Return a WifiMode for DSSS at 1 Mbps.
WifiMode GetHeaderMode(const WifiTxVector &txVector) const
Definition dsss-phy.cc:102
MHz_u GetRxChannelWidth(const WifiTxVector &txVector) const override
Return the channel width used in the reception spectrum model.
Definition dsss-phy.cc:238
static void InitializeModes()
Initialize all HR/DSSS modes.
Definition dsss-phy.cc:276
Ptr< WifiPpdu > BuildPpdu(const WifiConstPsduMap &psdus, const WifiTxVector &txVector, Time ppduDuration) override
Build amendment-specific PPDU.
Definition dsss-phy.cc:191
Ptr< SpectrumValue > GetTxPowerSpectralDensity(Watt_u txPower, Ptr< const WifiPpdu > ppdu) const override
Definition dsss-phy.cc:260
static WifiMode GetDsssRate11Mbps()
Return a WifiMode for HR/DSSS at 11 Mbps.
static WifiMode GetDsssRate2Mbps()
Return a WifiMode for DSSS at 2 Mbps.
Time GetDuration(WifiPpduField field, const WifiTxVector &txVector) const override
Get the duration of the PPDU field (or group of fields) used by this entity for the given transmissio...
Definition dsss-phy.cc:125
MHz_u GetGuardBandwidth(MHz_u currentChannelWidth) const
virtual Time GetDuration(WifiPpduField field, const WifiTxVector &txVector) const
Get the duration of the PPDU field (or group of fields) used by this entity for the given transmissio...
virtual uint64_t ObtainNextUid(const WifiTxVector &txVector)
Obtain the next UID for the PPDU to transmit.
Ptr< WifiPhy > m_wifiPhy
Pointer to the owning WifiPhy.
Definition phy-entity.h:939
std::map< std::string, CodeRateConstellationSizePair > ModulationLookupTable
A modulation lookup table using unique name of modulation as key.
Definition phy-entity.h:539
virtual MHz_u GetRxChannelWidth(const WifiTxVector &txVector) const
Return the channel width used in the reception spectrum model.
std::map< WifiPreamble, std::vector< WifiPpduField > > PpduFormats
A map of PPDU field elements per preamble type.
Definition phy-entity.h:529
virtual WifiMode GetSigMode(WifiPpduField field, const WifiTxVector &txVector) const
Get the WifiMode for the SIG field specified by the PPDU field.
std::list< WifiMode > m_modeList
the list of supported modes
Definition phy-entity.h:943
double GetRandomValue() const
Obtain a random value from the WifiPhy's generator.
SnrPer GetPhyHeaderSnrPer(WifiPpduField field, Ptr< Event > event) const
Obtain the SNR and PER of the PPDU field from the WifiPhy's InterferenceHelper class.
virtual bool IsConfigSupported(Ptr< const WifiPpdu > ppdu) const
Checks if the signaled configuration (excluding bandwidth) is supported by the PHY.
@ DROP
drop PPDU and set CCA_BUSY
Definition phy-entity.h:71
@ ABORT
abort reception of PPDU
Definition phy-entity.h:72
virtual PhyFieldRxStatus DoEndReceiveField(WifiPpduField field, Ptr< Event > event)
End receiving a given field, perform amendment-specific actions, and provide the status of the recept...
Smart pointer class similar to boost::intrusive_ptr.
Simulation virtual time values and global simulation resolution.
Definition nstime.h:94
static WifiMode CreateWifiMode(std::string uniqueName, WifiModulationClass modClass, bool isMandatory, CodeRateCallback codeRateCallback, ConstellationSizeCallback constellationSizeCallback, PhyRateCallback phyRateCallback, DataRateCallback dataRateCallback, AllowedCallback isAllowedCallback)
Definition wifi-mode.cc:259
represent a single transmission mode
Definition wifi-mode.h:40
const std::string & GetUniqueName() const
Definition wifi-mode.cc:137
WifiModulationClass GetModulationClass() const
Definition wifi-mode.cc:174
uint64_t GetDataRate(MHz_u channelWidth, Time guardInterval, uint8_t nss) const
Definition wifi-mode.cc:111
static void AddStaticPhyEntity(WifiModulationClass modulation, Ptr< PhyEntity > phyEntity)
Add the PHY entity to the map of implemented PHY entities for the given modulation class.
Definition wifi-phy.cc:801
MHz_u GetChannelWidth() const
Definition wifi-phy.cc:1099
const WifiPhyOperatingChannel & GetOperatingChannel() const
Get a const reference to the operating channel.
Definition wifi-phy.cc:1081
static Ptr< SpectrumValue > CreateDsssTxPowerSpectralDensity(MHz_u centerFrequency, Watt_u txPower, MHz_u guardBandwidth)
Create a transmit power spectral density corresponding to DSSS.
This class mimics the TXVECTOR which is to be passed to the PHY in order to define the parameters whi...
WifiMode GetMode(uint16_t staId=SU_STA_ID) const
If this TX vector is associated with an SU PPDU, return the selected payload transmission mode.
WifiPreamble GetPreambleType() const
#define GET_DSSS_MODE(x, m)
Definition dsss-phy.cc:303
Declaration of ns3::DsssPhy class.
Declaration of ns3::DsssPpdu class.
#define NS_ASSERT(condition)
At runtime, in debugging builds, if this condition is not true, the program prints the source file,...
Definition assert.h:55
#define NS_ASSERT_MSG(condition, message)
At runtime, in debugging builds, if this condition is not true, the program prints the message to out...
Definition assert.h:75
#define NS_FATAL_ERROR(msg)
Report a fatal error with a message and terminate.
#define NS_ABORT_MSG(msg)
Unconditional abnormal program termination with a message.
Definition abort.h:38
#define NS_ABORT_MSG_IF(cond, msg)
Abnormal program termination if a condition is true, with a message.
Definition abort.h:97
#define NS_LOG_COMPONENT_DEFINE(name)
Define a Log component with a specific name.
Definition log.h:191
#define NS_LOG_DEBUG(msg)
Use NS_LOG to output a message of level LOG_DEBUG.
Definition log.h:257
#define NS_LOG_LOGIC(msg)
Use NS_LOG to output a message of level LOG_LOGIC.
Definition log.h:271
#define NS_LOG_FUNCTION(parameters)
If log level LOG_FUNCTION is enabled, this macro will output all input parameters separated by ",...
auto MakeBoundCallback(R(*fnPtr)(Args...), BArgs &&... bargs)
Make Callbacks with varying number of bound arguments.
Definition callback.h:745
Ptr< T > Create(Ts &&... args)
Create class instances by constructors with varying numbers of arguments and return them by Ptr.
Definition ptr.h:436
Time MicroSeconds(uint64_t value)
Construct a Time in the indicated unit.
Definition nstime.h:1368
WifiPhyBand
Identifies the PHY band.
WifiModulationClass
This enumeration defines the modulation classes per (Table 10-6 "Modulation classes"; IEEE 802....
WifiPpduField
The type of PPDU field (grouped for convenience)
MpduType
The type of an MPDU.
Definition wifi-types.h:41
@ UNSUPPORTED_SETTINGS
@ L_SIG_FAILURE
@ WIFI_PREAMBLE_LONG
@ WIFI_PREAMBLE_SHORT
@ WIFI_MOD_CLASS_HR_DSSS
HR/DSSS (Clause 16)
@ WIFI_MOD_CLASS_DSSS
DSSS (Clause 15)
@ WIFI_PPDU_FIELD_NON_HT_HEADER
PHY header field for DSSS or ERP, short PHY header field for HR/DSSS or ERP, field not present for HT...
@ WIFI_PPDU_FIELD_PREAMBLE
SYNC + SFD fields for DSSS or ERP, shortSYNC + shortSFD fields for HR/DSSS or ERP,...
@ WIFI_PPDU_FIELD_DATA
data field
class anonymous_namespace{dsss-phy.cc}::ConstructorDsss g_constructor_dsss
the constructor for DSSS modes
Every class exported by the ns3 library is enclosed in the ns3 namespace.
Callback< R, Args... > MakeCallback(R(T::*memPtr)(Args...), OBJ objPtr)
Build Callbacks for class method members which take varying numbers of arguments and potentially retu...
Definition callback.h:684
dB_u RatioToDb(double ratio)
Convert from ratio to dB.
Definition wifi-utils.cc:44
static const std::array< uint64_t, 4 > s_dsssRatesBpsList
DSSS rates in bits per second.
Definition dsss-phy.cc:58
double MHz_u
MHz weak type.
Definition wifi-units.h:31
std::unordered_map< uint16_t, Ptr< const WifiPsdu > > WifiConstPsduMap
Map of const PSDUs indexed by STA-ID.
Definition wifi-ppdu.h:38
WifiCodeRate
These constants define the various convolutional coding rates used for the OFDM transmission modes in...
@ WIFI_CODE_RATE_UNDEFINED
undefined coding rate
const std::array< uint64_t, 4 > & GetDsssRatesBpsList()
Get the array of possible DSSS rates.
Definition dsss-phy.cc:66
Status of the reception of the PPDU field.
Definition phy-entity.h:80
WifiPhyRxfailureReason reason
failure reason
Definition phy-entity.h:82
PhyRxFailureAction actionIfFailure
action to perform in case of failure
Definition phy-entity.h:83
bool isSuccess
outcome (true if success) of the reception
Definition phy-entity.h:81
A struct for both SNR and PER.
Definition phy-entity.h:115
double snr
SNR in linear scale.
Definition phy-entity.h:116