From 424fbd53fe80564fa7549810105d94701dbcbd76 Mon Sep 17 00:00:00 2001 From: Stefano Avallone Date: Thu, 27 Jan 2022 18:16:33 +0100 Subject: [PATCH] wifi: Add TX center frequency to WifiSpectrumSignalParameters In this way, SpectrumWifiPhy::StartRx() does not have to obtain the transmitting PHY just to retrieve the TX center frequency. Also, the current approach does not work with multi-link devices because the receiver should be able to know which PHY was used on the transmitter side to send the frame. --- src/wifi/model/phy-entity.cc | 1 + src/wifi/model/spectrum-wifi-phy.cc | 9 +-------- src/wifi/model/wifi-spectrum-signal-parameters.cc | 2 ++ src/wifi/model/wifi-spectrum-signal-parameters.h | 1 + 4 files changed, 5 insertions(+), 8 deletions(-) diff --git a/src/wifi/model/phy-entity.cc b/src/wifi/model/phy-entity.cc index bfc595b0e..3f402f1dc 100644 --- a/src/wifi/model/phy-entity.cc +++ b/src/wifi/model/phy-entity.cc @@ -1061,6 +1061,7 @@ PhyEntity::Transmit (Time txDuration, Ptr ppdu, std::string type) txParams->duration = txDuration; txParams->psd = txPowerSpectrum; txParams->ppdu = ppdu; + txParams->txCenterFreq = GetCenterFrequencyForChannelWidth (ppdu->GetTxVector ()); NS_LOG_DEBUG ("Starting " << type << " with power " << WToDbm (txPowerWatts) << " dBm on channel " << +m_wifiPhy->GetChannelNumber () << " for " << txParams->duration.As (Time::MS)); NS_LOG_DEBUG ("Starting " << type << " with integrated spectrum power " << WToDbm (Integral (*txPowerSpectrum)) << " dBm; spectrum model Uid: " << txPowerSpectrum->GetSpectrumModel ()->GetUid ()); auto spectrumWifiPhy = DynamicCast (m_wifiPhy); diff --git a/src/wifi/model/spectrum-wifi-phy.cc b/src/wifi/model/spectrum-wifi-phy.cc index 6bf50ca81..20b7941ab 100644 --- a/src/wifi/model/spectrum-wifi-phy.cc +++ b/src/wifi/model/spectrum-wifi-phy.cc @@ -356,13 +356,6 @@ SpectrumWifiPhy::StartRx (Ptr rxParams) // does not overlap with the receiver's primary20 channel if (wifiRxParams->txPhy != 0) { - Ptr dev = DynamicCast (rxParams->txPhy->GetDevice ()); - NS_ASSERT (dev != 0); - Ptr txPhy = dev->GetPhy (); - NS_ASSERT (txPhy != 0); - uint16_t txChannelWidth = wifiRxParams->ppdu->GetTxVector ().GetChannelWidth (); - uint16_t txCenterFreq = txPhy->GetOperatingChannel ().GetPrimaryChannelCenterFrequency (txChannelWidth); - // if the channel width is a multiple of 20 MHz, then we consider the primary20 channel uint16_t width = (GetChannelWidth () % 20 == 0 ? 20 : GetChannelWidth ()); uint16_t p20MinFreq = @@ -370,7 +363,7 @@ SpectrumWifiPhy::StartRx (Ptr rxParams) uint16_t p20MaxFreq = GetOperatingChannel ().GetPrimaryChannelCenterFrequency (width) + width / 2; - if (!wifiRxParams->ppdu->CanBeReceived (txCenterFreq, p20MinFreq, p20MaxFreq)) + if (!wifiRxParams->ppdu->CanBeReceived (wifiRxParams->txCenterFreq, p20MinFreq, p20MaxFreq)) { NS_LOG_INFO ("Cannot receive the PPDU, consider it as interference"); m_interference.Add (wifiRxParams->ppdu, wifiRxParams->ppdu->GetTxVector (), diff --git a/src/wifi/model/wifi-spectrum-signal-parameters.cc b/src/wifi/model/wifi-spectrum-signal-parameters.cc index 23f3b1e2e..115626a68 100644 --- a/src/wifi/model/wifi-spectrum-signal-parameters.cc +++ b/src/wifi/model/wifi-spectrum-signal-parameters.cc @@ -28,6 +28,7 @@ namespace ns3 { NS_LOG_COMPONENT_DEFINE ("WifiSpectrumSignalParameters"); WifiSpectrumSignalParameters::WifiSpectrumSignalParameters () + : txCenterFreq (0) { NS_LOG_FUNCTION (this); } @@ -37,6 +38,7 @@ WifiSpectrumSignalParameters::WifiSpectrumSignalParameters (const WifiSpectrumSi { NS_LOG_FUNCTION (this << &p); ppdu = p.ppdu; + txCenterFreq = p.txCenterFreq; } Ptr diff --git a/src/wifi/model/wifi-spectrum-signal-parameters.h b/src/wifi/model/wifi-spectrum-signal-parameters.h index fcfcb3ef3..9ea767cca 100644 --- a/src/wifi/model/wifi-spectrum-signal-parameters.h +++ b/src/wifi/model/wifi-spectrum-signal-parameters.h @@ -51,6 +51,7 @@ struct WifiSpectrumSignalParameters : public SpectrumSignalParameters WifiSpectrumSignalParameters (const WifiSpectrumSignalParameters& p); Ptr ppdu; ///< The PPDU being transmitted + uint16_t txCenterFreq; ///< the center frequency of the transmitted signal in MHz }; } // namespace ns3