A Discrete-Event Network Simulator
API
Loading...
Searching...
No Matches
interference-helper.h
Go to the documentation of this file.
1/*
2 * Copyright (c) 2005,2006 INRIA
3 *
4 * SPDX-License-Identifier: GPL-2.0-only
5 *
6 * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
7 */
8
9#ifndef INTERFERENCE_HELPER_H
10#define INTERFERENCE_HELPER_H
11
12#include "wifi-phy-common.h"
13#include "wifi-ppdu.h"
14#include "wifi-tx-vector.h"
15
16#include "ns3/object.h"
17
18#include <map>
19
20namespace ns3
21{
22
23class WifiPpdu;
24class WifiPsdu;
25class ErrorRateModel;
26
27/**
28 * @ingroup wifi
29 * @brief handles interference calculations
30 * @brief signal event for a PPDU.
31 */
32class Event : public SimpleRefCount<Event>
33{
34 public:
35 /**
36 * Create an Event with the given parameters. Note that <i>rxPower</i> will
37 * be moved into this object.
38 *
39 * @param ppdu the PPDU
40 * @param duration duration of the PPDU
41 * @param rxPower the received power per band (W)
42 */
44
45 /**
46 * Return the PPDU.
47 *
48 * @return the PPDU
49 */
51 /**
52 * Return the start time of the signal.
53 *
54 * @return the start time of the signal
55 */
56 Time GetStartTime() const;
57 /**
58 * Return the end time of the signal.
59 *
60 * @return the end time of the signal
61 */
62 Time GetEndTime() const;
63 /**
64 * Return the duration of the signal.
65 *
66 * @return the duration of the signal
67 */
68 Time GetDuration() const;
69 /**
70 * Return the total received power.
71 *
72 * @return the total received power
73 */
74 Watt_u GetRxPower() const;
75 /**
76 * Return the received power for a given band.
77 *
78 * @param band the band for which the power should be returned
79 * @return the received power for a given band
80 */
81 Watt_u GetRxPower(const WifiSpectrumBandInfo& band) const;
82 /**
83 * Return the received power (W) for all bands.
84 *
85 * @return the received power (W) for all bands.
86 */
88 /**
89 * Update the received power (W) for all bands, i.e. add up the received power
90 * to the current received power, for each band.
91 *
92 * @param rxPower the received power (W) for all bands.
93 */
94 void UpdateRxPowerW(const RxPowerWattPerChannelBand& rxPower);
95 /**
96 * Update the PPDU that initially generated the event.
97 * This is needed to have the PPDU holding the correct TXVECTOR
98 * upon reception of multiple signals carrying the same content
99 * but over different channel width (typically non-HT duplicates).
100 *
101 * @param ppdu the new PPDU to use for this event.
102 */
104
105 private:
107 Time m_startTime; //!< start time
108 Time m_endTime; //!< end time
109 RxPowerWattPerChannelBand m_rxPowerW; //!< received power in watts per band
110};
111
112/**
113 * @brief Stream insertion operator.
114 *
115 * @param os the stream
116 * @param event the event
117 * @returns a reference to the stream
118 */
119std::ostream& operator<<(std::ostream& os, const Event& event);
120
121/**
122 * @ingroup wifi
123 * @brief handles interference calculations
124 */
126{
127 public:
129 ~InterferenceHelper() override;
130
131 /**
132 * @brief Get the type ID.
133 * @return the object TypeId
134 */
135 static TypeId GetTypeId();
136
137 /**
138 * Add a frequency band.
139 *
140 * @param band the band to be added
141 */
142 void AddBand(const WifiSpectrumBandInfo& band);
143
144 /**
145 * Remove a frequency band.
146 *
147 * @param band the band to be removed
148 */
149 void RemoveBand(const WifiSpectrumBandInfo& band);
150
151 /**
152 * Check whether bands are already tracked by this interference helper.
153 *
154 * @return true if bands are tracked by this interference helper, false otherwise
155 */
156 bool HasBands() const;
157
158 /**
159 * Update the frequency bands that belongs to a given frequency range when the spectrum model is
160 * changed.
161 *
162 * @param bands the bands to be added in the new spectrum model
163 * @param freqRange the frequency range the bands belong to
164 */
165 void UpdateBands(const std::vector<WifiSpectrumBandInfo>& bands,
166 const FrequencyRange& freqRange);
167
168 /**
169 * Set the noise figure.
170 *
171 * @param value noise figure in linear scale
172 */
173 void SetNoiseFigure(double value);
174 /**
175 * Set the error rate model for this interference helper.
176 *
177 * @param rate Error rate model
178 */
179 void SetErrorRateModel(const Ptr<ErrorRateModel> rate);
180
181 /**
182 * Return the error rate model.
183 *
184 * @return Error rate model
185 */
187 /**
188 * Set the number of RX antennas in the receiver corresponding to this
189 * interference helper.
190 *
191 * @param rx the number of RX antennas
192 */
193 void SetNumberOfReceiveAntennas(uint8_t rx);
194
195 /**
196 * @param energy the minimum energy requested
197 * @param band identify the requested band
198 *
199 * @returns the expected amount of time the observed
200 * energy on the medium for a given band will
201 * be higher than the requested threshold.
202 */
204
205 /**
206 * Add the PPDU-related signal to interference helper.
207 *
208 * @param ppdu the PPDU
209 * @param duration the PPDU duration
210 * @param rxPower received power per band (W)
211 * @param freqRange the frequency range in which the received signal is detected
212 * @param isStartHePortionRxing flag whether the event corresponds to the start of the HE
213 * portion reception (only used for MU)
214 *
215 * @return Event
216 */
218 Time duration,
220 const FrequencyRange& freqRange,
221 bool isStartHePortionRxing = false);
222
223 /**
224 * Add a non-Wifi signal to interference helper.
225 * @param duration the duration of the signal
226 * @param rxPower received power per band (W)
227 * @param freqRange the frequency range in which the received signal is detected
228 */
229 void AddForeignSignal(Time duration,
231 const FrequencyRange& freqRange);
232 /**
233 * Calculate the SNIR at the start of the payload and accumulate
234 * all SNIR changes in the SNIR vector for each MPDU of an A-MPDU.
235 * This workaround is required in order to provide one PER per MPDU, for
236 * reception success/failure evaluation, while hiding aggregation details from
237 * this class.
238 *
239 * @param event the event corresponding to the first time the corresponding PPDU arrives
240 * @param channelWidth the channel width used to transmit the PSDU
241 * @param band identify the band used by the PSDU
242 * @param staId the station ID of the PSDU (only used for MU)
243 * @param relativeMpduStartStop the time window (pair of start and end times) of PHY payload to
244 * focus on
245 *
246 * @return struct of SNR and PER (with PER being evaluated over the provided time window)
247 */
249 MHz_u channelWidth,
250 const WifiSpectrumBandInfo& band,
251 uint16_t staId,
252 std::pair<Time, Time> relativeMpduStartStop) const;
253 /**
254 * Calculate the SNIR for the event (starting from now until the event end).
255 *
256 * @param event the event corresponding to the first time the corresponding PPDU arrives
257 * @param channelWidth the channel width
258 * @param nss the number of spatial streams
259 * @param band identify the band used by the PSDU
260 *
261 * @return the SNR for the PPDU in linear scale
262 */
263 double CalculateSnr(Ptr<Event> event,
264 MHz_u channelWidth,
265 uint8_t nss,
266 const WifiSpectrumBandInfo& band) const;
267 /**
268 * Calculate the SNIR at the start of the PHY header and accumulate
269 * all SNIR changes in the SNIR vector.
270 *
271 * @param event the event corresponding to the first time the corresponding PPDU arrives
272 * @param channelWidth the channel width for header measurement
273 * @param band identify the band used by the PSDU
274 * @param header the PHY header to consider
275 *
276 * @return struct of SNR and PER
277 */
279 MHz_u channelWidth,
280 const WifiSpectrumBandInfo& band,
281 WifiPpduField header) const;
282
283 /**
284 * Notify that RX has started.
285 * @param freqRange the frequency range in which the received signal event is detected
286 */
287 void NotifyRxStart(const FrequencyRange& freqRange);
288 /**
289 * Notify that RX has ended.
290 *
291 * @param endTime the end time of the signal
292 * @param freqRange the frequency range in which the received signal event was detected
293 */
294 void NotifyRxEnd(Time endTime, const FrequencyRange& freqRange);
295
296 /**
297 * Update event to scale its received power (W) per band.
298 *
299 * @param event the event to be updated
300 * @param rxPower the received power (W) per band to be added to the current event
301 */
302 void UpdateEvent(Ptr<Event> event, const RxPowerWattPerChannelBand& rxPower);
303
304 protected:
305 void DoDispose() override;
306
307 /**
308 * Calculate SNR (linear ratio) from the given signal power and noise+interference power.
309 *
310 * @param signal signal power
311 * @param noiseInterference noise and interference power
312 * @param channelWidth signal width
313 * @param nss the number of spatial streams
314 *
315 * @return SNR in linear scale
316 */
317 double CalculateSnr(Watt_u signal,
318 Watt_u noiseInterference,
319 MHz_u channelWidth,
320 uint8_t nss) const;
321 /**
322 * Calculate the success rate of the chunk given the SINR, duration, and TXVECTOR.
323 * The duration and TXVECTOR are used to calculate how many bits are present in the chunk.
324 *
325 * @param snir the SINR
326 * @param duration the duration of the chunk
327 * @param mode the WifiMode
328 * @param txVector the TXVECTOR
329 * @param field the PPDU field to which the chunk belongs to
330 *
331 * @return the success rate
332 */
333 double CalculateChunkSuccessRate(double snir,
334 Time duration,
335 WifiMode mode,
336 const WifiTxVector& txVector,
337 WifiPpduField field) const;
338 /**
339 * Calculate the success rate of the payload chunk given the SINR, duration, and TXVECTOR.
340 * The duration and TXVECTOR are used to calculate how many bits are present in the payload
341 * chunk.
342 *
343 * @param snir the SINR
344 * @param duration the duration of the chunk
345 * @param txVector the TXVECTOR
346 * @param staId the station ID of the PSDU (only used for MU)
347 *
348 * @return the success rate
349 */
350 double CalculatePayloadChunkSuccessRate(double snir,
351 Time duration,
352 const WifiTxVector& txVector,
353 uint16_t staId = SU_STA_ID) const;
354
355 protected:
356 std::map<FrequencyRange, bool>
357 m_rxing; //!< flag whether it is in receiving state for a given FrequencyRange
358
359 /**
360 * Noise and Interference (thus Ni) event.
361 */
363 {
364 public:
365 /**
366 * Create a NiChange at the given time and the amount of NI change.
367 *
368 * @param power the power
369 * @param event causes this NI change
370 */
371 NiChange(Watt_u power, Ptr<Event> event);
372
373 /**
374 * Return the power
375 *
376 * @return the power
377 */
378 Watt_u GetPower() const;
379 /**
380 * Add a given amount of power.
381 *
382 * @param power the power to be added to the existing value
383 */
384 void AddPower(Watt_u power);
385 /**
386 * Return the event causes the corresponding NI change
387 *
388 * @return the event
389 */
390 Ptr<Event> GetEvent() const;
391
392 private:
393 Watt_u m_power; ///< power
394 Ptr<Event> m_event; ///< event
395 };
396
397 /**
398 * typedef for a multimap of NiChange
399 */
400 using NiChanges = std::multimap<Time, NiChange>;
401
402 /**
403 * Map of NiChanges per band
404 */
405 using NiChangesPerBand = std::map<WifiSpectrumBandInfo, NiChanges>;
406
407 /**
408 * Map of first power per band
409 */
410 using FirstPowerPerBand = std::map<WifiSpectrumBandInfo, Watt_u>;
411
412 NiChangesPerBand m_niChanges; //!< NI Changes for each band
413
414 private:
415 /**
416 * Check whether a given band is tracked by this interference helper.
417 *
418 * @param band the band to be checked
419 * @return true if the band is already tracked by this interference helper, false otherwise
420 */
421 bool HasBand(const WifiSpectrumBandInfo& band) const;
422
423 /**
424 * Check whether a given band belongs to a given frequency range.
425 *
426 * @param band the band to be checked
427 * @param freqRange the frequency range to check whether the band belong to
428 * @return true if the band belongs to the frequency range, false otherwise
429 */
431 const FrequencyRange& freqRange) const;
432
433 /**
434 * Append the given Event.
435 *
436 * @param event the event to be appended
437 * @param freqRange the frequency range in which the received signal event is detected
438 * @param isStartHePortionRxing flag whether event corresponds to the start of the HE portion
439 * reception (only used for MU)
440 */
441 void AppendEvent(Ptr<Event> event, const FrequencyRange& freqRange, bool isStartHePortionRxing);
442
443 /**
444 * Calculate noise and interference power.
445 *
446 * @param event the event
447 * @param nis the NiChanges
448 * @param band the band
449 *
450 * @return noise and interference power
451 */
453 NiChangesPerBand& nis,
454 const WifiSpectrumBandInfo& band) const;
455
456 /**
457 * Calculate power of all other events preceding a given event that belong to the same MU-MIMO
458 * transmission.
459 *
460 * @param event the event
461 * @param band the band
462 *
463 * @return the power of all other events preceding the event that belong to the same MU-MIMO
464 * transmission
465 */
467
468 /**
469 * Calculate the error rate of the given PHY payload only in the provided time
470 * window (thus enabling per MPDU PER information). The PHY payload can be divided into
471 * multiple chunks (e.g. due to interference from other transmissions).
472 *
473 * @param event the event
474 * @param channelWidth the channel width used to transmit the PSDU
475 * @param nis the NiChanges
476 * @param band identify the band used by the PSDU
477 * @param staId the station ID of the PSDU (only used for MU)
478 * @param window time window (pair of start and end times) of PHY payload to focus on
479 *
480 * @return the error rate of the payload
481 */
483 MHz_u channelWidth,
484 NiChangesPerBand* nis,
485 const WifiSpectrumBandInfo& band,
486 uint16_t staId,
487 std::pair<Time, Time> window) const;
488 /**
489 * Calculate the error rate of the PHY header. The PHY header
490 * can be divided into multiple chunks (e.g. due to interference from other transmissions).
491 *
492 * @param event the event
493 * @param nis the NiChanges
494 * @param channelWidth the channel width for header measurement
495 * @param band the band
496 * @param header the PHY header to consider
497 *
498 * @return the error rate of the HT PHY header
499 */
501 NiChangesPerBand* nis,
502 MHz_u channelWidth,
503 const WifiSpectrumBandInfo& band,
504 WifiPpduField header) const;
505 /**
506 * Calculate the success rate of the PHY header sections for the provided event.
507 *
508 * @param event the event
509 * @param nis the NiChanges
510 * @param channelWidth the channel width for header measurement
511 * @param band the band
512 * @param phyHeaderSections the map of PHY header sections (\see PhyHeaderSections)
513 *
514 * @return the success rate of the PHY header sections
515 */
517 NiChangesPerBand* nis,
518 MHz_u channelWidth,
519 const WifiSpectrumBandInfo& band,
520 PhyHeaderSections phyHeaderSections) const;
521
522 double m_noiseFigure; //!< noise figure (linear)
524 uint8_t m_numRxAntennas; //!< the number of RX antennas in the corresponding receiver
525 FirstPowerPerBand m_firstPowers; //!< first power of each band
526
527 /**
528 * Returns an iterator to the first NiChange that is later than moment
529 *
530 * @param moment time to check from
531 * @param niIt iterator of the band to check
532 * @returns an iterator to the list of NiChanges
533 */
534 NiChanges::iterator GetNextPosition(Time moment, NiChangesPerBand::iterator niIt) const;
535 /**
536 * Returns an iterator to the last NiChange that is before than moment
537 *
538 * @param moment time to check from
539 * @param niIt iterator of the band to check
540 * @returns an iterator to the list of NiChanges
541 */
542 NiChanges::iterator GetPreviousPosition(Time moment, NiChangesPerBand::iterator niIt) const;
543
544 /**
545 * Add NiChange to the list at the appropriate position and
546 * return the iterator of the new event.
547 *
548 * @param moment time to check from
549 * @param change the NiChange to add
550 * @param niIt iterator of the band to check
551 * @returns the iterator of the new event
552 */
553 NiChanges::iterator AddNiChangeEvent(Time moment,
554 NiChange change,
555 NiChangesPerBand::iterator niIt);
556
557 /**
558 * Return whether another event is a MU-MIMO event that belongs to the same transmission and to
559 * the same RU.
560 *
561 * @param currentEvent the current event that is being inspected
562 * @param otherEvent the other event to compare against
563 *
564 * @return whether both events belong to the same transmission and to the same RU
565 */
566 bool IsSameMuMimoTransmission(Ptr<const Event> currentEvent, Ptr<const Event> otherEvent) const;
567};
568
569} // namespace ns3
570
571#endif /* INTERFERENCE_HELPER_H */
the interface for Wifi's error models
handles interference calculations
Time m_endTime
end time
Watt_u GetRxPower() const
Return the total received power.
Time m_startTime
start time
Event(Ptr< const WifiPpdu > ppdu, Time duration, RxPowerWattPerChannelBand &&rxPower)
Create an Event with the given parameters.
Ptr< const WifiPpdu > GetPpdu() const
Return the PPDU.
Ptr< const WifiPpdu > m_ppdu
PPDU.
void UpdateRxPowerW(const RxPowerWattPerChannelBand &rxPower)
Update the received power (W) for all bands, i.e.
Time GetEndTime() const
Return the end time of the signal.
Time GetDuration() const
Return the duration of the signal.
const RxPowerWattPerChannelBand & GetRxPowerPerBand() const
Return the received power (W) for all bands.
RxPowerWattPerChannelBand m_rxPowerW
received power in watts per band
Time GetStartTime() const
Return the start time of the signal.
void UpdatePpdu(Ptr< const WifiPpdu > ppdu)
Update the PPDU that initially generated the event.
Noise and Interference (thus Ni) event.
void AddPower(Watt_u power)
Add a given amount of power.
NiChange(Watt_u power, Ptr< Event > event)
Create a NiChange at the given time and the amount of NI change.
Watt_u GetPower() const
Return the power.
Ptr< Event > GetEvent() const
Return the event causes the corresponding NI change.
std::map< WifiSpectrumBandInfo, Watt_u > FirstPowerPerBand
Map of first power per band.
double CalculatePhyHeaderPer(Ptr< const Event > event, NiChangesPerBand *nis, MHz_u channelWidth, const WifiSpectrumBandInfo &band, WifiPpduField header) const
Calculate the error rate of the PHY header.
void SetNoiseFigure(double value)
Set the noise figure.
Ptr< Event > Add(Ptr< const WifiPpdu > ppdu, Time duration, RxPowerWattPerChannelBand &rxPower, const FrequencyRange &freqRange, bool isStartHePortionRxing=false)
Add the PPDU-related signal to interference helper.
double m_noiseFigure
noise figure (linear)
std::map< FrequencyRange, bool > m_rxing
flag whether it is in receiving state for a given FrequencyRange
Ptr< ErrorRateModel > GetErrorRateModel() const
Return the error rate model.
NiChanges::iterator AddNiChangeEvent(Time moment, NiChange change, NiChangesPerBand::iterator niIt)
Add NiChange to the list at the appropriate position and return the iterator of the new event.
std::map< WifiSpectrumBandInfo, NiChanges > NiChangesPerBand
Map of NiChanges per band.
void NotifyRxStart(const FrequencyRange &freqRange)
Notify that RX has started.
NiChanges::iterator GetNextPosition(Time moment, NiChangesPerBand::iterator niIt) const
Returns an iterator to the first NiChange that is later than moment.
uint8_t m_numRxAntennas
the number of RX antennas in the corresponding receiver
bool IsBandInFrequencyRange(const WifiSpectrumBandInfo &band, const FrequencyRange &freqRange) const
Check whether a given band belongs to a given frequency range.
void DoDispose() override
Destructor implementation.
std::multimap< Time, NiChange > NiChanges
typedef for a multimap of NiChange
Time GetEnergyDuration(Watt_u energy, const WifiSpectrumBandInfo &band)
NiChangesPerBand m_niChanges
NI Changes for each band.
void UpdateBands(const std::vector< WifiSpectrumBandInfo > &bands, const FrequencyRange &freqRange)
Update the frequency bands that belongs to a given frequency range when the spectrum model is changed...
void SetErrorRateModel(const Ptr< ErrorRateModel > rate)
Set the error rate model for this interference helper.
bool HasBands() const
Check whether bands are already tracked by this interference helper.
void AddForeignSignal(Time duration, RxPowerWattPerChannelBand &rxPower, const FrequencyRange &freqRange)
Add a non-Wifi signal to interference helper.
double CalculatePayloadChunkSuccessRate(double snir, Time duration, const WifiTxVector &txVector, uint16_t staId=SU_STA_ID) const
Calculate the success rate of the payload chunk given the SINR, duration, and TXVECTOR.
Ptr< ErrorRateModel > m_errorRateModel
error rate model
SnrPer CalculatePhyHeaderSnrPer(Ptr< Event > event, MHz_u channelWidth, const WifiSpectrumBandInfo &band, WifiPpduField header) const
Calculate the SNIR at the start of the PHY header and accumulate all SNIR changes in the SNIR vector.
FirstPowerPerBand m_firstPowers
first power of each band
bool IsSameMuMimoTransmission(Ptr< const Event > currentEvent, Ptr< const Event > otherEvent) const
Return whether another event is a MU-MIMO event that belongs to the same transmission and to the same...
double CalculateChunkSuccessRate(double snir, Time duration, WifiMode mode, const WifiTxVector &txVector, WifiPpduField field) const
Calculate the success rate of the chunk given the SINR, duration, and TXVECTOR.
bool HasBand(const WifiSpectrumBandInfo &band) const
Check whether a given band is tracked by this interference helper.
void AddBand(const WifiSpectrumBandInfo &band)
Add a frequency band.
Watt_u CalculateMuMimoPowerW(Ptr< const Event > event, const WifiSpectrumBandInfo &band) const
Calculate power of all other events preceding a given event that belong to the same MU-MIMO transmiss...
void AppendEvent(Ptr< Event > event, const FrequencyRange &freqRange, bool isStartHePortionRxing)
Append the given Event.
static TypeId GetTypeId()
Get the type ID.
void UpdateEvent(Ptr< Event > event, const RxPowerWattPerChannelBand &rxPower)
Update event to scale its received power (W) per band.
void RemoveBand(const WifiSpectrumBandInfo &band)
Remove a frequency band.
void NotifyRxEnd(Time endTime, const FrequencyRange &freqRange)
Notify that RX has ended.
Watt_u CalculateNoiseInterferenceW(Ptr< Event > event, NiChangesPerBand &nis, const WifiSpectrumBandInfo &band) const
Calculate noise and interference power.
void SetNumberOfReceiveAntennas(uint8_t rx)
Set the number of RX antennas in the receiver corresponding to this interference helper.
SnrPer CalculatePayloadSnrPer(Ptr< Event > event, MHz_u channelWidth, const WifiSpectrumBandInfo &band, uint16_t staId, std::pair< Time, Time > relativeMpduStartStop) const
Calculate the SNIR at the start of the payload and accumulate all SNIR changes in the SNIR vector for...
NiChanges::iterator GetPreviousPosition(Time moment, NiChangesPerBand::iterator niIt) const
Returns an iterator to the last NiChange that is before than moment.
double CalculateSnr(Ptr< Event > event, MHz_u channelWidth, uint8_t nss, const WifiSpectrumBandInfo &band) const
Calculate the SNIR for the event (starting from now until the event end).
double CalculatePayloadPer(Ptr< const Event > event, MHz_u channelWidth, NiChangesPerBand *nis, const WifiSpectrumBandInfo &band, uint16_t staId, std::pair< Time, Time > window) const
Calculate the error rate of the given PHY payload only in the provided time window (thus enabling per...
double CalculatePhyHeaderSectionPsr(Ptr< const Event > event, NiChangesPerBand *nis, MHz_u channelWidth, const WifiSpectrumBandInfo &band, PhyHeaderSections phyHeaderSections) const
Calculate the success rate of the PHY header sections for the provided event.
Object()
Caller graph was not generated because of its size.
Definition object.cc:93
Smart pointer class similar to boost::intrusive_ptr.
Definition ptr.h:70
Simulation virtual time values and global simulation resolution.
Definition nstime.h:95
a unique identifier for an interface.
Definition type-id.h:50
represent a single transmission mode
Definition wifi-mode.h:38
WifiPpdu stores a preamble, a modulation class, PHY headers and a PSDU.
Definition wifi-ppdu.h:47
WifiPsdu stores an MPDU, S-MPDU or A-MPDU, by keeping header(s) and payload(s) separate for each cons...
Definition wifi-psdu.h:33
This class mimics the TXVECTOR which is to be passed to the PHY in order to define the parameters whi...
WifiPpduField
The type of PPDU field (grouped for convenience).
Every class exported by the ns3 library is enclosed in the ns3 namespace.
std::ostream & operator<<(std::ostream &os, const Angles &a)
Definition angles.cc:148
std::map< WifiPpduField, PhyHeaderChunkInfo > PhyHeaderSections
A map of PhyHeaderChunkInfo elements per PPDU field.
double MHz_u
MHz weak type.
Definition wifi-units.h:31
std::map< WifiSpectrumBandInfo, Watt_u > RxPowerWattPerChannelBand
A map of the received power for each band.
static constexpr uint16_t SU_STA_ID
STA_ID to identify a single user (SU).
double Watt_u
Watt weak type.
Definition wifi-units.h:25
Struct defining a frequency range between minFrequency and maxFrequency.
A struct for both SNR and PER.
WifiSpectrumBandInfo structure containing info about a spectrum band.
Declaration of the following enums:
Declaration of ns3::WifiPpdu class and ns3::WifiConstPsduMap.