Понимание дистанции между ibeacon
Попытка понять основную концепцию того, как может работать дистанцирование с помощью ibeacon (beacon/ bluetooth-le/ble). Есть ли какие-либо достоверные документы о том, как далеко может измерять ibeacon. Допустим, я на расстоянии 300 футов... Может ли ibeacon обнаружить это?
7 ответов
Оценка расстояния, предоставленная iOS, основана на отношении силы сигнала iBeacon (rssi) к калиброванной мощности передатчика (txPower). TxPower - известная измеренная сила сигнала в rssi на расстоянии 1 метра. Каждый iBeacon должен быть откалиброван с этим значением 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
Я очень тщательно изучаю вопрос точности /rssi/ близости с iBeacons и действительно считаю, что все ресурсы в Интернете (блоги, сообщения в Stackru) ошибаются.
davidgyoung (принятый ответ, > 100 голосов) говорит:
Обратите внимание, что термин "точность" здесь означает, что iOS означает расстояние в метрах.
На самом деле, большинство людей говорят это, но я понятия не имею, почему! Документация очень ясно показывает, что CLBeacon.proximity:
Указывает горизонтальную точность одной сигмы в метрах. Используйте это свойство, чтобы различать маяки с одинаковым значением близости. Не используйте его для определения точного местоположения маяка. Значения точности могут колебаться из-за радиочастотных помех.
Позвольте мне повторить: одна сигма точность в метрах. Все 10 главных страниц в Google по этому вопросу имеют термин "одна сигма" только в цитате из документов, но ни одна из них не анализирует термин, который является ключевым для понимания этого.
Очень важно объяснить, что на самом деле является одной сигма точности. Следующие URL для начала: http://en.wikipedia.org/wiki/Standard_error, http://en.wikipedia.org/wiki/Uncertainty
В физическом мире, когда вы проводите измерения, вы всегда получаете разные результаты (из-за шума, искажений и т. Д.), И очень часто результаты формируют распределение Гаусса. Существует два основных параметра, описывающих кривую Гаусса:
- среднее (что легко понять, это значение, для которого возникает пик кривой).
- стандартное отклонение, которое говорит, насколько широкая или узкая кривая. Чем уже кривая, тем лучше точность, потому что все результаты близки друг к другу. Если кривая широкая и не крутая, это означает, что измерения одного и того же явления очень сильно отличаются друг от друга, поэтому измерение имеет плохое качество.
одна сигма - это другой способ описать, насколько узкой / широкой является гауссова кривая.
Это просто говорит о том, что если среднее значение измерения равно X, а одна сигма равна σ, то 68% всех измерений будут между X - σ
а также X + σ
,
Пример. Мы измеряем расстояние и в результате получаем гауссово распределение. Среднее значение 10м. Если σ равно 4 м, то это означает, что 68% измерений были между 6 м и 14 м.
Когда мы измеряем расстояние с помощью маяков, мы получаем RSSI и 1-метровое калибровочное значение, которое позволяет нам измерять расстояние в метрах. Но каждое измерение дает разные значения, которые образуют гауссову кривую. И одна сигма (и точность) - точность измерения, а не расстояние!
Это может вводить в заблуждение, потому что, когда мы перемещаем маяк дальше, одна сигма фактически увеличивается, потому что сигнал хуже. Но с разными уровнями мощности маяка мы можем получить совершенно разные значения точности без фактического изменения расстояния. Чем выше мощность, тем меньше ошибка.
В блоге есть подробный анализ этого вопроса: http://blog.shinetech.com/2014/02/17/the-beacon-experiments-low-energy-bluetooth-devices-in-action/
У автора есть гипотеза, что точность на самом деле является расстоянием. Он утверждает, что маяки от Kontakt.io являются ошибочными, потому что он увеличил мощность до максимального значения, значение точности было очень маленьким для 1, 5 и даже 15 метров. До увеличения мощности точность была довольно близка к значениям расстояния. Я лично считаю, что это правильно, потому что чем выше уровень мощности, тем меньше влияние помех. И странно, почему маяки Estimote не ведут себя таким образом.
Я не говорю, что я на 100% прав, но кроме того, что я разработчик для iOS, у меня есть степень по беспроводной электронике, и я думаю, что мы не должны игнорировать термин "одна сигма" из документации, и я хотел бы начать обсуждение этого.
Вполне возможно, что алгоритм точности Apple просто собирает последние измерения и анализирует их распределение по Гауссу. И вот как это устанавливает точность. Я не исключил бы, что они используют акселерометр информационной формы, чтобы определить, движется ли пользователь (и насколько быстро), чтобы сбросить предыдущие значения расстояния распределения, потому что они, безусловно, изменились.
Выходная мощность 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.
iBeacon использует Bluetooth Low Energy(LE) для отслеживания местоположения, а расстояние / расстояние Bluetooth LE составляет 160 футов ( http://en.wikipedia.org/wiki/Bluetooth_low_energy).
Расстояния до источника рекламных пакетов в формате iBeacon оцениваются по затуханию пути сигнала, рассчитанному путем сравнения измеренной мощности принятого сигнала с заявленной мощностью передачи, которую передатчик должен кодировать в рекламных данных.
Подобная схема, основанная на потерях на трассе, является только приблизительной и может изменяться в зависимости от таких факторов, как углы антенны, промежуточные объекты и, вероятно, шумовая радиочастотная среда. Для сравнения, системы, действительно разработанные для измерения расстояния (GPS, радар и т. Д.), Основаны на точных измерениях времени распространения, в тех же случаях даже при проверке фазы сигнала.
Как указывает Джиару, 160 футов, вероятно, находятся за пределами предполагаемого диапазона, но это не обязательно означает, что пакет никогда не пройдет, только то, что не следует ожидать, что он будет работать на таком расстоянии.
Это возможно, но это зависит от выходной мощности радиомаяка, который вы получаете, других источников РЧ поблизости, препятствий и других факторов окружающей среды. Лучше всего попробовать это в среде, которая вас интересует.
При наличии нескольких телефонов и маяков в одном месте будет трудно измерить близость с какой-либо высокой степенью точности. Попробуйте использовать приложение Android "b и l bluetooth le scanner" для визуализации изменений уровня сигнала (расстояния) для нескольких маяков, и вы быстро обнаружите, что могут потребоваться сложные адаптивные алгоритмы для обеспечения любой формы последовательного измерения близости,
Вы увидите множество решений, просто инструктирующих пользователя "пожалуйста, держите свой телефон здесь", чтобы уменьшить разочарование клиентов.