如何将 WiFi 级别(即 -45、-88)转换为百分比?
我想将 WiFi 级别转换为 % 。我使用级别(dBm 格式)获得 WiFi 级别
我尝试了很多谷歌但没有得到正确的答案
如何将 WiFi 级别(即 -45、-88)转换为百分比?
我想将 WiFi 级别转换为 % 。我使用级别(dBm 格式)获得 WiFi 级别
我尝试了很多谷歌但没有得到正确的答案
问题在于它非常依赖于接收天线。有些天线在 -90 dBm 时没有记录可用信号,有些已经在 -80 时。您将很难找到 0%(100% 严格来说是 0dBm)。
我创建了一个 Wifi 扫描仪应用程序,我使用 -100dBm 作为 0% 和 0dBm 作为 100%,在 Java 中它变成了这样的东西(MIN_DBM
为 -100):
public int getPowerPercentage(int power) {
int i = 0;
if (power <= MIN_DBM) {
i = 0;
} else {
i = 100 + power;
}
return i;
}
WifiManager 类有一个函数calculateSignalLevel,但正如这里所说,如果 numLevels 大于 45,它会导致错误。可能的解决方法可能是这样的:
double percentage = WifiManager.calculateSignalLevel(int rssi, 40) * 2.5;
但当然,这将以 2.5% 为步长 - 我不知道您的用例,但也许这已经足够了。
正如其他人所说,计算百分比是有问题的,并且没有简单的精确解决方案。
这是微软为 dBm <> 百分比转换所做的: https ://stackoverflow.com/a/15798024/2096041
基本上-50 .. 0 dBm
线性映射到100 .. 0 %
. 像 MS 一样,我更愿意坐在安全的一边,而不是像这里的一些答案所建议的那样使用 -100 作为 100%。
如果此信息可用,您可以从信噪比而不是单独的信号强度中得出百分比。这可能是所需的指标。
Anandroid.net.wifi.ScanResult
不会发布必要的信息(截至 2012 年 12 月),但您可能可以通过其他方式获取此信息。
信号 = 噪声 => 不可用的信号,因此您可以设置 0dB SnR = 0%。您也可以将 10dB SnR 设置为 90%(90% 的信号功率不会被噪声淹没),100% = 完全没有噪声。更普遍,
p = 100% * (1 - 10^(SnR / (10dB)))