ทำความเข้าใจเกี่ยวกับระยะห่างของ ibeacon


113

พยายามที่จะเข้าใจแนวคิดพื้นฐานเกี่ยวกับวิธีการที่ระยะห่างกับ ibeacon (beacon / Bluetooth-lowenergy / BLE) สามารถทำงานได้ มีเอกสารที่เป็นความจริงเกี่ยวกับวิธีการที่ ibeacon สามารถวัดได้ สมมติว่าฉันอยู่ห่างออกไป 300 ฟุต ... เป็นไปได้ไหมที่ ibeacon ตรวจพบสิ่งนี้

โดยเฉพาะสำหรับ v4 &. v5 และกับ iOS แต่โดยทั่วไปอุปกรณ์ BLE ใด ๆ

ความถี่และปริมาณงานของบลูทู ธ มีผลต่อสิ่งนี้อย่างไร? อุปกรณ์สัญญาณสามารถเพิ่มหรือ จำกัด ระยะทาง / ปรับปรุงตาม BLE พื้นฐานได้หรือไม่?

กล่าวคือ

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

คำตอบ:


223

ค่าประมาณระยะทางที่ iOS ให้ไว้จะขึ้นอยู่กับอัตราส่วนของความแรงของสัญญาณบีคอน (rssi) เหนือกำลังส่งที่ปรับเทียบแล้ว (txPower) txPower คือความแรงของสัญญาณที่วัดได้ใน rssi ที่ห่างออกไป 1 เมตร แต่ละบีคอนต้องได้รับการปรับเทียบด้วยค่า 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


4
คำตอบที่ดีและรหัสเดวิด ค่า txPower มาจากไหน? เป็นค่าการสอบเทียบที่ทำในฝั่งไคลเอ็นต์ (รับ) หรือไม่? หรือเป็นเมตริกที่คุณได้รับจากบีคอน?
rmooney

14
ค่า 0.89976, 7.7095 และ 0.111 มีไว้ทำอะไร?
malhal

4
ด้วยสมการนี้ฉันจะได้ 84457991114.574738 เมื่อสัญญาณวาง 1/4 จากโทรศัพท์ของฉัน
jdog

1
Eddystone เป็นจุดอ้างอิง 0 ม. ปี การหารกับการลบเป็นเพราะเราไม่ได้ใช้ฟังก์ชันลอการิทึมในกรณีนี้ การลบไม่ได้ผลกับเส้นโค้งที่เราใช้
davidgyoung

1
@davidgyoung คุณช่วยแบ่งปันสูตรที่พอดีกับเส้นโค้งที่ดีที่สุดหรืออะไรก็ได้ที่เราสามารถหาค่าทั้ง 3 นี้สำหรับอุปกรณ์ของเราได้ไหม
Paresh Mayani

77

ฉันกำลังตรวจสอบเรื่องความแม่นยำ / rssi / ความใกล้เคียงกับ iBeacons อย่างละเอียดมากและฉันคิดจริงๆว่าทรัพยากรทั้งหมดในอินเทอร์เน็ต (บล็อกโพสต์ใน StackOverflow) เข้าใจผิด

davidgyoung (คำตอบที่ยอมรับ> 100 upvotes) พูดว่า:

โปรดทราบว่าคำว่า "ความแม่นยำ" ในที่นี้คือ iOS พูดเป็นระยะทางเป็นเมตร

จริงๆแล้วคนส่วนใหญ่พูดแบบนี้ แต่ฉันไม่รู้ว่าทำไม! เอกสารประกอบทำให้ชัดเจนมากว่า CLBeacon.proximity:

ระบุความแม่นยำในแนวนอนของซิกม่าเป็นเมตร ใช้คุณสมบัตินี้เพื่อแยกความแตกต่างระหว่างบีคอนที่มีค่าความใกล้เคียงเดียวกัน อย่าใช้เพื่อระบุตำแหน่งที่แน่นอนของบีคอน ค่าความแม่นยำอาจผันผวนเนื่องจากสัญญาณรบกวน RF

ผมขอย้ำ: ความถูกต้องซิกหนึ่งเมตร หน้าเว็บยอดนิยมทั้ง 10 หน้าใน Google ในหัวข้อนี้มีคำว่า "one sigma" ในใบเสนอราคาจากเอกสารเท่านั้น แต่ไม่มีหน้าใดที่วิเคราะห์คำดังกล่าวซึ่งเป็นหัวใจหลักที่จะเข้าใจสิ่งนี้

สิ่งที่สำคัญมากคือการอธิบายสิ่งที่เป็นจริงความถูกต้องหนึ่งซิก ต่อไปนี้ URL ที่จะขึ้นต้นด้วย: http://en.wikipedia.org/wiki/Standard_error , http://en.wikipedia.org/wiki/Uncertainty

ในโลกทางกายภาพเมื่อคุณทำการวัดผลบางอย่างคุณจะได้ผลลัพธ์ที่แตกต่างกันเสมอ (เนื่องจากเสียงรบกวนความผิดเพี้ยน ฯลฯ ) และผลลัพธ์มักจะเป็นการกระจายแบบเกาส์เซียน มีพารามิเตอร์หลักสองตัวที่อธิบายเส้นโค้งแบบเกาส์เซียน:

  1. ค่าเฉลี่ย (ซึ่งเข้าใจง่ายคือค่าที่จุดสูงสุดของเส้นโค้งเกิดขึ้น)
  2. ค่าเบี่ยงเบนมาตรฐานซึ่งบอกว่าเส้นโค้งกว้างหรือแคบแค่ไหน เส้นโค้งที่แคบลงความแม่นยำที่ดีกว่าเนื่องจากผลลัพธ์ทั้งหมดอยู่ใกล้กัน ถ้าเส้นโค้งกว้างและไม่ชันแสดงว่าการวัดของปรากฏการณ์เดียวกันแตกต่างกันมากดังนั้นการวัดจึงมีคุณภาพไม่ดี

ซิกม่าเป็นอีกวิธีหนึ่งในการอธิบายว่าเส้นโค้งแบบเกาส์แคบ / กว้างเป็นอย่างไร
มันก็บอกว่าถ้าค่าเฉลี่ยของการวัดเป็น 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/

ผู้เขียนมีสมมติฐานว่าความแม่นยำคือระยะทาง เขาอ้างว่าบีคอนจาก Kontakt.io เป็นสัญญาณที่ผิดพลาดเมื่อเขาเพิ่มพลังจนถึงค่าสูงสุดค่าความแม่นยำนั้นน้อยมากสำหรับ 1, 5 และ 15 เมตร ก่อนที่จะเพิ่มพลังความแม่นยำค่อนข้างใกล้เคียงกับค่าระยะทาง โดยส่วนตัวคิดว่าถูกต้องเพราะยิ่งระดับพลังงานสูงผลกระทบจากการรบกวนก็จะน้อยลง และเป็นเรื่องแปลกที่บีคอน Estimote ไม่ทำงานในลักษณะนี้

ฉันไม่ได้บอกว่าฉันถูก 100% แต่นอกเหนือจากการเป็นนักพัฒนา iOS แล้วฉันยังมีวุฒิการศึกษาด้านอุปกรณ์อิเล็กทรอนิกส์ไร้สายและฉันคิดว่าเราไม่ควรละเลยคำว่า "one sigma" จากเอกสารและฉันอยากจะเริ่มพูดคุยเกี่ยวกับเรื่องนี้

อาจเป็นไปได้ว่าอัลกอริทึมเพื่อความแม่นยำของ Apple จะรวบรวมการวัดล่าสุดและวิเคราะห์การแจกแจงแบบเกาส์เซียน และนั่นคือวิธีกำหนดความแม่นยำ ฉันจะไม่ยกเว้นความเป็นไปได้ที่พวกเขาใช้แบบฟอร์มข้อมูล accelerometer เพื่อตรวจจับว่าผู้ใช้กำลังเคลื่อนที่ (และเร็วแค่ไหน) เพื่อรีเซ็ตค่าระยะการกระจายก่อนหน้านี้เนื่องจากมีการเปลี่ยนแปลงอย่างแน่นอน


คำแนะนำที่ยอดเยี่ยมเกี่ยวกับสหสัมพันธ์ "ซิกม่า" นอกจากนี้ยังเป็นเรื่องแปลกสำหรับคนที่เกินบรรยาย (แม้แต่ Apple geek) ที่จะใช้ชื่อตัวแปรว่า "ความถูกต้อง" เมื่อพวกเขาหมายถึง "ระยะทาง" การกำหนด "ระยะทาง" หรือ "ตำแหน่ง" ของ RSSI ทุกครั้งมาพร้อมกับ "ขอบของข้อผิดพลาด" (เช่นคุณอยู่ที่นี่ +/- มากขนาดนี้) ดังนั้นจึงสมเหตุสมผลที่ห้องสมุดของพวกเขาจะมีทั้งฟังก์ชันสำหรับ "ระยะทาง" และฟังก์ชันสำหรับ "ความแม่นยำ"
Jesse Chisholm

@ r00dY คำอธิบายที่ยอดเยี่ยมฉันต้องพูด ตอนนี้เพียงแค่ถามว่าคุณสามารถช่วยได้หรือไม่ ฉันมีข้อมูลการเทียบเคียงสำหรับสัญญาณที่วัดได้ที่ 1m, 2m ... 15m, ... 20m และอื่น ๆ ฉันมีค่าระยะทางเฉลี่ยสำหรับแต่ละระยะทาง ตอนนี้จากผู้จัดการสถานที่มอบหมายเมื่อเราได้รับข้อมูลบีคอนเช่น beacon major, minor, rssi ฯลฯ ขอแนะนำให้ใช้ระยะทางที่ได้รับจากการสอบเทียบข้างต้นที่ฉันอธิบายไว้หรือไม่ โปรดเสนอแนะความช่วยเหลือใด ๆ จะได้รับการชื่นชม ขอบคุณล่วงหน้า.
Alkesh Fudani

Apple accuracyเป็นหน้าที่ของทั้งสองrssiและtx power. ไม่ใช่เรื่องที่เป็นไปไม่ได้เลยที่ Estimote ตัดสินใจที่จะทำวิศวกรรมย้อนกลับaccuracyฟังก์ชันและเริ่มให้tx powerค่าเพื่อให้การอ่านaccuracyประมาณระยะทาง นี้จะให้ประสบการณ์นักพัฒนาที่เรียบง่ายสำหรับระยะทางประมาณ accuracyแต่แบ่งนิยามของ แบรนด์อื่น ๆ อาจยึดมั่นกับคำจำกัดความของ Apple มากกว่าaccuracyและให้ "ค่าประมาณ 1 เมตร" มากกว่าค่าที่ออกแบบย้อนกลับซึ่งทำให้accuracyระยะทางโดยประมาณ
Senseful

63

กำลังวัด iBeacon (ปรับเทียบ) ที่ระยะ 1 เมตร สมมติว่านี่คือ -59 dBm (เป็นเพียงตัวอย่าง) iBeacon จะรวมหมายเลขนี้ไว้เป็นส่วนหนึ่งของโฆษณา LE

อุปกรณ์การฟัง (iPhone ฯลฯ ) จะวัด RSSI ของอุปกรณ์ สมมติว่านี่คือ -72 dBm

เนื่องจากตัวเลขเหล่านี้มีหน่วยเป็น dBm อัตราส่วนของกำลังจึงเป็นผลต่างของเดซิเบล ดังนั้น:

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.


จากความอยากรู้อยากเห็น: ratio_dB = txCalibratedPower - RSSIทำงานอย่างไร? เนื่องจากทั้งสองมาตรการอยู่ใน dBm ฉันจึงถือว่าผลลัพธ์เป็น dBm ด้วยหรือไม่?
BlackWolf


3

ระยะทางไปยังแหล่งที่มาของแพ็คเก็ตโฆษณาในรูปแบบ iBeacon เป็นค่าประมาณจากการลดทอนเส้นทางสัญญาณที่คำนวณโดยการเปรียบเทียบความแรงของสัญญาณที่ได้รับกับกำลังส่งที่อ้างว่าเครื่องส่งควรเข้ารหัสในข้อมูลโฆษณา

รูปแบบตามการสูญเสียเส้นทางเช่นนี้เป็นเพียงการประมาณเท่านั้นและอาจมีการเปลี่ยนแปลงกับสิ่งต่างๆเช่นมุมเสาอากาศวัตถุที่เข้ามาแทรกแซงและอาจเป็นสภาพแวดล้อม RF ที่มีเสียงดัง ในการเปรียบเทียบระบบที่ออกแบบมาสำหรับการวัดระยะทางจริงๆ (GPS, เรดาร์ ฯลฯ ) อาศัยการวัดเวลาการแพร่กระจายที่แม่นยำในกรณีเดียวกันแม้กระทั่งการตรวจสอบเฟสของสัญญาณ

ดังที่ Jiaru ชี้ให้เห็น 160 ฟุตอาจจะเกินระยะที่ตั้งใจไว้ แต่นั่นไม่ได้หมายความว่าแพ็คเก็ตจะไม่มีวันผ่านไปได้เพียงอย่างเดียวที่ไม่ควรคาดหวังให้มันทำงานในระยะนั้น


1

เป็นไปได้ แต่ขึ้นอยู่กับกำลังขับของสัญญาณที่คุณได้รับแหล่ง rf อื่น ๆ ที่อยู่ใกล้เคียงอุปสรรคและปัจจัยแวดล้อมอื่น ๆ สิ่งที่ดีที่สุดที่ควรทำคือลองใช้ในสภาพแวดล้อมที่คุณสนใจ


1

ด้วยโทรศัพท์และบีคอนหลายเครื่องในตำแหน่งเดียวกันการวัดความใกล้เคียงด้วยความแม่นยำระดับสูงจะเป็นเรื่องยาก ลองใช้แอป Android "b and l bluetooth le scanner" เพื่อแสดงภาพความแรงของสัญญาณ (ระยะทาง) รูปแบบต่างๆสำหรับบีคอนหลายตัวและคุณจะค้นพบได้อย่างรวดเร็วว่าอัลกอริทึมแบบปรับตัวที่ซับซ้อนอาจจำเป็นเพื่อให้การวัดความใกล้เคียงที่สอดคล้องกันในรูปแบบใดก็ได้ .

คุณจะเห็นวิธีแก้ปัญหามากมายเพียงแค่สั่งให้ผู้ใช้ "กรุณาถือโทรศัพท์ของคุณที่นี่" เพื่อลดความไม่พอใจของลูกค้า

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.