Способ применения фильтрации Калмана на каждом устройстве BLE отдельно с помощью python

#python #bluetooth-lowenergy #kalman-filter

#python #bluetooth-lowenergy #kalman-filter

Вопрос:

Я пытаюсь получить отфильтрованные значения RSSI для каждого маяка BLE, используя фильтрацию Калмана. Я не могу использовать один экземпляр фильтрации Калмана на всех устройствах BLE, как сопоставить или назначить экземпляр фильтра Калмана для каждого устройства 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

Ответ №1:

Я не думаю 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 keys, чтобы сравнение адресов работало правильно.

Комментарии:

1. спасибо за решение. Мы закончили тем же способом.