RSSI în BLE — ce este, indicator de semnal și estimare a distanței

Autor: IT Sectr Publicat: 2026-07-16 Timp de citire: 10 min

RSSI (Received Signal Strength Indicator) — este o metrică numerică care măsoară puterea semnalului unui dispozitiv BLE în dBm la partea receptoare. Valoarea RSSI variază de la -30 dBm (dispozitiv în apropiere) până la -100 dBm (la limita de detectare). Bluetooth Core Specification 5.4 (2023) definește RSSI ca un parametru opțional disponibil în fiecare pachet de publicitate și pachet de date. RSSI este utilizat pentru estimarea distanței (range estimation) și filtrarea dispozitivelor după nivelul semnalului, dar este un indicator inexact: îl influențează obstacolele, propagarea pe mai multe căi și tipul antenei. Pentru poziționare precisă se aplică triangularea și filtrarea Kalman.

Principalele puncte

  • RSSI — nivelul puterii semnalului BLE în dBm, măsurat la partea receptoare la primirea pachetului.
  • Intervalul RSSI: de la -30 dBm (semnal foarte puternic) până la -100 dBm (limita de detectare).
  • RSSI este utilizat pentru estimarea distanței conform modelului Path Loss, dar acuratețea este de ±2–5 m în condiții reale.
  • RSSI este influențat de: obstacole (pereți, oameni), propagarea pe mai multe căi și orientarea antenei.
  • Pentru îmbunătățirea acurateții se aplică filtrarea Kalman, media mobilă și triangularea cu mai multe scanere.

Ce este RSSI în BLE?

RSSI (Received Signal Strength Indicator) — este măsurarea puterii semnalului radio primit de receptorul BLE în momentul primirii pachetului. În BLE, RSSI se măsoară pentru fiecare pachet de publicitate (advertising) și pentru fiecare pachet de date după conectare. Valoarea RSSI este o scară logaritmică, unde fiecare pas de 1 dBm corespunde aproximativ unei modificări a puterii semnalului de 1,26 ori.

RSSI este un indicator dependent de hardware: diferite cipuri BLE (nRF, TI, Dialog, Broadcom) și diferite antene pot afișa valori RSSI diferite pentru același semnal. Prin urmare, compararea RSSI între diferite dispozitive este incorectă. Chiar și două smartphone-uri identice cu același sistem de operare pot prezenta o diferență de 2–5 dBm pentru același beacon.

În pachetul de publicitate, RSSI se măsoară pentru fiecare dintre cele trei canale (37, 38, 39). Valorile pot difera cu 3–10 dBm între canale din cauza interferențelor de frecvență. Stivele moderne BLE raportează RSSI mediat pe toate canalele sau RSSI pentru fiecare pachet separat. iOS Core Bluetooth furnizează RSSI mediu, Android — RSSI al ultimului pachet.

Intervalul valorilor RSSI

Intervalul tipic RSSI pentru BLE este de la -30 dBm la -100 dBm. Valorile în afara acestor limite sunt extrem de rare: -20 dBm înseamnă că dispozitivul atinge literalmente antena scanerului, iar -105 dBm — absența completă a semnalului. Producătorii de cipuri pot limita intervalul: de exemplu, nRF52832 raportează RSSI de la -40 la -105 dBm.

RSSI (dBm)Calitatea semnaluluiDistanța aproximativăRecomandare
-30 – -50Excelentă0–1 mDispozitiv în apropiere
-51 – -70Bună1–5 mÎn interiorul camerei
-71 – -85Medie5–15 mAcceptabil pentru beacon-uri
-86 – -95Slabă15–30 mConexiune nesigură
Sub -95Critică30+ mLa limita de detectare

TX Power Level — puterea emitătorului, care este indicată în pachetul de publicitate (AD Type 0x0A) și permite corectarea estimării. RSSI -70 dBm de la un dispozitiv cu TX Power +4 dBm înseamnă că semnalul s-a atenuat cu 74 dB. Dacă TX Power este necunoscut, estimarea exactă a distanței este imposibilă. iBeacon include TX Power (1 octet) în structura Manufacturer Data pentru calibrarea distanței.

Dependența RSSI de distanță

Modelul Path Loss (pierderi de propagare) este utilizat pentru estimarea distanței pe baza RSSI. Formula de bază: RSSI = TX_Power - 10 × n × log10(d), unde n — coeficientul de atenuare (2,0 pentru spațiu liber, 3,0–4,5 pentru încăperi cu obstacole), d — distanța în metri. În practică, acuratețea estimării este de ±2–5 m în condiții reale.

Pentru calibrarea modelului, este necesar să se măsoare RSSI la o distanță cunoscută (de obicei 1 m) și să se calculeze referința TX Power. În iBeacon, acest parametru este stocat în pachet. În Eddystone se utilizează un mecanism similar. După calibrare, se poate calcula distanța: d = 10 ^ ((TX_Power — RSSI) / (10 × n)).

Conform Apple Core Bluetooth Programming Guide (2024), acuratețea estimării distanței pentru iBeacon este: immediate (<0,5 m) — când RSSI este peste valoarea de calibrare, near (0,5–3 m) — când RSSI este în intervalul 3–6 dB de la valoarea de calibrare, far (>3 m) — la semnal slab. Niciun model matematic nu oferă o precizie mai bună de ±1 m fără procesare suplimentară.

Factorii care influențează acuratețea RSSI

RSSI este un indicator zgomotos, iar acuratețea sa depinde de mai mulți factori. Principalele surse de eroare: obstacolele (pereți, mobilă, oameni) atenuează semnalul cu 3–15 dB fiecare, propagarea pe mai multe căi (reflexii de pe pereți) poate amplifica semnalul în unele puncte și atenua în altele, orientarea antenei modifică RSSI cu 3–10 dB la rotirea dispozitivului.

Corpul uman este unul dintre cei mai puternici absorbanți ai semnalului BLE. Dacă între beacon și smartphone se află o persoană, RSSI poate scădea cu 10–20 dB. Apa din corpul uman absoarbe eficient radiațiile radio la frecvența de 2,4 GHz. De aceea, beacon-urile de pe ușile magazinelor pot afișa RSSI diferit pentru clienți cu înălțime și constituție diferite.

Factori suplimentari: interferențele Wi-Fi pe canalele adiacente pot reduce RSSI cu 3–5 dB, temperatura cipului BLE influențează acuratețea măsurării RSSI (la unele cipuri derivă de până la 1 dB/°C), degradarea bateriei în beacon reduce TX Power, ceea ce duce la un RSSI subestimat la receptor.

Filtrarea și netezirea RSSI

RSSI brut nu este potrivit pentru calcule precise — conține prea mult zgomot și valori aberante. Pentru a obține o estimare stabilă a distanței se aplică metode de filtrare. Cea mai simplă — media mobilă: se calculează media aritmetică a ultimelor N valori RSSI. N = 5–10 este de obicei suficient pentru netezirea fluctuațiilor de scurtă durată.

kotlin
// Filtrul Kalman pentru RSSI
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 {
        // Prezice
        errorCovariance += processNoise

        // Actualizează
        val kalmanGain =
            errorCovariance /
            (errorCovariance + measurementNoise)

        estimate = estimate +
            kalmanGain * (rawRssi - estimate)

        errorCovariance =
            (1.0 - kalmanGain) * errorCovariance

        return estimate
    }
}

Filtrul Kalman — o metodă mai avansată care ia în considerare dinamica modificărilor RSSI și oferă o întârziere mai mică decât media mobilă. Pentru beacon-uri staționare (imobile), media mobilă oferă un rezultat acceptabil. Pentru dispozitive în mișcare, filtrul Kalman este preferabil, deoarece se adaptează mai rapid la modificări. Suplimentar, se poate utiliza filtrul Median pentru eliminarea valorilor aberante.

Obținerea RSSI în iOS și Android

iOS Core Bluetooth furnizează RSSI prin proprietatea peripheral.rssi (NSNumber) după finalizarea citirii RSSI. Pentru a obține RSSI al pachetului de publicitate, utilizați advertisementData[CBAdvertisementDataRSSIKey]. iOS returnează RSSI ca valoare medie pe trei canale. Pentru monitorizarea continuă a RSSI, apelați readRSSI cu un interval de cel mult 1 dată pe secundă.

swift
// Obține RSSI pe iOS
func centralManager(
    _ central: CBCentralManager,
    didDiscover peripheral: CBPeripheral,
    advertisementData: [String: Any],
    rssi RSSI: NSNumber
) {
    let signalStrength = Int(truncating: RSSI)

    // Filtrează semnalele slabe
    guard signalStrength > -90 else {
        return
    }

    print("Dispozitiv " +
          "\(peripheral.name ?? "unknown") " +
          "RSSI: \(signalStrength) dBm")
}

Android furnizează RSSI prin callback-ul onScanResult: result.getRssi(). Valoarea RSSI este RSSI al ultimului pachet de publicitate (nu media). Pentru citiri stabile, este necesar să se acumuleze mai multe valori și să se aplice filtrarea. Android oferă, de asemenea, TX Power Level prin result.getScanRecord().getTxPowerLevel(), dacă este transmis în pachetul de publicitate.

kotlin
// Obține RSSI pe Android
private val scanCallback = object : ScanCallback() {

    override fun onScanResult(
        callbackType: Int,
        result: ScanResult
    ) {
        val rssi = result.rssi
        val txPower = result.scanRecord?.
            txPowerLevel ?: -128

        // Aplică filtrul Kalman
        val filtered = kalmanFilter.
            filter(rssi.toDouble())

        Log.d("BLEScanner",
            "RSSI: $rssi, " +
            "Filtered: $filtered, " +
            "TX: $txPower")
    }
}

La dezvoltarea aplicațiilor care utilizează RSSI pentru poziționare, luați în considerare: în iOS valorile RSSI sunt mai stabile datorită calibrării hardware, în Android — mai zgomotoase și dependente de producătorul dispozitivului. Pentru proiecte cross-platform, se recomandă implementarea filtrării la nivelul aplicației cu parametri configurabili pentru fiecare platformă.

Întrebări frecvente

Se poate determina exact distanța pe baza RSSI?

Nu, RSSI oferă doar o estimare aproximativă a distanței cu o precizie de ±2–5 m în condiții reale. Pentru poziționare precisă este necesară triangularea cu mai multe scanere, filtrarea Kalman și luarea în considerare a TX Power a emițătorului.

De ce se modifică RSSI chiar și atunci când dispozitivul nu se mișcă?

Din cauza propagării pe mai multe căi și a fluctuațiilor semnalului radio. Reflexiile de pe pereți și obiecte creează interferențe, în care semnalul fie se amplifică, fie se atenuează. Modificările RSSI de 5–10 dB pe un dispozitiv staționar sunt un fenomen normal.

Cât de des se poate citi RSSI pe iOS?

iOS recomandă apelarea readRSSI de cel mult 1 dată pe secundă. Solicitările prea frecvente pot duce la pierderea pachetelor de date. Pentru monitorizarea RSSI în timpul scanării, utilizați CBAdvertisementDataRSSIKey, care este disponibil pentru fiecare pachet de publicitate.

Ce este TX Power Level și cum este legat de RSSI?

TX Power Level — puterea emițătorului în dBm specificată în pachetul de publicitate. RSSI + TX Power = atenuarea totală a semnalului pe calea de la emițător la receptor. Cunoscând TX Power, se poate estima mai precis distanța: RSSI - TX Power = Path Loss (pierderi pe traseu).

Care metodă de filtrare RSSI este cea mai bună pentru beacon-uri?

Pentru beacon-uri staționare — media mobilă cu o fereastră de 5–10 valori. Pentru dispozitive în mișcare — filtrul Kalman cu zgomot de proces mic (0,01–0,05). Pentru eliminarea valorilor aberante, adăugați un filtru Median care elimină valorile în afara a 2 abateri standard.

Rezumat

  • RSSI — indicator al puterii semnalului BLE în dBm, măsurat la partea receptoare la primirea fiecărui pachet.
  • Intervalul valorilor: de la -30 dBm (semnal excelent) până la -100 dBm (semnal slab la limita de detectare).
  • RSSI permite estimarea aproximativă a distanței cu o precizie de ±2–5 m, dar nu este un telemetru precis din cauza zgomotului și interferențelor.
  • Principalele surse de eroare: obstacole (pereți, oameni), propagarea pe mai multe căi, orientarea antenei și interferențele Wi-Fi.
  • Pentru estimarea stabilă a distanței se aplică filtrarea Kalman, media mobilă și filtrul Median pentru eliminarea valorilor aberante.
  • În iOS RSSI este media pe trei canale, în Android — valoarea ultimului pachet, ceea ce necesită filtrare la nivelul aplicației.
  • TX Power Level în pachetul de publicitate împreună cu RSSI oferă Path Loss — atenuarea totală a semnalului pentru o estimare mai precisă a distanței.

Vom dezvolta o aplicație mobilă la cheie

IT Sectr creează aplicații iOS și Android pentru startup-uri și afaceri din 2017. Vă vom consilia și vă vom propune cea mai bună soluție.

Discutați proiectul

Citiți și