Chapter 11

위치 찾기: RSSI에서 채널 사운딩까지

소파 틈에 빠진 이어폰을 찾으려고 휴대폰의 “찾기” 화면을 켜면 “가까워지는 중… 30 cm”라고 알려 준다. 자동차는 운전자가 다가오면 문을 열고, 차 안인지 밖인지까지 구분한다. 대형 마트의 앱은 지금 내가 어느 진열대 앞인지 안다. 블루투스는 원래 데이터를 나르는 기술이지만, 전파 자체가 거리와 방향의 단서를 품고 있다. 이 장에서는 그 단서를 쓰는 세 단계, 즉 세기(RSSI), 방향(AoA·AoD), 그리고 6.0의 위상과 시간(채널 사운딩)을 차례로 다룬다. 단계가 올라갈수록 정확해지고, 그만큼 하드웨어와 계산이 필요해진다.

세기로 짐작하기: RSSI 거리 추정

가장 간단한 방법은 2장의 링크 버짓을 거꾸로 푸는 것이다. 1 m에서의 수신 세기 P1m을 알고 경로 손실 지수 n을 가정하면, 받은 RSSI에서 거리를 계산할 수 있다.

d ≈ 10(P1m − RSSI) / (10 · n)   m
예: P1m = −59 dBm, n = 2, RSSI = −71 dBm이면 d = 1012/20 ≈ 4 m. 같은 RSSI라도 n = 3이라 가정하면 2.5 m가 된다. 환경을 모르면 n부터 틀린다.

문제는 오차다. 2장에서 본 대로 RSSI 자체의 정확도 권장이 ±6 dB이고, 다중 경로 페이딩과 몸이 가리는 정도가 패킷마다 수~수십 dB를 흔든다. 식의 지수 때문에 dB 오차는 거리의 배율 오차가 된다. 6 dB 오차는 n = 2에서 거리 2배, n = 3에서 1.6배다. 1 m에서 2배 오차는 50 cm지만 10 m에서는 10 m다. 그래서 RSSI는 “1 m 안이다 / 근처다 / 멀다” 같은 구역 판단에 쓰고, 여러 번 평균하거나 여러 수신기의 값을 합쳐 쓴다.

목소리 크기로 거리 짐작하기

카페에서 목소리가 크게 들리면 가까이 있다고 짐작한다. 하지만 원래 목소리가 큰 사람일 수도 있고, 기둥 뒤에 있어서 작게 들릴 수도 있다. 가까울 때는 조금만 다가가도 크게 바뀌어 짐작이 쉽지만, 멀어질수록 몇 걸음 차이가 거의 구별되지 않는다. RSSI 거리 추정의 한계가 이것이다.

SIMULATOR

RSSI로 거리 재기: 왜 멀수록 엉망이 될까

추정에 쓴 경로 손실 지수
추정 거리 (중앙값)—
80% 구간—
실제 거리 대비 오차 폭—
점 하나가 추정 한 번이다(가로 = 실제 거리, 세로 = 추정 거리, 로그 눈금). 대각선에 가까울수록 정확하다. 해볼 것: ① 실제 거리 1 m와 15 m에서 점이 흩어진 폭을 비교하자. 로그 눈금에서 폭이 같다는 것은 실제 거리에 비례해 오차가 커진다는 뜻이다. ② 평균 개수를 10으로 늘리면 흩어짐이 약 1/3로 준다(√10). 대신 판단이 늦어진다. ③ 추정에 n = 2를 쓰면(실제 2.7) 먼 거리를 체계적으로 과대 추정한다. 모델: RSSI = P1m − 10·2.7·log₁₀(d) + N(0, σ²), P1m = −59 dBm. 평균은 dBm에서 냈다.

비콘: 광고에 기준 세기 싣기

비콘(beacon)은 연결 없이 짧은 신원 정보를 광고로 계속 내보내는 기기다(5장의 브로드캐스터). 대표적인 형식은 회사들이 정한 것으로, 예를 들어 Apple의 iBeacon은 제조사 데이터에 16바이트 UUID와 두 개의 2바이트 번호(major, minor), 그리고 1 m에서의 기준 세기(1바이트)를 담는다. 받는 앱은 이 기준 세기와 RSSI를 위 식에 넣어 가깝다/멀다를 판단한다. 매장 진열대, 박물관 전시물, 실내 위치 표시에 쓰였다. 분실물 태그 네트워크는 반대로, 태그가 비콘처럼 광고하면 지나가는 수많은 휴대폰이 그것을 듣고 자기 GPS 위치를 붙여 주인에게 (암호화해서) 알려 주는 방식이다. 이 형식들은 Core 밖이며, 5장의 AD 구조(제조사 데이터 0xFF) 안에 들어간다.

RSSI 정확도 ±6 dB: [Vol 6] Part A §4.8 · 광고 데이터 형식: [Vol 3] Part C §11 · 송신 전력 AD 구조와 확장 광고의 TxPower 필드: [Vol 6] Part B §2.3.4.7

방향 재기: 도래각(AoA)과 발사각(AoD)

5.1은 세기 대신 위상을 쓰는 방향 찾기를 추가했다. 전파가 비스듬히 들어오면, 나란히 놓인 두 안테나 중 먼 쪽에 조금 늦게 도착한다. 그 늦음은 위상 차이로 나타난다.

Δφ = 2π · d · sin θ / λ   ⇒   θ = arcsin(Δφ · λ / (2π · d))
d = 안테나 간격, λ ≈ 12.3 cm(2.44 GHz), θ = 정면에서 잰 각도. d가 λ/2(약 6.1 cm)보다 크면 서로 다른 각도가 같은 Δφ(2π 차이)를 만들어 방향이 모호해진다. 그래서 배열 안테나는 보통 반 파장 이하 간격으로 놓는다.

위상을 재려면 신호가 변조 없이 일정해야 한다. GFSK 데이터는 주파수가 계속 바뀌므로 위상을 비교하기 어렵다. 그래서 5.1은 패킷 끝에 일정 톤 확장(CTE, Constant Tone Extension)을 붙인다. 화이트닝하지 않은 1만 계속 보내, 일정한 주파수(+250 kHz 편이)의 순수한 톤이 된다. CTE는 16~160 µs이고, 처음 4 µs는 보호 구간, 다음 8 µs는 기준 구간, 그 뒤로 1 µs 또는 2 µs의 전환 슬롯과 표본 슬롯이 번갈아 온다. 수신기는 표본 슬롯마다 다른 안테나로 바꿔 가며 IQ 표본(위상과 세기)을 찍는다.

CTE 16~160 µs, 보호 4 µs, 기준 8 µs, 1 µs·2 µs 슬롯, 화이트닝 없음: [Vol 6] Part B §2.5.1 · AoA/AoD 안테나 전환: [Vol 6] Part A §5.1 · CTE 요청 절차: [Vol 6] Part B §5.1.12

PDU CRC 보호4 µs 기준8 µs 전환 표본 전환 표본 전환 표본 … 전환 표본 CTE 16~160 µs: 화이트닝 없이 1만 보내는 한 음 슬롯은 1 µs 또는 2 µs 안테나를 바꾸고(전환) → 그 안테나로 IQ 표본을 찍는다(표본) AoA: 받는 쪽이 안테나를 바꾼다 · AoD: 보내는 쪽이 바꾼다 시간 →
그림 11-1. 일정 톤 확장(CTE)의 구조. 패킷의 CRC 뒤에 변조 없는 한 음을 16~160 µs 붙인다. 처음 4 µs는 보호 구간, 다음 8 µs는 기준 구간이고, 그 뒤로 전환 슬롯과 표본 슬롯이 번갈아 온다. 안테나를 바꿔 가며 찍은 IQ 표본들의 위상 차이에서 방향을 계산한다.
SIMULATOR

두 안테나의 위상 차이로 방향 재기

위상 차이 Δφ—
추정 각도 (20번)—
같은 Δφ를 내는 다른 각도—
위에서 내려다본 그림. 아래 가운데 두 점이 안테나, 굵은 화살표가 실제 신호 방향, 가는 선들이 잡음이 섞인 위상으로 20번 추정한 방향이다. 해볼 것: ① 간격을 6 cm 이하로 두고 각도를 바꿔 보자. 추정이 실제를 잘 따른다. ② 간격을 10 cm 이상으로 늘리면 “같은 Δφ를 내는 다른 각도”가 나타나 방향이 둘 이상으로 갈린다. ③ 간격이 너무 작으면(2 cm) 같은 위상 잡음이 큰 각도 오차가 된다. 그래서 안테나를 여러 개(4~16개) 늘어놓고 모든 쌍을 함께 푼다. 모델: 평면파, 다중 경로 없음, 위상 잡음은 가우시안(표준편차 = 입력 도 값).

6.0의 채널 사운딩: 위상 기울기와 왕복 시간

채널 사운딩(Channel Sounding, CS)은 연결된 두 기기가 거리를 재기 위해 만든 전용 절차다. 한쪽(개시자)과 다른 쪽(반사자)이 짧은 시간 안에 여러 주파수에서 신호를 주고받으며 두 가지를 잰다.

x = −(dφ / df) · c / (4π)     dwrap = c / (2 · Δf) = 150 m (Δf = 1 MHz)
위상은 2π마다 되돌아오므로, 1 MHz 간격으로 잰 이웃 채널 사이의 위상 변화가 2π를 넘으면 구분할 수 없다. 그래서 거리는 150 m마다 같은 값으로 보인다. 사양은 이 모호성을 RTT로 풀 수 있다고 적는다. 실제로는 여러 반사 경로가 섞이므로, 측정한 채널 응답을 역푸리에 변환해 가장 먼저 도착한 경로를 찾는 방법을 쓴다.

CS는 광고 채널을 제외한 1 MHz 간격 72개 채널(2402 + k MHz, k = 2~22, 26~76)을 쓴다. 한 절차는 이벤트 → 서브이벤트 → 스텝으로 나뉘고, 스텝은 네 모드가 있다. 모드 0은 두 기기의 주파수·시간을 맞추는 보정, 모드 1은 RTT, 모드 2는 PBR 톤, 모드 3은 둘 다다. 사양은 거리 계산 알고리즘 자체는 정하지 않고, 정확한 측정값(IQ, 도착·출발 시각)을 만드는 규칙을 정한다.

CS 개요와 모드 0~3, PBR 거리 식과 dwrap = 150 m: [Vol 1] Part A §9.1~§9.3 · 72개 CS 채널: [Vol 6] Part A §2 · CS 패킷·RTT·공격 탐지: [Vol 6] Part H · 6.0 새 기능: [Vol 1] Part C §14.1

SIMULATOR

위상 기울기로 거리 재기 (PBR + RTT)

위상 기울기 추정—
첫 경로 추정 (역변환)—
최종 추정—
위: 72개 채널에서 잰 왕복 위상(−π~π로 접힌 값). 아래: 그 위상으로 만든 거리 프로필(역푸리에 변환의 크기, 0~150 m). 해볼 것: ① 반사파를 0으로 두고 거리를 바꾸면 위의 점들이 일정한 기울기로 감기고, 아래 봉우리가 실제 거리에 선다. ② 거리를 150 m 넘게 하면 RTT를 끈 상태에서 추정이 0 m 근처로 되돌아간다(모호성). ③ 반사파를 키우면 기울기 직선이 구불구불해지고 단순 기울기 추정은 틀리기 시작한다. 거리 프로필에서는 첫 봉우리(직접 경로)를 골라 버티는 것을 보자. 모델: 직접 경로 + 반사 경로 하나, 왕복 위상 φ = −4π·x·f/c, 가우시안 위상 잡음. 실제 칩은 주파수 오프셋 보정, 안테나 경로 여러 개 등을 함께 처리한다.
예측해 보기

자동차 디지털 키를 노린 “중계 공격”은 집 안의 키(휴대폰)와 차 옆 공격자 사이에서 신호를 그대로 받아 넘긴다. RSSI만 보는 차와 채널 사운딩의 RTT를 보는 차 중 어느 쪽이 속을까?

중계기는 신호를 증폭해 세기를 마음대로 만들 수 있지만, 빛보다 빨리 전달할 수는 없다.

세기는 증폭기로 꾸밀 수 있지만, 중계는 언제나 시간을 더한다. 그래서 RTT는 “적어도 이만큼은 멀다”는 하한을 보장한다(거리 한정). 공격자는 대신 신호의 일부를 미리 추측해 보내거나 진폭을 조작하는 더 정교한 공격을 시도하는데, 6.0은 위상 기반 공격 탐지를, 6.2는 진폭 기반 공격 대응(Amplitude-based Attack Resilience)을 추가했다.

CS 공격 탐지 요구(위상 기반, 진폭 기반 DFT 탐지): [Vol 6] Part H §3.5 · 6.2의 Channel Sounding Amplitude-based Attack Resilience: [Vol 1] Part C §16.1

6.3에서 더해진 것

이 책의 기준 판인 6.3은 채널 사운딩에 두 가지를 더했다. 첫째는 위상 보정값 인라인 전송(Inline PCT Transfer, IPT)이다. 위상 방식에서는 시작기(initiator)와 반사기(reflector)가 각자 받은 톤의 위상을 재서 I·Q 값(PCT)으로 남긴다. IPT를 켜면 반사기는 자기가 되돌려 보내는 톤의 위상을 미리 맞춰서, 자기가 보고하는 PCT의 허수부(Q)가 0이 되고 실수부(I)에는 신호 크기만 남게 한다. 반사기가 잰 위상을 따로 넘기는 대신 되돌려 보내는 톤에 실어(인라인으로) 넘기는 셈이다. 이때 안테나 전환 시간은 반사기가 알려 준 IPT용 값(T_SW_IPT)까지 고려해 정한다.

둘째는 PHY별 RTT 정확도다. 왕복 시간(RTT)용 패킷은 필수인 LE 1M 말고도 선택 기능인 LE 2M·LE 2M 2BT로 보낼 수 있는데, 6.3부터는 2M 계열 PHY의 RTT 정확도 요구를 1M과 따로 정해 능력 교환 때 알릴 수 있다. 두 기능 모두 양쪽 칩이 지원해야 쓰는 선택 기능이다.

IPT: [Vol 6] Part A §6.5 · 반사기의 톤 위상과 PCT: [Vol 6] Part H §4.6 · IPT의 안테나 전환 시간: Part H §4.3.3 · 능력 교환(IPT 비트, RTT_PHY 비트, 2M용 RTT 필드): [Vol 6] Part B §2.4.2.44 · 6.3 새 기능 목록: [Vol 1] Part C §17.1

세 방법 비교

방법재는 것정확도 감각필요한 것쓰임
RSSI세기 → 거리구역 수준 (수 m, 거리에 비례해 나빠짐)모든 칩근접 알림, 비콘, 분실물 네트워크
AoA / AoD (5.1)위상 차이 → 방향각도 수 도 (여러 수신기로 위치 계산)안테나 배열, CTE 지원창고·병원 자산 추적, 실내 길 찾기
채널 사운딩 (6.0)위상 기울기·왕복 시간 → 거리수십 cm 이하를 노림CS 지원 칩 양쪽, 보정디지털 키, 정밀 분실물 찾기
(참고) UWBns 펄스 왕복 시간수~10 cm별도 UWB 칩디지털 키, 태그

채널 사운딩은 이미 휴대폰과 액세서리에 있는 블루투스 무선부로 UWB에 가까운 일을 하려는 시도다. 정확도는 아직 UWB보다 낮은 편이지만, 추가 칩 없이 쓸 수 있다는 점이 크다. 1장에서 강조했듯이 6.0 이상이라고 모두 CS를 지원하는 것은 아니며, 두 기기 모두 지원해야 한다.

핵심 정리

  1. RSSI 거리: d ≈ 10^((P1m − RSSI)/(10n)). dB 오차가 거리의 배율 오차가 되어 멀수록 엉망이다. 평균과 구역 판단에 쓴다. 비콘은 광고에 1 m 기준 세기를 싣는다.
  2. AoA·AoD(5.1): 두 안테나의 위상 차 Δφ = 2π·d·sinθ/λ로 방향을 잰다. 간격이 λ/2(약 6 cm)를 넘으면 모호해진다. 패킷 끝의 CTE(16~160 µs, 순수한 톤) 동안 안테나를 바꿔 가며 IQ 표본을 찍는다.
  3. 채널 사운딩(6.0): 72개 1 MHz 채널에서 왕복 위상을 재 기울기로 거리를 구한다(x = −(dφ/df)·c/4π). 1 MHz 간격이면 150 m마다 모호하고, RTT로 푼다. 모드 0 보정, 1 RTT, 2 PBR, 3 둘 다.
  4. 세기는 증폭기로 꾸밀 수 있지만 시간은 줄일 수 없다. CS는 위상·진폭 공격 탐지를 갖추고, 6.2에서 진폭 기반 공격 대응이 강화되었다.

확인 퀴즈

P1m = −59 dBm, n = 2일 때 RSSI −79 dBm이면 추정 거리는?

10^((−59 − (−79))/20) = 10^1 = 10 m. 여기에 ±6 dB 오차가 있으면 5~20 m가 된다.

AoA 안테나 배열의 간격을 반 파장(약 6 cm) 이하로 두는 이유는?

Δφ는 2π마다 같은 값으로 보인다. d ≤ λ/2이면 −90°~90°의 모든 각도가 −π~π의 서로 다른 Δφ에 대응한다.

CTE에 화이트닝을 적용하지 않고 1만 계속 보내는 이유는?

GFSK에서 1이 계속되면 반송파 + 고정 편이의 일정한 톤이 된다. 데이터가 섞이면 위상이 비트마다 바뀌어 안테나 간 비교가 어렵다.

채널 사운딩에서 1 MHz 간격 위상만으로 잰 거리가 0.4 m로 나왔다. 실제 거리가 될 수 없는 것은?

모호성 주기는 150 m다. 0.4, 150.4, 300.4 m는 같은 위상 기울기를 낸다. 75.4 m는 다르다. RTT가 어느 것인지 골라 준다.

채널 사운딩 스텝 모드와 하는 일의 짝이 틀린 것은?

모드 3은 RTT와 위상 측정을 함께 하는 스텝이다. CS는 연결된 두 기기 사이에서만 한다.