Android Bluetooth 藍芽強度Rssi
阿新 • • 發佈:2018-10-31
轉自 https://blog.csdn.net/lhc1105/article/details/54585632
轉自 https://blog.csdn.net/jasonwang18/article/details/73131020
轉自 http://www.cnblogs.com/lele/articles/2832885.html
RSSI(接收訊號強度)Received Signal Strength Indicator
Rss=10logP,
只需將接受到的訊號功率P代入就是接收訊號強度(靈敏度)。
[例1] 如果發射功率P為1mw,折算為dBm後為0dBm。
[例2] 對於40W的功率,按dBm單位進行折算後的值應為:
10lg(40W/1mw)=10lg(40000)=10lg4+10lg10+10lg1000=46dBm。
Rssi和接收功率有關,單位是dBm
一般為負值,反應的是訊號的衰減程度,理想狀態下(無衰減),Rssi = 0dBm,實際情況是,即使藍芽裝置捱得非常近,Rssi也只有-50dBm的強度,在傳輸過程中,不可避免要損耗。
一般情況下,經典藍芽強度
-50 ~ 0dBm 訊號強
-70 ~-50dBm 訊號中
<-70dBm 訊號弱
低功耗藍芽分四級
-60 ~ 0 4
-70 ~ -60 3
-80 ~ -70 2
<-80 1
/**
* A和n的值,需要根據實際環境進行檢測得出
*/
public class RssiUtils {
/** A 發射端和接收端相隔1米時的訊號強度 */
private static final double A_Value = 50;
/** n 環境衰減因子 */
private static final double n_Value = 2.5;
/**
* 根據Rssi的值,計算距離,單位m
* @param rssi 訊號強度,單位dB
*/
public static double getLeDistance(int rssi) {
double power = (Math.abs(rssi) - A_Value) / (10 * n_Value);
return Math.pow(10, power);
}
/**
* 經典藍芽強度
* -50 ~ 0dBm 訊號強
* -70 ~ -50dBm 訊號中
* <-70dBm 訊號弱
*/
public static byte getBredrLevel(int rssi) {
if(rssi > -50) {
return 3;
} else if(rssi > -70) {
return 2;
} else {
return 1;
}
}
/**
* 低功耗藍芽分四級
* -60 ~ 0 4
* -70 ~ -60 3
* -80 ~ -70 2
* <-80 1
*/
public static byte getLeLevel(int rssi) {
if(rssi > -60) {
return 4;
} else if(rssi > -70) {
return 3;
} else if(rssi > -80) {
return 2;
} else {
return 1;
}
}
}