RSSI في BLE — مؤشر الإشارة وتقدير المسافة

المؤلف: IT Sectr نُشر: 2026-07-16 وقت القراءة: 10 دق

RSSI (Received Signal Strength Indicator) هو مقياس رقمي يقيس قوة إشارة جهاز BLE بوحدة dBm على الجانب المستقبل. تتراوح قيم RSSI من -30 dBm (الجهاز قريب) إلى -100 dBm (عند حد الكشف). يحدد Bluetooth Core Specification 5.4 (2023) RSSI كمعامل اختياري متاح في كل حزمة إعلانية وحزمة بيانات. يُستخدم RSSI لتقدير المسافة وتصفية الأجهزة حسب مستوى الإشارة، لكنه مؤشر غير دقيق: تتأثر دقته بالعوائق والانتشار متعدد المسارات ونوع الهوائي. للتحديد الدقيق للموضع تُستخدم التثليث ومرشح كالمان.

الخلاصة

  • RSSI هو مستوى قوة إشارة BLE بوحدة dBm يُقاس على الجانب المستقبل عند استلام حزمة.
  • نطاق RSSI: من -30 dBm (إشارة قوية جداً) إلى -100 dBm (حد الكشف).
  • يُستخدم RSSI لـ تقدير المسافة باستخدام نموذج Path Loss، لكن الدقة تبلغ ±2–5 م في الظروف الحقيقية.
  • تؤثر على RSSI: العوائق (الجدران والأشخاص)، الانتشار متعدد المسارات واتجاه الهوائي.
  • لتحسين الدقة، تُستخدم مرشح كالمان والمتوسط المتحرك والتثليث من عدة ماسحات ضوئية.

ما هو RSSI في BLE؟

RSSI (Received Signal Strength Indicator) هو قياس لقوة إشارة الراديو التي يستقبلها مستقبل BLE عند استلام الحزمة. في BLE، يُقاس RSSI لكل حزمة إعلانية وكل حزمة بيانات بعد الاتصال. RSSI هو مقياس لوغاريتمي حيث كل خطوة بمقدار 1 dBm تقابل تقريباً تغيراً بمقدار 1.26 مرة في قوة الإشارة.

RSSI هو مؤشر يعتمد على العتاد: رقاقات BLE المختلفة (nRF، TI، Dialog، Broadcom) والهوائيات المختلفة يمكن أن تظهر قيماً مختلفة لـ RSSI لنفس الإشارة. لذلك، مقارنة RSSI بين الأجهزة المختلفة غير صحيحة. حتى هاتفان ذكيان متطابقان على نفس النظام قد يظهران فرقاً بمقدار 2–5 dBm لنفس المنارة.

في الحزمة الإعلانية، يُقاس RSSI لكل من القنوات الثلاث (37، 38، 39). يمكن أن تختلف القيم بمقدار 3–10 dBm بين القنوات بسبب تداخل الترددات. تقوم مكدسات BLE الحديثة بالإبلاغ عن متوسط RSSI عبر جميع القنوات أو RSSI لكل حزمة على حدة. يوفر iOS Core Bluetooth متوسط RSSI، بينما يوفر Android RSSI لآخر حزمة.

نطاق قيم RSSI

نطاق RSSI النموذجي لـ BLE يتراوح من -30 dBm إلى -100 dBm. القيم خارج هذا النطاق نادرة جداً: -20 dBm تعني أن الجهاز يلامس حرفياً هوائي الماسح، بينما -105 dBm تعني غياب الإشارة تماماً. يمكن لمصنعي الرقاقات تحديد النطاق: على سبيل المثال، nRF52832 يُبلغ عن RSSI من -40 إلى -105 dBm.

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) وتسمح بتعديل التقدير. RSSI -70 dBm من جهاز بقوة إرسال +4 dBm يعني أن الإشارة تضعفت بمقدار 74 dB. إذا كانت قوة الإرسال غير معروفة، فإن التقدير الدقيق للمسافة مستحيل. يتضمن iBeacon قوة الإرسال (1 بايت) في هيكل Manufacturer Data لمعايرة المسافة.

علاقة RSSI بالمسافة

نموذج Path Loss (فقدان الانتشار) يُستخدم لتقدير المسافة من RSSI. الصيغة الأساسية: RSSI = TX_Power - 10 × n × log10(d)، حيث n هو معامل التوهين (2.0 للمساحة الحرة، 3.0–4.5 للأماكن المغلقة ذات العوائق) وd هي المسافة بالمتر. عملياً، دقة التقدير هي ±2–5 م في الظروف الحقيقية.

لمعايرة النموذج، يجب قياس RSSI على مسافة معروفة (عادة 1 م) وحساب مرجع قوة الإرسال. في 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

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)، تدهور البطارية في المنارة يقلل من قوة الإرسال مما يؤدي إلى انخفاض RSSI عند المستقبل.

تصفية وتنعيم RSSI

RSSI الخام غير مناسب للحسابات الدقيقة — فهو يحتوي على الكثير من الضوضاء والقيم الشاذة. تُستخدم طرق التصفية للحصول على تقدير مستقر للمسافة. أبسطها هو المتوسط المتحرك: يتم أخذ المتوسط الحسابي لآخر N من قيم RSSI. عادةً ما تكون N = 5–10 كافية لتنعيم التقلبات قصيرة المدى.

kotlin
// مرشح كالمان لـ 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 {
        // توقع
        errorCovariance += processNoise

        // تحديث
        val kalmanGain =
            errorCovariance /
            (errorCovariance + measurementNoise)

        estimate = estimate +
            kalmanGain * (rawRssi - estimate)

        errorCovariance =
            (1.0 - kalmanGain) * errorCovariance

        return estimate
    }
}

مرشح كالمان هو طريقة أكثر تقدماً تأخذ في الاعتبار ديناميكيات تغير RSSI وتوفر تأخيراً أقل من المتوسط المتحرك. للمنارات الثابتة، يعطي المتوسط المتحرك نتائج مقبولة. للأجهزة المتحركة، يُفضل مرشح كالمان لأنه يتكيف بشكل أسرع مع التغييرات. بالإضافة إلى ذلك، يمكن استخدام مرشح الوسيط لاستبعاد القيم الشاذة.

الحصول على RSSI في iOS وAndroid

iOS Core Bluetooth يوفر RSSI من خلال الخاصية peripheral.rssi (NSNumber) بعد اكتمال قراءة RSSI. للحصول على RSSI للحزمة الإعلانية، استخدم advertisementData[CBAdvertisementDataRSSIKey]. يُرجع iOS RSSI كمتوسط عبر القنوات الثلاث. للمراقبة المستمرة لـ RSSI، استدعِ readRSSI بفاصل زمني لا يزيد عن مرة واحدة في الثانية.

swift
// الحصول على RSSI في iOS
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 يوفر RSSI من خلال استدعاء onScanResult: result.getRssi(). قيمة RSSI هي RSSI لآخر حزمة إعلانية (وليس متوسطاً). للحصول على قراءات مستقرة، يجب تجميع عدة قيم وتطبيق التصفية. يوفر Android أيضاً TX Power Level من خلال result.getScanRecord().getTxPowerLevel()، إذا تم إرسالها في الحزمة الإعلانية.

kotlin
// الحصول على RSSI في Android
private val scanCallback = object : ScanCallback() {

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

        // تطبيق مرشح كالمان
        val filtered = kalmanFilter.
            filter(rssi.toDouble())

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

عند تطوير التطبيقات التي تستخدم RSSI لتحديد الموضع، ضع في الاعتبار: في iOS، قيم RSSI أكثر استقراراً بفضل المعايرة العتادية؛ في Android، هي أكثر ضوضاءً وتعتمد على مصنع الجهاز. للمشاريع عبر المنصات، يُنصح بتنفيذ التصفية على جانب التطبيق مع معاملات قابلة للتكوين لكل منصة.

الأسئلة الشائعة

هل يمكن تحديد المسافة بدقة باستخدام RSSI؟

لا، يوفر RSSI فقط تقديراً تقريبياً للمسافة بدقة ±2–5 م في الظروف الحقيقية. للتحديد الدقيق للموضع، يلزم التثليث من عدة ماسحات ضوئية ومرشح كالمان ومراعاة قوة الإرسال.

لماذا يتغير RSSI حتى عندما لا يتحرك الجهاز؟

بسبب الانتشار متعدد المسارات وتقلبات إشارة الراديو. تخلق الانعكاسات من الجدران والأشياء تداخلاً حيث تتعزز الإشارة وتضعف بالتناوب. تغيرات RSSI بمقدار 5–10 dB على جهاز ثابت هي ظاهرة طبيعية.

كم مرة يمكن قراءة RSSI على iOS؟

يوصي iOS باستدعاء readRSSI بما لا يزيد عن مرة واحدة في الثانية. الطلبات المتكررة جداً قد تؤدي إلى فقدان حزم البيانات. لمراقبة RSSI أثناء المسح، استخدم CBAdvertisementDataRSSIKey المتاح لكل حزمة إعلانية.

ما هو TX Power Level وكيف يرتبط بـ RSSI؟

TX Power Level هو قوة المرسل بوحدة dBm المُشار إليها في الحزمة الإعلانية. RSSI + TX Power = التوهين الكلي للإشارة من المرسل إلى المستقبل. معرفة قوة الإرسال تسمح بتقدير أكثر دقة للمسافة: RSSI - TX Power = Path Loss (فقدان المسار).

ما هي أفضل طريقة لتصفية RSSI للمنارات؟

لـ لمنارات الثابتة — المتوسط المتحرك بنافذة من 5–10 قيم. لـ الأجهزة المتحركة — مرشح كالمان مع ضوضاء عملية منخفضة (0.01–0.05). لاستبعاد القيم الشاذة، أضف مرشح الوسيط الذي يستبعد القيم خارج انحرافين معياريين.

الملخص

  • RSSI هو مؤشر قوة إشارة BLE بوحدة dBm يُقاس على الجانب المستقبل عند استلام كل حزمة.
  • نطاق القيم: من -30 dBm (إشارة ممتازة) إلى -100 dBm (إشارة ضعيفة عند حد الكشف).
  • يوفر RSSI تقديراً تقريبياً للمسافة بدقة ±2–5 م، لكنه ليس مقياس مسافة دقيقاً بسبب الضوضاء والتداخل.
  • المصادر الرئيسية للخطأ: العوائق (الجدران والأشخاص)، الانتشار متعدد المسارات، اتجاه الهوائي وتداخل Wi-Fi.
  • لتقدير مستقر للمسافة، تُستخدم مرشح كالمان والمتوسط المتحرك ومرشح الوسيط لاستبعاد القيم الشاذة.
  • في iOS، RSSI هو متوسط عبر ثلاث قنوات؛ في Android، هو قيمة آخر حزمة، مما يتطلب تصفية على جانب التطبيق.
  • TX Power Level في الحزمة الإعلانية مع RSSI يعطي Path Loss — التوهين الكلي للإشارة لتقدير أكثر دقة للمسافة.

سنقوم بتطوير تطبيق جوال جاهز

تقدم IT Sectr تطبيقات iOS وAndroid للشركات الناشئة والشركات منذ عام 2017. سوف نقدم لك النصح ونقترح أفضل حل.

مناقشة المشروع

اقرأ أيضًا