RSSI v BLE — co to je, indikátor signálu a odhad vzdálenosti

Autor: IT Sectr Publikováno: 2026-07-16 Doba čtení: 10 min

RSSI (Received Signal Strength Indicator) — je numerická metrika měřící výkon signálu BLE zařízení v dBm na přijímací straně. Hodnota RSSI se pohybuje od -30 dBm (zařízení v blízkosti) do -100 dBm (na hranici detekce). Bluetooth Core Specification 5.4 (2023) definuje RSSI jako volitelný parametr dostupný v každém reklamním paketu a datovém paketu. RSSI se používá pro odhad vzdálenosti (range estimation) a filtrování zařízení podle úrovně signálu, ale je nepřesným indikátorem: ovlivňují ho překážky, vícecestné šíření a typ antény. Pro přesné určení polohy se používá triangulace a Kalmanova filtrace.

Hlavní body

  • RSSI — úroveň výkonu BLE signálu v dBm, měřená na přijímací straně při příjmu paketu.
  • Rozsah RSSI: od -30 dBm (velmi silný signál) do -100 dBm (hranice detekce).
  • RSSI se používá pro odhad vzdálenosti podle modelu Path Loss, ale přesnost je ±2–5 m v reálných podmínkách.
  • RSSI ovlivňují: překážky (zdi, lidé), vícecestné šíření a orientace antény.
  • Pro zlepšení přesnosti se používá Kalmanova filtrace, klouzavý průměr a triangulace z několika skenerů.

Co je RSSI v BLE?

RSSI (Received Signal Strength Indicator) — je měření výkonu rádiového signálu přijatého BLE přijímačem v okamžiku příjmu paketu. V BLE se RSSI měří pro každý reklamní paket (advertising) a každý datový paket po připojení. Hodnota RSSI je logaritmická stupnice, kde každý krok 1 dBm odpovídá přibližně změně výkonu signálu 1,26krát.

RSSI je ukazatel závislý na hardwaru: různé BLE čipy (nRF, TI, Dialog, Broadcom) a různé antény mohou zobrazovat různé hodnoty RSSI pro stejný signál. Proto je srovnávání RSSI mezi různými zařízeními nesprávné. Dokonce i dva identické smartphony se stejným operačním systémem mohou vykazovat rozdíl 2–5 dBm pro stejný beacon.

V reklamním paketu se RSSI měří pro každý ze tří kanálů (37, 38, 39). Hodnoty se mohou lišit o 3–10 dBm mezi kanály kvůli frekvenčnímu rušení. Moderní BLE stacky hlásí průměrné RSSI na všech kanálech nebo RSSI pro každý paket zvlášť. iOS Core Bluetooth poskytuje průměrné RSSI, Android — RSSI posledního paketu.

Rozsah hodnot RSSI

Typický rozsah RSSI pro BLE je od -30 dBm do -100 dBm. Hodnoty mimo tyto hranice jsou extrémně vzácné: -20 dBm znamená, že zařízení doslova dotýká antény skeneru, a -105 dBm — úplná absence signálu. Výrobci čipů mohou rozsah omezovat: například nRF52832 hlásí RSSI od -40 do -105 dBm.

RSSI (dBm)Kvalita signáluPřibližná vzdálenostDoporučení
-30 – -50Vynikající0–1 mZařízení v blízkosti
-51 – -70Dobrá1–5 mV místnosti
-71 – -85Střední5–15 mPřijatelné pro beacon
-86 – -95Slabá15–30 mNespolehlivé připojení
Pod -95Kritická30+ mNa hranici detekce

TX Power Level — výkon vysílače, který je uveden v reklamním paketu (AD Type 0x0A) a umožňuje korekci odhadu. RSSI -70 dBm od zařízení s TX Power +4 dBm znamená, že signál zeslábl o 74 dB. Pokud TX Power není znám, přesný odhad vzdálenosti je nemožný. iBeacon obsahuje TX Power (1 bajt) ve struktuře Manufacturer Data pro kalibraci vzdálenosti.

Závislost RSSI na vzdálenosti

Model Path Loss (ztráty šířením) se používá pro odhad vzdálenosti na základě RSSI. Základní vzorec: RSSI = TX_Power - 10 × n × log10(d), kde n — koeficient útlumu (2,0 pro volný prostor, 3,0–4,5 pro místnosti s překážkami), d — vzdálenost v metrech. V praxi je přesnost odhadu ±2–5 m v reálných podmínkách.

Pro kalibraci modelu je nutné změřit RSSI na známé vzdálenosti (obvykle 1 m) a vypočítat referenci TX Power. V iBeacon je tento parametr uložen v paketu. V Eddystone se používá podobný mechanismus. Po kalibraci lze vypočítat vzdálenost: d = 10 ^ ((TX_Power — RSSI) / (10 × n)).

Podle Apple Core Bluetooth Programming Guide (2024) je přesnost odhadu vzdálenosti pro iBeacon: immediate (<0,5 m) — když je RSSI vyšší než kalibrační hodnota, near (0,5–3 m) — když je RSSI v rozsahu 3–6 dB od kalibrační hodnoty, far (>3 m) — při slabém signálu. Žádný matematický model neposkytuje přesnost lepší než ±1 m bez dodatečného zpracování.

Faktory ovlivňující přesnost RSSI

RSSI je šumový ukazatel a jeho přesnost závisí na mnoha faktorech. Hlavní zdroje chyb: překážky (zdi, nábytek, lidé) zeslabují signál o 3–15 dB každá, vícecestné šíření (odrazy od zdí) může signál v některých bodech zesilovat a v jiných zeslabovat, orientace antény mění RSSI o 3–10 dB při otáčení zařízení.

Lidské tělo je jedním z nejsilnějších absorbérů BLE signálu. Pokud je mezi beaconem a smartphonem osoba, RSSI může klesnout o 10–20 dB. Voda v lidském těle účinně pohlcuje rádiové záření na frekvenci 2,4 GHz. Proto beacony na dveřích obchodů mohou zobrazovat různý RSSI pro zákazníky různé výšky a postavy.

Další faktory: rušení Wi-Fi na sousedních kanálech může snižovat RSSI o 3–5 dB, teplota BLE čipu ovlivňuje přesnost měření RSSI (u některých čipů drift až 1 dB/°C), degradace baterie v beaconu snižuje TX Power, což vede k nižšímu RSSI na přijímači.

Filtrace a vyhlazování RSSI

Syrové RSSI není vhodné pro přesné výpočty — obsahuje příliš mnoho šumu a odlehlých hodnot. Pro získání stabilního odhadu vzdálenosti se používají metody filtrace. Nejjednodušší — klouzavý průměr: bere se aritmetický průměr posledních N hodnot RSSI. N = 5–10 obvykle stačí k vyhlazení krátkodobých fluktuací.

kotlin
// Kalmanův filtr pro 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 {
        // Předpověď
        errorCovariance += processNoise

        // Aktualizace
        val kalmanGain =
            errorCovariance /
            (errorCovariance + measurementNoise)

        estimate = estimate +
            kalmanGain * (rawRssi - estimate)

        errorCovariance =
            (1.0 - kalmanGain) * errorCovariance

        return estimate
    }
}

Kalmanův filtr — pokročilejší metoda, která zohledňuje dynamiku změn RSSI a dává menší zpoždění než klouzavý průměr. Pro stacionární beacony (nepohyblivé) poskytuje klouzavý průměr přijatelný výsledek. Pro pohyblivá zařízení je Kalmanův filtr vhodnější, protože se rychleji přizpůsobuje změnám. Doplňkově lze použít Mediánový filtr pro odstraňování odlehlých hodnot.

Získání RSSI v iOS a Android

iOS Core Bluetooth poskytuje RSSI prostřednictvím vlastnosti peripheral.rssi (NSNumber) po dokončení čtení RSSI. Pro získání RSSI reklamního paketu použijte advertisementData[CBAdvertisementDataRSSIKey]. iOS vrací RSSI jako průměrnou hodnotu na třech kanálech. Pro nepřetržité sledování RSSI volejte readRSSI s intervalem ne častěji než 1krát za sekundu.

swift
// Získat RSSI na iOS
func centralManager(
    _ central: CBCentralManager,
    didDiscover peripheral: CBPeripheral,
    advertisementData: [String: Any],
    rssi RSSI: NSNumber
) {
    let signalStrength = Int(truncating: RSSI)

    // Filtrovat slabé signály
    guard signalStrength > -90 else {
        return
    }

    print("Zařízení " +
          "\(peripheral.name ?? "unknown") " +
          "RSSI: \(signalStrength) dBm")
}

Android poskytuje RSSI prostřednictvím callbacku onScanResult: result.getRssi(). Hodnota RSSI je RSSI posledního reklamního paketu (ne průměr). Pro stabilní odečty je nutné shromáždit více hodnot a aplikovat filtraci. Android také poskytuje TX Power Level prostřednictvím result.getScanRecord().getTxPowerLevel(), pokud je přenášen v reklamním paketu.

kotlin
// Získat RSSI na Android
private val scanCallback = object : ScanCallback() {

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

        // Aplikovat Kalmanův filtr
        val filtered = kalmanFilter.
            filter(rssi.toDouble())

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

Při vývoji aplikací používajících RSSI pro určování polohy zohledněte: v iOS jsou hodnoty RSSI stabilnější díky hardwarové kalibraci, v Android — šumivější a závislé na výrobci zařízení. Pro multiplatformní projekty se doporučuje implementovat filtraci na straně aplikace s konfigurovatelnými parametry pro každou platformu.

Často kladené otázky

Lze přesně určit vzdálenost na základě RSSI?

Ne, RSSI poskytuje pouze přibližný odhad vzdálenosti s přesností ±2–5 m v reálných podmínkách. Pro přesné určení polohy je vyžadována triangulace z několika skenerů, Kalmanova filtrace a zohlednění TX Power vysílače.

Proč se RSSI mění, i když se zařízení nepohybuje?

Kvůli vícecestnému šíření a fluktuacím rádiového signálu. Odrazy od zdí a předmětů vytvářejí interferenci, při které se signál střídavě zesiluje a zeslabuje. Změny RSSI o 5–10 dB na nehybném zařízení jsou normální jev.

Jak často lze číst RSSI na iOS?

iOS doporučuje volat readRSSI ne častěji než 1krát za sekundu. Příliš časté požadavky mohou vést ke ztrátě datových paketů. Pro sledování RSSI během skenování použijte CBAdvertisementDataRSSIKey, který je k dispozici pro každý reklamní paket.

Co je TX Power Level a jak souvisí s RSSI?

TX Power Level — výkon vysílače v dBm uvedený v reklamním paketu. RSSI + TX Power = celkový útlum signálu na cestě od vysílače k přijímači. Se znalostí TX Power lze přesněji odhadnout vzdálenost: RSSI - TX Power = Path Loss (ztráty na trase).

Která metoda filtrace RSSI je nejlepší pro beacony?

Pro stacionární beacony — klouzavý průměr s oknem 5–10 hodnot. Pro pohyblivá zařízení — Kalmanův filtr s malým šumem procesu (0,01–0,05). Pro odstraňování odlehlých hodnot přidejte Mediánový filtr, který odřezává hodnoty mimo 2 směrodatné odchylky.

Shrnutí

  • RSSI — indikátor výkonu BLE signálu v dBm, měřený na přijímací straně při příjmu každého paketu.
  • Rozsah hodnot: od -30 dBm (vynikající signál) do -100 dBm (slabý signál na hranici detekce).
  • RSSI umožňuje hrubý odhad vzdálenosti s přesností ±2–5 m, ale není přesný dálkoměr kvůli šumu a rušení.
  • Hlavní zdroje chyb: překážky (zdi, lidé), vícecestné šíření, orientace antény a rušení Wi-Fi.
  • Pro stabilní odhad vzdálenosti se používá Kalmanova filtrace, klouzavý průměr a Mediánový filtr pro odstraňování odlehlých hodnot.
  • V iOS je RSSI průměr tří kanálů, v Android — hodnota posledního paketu, což vyžaduje filtraci na straně aplikace.
  • TX Power Level v reklamním paketu spolu s RSSI poskytuje Path Loss — celkový útlum signálu pro přesnější odhad vzdálenosti.

Vyvineme mobilní aplikaci na klíč

IT Sectr vytváří aplikace pro iOS a Android pro startupy a podniky od roku 2017. Poradíme vám a navrhneme nejlepší řešení.

Prodiskutovat projekt

Přečtěte si také