Розуміння дистанції ібекона


113

Намагаючись зрозуміти основну концепцію того, як може працювати дистанція з ibeacon (маяк / Bluetooth-lowenergy / BLE). Чи є справжня документація про те, наскільки точно може виміряти ібекон. Скажімо, я за 300 футів ... чи можливо ібекон виявити це?

Спеціально для v4 &. v5 та з iOS, але взагалі будь-який BLE-пристрій.

Як частота та пропускна здатність Bluetooth впливають на це? Чи можуть пристрої маяка збільшувати або обмежувати відстань / покращувати на основі BLE?

тобто

               | Range       | Freq       | T/sec      | Topo       |      
               |–—–––––––––––|–—––––––––––|–—––––––––––|–—––––––––––|
Bluetooth v2.1 | Up to 100 m | < 2.481ghz | < 2.1mbit  | scatternet |
               |-------------|------------|------------|------------|
Bluetooth v4   |     ?       | < 2.481ghz | < 305kbit  | mesh       |
               |-------------|------------|------------|------------|
Bluetooth v5   |     ?       | < 2.481ghz | < 1306kbit | mesh       |

Відповіді:


223

Оцінка відстані, що надається iOS, базується на співвідношенні сили сигналу маяка (rssi) над каліброваною потужністю передавача (txPower). TxPower - відома вимірювана сила сигналу в rssi на відстані 1 метра. Кожен маяк повинен бути відкалібрований із цим значенням txPower, щоб забезпечити точну оцінку відстані.

Хоча оцінки відстані корисні, вони не є ідеальними і вимагають контролювати інші змінні. Не забудьте прочитати про складності та обмеження, перш ніж зловживати цим.

Коли ми будували бібліотеку Android iBeacon, нам довелося придумати власний незалежний алгоритм, оскільки вихідний код iOS CoreLocation недоступний. Ми виміряли купу вимірювань rssi на відомих відстанях, потім зробили найкращу криву, що відповідає нашим точкам даних. Алгоритм, який ми придумали, показаний нижче як код Java.

Зауважте, що термін "точність" тут iOS говорить на відстань у метрах. Ця формула не є досконалою, але вона приблизно відповідає тому, що робить iOS.

protected static double calculateAccuracy(int txPower, double rssi) {
  if (rssi == 0) {
    return -1.0; // if we cannot determine accuracy, return -1.
  }

  double ratio = rssi*1.0/txPower;
  if (ratio < 1.0) {
    return Math.pow(ratio,10);
  }
  else {
    double accuracy =  (0.89976)*Math.pow(ratio,7.7095) + 0.111;    
    return accuracy;
  }
}   

Примітка . Значення 0,89976, 7,7095 і 0,111 - це три константи, обчислені при вирішенні кривої найкращого прилягання до наших виміряних точок даних. YMMV


4
Чудова відповідь і код Девіда. Звідки береться значення txPower? Це значення калібрування, зроблене на стороні клієнта (приймача)? Або це метрика, яку можна отримати від маяка?
rmooney

14
для чого значення 0,89976, 7,7095 та 0,111?
мальхал

4
З цим рівнянням я закінчую 84457991114.574738, коли маяк лежить на 1/4 від мого телефону.
jdog

1
Еддістоун - 0 м, рік. Ділення проти віднімання пояснюється тим, що в цьому випадку ми не використовуємо логарифмічну функцію. Віднімання не спрацювало для відповідного нами кривої.
davidgyoung

1
@davidgyoung, будь ласка, поділіться формулою найкращої кривої чи будь-чим, за допомогою чого ми зможемо дізнатися ці 3 значення для нашого пристрою?
Paresh Mayani

77

Я дуже ретельно досліджую питання точності / rssi / близькості з iBeacons, і я дійсно думаю, що всі ресурси в Інтернеті (блоги, дописи в StackOverflow) помиляються.

davidgyoung (прийнята відповідь,> 100 нагород) говорить:

Зауважте, що термін "точність" тут iOS говорить на відстань у метрах.

Насправді, більшість людей це кажуть, але я поняття не маю чому! З документації дуже ясно, що CLBeacon.proximity:

Позначає горизонтальну точність однієї сигми в метрах. Використовуйте цю властивість для розмежування маяків з однаковим значенням близькості. Не використовуйте його для визначення точного місця розташування маяка. Значення точності можуть коливатися через радіоперешкоди.

Повторюсь: одна точність сигми в метрах . На всіх 10 найпопулярніших сторінках Google у цій темі є термін "одна сигма" лише у цитатах із документів, але жодна з них не аналізує термін, який є основним для розуміння цього.

Дуже важливо пояснити, що насправді одна сигма точність . Наступні URL-адреси для початку: http://en.wikipedia.org/wiki/Standard_error , http://en.wikipedia.org/wiki/Упевненість

У фізичному світі, коли ви робите деякі вимірювання, ви завжди отримуєте різні результати (через шум, спотворення тощо), і дуже часто результати утворюють Гауссова розподіл. Є два основні параметри, що описують криву Гаусса:

  1. середнє значення (яке легко зрозуміти, це значення, для якого відбувається пік кривої).
  2. стандартне відхилення, яке говорить про те, наскільки широка або вузька крива. Чим вужча крива, тим краща точність, тому що всі результати близькі один до одного. Якщо крива широка і не крута, то це означає, що вимірювання одного і того ж явища сильно відрізняються один від одного, тому вимірювання має погану якість.

одна сигма - це ще один спосіб описати, наскільки вузькою / широкою є гауссова крива.
Це просто говорить про те, що якщо середнє значення вимірювання дорівнює X, а одна сигма - σ, то 68% всіх вимірювань будуть між X - σі X + σ.

Приклад. Ми вимірюємо відстань і отримуємо в результаті гауссова розподіл. Середнє значення - 10м. Якщо σ дорівнює 4м, то це означає, що 68% вимірювань були між 6м і 14м.

Коли ми вимірюємо відстань за маяками, ми отримуємо значення RSSI та калібрування 1 метра, які дозволяють вимірювати відстань у метрах. Але кожне вимірювання дає різні значення, які утворюють гауссова крива. І одна сигма (і точність) - це точність вимірювання, а не відстань!

Це може ввести в оману, тому що, коли ми рухаємо маяк далі, одна сигма насправді збільшується, оскільки сигнал гірший. Але при різних рівнях потужності маяка ми можемо отримати абсолютно різні значення точності, не змінюючи фактично відстань. Чим вище потужність, тим менше помилок.

Є запис у блозі, який ретельно аналізує питання: http://blog.shinetech.com/2014/02/17/the-beacon-experiment-low-energy-bluetooth-devices-in-action/

Автор має гіпотезу, що точність насправді відстань. Він стверджує, що маяки з Contact.io є несправними, оскільки він збільшував потужність до максимального значення, значення точності було дуже малим протягом 1, 5 і навіть 15 метрів. До збільшення потужності точність була досить близькою до значень відстані. Я особисто вважаю, що це правильно, адже чим вище рівень потужності, тим менший вплив перешкод. І дивно, чому маяки Естімота не так поводяться.

Я не кажу, що я на 100% прав, але окрім того, що я розробник iOS, я маю ступінь бездротової електроніки, і я думаю, що ми не повинні ігнорувати термін «одна сигма» у документах, і я хотів би почати обговорення цього питання.

Можливо, алгоритм Apple для точності просто збирає останні вимірювання та аналізує гауссова розподіл їх. І саме так воно встановлює точність. Я б не виключав можливості, що вони використовують акселерометр для форми інформації, щоб виявити, чи рухається користувач (і як швидко), щоб скинути попередні значення відстані розподілу, оскільки вони, безумовно, змінилися.


Відмінне введення в "сигма" співвідношення. Крім того, було б дивно, що для вун (навіть Apple Geek) використовувати назву змінної "точність", коли вони означали "відстань". Кожне визначення "відстані" або "розташування" RSSI має "похибку" (наприклад, ви тут +/- це дуже багато). Тож має сенс їх бібліотека матиме як функцію для "відстані", так і функцію "точності".
Джессі Чісгольм

@ r00dY - це геніальне пояснення. Тепер лише питання, чи можете ви допомогти. У мене є дані калібрування для маяка, виміряного на 1м, 2м ... 15м, ... 20м тощо. У мене є середні значення відстані для кожної відстані. Тепер, від делегата менеджера місцеположення, коли ми отримуємо такі дані маяка, як маяк мажор, мінор, rssi тощо, чи доцільно використовувати відстань, отриману від вищезазначеної калібрування, яку я пояснив? Будь ласка, підкажіть, будь-яка допомога буде вдячна. Заздалегідь спасибі.
Алкеш Фудані

Apple accuracy- це функція як rssiі tx power. Не зовсім неможливо, що Естімоте вирішив змінити accuracyфункцію і почав надавати tx powerтакі значення, щоб зчитування accuracyоцінювало відстань. Це забезпечує більш простий досвід для розробника для оцінки відстані, але порушує визначення Apple accuracy. Інші бренди можуть залишатися більш вірними визначенням Apple accuracyі фактично дають "оцінку 1 метр", а не зворотну інженерію, яка accuracyвизначає відстань.
Чуйний

63

Вихідна потужність iBeacon вимірюється (калібрується) на відстані 1 метра. Припустимо, що це -59 дБм (лише приклад). IBeacon включить цей номер як частину своєї реклами LE.

Пристрій прослуховування (iPhone тощо) вимірює RSSI пристрою. Припустимо, наприклад, що це, скажімо, -72 дБм.

Оскільки ці числа знаходяться в дБм, відношення потужності насправді є різницею в дБ. Так:

ratio_dB = txCalibratedPower - RSSI

Щоб перетворити це в лінійне відношення, ми використовуємо стандартну формулу для дБ:

ratio_linear = 10 ^ (ratio_dB / 10)

Якщо припустити збереження енергії, то сила сигналу повинна впасти як 1 / r ^ 2. Так:

power = power_at_1_meter / r^2. Розв’язуючи r, отримуємо:

r = sqrt(ratio_linear)

У Javascript код буде виглядати приблизно так:

function getRange(txCalibratedPower, rssi) {
    var ratio_db = txCalibratedPower - rssi;
    var ratio_linear = Math.pow(10, ratio_db / 10);

    var r = Math.sqrt(ratio_linear);
    return r;
}

Зауважте, що якщо ви знаходитесь у сталевій будівлі, то, можливо, з’являться внутрішні віддзеркалення, завдяки яким сигнал затухає повільніше, ніж на 1 / r ^ 2. Якщо сигнал проходить через тіло людини (воду), то сигнал буде ослабленим. Дуже ймовірно, що антена не має однакового посилення у всіх напрямках. Металеві предмети в кімнаті можуть створювати дивні візерунки перешкод. І т.д. тощо ... YMMV.


з цікавості: як ratio_dB = txCalibratedPower - RSSIвиходить? Оскільки обидва заходи знаходяться в дБм, я б припускав, що результат також буде в дБм?
BlackWolf


3

Відстань до джерела IBeacon-відформатовані пакети реклами будуть оцінені з ослаблення шляху сигналу, обчисленого шляхом порівняння вимірюваної потужності прийнятого сигналу з заявленою потужністю передачі, яку передавач повинен кодувати в рекламних даних.

Така схема, що базується на втратах шляху, є лише приблизною і може змінюватися в таких речах, як кути антени, об'єкти, що втручаються, і, імовірно, галасливе радіочастотне середовище. Для порівняння, системи, дійсно призначені для вимірювання відстані (GPS, радіолокатор тощо), покладаються на точні вимірювання часу поширення, в тих же випадках навіть вивчають фазу сигналу.

Як зазначає Джіару, 160 футів, ймовірно, перевищують запланований діапазон, але це не обов'язково означає, що пакет ніколи не пройде , лише той не повинен очікувати, що він працює на цій відстані.


1

Це можливо, але це залежить від виходу потужності радіомаяка, який ви приймаєте, інших джерел випромінювання поблизу, перешкод та інших факторів навколишнього середовища. Найкраще - спробувати це в оточенні, яке тебе цікавить.


1

Якщо кілька телефонів і маяків в одному місці, близькості буде важко виміряти з будь-яким високим ступенем точності. Спробуйте скористатися програмою Android "b and l bluetooth le scanner", щоб візуалізувати зміни сигналу (відстань) для декількох маяків, і ви швидко дізнаєтесь, що складні адаптивні алгоритми можуть знадобитися для надання будь-якої форми послідовного вимірювання близькості .

Ви побачите безліч рішень, просто вказуючи користувачеві "будь ласка, тримайте тут свій телефон", щоб зменшити розчарування клієнтів.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.