Hiểu về cách nhìn của ibeacon


113

Cố gắng nắm bắt khái niệm cơ bản về cách hoạt động của tính năng điều chỉnh khoảng cách với ibeacon (beacon / Bluetooth-lowenergy / BLE). Có tài liệu xác thực nào về việc ibeacon có thể đo lường chính xác bao xa. Giả sử tôi đang ở cách xa 300 feet ... liệu ibeacon có thể phát hiện ra điều này không?

Cụ thể cho v4 &. v5 và với iOS nhưng nói chung là bất kỳ thiết bị BLE nào.

Tần số và thông lượng Bluetooth ảnh hưởng đến điều này như thế nào? Thiết bị báo hiệu có thể nâng cao hoặc hạn chế khoảng cách / cải thiện dựa trên BLE cơ bản không?

I E

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

Câu trả lời:


223

Ước tính khoảng cách do iOS cung cấp dựa trên tỷ lệ của cường độ tín hiệu đèn hiệu (rssi) trên công suất máy phát đã hiệu chỉnh (txPower). TxPower là cường độ tín hiệu đo được đã biết tính bằng rssi ở khoảng cách 1 mét. Mỗi đèn hiệu phải được hiệu chuẩn với giá trị txPower này để cho phép ước tính khoảng cách chính xác.

Mặc dù ước tính khoảng cách hữu ích nhưng chúng không hoàn hảo và yêu cầu bạn kiểm soát các biến khác. Hãy chắc chắn rằng bạn đã đọc về sự phức tạp và hạn chế trước khi lạm dụng điều này.

Khi chúng tôi xây dựng thư viện iBeacon của Android, chúng tôi phải đưa ra thuật toán độc lập của riêng mình vì mã nguồn CoreLocation của iOS không có sẵn. Chúng tôi đo một loạt các phép đo rssi ở các khoảng cách đã biết, sau đó tạo một đường cong phù hợp nhất để khớp với các điểm dữ liệu của chúng tôi. Thuật toán chúng tôi đưa ra được hiển thị bên dưới dưới dạng mã Java.

Lưu ý rằng thuật ngữ "độ chính xác" ở đây là iOS nói về khoảng cách tính bằng mét. Công thức này không hoàn hảo, nhưng nó gần đúng với những gì iOS làm.

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

Lưu ý: Các giá trị 0,89976, 7,7095 và 0,111 là ba hằng số được tính toán khi tìm đường cong phù hợp nhất với các điểm dữ liệu đo được của chúng tôi . YMMV


4
Câu trả lời tuyệt vời và mã David. Giá trị txPower đến từ đâu? Nó có phải là giá trị hiệu chuẩn được thực hiện ở phía khách hàng (nhận) không? Hay nó là một số liệu bạn có thể nhận được từ một beacon?
rmooney

14
các giá trị 0,89976, 7,7095 và 0,111 là gì?
malhal

4
Với phương trình này, tôi kết thúc với 84457991114.574738 khi beacon được đặt trên 1/4 từ điện thoại của tôi.
jdog

1
Eddystone là một điểm tham chiếu 0 m, năm. Phép chia so với phép trừ là do chúng ta không sử dụng hàm logarit trong trường hợp này. Phép trừ không hoạt động đối với đường cong chúng tôi đã sử dụng.
davidgyoung

1
@davidgyoung, bạn có thể vui lòng chia sẻ công thức phù hợp nhất với đường cong hoặc bất cứ điều gì mà thông qua đó chúng tôi có thể tìm ra 3 giá trị này cho thiết bị của mình không?
Paresh Mayani

77

Tôi đang điều tra rất kỹ lưỡng vấn đề về độ chính xác / rssi / độ gần với iBeacons và tôi thực sự nghĩ rằng tất cả các tài nguyên trên Internet (blog, bài đăng trong StackOverflow) đều hiểu sai.

davidgyoung (câu trả lời được chấp nhận,> 100 lượt ủng hộ) nói:

Lưu ý rằng thuật ngữ "độ chính xác" ở đây là iOS nói về khoảng cách tính bằng mét.

Trên thực tế, hầu hết mọi người nói điều này nhưng tôi không biết tại sao! Tài liệu cho thấy rất rõ ràng rằng CLBeacon.proximity:

Cho biết độ chính xác ngang một sigma tính bằng mét. Sử dụng thuộc tính này để phân biệt giữa các báo hiệu có cùng giá trị vùng lân cận. Không sử dụng nó để xác định vị trí chính xác cho đèn hiệu. Giá trị độ chính xác có thể dao động do nhiễu RF.

Để tôi nhắc lại: độ chính xác một sigma tính bằng mét . Tất cả 10 trang hàng đầu trên google về chủ đề này chỉ có thuật ngữ "một sigma" trong trích dẫn từ tài liệu, nhưng không có trang nào trong số đó phân tích thuật ngữ, đó là điều cốt lõi để hiểu điều này.

Rất quan trọng là giải thích độ chính xác một sigma thực sự là gì . Các URL sau để bắt đầu bằng: http://en.wikipedia.org/wiki/Standard_error , http://en.wikipedia.org/wiki/Uncertranty

Trong thế giới vật lý, khi bạn thực hiện một số phép đo, bạn luôn nhận được các kết quả khác nhau (do nhiễu, biến dạng, v.v.) và rất thường kết quả hình thành phân bố Gauss. Có hai tham số chính mô tả đường cong Gauss:

  1. nghĩa là (dễ hiểu, đó là giá trị mà đỉnh của đường cong xảy ra).
  2. độ lệch chuẩn, cho biết độ rộng hay hẹp của đường cong. Đường cong càng hẹp, độ chính xác càng tốt, vì tất cả các kết quả đều gần nhau. Nếu đường cong rộng và không dốc, có nghĩa là các phép đo của cùng một hiện tượng khác nhau rất nhiều, do đó phép đo có chất lượng không tốt.

một sigma là một cách khác để mô tả độ hẹp / rộng của đường cong gaussian.
Nó chỉ đơn giản nói rằng nếu trung bình của phép đo là X và một sigma là σ, thì 68% của tất cả các phép đo sẽ nằm giữa X - σX + σ.

Thí dụ. Chúng tôi đo khoảng cách và kết quả là phân phối gaussian. Giá trị trung bình là 10m. Nếu σ là 4m, thì có nghĩa là 68% số đo nằm trong khoảng từ 6m đến 14m.

Khi chúng tôi đo khoảng cách bằng đèn hiệu, chúng tôi nhận được RSSI và giá trị hiệu chuẩn 1 mét, cho phép chúng tôi đo khoảng cách bằng mét. Nhưng mọi phép đo đều cho các giá trị khác nhau, tạo thành đường cong gaussian. Và một sigma (và độ chính xác) là độ chính xác của phép đo, không phải khoảng cách!

Nó có thể gây hiểu lầm, bởi vì khi chúng ta di chuyển đèn hiệu ra xa hơn, một sigma thực sự tăng lên vì tín hiệu kém hơn. Nhưng với các mức công suất đèn hiệu khác nhau, chúng ta có thể nhận được các giá trị chính xác hoàn toàn khác nhau mà không thực sự thay đổi khoảng cách. Công suất càng cao thì lỗi càng ít.

Có một bài đăng trên blog phân tích kỹ lưỡng vấn đề: http://blog.shinetech.com/2014/02/17/the-beacon-experiments-low-energy-bl Bluetooth-devices-in-action/

Tác giả có một giả thuyết rằng độ chính xác thực sự là khoảng cách. Anh ta tuyên bố rằng các báo hiệu từ Kontakt.io là báo hiệu bị lỗi khi anh ta tăng sức mạnh đến giá trị tối đa, giá trị độ chính xác rất nhỏ cho 1, 5 và thậm chí 15 mét. Trước khi tăng sức mạnh, độ chính xác khá gần với các giá trị khoảng cách. Cá nhân tôi nghĩ rằng điều đó là chính xác, bởi vì mức công suất cao hơn, tác động của nhiễu càng ít. Và thật lạ là tại sao đèn hiệu Estimote không hoạt động theo cách này.

Tôi không nói tôi đúng 100%, nhưng ngoài việc là nhà phát triển iOS, tôi còn có bằng về điện tử không dây và tôi nghĩ rằng chúng ta không nên bỏ qua thuật ngữ "một sigma" trong tài liệu và tôi muốn bắt đầu thảo luận về nó.

Có thể thuật toán của Apple về độ chính xác chỉ thu thập các phép đo gần đây và phân tích phân phối gaussian của chúng. Và đó là cách nó thiết lập độ chính xác. Tôi sẽ không loại trừ khả năng họ sử dụng gia tốc kế biểu mẫu thông tin để phát hiện xem người dùng có đang di chuyển (và tốc độ như thế nào) để đặt lại các giá trị khoảng cách phân phối trước đó vì chúng chắc chắn đã thay đổi.


Phần giới thiệu tuyệt vời với mối tương quan "sigma". Ngoài ra, sẽ rất kỳ quặc nếu một người đam mê (thậm chí là một người đam mê Apple) sử dụng tên biến "độ chính xác" khi chúng có nghĩa là "khoảng cách". Mọi xác định "khoảng cách" hoặc "vị trí" của RSSI đều đi kèm với "biên độ sai số" (ví dụ: bạn đang ở đây +/- nhiều). Vì vậy, có nghĩa là thư viện của họ sẽ có cả một hàm cho "khoảng cách" và một hàm cho "độ chính xác".
Jesse Chisholm

@ r00dY tôi phải nói một lời giải thích tuyệt vời. Bây giờ, chỉ là một câu hỏi nếu bạn có thể giúp đỡ. Tôi có dữ liệu đo độ phân giải cho đèn hiệu được đo ở 1m, 2m ... 15m, ... 20m, v.v. Tôi có các giá trị khoảng cách trung bình cho mỗi khoảng cách. Bây giờ, từ đại biểu quản lý vị trí khi chúng tôi nhận được dữ liệu báo hiệu như báo hiệu lớn, nhỏ, rssi, v.v. có nên sử dụng khoảng cách thu được từ hiệu chuẩn ở trên mà tôi đã giải thích không? Xin vui lòng đề nghị, bất kỳ trợ giúp sẽ được đánh giá cao. Cảm ơn trước.
Alkesh Fudani

Của Apple accuracylà một chức năng của cả hai rssitx power. Không hoàn toàn là không thể mà Estimote quyết định thiết kế ngược lại accuracychức năng và bắt đầu cung cấp tx powercác giá trị để đọc accuracyước tính khoảng cách. Điều này cung cấp trải nghiệm đơn giản hơn cho nhà phát triển để ước tính khoảng cách, nhưng phá vỡ định nghĩa của Apple accuracy. Các thương hiệu khác có thể đúng hơn với định nghĩa của Apple accuracyvà thực sự cung cấp "ước tính 1 mét" hơn là một giá trị được thiết kế ngược để tạo ra accuracykhoảng cách ước tính.
Senseful

63

Công suất đầu ra iBeacon được đo (hiệu chỉnh) ở khoảng cách 1 mét. Giả sử rằng đây là -59 dBm (chỉ là một ví dụ). IBeacon sẽ bao gồm con số này như một phần của quảng cáo LE.

Thiết bị nghe (iPhone, v.v.), sẽ đo RSSI của thiết bị. Ví dụ, giả sử rằng đây là -72 dBm.

Vì những con số này tính bằng dBm, nên tỷ lệ công suất thực sự là sự khác biệt tính bằng dB. Vì thế:

ratio_dB = txCalibratedPower - RSSI

Để chuyển đổi nó thành một tỷ lệ tuyến tính, chúng tôi sử dụng công thức tiêu chuẩn cho dB:

ratio_linear = 10 ^ (ratio_dB / 10)

Nếu chúng ta giả sử bảo toàn năng lượng, thì cường độ tín hiệu phải giảm xuống là 1 / r ^ 2. Vì thế:

power = power_at_1_meter / r^2. Giải quyết cho r, chúng ta nhận được:

r = sqrt(ratio_linear)

Trong Javascript, mã sẽ giống như sau:

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

Lưu ý rằng, nếu bạn đang ở trong một tòa nhà bằng thép, thì có lẽ sẽ có phản xạ bên trong khiến tín hiệu phân rã chậm hơn 1 / r ^ 2. Nếu tín hiệu đi qua cơ thể người (nước) thì tín hiệu sẽ bị suy giảm. Rất có thể ăng-ten không có độ lợi bằng nhau ở tất cả các hướng. Các đồ vật bằng kim loại trong phòng có thể tạo ra các vân giao thoa kỳ lạ. Vân vân, vân vân ... YMMV.


vì tò mò: làm thế nào để ratio_dB = txCalibratedPower - RSSIgiải quyết? Vì cả hai phép đo đều tính bằng dBm, tôi cũng sẽ giả sử kết quả cũng tính bằng dBm?
BlackWolf


3

Ước tính khoảng cách đến nguồn của gói quảng cáo có định dạng iBeacon từ độ suy giảm của đường tín hiệu được tính bằng cách so sánh cường độ tín hiệu nhận được đo với công suất phát được xác nhận mà máy phát phải mã hóa trong dữ liệu quảng cáo.

Sơ đồ dựa trên suy hao đường dẫn như thế này chỉ mang tính chất gần đúng và có thể thay đổi theo những thứ như góc ăng-ten, các đối tượng can thiệp và có lẽ là môi trường RF nhiễu. Trong khi đó, các hệ thống thực sự được thiết kế để đo khoảng cách (GPS, Radar, v.v.) dựa trên các phép đo chính xác về thời gian truyền sóng, trong những trường hợp tương tự, thậm chí còn kiểm tra pha của tín hiệu.

Như Jiaru chỉ ra, 160 ft có thể nằm ngoài phạm vi dự định, nhưng điều đó không nhất thiết có nghĩa là một gói tin sẽ không bao giờ vượt qua được, chỉ là người ta không nên mong đợi nó hoạt động ở khoảng cách đó.


1

Có thể, nhưng nó phụ thuộc vào sản lượng điện của đèn hiệu bạn đang nhận, các nguồn rf khác gần đó, chướng ngại vật và các yếu tố môi trường khác. Điều tốt nhất nên làm là thử trong môi trường mà bạn quan tâm.


1

Với nhiều điện thoại và đèn hiệu ở cùng một vị trí, sẽ rất khó để đo lường khoảng cách với bất kỳ mức độ chính xác cao nào. Hãy thử sử dụng ứng dụng Android "b và l bluetooth le scanner" để trực quan hóa các biến thể cường độ tín hiệu (khoảng cách) cho nhiều đèn hiệu và bạn sẽ nhanh chóng phát hiện ra rằng các thuật toán thích ứng, phức tạp có thể được yêu cầu để cung cấp bất kỳ hình thức đo lường mức độ gần nhất quán nào .

Bạn sẽ thấy rất nhiều giải pháp chỉ đơn giản là hướng dẫn người dùng "vui lòng giữ điện thoại của bạn ở đây", để giảm bớt sự thất vọng của khách hàng.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.