[英]A way to apply Kalman filtering on each BLE device separately using python
我正在尝试使用卡尔曼滤波获取每个 BLE 信标的滤波 RSSI 值。 我不能在所有 BLE 设备上使用单个卡尔曼滤波器实例,如何 map 或为每个 BLE 设备分配一个卡尔曼滤波器实例。 我知道它与地图有关,但无法弄清楚如何实现它。 任何帮助将非常感激。
from bluepy.btle import Scanner
from kalman import KalmanFilter
scanner = Scanner().withDelegate(ScanDelegate())
blemacid = ["d7:b1:41:09:ca:c2","ed:9d:41:19:4c:43","fe:98:f1:d3:85:4f","de:0d:34:4d:66:5e"]
kalmanfilter=map(KalmanFilter(0.008,0.1),blemacid)
while(True):
devices=scanner.scan(3.0)
for device in devices:
if device.addr in blemacid:
print ("DEV={} RSSI ={}".format(device.addr,kalmanfilter.filter(device.rssi)))
卡尔曼滤波器实现在这里kalman filer
我不认为map
是解决这个问题的正确方法。 存储在字典中并由设备地址键入的过滤器实例似乎是更好的解决方案。 例如:
from bluepy.btle import Scanner
from kalman import KalmanFilter
scanner = Scanner().withDelegate(ScanDelegate())
blemacid ={"d7:b1:41:09:ca:c2": KalmanFilter(0.008,0.1),
"ed:9d:41:19:4c:43": KalmanFilter(0.008,0.1),
"fe:98:f1:d3:85:4f": KalmanFilter(0.008,0.1),
"de:0d:34:4d:66:5e": KalmanFilter(0.008,0.1)}
while(True):
devices=scanner.scan(3.0)
for device in devices:
if device.addr in blemacid.keys():
print("DEV={} RSSI ={}".format(device.addr,blemacid[device.addr].filter(device.rssi)))
我还要小心device.addr
以小写形式返回地址,与blemacid
键中的地址相同,因此地址比较可以正常工作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.