#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. спасибо за решение. Мы закончили тем же способом.