RSSI (Received Signal Strength Indicator) — egy numerikus mérőszám, amely a BLE-eszköz jelerősségét méri dBm-ben a vevő oldalon. Az RSSI értéke -30 dBm (eszköz a közelben) és -100 dBm (észlelési határ) között változik. A Bluetooth Core Specification 5.4 (2023) opcionális paraméterként definiálja az RSSI-t, amely minden reklámcsomagban és adatcsomagban elérhető. Az RSSI-t távolságbecslésre (range estimation) és eszközök jelszint szerinti szűrésére használják, de pontatlan mutató: befolyásolják az akadályok, a többutas terjedés és az antenna típusa. A pontos pozicionáláshoz triangulációt és Kalman-szűrést alkalmaznak.
Főbb pontok
RSSI (Received Signal Strength Indicator) — a BLE-vevő által a csomag vételének pillanatában mért rádiójel-teljesítmény. A BLE-ben az RSSI-t minden reklámcsomag (advertising) és minden adatcsomag esetében mérik a kapcsolódás után. Az RSSI-érték logaritmikus skála, ahol minden 1 dBm lépés körülbelül a jelteljesítmény 1,26-szoros változásának felel meg.
Az RSSI hardverfüggő mutató: különböző BLE-chipek (nRF, TI, Dialog, Broadcom) és különböző antennák eltérő RSSI-értékeket mutathatnak ugyanarra a jelre. Ezért az RSSI összehasonlítása különböző eszközök között helytelen. Még két azonos okostelefon ugyanazon operációs rendszerrel is 2–5 dBm különbséget mutathat ugyanarra a beaconre.
A reklámcsomagban az RSSI-t mindhárom csatornára (37, 38, 39) mérik. Az értékek 3–10 dBm eltérést mutathatnak a csatornák között frekvenciainterferencia miatt. A modern BLE-veremek átlagos RSSI-t jelentenek az összes csatornán vagy RSSI-t csomagonként külön. Az iOS Core Bluetooth átlagos RSSI-t biztosít, az Android — az utolsó csomag RSSI-jét.
A BLE tipikus RSSI-tartománya -30 dBm és -100 dBm között van. Az e határokon kívüli értékek rendkívül ritkák: a -20 dBm azt jelenti, hogy az eszköz szó szerint érinti a szkenner antennáját, a -105 dBm pedig a jel teljes hiányát. A chipgyártók korlátozhatják a tartományt: például az nRF52832 -40 és -105 dBm közötti RSSI-t jelent.
| RSSI (dBm) | Jel minősége | Becsült távolság | Ajánlás |
|---|---|---|---|
| -30 – -50 | Kiváló | 0–1 m | Eszköz a közelben |
| -51 – -70 | Jó | 1–5 m | A szobán belül |
| -71 – -85 | Közepes | 5–15 m | Beaconoknál elfogadható |
| -86 – -95 | Gyenge | 15–30 m | Megbízhatatlan kapcsolat |
| -95 alatt | Kritikus | 30+ m | Észlelési határon |
TX Power Level — az adó teljesítménye, amely a reklámcsomagban (AD Type 0x0A) van feltüntetve, és lehetővé teszi a becslés korrigálását. A -70 dBm RSSI egy TX Power +4 dBm-es eszköztől azt jelenti, hogy a jel 74 dB-lel gyengült. Ha a TX Power ismeretlen, pontos távolságbecslés nem lehetséges. Az iBeacon tartalmazza a TX Power-t (1 bájt) a Manufacturer Data struktúrában a távolság kalibrálásához.
A Path Loss modellt (terjedési veszteség) használják a távolság RSSI alapján történő becslésére. Az alapképlet: RSSI = TX_Power - 10 × n × log10(d), ahol n — csillapítási együttható (2,0 szabad térben, 3,0–4,5 akadályokkal teli helyiségekben), d — távolság méterben. A gyakorlatban a becslés pontossága valós körülmények között ±2–5 m.
A modell kalibrálásához meg kell mérni az RSSI-t ismert távolságban (általában 1 m) és ki kell számítani a TX Power referenciát. Az iBeaconban ez a paraméter a csomagban van tárolva. Az Eddystone hasonló mechanizmust használ. Kalibrálás után kiszámítható a távolság: d = 10 ^ ((TX_Power — RSSI) / (10 × n)).
Az Apple Core Bluetooth Programming Guide (2024) szerint az iBeacon távolságbecslésének pontossága: immediate (<0,5 m) — amikor az RSSI magasabb a kalibrációs értéknél, near (0,5–3 m) — amikor az RSSI a kalibrációs értéktől 3–6 dB tartományban van, far (>3 m) — gyenge jel esetén. Egyetlen matematikai modell sem ad ±1 m-nél jobb pontosságot további feldolgozás nélkül.
Az RSSI zajos mutató, pontossága számos tényezőtől függ. A fő hibák forrásai: akadályok (falak, bútorok, emberek) egyenként 3–15 dB-lel gyengítik a jelet, többutas terjedés (falakról való visszaverődés) egyes pontokon erősítheti, máshol gyengítheti a jelet, antenna orientációja 3–10 dB-lel változtatja az RSSI-t az eszköz elforgatásakor.
Az emberi test a BLE-jel egyik legerősebb elnyelője. Ha személy van a beacon és az okostelefon között, az RSSI 10–20 dB-vel csökkenhet. Az emberi testben lévő víz hatékonyan elnyeli a rádiósugárzást 2,4 GHz-es frekvencián. Ezért a boltok ajtain lévő beaconok eltérő RSSI-t mutathatnak különböző magasságú és testalkatú vásárlók esetében.
További tényezők: Wi-Fi interferencia a szomszédos csatornákon 3–5 dB-lel csökkentheti az RSSI-t, a BLE-chip hőmérséklete befolyásolja az RSSI-mérés pontosságát (egyes chipeknél akár 1 dB/°C eltérés), az akkumulátor degradációja a beaconban csökkenti a TX Power-t, ami alacsonyabb RSSI-hez vezet a vevő oldalon.
A nyers RSSI nem alkalmas pontos számításokra — túl sok zajt és kiugró értéket tartalmaz. A stabil távolságbecslés eléréséhez szűrési módszereket alkalmaznak. A legegyszerűbb — a mozgóátlag: az utolsó N RSSI-érték számtani átlagát veszik. N = 5–10 általában elegendő a rövid távú ingadozások simításához.
// Kalman-szűrő RSSI-hez
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 {
// Előrejelzés
errorCovariance += processNoise
// Frissítés
val kalmanGain =
errorCovariance /
(errorCovariance + measurementNoise)
estimate = estimate +
kalmanGain * (rawRssi - estimate)
errorCovariance =
(1.0 - kalmanGain) * errorCovariance
return estimate
}
}
Kalman-szűrő — egy fejlettebb módszer, amely figyelembe veszi az RSSI-változások dinamikáját és kisebb késleltetést ad, mint a mozgóátlag. Helyhez kötött beaconok (mozdulatlan) esetén a mozgóátlag elfogadható eredményt ad. Mozgó eszközök esetén a Kalman-szűrő előnyösebb, mert gyorsabban alkalmazkodik a változásokhoz. Ezenkívül Medián-szűrő használható a kiugró értékek eldobására.
iOS Core Bluetooth az RSSI-t a peripheral.rssi (NSNumber) tulajdonságon keresztül biztosítja az RSSI-olvasás befejezése után. A reklámcsomag RSSI-jének lekéréséhez használja az advertisementData[CBAdvertisementDataRSSIKey] értéket. Az iOS átlagos RSSI-értékként adja vissza a három csatornán. Folyamatos RSSI-figyeléshez hívja a readRSSI-t legfeljebb másodpercenként 1 alkalommal.
// RSSI lekérése iOS-ben
func centralManager(
_ central: CBCentralManager,
didDiscover peripheral: CBPeripheral,
advertisementData: [String: Any],
rssi RSSI: NSNumber
) {
let signalStrength = Int(truncating: RSSI)
// Gyenge jelek szűrése
guard signalStrength > -90 else {
return
}
print("Eszköz " +
"\(peripheral.name ?? "unknown") " +
"RSSI: \(signalStrength) dBm")
}
Android az RSSI-t az onScanResult callback-en keresztül biztosítja: result.getRssi(). Az RSSI-érték az utolsó reklámcsomag RSSI-je (nem átlag). Stabil leolvasásokhoz több értéket kell gyűjteni és szűrést alkalmazni. Az Android TX Power Level-t is biztosít a result.getScanRecord().getTxPowerLevel() segítségével, ha azt a reklámcsomag továbbítja.
// RSSI lekérése Androidban
private val scanCallback = object : ScanCallback() {
override fun onScanResult(
callbackType: Int,
result: ScanResult
) {
val rssi = result.rssi
val txPower = result.scanRecord?.
txPowerLevel ?: -128
// Kalman-szűrő alkalmazása
val filtered = kalmanFilter.
filter(rssi.toDouble())
Log.d("BLEScanner",
"RSSI: $rssi, " +
"Filtered: $filtered, " +
"TX: $txPower")
}
}
Az RSSI-t pozicionálásra használó alkalmazások fejlesztésekor vegye figyelembe: iOS-ben az RSSI-értékek stabilabbak a hardverkalibrációnak köszönhetően, Androidban — zajosabbak és az eszközgyártótól függenek. Többplatformos projektekhez ajánlott az alkalmazás oldalán szűrést implementálni konfigurálható paraméterekkel minden platformhoz.
Gyakran ismételt kérdések
Nem, az RSSI csak hozzávetőleges becslést ad a távolságról ±2–5 m pontossággal valós körülmények között. A pontos pozicionálához több szkenneres trianguláció, Kalman-szűrés és az adó TX Power-ének figyelembevétele szükséges.
A többutas terjedés és a rádiójel-ingadozások miatt. A falakról és tárgyakról való visszaverődések interferenciát hoznak létre, amelyben a jel hol erősödik, hol gyengül. Az RSSI 5–10 dB-es változása egy mozdulatlan eszközön normális jelenség.
Az iOS a readRSSI másodpercenként legfeljebb 1 alkalommal történő hívását javasolja. A túl gyakori kérések adatcsomagok kimaradásához vezethetnek. Az RSSI szkennelés közbeni figyeléséhez használja a CBAdvertisementDataRSSIKey értéket, amely minden reklámcsomaghoz elérhető.
TX Power Level — az adó teljesítménye dBm-ben, a reklámcsomagban feltüntetve. RSSI + TX Power = a jel teljes csillapítása az adótól a vevőig tartó úton. A TX Power ismeretében pontosabban becsülhető a távolság: RSSI - TX Power = Path Loss (útvonalveszteség).
Helyhez kötött beaconok esetén — mozgóátlag 5–10 érték ablakkal. Mozgó eszközök esetén — Kalman-szűrő kis folyamat zajjal (0,01–0,05). A kiugró értékek eldobásához adjon hozzá Medián-szűrőt, amely a 2 szórás határain kívüli értékeket levágja.
Összegzés
Kulcsrakész mobilalkalmazást fejlesztünk
Az IT Sectr 2017 óta készít iOS és Android alkalmazásokat induló vállalkozásoknak és vállalkozásoknak. Tanácsot adunk, és a legjobb megoldást javasoljuk.
Olvassa el is