繁体   English   中英

一种使用 python 分别在每个 BLE 设备上应用卡尔曼滤波的方法

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM