Понимание дистанцирования 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, и я действительно думаю, что все ресурсы в интернете (блоги, сообщения в StackOverflow) ошибаются.
davidgyoung (принятый ответ, > 100 upvotes) говорит:
обратите внимание, что термин "точность" здесь iOS говорит о расстоянии в метрах.
на самом деле, большинство людей говорят это, но я понятия не имею, почему! Документация делает это очень, очень ясно что CLBeacon.близость:
показывает точность одной Сигмы горизонтальную в метрах. используйте это свойство для различения маяков с одинаковым значением близости. Не используйте его для определения точного местоположения маяка. Значения точности могут колебаться из-за помех RF.
повторю: точность одной Сигмы в метрах. Все 10 лучших страниц в google на эту тему имеют термин "одна Сигма" только в цитате из документы, но ни один из них не анализирует термин, который является ключевым для понимания этого.
очень важно объяснить, что на самом деле большая точность Сигма. Следующие URL-адреса для начала:http://en.wikipedia.org/wiki/Standard_error, http://en.wikipedia.org/wiki/Uncertainty
в физическом мире, когда вы делаете некоторые измерения, вы всегда получаете различные результаты (из-за шума, искажения и т. д.) и очень часто результаты формируются Гауссово распределение. Существует два основных параметра, описывающих гауссову кривую:
- mean (что легко понять, это значение, для которого происходит пик кривой).
- стандартное отклонение, которое говорит, насколько широка или узка кривая. Чем уже кривая, тем лучше точность, потому что все результаты близки друг к другу. Если кривая широкая и не крутая, то это означает, что измерения одного и того же явления сильно отличаются друг от друга, поэтому измерение имеет плохое качество.
одна Сигма - это еще один способ описать, насколько узкой / широкой является гауссова кривая.
Он просто говорит, что если среднее значение измерения X, и одна Сигма равно σ, тогда 68% всех измерений будет находиться между X - σ
и X + σ
.
пример. Мы измеряем расстояние и получаем в результате гауссово распределение. Среднее значение-10m. Если σ равно 4m, то это означает, что 68% измерений были между 6m и 14m.
когда мы измеряем расстояние с маяками, мы получаем значение тарировки RSSI и 1 метра, которое позволяет нам измерить расстояние в метрах. Но каждое измерение дает разные значения, которые образуют гауссову кривую. И одна Сигма (и точность) - это точность измерения, а не расстояние!
это может ввести в заблуждение, потому что, когда мы перемещаем Маяк дальше,одна Сигма на самом деле увеличивается, потому что сигнал хуже. Но с другим маяком уровни мощности мы можем получить совершенно разные значения точности без фактического изменения расстояния. Чем выше мощность, тем меньше ошибок.
есть сообщение в блоге, которое тщательно анализирует этот вопрос: http://blog.shinetech.com/2014/02/17/the-beacon-experiments-low-energy-bluetooth-devices-in-action/
у автора есть гипотеза, что точность на самом деле расстояние. Он утверждает, что маяки от "контакта".io неисправны beacuse, когда он увеличил мощность до максимального значения, значение точности было очень мало для 1, 5 и даже 15 метров. До увеличения мощности точность была довольно близка к значениям расстояния. Я лично считаю, что это правильно, потому что чем выше уровень мощности, тем меньше влияние помех. И странно, почему маяки-разведчики так себя не ведут.
Я не говорю, что я на 100% прав, но помимо того, что я разработчик iOS, у меня есть степень в беспроводной электронике, и я думаю, что мы не должны игнорировать термин "одна Сигма" из документов, и я хотел бы чтобы начать обсуждение.
возможно, что алгоритм точности Apple просто собирает последние измерения и анализирует их гауссовское распределение. Вот как он устанавливает точность. Я бы не исключил возможность того, что они используют акселерометр информационной формы, чтобы определить, движется ли пользователь (и как быстро), чтобы сбросить предыдущие значения расстояния распределения, потому что они, безусловно, изменились.
сила выхода iBeacon измерена (откалибрирована) на расстоянии 1 метра. Предположим, что это -59 дБм (просто пример). IBeacon включит этот номер в свою рекламу LE.
прослушивающее устройство (iPhone и т. д.) измерит RSSI устройства. Предположим, например, что это, скажем, -72 дБм.
поскольку эти числа находятся в дБм, отношение мощности фактически является разницей в дБ. Итак:
ratio_dB = txCalibratedPower - RSSI
чтобы преобразовать это в линейное отношение, мы используем стандартную формулу для dB:
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 (LE) для того чтобы держать осведомленным положений, и расстояние / ряд LE Bluetooth 160ft (http://en.wikipedia.org/wiki/Bluetooth_low_energy).
расстояния до источника рекламных пакетов в формате iBeacon составляют оценивается от затухания пути сигнала, рассчитанного путем сравнения измеренной мощности принимаемого сигнала с заявленной мощностью передачи, которую передатчик должен кодировать в рекламных данных.
схема, основанная на потере пути, как это, только приблизительна и подвержена изменениям с такими вещами, как углы антенны, промежуточные объекты и, предположительно, шумная радиочастотная среда. Для сравнения, системы, действительно предназначенные для измерения расстояния (GPS, радар и т. д.), полагаются на точные измерения времени распространения, в тех же случаях даже исследуя фазу сигнала.
Как указывает Джиару, 160 футов, вероятно, за пределами предполагаемого диапазона, но это не обязательно означает, что пакет будет никогда пройдите, только не следует ожидать, что он будет работать на таком расстоянии.
это возможно, но это зависит от мощности маяка, который вы получаете, других источников rf поблизости, препятствий и других факторов окружающей среды. Лучше всего попробовать его в интересующей вас среде.
с несколькими телефонами и маяками в одном месте будет трудно измерить близость с любой высокой степенью точности. Попробуйте использовать приложение Android "B и l bluetooth le scanner", чтобы визуализировать изменения силы сигнала (расстояния) для нескольких маяков, и вы быстро обнаружите, что для обеспечения любой формы последовательного измерения близости могут потребоваться сложные адаптивные алгоритмы.
вы увидите множество решений, просто инструктирующих пользователь "пожалуйста, держите телефон здесь", чтобы уменьшить разочарование клиентов.