Понимание дистанции ibeacon

Попытка понять базовую концепцию того, как дистанцироваться от ibeacon (beacon / bluetooth le), может работать. Есть ли настоящая документация о том, насколько точно измерить ibeacon. Допустим, я на расстоянии 300 футов … возможно ли, чтобы ibeacon обнаружил это?

7 Solutions collect form web for “Понимание дистанции ibeacon”

Оценка расстояния, предоставляемая 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.proximity:

Указывает одну горизонтальную точность сигмы в метрах. Используйте это свойство, чтобы различать маяки с одинаковым значением близости. Не используйте его для определения точного местоположения маяка. Значения точности могут колебаться из-за радиопомех.

Позвольте мне повторить: одна точность сигмы в метрах . Все 10 верхних страниц в google по теме имеют термин «одна сигма» только в цитатах из документов, но ни один из них не анализирует термин, который является основным для понимания этого.

Очень важно объяснить, что на самом деле является одной сигма-точностью . Следующие URL-адреса для начала: http://en.wikipedia.org/wiki/Standard_error , http://en.wikipedia.org/wiki/Uncertainty

В физическом мире, когда вы делаете некоторые измерения, вы всегда получаете разные результаты (из-за шума, искажений и т. Д.), И очень часто результаты формируют распределение Гаусса. Существует два основных параметра, описывающих гауссову кривую:

  1. (что легко понять, это значение, для которого происходит пик кривой).
  2. стандартное отклонение, в котором говорится, насколько широкая или узкая кривая. Более узкая кривая, лучшая точность, потому что все результаты близки друг к другу. Если кривая широкая и не крутая, то это означает, что измерения одного и того же явления сильно отличаются друг от друга, поэтому измерение имеет плохое качество.

одна сигма – это еще один способ описать, насколько узкая / широкая гауссовская кривая.
Он просто говорит, что если среднее значение измерения равно 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 для точности просто собирает последние измерения и анализирует их гауссовское распределение. И именно так он устанавливает точность. Я не исключаю, что они используют акселерометр информационной формы, чтобы определить, движется ли пользователь (и насколько быстро), чтобы сбросить предыдущие значения расстояния распространения, потому что они, безусловно, изменились.

Выходная мощность 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.

iBeacon использует Bluetooth Low Energy (LE), чтобы знать места, а расстояние / диапазон Bluetooth LE составляет 160 футов ( http://en.wikipedia.org/wiki/Bluetooth_low_energy ).

Расстояния до источника пакетов рекламы в формате iBeacon оцениваются по затуханию пути сигнала, вычисленному путем сравнения измеренного уровня принимаемого сигнала с заявленной мощностью передачи, которую передатчик должен кодировать в рекламных данных.

Схема, основанная на потерях по трассе, как это, является приблизительной и может изменяться с такими вещами, как антенные углы, промежуточные объекты и, по-видимому, шумная радиочастотная среда. Для сравнения, системы, предназначенные для измерения расстояния (GPS, Radar и т. Д.), Основаны на точном измерении времени распространения, в тех же случаях даже на рассмотрении фазы сигнала.

Как указывает Цзяру, 160 футов, вероятно, выходят за пределы предполагаемого диапазона, но это не обязательно означает, что пакет никогда не пройдет, только тот не должен ожидать, что он будет работать на этом расстоянии.

Это возможно, но это зависит от выходной мощности маяка, который вы получаете, других источников радиочастот, препятствий и других факторов окружающей среды. Лучше всего попробовать это в интересующей вас среде.

С несколькими телефонами и маяками в одном и том же месте будет трудно измерить близость с любой высокой степенью точности. Попробуйте использовать приложение «b и l bluetooth le scanner» для Android, чтобы визуализировать различия в силе сигнала (расстояния), для нескольких маяков, и вы быстро обнаружите, что сложные, адаптивные алгоритмы могут потребоваться для обеспечения любой формы последовательного измерения близости ,

Вы увидите множество решений, просто инструктирующих пользователя «пожалуйста, держите телефон здесь», чтобы уменьшить разочарование клиентов.

  • iBeacons, сгенерированные под Mavericks OSX, но имеют несколько разных байтов от iOS
  • CLLocationManager kCLErrorDomain Codes?
  • Как узнать ближайший iBeacon
  • iBeacon, проходящий через стену
  • как использовать ibeacon при применении в bacground и перезагрузке iphone
  • iBeacon: В чем разница между didEnterRegion и didDetermineState (CLRegionStateInside)
  • Метод didRangeBeacons не вызывается при отображении Off
  • Правильный способ найти ближайший маяк
  • locationManager: rangeBeaconsDidFailForRegion: withError: kCLErrorDomain 16
  • CBPeripheralManager Задержки stopРеклама / Диспетчер местоположения остановлены iBeacon
  • Обнаружение iBeacons с различными UUID
  • Interesting Posts

    AutoLayout + RTL + выравнивание текста UILabel

    Использование 32-разрядной библиотеки в 64-битном приложении

    Получение одинаковой ширины и высоты экрана для портретного и ландшафтного режима

    Какие NSData могут отображать UITextView из NSTextAttachment?

    Objective-C проходит по ссылке vs pass by pointer. Какая разница? И зачем нам это вообще нужно?

    iOS веб-приложение отключить смещение прокрутки

    UICollectionViewFlowLayout minimumInteritemSpacing не работает

    Использование памяти Core Data при импорте большого набора данных

    Полный список шаблонов формата даты в obj-c для iOS

    Проблема с анимацией клавиатуры TableView с автозапуском

    Непоследовательное выделение выделенного UITableViewCell

    UIApplicationExitOnSuspend не приостанавливает фон

    Должен ли я включать TestFlight SDK в мое приложение, если я просто хочу отправить бета-тест?

    как дать отдельный цвет для клеток, которые имеют uilocalnotification

    No Sound in ios 8 Синтаксический разбор

    PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.