RSSI i BLE — vad det är, signalindikator och avståndsuppskattning

Författare: IT Sectr Publicerad: 2026-07-16 Lästid: 10 min

RSSI (Received Signal Strength Indicator) — är ett numeriskt mätvärde som mäter styrkan hos en BLE-enhets signal i dBm på mottagarsidan. RSSI-värdet varierar från -30 dBm (enhet i närheten) till -100 dBm (vid detektionsgränsen). Bluetooth Core Specification 5.4 (2023) definierar RSSI som en valfri parameter som finns i varje reklampaket och datapaket. RSSI används för avståndsuppskattning (range estimation) och filtrering av enheter efter signalstyrka, men är en inexakt indikator: det påverkas av hinder, flervägsutbredning och antenntyp. För noggrann positionering används triangulering och Kalman-filtrering.

Huvudpunkter

  • RSSI — effektnivå för BLE-signal i dBm, mätt på mottagarsidan vid paketmottagning.
  • RSSI-område: från -30 dBm (mycket stark signal) till -100 dBm (detektionsgräns).
  • RSSI används för avståndsuppskattning enligt Path Loss-modellen, men noggrannheten är ±2–5 m i verkliga förhållanden.
  • RSSI påverkas av: hinder (väggar, människor), flervägsutbredning och antennorientering.
  • För att förbättra noggrannheten används Kalman-filtrering, glidande medelvärde och triangulering från flera skannrar.

Vad är RSSI i BLE?

RSSI (Received Signal Strength Indicator) — är mätningen av radiosignalstyrkan som tas emot av BLE-mottagaren vid paketmottagningstillfället. I BLE mäts RSSI för varje reklampaket (advertising) och varje datapaket efter anslutning. RSSI-värdet är en logaritmisk skala, där varje steg på 1 dBm ungefär motsvarar en förändring av signalstyrkan med 1,26 gånger.

RSSI är en maskinvaruberoende indikator: olika BLE-chips (nRF, TI, Dialog, Broadcom) och olika antenner kan visa olika RSSI-värden för samma signal. Därför är jämförelse av RSSI mellan olika enheter felaktig. Även två identiska smartphones med samma operativsystem kan visa en skillnad på 2–5 dBm för samma beacon.

I reklampaketet mäts RSSI för var och en av de tre kanalerna (37, 38, 39). Värdena kan skilja sig med 3–10 dBm mellan kanalerna på grund av frekvensstörningar. Moderna BLE-stackar rapporterar genomsnittligt RSSI över alla kanaler eller RSSI för varje paket separat. iOS Core Bluetooth tillhandahåller genomsnittligt RSSI, Android — RSSI för det senaste paketet.

Omfång för RSSI-värden

Typiskt RSSI-omfång för BLE är från -30 dBm till -100 dBm. Värden utanför dessa gränser är extremt sällsynta: -20 dBm innebär att enheten bokstavligen vidrör skannerns antenn, och -105 dBm — fullständig frånvaro av signal. Chiptillverkare kan begränsa omfånget: till exempel rapporterar nRF52832 RSSI från -40 till -105 dBm.

RSSI (dBm)SignalkvalitetUngefärligt avståndRekommendation
-30 – -50Utmärkt0–1 mEnhet i närheten
-51 – -70Bra1–5 mInom rummet
-71 – -85Medel5–15 mAcceptabelt för beacons
-86 – -95Svag15–30 mOpålitlig anslutning
Under -95Kritisk30+ mVid detektionsgränsen

TX Power Level — sändareffekten, som anges i reklampaketet (AD Type 0x0A) och möjliggör korrigering av uppskattningen. RSSI -70 dBm från en enhet med TX Power +4 dBm innebär att signalen har dämpats med 74 dB. Om TX Power är okänd är noggrann avståndsuppskattning omöjlig. iBeacon innehåller TX Power (1 byte) i Manufacturer Data-strukturen för avståndskalibrering.

RSSI:s beroende av avstånd

Path Loss-modellen (utbredningsförluster) används för att uppskatta avstånd baserat på RSSI. Grundformeln: RSSI = TX_Power - 10 × n × log10(d), där n — dämpningskoefficient (2,0 för fritt utrymme, 3,0–4,5 för utrymmen med hinder), d — avstånd i meter. I praktiken är uppskattningsnoggrannheten ±2–5 m i verkliga förhållanden.

För att kalibrera modellen måste RSSI mätas på ett känt avstånd (vanligtvis 1 m) och TX Power-referensen beräknas. I iBeacon lagras denna parameter i paketet. I Eddystone används en liknande mekanism. Efter kalibrering kan avståndet beräknas: d = 10 ^ ((TX_Power — RSSI) / (10 × n)).

Enligt Apple Core Bluetooth Programming Guide (2024) är noggrannheten för avståndsuppskattning för iBeacon: immediate (<0,5 m) — när RSSI är högre än kalibreringsvärdet, near (0,5–3 m) — när RSSI är inom 3–6 dB från kalibreringsvärdet, far (>3 m) — vid svag signal. Ingen matematisk modell ger bättre noggrannhet än ±1 m utan ytterligare bearbetning.

Faktorer som påverkar RSSI:s noggrannhet

RSSI är en brusig indikator och dess noggrannhet beror på många faktorer. De främsta felkällorna: hinder (väggar, möbler, människor) dämpar signalen med 3–15 dB vardera, flervägsutbredning (reflektioner från väggar) kan förstärka signalen på vissa punkter och dämpa på andra, antennorientering ändrar RSSI med 3–10 dB vid rotation av enheten.

Människokroppen är en av de starkaste absorbenterna av BLE-signal. Om en person befinner sig mellan beacone och smartphonen kan RSSI sjunka med 10–20 dB. Vatten i människokroppen absorberar effektivt radiostrålning vid frekvensen 2,4 GHz. Därför kan beacons på butiksdörrar visa olika RSSI för kunder med olika längd och kroppsbyggnad.

Ytterligare faktorer: Wi-Fi-störningar på angränsande kanaler kan minska RSSI med 3–5 dB, temperatur hos BLE-chippet påverkar RSSI-mätnoggrannheten (hos vissa chips drift upp till 1 dB/°C), batteriförsämring i beacone minskar TX Power, vilket leder till lägre RSSI på mottagarsidan.

Filtrering och utjämning av RSSI

Rå RSSI är inte lämplig för noggranna beräkningar — den innehåller för mycket brus och avvikande värden. För att få en stabil avståndsuppskattning används filtreringsmetoder. Den enklaste — glidande medelvärde: det aritmetiska medelvärdet av de senaste N RSSI-värdena tas. N = 5–10 är vanligtvis tillräckligt för att jämna ut kortvariga fluktuationer.

kotlin
// Kalman-filter för 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 {
        // Förutsäg
        errorCovariance += processNoise

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

        estimate = estimate +
            kalmanGain * (rawRssi - estimate)

        errorCovariance =
            (1.0 - kalmanGain) * errorCovariance

        return estimate
    }
}

Kalman-filter — en mer avancerad metod som tar hänsyn till dynamiken i RSSI-förändringar och ger mindre fördröjning än glidande medelvärde. För stationära beacons (orörliga) ger glidande medelvärde ett acceptabelt resultat. För rörliga enheter är Kalman-filtret att föredra eftersom det anpassar sig snabbare till förändringar. Dessutom kan ett Median-filter användas för att kassera avvikande värden.

Hämta RSSI i iOS och Android

iOS Core Bluetooth tillhandahåller RSSI via egenskapen peripheral.rssi (NSNumber) efter att RSSI-avläsningen är klar. För att hämta RSSI för reklampaketet, använd advertisementData[CBAdvertisementDataRSSIKey]. iOS returnerar RSSI som medelvärde över tre kanaler. För kontinuerlig RSSI-övervakning, anropa readRSSI med ett intervall på högst 1 gång per sekund.

swift
// Hämta RSSI på iOS
func centralManager(
    _ central: CBCentralManager,
    didDiscover peripheral: CBPeripheral,
    advertisementData: [String: Any],
    rssi RSSI: NSNumber
) {
    let signalStrength = Int(truncating: RSSI)

    // Filtrera svaga signaler
    guard signalStrength > -90 else {
        return
    }

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

Android tillhandahåller RSSI via callbacken onScanResult: result.getRssi(). RSSI-värdet är RSSI för det senaste reklampaketet (inte medelvärdet). För stabila avläsningar måste flera värden samlas in och filtrering tillämpas. Android tillhandahåller även TX Power Level via result.getScanRecord().getTxPowerLevel(), om det sänds i reklampaketet.

kotlin
// Hämta RSSI på Android
private val scanCallback = object : ScanCallback() {

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

        // Använd Kalman-filter
        val filtered = kalmanFilter.
            filter(rssi.toDouble())

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

Vid utveckling av applikationer som använder RSSI för positionering, beakta: i iOS är RSSI-värden mer stabila tack vare hårdvarukalibrering, i Android — mer brusiga och beroende av enhetstillverkaren. För plattformsoberoende projekt rekommenderas att implementera filtrering på applikationssidan med konfigurerbara parametrar för varje plattform.

Vanliga frågor

Kan avståndet bestämmas exakt baserat på RSSI?

Nej, RSSI ger endast en ungefärlig uppskattning av avståndet med en noggrannhet på ±2–5 m i verkliga förhållanden. För exakt positionering krävs triangulering från flera skannrar, Kalman-filtrering och hänsyn till sändarens TX Power.

Varför ändras RSSI även när enheten inte rör sig?

På grund av flervägsutbredning och fluktuationer i radiosignalen. Reflektioner från väggar och föremål skapar interferens där signalen ibland förstärks och ibland dämpas. Förändringar av RSSI med 5–10 dB på en stillastående enhet är normalt.

Hur ofta kan RSSI läsas på iOS?

iOS rekommenderar att readRSSI anropas högst 1 gång per sekund. Alltför frekventa förfrågningar kan leda till förlust av datapaket. För RSSI-övervakning under skanning, använd CBAdvertisementDataRSSIKey som är tillgängligt för varje reklampaket.

Vad är TX Power Level och hur är det relaterat till RSSI?

TX Power Level — sändareffekten i dBm som anges i reklampaketet. RSSI + TX Power = total signaldämpning på vägen från sändare till mottagare. Med kännedom om TX Power kan avståndet uppskattas mer exakt: RSSI - TX Power = Path Loss (vägförluster).

Vilken RSSI-filtreringsmetod är bäst för beacons?

För stationära beacons — glidande medelvärde med ett fönster på 5–10 värden. För rörliga enheter — Kalman-filter med lågt processbrus (0,01–0,05). För att kassera avvikande värden, lägg till ett Median-filter som kapar värden utanför 2 standardavvikelser.

Sammanfattning

  • RSSI — indikator för BLE-signalstyrka i dBm, mätt på mottagarsidan vid mottagning av varje paket.
  • Värdeomfång: från -30 dBm (utmärkt signal) till -100 dBm (svag signal vid detektionsgränsen).
  • RSSI möjliggör grov avståndsuppskattning med ±2–5 m noggrannhet, men är ingen exakt avståndsmätare på grund av brus och störningar.
  • Främsta felkällor: hinder (väggar, människor), flervägsutbredning, antennorientering och Wi-Fi-störningar.
  • För stabil avståndsuppskattning används Kalman-filtrering, glidande medelvärde och Median-filter för att kassera avvikande värden.
  • I iOS är RSSI medelvärdet av tre kanaler, i Android — värdet av senaste paketet, vilket kräver filtrering på applikationssidan.
  • TX Power Level i reklampaketet tillsammans med RSSI ger Path Loss — total signaldämpning för noggrannare avståndsuppskattning.

Vi utvecklar en mobil applikation nyckelfärdigt

IT Sectr skapar iOS- och Android-applikationer för startups och företag sedan 2017. Vi ger dig råd och föreslår den bästa lösningen.

Diskutera projektet

Läs också