RSSI en BLE: indicador de señal y estimación de distancia

Autor: IT Sectr Publicado: 2026-07-16 Tiempo de lectura: 10 min

RSSI (Received Signal Strength Indicator) es una métrica numérica que mide la potencia de la señal de un dispositivo BLE en dBm en el lado receptor. Los valores de RSSI van desde -30 dBm (dispositivo cercano) hasta -100 dBm (en el límite de detección). Bluetooth Core Specification 5.4 (2023) define RSSI como un parámetro opcional disponible en cada paquete de publicidad y paquete de datos. RSSI se utiliza para la estimación de distancia y el filtrado de dispositivos por nivel de señal, pero es un indicador impreciso: le afectan obstáculos, propagación multitrayecto y tipo de antena. Para un posicionamiento preciso se utilizan triangulación y filtrado Kalman.

Puntos clave

  • RSSI es el nivel de potencia de la señal BLE en dBm medido en el lado receptor al recibir un paquete.
  • Rango de RSSI: desde -30 dBm (señal muy fuerte) hasta -100 dBm (límite de detección).
  • RSSI se utiliza para la estimación de distancia mediante el modelo Path Loss, pero la precisión es de ±2–5 m en condiciones reales.
  • RSSI se ve afectado por: obstáculos (paredes, personas), propagación multitrayecto y orientación de la antena.
  • Para mejorar la precisión se utilizan filtrado Kalman, media móvil y triangulación desde múltiples escáneres.

¿Qué es RSSI en BLE?

RSSI (Received Signal Strength Indicator) es una medición de la potencia de la señal de radio recibida por el receptor BLE en el momento de recibir un paquete. En BLE, RSSI se mide para cada paquete de publicidad y cada paquete de datos después de la conexión. RSSI es una escala logarítmica donde cada paso de 1 dBm corresponde aproximadamente a un cambio de 1.26 veces en la potencia de la señal.

RSSI es un indicador dependiente del hardware: diferentes chips BLE (nRF, TI, Dialog, Broadcom) y diferentes antenas pueden mostrar distintos valores de RSSI para la misma señal. Por lo tanto, comparar RSSI entre diferentes dispositivos es incorrecto. Incluso dos smartphones idénticos con el mismo SO pueden mostrar una diferencia de 2–5 dBm para el mismo beacon.

En un paquete de publicidad, RSSI se mide para cada uno de los tres canales (37, 38, 39). Los valores pueden diferir en 3–10 dBm entre canales debido a interferencias de frecuencia. Las pilas BLE modernas informan RSSI promediado en todos los canales o RSSI para cada paquete individualmente. iOS Core Bluetooth proporciona RSSI promedio, Android proporciona RSSI del último paquete.

Rango de valores de RSSI

El rango típico de RSSI para BLE es de -30 dBm a -100 dBm. Los valores fuera de este rango son extremadamente raros: -20 dBm significa que el dispositivo está tocando literalmente la antena del escáner, mientras que -105 dBm significa ausencia total de señal. Los fabricantes de chips pueden limitar el rango: por ejemplo, nRF52832 informa RSSI de -40 a -105 dBm.

RSSI (dBm)Calidad de señalDistancia aproximadaRecomendación
-30 – -50Excelente0–1 mDispositivo cercano
-51 – -70Buena1–5 mDentro de la habitación
-71 – -85Media5–15 mAceptable para beacons
-86 – -95Débil15–30 mConexión no fiable
Por debajo de -95Crítica30+ mEn el límite de detección

TX Power Level es la potencia del transmisor que se indica en el paquete de publicidad (AD Type 0x0A) y permite ajustar la estimación. RSSI -70 dBm de un dispositivo con TX Power +4 dBm significa que la señal se ha atenuado en 74 dB. Si se desconoce TX Power, la estimación precisa de distancia es imposible. iBeacon incluye TX Power (1 byte) en la estructura Manufacturer Data para la calibración de distancia.

Relación RSSI-distancia

El modelo Path Loss (pérdida de propagación) se utiliza para estimar la distancia a partir de RSSI. La fórmula básica: RSSI = TX_Power - 10 × n × log10(d), donde n es el coeficiente de atenuación (2.0 para espacio libre, 3.0–4.5 para interiores con obstáculos) y d es la distancia en metros. En la práctica, la precisión de la estimación es de ±2–5 m en condiciones reales.

Para calibrar el modelo, es necesario medir RSSI a una distancia conocida (generalmente 1 m) y calcular la referencia de TX Power. En iBeacon, este parámetro se almacena en el paquete. Eddystone utiliza un mecanismo similar. Después de la calibración, se puede calcular la distancia: d = 10 ^ ((TX_Power — RSSI) / (10 × n)).

Según Apple Core Bluetooth Programming Guide (2024), la precisión de la estimación de distancia para iBeacon es: immediate (<0.5 m) — cuando RSSI está por encima del valor de calibración, near (0.5–3 m) — cuando RSSI está dentro de 3–6 dB del valor de calibración, far (>3 m) — con señal débil. Ningún modelo matemático proporciona una precisión superior a ±1 m sin procesamiento adicional.

Factores que afectan la precisión de RSSI

RSSI es un indicador ruidoso, y su precisión depende de muchos factores. Las principales fuentes de error: los obstáculos (paredes, muebles, personas) atenúan la señal entre 3–15 dB cada uno, la propagación multitrayecto (reflexiones en las paredes) puede amplificar la señal en algunos puntos y atenuarla en otros, la orientación de la antena cambia RSSI entre 3–10 dB al girar el dispositivo.

El cuerpo humano es uno de los absorbentes más fuertes de la señal BLE. Si hay una persona entre el beacon y el smartphone, RSSI puede caer entre 10–20 dB. El agua en el cuerpo humano absorbe eficazmente la radiación de radio a 2.4 GHz. Por lo tanto, los beacons en las puertas de las tiendas pueden mostrar diferente RSSI para clientes de diferentes alturas y constituciones.

Factores adicionales: la interferencia Wi-Fi en canales adyacentes puede reducir RSSI entre 3–5 dB, la temperatura del chip BLE afecta la precisión de la medición de RSSI (algunos chips se desvían hasta 1 dB/°C), la degradación de la batería en el beacon reduce TX Power, lo que lleva a un RSSI más bajo en el receptor.

Filtrado y suavizado de RSSI

RSSI bruto no es adecuado para cálculos precisos: contiene demasiado ruido y valores atípicos. Se utilizan métodos de filtrado para obtener una estimación de distancia estable. El más simple es la media móvil: se toma la media aritmética de los últimos N valores de RSSI. Generalmente N = 5–10 es suficiente para suavizar fluctuaciones a corto plazo.

kotlin
// Filtro Kalman para 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 {
        // Predecir
        errorCovariance += processNoise

        // Actualizar
        val kalmanGain =
            errorCovariance /
            (errorCovariance + measurementNoise)

        estimate = estimate +
            kalmanGain * (rawRssi - estimate)

        errorCovariance =
            (1.0 - kalmanGain) * errorCovariance

        return estimate
    }
}

El filtro Kalman es un método más avanzado que tiene en cuenta la dinámica del cambio de RSSI y proporciona menos retraso que la media móvil. Para beacons estacionarios (fijos), la media móvil da resultados aceptables. Para dispositivos en movimiento, el filtro Kalman es preferible porque se adapta más rápido a los cambios. Adicionalmente, se puede usar un filtro Mediana para descartar valores atípicos.

Obtener RSSI en iOS y Android

iOS Core Bluetooth proporciona RSSI a través de la propiedad peripheral.rssi (NSNumber) después de completar la lectura de RSSI. Para obtener el RSSI del paquete de publicidad, use advertisementData[CBAdvertisementDataRSSIKey]. iOS devuelve RSSI como un valor promedio en los tres canales. Para monitoreo continuo de RSSI, llame a readRSSI con intervalos de no más de una vez por segundo.

swift
// Obtener RSSI en iOS
func centralManager(
    _ central: CBCentralManager,
    didDiscover peripheral: CBPeripheral,
    advertisementData: [String: Any],
    rssi RSSI: NSNumber
) {
    let signalStrength = Int(truncating: RSSI)

    // Filtrar señales débiles
    guard signalStrength > -90 else {
        return
    }

    print("Dispositivo " +
          "\(peripheral.name ?? "unknown") " +
          "RSSI: \(signalStrength) dBm")
}

Android proporciona RSSI a través del callback onScanResult: result.getRssi(). El valor RSSI es el RSSI del último paquete de publicidad (no un promedio). Para obtener lecturas estables, es necesario acumular varios valores y aplicar filtrado. Android también proporciona TX Power Level a través de result.getScanRecord().getTxPowerLevel(), si se transmite en el paquete de publicidad.

kotlin
// Obtener RSSI en Android
private val scanCallback = object : ScanCallback() {

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

        // Aplicar filtro Kalman
        val filtered = kalmanFilter.
            filter(rssi.toDouble())

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

Al desarrollar aplicaciones que usan RSSI para posicionamiento, tenga en cuenta: en iOS los valores de RSSI son más estables gracias a la calibración de hardware; en Android son más ruidosos y dependen del fabricante del dispositivo. Para proyectos multiplataforma, se recomienda implementar filtrado en el lado de la aplicación con parámetros configurables para cada plataforma.

Preguntas frecuentes

¿Se puede determinar la distancia con precisión mediante RSSI?

No, RSSI proporciona solo una estimación aproximada de la distancia con una precisión de ±2–5 m en condiciones reales. Para un posicionamiento preciso se requiere triangulación desde múltiples escáneres, filtrado Kalman y consideración de TX Power.

¿Por qué cambia RSSI incluso cuando el dispositivo no se mueve?

Debido a la propagación multitrayecto y las fluctuaciones de la señal de radio. Los reflejos en paredes y objetos crean interferencias donde la señal se fortalece y debilita alternativamente. Los cambios de RSSI de 5–10 dB en un dispositivo estacionario son normales.

¿Con qué frecuencia se puede leer RSSI en iOS?

iOS recomienda llamar a readRSSI no más de una vez por segundo. Las solicitudes demasiado frecuentes pueden provocar la pérdida de paquetes de datos. Para monitorear RSSI durante el escaneo, use CBAdvertisementDataRSSIKey, que está disponible para cada paquete de publicidad.

¿Qué es TX Power Level y cómo se relaciona con RSSI?

TX Power Level es la potencia del transmisor en dBm indicada en el paquete de publicidad. RSSI + TX Power = atenuación total de la señal desde el transmisor hasta el receptor. Conociendo TX Power se puede estimar la distancia con mayor precisión: RSSI - TX Power = Path Loss (pérdida de trayecto).

¿Qué método de filtrado de RSSI es mejor para beacons?

Para beacons estacionarios — media móvil con una ventana de 5–10 valores. Para dispositivos en movimiento — filtro Kalman con bajo ruido de proceso (0.01–0.05). Para descartar valores atípicos, agregue un filtro Mediana que elimine los valores fuera de 2 desviaciones estándar.

Resumen

  • RSSI es un indicador de potencia de señal BLE en dBm medido en el lado receptor al recibir cada paquete.
  • Rango de valores: desde -30 dBm (señal excelente) hasta -100 dBm (señal débil en el límite de detección).
  • RSSI proporciona una estimación aproximada de distancia con precisión de ±2–5 m, pero no es un telémetro preciso debido al ruido y las interferencias.
  • Principales fuentes de error: obstáculos (paredes, personas), propagación multitrayecto, orientación de la antena e interferencia Wi-Fi.
  • Para una estimación estable de distancia se utilizan filtrado Kalman, media móvil y filtro Mediana para eliminar valores atípicos.
  • En iOS, RSSI es el promedio de los tres canales; en Android, es el valor del último paquete, lo que requiere filtrado en el lado de la aplicación.
  • TX Power Level en el paquete de publicidad junto con RSSI proporciona Path Loss — la atenuación total de la señal para una estimación de distancia más precisa.

Desarrollaremos una aplicación móvil llave en mano

IT Sectr crea aplicaciones para iOS y Android para startups y empresas desde 2017. Le asesoraremos y le propondremos la mejor solución.

Discutir el proyecto

Lea también