Comprendre la distance ibeacon


113

Essayer de comprendre un concept de base de la façon dont la distance avec ibeacon (balise / Bluetooth-lowenergy / BLE) peut fonctionner. Existe-t-il une véritable documentation sur la distance exacte qu'un ibeacon peut mesurer. Disons que je suis à 300 mètres ... est-il possible pour un ibeacon de détecter cela?

Spécifiquement pour v4 et. v5 et avec iOS mais généralement tout appareil BLE.

Comment la fréquence et le débit Bluetooth affectent-ils cela? Les dispositifs de balise peuvent-ils augmenter ou limiter la distance / améliorer le BLE sous-jacent?

c'est à dire

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

Réponses:


223

L'estimation de distance fournie par iOS est basée sur le rapport entre la force du signal de la balise (rssi) et la puissance de l'émetteur étalonnée (txPower). Le txPower est la force de signal mesurée connue en rssi à 1 mètre de distance. Chaque balise doit être étalonnée avec cette valeur txPower pour permettre des estimations de distance précises.

Bien que les estimations de distance soient utiles, elles ne sont pas parfaites et nécessitent que vous contrôliez d'autres variables. Assurez-vous de lire les complexités et les limites avant d'en abuser.

Lors de la création de la bibliothèque Android iBeacon, nous avons dû créer notre propre algorithme indépendant car le code source iOS CoreLocation n'est pas disponible. Nous avons mesuré un tas de mesures rssi à des distances connues, puis avons fait une courbe de meilleur ajustement pour correspondre à nos points de données. L'algorithme que nous avons élaboré est présenté ci-dessous sous forme de code Java.

Notez que le terme «précision» ici est iOS parle pour la distance en mètres. Cette formule n'est pas parfaite, mais elle se rapproche à peu près de ce que fait 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;
  }
}   

Remarque: Les valeurs 0,89976, 7,7095 et 0,111 sont les trois constantes calculées lors de la résolution d'une courbe de meilleur ajustement à nos points de données mesurés. YMMV


4
Excellente réponse et code David. D'où vient la valeur txPower? S'agit-il d'une valeur d'étalonnage effectuée côté client (réception)? Ou est-ce une métrique que vous pouvez obtenir à partir d'une balise?
rmooney

14
à quoi servent les valeurs de 0,89976, 7,7095 et 0,111?
malhal

4
Avec cette équation, je me retrouve avec 84457991114.574738 lorsque la balise est posée sur 1/4 de mon téléphone.
jdog

1
Eddystone est un point de référence de 0 m, ans. La division par rapport à la soustraction est due au fait que nous n'utilisons pas de fonction logarithmique dans ce cas. La soustraction n'a pas fonctionné pour l'ajustement de courbe que nous avons utilisé.
davidgyoung

1
@davidgyoung pouvez-vous s'il vous plaît partager la meilleure formule d'ajustement de courbe ou quoi que ce soit à travers lequel nous pouvons trouver ces 3 valeurs pour notre appareil?
Paresh Mayani

77

J'étudie en profondeur la question de la précision / rssi / proximité avec iBeacons et je pense vraiment que toutes les ressources sur Internet (blogs, messages dans StackOverflow) se trompent.

davidgyoung (réponse acceptée,> 100 votes positifs) dit:

Notez que le terme «précision» ici est iOS parle pour la distance en mètres.

En fait, la plupart des gens disent cela mais je ne sais pas pourquoi! La documentation indique très clairement que CLBeacon.proximity:

Indique la précision horizontale d'un sigma en mètres. Utilisez cette propriété pour différencier les balises ayant la même valeur de proximité. Ne l'utilisez pas pour identifier un emplacement précis pour la balise. Les valeurs de précision peuvent fluctuer en raison des interférences RF.

Permettez-moi de répéter: une précision sigma en mètres . Les 10 premières pages de google sur le sujet ont le terme «un sigma» uniquement dans des citations de documents, mais aucune d'entre elles n'analyse le terme, qui est essentiel pour comprendre cela.

Il est très important d'expliquer ce qu'est en fait une précision sigma . URL suivantes pour commencer: http://en.wikipedia.org/wiki/Standard_error , http://en.wikipedia.org/wiki/Uncertainty

Dans le monde physique, lorsque vous effectuez des mesures, vous obtenez toujours des résultats différents (à cause du bruit, de la distorsion, etc.) et très souvent les résultats forment une distribution gaussienne. Il existe deux paramètres principaux décrivant la courbe de Gauss:

  1. signifie (ce qui est facile à comprendre, c'est la valeur pour laquelle le pic de la courbe se produit).
  2. l'écart type, qui indique la largeur ou l'étroitesse de la courbe. La courbe la plus étroite, meilleure est la précision, car tous les résultats sont proches les uns des autres. Si la courbe est large et non raide, cela signifie que les mesures du même phénomène diffèrent beaucoup les unes des autres, donc la mesure est de mauvaise qualité.

un sigma est une autre façon de décrire à quel point la courbe gaussienne est étroite / large.
Il dit simplement que si la moyenne de mesure est X, et qu'un sigma est σ, alors 68% de toutes les mesures seront comprises entre X - σet X + σ.

Exemple. Nous mesurons la distance et obtenons une distribution gaussienne en conséquence. La moyenne est de 10 m. Si σ vaut 4m, cela signifie que 68% des mesures étaient comprises entre 6m et 14m.

Lorsque nous mesurons la distance avec des balises, nous obtenons RSSI et une valeur d'étalonnage de 1 mètre, qui nous permettent de mesurer la distance en mètres. Mais chaque mesure donne des valeurs différentes, qui forment une courbe gaussienne. Et un sigma (et la précision) est la précision de la mesure, pas la distance!

Cela peut être trompeur, car lorsque nous éloignons la balise, un sigma augmente en fait parce que le signal est pire. Mais avec des niveaux de puissance de balise différents, nous pouvons obtenir des valeurs de précision totalement différentes sans changer réellement la distance. Plus la puissance est élevée, moins il y a d'erreur.

Il existe un article de blog qui analyse en profondeur la question: http://blog.shinetech.com/2014/02/17/the-beacon-experiments-low-energy-bluetooth-devices-in-action/

L'auteur émet l'hypothèse que la précision est en fait la distance. Il affirme que les balises de Kontakt.io sont défectueuses parce qu'il a augmenté la puissance à la valeur maximale, la valeur de précision était très petite pour 1, 5 et même 15 mètres. Avant d'augmenter la puissance, la précision était assez proche des valeurs de distance. Personnellement, je pense que c'est correct, car plus le niveau de puissance est élevé, moins les interférences ont un impact. Et il est étrange que les balises Estimote ne se comportent pas de cette façon.

Je ne dis pas que j'ai raison à 100%, mais en plus d'être développeur iOS, j'ai un diplôme en électronique sans fil et je pense que nous ne devrions pas ignorer le terme "one sigma" de la documentation et j'aimerais commencer la discussion à ce sujet.

Il est possible que l'algorithme de précision d'Apple ne recueille que des mesures récentes et en analyse la distribution gaussienne. Et c'est ainsi qu'il définit la précision. Je n'exclurais pas la possibilité qu'ils utilisent l'accéléromètre de formulaire d'information pour détecter si l'utilisateur se déplace (et à quelle vitesse) afin de réinitialiser les valeurs de distance de distribution précédentes, car elles ont certainement changé.


Excellente introduction à la corrélation "sigma". De plus, il serait étrange pour un geek (même un geek d'Apple) d'utiliser le nom de variable «précision» alors qu'il voulait dire «distance». Chaque détermination de «distance» ou «emplacement» RSSI s'accompagne d'une «marge d'erreur» (par exemple, vous êtes ici +/- autant). Il est donc logique que leur bibliothèque ait à la fois une fonction pour la «distance» et une fonction pour la «précision».
Jesse Chisholm

@ r00dY une explication brillante je dois dire. Maintenant, juste une question si vous pouvez aider. J'ai des données de callibration pour la balise mesurées à 1m, 2m ... 15m, ... 20m et ainsi de suite. J'ai les valeurs de distance moyennes pour chaque distance. Maintenant, du délégué du gestionnaire d'emplacement lorsque nous obtenons des données de balise comme la balise majeure, mineure, rssi, etc., est-il conseillé d'utiliser la distance obtenue à partir de l'étalonnage ci-dessus que j'ai expliqué? Veuillez suggérer, toute aide serait appréciée. Merci d'avance.
Alkesh Fudani

Apple accuracyest une fonction à la fois rssiet tx power. Il n'est pas totalement impossible qu'Estimote ait décidé de procéder à une rétro-ingénierie de la accuracyfonction et a commencé à fournir des tx powervaleurs telles que la lecture accuracyestime la distance. Cela fournit une expérience de développeur plus simple pour estimer la distance, mais rompt la définition d'Apple de accuracy. D'autres marques pourraient rester plus fidèles à la définition d'Apple accuracyet fournir en fait une «estimation de 1 mètre» plutôt qu'une valeur rétro-conçue qui permet d' accuracyestimer la distance.
Senseful

63

La puissance de sortie de l'iBeacon est mesurée (calibrée) à une distance de 1 mètre. Supposons que ce soit -59 dBm (juste un exemple). L'iBeacon inclura ce numéro dans le cadre de sa publicité LE.

L'appareil d'écoute (iPhone, etc.) mesurera le RSSI de l'appareil. Supposons, par exemple, que cela soit, disons, -72 dBm.

Puisque ces nombres sont en dBm, le rapport de la puissance est en fait la différence en dB. Alors:

ratio_dB = txCalibratedPower - RSSI

Pour convertir cela en un rapport linéaire, nous utilisons la formule standard pour dB:

ratio_linear = 10 ^ (ratio_dB / 10)

Si nous supposons la conservation de l'énergie, alors la force du signal doit tomber à 1 / r ^ 2. Alors:

power = power_at_1_meter / r^2. En résolvant r, nous obtenons:

r = sqrt(ratio_linear)

En Javascript, le code ressemblerait à ceci:

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

Notez que si vous êtes à l'intérieur d'un bâtiment en acier, il y aura peut-être des réflexions internes qui ralentiront la décroissance du signal par rapport à 1 / r ^ 2. Si le signal traverse un corps humain (eau), le signal sera atténué. Il est très probable que l'antenne n'ait pas le même gain dans toutes les directions. Les objets métalliques dans la pièce peuvent créer d'étranges motifs d'interférences. Etc, etc ... YMMV.


par curiosité: comment ça ratio_dB = txCalibratedPower - RSSImarche? Puisque les deux mesures sont en dBm, je suppose que le résultat est également en dBm?
BlackWolf


3

Les distances par rapport à la source des paquets publicitaires formatés iBeacon sont estimées à partir de l'atténuation du trajet du signal calculée en comparant la force du signal reçu mesuré à la puissance d'émission revendiquée que l'émetteur est censé coder dans les données publicitaires.

Un schéma basé sur la perte de trajet comme celui-ci n'est qu'approximatif et est sujet à des variations avec des éléments tels que les angles d'antenne, les objets intermédiaires et vraisemblablement un environnement RF bruyant. En comparaison, les systèmes réellement conçus pour la mesure de distance (GPS, Radar, etc.) reposent sur des mesures précises du temps de propagation, dans les mêmes cas même en examinant la phase du signal.

Comme le souligne Jiaru, 160 pieds sont probablement au-delà de la portée prévue, mais cela ne signifie pas nécessairement qu'un paquet ne passera jamais , seulement qu'il ne faut pas s'attendre à ce qu'il fonctionne à cette distance.


1

C'est possible, mais cela dépend de la puissance de sortie de la balise que vous recevez, des autres sources RF à proximité, des obstacles et d'autres facteurs environnementaux. La meilleure chose à faire est de l'essayer dans l'environnement qui vous intéresse.


1

Avec plusieurs téléphones et balises au même endroit, il sera difficile de mesurer la proximité avec un degré de précision élevé. Essayez d'utiliser l'application Android "b and l bluetooth le scanner" pour visualiser les variations d'intensité du signal (distance) pour plusieurs balises, et vous découvrirez rapidement que des algorithmes complexes et adaptatifs peuvent être nécessaires pour fournir toute forme de mesure de proximité cohérente. .

Vous allez voir de nombreuses solutions demandant simplement à l'utilisateur de "tenez votre téléphone ici", afin de réduire la frustration des clients.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.