Попытка понять основную концепцию того, как можно дистанцироваться от ibeacon (beacon/bluetooth-le/ble). Есть ли настоящая документация о том, насколько точно измерить ibeacon. Допустим, я на расстоянии 300 футов... возможно ли, чтобы ibeacon обнаружил это?
Понимание дистанции ibeacon
Ответ 1
Оценка расстояния, предоставляемая 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
Ответ 2
Выходная мощность 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. Если сигнал проходит через человеческий организм (вода), тогда сигнал будет ослаблен. Очень вероятно, что антенна не имеет равного усиления во всех направлениях. Металлические объекты в комнате могут создавать странные интерференционные картины. Etc и т.д. YMMV.
Ответ 3
Я очень тщательно изучаю вопрос о точности/rssi/близости с iBeacons, и я действительно думаю, что все ресурсы в Интернете (блоги, сообщения в StackOverflow) ошибочны.
davidgyoung (принятый ответ, > 100 upvotes) говорит:
Обратите внимание, что здесь термин "точность" - это iOS, говорящий о расстоянии в метрах.
Собственно, большинство людей это говорит, но я понятия не имею, почему! Документация очень четко показывает, что CLBeacon.proximity:
Указывает точность горизонтальной сигмы в метрах. Используйте это свойство, чтобы различать маяки с одинаковым значением близости. Не используйте его для определения точного местоположения маяка. Значения точности могут колебаться из-за радиопомех.
Позвольте мне повторить: одна сигма точность в метрах. Все 10 верхних страниц в google по теме имеют термин "одна сигма" только в цитатах из документов, но ни один из них не анализирует термин, который является ключевым для понимания этого.
Очень важно объяснить, что на самом деле одна сигма точность. Следующие URL-адреса начинаются с: http://en.wikipedia.org/wiki/Standard_error, http://en.wikipedia.org/wiki/Uncertainty
В физическом мире, когда вы делаете какое-то измерение, вы всегда получаете разные результаты (из-за шума, искажения и т.д.), и очень часто результаты формируют распределение Гаусса. Существует два основных параметра, описывающих гауссову кривую:
- означает (что легко понять, это значение, для которого происходит пик кривой).
- стандартное отклонение, в котором говорится, насколько широкая или узкая кривая. Более узкая кривая, лучшая точность, потому что все результаты близки друг к другу. Если кривая широкая и не крутая, то это означает, что измерения одного и того же явления сильно отличаются друг от друга, поэтому измерение имеет плохое качество.
одна сигма - это еще один способ описать, насколько узкая/широкая гауссова кривая.
Он просто говорит, что если среднее значение измерения равно X, а одна сигма равна σ, то 68% всех измерений будут находиться между X - σ
и X + σ
.
Пример. В результате мы измеряем расстояние и получаем гауссовское распределение. Среднее значение составляет 10 м. Если σ равно 4m, то это означает, что 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 для точности просто собирает последние измерения и анализирует их гауссовское распределение. И это то, как он устанавливает точность. Я не исключаю, что они используют акселерометр информационной формы, чтобы определить, движется ли пользователь (и насколько быстро), чтобы reset предыдущие значения расстояния распространения, потому что они, безусловно, изменились.
Ответ 4
iBeacon использует Bluetooth Low Energy (LE), чтобы знать местоположения, а расстояние/диапазон Bluetooth LE составляет 160 футов (http://en.wikipedia.org/wiki/Bluetooth_low_energy).
Ответ 5
Расстояния до источника рекламных пакетов, отформатированных в iBeacon, оценены из затухания тракта сигнала, вычисленного путем сравнения измеренного уровня принимаемого сигнала с заявленной мощностью передачи, которую передатчик должен кодировать в рекламе данные.
Схема, основанная на потерях по трассе, как это, является приблизительной и может изменяться с такими вещами, как антенные углы, промежуточные объекты и, по-видимому, шумовая радиочастотная среда. Для сравнения, системы, предназначенные для измерения расстояния (GPS, Radar и т.д.), Полагаются на точные измерения времени распространения, в тех же случаях даже на изучение фазы сигнала.
Как указывает Цзяру, 160 фут, вероятно, выходят за пределы предполагаемого диапазона, но это не обязательно означает, что пакет никогда не пройдет, только тот не должен ожидать, что он будет работать на этом расстоянии.
Ответ 6
Это возможно, но это зависит от выходной мощности маяка, который вы получаете, других источников радиочастот, поблизости от препятствий и других факторов окружающей среды. Лучше всего попробовать это в интересующей вас среде.
Ответ 7
С несколькими телефонами и маяками в одном и том же месте будет трудно измерить близость с любой высокой степенью точности. Попробуйте использовать приложение "b и l bluetooth le scanner" для Android, чтобы визуализировать различия в силе сигнала (расстояния), для нескольких маяков, и вы быстро обнаружите, что сложные, адаптивные алгоритмы могут потребоваться для обеспечения любой формы последовательного измерения близости.
Вы увидите множество решений, просто инструктирующих пользователя "пожалуйста, держите телефон здесь", чтобы уменьшить разочарование клиентов.