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 (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.
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 Kalitesi | Yaklaşık Mesafe | Öneri |
|---|---|---|---|
| -30 – -50 | Mükemmel | 0–1 m | Cihaz yakında |
| -51 – -70 | İyi | 1–5 m | Oda içinde |
| -71 – -85 | Orta | 5–15 m | İşaret için kabul edilebilir |
| -86 – -95 | Zayıf | 15–30 m | Güvenilmez bağlantı |
| -95 altı | Kritik | 30+ m | Algı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.
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 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.
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.
// 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 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.
// 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.
// 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
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.
Ç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, 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, 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ı).
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
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.
Ayrıca okuyun