wifi: Do not call WToDbm with value 0W

This commit is contained in:
Sébastien Deronne
2024-08-06 11:50:18 +02:00
committed by Sébastien Deronne
parent 8aac077b8e
commit 4aea7e751e
5 changed files with 29 additions and 10 deletions

View File

@@ -979,7 +979,10 @@ void
PhyEntity::StartPreambleDetectionPeriod(Ptr<Event> event)
{
NS_LOG_FUNCTION(this << *event);
NS_LOG_DEBUG("Sync to signal (power=" << WToDbm(GetRxPowerWForPpdu(event)) << "dBm)");
const auto rxPower = GetRxPowerWForPpdu(event);
NS_LOG_DEBUG("Sync to signal (power=" << (rxPower > 0.0
? std::to_string(WToDbm(rxPower)) + "dBm)"
: std::to_string(rxPower) + "W)"));
m_wifiPhy->m_interference->NotifyRxStart(
m_wifiPhy->GetCurrentFrequencyRange()); // We need to notify it now so that it starts
// recording events

View File

@@ -525,8 +525,10 @@ SpectrumWifiPhy::StartRx(Ptr<SpectrumSignalParameters> rxParams,
rxPowerPerBandW *= rxGainRatio;
rxPowerW.insert({band, rxPowerPerBandW});
NS_LOG_DEBUG("Signal power received after antenna gain for "
<< bw << " MHz channel band " << index << ": " << rxPowerPerBandW << " W ("
<< WToDbm(rxPowerPerBandW) << " dBm)");
<< bw << " MHz channel band " << index << ": " << rxPowerPerBandW << " W"
<< (rxPowerPerBandW > 0.0
? " (" + std::to_string(WToDbm(rxPowerPerBandW)) + " dBm)"
: ""));
if (bw <= 20)
{
totalRxPowerW += rxPowerPerBandW;
@@ -548,14 +550,19 @@ SpectrumWifiPhy::StartRx(Ptr<SpectrumSignalParameters> rxParams,
}
}
NS_LOG_DEBUG("Total signal power received after antenna gain: "
<< totalRxPowerW << " W (" << WToDbm(totalRxPowerW) << " dBm)");
NS_LOG_DEBUG(
"Total signal power received after antenna gain: "
<< totalRxPowerW << " W"
<< (totalRxPowerW > 0.0 ? " (" + std::to_string(WToDbm(totalRxPowerW)) + " dBm)" : ""));
Ptr<WifiSpectrumSignalParameters> wifiRxParams =
DynamicCast<WifiSpectrumSignalParameters>(rxParams);
// Log the signal arrival to the trace source
m_signalCb(rxParams, senderNodeId, WToDbm(totalRxPowerW), rxDuration);
if (totalRxPowerW > 0.0)
{
m_signalCb(rxParams, senderNodeId, WToDbm(totalRxPowerW), rxDuration);
}
if (!wifiRxParams)
{
@@ -593,7 +600,10 @@ SpectrumWifiPhy::StartRx(Ptr<SpectrumSignalParameters> rxParams,
const auto ppdu = GetRxPpduFromTxPpdu(wifiRxParams->ppdu);
if (totalRxPowerW < DbmToW(GetRxSensitivity()) * (ppdu->GetTxChannelWidth() / 20.0))
{
NS_LOG_INFO("Received signal too weak to process: " << WToDbm(totalRxPowerW) << " dBm");
NS_LOG_INFO(
"Received signal too weak to process: "
<< totalRxPowerW << " W"
<< (totalRxPowerW > 0.0 ? " (" + std::to_string(WToDbm(totalRxPowerW)) + " dBm)" : ""));
m_interference->Add(ppdu, rxDuration, rxPowerW, GetCurrentFrequencyRange());
SwitchMaybeToCcaBusy(nullptr);
return;

View File

@@ -68,6 +68,10 @@ ThresholdPreambleDetectionModel::IsPreambleDetected(double rssi,
double snr,
ChannelWidthMhz channelWidth) const
{
if (rssi == 0.0)
{
return false;
}
NS_LOG_FUNCTION(this << WToDbm(rssi) << RatioToDb(snr) << channelWidth);
if (WToDbm(rssi) >= m_rssiMin)
{

View File

@@ -47,6 +47,7 @@ DbmToW(double dBm)
double
WToDbm(double w)
{
NS_ASSERT(w > 0.);
return 10.0 * std::log10(w) + 30.0;
}

View File

@@ -553,10 +553,11 @@ SpectrumWifiPhyFilterTest::~SpectrumWifiPhyFilterTest()
void
SpectrumWifiPhyFilterTest::RxCallback(Ptr<const Packet> p, RxPowerWattPerChannelBand rxPowersW)
{
for (const auto& pair : rxPowersW)
for (const auto& [band, powerW] : rxPowersW)
{
NS_LOG_INFO("band: (" << pair.first << ") -> powerW=" << pair.second << " ("
<< WToDbm(pair.second) << " dBm)");
NS_LOG_INFO(
"band: (" << band << ") -> powerW=" << powerW
<< (powerW > 0.0 ? " (" + std::to_string(WToDbm(powerW)) + " dBm)" : ""));
}
size_t numBands = rxPowersW.size();