如何将WiFi级别(即-45,-88)转换为百分比?
我想以%为单位转换WiFi级别。我使用级别(以dBm格式)
获得WiFi级别我尝试了很多谷歌但没有得到正确的答案
答案 0 :(得分:3)
问题在于它非常依赖于接收天线。有些天线在-90 dBm处没有可用信号,有些已经在-80 dB。您将很难找到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;
}
答案 1 :(得分:1)
WifiManager类有一个函数calculateSignalLevel,但是当它指出here时,如果numLevels大于45,则会导致错误。可能的解决方法可能是这样的:
double percentage = WifiManager.calculateSignalLevel(int rssi, 40) * 2.5;
但当然,这将是2.5%的步骤 - 我不知道你的用例,但也许这就足够了。
正如其他人所说,计算百分比是有问题的,并没有简单的精确解决方案。
答案 2 :(得分:1)
这就是微软为dBm&lt;&gt;所做的事情。百分比转换: https://stackoverflow.com/a/15798024/2096041
基本上-50 .. 0 dBm
会线性地映射到100 .. 0 %
。
像MS一样,我宁愿坐在安全的一边,不要像现在的一些答案那样使用-100作为100%。
答案 3 :(得分:0)
如果此信息可用,您可以从信噪比中获得百分比,而不是单独的信号强度。这可能是所需的指标。
android.net.wifi.ScanResult
不会发布必要信息(截至2012年12月),但您可以通过其他方式获取此信息。
信号=噪音=&gt;不可用的信号,所以你可以设置0dB SnR = 0%。您还可以将10dB SnR设置为90%(90%的信号功率不会被噪声淹没),100%=完全没有噪声。更一般地说,
p = 100% * (1 - 10^(SnR / (10dB)))