기준일을 100으로 놓고 그린 선입니다. 통화가 서로 달라 지수로 겹쳤습니다.
위성은 내 위치를 모릅니다 — 그저 자기 위치와 원자시계 시각을 방송할 뿐입니다. 폰은 전파의 도착 시간차로 거리를 재는데, 폰 시계는 싸구려라 1마이크로초 틀리면 300m가 틀어집니다. 해법이 우아합니다: 시계 오차 자체를 미지수로 놓고 위성을 하나 더 받아서 함께 풉니다. 아래는 그 방정식을 실제로 푸는 화면이고 — 버튼 하나로 아인슈타인의 상대성 보정을 꺼서 위치가 흘러가는 것도 볼 수 있습니다.
위성은 자기 위치와 자기 시각만 뿌린다. 내가 누군지, 몇 명이 듣는지 모른다. 그래서 GPS는 수신자가 몇억 명이어도 용량 문제가 없다.
s = satPos(i) // 방송된 위성 좌표 d = |x_true − s| // 전파가 실제로 간 거리
폰이 재는 건 순수한 거리가 아니라 거리 + 내 시계 오차 + 대기 지연이다. 그래서 이름이 '거리'가 아니라 의사(pseudo)거리다.
drift = REL ? 0 // 보정 ON : NET*1e-6*ecc[i]*day*C // OFF: 위성마다 다르게 rho[i] = d + drift + noise
지금 추정 위치에서 각 위성을 바라보는 단위벡터를 세운다. 이게 "이쪽으로 1m 가면 그 위성까지 1m 멀어진다"는 지도다. 마지막 칸 1은 시계 몫.
J = [dx/d, dy/d, 1] r = d + b − rho[i] // 지금 얼마나 어긋났나
위성이 몇 개든 3×3 행렬 하나로 압축된다(3차원 실물은 4×4). 가우스 소거로 풀면 위치 보정과 시계 보정이 한꺼번에 나온다.
A += Jᵀ·J ; g += Jᵀ·r
Δ = solve3(A, g) // [dx, dy, db]
보정량만큼 옮기고 다시 잰다. 몇 번이면 밀리미터 아래로 붙는다 — 잡음이 0이면 이 페이지의 검증기가 오차 0.000m를 확인한다.
for (it = 0; it < 12; it++) {
x −= Δ[0]; y −= Δ[1]; b −= Δ[2];
}
풀고 나면 위치뿐 아니라 b(내 시계가 얼마나 틀렸는지)도 손에 쥔다. 이것이 GPS가 전세계 시각 동기화의 뼈대인 이유다 — 증권거래소도 기지국도 이 b를 쓴다.
내 시계 오차 = b / c // 초 단위
두 칸은 같은 난수를 나눠 쓰는 두 개의 독립 계산입니다 — 잡음이 아니라 상대성이 차이를 만든다는 걸 보이려고, 매 측위마다 잡음을 한 번만 뽑아 양쪽에 똑같이 먹입니다. 왼쪽이 제자리를 지키는 동안 오른쪽만 흘러가면, 그 차이는 오직 그 항 때문입니다.
GPS 위성 신호의 내용물은 "나는 여기 있고, 지금은 이 시각"이 전부다. 폰은 그 전파가 늦게 도착한 만큼(빛은 1나노초에 30cm) 거리를 재고, 여러 위성의 거리 구슬을 교차시켜 나를 찾는다. 위성엔 원자시계가 실려 있다 — 이 기계 전체가 시계 장사다.
수신기 시계 오차를 미지수 b로 승격시키고 위성을 하나 더 받는다. 2차원 화면에선 (x, y, b) 세 미지수라 위성 3개★, 실제 3차원에선 4개다. 그래서 GPS는 위치와 함께 원자시계급 시각을 공짜로 뱉는다 — 증권거래소·기지국이 GPS로 시간을 맞추는 이유.
위성 시계는 빨라서 느려지고(특수상대성 −7μs/일) 높아서 빨라진다(일반상대성 +46μs/일) — 합계 +38μs/일. 보정 없이는 거리 오차가 하루 11.5km씩 자란다. 위 버튼으로 꺼보라 — 초록 점이 진짜 위치에서 흘러 떠내려간다.
반전 하나 — 모든 위성이 정확히 같은 양만큼 틀리면, 그 오차는 폰의 시계 미지수 b가 통째로 흡수해서 위치는 멀쩡하다. 진짜 문제는 위성마다 궤도가 달라 서로 다르게 틀리는 것★ — 그 어긋남은 어디로도 숨을 수 없어 위치를 민다. 오차의 세계에선 '함께 틀림'보다 '다르게 틀림'이 치명적이다.
거리 구슬이 비스듬히 교차하면 교점이 길게 늘어난다 — 측량의 DOP(기하 희석). 위성 수를 줄여보면 오차 타원이 늘어나는 게 보인다. 도심 빌딩숲에서 GPS가 튀는 건 하늘이 좁아 위성이 한쪽에 몰리기 때문이기도 하다.
남은 큰 오차는 전리층이 전파를 늦추는 것 — 늦어지는 정도가 주파수마다 달라서, L1·L5 두 주파수로 같은 위성을 재면 지연을 역산해 지울 수 있다. 퀄컴·브로드컴·유블럭스 칩이 하는 일이고, 폰 스펙의 '이중주파수 GPS'가 이것이다. 오차 미터급 → 수십cm급★.
위성 하나가 알려 주는 것은 거리 하나뿐입니다. 그러면 내 위치는 그 위성을 중심으로 한 구면 어딘가가 됩니다. 구 두 개면 원, 세 개면 점 두 개, 그리고 시계 오차까지 풀려면 넷째가 필요합니다.
돌려 보면 구들이 얇은 껍질인 것이 보입니다. 전파가 오는 데 걸린 시간에 빛의 속도를 곱한 값이 그 반지름이고, 시계가 1마이크로초 틀리면 반지름이 300m 틀립니다 — 그래서 넷째 위성이 시계를 대신 풀어 줍니다.
위성 배치와 구 크기는 관계를 보이기 위한 것이고 실제 궤도 축척이 아닙니다.
이 판의 요점은 시계입니다. 정확한 시계가 실제로 어떻게 생겼는지 보면 왜 수신기가 자기 시계를 안 믿는지 바로 납득됩니다.
미국 표준기술연구소의 세슘 원자시계입니다. 가운데 세로로 선 은색 통이 본체고, 파란 광섬유와 케이블이 사방으로 뻗어 있습니다. 연구원 둘이 붙어 들여다보는 크기입니다.
이게 이 판의 출발점입니다 — 이만한 물건을 주머니에 넣을 수는 없습니다. 그래서 위성에는 비슷한 급을 싣지만, 당신 수신기의 시계는 싸구려입니다. 그 오차를 아예 미지수 하나로 놓고 위치와 함께 푸는 게 이 판의 계산이고, 그래서 미지수가 넷이라 위성이 넷 이상 필요합니다. 기본값에서 풀린 시계 오차는 −0.01 μs, 거리로는 2 m어치입니다.
그리고 위성 시계는 가만 놔두면 틀립니다. 빨리 돌아서 느려지는 몫이 −7.2 μs/일, 중력이 약해 빨라지는 몫이 +45.7 μs/일, 합쳐서 +38.5 μs/일입니다. 거리로 바꾸면 하루 11.5 km — 상대성이론을 넣지 않으면 GPS 는 하루 만에 못 쓰게 됩니다.