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 χρησιμοποιείται για εκτίμηση απόστασης (range estimation) και φιλτράρισμα συσκευών ανά επίπεδο σήματος, αλλά είναι ανακριβής δείκτης: τον επηρεάζουν εμπόδια, πολυδιαδρομική διάδοση και τύπος κεραίας. Για ακριβή εντοπισμό θέσης εφαρμόζονται τριγωνισμός και φίλτρο Kalman.

Κύρια σημεία

  • RSSI — επίπεδο ισχύος σήματος BLE σε dBm, μετρούμενο στην πλευρά λήψης κατά τη λήψη πακέτου.
  • Εύρος RSSI: από -30 dBm (πολύ ισχυρό σήμα) έως -100 dBm (όριο ανίχνευσης).
  • Το RSSI χρησιμοποιείται για εκτίμηση απόστασης σύμφωνα με το μοντέλο Path Loss, αλλά η ακρίβεια είναι ±2–5 m σε πραγματικές συνθήκες.
  • Το RSSI επηρεάζεται από: εμπόδια (τοίχοι, άνθρωποι), πολυδιαδρομική διάδοση και προσανατολισμό κεραίας.
  • Για βελτίωση της ακρίβειας εφαρμόζονται φίλτρο Kalman, κινητός μέσος όρος και τριγωνισμός από πολλαπλούς σαρωτές.

Τι είναι το RSSI στο BLE;

RSSI (Received Signal Strength Indicator) — είναι η μέτρηση της ισχύος του ραδιοσήματος που λαμβάνει ο δέκτης BLE τη στιγμή λήψης του πακέτου. Στο BLE, το RSSI μετράται για κάθε διαφημιστικό πακέτο (advertising) και για κάθε πακέτο δεδομένων μετά τη σύνδεση. Η τιμή RSSI είναι μια λογαριθμική κλίμακα, όπου κάθε βήμα 1 dBm αντιστοιχεί περίπου σε αλλαγή της ισχύος σήματος κατά 1,26 φορές.

Το RSSI είναι ένας δείκτης εξαρτώμενος από το υλικό: διαφορετικά τσιπ BLE (nRF, TI, Dialog, Broadcom) και διαφορετικές κεραίες μπορεί να εμφανίζουν διαφορετικές τιμές RSSI για το ίδιο σήμα. Επομένως, η σύγκριση RSSI μεταξύ διαφορετικών συσκευών είναι εσφαλμένη. Ακόμη και δύο πανομοιότυπα smartphone με το ίδιο λειτουργικό σύστημα μπορεί να εμφανίζουν διαφορά 2–5 dBm για τον ίδιο beacon.

Στο διαφημιστικό πακέτο, το 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 mΣυσκευή κοντά
-51 – -70Καλή1–5 mΕντός δωματίου
-71 – -85Μέτρια5–15 mΑποδεκτή για beacon
-86 – -95Ασθενής15–30 mΑναξιόπιστη σύνδεση
Κάτω από -95Κρίσιμη30+ mΣτο όριο ανίχνευσης

TX Power Level — η ισχύς του πομπού, η οποία αναφέρεται στο διαφημιστικό πακέτο (AD Type 0x0A) και επιτρέπει τη διόρθωση της εκτίμησης. RSSI -70 dBm από συσκευή με TX Power +4 dBm σημαίνει ότι το σήμα εξασθένισε κατά 74 dB. Εάν το TX Power είναι άγνωστο, η ακριβής εκτίμηση απόστασης είναι αδύνατη. Το iBeacon περιλαμβάνει TX Power (1 byte) στη δομή Manufacturer Data για βαθμονόμηση απόστασης.

Εξάρτηση του RSSI από την απόσταση

Το μοντέλο Path Loss (απώλειες διάδοσης) χρησιμοποιείται για εκτίμηση απόστασης βάσει RSSI. Ο βασικός τύπος: RSSI = TX_Power - 10 × n × log10(d), όπου n — συντελεστής εξασθένησης (2,0 για ελεύθερο χώρο, 3,0–4,5 για χώρους με εμπόδια), d — απόσταση σε μέτρα. Στην πράξη, η ακρίβεια εκτίμησης είναι ±2–5 m σε πραγματικές συνθήκες.

Για βαθμονόμηση του μοντέλου, είναι απαραίτητο να μετρηθεί το RSSI σε γνωστή απόσταση (συνήθως 1 m) και να υπολογιστεί η αναφορά TX Power. Στο iBeacon, αυτή η παράμετρος αποθηκεύεται στο πακέτο. Στο Eddystone χρησιμοποιείται παρόμοιος μηχανισμός. Μετά τη βαθμονόμηση, μπορεί να υπολογιστεί η απόσταση: d = 10 ^ ((TX_Power — RSSI) / (10 × n)).

Σύμφωνα με το Apple Core Bluetooth Programming Guide (2024), η ακρίβεια εκτίμησης απόστασης για iBeacon είναι: immediate (<0,5 m) — όταν το RSSI είναι υψηλότερο από την τιμή βαθμονόμησης, near (0,5–3 m) — όταν το RSSI είναι στο εύρος 3–6 dB από την τιμή βαθμονόμησης, far (>3 m) — σε ασθενές σήμα. Κανένα μαθηματικό μοντέλο δεν δίνει ακρίβεια καλύτερη από ±1 m χωρίς πρόσθετη επεξεργασία.

Παράγοντες που επηρεάζουν την ακρίβεια του RSSI

Το RSSI είναι ένας θορυβώδης δείκτης και η ακρίβειά του εξαρτάται από πολλούς παράγοντες. Οι κύριες πηγές σφάλματος: εμπόδια (τοίχοι, έπιπλα, άνθρωποι) εξασθενούν το σήμα κατά 3–15 dB το καθένα, πολυδιαδρομική διάδοση (ανακλάσεις από τοίχους) μπορεί να ενισχύει το σήμα σε ορισμένα σημεία και να το εξασθενεί σε άλλα, προσανατολισμός κεραίας αλλάζει το RSSI κατά 3–10 dB κατά την περιστροφή της συσκευής.

Το ανθρώπινο σώμα είναι ένας από τους ισχυρότερους απορροφητές σήματος BLE. Εάν υπάρχει άτομο μεταξύ του beacon και του smartphone, το RSSI μπορεί να πέσει κατά 10–20 dB. Το νερό στο ανθρώπινο σώμα απορροφά αποτελεσματικά τη ραδιοακτινοβολία στη συχνότητα 2,4 GHz. Επομένως, τα beacon στις πόρτες καταστημάτων μπορεί να εμφανίζουν διαφορετικό RSSI για πελάτες διαφορετικού ύψους και σωματικής διάπλασης.

Πρόσθετοι παράγοντες: παρεμβολές Wi-Fi σε γειτονικά κανάλια μπορεί να μειώσουν το RSSI κατά 3–5 dB, θερμοκρασία του τσιπ BLE επηρεάζει την ακρίβεια μέτρησης RSSI (σε ορισμένα τσιπ απόκλιση έως 1 dB/°C), υποβάθμιση μπαταρίας στο beacon μειώνει το TX Power, οδηγώντας σε χαμηλότερο RSSI στον δέκτη.

Φιλτράρισμα και εξομάλυνση του RSSI

Το ακατέργαστο RSSI δεν είναι κατάλληλο για ακριβείς υπολογισμούς — περιέχει υπερβολικό θόρυβο και ακραίες τιμές. Για τη λήψη σταθερής εκτίμησης απόστασης εφαρμόζονται μέθοδοι φιλτραρίσματος. Η απλούστερη — κινητός μέσος όρος: λαμβάνεται ο αριθμητικός μέσος όρος των τελευταίων N τιμών RSSI. N = 5–10 συνήθως αρκεί για εξομάλυνση βραχυπρόθεσμων διακυμάνσεων.

kotlin
// Φίλτρο Kalman για 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
    }
}

Φίλτρο Kalman — μια πιο προηγμένη μέθοδος που λαμβάνει υπόψη τη δυναμική των αλλαγών RSSI και δίνει μικρότερη καθυστέρηση από τον κινητό μέσο όρο. Για σταθερούς beacon (ακίνητους), ο κινητός μέσος όρος δίνει αποδεκτό αποτέλεσμα. Για κινούμενες συσκευές, το φίλτρο Kalman είναι προτιμότερο καθώς προσαρμόζεται ταχύτερα στις αλλαγές. Επιπλέον, μπορεί να χρησιμοποιηθεί φίλτρο Διάμεσου για απόρριψη ακραίων τιμών.

Λήψη RSSI σε iOS και Android

iOS Core Bluetooth παρέχει RSSI μέσω της ιδιότητας peripheral.rssi (NSNumber) μετά την ολοκλήρωση ανάγνωσης RSSI. Για λήψη RSSI του διαφημιστικού πακέτου, χρησιμοποιήστε το advertisementData[CBAdvertisementDataRSSIKey]. Το iOS επιστρέφει RSSI ως μέση τιμή στα τρία κανάλια. Για συνεχή παρακολούθηση RSSI, καλέστε το readRSSI με μεσοδιάστημα όχι συχνότερο από 1 φορά ανά δευτερόλεπτο.

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 μέσω του callback 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

        // Εφαρμογή φίλτρου Kalman
        val filtered = kalmanFilter.
            filter(rssi.toDouble())

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

Κατά την ανάπτυξη εφαρμογών που χρησιμοποιούν RSSI για εντοπισμό θέσης, λάβετε υπόψη: στο iOS οι τιμές RSSI είναι πιο σταθερές χάρη στη βαθμονόμηση υλικού, στο Android — πιο θορυβώδεις και εξαρτώμενες από τον κατασκευαστή της συσκευής. Για πολυπλατφορμικά έργα, συνιστάται η υλοποίηση φιλτραρίσματος στην πλευρά της εφαρμογής με παραμετροποιήσιμες παραμέτρους για κάθε πλατφόρμα.

Συχνές ερωτήσεις

Μπορεί να προσδιοριστεί με ακρίβεια η απόσταση βάσει RSSI;

Όχι, το RSSI δίνει μόνο κατά προσέγγιση εκτίμηση της απόστασης με ακρίβεια ±2–5 m σε πραγματικές συνθήκες. Για ακριβή εντοπισμό θέσης απαιτείται τριγωνισμός από πολλαπλούς σαρωτές, φίλτρο Kalman και λήψη υπόψη του TX Power του πομπού.

Γιατί αλλάζει το RSSI ακόμη κι όταν η συσκευή δεν κινείται;

Λόγω πολυδιαδρομικής διάδοσης και διακυμάνσεων του ραδιοσήματος. Οι ανακλάσεις από τοίχους και αντικείμενα δημιουργούν παρεμβολές όπου το σήμα άλλοτε ενισχύεται και άλλοτε εξασθενεί. Οι αλλαγές RSSI κατά 5–10 dB σε ακίνητη συσκευή είναι φυσιολογικό φαινόμενο.

Πόσο συχνά μπορεί να διαβαστεί το RSSI στο iOS;

Το iOS συνιστά την κλήση readRSSI όχι συχνότερα από 1 φορά ανά δευτερόλεπτο. Τα πολύ συχνά αιτήματα μπορεί να οδηγήσουν σε απώλεια πακέτων δεδομένων. Για παρακολούθηση RSSI κατά τη σάρωση, χρησιμοποιήστε το CBAdvertisementDataRSSIKey που είναι διαθέσιμο για κάθε διαφημιστικό πακέτο.

Τι είναι το TX Power Level και πώς σχετίζεται με το RSSI;

TX Power Level — η ισχύς του πομπού σε dBm που αναφέρεται στο διαφημιστικό πακέτο. RSSI + TX Power = συνολική εξασθένηση σήματος στη διαδρομή από τον πομπό στον δέκτη. Γνωρίζοντας το TX Power, μπορεί να εκτιμηθεί με μεγαλύτερη ακρίβεια η απόσταση: RSSI - TX Power = Path Loss (απώλειες διαδρομής).

Ποια μέθοδος φιλτραρίσματος RSSI είναι καλύτερη για beacon;

Για σταθερούς beacon — κινητός μέσος όρος με παράθυρο 5–10 τιμών. Για κινούμενες συσκευές — φίλτρο Kalman με μικρό θόρυβο διεργασίας (0,01–0,05). Για απόρριψη ακραίων τιμών, προσθέστε φίλτρο Διάμεσου που αποκόπτει τιμές εκτός 2 τυπικών αποκλίσεων.

Σύνοψη

  • RSSI — δείκτης ισχύος σήματος BLE σε dBm, μετρούμενος στην πλευρά λήψης κατά τη λήψη κάθε πακέτου.
  • Εύρος τιμών: από -30 dBm (εξαιρετικό σήμα) έως -100 dBm (ασθενές σήμα στο όριο ανίχνευσης).
  • Το RSSI επιτρέπει κατά προσέγγιση εκτίμηση απόστασης με ακρίβεια ±2–5 m, αλλά δεν είναι ακριβής αποστασιόμετρο λόγω θορύβου και παρεμβολών.
  • Κύριες πηγές σφάλματος: εμπόδια (τοίχοι, άνθρωποι), πολυδιαδρομική διάδοση, προσανατολισμός κεραίας και παρεμβολές Wi-Fi.
  • Για σταθερή εκτίμηση απόστασης εφαρμόζονται φίλτρο Kalman, κινητός μέσος όρος και φίλτρο Διάμεσου για απόρριψη ακραίων τιμών.
  • Στο iOS το RSSI είναι ο μέσος όρος τριών καναλιών, στο Android — η τιμή του τελευταίου πακέτου, που απαιτεί φιλτράρισμα στην πλευρά της εφαρμογής.
  • Το TX Power Level στο διαφημιστικό πακέτο μαζί με το RSSI δίνει Path Loss — συνολική εξασθένηση σήματος για ακριβέστερη εκτίμηση απόστασης.

Θα αναπτύξουμε μια εφαρμογή για κινητά έτοιμη για χρήση

Η IT Sectr δημιουργεί εφαρμογές iOS και Android για νεοφυείς επιχειρήσεις και επιχειρήσεις από το 2017. Θα σας συμβουλεύσουμε και θα προτείνουμε την καλύτερη λύση.

Συζήτηση έργου

Διαβάστε επίσης