RSSI (Received Signal Strength Indicator) — qəbuledici tərəfdə BLE cihazının siqnal gücünü dBm ilə ölçən ədədi metrikadır. RSSI dəyəri -30 dBm (cihaz yaxınlıqda) ilə -100 dBm (aşkarlanma həddində) arasında dəyişir. Bluetooth Core Specification 5.4 (2023) RSSI-ni hər reklam paketində və məlumat paketində mövcud olan isteğe bağlı parametr kimi təyin edir. RSSI məsafə qiymətləndirməsi (range estimation) və cihazları siqnal səviyyəsinə görə filtrləmək üçün istifadə olunur, lakin qeyri-dəqiq göstəricidir: ona maneələr, çoxşüalı yayılma və antenna növü təsir edir. Dəqiq mövqeləndirmə üçün trianqulyasiya və Kalman filtrasiyası tətbiq olunur.
Əsas məqamlar
RSSI (Received Signal Strength Indicator) — BLE qəbuledicisi tərəfindən paket qəbulu anında ölçülən radio siqnal gücüdür. BLE-də RSSI hər reklam paketi (advertising) və qoşulmadan sonra hər məlumat paketi üçün ölçülür. RSSI dəyəri loqarifmik şkala olub, burada 1 dBm-lik hər addım siqnal gücünün təxminən 1,26 dəfə dəyişməsinə uyğun gəlir.
RSSI aparatdan asılı göstəricidir: müxtəlif BLE çipləri (nRF, TI, Dialog, Broadcom) və müxtəlif antenalar eyni siqnal üçün fərqli RSSI dəyərləri göstərə bilər. Buna görə müxtəlif cihazlar arasında RSSI müqayisəsi düzgün deyil. Hətta eyni OS-də olan iki eyni smartfon eyni beacon üçün 2–5 dBm fərq göstərə bilər.
Reklam paketində RSSI üç kanalın hər biri üçün ölçülür (37, 38, 39). Dəyərlər tezlik müdaxiləsi səbəbindən kanallar arasında 3–10 dBm fərqlənə bilər. Müasir BLE stack-ləri bütün kanallar üzrə orta RSSI və ya hər paket üçün ayrıca RSSI bildirir. iOS Core Bluetooth orta RSSI təqdim edir, Android — son paketin RSSI-sini.
BLE üçün tipik RSSI diapazonu -30 dBm ilə -100 dBm arasındadır. Bu hədlərdən kənar dəyərlər olduqca nadirdir: -20 dBm cihazın skaner antennasına toxunduğunu, -105 dBm isə siqnalın tam olmamasını bildirir. Çip istehsalçıları diapazonu məhdudlaşdıra bilər: məsələn, nRF52832 -40 ilə -105 dBm arasında RSSI bildirir.
| RSSI (dBm) | Siqnal keyfiyyəti | Təxmini məsafə | Tövsiyə |
|---|---|---|---|
| -30 – -50 | Əla | 0–1 m | Cihaz yaxınlıqda |
| -51 – -70 | Yaxşı | 1–5 m | Otaq daxilində |
| -71 – -85 | Orta | 5–15 m | Beaconlar üçün məqbul |
| -86 – -95 | Zəif | 15–30 m | Etibarsız qoşulma |
| -95-dən aşağı | Kritik | 30+ m | Aşkarlanma həddində |
TX Power Level — reklam paketində (AD Type 0x0A) göstərilən ötürücü gücü olub qiymətləndirməni korrektə etməyə imkan verir. TX Power +4 dBm olan cihazdan -70 dBm RSSI siqnalın 74 dB zəiflədiyini bildirir. TX Power məlum deyilsə, dəqiq məsafə qiymətləndirməsi mümkün deyil. iBeacon məsafə kalibrasiyası üçün Manufacturer Data strukturunda TX Power (1 bayt) saxlayır.
Path Loss modeli (yayılma itkiləri) RSSI əsasında məsafəni qiymətləndirmək üçün istifadə olunur. Əsas düstur: RSSI = TX_Power - 10 × n × log10(d), burada n — zəifləmə əmsalı (açıq məkan üçün 2,0, maneəli otaqlar üçün 3,0–4,5), d — metrlə məsafə. Praktikada real şəraitdə qiymətləndirmə dəqiqliyi ±2–5 m təşkil edir.
Modeli kalibrləmək üçün RSSI-ni məlum məsafədə (adətən 1 m) ölçmək və TX Power istinadını hesablamaq lazımdır. iBeacon-da bu parametr paketdə saxlanılır. Eddystone-da oxşar mexanizm istifadə olunur. Kalibrasiyadan sonra məsafəni hesablamaq olar: d = 10 ^ ((TX_Power — RSSI) / (10 × n)).
Apple Core Bluetooth Programming Guide (2024)-ə görə, iBeacon üçün məsafə qiymətləndirmə dəqiqliyi: immediate (<0,5 m) — RSSI kalibrasiya dəyərindən yüksək olduqda, near (0,5–3 m) — RSSI kalibrasiya dəyərindən 3–6 dB aralığında olduqda, far (>3 m) — zəif siqnal olduqda. Heç bir riyazi model əlavə emal olmadan ±1 m-dən yaxşı dəqiqlik vermir.
RSSI — səs-küylü göstəricidir və onun dəqiqliyi bir çox amillərdən asılıdır. Əsas xəta mənbələri: maneələr (divarlar, mebel, insanlar) hər biri siqnalı 3–15 dB zəiflədir, çoxşüalı yayılma (divarlardan əks olunmalar) bəzi nöqtələrdə siqnalı gücləndirə, bəzilərində zəiflədə bilər, antenna oriyentasiyası cihazın döndərilməsi ilə RSSI-ni 3–10 dB dəyişir.
İnsan bədəni BLE siqnalının ən güclü uducularından biridir. Beacon və smartfon arasında insan varsa, RSSI 10–20 dB düşə bilər. İnsan bədənindəki su 2,4 GHz tezliyində radio şüalanmanı effektiv şəkildə udur. Buna görə mağaza qapılarındakı beaconlar müxtəlif boy və bədən quruluşlu müştərilər üçün fərqli RSSI göstərə bilər.
Əlavə amillər: qonşu kanallardakı Wi-Fi müdaxiləsi RSSI-ni 3–5 dB azalda bilər, BLE çipinin temperatursi RSSI ölçmə dəqiqliyinə təsir edir (bəzi çiplərdə 1 dB/°C sürüşmə), beaconda batareyanın deqradasiyası TX Power-i azaldır ki, bu da qəbuledicidə aşağı RSSI-yə səbəb olur.
Xam RSSI dəqiq hesablamalar üçün yararsızdır — çoxlu səs-küy və kənar dəyərlər ehtiva edir. Sabit məsafə qiymətləndirməsi əldə etmək üçün filtrasiya metodları tətbiq olunur. Ən sadəsi — sürüşən orta: son N RSSI dəyərinin arifmetik ortası götürülür. N = 5–10 adətən qısamüddətli dəyişmələri hamarlaşdırmaq üçün kifayətdir.
// RSSI üçün Kalman filtri
class RssiKalmanFilter(
private val processNoise: Double = 0.01,
private val measurementNoise: Double = 1.0
) {
private var estimate: Double = 0.0
private var errorCovariance: Double = 1.0
fun filter(rawRssi: Double): Double {
// Proqnozlaşdır
errorCovariance += processNoise
// Yenilə
val kalmanGain =
errorCovariance /
(errorCovariance + measurementNoise)
estimate = estimate +
kalmanGain * (rawRssi - estimate)
errorCovariance =
(1.0 - kalmanGain) * errorCovariance
return estimate
}
}
Kalman filtri — RSSI dəyişmə dinamikasını nəzərə alan və sürüşən ortadan daha az gecikmə verən daha qabaqcıl metoddur. Stasionar beaconlar (hərəkətsiz) üçün sürüşən orta məqbul nəticə verir. Hərəkət edən cihazlar üçün Kalman filtri daha üstündür, çünki dəyişikliklərə daha tez uyğunlaşır. Əlavə olaraq, kənar dəyərləri atmaq üçün Median filtrindən istifadə etmək olar.
iOS Core Bluetooth RSSI oxunuşu tamamlandıqdan sonra peripheral.rssi (NSNumber) xassəsi vasitəsilə RSSI təqdim edir. Reklam paketinin RSSI-sini əldə etmək üçün advertisementData[CBAdvertisementDataRSSIKey] istifadə edin. iOS RSSI-ni üç kanal üzrə orta dəyər kimi qaytarır. Davamlı RSSI monitorinqi üçün readRSSI-ni saniyədə 1 dəfədən tez çağırmayın.
// iOS-da RSSI əldə edin
func centralManager(
_ central: CBCentralManager,
didDiscover peripheral: CBPeripheral,
advertisementData: [String: Any],
rssi RSSI: NSNumber
) {
let signalStrength = Int(truncating: RSSI)
// Zəif siqnalları filtrlə
guard signalStrength > -90 else {
return
}
print("Cihaz " +
"\(peripheral.name ?? "unknown") " +
"RSSI: \(signalStrength) dBm")
}
Android RSSI-ni onScanResult call-back-i vasitəsilə təqdim edir: result.getRssi(). RSSI dəyəri son reklam paketinin RSSI-sidir (orta deyil). Sabit göstəricilər üçün bir neçə dəyər toplamaq və filtrasiya tətbiq etmək lazımdır. Android həmçinin TX Power Level-i result.getScanRecord().getTxPowerLevel() vasitəsilə təqdim edir, əgər reklam paketində ötürülürsə.
// Android-də RSSI əldə edin
private val scanCallback = object : ScanCallback() {
override fun onScanResult(
callbackType: Int,
result: ScanResult
) {
val rssi = result.rssi
val txPower = result.scanRecord?.
txPowerLevel ?: -128
// Kalman filtrini tətbiq et
val filtered = kalmanFilter.
filter(rssi.toDouble())
Log.d("BLEScanner",
"RSSI: $rssi, " +
"Filtered: $filtered, " +
"TX: $txPower")
}
}
RSSI-dən mövqeləndirmə üçün istifadə edən tətbiqlər hazırlayarkən nəzərə alın: iOS-da RSSI dəyərləri aparat kalibrasiyası sayəsində daha sabitdir, Android-də — daha səs-küylü və cihaz istehsalçısından asılıdır. Çoxplatformalı layihələr üçün hər platforma üçün konfiqurasiya olunan parametrlərlə tətbiq tərəfində filtrasiya tətbiq etmək tövsiyə olunur.
Tez-tez verilən suallar
Xeyr, RSSI yalnız təxmini qiymətləndirmə verir, dəqiqlik real şəraitdə ±2–5 m təşkil edir. Dəqiq mövqeləndirmə üçün bir neçə skanerdən trianqulyasiya, Kalman filtrasiyası və ötürücünün TX Power-inin nəzərə alınması tələb olunur.
Çoxşüalı yayılma və radio siqnalının dəyişmələri səbəbindən. Divarlardan və əşyalardan əks olunmalar siqnalın bəzən gücləndiyi, bəzən zəiflədiyi interferensiya yaradır. Hərəkətsiz cihazda RSSI-nin 5–10 dB dəyişməsi normal haldır.
iOS readRSSI-nin saniyədə 1 dəfədən tez çağırılmamasını tövsiyə edir. Çox tez-tez sorğular məlumat paketlərinin itkisinə səbəb ola bilər. Skaner zamanı RSSI monitorinqi üçün hər reklam paketi üçün mövcud olan CBAdvertisementDataRSSIKey istifadə edin.
TX Power Level — reklam paketində göstərilən ötürücü gücü dBm ilə. RSSI + TX Power = ötürücüdən qəbulediciyə qədər siqnalın ümumi zəifləməsi. TX Power-i bilməklə məsafəni daha dəqiq qiymətləndirmək olar: RSSI - TX Power = Path Loss (yolda itkilər).
Stasionar beaconlar üçün — 5–10 dəyər pəncərəsi ilə sürüşən orta. Hərəkət edən cihazlar üçün — kiçik proses səs-küyü ilə (0,01–0,05) Kalman filtri. Kənar dəyərləri atmaq üçün 2 standart kənarlaşmadan kənar dəyərləri kəsən Median filtri əlavə edin.
Nəticə
Açar təslim mobil tətbiq hazırlayacağıq
IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.
Həm də oxuyun