Entendiendo el distanciamiento de ibeacon

113

Intentar comprender un concepto básico de cómo puede funcionar el distanciamiento con ibeacon (baliza / Bluetooth-baja energía / BLE). ¿Existe alguna documentación verdadera sobre qué tan lejos puede medir exactamente un ibeacon? Digamos que estoy a 300 pies de distancia ... ¿es posible que un ibeacon detecte esto?

Específicamente para v4 y. v5 y con iOS pero generalmente cualquier dispositivo BLE.

¿Cómo afecta esto la frecuencia y el rendimiento de Bluetooth? ¿Pueden los dispositivos de baliza mejorar o restringir la distancia / mejorar el BLE subyacente?

es decir

               | 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       |
rambossa
fuente

Respuestas:

223

La estimación de distancia proporcionada por iOS se basa en la relación entre la intensidad de la señal de la baliza (rssi) y la potencia del transmisor calibrado (txPower). El txPower es la intensidad de la señal medida conocida en rssi a 1 metro de distancia. Cada baliza debe calibrarse con este valor txPower para permitir estimaciones de distancia precisas.

Si bien las estimaciones de distancia son útiles, no son perfectas y requieren que controle otras variables. Asegúrese de leer sobre las complejidades y limitaciones antes de hacer un mal uso de esto.

Cuando estábamos construyendo la biblioteca de Android iBeacon, tuvimos que idear nuestro propio algoritmo independiente porque el código fuente de iOS CoreLocation no está disponible. Medimos un montón de mediciones de rssi a distancias conocidas, luego hicimos una curva de mejor ajuste para coincidir con nuestros puntos de datos. El algoritmo que se nos ocurrió se muestra a continuación como código Java.

Tenga en cuenta que el término "precisión" aquí significa que iOS habla de distancia en metros. Esta fórmula no es perfecta, pero se aproxima aproximadamente a lo que hace 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;
  }
}   

Nota: Los valores 0.89976, 7.7095 y 0.111 son las tres constantes calculadas al resolver la curva de mejor ajuste a nuestros puntos de datos medidos. YMMV

davidgyoung
fuente
4
Gran respuesta y código David. ¿De dónde proviene el valor de txPower? ¿Es un valor de calibración realizado en el lado del cliente (receptor)? ¿O es una métrica que puede obtener de una baliza?
rmooney
14
¿Para qué son los valores 0.89976, 7.7095 y 0.111?
Malhal
4
Con esta ecuación termino con 84457991114.574738 cuando la baliza está en 1/4 de mi teléfono.
jdog
1
Eddystone es un punto de referencia de 0 m, años. La división frente a la resta se debe a que no estamos usando una función logarítmica en este caso. Restar no funcionó para el ajuste de curva que usamos.
davidgyoung
1
@davidgyoung, ¿puede compartir la mejor fórmula de ajuste de curva o cualquier cosa a través de la cual podamos averiguar estos 3 valores para nuestro dispositivo?
Paresh Mayani
77

Estoy investigando muy a fondo el asunto de la precisión / rssi / proximidad con iBeacons y realmente creo que todos los recursos en Internet (blogs, publicaciones en StackOverflow) se equivocan.

davidgyoung (respuesta aceptada,> 100 votos a favor) dice:

Tenga en cuenta que el término "precisión" aquí significa que iOS habla de distancia en metros.

En realidad, la mayoría de la gente dice esto, ¡pero no tengo idea de por qué! La documentación deja muy claro que CLBeacon.proximity:

Indica la precisión horizontal de un sigma en metros. Utilice esta propiedad para diferenciar balizas con el mismo valor de proximidad. No lo use para identificar una ubicación precisa para la baliza. Los valores de precisión pueden fluctuar debido a la interferencia de RF.

Permítanme repetir: una precisión sigma en metros . Las 10 páginas principales de Google sobre el tema tienen el término "un sigma" solo entre comillas de documentos, pero ninguna de ellas analiza el término, que es fundamental para entender esto.

Es muy importante explicar qué es realmente una precisión sigma . Siguientes URL para empezar: http://en.wikipedia.org/wiki/Standard_error , http://en.wikipedia.org/wiki/Uncertainty

En el mundo físico, cuando realiza alguna medición, siempre obtiene resultados diferentes (debido al ruido, la distorsión, etc.) y muy a menudo los resultados de la distribución gaussiana. Hay dos parámetros principales que describen la curva gaussiana:

  1. media (que es fácil de entender, es el valor para el que se produce el pico de la curva).
  2. desviación estándar, que indica qué tan ancha o estrecha es la curva. Cuanto más estrecha sea la curva, mejor será la precisión, porque todos los resultados están próximos entre sí. Si la curva es ancha y no empinada, significa que las mediciones del mismo fenómeno difieren mucho entre sí, por lo que la medición tiene mala calidad.

un sigma es otra forma de describir qué tan estrecha / ancha es la curva gaussiana.
Simplemente dice que si la media de la medición es X y un sigma es σ, entonces el 68% de todas las mediciones estarán entre X - σy X + σ.

Ejemplo. Medimos la distancia y obtenemos una distribución gaussiana como resultado. La media es de 10 m. Si σ es 4 m, entonces significa que el 68% de las mediciones fueron entre 6 my 14 m.

Cuando medimos la distancia con balizas, obtenemos RSSI y un valor de calibración de 1 metro, que nos permite medir la distancia en metros. Pero cada medición da valores diferentes, que forman una curva gaussiana. ¡Y un sigma (y precisión) es la precisión de la medición, no la distancia!

Puede ser engañoso, porque cuando alejamos la baliza, un sigma realmente aumenta porque la señal es peor. Pero con diferentes niveles de potencia de baliza, podemos obtener valores de precisión totalmente diferentes sin cambiar la distancia. A mayor potencia, menor error.

Hay una publicación de blog que analiza a fondo el asunto: http://blog.shinetech.com/2014/02/17/the-beacon-experiments-low-energy-bluetooth-devices-in-action/

El autor tiene la hipótesis de que la precisión es en realidad distancia. Afirma que las balizas de Kontakt.io están defectuosas porque cuando aumentó la potencia al valor máximo, el valor de precisión fue muy pequeño para 1, 5 e incluso 15 metros. Antes de aumentar la potencia, la precisión estaba bastante cerca de los valores de distancia. Personalmente, creo que es correcto, porque a mayor nivel de potencia, menor impacto de interferencia. Y es extraño por qué las balizas de Estimote no se comportan de esta manera.

No estoy diciendo que esté 100% en lo cierto, pero además de ser desarrollador de iOS, tengo un título en electrónica inalámbrica y creo que no deberíamos ignorar el término "un sigma" de los documentos y me gustaría comenzar a discutirlo.

Es posible que el algoritmo de precisión de Apple solo recopile mediciones recientes y analice la distribución gaussiana de las mismas. Y así establece la precisión. No excluiría la posibilidad de que utilicen un acelerómetro de formulario de información para detectar si el usuario se está moviendo (y qué tan rápido) para restablecer los valores de distancia de distribución anteriores porque ciertamente han cambiado.

Andrzej Dąbrowski
fuente
Excelente introducción a la correlación "sigma". También sería extraño que un geek (incluso un geek de Apple) usara el nombre de variable "precisión" cuando significan "distancia". Cada determinación de "distancia" o "ubicación" de RSSI viene con un "margen de error" (por ejemplo, usted está aquí +/- esto). Así que tiene sentido que su biblioteca tenga una función para "distancia" y una función para "precisión".
Jesse Chisholm
@ r00dY una brillante explicación debo decir. Ahora, solo una pregunta si puedes ayudar. Tengo datos de calibración para baliza medidos a 1 m, 2 m ... 15 m, ... 20 my así sucesivamente. Tengo los valores de distancia promedio para cada distancia. Ahora, desde el delegado del administrador de ubicación cuando obtenemos datos de baliza como baliza mayor, menor, rssi, etc., ¿es recomendable utilizar la distancia obtenida de la calibración anterior que expliqué? Sugiera, cualquier ayuda será apreciada. Gracias por adelantado.
Alkesh Fudani
Apple accuracyes una función de ambos rssiy tx power. No es del todo imposible que Estimote decidió aplicar ingeniería inversa a la accuracyfunción y comenzó a proporcionar tx powervalores tales que la lectura accuracyestima la distancia. Esto proporciona una experiencia de desarrollador más simple para estimar la distancia, pero rompe la definición de Apple de accuracy. Otras marcas pueden ser más fieles a la definición de Apple accuracyy, de hecho, proporcionar una "estimación de 1 metro" en lugar de un valor de ingeniería inversa que hace la accuracydistancia estimada.
Sentido
63

La potencia de salida del iBeacon se mide (calibra) a una distancia de 1 metro. Supongamos que es -59 dBm (solo un ejemplo). El iBeacon incluirá este número como parte de su publicidad LE.

El dispositivo de escucha (iPhone, etc.) medirá el RSSI del dispositivo. Supongamos, por ejemplo, que esto es, digamos, -72 dBm.

Dado que estos números están en dBm, la relación de la potencia es en realidad la diferencia en dB. Entonces:

ratio_dB = txCalibratedPower - RSSI

Para convertir eso en una relación lineal, usamos la fórmula estándar para dB:

ratio_linear = 10 ^ (ratio_dB / 10)

Si asumimos la conservación de energía, entonces la fuerza de la señal debe caer como 1 / r ^ 2. Entonces:

power = power_at_1_meter / r^2. Resolviendo para r, obtenemos:

r = sqrt(ratio_linear)

En Javascript, el código se vería así:

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;
}

Tenga en cuenta que, si está dentro de un edificio de acero, tal vez haya reflejos internos que hagan que la señal decaiga más lentamente que 1 / r ^ 2. Si la señal pasa a través de un cuerpo humano (agua), la señal se atenuará. Es muy probable que la antena no tenga la misma ganancia en todas las direcciones. Los objetos metálicos en la habitación pueden crear patrones de interferencia extraños. Etc, etc ... YMMV.

Mark Fassler
fuente
por curiosidad: ¿cómo ratio_dB = txCalibratedPower - RSSIfunciona? Dado que ambas medidas están en dBm, ¿asumiría que el resultado también está en dBm?
BlackWolf
3

Las distancias a la fuente de los paquetes publicitarios con formato iBeacon se estiman a partir de la atenuación de la ruta de la señal calculada comparando la intensidad de la señal recibida medida con la potencia de transmisión reivindicada que se supone que el transmisor codifica en los datos publicitarios.

Un esquema basado en la pérdida de trayectoria como este es solo aproximado y está sujeto a variaciones con elementos como ángulos de antena, objetos intermedios y, presumiblemente, un entorno de RF ruidoso. En comparación, los sistemas realmente diseñados para la medición de distancias (GPS, Radar, etc.) se basan en mediciones precisas del tiempo de propagación, en los mismos casos incluso examinando la fase de la señal.

Como señala Jiaru, 160 pies probablemente esté más allá del rango previsto, pero eso no significa necesariamente que un paquete nunca llegue, solo que no se debe esperar que funcione a esa distancia.

Chris Stratton
fuente
1

Es posible, pero depende de la potencia de salida de la baliza que está recibiendo, otras fuentes de RF cercanas, obstáculos y otros factores ambientales. Lo mejor que puede hacer es probarlo en el entorno que le interesa.

danh
fuente
1

Con varios teléfonos y balizas en la misma ubicación, será difícil medir la proximidad con un alto grado de precisión. Intente utilizar la aplicación de Android "byl bluetooth le scanner" para visualizar las variaciones de la intensidad de la señal (distancia), para múltiples balizas, y descubrirá rápidamente que se pueden requerir algoritmos adaptativos complejos para proporcionar cualquier forma de medición de proximidad consistente .

Verá muchas soluciones que simplemente le indican al usuario que "sostenga su teléfono aquí", para reducir la frustración del cliente.

BlueSpectrumz
fuente