BLE에서 RSSI — 신호 지표 및 거리 추정

저자: 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는 거리 추정 및 신호 레벨별 장치 필터링에 사용되지만 부정확한 지표입니다: 장애물, 다중 경로 전파 및 안테나 유형의 영향을 받습니다. 정확한 위치 측정을 위해 삼각 측량 및 Kalman 필터링이 사용됩니다.

핵심 요점

  • RSSI는 패킷 수신 시 수신 측에서 측정된 dBm 단위의 BLE 신호 전력 레벨입니다.
  • RSSI 범위: -30 dBm(매우 강한 신호)에서 -100 dBm(감지 한계)까지.
  • RSSI는 Path Loss 모델을 통한 거리 추정에 사용되지만 실제 조건에서 정확도는 ±2–5m입니다.
  • RSSI에 영향을 미치는 요소: 장애물(벽, 사람), 다중 경로 전파 및 안테나 방향.
  • 정확도를 개선하기 위해 Kalman 필터링, 이동 평균 및 여러 스캐너의 삼각 측량이 사용됩니다.

BLE에서 RSSI란?

RSSI(Received Signal Strength Indicator)는 패킷 수신 시 BLE 수신기가 수신한 무선 신호 강도의 측정값입니다. BLE에서 RSSI는 각 광고 패킷과 연결 후 각 데이터 패킷에 대해 측정됩니다. RSSI는 로그 스케일로, 1dBm의 각 단계는 신호 전력의 약 1.26배 변화에 해당합니다.

RSSI는 하드웨어 종속 지표입니다: 다른 BLE 칩(nRF, TI, Dialog, Broadcom)과 다른 안테나는 동일한 신호에 대해 다른 RSSI 값을 표시할 수 있습니다. 따라서 다른 장치 간의 RSSI 비교는 올바르지 않습니다. 동일한 OS를 사용하는 두 대의 동일한 스마트폰도 동일한 비콘에 대해 2–5dBm의 차이를 보일 수 있습니다.

광고 패킷에서 RSSI는 세 채널(37, 38, 39) 각각에 대해 측정됩니다. 주파수 간섭으로 인해 채널 간 값이 3–10dBm까지 다를 수 있습니다. 최신 BLE 스택은 모든 채널의 평균 RSSI 또는 각 패킷의 개별 RSSI를 보고합니다. iOS Core Bluetooth는 평균 RSSI를 제공하고 Android는 마지막 패킷의 RSSI를 제공합니다.

RSSI 값 범위

BLE의 일반적인 RSSI 범위는 -30dBm에서 -100dBm까지입니다. 이 범위를 벗어나는 값은 극히 드뭅니다: -20dBm은 장치가 스캐너 안테나에 물리적으로 닿고 있음을 의미하고 -105dBm은 신호가 완전히 없음을 의미합니다. 칩 제조업체는 범위를 제한할 수 있습니다: 예를 들어 nRF52832는 -40에서 -105dBm까지의 RSSI를 보고합니다.

RSSI(dBm)신호 품질대략적인 거리권장 사항
-30 – -50우수0–1m장치가 가까이 있음
-51 – -70좋음1–5m방 내부
-71 – -85보통5–15m비콘에 허용 가능
-86 – -95약함15–30m신뢰할 수 없는 연결
-95 미만심각30m 이상감지 한계

TX Power Level은 광고 패킷(AD Type 0x0A)에 표시된 송신기 전력으로 추정치를 조정할 수 있게 합니다. TX Power +4dBm 장치의 RSSI -70dBm은 신호가 74dB 감쇠되었음을 의미합니다. TX Power를 모르면 정확한 거리 추정이 불가능합니다. iBeacon은 거리 보정을 위해 Manufacturer Data 구조에 TX Power(1바이트)를 포함합니다.

RSSI와 거리의 관계

Path Loss 모델(전파 손실)은 RSSI로부터 거리를 추정하는 데 사용됩니다. 기본 공식: RSSI = TX_Power - 10 × n × log10(d). 여기서 n은 감쇠 계수(자유 공간 2.0, 장애물이 있는 실내 환경 3.0–4.5)이고 d는 미터 단위 거리입니다. 실제로 실전 조건에서 추정 정확도는 ±2–5m입니다.

모델을 보정하려면 알려진 거리(보통 1m)에서 RSSI를 측정하고 TX Power 기준값을 계산해야 합니다. iBeacon에서는 이 매개변수가 패킷에 저장됩니다. Eddystone은 유사한 메커니즘을 사용합니다. 보정 후 거리를 계산할 수 있습니다: d = 10 ^ ((TX_Power — RSSI) / (10 × n)).

Apple Core Bluetooth Programming Guide(2024)에 따르면 iBeacon의 거리 추정 정확도는 다음과 같습니다: immediate(0.5m 미만) — RSSI가 보정값보다 높은 경우, near(0.5–3m) — RSSI가 보정값의 3–6dB 이내인 경우, far(3m 초과) — 약한 신호의 경우. 추가 처리 없이 어떤 수학적 모델도 ±1m보다 나은 정확도를 제공하지 않습니다.

RSSI 정확도에 영향을 미치는 요소

RSSI는 노이즈가 많은 지표이며 정확도는 여러 요소에 따라 달라집니다. 오류의 주요 원인: 장애물(벽, 가구, 사람)은 각각 신호를 3–15dB 감쇠시키고, 다중 경로 전파(벽 반사)는 일부 지점에서 신호를 증폭시키고 다른 지점에서 감쇠시킬 수 있으며, 안테나 방향은 장치를 회전할 때 RSSI를 3–10dB 변화시킵니다.

인체는 BLE 신호의 가장 강력한 흡수체 중 하나입니다. 비콘과 스마트폰 사이에 사람이 있으면 RSSI가 10–20dB까지 떨어질 수 있습니다. 인체의 수분은 2.4GHz 주파수의 무선 방사를 효과적으로 흡수합니다. 따라서 매장 문에 있는 비콘은 키와 체격이 다른 고객에게 다른 RSSI를 표시할 수 있습니다.

추가 요소: 인접 채널의 Wi-Fi 간섭은 RSSI를 3–5dB 감소시킬 수 있으며, BLE 칩의 온도는 RSSI 측정 정확도에 영향을 미치고(일부 칩은 최대 1dB/°C 드리프트), 비콘의 배터리 성능 저하는 TX Power를 감소시켜 수신기에서 RSSI가 낮아집니다.

RSSI 필터링 및 평활화

원시 RSSI는 정확한 계산에 부적합합니다 — 노이즈와 이상값이 너무 많습니다. 안정적인 거리 추정을 위해 필터링 방법이 사용됩니다. 가장 간단한 것은 이동 평균입니다: 최근 N개의 RSSI 값의 산술 평균을 취합니다. 단기 변동을 평활화하려면 보통 N = 5–10이면 충분합니다.

kotlin
// 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 및 Android에서 RSSI 얻기

iOS Core Bluetooth는 RSSI 읽기 완료 후 peripheral.rssi 속성(NSNumber)을 통해 RSSI를 제공합니다. 광고 패킷 RSSI를 얻으려면 advertisementData[CBAdvertisementDataRSSIKey]를 사용하세요. iOS는 세 채널의 평균값으로 RSSI를 반환합니다. 지속적인 RSSI 모니터링을 위해 1초에 한 번 이상의 간격으로 readRSSI를 호출하세요.

swift
// 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는 광고 패킷에 포함된 경우 result.getScanRecord().getTxPowerLevel()을 통해 TX Power Level도 제공합니다.

kotlin
// 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로 거리를 정확하게 측정할 수 있나요?

아니요, RSSI는 실제 조건에서 ±2–5m 정확도의 대략적인 추정만 제공합니다. 정확한 위치 측정을 위해서는 여러 스캐너의 삼각 측량, Kalman 필터링 및 TX Power 고려가 필요합니다.

장치가 움직이지 않는데도 RSSI가 변하는 이유는 무엇인가요?

다중 경로 전파 및 무선 신호 변동 때문입니다. 벽과 물체의 반사가 간섭을 만들어 신호가 번갈아 강해졌다 약해집니다. 정지 장치에서 5–10dB의 RSSI 변화는 정상입니다.

iOS에서 RSSI를 얼마나 자주 읽을 수 있나요?

iOS는 readRSSI를 초당 1회 이상 호출하지 않도록 권장합니다. 너무 빈번한 요청은 데이터 패킷 손실로 이어질 수 있습니다. 스캔 중 RSSI 모니터링에는 각 광고 패킷에 대해 사용 가능한 CBAdvertisementDataRSSIKey를 사용하세요.

TX Power Level이란 무엇이며 RSSI와 어떤 관련이 있나요?

TX Power Level은 광고 패킷에 표시된 dBm 단위의 송신기 전력입니다. RSSI + TX Power = 송신기에서 수신기까지의 총 신호 감쇠입니다. TX Power를 알면 더 정확한 거리 추정이 가능합니다: RSSI - TX Power = Path Loss(경로 손실).

비콘에 가장 적합한 RSSI 필터링 방법은 무엇인가요?

고정 비콘의 경우 — 5–10개 값의 창을 가진 이동 평균. 움직이는 장치의 경우 — 낮은 프로세스 노이즈(0.01–0.05)의 Kalman 필터. 이상값을 제거하려면 2 표준 편차를 초과하는 값을 차단하는 중앙값 필터를 추가하세요.

요약

  • RSSI는 각 패킷 수신 시 수신 측에서 측정된 dBm 단위의 BLE 신호 전력 표시기입니다.
  • 값 범위: -30 dBm(우수한 신호)에서 -100 dBm(감지 한계의 약한 신호)까지.
  • RSSI는 ±2–5m 정확도의 대략적인 거리 추정을 제공하지만 노이즈와 간섭으로 인해 정확한 거리 측정기가 아닙니다.
  • 오류의 주요 원인: 장애물(벽, 사람), 다중 경로 전파, 안테나 방향 및 Wi-Fi 간섭.
  • 안정적인 거리 추정을 위해 Kalman 필터링, 이동 평균 및 이상값 제거를 위한 중앙값 필터가 사용됩니다.
  • iOS에서 RSSI는 세 채널의 평균이고 Android에서는 마지막 패킷 값이므로 애플리케이션 측에서 필터링이 필요합니다.
  • 광고 패킷의 TX Power Level은 RSSI와 함께 더 정확한 거리 추정을 위한 총 신호 감쇠인 Path Loss를 제공합니다.

턴키 방식의 모바일 애플리케이션을 개발해 드립니다

IT Sectr는 2017년부터 스타트업과 기업을 위한 iOS 및 Android 애플리케이션을 만듭니다. 저희가 상담해 드리고 최적의 솔루션을 제안하겠습니다.

프로젝트 논의

더 읽어보기