首页 > 编程知识 正文

蓝牙rssi值计算原理,蓝牙rssi正常范围

时间:2023-05-03 20:35:22 阅读:263679 作者:1766

【背景】

android平台中,已经可以通过蓝牙设备扫描,获得每个蓝牙设备的RSSI。

但是得到的值,基本都是负的,比如:

-89, -51, -95, -94

现在希望将此RSSI的值,转换为信号百分比,即从1到100的值。

【折腾过程】

1.找了半天:

osx – RSSI value of wifi connection – how to interpret? – Super User

信号强度从百分比到分贝的转换 – ※一路风尘※ – ITeye技术网站

rssi为什么是负值 – 问通信专家

rssi值如何转换成dbm – 问通信专家

但是都没有很好的解决办法。

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的信号强度。

相关代码如下:

? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 // 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;   }     

仅供参考。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。