İbeacon mesafesini anlama


113

İbeacon (beacon / Bluetooth-lowenergy / BLE) ile mesafenin nasıl çalışabileceğine dair temel bir kavramı kavramaya çalışıyorum. Bir ibeacon'un tam olarak ne kadar ölçüm yapabileceğine dair gerçek bir belge var mı? Diyelim ki 100 metre uzaktayım ... bir ibeacon'un bunu algılaması mümkün mü?

Özellikle v4 ve. v5 ve iOS ile ancak genellikle herhangi bir BLE cihazı.

Bluetooth frekansı ve verimi bunu nasıl etkiler? İşaret cihazları mesafeyi artırabilir veya kısıtlayabilir / temeldeki BLE'yi iyileştirebilir mi?

yani

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

Yanıtlar:


223

İOS tarafından sağlanan mesafe tahmini, işaretçi sinyal gücünün (rssi) kalibre edilmiş verici gücüne (txPower) oranına dayanır. TxPower, 1 metre uzakta rssi cinsinden ölçülen bilinen sinyal gücüdür. Doğru mesafe tahminlerine izin vermek için her işaretin bu txPower değeri ile kalibre edilmesi gerekir.

Mesafe tahminleri yararlı olsa da, mükemmel değildir ve diğer değişkenleri kontrol etmenizi gerektirir. Bunu kötüye kullanmadan önce karmaşıklıkları ve sınırlamaları okuduğunuzdan emin olun .

Android iBeacon kitaplığını oluştururken, iOS CoreLocation kaynak kodu mevcut olmadığı için kendi bağımsız algoritmamızı bulmamız gerekiyordu. Bilinen mesafelerde bir grup rssi ölçümü ölçtük, ardından veri noktalarımıza uyması için en uygun eğriyi yaptık. Bulduğumuz algoritma aşağıda Java kodu olarak gösterilmektedir.

Buradaki "doğruluk" teriminin, iOS'un metre cinsinden mesafeyi ifade ettiğini unutmayın. Bu formül mükemmel değil, ancak kabaca iOS'un ne yaptığını tahmin ediyor.

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

Not: değerleri 0,89976, 7,7095 ve 0.111 en bir uygun eğrisi için çözerken hesaplanan üç sabitlerdir eden ölçülmüş veri noktaları. YMMV


4
Harika cevap ve kod David. TxPower değeri nereden geliyor? Müşteri (alan) tarafında yapılan bir kalibrasyon değeri mi? Yoksa bir işaretten alabileceğiniz bir ölçü mü?
rmooney

14
0.89976, 7.7095 ve 0.111 değerleri ne için?
malhal

4
Bu denklemle, işaret telefonumdan 1 / 4'üne geldiğinde 84457991114.574738 ile son buluyorum.
jdog

1
Eddystone, 0 m referans noktasıdır, yıl. Bölmeye karşı Çıkarma, bu durumda logaritmik bir fonksiyon kullanmadığımız içindir. Çıkarma, kullandığımız eğri uydurma için işe yaramadı.
davidgyoung

1
@davidgyoung, lütfen en iyi eğri uydurma formülünü veya cihazımız için bu 3 değeri bulabileceğimiz herhangi bir şeyi paylaşır mısınız?
Paresh Mayani

77

Doğruluk / rssi / yakınlık konusunu iBeacons ile iyice araştırıyorum ve gerçekten internetteki tüm kaynakların (bloglar, StackOverflow'daki gönderiler) yanlış anladığını düşünüyorum.

davidgyoung (kabul edilen cevap,> 100 olumlu oy) diyor ki:

Buradaki "doğruluk" teriminin, iOS'un metre cinsinden mesafeyi ifade ettiğini unutmayın.

Aslında çoğu insan bunu söylüyor ama neden olduğuna dair hiçbir fikrim yok! Belgeler, CLBeacon.proximity'nin çok açık bir şekilde görülmesini sağlar:

Metre cinsinden tek sigma yatay doğruluğunu gösterir. Aynı yakınlık değerine sahip işaretçileri ayırt etmek için bu özelliği kullanın. İşaretin kesin konumunu belirlemek için kullanmayın. Doğruluk değerleri, RF paraziti nedeniyle dalgalanabilir.

Tekrar edeyim: metre cinsinden bir sigma doğruluğu . Konuyla ilgili google'da en çok okunan 10 sayfanın tamamında yalnızca dokümanlardan alıntılar halinde "bir sigma" terimi var, ancak hiçbiri bunu anlamanın özü olan terimi analiz etmiyor.

Çok önemli olan, aslında bir sigma doğruluğunun ne olduğunu açıklamaktır . Başlamak için aşağıdaki URL'ler: http://en.wikipedia.org/wiki/Standard_error , http://en.wikipedia.org/wiki/Uncertainty

Fiziksel dünyada, bazı ölçümler yaptığınızda, her zaman farklı sonuçlar alırsınız (gürültü, bozulma vb. Nedeniyle) ve çoğu zaman sonuçlar Gauss dağılımını oluşturur. Gauss eğrisini tanımlayan iki ana parametre vardır:

  1. ortalama (anlaşılması kolaydır, eğrinin tepe noktasının oluştuğu değerdir).
  2. eğrinin ne kadar geniş veya dar olduğunu söyleyen standart sapma. Daha dar eğri, daha iyi doğruluk çünkü tüm sonuçlar birbirine yakındır. Eğri genişse ve dik değilse, bu aynı fenomenin ölçümlerinin birbirinden çok farklı olduğu anlamına gelir, bu nedenle ölçüm kalitesi kötüdür.

bir sigma , gauss eğrisinin ne kadar dar / geniş olduğunu tanımlamanın başka bir yoludur.
Basitçe, eğer ölçümün ortalaması X ise ve bir sigma σ ise, o zaman tüm ölçümlerin% 68'inin X - σve arasında olacağını söyler X + σ.

Misal. Mesafeyi ölçüyoruz ve sonuç olarak bir gauss dağılımı elde ediyoruz. Ortalama 10m. Σ 4m ise, bu, ölçümlerin% 68'inin 6m ile 14m arasında olduğu anlamına gelir.

İşaretlerle mesafeyi ölçtüğümüzde, mesafeyi metre cinsinden ölçmemizi sağlayan RSSI ve 1 metrelik kalibrasyon değeri elde ederiz. Ancak her ölçüm, gauss eğrisini oluşturan farklı değerler verir. Ve bir sigma (ve doğruluk) ölçümün doğruluğu, mesafenin değil!

Yanıltıcı olabilir, çünkü fenerini daha uzağa hareket ettirdiğimizde, sinyal daha kötü olduğu için aslında bir sigma artar. Ancak farklı işaret güç seviyeleriyle, aslında mesafeyi değiştirmeden tamamen farklı doğruluk değerleri elde edebiliriz. Daha yüksek güç, daha az hata.

Konuyu iyice analiz eden bir blog yazısı var: http://blog.shinetech.com/2014/02/17/the-beacon-experiments-low-energy-bluetooth-devices-in-action/

Yazar, doğruluğun aslında uzaklık olduğuna dair bir hipoteze sahiptir. Kontakt.io'dan gelen işaretçilerin gücü maksimum değere çıkardığında hatalı olduğunu iddia ediyor, doğruluk değeri 1, 5 ve hatta 15 metre için çok küçüktü. Gücü artırmadan önce doğruluk, mesafe değerlerine oldukça yakındı. Şahsen bunun doğru olduğunu düşünüyorum, çünkü daha yüksek güç seviyesi, müdahalenin daha az etkisi. Ve Estimote işaretçilerinin neden bu şekilde davranmaması garip.

% 100 haklı olduğumu söylemiyorum, ancak iOS geliştiricisi olmanın yanı sıra kablosuz elektronik alanında derecem var ve bence dokümanlardaki "bir sigma" terimini görmezden gelmemeliyiz ve bu konuda tartışmaya başlamak istiyorum.

Apple'ın doğruluk algoritmasının sadece son ölçümleri toplaması ve bunların gauss dağılımını analiz etmesi mümkün olabilir. Doğruluğu böyle belirler. Önceki dağıtım mesafe değerlerini sıfırlamak için kullanıcının hareket edip etmediğini (ve ne kadar hızlı) tespit etmek için bilgi formu ivmeölçeri kullanma olasılığını dışlamam çünkü kesinlikle değişmişlerdir.


"Sigma" korelasyonuna mükemmel bir giriş. Ayrıca bir inek için (hatta bir Apple meraklısı), "mesafe" anlamına geldiğinde "doğruluk" değişken adını kullanması garip olurdu. Her RSSI "mesafesi" veya "konum" belirlemesi bir "hata payı" ile birlikte gelir (örneğin, buradasınız +/- bu kadar). Bu nedenle, kütüphanelerinin hem "uzaklık" hem de "doğruluk" için bir işlevi olacağı mantıklıdır.
Jesse Chisholm

@ r00dY mükemmel bir açıklama söylemeliyim. Şimdi, yardım edebilirsen bir soru. İşaretçi için 1m, 2m ... 15m, ... 20m ve benzerlerinde ölçülen bir kalibrasyon verisine sahibim. Her mesafe için ortalama mesafe değerlerine sahibim. Şimdi, konum yöneticisinden delege beacon major, minor, rssi, vb. Gibi beacon verilerini aldığımızda, yukarıda açıkladığım kalibrasyondan elde edilen mesafeyi kullanmak tavsiye edilir mi? Lütfen önerin, herhangi bir yardım memnuniyetle karşılanacaktır. Şimdiden teşekkürler.
Alkesh Fudani

Apple accuracy, hem rssive hem de bir işlevidir tx power. Estimote'un accuracyişlevi tersine çevirmeye karar vermesi ve tx powerokumanın accuracymesafeyi tahmin etmesini sağlayacak değerler sağlamaya başlaması tamamen imkansız değil . Bu, mesafeyi tahmin etmek için daha basit bir geliştirici deneyimi sağlar, ancak Apple'ın accuracy. Diğer markalar, Apple'ın tanımına daha sadık kalabilir accuracyve accuracytahmini mesafeyi oluşturan ters mühendislik değeri olan bir değer yerine "1 metrelik bir tahmin" sağlayabilir .
Senseful

63

İBeacon çıkış gücü 1 metrelik bir mesafede ölçülür (kalibre edilir). Bunun -59 dBm olduğunu varsayalım (sadece bir örnek). İBeacon, bu numarayı LE reklamının bir parçası olarak içerecektir.

Dinleme cihazı (iPhone, vb.), Cihazın RSSI'sini ölçecektir. Örneğin, bunun -72 dBm olduğunu varsayalım.

Bu sayılar dBm cinsinden olduğundan, gücün oranı aslında dB'deki farktır. Yani:

ratio_dB = txCalibratedPower - RSSI

Bunu doğrusal bir orana dönüştürmek için, dB için standart formülü kullanıyoruz:

ratio_linear = 10 ^ (ratio_dB / 10)

Enerjinin korunumunu varsayarsak, sinyal gücü 1 / r ^ 2 olarak düşmelidir. Yani:

power = power_at_1_meter / r^2. R için çözerek şunu elde ederiz:

r = sqrt(ratio_linear)

Javascript'te kod şu şekilde görünür:

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

Çelik bir binanın içindeyseniz, sinyal bozulmasını 1 / r ^ 2'den daha yavaş hale getiren iç yansımalar olabileceğini unutmayın. Sinyal bir insan vücudundan (su) geçerse, sinyal zayıflatılacaktır. Antenin tüm yönlerde eşit kazanıma sahip olmaması çok muhtemeldir. Odadaki metal nesneler garip girişim desenleri oluşturabilir. Vb, vs ... YMMV.


meraktan: nasıl ratio_dB = txCalibratedPower - RSSIçalışır? Her iki ölçüm de dBm olduğundan, sonucun da dBm cinsinden olacağını varsayabilirim?
BlackWolf


3

İBeacon formatlı reklam paketlerinin kaynağına olan mesafeler , ölçülen alınan sinyal gücünün, vericinin reklam verilerinde kodlaması gereken iddia edilen iletim gücü ile karşılaştırılmasıyla hesaplanan sinyal yolu zayıflamasından tahmin edilir.

Bunun gibi yol kaybına dayalı bir şema yalnızca yaklaşıktır ve anten açıları, araya giren nesneler ve muhtemelen gürültülü bir RF ortamı gibi şeylerle varyasyona tabidir. Buna karşılık, gerçekten mesafe ölçümü için tasarlanmış sistemler (GPS, Radar, vb.), Aynı durumlarda sinyalin fazını bile incelerken, yayılma süresinin hassas ölçümlerine dayanır.

Jiaru'nun belirttiği gibi, 160 ft muhtemelen amaçlanan aralığın ötesindedir, ancak bu, bir paketin asla geçemeyeceği anlamına gelmez , yalnızca birinin o mesafede çalışmasını beklememesi gerektiği anlamına gelir .


1

Mümkün, ancak aldığınız işaretin güç çıkışına, yakındaki diğer rf kaynaklarına, engellere ve diğer çevresel faktörlere bağlıdır. Yapılacak en iyi şey, ilgilendiğiniz ortamda denemektir.


1

Aynı yerde birden fazla telefon ve işaret varken, yakınlığı herhangi bir yüksek derecede doğrulukla ölçmek zor olacaktır. Birden fazla işaretçi için sinyal gücü (mesafe) varyasyonlarını görselleştirmek için Android "b ve l bluetooth le tarayıcı" uygulamasını kullanmayı deneyin; her türlü tutarlı yakınlık ölçümü sağlamak için karmaşık, uyarlanabilir algoritmaların gerekli olabileceğini çabucak keşfedeceksiniz. .

Müşterinin hayal kırıklığını azaltmak için kullanıcıya "lütfen telefonunuzu burada tutun" talimatı veren birçok çözüm göreceksiniz.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.