Chapter 05

시계와 타임스탬프: 15.65 피코초

거리 1 cm는 빛으로 33 피코초다. 휴대폰 CPU 시계(수 GHz)로도 한 눈금이 수백 피코초라, 그것으로는 몇 cm 단위의 거리를 잴 수 없다. UWB 칩은 오직 시각을 찍기 위한 특별한 시계를 갖고 있다. 이 장에서는 그 시계의 눈금, 한계, 그리고 보정해야 할 것들을 숫자로 본다.

63.8976 GHz로 세는 시계

UWB 칩의 타임스탬프 단위는 499.2 MHz의 128배, 63.8976 GHz의 한 주기다. 1/(128 × 499.2 MHz) = 15.65 ps. 빛은 이 사이에 4.69 mm를 간다. 실제로 칩이 이렇게 빠른 계수기를 돌리는 것은 아니고, 더 느린 시계로 세면서 프리앰블로 잰 신호의 앞쪽 가장자리를 보간해 이 단위까지 쪼갠다(7장).

시각은 40비트 레지스터에 담긴다. 2⁴⁰ × 15.65 ps ≈ 17.2초마다 0으로 돌아간다. 그래서 두 시각의 차이는 언제나 2⁴⁰을 법으로 빼야 한다. 거리 측정 공식은 이 빼기를 마스크로 처리한다(6장).

mm 눈금 자

cm 눈금밖에 없는 자로는 머리카락 굵기를 잴 수 없다. 눈금이 촘촘해야 작은 차이를 잰다. UWB 칩의 시계는 한 눈금이 15.65 ps, 빛으로 4.7 mm다. 다만 자가 정확해도 자의 0점(안테나 지연)이 어긋나거나 자가 늘어나 있으면(ppm 오차) 결과가 틀린다. 이 장이 다루는 세 가지다.

SIMULATOR

시간 눈금 확대경

1 눈금—
빛이 가는 거리—
40비트가 한 바퀴—
위: 확대 단계의 시간 폭과 그 안의 눈금. 아래: 같은 시간 동안 빛이 가는 거리. 해볼 것: 확대를 줄여 가며 프레임(140 µs), UWB 마이크로초(1.0256 µs = 65,536 눈금), 칩(2.003 ns), 15.65 ps 눈금을 비교해 보자. 드라이버는 지연 송신 시각을 “UWB 마이크로초 × 65,536”으로 다룬다.

눈금 15,650 fs: Zephyr ieee802154_dw1000.c의 DWT_TS_TIME_UNITS_FS 15650U · 1/499.2e6/128: Decawave uwb-core의 uwb_rng_tof_to_meters() · 40비트 레지스터: ieee802154_dw1000_regs.h 주석 “40 bit register” · “dx_time in dwt timeunits (uwb usecs << 16)”: uwb.h · 지연 송신 시각은 하위 8비트를 버리고 기록: dw1000_set_delay_start()의 dx_time >> 8

안테나 지연: 칩 안의 숨은 거리

타임스탬프는 칩 안의 디지털 회로가 찍는다. 그런데 신호가 실제로 공기 중에 나가는 곳은 안테나다. 칩 → 정합 회로 → 안테나로 가는 동안, 그리고 받을 때 반대 방향으로 오는 동안 수백 피코초~수백 나노초가 더 걸린다. 이것이 안테나 지연(antenna delay)이다. 거리 측정은 왕복 시간에서 이 지연을 빼야 한다.

Zephyr의 DW1000 드라이버는 송신·수신 안테나 지연 기본값을 각각 16,450 눈금(약 257 ns)으로 둔다. 한 기기의 송신 + 수신 지연은 합쳐 32,900 눈금(약 515 ns)이다. 이 값을 빼지 않으면 거리가 100 m 넘게 틀린다. 그래서 제품은 알려진 거리에서 측정해 기기마다 이 값을 보정한다. 거리는 (왕복 − 응답) ÷ 2로 구하므로(6장), 기기 하나의 지연 합이 1 ns 틀리면 거리는 15 cm, 두 기기 모두 같은 만큼 틀리면 30 cm 틀린다.

SIMULATOR

안테나 지연을 잘못 넣으면

지연 오차—
잰 거리—
거리 오차—
해볼 것: ① 설정값을 0으로 두면 150 m 넘는 오차가 생긴다. ② 기본값(16,450 × 2 = 32,900)이 실제(32,920)보다 20 눈금(313 ps) 작으면 약 9 cm 길게 잰다. 오차는 거리와 무관한 고정 치우침이다. 모델: 두 기기가 같은 지연을 갖고 같은 값으로 설정한 양방향 측정(6장). 두 기기의 지연 오차가 왕복에 하나씩 들어가고 ÷2 하므로, 거리 오차 = c × (실제 − 설정) × 눈금.

안테나 지연 기본값: Zephyr ieee802154_dw1000.c의 DW1000_TX_ANT_DLY 16450, DW1000_RX_ANT_DLY 16450 · Decawave 드라이버는 기기별 설정값(DW1000_DEVICE_0_RX_ANT_DLY 등)을 받아 dw1000_phy_set_rx_antennadelay()로 적용

두 시계는 같은 속도로 가지 않는다

UWB 칩의 시계는 수정 진동자에서 나오고, 수정 진동자는 보통 ±10~20 ppm(100만분의 1) 오차가 있다. 1초에 20 µs씩 빠르거나 느리다는 뜻이다. 한 기기 안에서 시각의 차이를 재는 데에는 거의 문제가 없지만, 다른 기기의 시계로 잰 시간을 내 시계로 잰 시간과 섞으면 문제가 된다.

양방향 거리 측정(6장)에서 상대는 내 신호를 받고 정해진 시간(응답 시간, 수백 µs~수 ms) 뒤에 답한다. 상대가 “500 µs 기다렸다”고 알려 와도, 상대 시계가 20 ppm 빠르면 실제로는 499.99 µs다. 그 10 ns 차이가 그대로 왕복 시간 오차가 되고, 거리로는 1.5 m다. 응답 시간 × ppm 차이가 거리 오차를 정한다. 6장의 양방향 측정(DS-TWR)과 반송파 주파수 오차 보정이 이 문제를 푼다.

예측해 보기

시계 오차 20 ppm, 응답 시간 500 µs면 단방향 TWR 오차가 약 1.5 m다. 응답 시간을 2 ms로 늘리면?

오차는 ppm × 응답 시간에 비례한다.

응답 시간이 4배이므로 오차도 4배, 약 6 m다. 단방향 TWR은 응답을 짧게 해야 하고, 그럴 수 없으면 양방향(DS-TWR)이나 시계 오차 보정을 쓴다(6장). 아래에서 응답 시간을 늘려 보자.
SIMULATOR

ppm 오차 × 응답 시간

응답 시간 착오—
거리 오차(보정 없음)—
반송파로 잰 ppm(9번 채널 Hz)—
그래프: 응답 시간(가로)에 따른 단방향 측정의 거리 오차, ppm 차이별 선. 해볼 것: ① 20 ppm, 500 µs면 오차가 1.5 m다. UWB의 장점이 사라진다. ② 응답 시간을 100 µs로 줄여도 30 cm. 그래서 보정이 필요하다. ③ 오른쪽 아래 값: 수신기는 상대 반송파와 자기 반송파의 주파수 차이를 재서 ppm을 알아낸다. 9번 채널(7,987.2 MHz)에서 1 ppm은 7,987 Hz다. 이 값으로 보정하면(6장의 skew) 오차가 크게 준다.

Hz → ppm 환산 DWT_HZ_TO_PPM_MULTIPLIER_CHAN_n = 1.0e6 / UWB_CH_FREQ_CHAN_n: uwb-core uwb_mac.h · 시계 차이 비율 계산 dw1000_calc_clock_offset_ratio(): uwb-dw1000 dw1000_mac.c

핵심 정리

  1. 타임스탬프 1 눈금 = 1/(128 × 499.2 MHz) = 15.65 ps = 빛으로 4.69 mm.
  2. 40비트 시계는 약 17.2초마다 넘친다. 시각 차이는 2⁴⁰을 법으로 뺀다.
  3. 안테나 지연(DW1000 기본 송신·수신 각 16,450 눈금 ≈ 257 ns)을 기기마다 보정해야 한다. 기기 하나의 지연이 1 ns 틀리면 15 cm.
  4. 상대 시계로 잰 응답 시간에는 ppm 오차가 곱해진다. 20 ppm × 500 µs = 10 ns = 1.5 m.
  5. 반송파 주파수 차이(9번 채널에서 1 ppm ≈ 8 kHz)로 시계 차이를 재서 보정한다.

확인 퀴즈

UWB 타임스탬프 1 눈금은 빛으로 몇 mm인가?

15.65 ps × 3×10⁸ m/s ≈ 4.69 mm.

40비트 타임스탬프에서 TX = 0x0000000100, RX = 0xFFFFFFFF00일 때 올바른 차이(TX − RX)는?

(0x100 − 0xFFFFFFFF00) mod 2⁴⁰ = 0x200.

한 기기의 안테나 지연(송신 + 수신 합)을 1 ns 잘못 넣으면 거리 오차는?

거리 = (왕복 − 응답) ÷ 2이므로 1 ns 오차는 비행시간에 0.5 ns로 들어간다 → 0.5 ns × c ≈ 15 cm.

시계 차이 20 ppm, 상대 응답 시간 500 µs면 보정 없는 단방향 측정의 거리 오차는?

500 µs × 20×10⁻⁶ = 10 ns, ÷2 = 5 ns → 1.5 m.