diff --git a/src/devices/wifi/wifi-phy-test.cc b/src/devices/wifi/wifi-phy-test.cc index e76358e3a..66a26d694 100644 --- a/src/devices/wifi/wifi-phy-test.cc +++ b/src/devices/wifi/wifi-phy-test.cc @@ -188,27 +188,37 @@ static void PrintPsrVsDistance (int argc, char *argv[]) static void PrintSizeVsRange (int argc, char *argv[]) { + double minPsr = 0.05; struct PsrExperiment::Input input = PsrExperiment::GetDefaultInput (); CommandLine cmd; cmd.AddValue ("TxPowerLevel", "The power level index to use to send each packet", input.txPowerLevel); cmd.AddValue ("TxMode", "The mode to use to send each packet", input.txMode); cmd.AddValue ("NPackets", "The number of packets to send", input.nPackets); + cmd.AddValue ("LowPsr", "The minimum psr needed to assume that we are within range", minPsr); cmd.Parse (argc, argv); for (input.packetSize = 10; input.packetSize < 3000; input.packetSize += 40) { - for (input.distance = 100.0; input.distance < 170; input.distance += 2.0) + double precision = 0.1; + double low = 1.0; + double high = 200.0; + while (high - low > precision) { + double middle = low + (high - low) / 2; struct PsrExperiment::Output output; PsrExperiment experiment; + input.distance = middle; output = experiment.Run (input); - double psr = output.received; - psr /= input.nPackets ; - if (psr <= 0.05) + double psr = CalcPsr (output, input); + if (psr >= minPsr) { - std::cout << input.packetSize << " " << input.distance << std::endl; - break; + low = middle; + } + else + { + high = middle; } } + std::cout << input.packetSize << " " << input.distance << std::endl; } }