RSSI a BLE-ben — mi ez, jelerősség-jelző és távolságbecslés

Szerző: IT Sectr Megjelenés: 2026-07-16 Olvasási idő: 10 perc

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 — a BLE-jel teljesítményszintje dBm-ben, mérve a vevő oldalon a csomag vételkor.
  • RSSI-tartomány: -30 dBm (nagyon erős jel) és -100 dBm (észlelési határ) között.
  • Az RSSI-t távolságbecslésre használják a Path Loss modell szerint, de a pontosság valós körülmények között ±2–5 m.
  • Az RSSI-t befolyásolják: akadályok (falak, emberek), többutas terjedés és az antenna orientációja.
  • A pontosság javításához Kalman-szűrést, mozgóátlagot és triangulációt alkalmaznak több szkennerrel.

Mi az RSSI a BLE-ben?

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.

Az RSSI-értékek tartománya

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égeBecsült távolságAjánlás
-30 – -50Kiváló0–1 mEszköz a közelben
-51 – -701–5 mA szobán belül
-71 – -85Közepes5–15 mBeaconoknál elfogadható
-86 – -95Gyenge15–30 mMegbízhatatlan kapcsolat
-95 alattKritikus30+ 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.

Az RSSI távolságfüggése

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 pontosságát befolyásoló tényezők

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.

RSSI szűrése és simítása

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.

kotlin
// 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.

RSSI lekérése iOS-ben és Androidban

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.

swift
// 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.

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

Pontosan meghatározható-e a távolság RSSI alapján?

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.

Miért változik az RSSI akkor is, ha az eszköz nem mozog?

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.

Milyen gyakran olvasható az RSSI iOS-ben?

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

Mi az a TX Power Level és hogyan kapcsolódik az RSSI-hez?

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

Melyik RSSI-szűrési módszer a legjobb beaconokhoz?

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

  • RSSI — a BLE-jel erősségének mutatója dBm-ben, mérve a vevő oldalon minden csomag vételkor.
  • Értéktartomány: -30 dBm (kiváló jel) és -100 dBm (gyenge jel az észlelési határon) között.
  • Az RSSI lehetővé teszi a távolság hozzávetőleges becslését ±2–5 m pontossággal, de nem pontos távolságmérő a zaj és interferencia miatt.
  • A fő hibák forrásai: akadályok (falak, emberek), többutas terjedés, antenna orientációja és Wi-Fi interferencia.
  • A stabil távolságbecsléshez Kalman-szűrést, mozgóátlagot és Medián-szűrőt használnak a kiugró értékek eldobására.
  • iOS-ben az RSSI három csatorna átlaga, Androidban — az utolsó csomag értéke, ami szűrést igényel az alkalmazás oldalán.
  • A reklámcsomagban lévő TX Power Level az RSSI-vel együtt Path Loss-t ad — a jel teljes csillapítását a pontosabb távolságbecsléshez.

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.

Projekt megbeszélése

Olvassa el is