RSSI (Received Signal Strength Indicator) — ay isang numerikong sukatan na sumusukat sa lakas ng signal ng BLE device sa dBm sa panig ng pagtanggap. Ang halaga ng RSSI ay mula -30 dBm (device sa malapit) hanggang -100 dBm (sa hangganan ng pagtuklas). Tinutukoy ng Bluetooth Core Specification 5.4 (2023) ang RSSI bilang isang opsyonal na parameter na available sa bawat advertisement packet at data packet. Ginagamit ang RSSI para sa pagtatantiya ng distansya (range estimation) at pag-filter ng mga device ayon sa antas ng signal, ngunit ito ay isang hindi tumpak na tagapagpahiwatig: naaapektuhan ito ng mga hadlang, multipath propagation at uri ng antenna. Para sa tumpak na pagpoposisyon, ginagamit ang triangulation at Kalman filtering.
Mga pangunahing punto
RSSI (Received Signal Strength Indicator) — ay ang pagsukat ng lakas ng radio signal na natanggap ng BLE receiver sa sandali ng pagtanggap ng packet. Sa BLE, sinusukat ang RSSI para sa bawat advertisement packet (advertising) at bawat data packet pagkatapos ng koneksyon. Ang halaga ng RSSI ay isang logaritmikong iskala, kung saan ang bawat hakbang na 1 dBm ay humigit-kumulang katumbas ng pagbabago sa lakas ng signal na 1.26 beses.
Ang RSSI ay isang tagapagpahiwatig na nakadepende sa hardware: ang iba't ibang BLE chip (nRF, TI, Dialog, Broadcom) at iba't ibang antenna ay maaaring magpakita ng iba't ibang halaga ng RSSI para sa parehong signal. Samakatuwid, ang paghahambing ng RSSI sa pagitan ng iba't ibang device ay hindi tama. Kahit ang dalawang magkaparehong smartphone na may parehong operating system ay maaaring magpakita ng pagkakaiba na 2–5 dBm para sa parehong beacon.
Sa advertisement packet, sinusukat ang RSSI para sa bawat isa sa tatlong channel (37, 38, 39). Ang mga halaga ay maaaring magkaiba ng 3–10 dBm sa pagitan ng mga channel dahil sa frequency interference. Ang mga modernong BLE stack ay nag-uulat ng average na RSSI sa lahat ng channel o RSSI para sa bawat packet nang hiwalay. Ang iOS Core Bluetooth ay nagbibigay ng average na RSSI, Android — RSSI ng huling packet.
Ang tipikal na saklaw ng RSSI para sa BLE ay mula -30 dBm hanggang -100 dBm. Ang mga halaga sa labas ng mga hangganang ito ay napakabihirang: -20 dBm ay nangangahulugang literal na dumadampi ang device sa antenna ng scanner, at -105 dBm — kumpletong kawalan ng signal. Maaaring limitahan ng mga tagagawa ng chip ang saklaw: halimbawa, ang nRF52832 ay nag-uulat ng RSSI mula -40 hanggang -105 dBm.
| RSSI (dBm) | Kalidad ng signal | Tantiyang distansya | Rekomendasyon |
|---|---|---|---|
| -30 – -50 | Napakahusay | 0–1 m | Device sa malapit |
| -51 – -70 | Mahusay | 1–5 m | Sa loob ng silid |
| -71 – -85 | Katamtaman | 5–15 m | Katanggap-tanggap para sa mga beacon |
| -86 – -95 | Mahina | 15–30 m | Hindi maaasahang koneksyon |
| Ibaba ng -95 | Kritikal | 30+ m | Sa hangganan ng pagtuklas |
TX Power Level — lakas ng transmitter, na nakasaad sa advertisement packet (AD Type 0x0A) at nagbibigay-daan sa pagwawasto ng pagtatantiya. Ang RSSI -70 dBm mula sa isang device na may TX Power +4 dBm ay nangangahulugang ang signal ay humina ng 74 dB. Kung hindi kilala ang TX Power, hindi posible ang tumpak na pagtatantiya ng distansya. Ang iBeacon ay naglalaman ng TX Power (1 byte) sa istraktura ng Manufacturer Data para sa pagkakalibrate ng distansya.
Ang modelo ng Path Loss (pagkawala ng propagasyon) ay ginagamit para sa pagtatantiya ng distansya batay sa RSSI. Ang pangunahing formula: RSSI = TX_Power - 10 × n × log10(d), kung saan n — coefficient ng pagpapahina (2.0 para sa libreng espasyo, 3.0–4.5 para sa mga silid na may hadlang), d — distansya sa metro. Sa praktika, ang katumpakan ng pagtatantiya ay ±2–5 m sa totoong mga kondisyon.
Para sa pagkakalibrate ng modelo, kinakailangang sukatin ang RSSI sa kilalang distansya (karaniwang 1 m) at kalkulahin ang TX Power reference. Sa iBeacon, ang parameter na ito ay nakaimbak sa packet. Sa Eddystone, ginagamit ang katulad na mekanismo. Pagkatapos ng pagkakalibrate, maaaring kalkulahin ang distansya: d = 10 ^ ((TX_Power — RSSI) / (10 × n)).
Ayon sa Apple Core Bluetooth Programming Guide (2024), ang katumpakan ng pagtatantiya ng distansya para sa iBeacon ay: immediate (<0.5 m) — kapag ang RSSI ay mas mataas sa halaga ng pagkakalibrate, near (0.5–3 m) — kapag ang RSSI ay nasa saklaw na 3–6 dB mula sa halaga ng pagkakalibrate, far (>3 m) — sa mahinang signal. Walang modelo ng matematika na nagbibigay ng katumpakan na mas mahusay kaysa ±1 m nang walang karagdagang pagproseso.
Ang RSSI ay isang maingay na tagapagpahiwatig, at ang katumpakan nito ay nakadepende sa maraming salik. Ang mga pangunahing pinagmumulan ng error: mga hadlang (dingding, kasangkapan, tao) ay nagpapahina ng signal ng 3–15 dB bawat isa, multipath propagation (mga pagmuni-muni mula sa dingding) ay maaaring magpalakas ng signal sa ilang punto at magpahina sa iba, oryentasyon ng antenna ay nagbabago ng RSSI ng 3–10 dB kapag pinaikot ang device.
Ang katawan ng tao ay isa sa pinakamalakas na sumisipsip ng BLE signal. Kung may tao sa pagitan ng beacon at smartphone, ang RSSI ay maaaring bumaba ng 10–20 dB. Ang tubig sa katawan ng tao ay epektibong sumisipsip ng radio radiation sa frequency na 2.4 GHz. Kaya naman ang mga beacon sa mga pintuan ng tindahan ay maaaring magpakita ng iba't ibang RSSI para sa mga customer na may iba't ibang taas at pangangatawan.
Mga karagdagang salik: interference ng Wi-Fi sa mga kalapit na channel ay maaaring magpababa ng RSSI ng 3–5 dB, temperatura ng BLE chip ay nakakaapekto sa katumpakan ng pagsukat ng RSSI (sa ilang chip drift hanggang 1 dB/°C), pagkasira ng baterya sa beacon ay nagpapababa ng TX Power, na humahantong sa mas mababang RSSI sa receiver.
Ang raw RSSI ay hindi angkop para sa tumpak na pagkalkula — naglalaman ito ng masyadong maraming ingay at outlier. Upang makakuha ng matatag na pagtatantiya ng distansya, ginagamit ang mga paraan ng pag-filter. Ang pinakasimple — moving average: kinukuha ang arithmetic average ng huling N halaga ng RSSI. Ang N = 5–10 ay karaniwang sapat para sa pagpapakinis ng panandaliang pagbabago.
// Kalman filter para sa 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 {
// Hulaan
errorCovariance += processNoise
// I-update
val kalmanGain =
errorCovariance /
(errorCovariance + measurementNoise)
estimate = estimate +
kalmanGain * (rawRssi - estimate)
errorCovariance =
(1.0 - kalmanGain) * errorCovariance
return estimate
}
}
Kalman filter — isang mas advanced na paraan na isinasaalang-alang ang dynamics ng mga pagbabago sa RSSI at nagbibigay ng mas maliit na pagkaantala kaysa sa moving average. Para sa mga nakatigil na beacon (hindi gumagalaw), ang moving average ay nagbibigay ng katanggap-tanggap na resulta. Para sa mga gumagalaw na device, mas gusto ang Kalman filter dahil mas mabilis itong umaangkop sa mga pagbabago. Bilang karagdagan, maaaring gamitin ang Median filter para sa pagtatapon ng mga outlier.
iOS Core Bluetooth ay nagbibigay ng RSSI sa pamamagitan ng property na peripheral.rssi (NSNumber) pagkatapos makumpleto ang pagbasa ng RSSI. Upang makuha ang RSSI ng advertisement packet, gamitin ang advertisementData[CBAdvertisementDataRSSIKey]. Ibinabalik ng iOS ang RSSI bilang average na halaga sa tatlong channel. Para sa tuloy-tuloy na pagmonitor ng RSSI, tawagan ang readRSSI sa interval na hindi hihigit sa 1 beses bawat segundo.
// Kunin ang RSSI sa iOS
func centralManager(
_ central: CBCentralManager,
didDiscover peripheral: CBPeripheral,
advertisementData: [String: Any],
rssi RSSI: NSNumber
) {
let signalStrength = Int(truncating: RSSI)
// I-filter ang mahinang signal
guard signalStrength > -90 else {
return
}
print("Device " +
"\(peripheral.name ?? "unknown") " +
"RSSI: \(signalStrength) dBm")
}
Android ay nagbibigay ng RSSI sa pamamagitan ng callback na onScanResult: result.getRssi(). Ang halaga ng RSSI ay RSSI ng huling advertisement packet (hindi average). Para sa matatag na pagbasa, kinakailangang mag-ipon ng maraming halaga at mag-apply ng pag-filter. Nagbibigay din ang Android ng TX Power Level sa pamamagitan ng result.getScanRecord().getTxPowerLevel(), kung ito ay ipinapadala sa advertisement packet.
// Kunin ang RSSI sa Android
private val scanCallback = object : ScanCallback() {
override fun onScanResult(
callbackType: Int,
result: ScanResult
) {
val rssi = result.rssi
val txPower = result.scanRecord?.
txPowerLevel ?: -128
// Ilapat ang Kalman filter
val filtered = kalmanFilter.
filter(rssi.toDouble())
Log.d("BLEScanner",
"RSSI: $rssi, " +
"Filtered: $filtered, " +
"TX: $txPower")
}
}
Sa pagbuo ng mga application na gumagamit ng RSSI para sa pagpoposisyon, isaalang-alang: sa iOS ang mga halaga ng RSSI ay mas matatag dahil sa hardware calibration, sa Android — mas maingay at nakadepende sa tagagawa ng device. Para sa mga cross-platform na proyekto, inirerekomenda ang pagpapatupad ng pag-filter sa panig ng application na may mga nako-configure na parameter para sa bawat platform.
Mga madalas itanong
Hindi, ang RSSI ay nagbibigay lamang ng magaspang na pagtatantiya ng distansya na may katumpakan na ±2–5 m sa totoong mga kondisyon. Para sa tumpak na pagpoposisyon, kinakailangan ang triangulation mula sa maraming scanner, Kalman filtering at pagsasaalang-alang sa TX Power ng transmitter.
Dahil sa multipath propagation at pagbabago-bago ng radio signal. Ang mga pagmuni-muni mula sa dingding at bagay ay lumilikha ng interference kung saan ang signal minsan ay lumalakas at minsan ay humihina. Ang mga pagbabago sa RSSI na 5–10 dB sa isang nakatigil na device ay normal na pangyayari.
Inirerekomenda ng iOS na tawagan ang readRSSI nang hindi hihigit sa 1 beses bawat segundo. Ang masyadong madalas na paghiling ay maaaring humantong sa pagkawala ng mga data packet. Para sa pagmonitor ng RSSI habang nag-iiscan, gamitin ang CBAdvertisementDataRSSIKey na available para sa bawat advertisement packet.
TX Power Level — lakas ng transmitter sa dBm na nakasaad sa advertisement packet. RSSI + TX Power = kabuuang pagpapahina ng signal sa landas mula transmitter patungo sa receiver. Sa pag-alam ng TX Power, mas tumpak na matatantiya ang distansya: RSSI - TX Power = Path Loss (pagkawala sa ruta).
Para sa nakatigil na beacon — moving average na may window na 5–10 halaga. Para sa gumagalaw na device — Kalman filter na may maliit na process noise (0.01–0.05). Para sa pagtatapon ng mga outlier, magdagdag ng Median filter na pumuputol sa mga halaga sa labas ng 2 standard deviations.
Buod
Gagawa kami ng mobile application na turnkey
Gumagawa ang IT Sectr ng mga iOS at Android application para sa mga startup at negosyo mula noong 2017. Magpapayo kami sa iyo at magmumungkahi ng pinakamahusay na solusyon.
Basahin din