【背景】
android平台中,已经可以通过蓝牙设备扫描,获得每个蓝牙设备的RSSI。
但是得到的值,基本都是负的,比如:
-89, -51, -95, -94
现在希望将此RSSI的值,转换为信号百分比,即从1到100的值。
【折腾过程】
1.找了半天:
osx – RSSI value of wifi connection – how to interpret? – Super User
信号强度从百分比到分贝的转换 – ※一路风尘※ – ITeye技术网站
但是都没有很好的解决办法。
2.参考:
How to calculate the percentage of signal strength level from dBm
有提到:
“RSSI – 95 = dBm
RSSI_MAX for Atheros chips is 60. So, -35 dBm is equivalent to > 100%, and -95 dBm to 0%”
但是也只是针对该特例的公式,没有普适性。
3.最后参考:
Received signal strength indication – Wikipedia, the free encyclopedia
可知:
各个厂商各自为政,比如:
(1)Cisco:
RSSI范围是0到100,但是有时候也会返回101
(2)Atheros
某个无线网卡信号强度返回值从:
0到128,共128个等级
所以,对于想要找个统一的公式去计算如何从RSSI转换为信号强度百分比的事情,结论只能是:
没有统一的公式,你自己看着办。
并且也提到了:
更好的检测信号强度的标准是RCPI
【总结】
最终我暂时的做法是:
既然没有准的公式,那么就根据此处的实际情况:
基本都是在-100以上的值,所以,暂时就简单起见,把RSSI直接加上100,得到0到100的信号强度。
相关代码如下:
// signal strength==RSSI=Received signal strength indication //-89, -51, -95, -94 private int rssi; //private int signalStrength; public void setRssi(int rssi) { this.rssi = rssi; } public int getRssi() { return rssi; } // public void setSignalStrength(int signalStrength) { // this.signalStrength = signalStrength; // } public int getSignalStrength() { //return signalStrength; int signalStrength = rssi + 100; if(signalStrength < 0){ signalStrength = 0; } else if(signalStrength > 100) { signalStrength = 100; } return signalStrength; }
仅供参考。
转载请注明:在路上 » 【基本解决】蓝牙的RSSI转换为信号强度百分百