HRP 프레임: 프리앰블·SFD·STS
UWB의 신호는 −41.3 dBm/MHz, 잡음 바닥과 비슷한 세기다(3장). 수신기는 잡음 속에서 신호가 왔다는 것부터 알아채고, 정확히 언제 왔는지 짚고, 그 신호가 가짜가 아님을 확인해야 한다. 802.15.4의 HRP(High Rate Pulse repetition) UWB 프레임은 이 세 가지 일을 구간별로 나눠 맡는다. 이 장에서는 프레임을 앞에서부터 하나씩 뜯어본다.
- SHR(프리앰블 + SFD), PHR, 데이터, STS가 각각 무엇을 하는지 안다.
- 프리앰블 심볼 시간이 “코드 길이 × 펼침 칩 수 ÷ 499.2 MHz”로 나오는 것을 공개 코드의 상수와 맞춰 본다.
- 프리앰블을 길게 할수록 잡음 속에서 잘 찾는 이유를 상관 누적으로 이해한다.
- SP0·SP1·SP3 프레임의 차이와 프레임 전송 시간을 계산한다.
프레임 한눈에
- SYNC(프리앰블): 같은 프리앰블 코드 심볼을 수십~수천 번 반복한다. 수신기는 이걸로 신호가 왔음을 알아채고(검출), 시각·주파수를 맞추고, 채널의 모양(7장의 CIR)을 잰다.
- SFD(Start of Frame Delimiter): 프리앰블이 끝나고 프레임이 시작됨을 알리는 정해진 무늬. SFD가 끝나는 순간이 타임스탬프의 기준점이다.
- STS(Scrambled Timestamp Sequence): 802.15.4z가 더한 구간. 암호 키로 만든, 매번 다른 펄스 열이라 미리 알 수 없다. 공격자가 흉내 낼 수 없는 시각 기준을 준다(10장).
- PHR(PHY Header): 데이터 길이와 속도. 오류에 강하게 낮은 속도로 보낸다(SECDED 부호 포함 21 심볼).
- 데이터: 6.81 Mb/s(BPRF) 등으로 보내고, 330비트마다 48비트의 리드-솔로몬 부호를 붙인다.
SP0·SP1·SP3: Android FiraParams.java의 RFRAME_CONFIG_SP0/SP1/SP3(“Ranging frame with STS following SFD, no data”) · PHR 21 심볼, 330비트당 48비트 부호: Decawave uwb-dw1000의 dw1000_hal.c(.nphr = 21), dw1000_phy_data_duration()
프리앰블 심볼과 펄스율
프리앰블 심볼 하나는 길이 31, 127, 91인 3진 코드(+1, 0, −1)를 펄스로 보낸 것이다. 코드의 각 자리(“칩”) 사이에는 빈 칩을 끼워 펄스 간격을 벌린다. 그래서 심볼 시간 = 코드 길이 × 펼침 칩 수 ÷ 499.2 MHz다.
잡음이 심한 무전기로 말을 걸 때 먼저 “여보세요”를 여러 번 반복해 상대가 귀를 맞추게 하고, “지금부터”라고 말한 다음 본론을 꺼낸다. 프리앰블이 반복되는 “여보세요”이고, SFD가 “지금부터”다. 반복이 많을수록 잡음 속에서도 알아채기 쉽지만 말하는 시간은 길어진다.
프리앰블 심볼 시간 만들기
심볼 시간 상수: Zephyr include/zephyr/net/ieee802154_radio.h의 IEEE802154_PHY_HRP_UWB_PRF4/PRF16/PRF64/ERDEV_TPSYM_SYMBOL_PERIOD_NS(주석: 802.15.4-2020 15.2.5 표 15-4, 802.15.4z 15.2.6.2 표 15-7b) · PRF와 코드 번호 범위(PRF 64 MHz는 9~24, 16 MHz는 1~8): uwb-dw1000 dw1000_mac_config()의 검사 · 휴대폰 코드 9~12, 25~32: Android UWB_PREAMBLE_CODE_INDEX_*
코드 번호가 다르면(예: 9번과 10번) 서로의 상관이 작아, 같은 채널의 다른 기기를 덜 방해한다. 와이파이의 채널처럼 코드를 나눠 쓰는 셈이다. Android UWB의 기본값은 9번 채널, 코드 10이다.
반복해서 잡음 속에서 찾기
프리앰블 코드는 자기 상관이 뾰족하도록 고른 수열이다. 자기 자신과 딱 맞게 겹칠 때만 큰 값이 나오고, 조금만 어긋나도 거의 0이다. 수신기는 받은 신호를 코드와 상관시켜, 봉우리가 서는 순간을 찾는다. 심볼 하나로는 잡음에 묻혀도, N개 심볼의 상관을 더하면 신호는 N배, 잡음은 √N배로만 커져 SNR이 10·log₁₀N dB 오른다. 프리앰블이 길수록 멀리서도 찾는 이유다(대신 공중 시간과 전력이 든다).
상관을 쌓아 봉우리 세우기
프레임 전송 시간
프레임의 공중 시간은 SHR(프리앰블 + SFD) + PHR + 데이터(+ STS)다. 거리 측정 한 번에 프레임을 둘~넷 주고받으므로(6장), 이 시간이 측정 주기·전력·한 공간에서 함께 잴 수 있는 기기 수를 정한다(11·12장).
dw1000_phy_SHR_duration()·dw1000_phy_data_duration()와 기본값(dw1000_dev.c, dw1000_hal.c)프리앰블 64심볼, 데이터 6.8 Mb/s로 20바이트를 보낸다. 공중 시간에서 가장 큰 부분은?
프리앰블 심볼 하나는 약 1 µs다.
프레임 모양과 공중 시간
핵심 정리
- HRP 프레임 = SYNC(프리앰블) + SFD + (STS) + PHR + 데이터. SP0(STS 없음), SP1(STS + 데이터), SP3(STS만).
- 프리앰블 심볼 시간 = 코드 길이 × 펼침 ÷ 499.2 MHz: 31×16 → 993.59 ns, 127×4 → 1,017.63 ns, 91×4 → 729.17 ns.
- 프리앰블은 자기 상관이 뾰족한 코드의 반복. N개를 쌓으면 10·log₁₀N dB를 얻는다.
- SFD가 끝나는 순간이 타임스탬프 기준점. STS는 위조할 수 없는 시각 기준(10장).
- Android 기본 프레임(SP3, 프리앰블 64, STS 64)은 약 140 µs.
확인 퀴즈
BPRF 프리앰블 심볼 시간 1,017.63 ns는 어떻게 나오나?
프리앰블 심볼 64개의 상관을 더하면 SNR은 얼마나 오르나?
SP3 프레임의 특징은?
거리 측정의 기준 시각(RMARKER)은?