RSSI (Received Signal Strength Indicator) ایک عددی میٹرک ہے جو وصول کنندہ کی طرف BLE ڈیوائس کے سگنل کی طاقت کو dBm میں ناپتا ہے۔ RSSI قدریں -30 dBm (ڈیوائس قریب) سے -100 dBm (شناخت کی حد پر) تک ہوتی ہیں۔ Bluetooth Core Specification 5.4 (2023) RSSI کو ایک اختیاری پیرامیٹر کے طور پر بیان کرتا ہے جو ہر اشتہاری پیکٹ اور ڈیٹا پیکٹ میں دستیاب ہے۔ RSSI فاصلہ کے تخمینہ اور سگنل لیول کے مطابق ڈیوائسز کو فلٹر کرنے کے لیے استعمال ہوتا ہے، لیکن یہ ایک غیر درست اشارہ ہے: رکاوٹیں، کثیر راستہ پھیلاؤ اور اینٹینا کی قسم اسے متاثر کرتی ہے۔ درست مقام کے تعین کے لیے مثلثی پیمائش اور Kalman فلٹرنگ استعمال کی جاتی ہے۔
اہم نکات
RSSI (Received Signal Strength Indicator) پیکٹ وصولی کے وقت BLE ریسیور کے ذریعے موصول ہونے والی ریڈیو سگنل طاقت کی پیمائش ہے۔ BLE میں، RSSI ہر اشتہاری پیکٹ اور کنکشن کے بعد ہر ڈیٹا پیکٹ کے لیے ناپا جاتا ہے۔ RSSI ایک لوگارتھمک پیمانہ ہے جہاں 1 dBm کا ہر قدم سگنل طاقت میں تقریباً 1.26 گنا تبدیلی کے برابر ہے۔
RSSI ایک ہارڈویئر پر منحصر اشارہ ہے: مختلف BLE چپس (nRF, TI, Dialog, Broadcom) اور مختلف اینٹینا ایک ہی سگنل کے لیے مختلف RSSI قدریں دکھا سکتے ہیں۔ لہذا، مختلف ڈیوائسز کے درمیان RSSI کا موازنہ کرنا درست نہیں۔ ایک ہی OS پر دو ایک جیسے اسمارٹ فونز بھی ایک ہی بیکن کے لیے 2–5 dBm کا فرق دکھا سکتے ہیں۔
ایک اشتہاری پیکٹ میں، RSSI تین چینلز (37, 38, 39) میں سے ہر ایک کے لیے ناپا جاتا ہے۔ فریکوئنسی مداخلت کی وجہ سے چینلز کے درمیان اقدار 3–10 dBm تک مختلف ہو سکتی ہیں۔ جدید BLE اسٹیک تمام چینلز پر اوسط RSSI یا ہر پیکٹ کے لیے انفرادی RSSI رپورٹ کرتے ہیں۔ iOS Core Bluetooth اوسط RSSI فراہم کرتا ہے، Android آخری پیکٹ کا RSSI فراہم کرتا ہے۔
BLE کے لیے عام RSSI حد -30 dBm سے -100 dBm تک ہے۔ اس حد سے باہر کی قدریں انتہائی نایاب ہیں: -20 dBm کا مطلب ہے کہ ڈیوائس لفظی طور پر اسکینر اینٹینا کو چھو رہی ہے، جبکہ -105 dBm کا مطلب سگنل کی مکمل عدم موجودگی ہے۔ چپ بنانے والے حد کو محدود کر سکتے ہیں: مثال کے طور پر، nRF52832 -40 سے -105 dBm تک RSSI رپورٹ کرتا ہے۔
| RSSI (dBm) | سگنل کا معیار | تخمینی فاصلہ | سفارش |
|---|---|---|---|
| -30 – -50 | بہترین | 0–1 میٹر | ڈیوائس قریب |
| -51 – -70 | اچھا | 1–5 میٹر | کمرے کے اندر |
| -71 – -85 | درمیانی | 5–15 میٹر | بیکن کے لیے قابل قبول |
| -86 – -95 | کمزور | 15–30 میٹر | ناقابل بھروسہ کنکشن |
| -95 سے نیچے | نازک | 30+ میٹر | شناخت کی حد پر |
TX Power Level ٹرانسمیٹر کی طاقت ہے جو اشتہاری پیکٹ (AD Type 0x0A) میں بتائی جاتی ہے اور تخمینہ کو ایڈجسٹ کرنے کی اجازت دیتی ہے۔ TX Power +4 dBm والے ڈیوائس سے RSSI -70 dBm کا مطلب ہے کہ سگنل 74 dB کمزور ہوا ہے۔ اگر TX Power نامعلوم ہو تو درست فاصلہ کا تخمینہ ناممکن ہے۔ iBeacon فاصلہ کیلیبریشن کے لیے Manufacturer Data ڈھانچے میں TX Power (1 بائٹ) شامل کرتا ہے۔
Path Loss ماڈل (پھیلاؤ کا نقصان) RSSI سے فاصلہ کا تخمینہ لگانے کے لیے استعمال ہوتا ہے۔ بنیادی فارمولا: RSSI = TX_Power - 10 × n × log10(d)، جہاں n کمزوری کا گتانک ہے (خالی جگہ کے لیے 2.0، رکاوٹوں والے اندرونی ماحول کے لیے 3.0–4.5) اور d میٹر میں فاصلہ ہے۔ عملی طور پر، حقیقی حالات میں تخمینہ کی درستگی ±2–5 میٹر ہے۔
ماڈل کو کیلیبریٹ کرنے کے لیے، معلوم فاصلہ (عام طور پر 1 میٹر) پر RSSI ناپنا اور TX Power حوالہ کا حساب لگانا ضروری ہے۔ iBeacon میں، یہ پیرامیٹر پیکٹ میں محفوظ ہوتا ہے۔ Eddystone اسی طرح کا طریقہ کار استعمال کرتا ہے۔ کیلیبریشن کے بعد، فاصلہ کا حساب لگایا جا سکتا ہے: d = 10 ^ ((TX_Power — RSSI) / (10 × n)).
Apple Core Bluetooth Programming Guide (2024) کے مطابق، iBeacon کے لیے فاصلہ تخمینہ کی درستگی یہ ہے: immediate (<0.5 میٹر) — جب RSSI کیلیبریشن ویلیو سے اوپر ہو، near (0.5–3 میٹر) — جب RSSI کیلیبریشن ویلیو کے 3–6 dB کے اندر ہو، far (>3 میٹر) — کمزور سگنل کے ساتھ۔ اضافی پروسیسنگ کے بغیر کوئی بھی ریاضیاتی ماڈل ±1 میٹر سے بہتر درستگی فراہم نہیں کرتا۔
RSSI ایک شور بھرا اشارہ ہے، اور اس کی درستگی کئی عوامل پر منحصر ہے۔ غلطی کے اہم ذرائع: رکاوٹیں (دیواریں، فرنیچر، لوگ) ہر ایک سگنل کو 3–15 dB کمزور کرتی ہیں، کثیر راستہ پھیلاؤ (دیواروں سے عکاسی) بعض مقامات پر سگنل کو مضبوط اور دوسروں پر کمزور کر سکتا ہے، اینٹینا کی سمت ڈیوائس گھمانے پر RSSI کو 3–10 dB تبدیل کرتی ہے۔
انسانی جسم BLE سگنل کے سب سے مضبوط جذب کنندگان میں سے ایک ہے۔ اگر بیکن اور اسمارٹ فون کے درمیان کوئی شخص ہو تو RSSI 10–20 dB گر سکتا ہے۔ انسانی جسم میں پانی 2.4 GHz فریکوئنسی پر ریڈیو شعاعوں کو مؤثر طریقے سے جذب کرتا ہے۔ لہذا، دکان کے دروازوں پر لگے بیکن مختلف قد اور جثے والے گاہکوں کے لیے مختلف RSSI دکھا سکتے ہیں۔
اضافی عوامل: ملحقہ چینلز پر Wi-Fi مداخلت RSSI کو 3–5 dB کم کر سکتی ہے، BLE چپ کا درجہ حرارت RSSI پیمائش کی درستگی کو متاثر کرتا ہے (کچھ چپس میں 1 dB/°C تک بہاؤ)، بیکن پر بیٹری کی کمی TX Power کو کم کرتی ہے، جس سے وصول کنندہ پر RSSI کم ہو جاتا ہے۔
خام RSSI درست حسابات کے لیے موزوں نہیں ہے — اس میں بہت زیادہ شور اور غیر معمولی اقدار ہوتی ہیں۔ مستحکم فاصلہ کا تخمینہ حاصل کرنے کے لیے فلٹرنگ کے طریقے استعمال کیے جاتے ہیں۔ سب سے آسان متحرک اوسط ہے: آخری N RSSI اقدار کا حسابی اوسط لیا جاتا ہے۔ قلیل مدتی اتار چڑھاؤ کو ہموار کرنے کے لیے عام طور پر N = 5–10 کافی ہے۔
// RSSI کے لیے Kalman فلٹر
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 {
// پیش گوئی کریں
errorCovariance += processNoise
// اپ ڈیٹ کریں
val kalmanGain =
errorCovariance /
(errorCovariance + measurementNoise)
estimate = estimate +
kalmanGain * (rawRssi - estimate)
errorCovariance =
(1.0 - kalmanGain) * errorCovariance
return estimate
}
}
Kalman فلٹر ایک زیادہ جدید طریقہ ہے جو RSSI تبدیلی کی حرکیات کو مدنظر رکھتا ہے اور متحرک اوسط سے کم تاخیر فراہم کرتا ہے۔ ساکن بیکنز کے لیے، متحرک اوسط قابل قبول نتائج دیتی ہے۔ حرکت کرنے والے ڈیوائسز کے لیے، Kalman فلٹر ترجیح دی جاتی ہے کیونکہ یہ تبدیلیوں کے مطابق تیزی سے ڈھل جاتا ہے۔ اضافی طور پر، غیر معمولی اقدار کو خارج کرنے کے لیے میڈین فلٹر استعمال کیا جا سکتا ہے۔
iOS Core Bluetooth RSSI پڑھنے کے مکمل ہونے پر peripheral.rssi پراپرٹی (NSNumber) کے ذریعے RSSI فراہم کرتا ہے۔ اشتہاری پیکٹ RSSI حاصل کرنے کے لیے advertisementData[CBAdvertisementDataRSSIKey] استعمال کریں۔ iOS تین چینلز کی اوسط قیمت کے طور پر RSSI واپس کرتا ہے۔ مسلسل RSSI نگرانی کے لیے، readRSSI کو فی سیکنڈ ایک بار سے زیادہ کے وقفے پر کال کریں۔
// iOS پر RSSI حاصل کریں
func centralManager(
_ central: CBCentralManager,
didDiscover peripheral: CBPeripheral,
advertisementData: [String: Any],
rssi RSSI: NSNumber
) {
let signalStrength = Int(truncating: RSSI)
// کمزور سگنل فلٹر کریں
guard signalStrength > -90 else {
return
}
print("ڈیوائس " +
"\(peripheral.name ?? "unknown") " +
"RSSI: \(signalStrength) dBm")
}
Android onScanResult کال بیک کے ذریعے RSSI فراہم کرتا ہے: result.getRssi()۔ RSSI قدر آخری اشتہاری پیکٹ کا RSSI ہے (اوسط نہیں)۔ مستحکم ریڈنگز کے لیے، متعدد اقدار جمع کرنا اور فلٹرنگ کا اطلاق کرنا ضروری ہے۔ Android TX Power Level بھی result.getScanRecord().getTxPowerLevel() کے ذریعے فراہم کرتا ہے، اگر یہ اشتہاری پیکٹ میں بھیجا جائے۔
// Android پر RSSI حاصل کریں
private val scanCallback = object : ScanCallback() {
override fun onScanResult(
callbackType: Int,
result: ScanResult
) {
val rssi = result.rssi
val txPower = result.scanRecord?.
txPowerLevel ?: -128
// Kalman فلٹر لگائیں
val filtered = kalmanFilter.
filter(rssi.toDouble())
Log.d("BLEScanner",
"RSSI: $rssi, " +
"Filtered: $filtered, " +
"TX: $txPower")
}
}
وہ ایپلیکیشنز تیار کرتے وقت جو مقام کے تعین کے لیے RSSI استعمال کرتی ہیں، یاد رکھیں: iOS پر، ہارڈویئر کیلیبریشن کی وجہ سے RSSI اقدار زیادہ مستحکم ہوتی ہیں؛ Android پر، یہ زیادہ شور بھری ہوتی ہیں اور ڈیوائس بنانے والے پر منحصر ہوتی ہیں۔ کراس پلیٹ فارم منصوبوں کے لیے، ہر پلیٹ فارم کے لیے ترتیب پذیر پیرامیٹرز کے ساتھ ایپلیکیشن کی طرف فلٹرنگ لاگو کرنے کی سفارش کی جاتی ہے۔
اکثر پوچھے گئے سوالات
نہیں، RSSI حقیقی حالات میں ±2–5 میٹر کی درستگی کے ساتھ صرف تقریبی تخمینہ فراہم کرتا ہے۔ درست مقام کے تعین کے لیے متعدد اسکینرز سے مثلثی پیمائش، Kalman فلٹرنگ اور TX Power پر غور کرنا ضروری ہے۔
کثیر راستہ پھیلاؤ اور ریڈیو سگنل کے اتار چڑھاؤ کی وجہ سے۔ دیواروں اور اشیاء سے عکاسی مداخلت پیدا کرتی ہے جہاں سگنل باری باری مضبوط اور کمزور ہوتا ہے۔ ساکن ڈیوائس پر 5–10 dB کی RSSI تبدیلیاں معمول ہیں۔
iOS readRSSI کو فی سیکنڈ ایک بار سے زیادہ کال نہ کرنے کی سفارش کرتا ہے۔ بہت بار بار درخواستیں ڈیٹا پیکٹ کے نقصان کا سبب بن سکتی ہیں۔ اسکیننگ کے دوران RSSI کی نگرانی کے لیے، CBAdvertisementDataRSSIKey استعمال کریں، جو ہر اشتہاری پیکٹ کے لیے دستیاب ہے۔
TX Power Level اشتہاری پیکٹ میں بتائی گئی dBm میں ٹرانسمیٹر کی طاقت ہے۔ RSSI + TX Power = ٹرانسمیٹر سے وصول کنندہ تک کل سگنل کمزوری۔ TX Power جاننے سے زیادہ درست فاصلہ کا تخمینہ ممکن ہے: RSSI - TX Power = Path Loss (راستے کا نقصان).
ساکن بیکنز کے لیے — 5–10 اقدار کی ونڈو کے ساتھ متحرک اوسط۔ حرکت کرنے والے ڈیوائسز کے لیے — کم عمل شور (0.01–0.05) کے ساتھ Kalman فلٹر۔ غیر معمولی اقدار کو خارج کرنے کے لیے، میڈین فلٹر شامل کریں جو 2 معیاری انحراف سے باہر کی اقدار کو کاٹ دیتا ہے۔
خلاصہ
ہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے
IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔
مزید پڑھیں