RSSI(Received Signal Strength Indication)
测距算法公式:
d
=
1
0
a
b
s
(
R
S
S
I
)
−
A
10
×
n
d=10^{\frac{abs(RSSI) - A}{10 \times n}}
d=1010×nabs(RSSI)−A
符号 | 说明 |
---|---|
d | 计算所得距离(单位:m) |
RSSI | 接收信号强度(单位:dB) |
A | 发射端和接收端相隔1米时的信号强度 |
n | 环境衰减因子 |
测距实践:
1.标定A值和n值:多组值可以同时标定A和n值
2.实时获取RSSI值,求出瞬时距离
3.各种滤波算法(平均时间/平均距离/加权等)
蓝牙硬件:传感器漂移/单天线/多天线方案
环境因素:空旷场地/地下停车场/信号遮蔽阻挡反射
连接因素:不同品牌的手机(需要适配不同类型)
三维空间:多角度/多高度/多朝向
应用场景:
1.智能门禁
2.蓝牙钥匙
3.室内定位
4.智能防丢
标定方案:
1.测试幕布及支架/不同品牌的手机
2.多方位多角度多高度采集数据
3.根据采集的数据计算A值和n值
4.标定算法确定A值和n值
采集两组不同的d值与RSSI值,分别为(d1, RSSI1), (d2, RSSI2):
根据距离与信号强度计算n值公式:
n
=
a
b
s
(
R
S
S
I
1
)
−
a
b
s
(
R
S
S
I
2
)
10
×
(
lg
d
1
−
lg
d
2
)
n = \frac{abs(RSSI1)-abs(RSSI2)}{10 \times (\lg d1 - \lg d2)}
n=10×(lgd1−lgd2)abs(RSSI1)−abs(RSSI2)
根据距离与信号强度计算A值公式:
A
=
lg
d
1
×
a
b
s
(
R
S
S
I
2
)
−
lg
d
2
×
a
b
s
(
R
S
S
I
1
)
lg
d
1
−
lg
d
2
A = \frac{\lg d1 \times abs(RSSI2) - \lg d2 \times abs(RSSI1)}{\lg d1 - \lg d2}
A=lgd1−lgd2lgd1×abs(RSSI2)−lgd2×abs(RSSI1)
当n值确定后计算A值公式:
A
=
a
b
s
(
R
S
S
I
)
−
10
×
n
×
lg
d
A = abs(RSSI) - 10 \times n \times \lg d
A=abs(RSSI)−10×n×lgd
因n值及d值均确定,实际A值只与RSSI值相关
Python
import math
def rssi_cal_d(RSSI, A, n):
return pow(10, float((abs(RSSI) - A) / (10 * n)))
def rssi_cal_A(d1, RSSI1, d2, RSSI2):
return (math.log10(d1) * abs(RSSI2) - math.log10(d2) * abs(RSSI1)) / (math.log10(d1) - math.log10(d2))
def rssi_cal_n(d1, RSSI1, d2, RSSI2):
return (abs(RSSI1) - abs(RSSI2)) / (10 * (math.log10(d1) - math.log10(d2)))
t_d1 = 1
t_d2 = 2
t_rssi1 = 1
t_rssi2 = 2
print(rssi_cal_A(t_d1, t_rssi1, t_d2, t_rssi2))
print(rssi_cal_n(t_d1, t_rssi1, t_d2, t_rssi2))