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