BLE'da RSSI — sinyal göstergesi ve mesafe tahmini

Yazar: IT Sectr Yayınlanma: 2026-07-16 Okuma süresi: 10 dk

RSSI (Received Signal Strength Indicator), alıcı tarafta bir BLE cihazının sinyal gücünü dBm cinsinden ölçen sayısal bir metriktir. RSSI değerleri -30 dBm (cihaz yakında) ile -100 dBm (algılama sınırında) arasında değişir. Bluetooth Core Specification 5.4 (2023), RSSI'yi her reklam paketinde ve veri paketinde bulunan isteğe bağlı bir parametre olarak tanımlar. RSSI, mesafe tahmini ve cihazları sinyal seviyesine göre filtreleme için kullanılır, ancak doğru olmayan bir göstergedir: engeller, çok yollu yayılım ve anten türünden etkilenir. Hassas konumlandırma için üçgenleme ve Kalman filtreleme kullanılır.

Önemli Noktalar

  • RSSI, bir paket alındığında alıcı tarafta dBm cinsinden ölçülen BLE sinyal gücü seviyesidir.
  • RSSI aralığı: -30 dBm (çok güçlü sinyal) ile -100 dBm (algılama sınırı) arası.
  • RSSI, Path Loss modeli ile mesafe tahmini için kullanılır, ancak gerçek koşullarda doğruluk ±2–5 m'dir.
  • RSSI'yi etkileyenler: engeller (duvarlar, insanlar), çok yollu yayılım ve anten yönü.
  • Doğruluğu artırmak için Kalman filtreleme, hareketli ortalama ve birden çok tarayıcıdan üçgenleme kullanılır.

BLE'da RSSI Nedir?

RSSI (Received Signal Strength Indicator), paket alımı anında BLE alıcısı tarafından alınan radyo sinyal gücünün bir ölçümüdür. BLE'da RSSI, her reklam paketi ve bağlantıdan sonraki her veri paketi için ölçülür. RSSI logaritmik bir ölçektir ve 1 dBm'lik her adım, sinyal gücünde yaklaşık 1,26 katlık bir değişime karşılık gelir.

RSSI donanıma bağımlı bir göstergedir: farklı BLE çipleri (nRF, TI, Dialog, Broadcom) ve farklı antenler aynı sinyal için farklı RSSI değerleri gösterebilir. Bu nedenle, farklı cihazlar arasında RSSI karşılaştırması yapmak doğru değildir. Aynı işletim sistemindeki iki özdeş akıllı telefon bile aynı işaret için 2–5 dBm fark gösterebilir.

Bir reklam paketinde RSSI, üç kanalın (37, 38, 39) her biri için ölçülür. Frekans paraziti nedeniyle kanallar arasında değerler 3–10 dBm farklılık gösterebilir. Modern BLE yığınları, tüm kanalların ortalama RSSI'sini veya her paket için ayrı ayrı RSSI'yi raporlar. iOS Core Bluetooth ortalama RSSI sağlar, Android son paketin RSSI'sini sağlar.

RSSI Değer Aralığı

BLE için tipik RSSI aralığı -30 dBm ile -100 dBm arasındadır. Bu aralığın dışındaki değerler son derece nadirdir: -20 dBm, cihazın tarayıcı antenine fiziksel olarak dokunduğu anlamına gelirken, -105 dBm sinyalin tamamen yokluğu anlamına gelir. Çip üreticileri aralığı sınırlayabilir: örneğin, nRF52832 -40 ile -105 dBm arasında RSSI bildirir.

RSSI (dBm)Sinyal KalitesiYaklaşık MesafeÖneri
-30 – -50Mükemmel0–1 mCihaz yakında
-51 – -70İyi1–5 mOda içinde
-71 – -85Orta5–15 mİşaret için kabul edilebilir
-86 – -95Zayıf15–30 mGüvenilmez bağlantı
-95 altıKritik30+ mAlgılama sınırında

TX Power Level, reklam paketinde (AD Type 0x0A) belirtilen verici gücüdür ve tahmini ayarlamaya olanak tanır. TX Power +4 dBm olan bir cihazdan RSSI -70 dBm, sinyalin 74 dB zayıfladığı anlamına gelir. TX Power bilinmiyorsa, doğru mesafe tahmini imkansızdır. iBeacon, mesafe kalibrasyonu için Manufacturer Data yapısında TX Power'ı (1 bayt) içerir.

RSSI ve Mesafe İlişkisi

Path Loss modeli (yayılım kaybı), RSSI'den mesafe tahmini için kullanılır. Temel formül: RSSI = TX_Power - 10 × n × log10(d), burada n zayıflama katsayısıdır (boş alan için 2,0, engelli iç mekanlar için 3,0–4,5) ve d metre cinsinden mesafedir. Pratikte, gerçek koşullarda tahmin doğruluğu ±2–5 m'dir.

Modeli kalibre etmek için bilinen bir mesafede (genellikle 1 m) RSSI ölçmek ve TX Power referansını hesaplamak gerekir. iBeacon'da bu parametre pakette saklanır. Eddystone benzer bir mekanizma kullanır. Kalibrasyondan sonra mesafe hesaplanabilir: d = 10 ^ ((TX_Power — RSSI) / (10 × n)).

Apple Core Bluetooth Programming Guide (2024)'e göre, iBeacon için mesafe tahmin doğruluğu şöyledir: immediate (<0,5 m) — RSSI kalibrasyon değerinin üzerinde olduğunda, near (0,5–3 m) — RSSI kalibrasyon değerinin 3–6 dB içinde olduğunda, far (>3 m) — zayıf sinyalle. Hiçbir matematiksel model, ek işlem olmadan ±1 m'den daha iyi doğruluk sağlamaz.

RSSI Doğruluğunu Etkileyen Faktörler

RSSI gürültülü bir göstergedir ve doğruluğu birçok faktöre bağlıdır. Ana hata kaynakları: engeller (duvarlar, mobilyalar, insanlar) sinyali her biri 3–15 dB zayıflatır, çok yollu yayılım (duvarlardan yansımalar) sinyali bazı noktalarda güçlendirip bazılarında zayıflatabilir, anten yönü cihaz döndürüldüğünde RSSI'yi 3–10 dB değiştirir.

İnsan vücudu, BLE sinyalinin en güçlü emicilerinden biridir. İşaret ile akıllı telefon arasında bir kişi varsa, RSSI 10–20 dB düşebilir. İnsan vücudundaki su, 2,4 GHz frekansındaki radyo dalgalarını etkili bir şekilde emer. Bu nedenle, mağaza kapılarındaki işaretler, farklı boy ve yapıdaki müşteriler için farklı RSSI gösterebilir.

Ek faktörler: bitişik kanallardaki Wi-Fi paraziti RSSI'yi 3–5 dB düşürebilir, BLE çipinin sıcaklığı RSSI ölçüm doğruluğunu etkiler (bazı çiplerde 1 dB/°C'ye kadar sapma), işaret üzerindeki pil bozulması TX Power'ı düşürerek alıcıda daha düşük RSSI'ye yol açar.

RSSI Filtreleme ve Yumuşatma

Ham RSSI, hassas hesaplamalar için uygun değildir — çok fazla gürültü ve aykırı değer içerir. Kararlı bir mesafe tahmini elde etmek için filtreleme yöntemleri kullanılır. En basiti hareketli ortalamadır: son N RSSI değerinin aritmetik ortalaması alınır. Kısa vadeli dalgalanmaları yumuşatmak için genellikle N = 5–10 yeterlidir.

kotlin
// RSSI için Kalman filtresi
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 {
        // Tahmin et
        errorCovariance += processNoise

        // Güncelle
        val kalmanGain =
            errorCovariance /
            (errorCovariance + measurementNoise)

        estimate = estimate +
            kalmanGain * (rawRssi - estimate)

        errorCovariance =
            (1.0 - kalmanGain) * errorCovariance

        return estimate
    }
}

Kalman filtresi, RSSI değişiminin dinamiğini hesaba katan ve hareketli ortalamadan daha az gecikme sağlayan daha gelişmiş bir yöntemdir. Sabit işaretler için hareketli ortalama kabul edilebilir sonuçlar verir. Hareket eden cihazlar için Kalman filtresi tercih edilir çünkü değişikliklere daha hızlı uyum sağlar. Ayrıca, aykırı değerleri atmak için Medyan filtresi kullanılabilir.

iOS ve Android'de RSSI Alma

iOS Core Bluetooth, RSSI okuması tamamlandıktan sonra peripheral.rssi özelliği (NSNumber) aracılığıyla RSSI sağlar. Reklam paketi RSSI'sini almak için advertisementData[CBAdvertisementDataRSSIKey] kullanın. iOS, RSSI'yi üç kanalın ortalama değeri olarak döndürür. Sürekli RSSI izlemesi için readRSSI'yi saniyede bir defadan fazla olmayacak aralıklarla çağırın.

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

    // Zayıf sinyalleri filtrele
    guard signalStrength > -90 else {
        return
    }

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

Android, onScanResult geri çağrımı aracılığıyla RSSI sağlar: result.getRssi(). RSSI değeri, son reklam paketinin RSSI'sidir (ortalama değil). Kararlı okumalar için birden çok değer biriktirmek ve filtreleme uygulamak gerekir. Android ayrıca, reklam paketinde iletilmesi durumunda result.getScanRecord().getTxPowerLevel() aracılığıyla TX Power Level da sağlar.

kotlin
// Android'te RSSI al
private val scanCallback = object : ScanCallback() {

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

        // Kalman filtresi uygula
        val filtered = kalmanFilter.
            filter(rssi.toDouble())

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

Konumlandırma için RSSI kullanan uygulamalar geliştirirken şunları göz önünde bulundurun: iOS'ta RSSI değerleri donanım kalibrasyonu sayesinde daha kararlıdır; Android'te daha gürültülüdür ve cihaz üreticisine bağlıdır. Platformlar arası projeler için, her platform için yapılandırılabilir parametrelerle uygulama tarafında filtreleme uygulanması önerilir.

Sıkça Sorulan Sorular

RSSI ile mesafe doğru bir şekilde belirlenebilir mi?

Hayır, RSSI gerçek koşullarda ±2–5 m doğrulukla yalnızca kaba bir tahmin sağlar. Hassas konumlandırma için birden çok tarayıcıdan üçgenleme, Kalman filtreleme ve TX Power'ın dikkate alınması gerekir.

Cihaz hareket etmediğinde neden RSSI değişir?

Çok yollu yayılım ve radyo sinyali dalgalanmaları nedeniyle. Duvarlardan ve nesnelerden yansımalar, sinyalin dönüşümlü olarak güçlendiği ve zayıfladığı parazit oluşturur. Sabit bir cihazda 5–10 dB'lik RSSI değişiklikleri normaldir.

iOS'ta RSSI ne sıklıkta okunabilir?

iOS, readRSSI'nın saniyede bir defadan fazla çağrılmamasını önerir. Çok sık istekler veri paketi kaybına yol açabilir. Tarama sırasında RSSI izlemesi için her reklam paketinde bulunan CBAdvertisementDataRSSIKey'i kullanın.

TX Power Level nedir ve RSSI ile nasıl ilişkilidir?

TX Power Level, reklam paketinde belirtilen dBm cinsinden verici gücüdür. RSSI + TX Power = vericiden alıcıya toplam sinyal zayıflaması. TX Power'ı bilmek daha doğru mesafe tahmini sağlar: RSSI - TX Power = Path Loss (yol kaybı).

İşaretler için hangi RSSI filtreleme yöntemi en iyisidir?

Sabit işaretler için — 5–10 değerlik bir pencereyle hareketli ortalama. Hareketli cihazlar için — düşük süreç gürültülü (0,01–0,05) Kalman filtresi. Aykırı değerleri atmak için, 2 standart sapma dışındaki değerleri kesen Medyan filtresi ekleyin.

Özet

  • RSSI, her paket alındığında alıcı tarafta dBm cinsinden ölçülen BLE sinyal gücü göstergesidir.
  • Değer aralığı: -30 dBm (mükemmel sinyal) ile -100 dBm (algılama sınırında zayıf sinyal) arası.
  • RSSI, ±2–5 m doğrulukla kaba bir mesafe tahmini sağlar, ancak gürültü ve parazit nedeniyle doğru bir mesafe ölçer değildir.
  • Ana hata kaynakları: engeller (duvarlar, insanlar), çok yollu yayılım, anten yönü ve Wi-Fi paraziti.
  • Kararlı mesafe tahmini için Kalman filtreleme, hareketli ortalama ve aykırı değerleri temizlemek için Medyan filtresi kullanılır.
  • iOS'ta RSSI üç kanalın ortalamasıdır; Android'te son paket değeridir, bu da uygulama tarafında filtreleme gerektirir.
  • Reklam paketindeki TX Power Level, RSSI ile birlikte daha doğru mesafe tahmini için toplam sinyal zayıflaması olan Path Loss'u sağlar.

Anahtar teslim bir mobil uygulama geliştireceğiz

IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.

Projeyi tartış

Ayrıca okuyun