RSSI (Received Signal Strength Indicator) — adalah metrik numerik yang mengukur kekuatan sinyal perangkat BLE dalam dBm di sisi penerima. Nilai RSSI bervariasi dari -30 dBm (perangkat di dekat) hingga -100 dBm (di batas deteksi). Bluetooth Core Specification 5.4 (2023) mendefinisikan RSSI sebagai parameter opsional yang tersedia di setiap paket iklan dan paket data. RSSI digunakan untuk estimasi jarak (range estimation) dan penyaringan perangkat berdasarkan level sinyal, tetapi merupakan indikator yang tidak akurat: dipengaruhi oleh hambatan, propagasi multipath dan jenis antena. Untuk penentuan posisi yang akurat digunakan triangulasi dan filter Kalman.
Poin utama
RSSI (Received Signal Strength Indicator) — adalah pengukuran kekuatan sinyal radio yang diterima oleh penerima BLE pada saat penerimaan paket. Di BLE, RSSI diukur untuk setiap paket iklan (advertising) dan setiap paket data setelah koneksi. Nilai RSSI adalah skala logaritmik, di mana setiap langkah 1 dBm kira-kira setara dengan perubahan kekuatan sinyal sebesar 1,26 kali.
RSSI adalah indikator yang bergantung pada perangkat keras: chip BLE yang berbeda (nRF, TI, Dialog, Broadcom) dan antena yang berbeda dapat menunjukkan nilai RSSI yang berbeda untuk sinyal yang sama. Oleh karena itu, membandingkan RSSI antar perangkat yang berbeda tidak tepat. Bahkan dua ponsel cerdas identik dengan sistem operasi yang sama dapat menunjukkan perbedaan 2–5 dBm untuk beacon yang sama.
Dalam paket iklan, RSSI diukur untuk masing-masing dari tiga saluran (37, 38, 39). Nilai dapat berbeda 3–10 dBm antar saluran karena interferensi frekuensi. Tumpukan BLE modern melaporkan RSSI rata-rata di semua saluran atau RSSI untuk setiap paket secara terpisah. iOS Core Bluetooth menyediakan RSSI rata-rata, Android — RSSI paket terakhir.
Rentang RSSI tipikal untuk BLE adalah dari -30 dBm hingga -100 dBm. Nilai di luar batas ini sangat jarang: -20 dBm berarti perangkat benar-benar menyentuh antena pemindai, dan -105 dBm — tidak ada sinyal sama sekali. Produsen chip dapat membatasi rentang: misalnya, nRF52832 melaporkan RSSI dari -40 hingga -105 dBm.
| RSSI (dBm) | Kualitas sinyal | Perkiraan jarak | Rekomendasi |
|---|---|---|---|
| -30 – -50 | Sangat baik | 0–1 m | Perangkat di dekat |
| -51 – -70 | Baik | 1–5 m | Dalam ruangan |
| -71 – -85 | Sedang | 5–15 m | Dapat diterima untuk beacon |
| -86 – -95 | Lemah | 15–30 m | Koneksi tidak andal |
| Di bawah -95 | Kritis | 30+ m | Di batas deteksi |
TX Power Level — kekuatan pemancar, yang ditunjukkan dalam paket iklan (AD Type 0x0A) dan memungkinkan koreksi estimasi. RSSI -70 dBm dari perangkat dengan TX Power +4 dBm berarti sinyal telah melemah sebesar 74 dB. Jika TX Power tidak diketahui, estimasi jarak yang akurat tidak mungkin dilakukan. iBeacon menyertakan TX Power (1 byte) dalam struktur Manufacturer Data untuk kalibrasi jarak.
Model Path Loss (kerugian propagasi) digunakan untuk memperkirakan jarak berdasarkan RSSI. Rumus dasar: RSSI = TX_Power - 10 × n × log10(d), di mana n — koefisien redaman (2,0 untuk ruang bebas, 3,0–4,5 untuk ruangan dengan hambatan), d — jarak dalam meter. Dalam praktiknya, akurasi estimasi adalah ±2–5 m dalam kondisi nyata.
Untuk mengkalibrasi model, perlu mengukur RSSI pada jarak yang diketahui (biasanya 1 m) dan menghitung referensi TX Power. Di iBeacon, parameter ini disimpan dalam paket. Di Eddystone digunakan mekanisme serupa. Setelah kalibrasi, jarak dapat dihitung: d = 10 ^ ((TX_Power — RSSI) / (10 × n)).
Menurut Apple Core Bluetooth Programming Guide (2024), akurasi estimasi jarak untuk iBeacon adalah: immediate (<0,5 m) — ketika RSSI di atas nilai kalibrasi, near (0,5–3 m) — ketika RSSI dalam rentang 3–6 dB dari nilai kalibrasi, far (>3 m) — saat sinyal lemah. Tidak ada model matematika yang memberikan akurasi lebih baik dari ±1 m tanpa pemrosesan tambahan.
RSSI adalah indikator yang bising, dan akurasinya tergantung pada banyak faktor. Sumber kesalahan utama: hambatan (dinding, furnitur, orang) melemahkan sinyal masing-masing 3–15 dB, propagasi multipath (pantulan dari dinding) dapat memperkuat sinyal di beberapa titik dan melemahkan di titik lain, orientasi antena mengubah RSSI sebesar 3–10 dB saat memutar perangkat.
Tubuh manusia adalah salah satu penyerap sinyal BLE terkuat. Jika ada orang di antara beacon dan ponsel cerdas, RSSI bisa turun 10–20 dB. Air dalam tubuh manusia secara efektif menyerap radiasi radio pada frekuensi 2,4 GHz. Oleh karena itu, beacon di pintu toko dapat menunjukkan RSSI yang berbeda untuk pelanggan dengan tinggi dan bentuk tubuh yang berbeda.
Faktor tambahan: interferensi Wi-Fi pada saluran tetangga dapat mengurangi RSSI sebesar 3–5 dB, suhu chip BLE mempengaruhi akurasi pengukuran RSSI (pada beberapa chip penyimpangan hingga 1 dB/°C), degradasi baterai pada beacon mengurangi TX Power, yang menyebabkan RSSI lebih rendah di penerima.
RSSI mentah tidak cocok untuk perhitungan yang akurat — mengandung terlalu banyak noise dan pencilan. Untuk mendapatkan estimasi jarak yang stabil, metode penyaringan diterapkan. Yang paling sederhana — rata-rata bergerak: rata-rata aritmatika dari N nilai RSSI terakhir diambil. N = 5–10 biasanya cukup untuk menghaluskan fluktuasi jangka pendek.
// Filter Kalman untuk 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 {
// Prediksi
errorCovariance += processNoise
// Perbarui
val kalmanGain =
errorCovariance /
(errorCovariance + measurementNoise)
estimate = estimate +
kalmanGain * (rawRssi - estimate)
errorCovariance =
(1.0 - kalmanGain) * errorCovariance
return estimate
}
}
Filter Kalman — metode yang lebih canggih yang memperhitungkan dinamika perubahan RSSI dan memberikan penundaan yang lebih kecil daripada rata-rata bergerak. Untuk beacon stasioner (tidak bergerak), rata-rata bergerak memberikan hasil yang dapat diterima. Untuk perangkat bergerak, filter Kalman lebih disukai karena lebih cepat beradaptasi dengan perubahan. Selain itu, filter Median dapat digunakan untuk membuang pencilan.
iOS Core Bluetooth menyediakan RSSI melalui properti peripheral.rssi (NSNumber) setelah pembacaan RSSI selesai. Untuk mendapatkan RSSI paket iklan, gunakan advertisementData[CBAdvertisementDataRSSIKey]. iOS mengembalikan RSSI sebagai nilai rata-rata pada tiga saluran. Untuk pemantauan RSSI berkelanjutan, panggil readRSSI dengan interval tidak lebih dari 1 kali per detik.
// Dapatkan RSSI di iOS
func centralManager(
_ central: CBCentralManager,
didDiscover peripheral: CBPeripheral,
advertisementData: [String: Any],
rssi RSSI: NSNumber
) {
let signalStrength = Int(truncating: RSSI)
// Saring sinyal lemah
guard signalStrength > -90 else {
return
}
print("Perangkat " +
"\(peripheral.name ?? "unknown") " +
"RSSI: \(signalStrength) dBm")
}
Android menyediakan RSSI melalui callback onScanResult: result.getRssi(). Nilai RSSI adalah RSSI dari paket iklan terakhir (bukan rata-rata). Untuk pembacaan yang stabil, perlu mengumpulkan beberapa nilai dan menerapkan penyaringan. Android juga menyediakan TX Power Level melalui result.getScanRecord().getTxPowerLevel(), jika ditransmisikan dalam paket iklan.
// Dapatkan RSSI di Android
private val scanCallback = object : ScanCallback() {
override fun onScanResult(
callbackType: Int,
result: ScanResult
) {
val rssi = result.rssi
val txPower = result.scanRecord?.
txPowerLevel ?: -128
// Terapkan filter Kalman
val filtered = kalmanFilter.
filter(rssi.toDouble())
Log.d("BLEScanner",
"RSSI: $rssi, " +
"Filtered: $filtered, " +
"TX: $txPower")
}
}
Saat mengembangkan aplikasi yang menggunakan RSSI untuk penentuan posisi, pertimbangkan: di iOS nilai RSSI lebih stabil berkat kalibrasi perangkat keras, di Android — lebih bising dan tergantung pada produsen perangkat. Untuk proyek lintas platform, disarankan untuk mengimplementasikan penyaringan di sisi aplikasi dengan parameter yang dapat dikonfigurasi untuk setiap platform.
Pertanyaan yang sering diajukan
Tidak, RSSI hanya memberikan perkiraan kasar jarak dengan akurasi ±2–5 m dalam kondisi nyata. Untuk penentuan posisi yang akurat diperlukan triangulasi dari beberapa pemindai, filter Kalman dan mempertimbangkan TX Power pemancar.
Karena propagasi multipath dan fluktuasi sinyal radio. Pantulan dari dinding dan benda menciptakan interferensi di mana sinyal terkadang diperkuat dan terkadang dilemahkan. Perubahan RSSI sebesar 5–10 dB pada perangkat diam adalah fenomena normal.
iOS merekomendasikan memanggil readRSSI tidak lebih dari 1 kali per detik. Permintaan yang terlalu sering dapat menyebabkan hilangnya paket data. Untuk pemantauan RSSI saat pemindaian, gunakan CBAdvertisementDataRSSIKey yang tersedia untuk setiap paket iklan.
TX Power Level — kekuatan pemancar dalam dBm yang ditentukan dalam paket iklan. RSSI + TX Power = redaman total sinyal pada jalur dari pemancar ke penerima. Mengetahui TX Power, jarak dapat diperkirakan lebih akurat: RSSI - TX Power = Path Loss (kerugian jalur).
Untuk beacon stasioner — rata-rata bergerak dengan jendela 5–10 nilai. Untuk perangkat bergerak — filter Kalman dengan noise proses kecil (0,01–0,05). Untuk membuang pencilan, tambahkan filter Median yang memotong nilai di luar 2 simpangan baku.
Ringkasan
Kami akan mengembangkan aplikasi seluler turnkey
IT Sectr membuat aplikasi iOS dan Android untuk startup dan bisnis sejak 2017. Kami akan memberi saran dan mengusulkan solusi terbaik.
Baca juga