RSSI (Received Signal Strength Indicator) — qabul qiluvchi tomonda BLE qurilmasining signal quvvatini dBm da o'lchaydigan raqamli metrikadir. RSSI qiymati -30 dBm (qurilma yaqinida) dan -100 dBm (aniqlash chegarasida) gacha o'zgaradi. Bluetooth Core Specification 5.4 (2023) RSSI ni har bir reklama paketi va ma'lumotlar paketida mavjud bo'lgan ixtiyoriy parametr sifatida belgilaydi. RSSI masofani baholash (range estimation) va qurilmalarni signal darajasi bo'yicha filtrlash uchun ishlatiladi, ammo noaniq indikatordir: unga to'siqlar, ko'p nurli tarqalish va antenna turi ta'sir qiladi. Aniq joylashishni aniqlash uchun triangulyatsiya va Kalman filtri qo'llaniladi.
Asosiy fikrlar
RSSI (Received Signal Strength Indicator) — BLE qabul qilgichi tomonidan paket qabul qilish vaqtida o'lchanadigan radio signal quvvatidir. BLE da RSSI har bir reklama paketi (advertising) va ulanishdan keyin har bir ma'lumotlar paketi uchun o'lchanadi. RSSI qiymati logarifmik shkala bo'lib, unda 1 dBm li har bir qadam signal quvvatining taxminan 1,26 marta o'zgarishiga to'g'ri keladi.
RSSI qurilmaga bog'liq ko'rsatkichdir: turli BLE chiplari (nRF, TI, Dialog, Broadcom) va turli antennalar bir xil signal uchun turli RSSI qiymatlarini ko'rsatishi mumkin. Shuning uchun turli qurilmalar o'rtasida RSSI ni solishtirish noto'g'ri. Hatto bir xil operatsion tizimdagi ikkita bir xil smartfon bir xil beacon uchun 2–5 dBm farqni ko'rsatishi mumkin.
Reklama paketida RSSI uchta kanalning har biri uchun o'lchanadi (37, 38, 39). Qiymatlar chastota shovqinlari tufayli kanallar o'rtasida 3–10 dBm farq qilishi mumkin. Zamonaviy BLE steklari barcha kanallar bo'yicha o'rtacha RSSI yoki har bir paket uchun alohida RSSI haqida xabar beradi. iOS Core Bluetooth o'rtacha RSSI ni, Android esa oxirgi paketning RSSI sini taqdim etadi.
BLE uchun odatdagi RSSI diapazoni -30 dBm dan -100 dBm gacha. Bu chegaralardan tashqari qiymatlar juda kam uchraydi: -20 dBm qurilma skaner antennasiga tegishini, -105 dBm esa signalning to'liq yo'qligini bildiradi. Chip ishlab chiqaruvchilari diapazonni cheklashi mumkin: masalan, nRF52832 -40 dan -105 dBm gacha RSSI haqida xabar beradi.
| RSSI (dBm) | Signal sifati | Taxminiy masofa | Tavsiya |
|---|---|---|---|
| -30 – -50 | A'lo | 0–1 m | Qurilma yaqinida |
| -51 – -70 | Yaxshi | 1–5 m | Xona ichida |
| -71 – -85 | O'rtacha | 5–15 m | Beaconlar uchun maqbul |
| -86 – -95 | Zaif | 15–30 m | Ishonchsiz ulanish |
| -95 dan past | Tangidiy | 30+ m | Aniqlash chegarasida |
TX Power Level — reklama paketida (AD Type 0x0A) ko'rsatilgan uzatuvchi quvvati bo'lib, baholashni tuzatishga imkon beradi. TX Power +4 dBm bo'lgan qurilmadan -70 dBm RSSI signal 74 dB zaiflashganini bildiradi. Agar TX Power noma'lum bo'lsa, masofani aniq baholash mumkin emas. iBeacon masofa kalibrlash uchun Manufacturer Data tarkibida TX Power (1 bayt) ni saqlaydi.
Path Loss modeli (tarqalish yo'qotishlari) RSSI asosida masofani baholash uchun ishlatiladi. Asosiy formula: RSSI = TX_Power - 10 × n × log10(d), bu erda n — zaiflashish koeffitsienti (ochiq maydon uchun 2,0, to'siqlari bo'lgan xonalar uchun 3,0–4,5), d — metrdagi masofa. Amalda real sharoitda baholash aniqligi ±2–5 m ni tashkil qiladi.
Modelni kalibrlash uchun RSSI ni ma'lum masofada (odatda 1 m) o'lchash va TX Power ma'lumotnomasini hisoblash kerak. iBeacon da bu parametr paketda saqlanadi. Eddystone da shunga o'xshash mexanizm qo'llaniladi. Kalibrlashdan keyin masofani hisoblash mumkin: d = 10 ^ ((TX_Power — RSSI) / (10 × n)).
Apple Core Bluetooth Programming Guide (2024) ga ko'ra, iBeacon uchun masofani baholash aniqligi: immediate (<0,5 m) — RSSI kalibrlash qiymatidan yuqori bo'lganda, near (0,5–3 m) — RSSI kalibrlash qiymatidan 3–6 dB oralig'ida bo'lganda, far (>3 m) — zaif signalda. Hech qanday matematik model qo'shimcha ishlovsiz ±1 m dan yaxshiroq aniqlikni ta'minlamaydi.
RSSI — shovqinli ko'rsatkich va uning aniqligi ko'plab omillarga bog'liq. Asosiy xato manbalari: to'siqlar (devorlar, mebellar, odamlar) har biri signalni 3–15 dB zaiflashtiradi, ko'p nurli tarqalish (devorlardan aks etish) ba'zi nuqtalarda signalni kuchaytirishi va boshqalarida zaiflashtirishi mumkin, antenna yo'nalishi qurilmani burishda RSSI ni 3–10 dB o'zgartiradi.
Inson tanasi BLE signalining eng kuchli yutuvchilaridan biridir. Agar beacon va smartfon o'rtasida odam bo'lsa, RSSI 10–20 dB ga tushishi mumkin. Inson tanasidagi suv 2,4 GHz chastotasida radio nurlanishni samarali yutadi. Shuning uchun do'kon eshiklaridagi beaconlar turli bo'y va tana tuzilishidagi mijozlar uchun turli RSSI ko'rsatishi mumkin.
Qo'shimcha omillar: qo'shni kanallardagi Wi-Fi shovqinlari RSSI ni 3–5 dB kamaytirishi mumkin, BLE chipining harorati RSSI o'lchash aniqligiga ta'sir qiladi (ba'zi chiplarda 1 dB/°C siljish), beaconda batareyaning degradatsiyasi TX Power ni kamaytiradi, bu esa qabul qilgichda past RSSI ga olib keladi.
Xom RSSI aniq hisob-kitoblar uchun yaroqsiz — juda ko'p shovqin va chetki qiymatlarni o'z ichiga oladi. Barqaror masofa bahosini olish uchun filtrlash usullari qo'llaniladi. Eng oddiyi — sirpanchiq o'rtacha: oxirgi N RSSI qiymatining arifmetik o'rtachasi olinadi. N = 5–10 odatda qisqa muddatli tebranishlarni tekislash uchun etarli.
// RSSI uchun 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 {
// Bashorat qil
errorCovariance += processNoise
// Yangila
val kalmanGain =
errorCovariance /
(errorCovariance + measurementNoise)
estimate = estimate +
kalmanGain * (rawRssi - estimate)
errorCovariance =
(1.0 - kalmanGain) * errorCovariance
return estimate
}
}
Kalman filtri — RSSI o'zgarish dinamikasini hisobga oladigan va sirpanchiq o'rtachadan kamroq kechikish beradigan ilg'or usuldir. Statsionar beaconlar (harakatsiz) uchun sirpanchiq o'rtacha maqbul natija beradi. Harakatlanuvchi qurilmalar uchun Kalman filtri afzalroq, chunki u o'zgarishlarga tezroq moslashadi. Qo'shimcha ravishda, chetki qiymatlarni chiqarib tashlash uchun Median filtridan foydalanish mumkin.
iOS Core Bluetooth RSSI o'qish tugagandan so'ng peripheral.rssi (NSNumber) xususiyati orqali RSSI ni taqdim etadi. Reklama paketining RSSI sini olish uchun advertisementData[CBAdvertisementDataRSSIKey] dan foydalaning. iOS RSSI ni uchta kanal bo'yicha o'rtacha qiymat sifatida qaytaradi. Uzluksiz RSSI monitoringi uchun readRSSI ni sekundiga 1 martadan ko'p bo'lmagan intervalda chaqiring.
// iOS da RSSI olish
func centralManager(
_ central: CBCentralManager,
didDiscover peripheral: CBPeripheral,
advertisementData: [String: Any],
rssi RSSI: NSNumber
) {
let signalStrength = Int(truncating: RSSI)
// Zaif signallarni filtrlash
guard signalStrength > -90 else {
return
}
print("Qurilma " +
"\(peripheral.name ?? "unknown") " +
"RSSI: \(signalStrength) dBm")
}
Android RSSI ni onScanResult callback orqali taqdim etadi: result.getRssi(). RSSI qiymati — oxirgi reklama paketining RSSI si (o'rtacha emas). Barqaror ko'rsatkichlar uchun bir nechta qiymatlarni to'plash va filtrlashni qo'llash kerak. Android shuningdek, TX Power Level ni result.getScanRecord().getTxPowerLevel() orqali taqdim etadi, agar reklama paketida uzatilsa.
// Android da RSSI olish
private val scanCallback = object : ScanCallback() {
override fun onScanResult(
callbackType: Int,
result: ScanResult
) {
val rssi = result.rssi
val txPower = result.scanRecord?.
txPowerLevel ?: -128
// Kalman filtrini qo'llash
val filtered = kalmanFilter.
filter(rssi.toDouble())
Log.d("BLEScanner",
"RSSI: $rssi, " +
"Filtered: $filtered, " +
"TX: $txPower")
}
}
RSSI dan joylashishni aniqlash uchun foydalanadigan ilovalarni ishlab chiqishda e'tiborga oling: iOS da RSSI qiymatlari apparat kalibrashi tufayli barqarorroq, Android da — shovqinliroq va qurilma ishlab chiqaruvchisiga bog'liq. Ko'p platformali loyihalar uchun har bir platforma uchun sozlanishi parametrlar bilan ilova tomonida filtrlashni amalga oshirish tavsiya etiladi.
Tez-tez so'raladigan savollar
Yo'q, RSSI faqat taxminiy baho beradi, real sharoitda aniqlik ±2–5 m. Aniq joylashishni aniqlash uchun bir nechta skanerdan triangulyatsiya, Kalman filtri va uzatuvchining TX Power ini hisobga olish talab qilinadi.
Ko'p nurli tarqalish va radio signalining tebranishlari tufayli. Devor va buyumlardan aks etishlar signal ba'zan kuchayadigan, ba'zan zaiflashadigan interferensiya hosil qiladi. Harakatsiz qurilmada RSSI ning 5–10 dB o'zgarishi normal hodisa.
iOS readRSSI ni sekundiga 1 martadan ko'p chaqirmaslikni tavsiya qiladi. Juda tez-tez so'rovlar ma'lumotlar paketlarining yo'qolishiga olib kelishi mumkin. Skanerlash vaqtida RSSI monitoringi uchun har bir reklama paketi uchun mavjud bo'lgan CBAdvertisementDataRSSIKey dan foydalaning.
TX Power Level — reklama paketida ko'rsatilgan uzatuvchi quvvati dBm da. RSSI + TX Power = uzatuvchidan qabul qilgichgacha bo'lgan signalning umumiy zaiflashishi. TX Power ni bilgan holda masofani aniqroq baholash mumkin: RSSI - TX Power = Path Loss (yo'lda yo'qotishlar).
Statsionar beaconlar uchun — 5–10 qiymat oynasi bilan sirpanchiq o'rtacha. Harakatlanuvchi qurilmalar uchun — kichik jarayon shovqini bilan (0,01–0,05) Kalman filtri. Chetki qiymatlarni chiqarib tashlash uchun 2 standart og'ishdan tashqari qiymatlarni kesadigan Median filtrini qo'shing.
Xulosa
Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz
IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.