Chapter 04

PRN 코드: 위성마다 다른 무늬

하늘의 GPS 위성 열 몇 기가 모두 1,575.42 MHz라는 같은 주파수로, 같은 순간에 방송한다. 라디오라면 섞여서 아무것도 못 알아들을 것이다. 그런데 수신기는 위성 하나하나를 골라 듣는다. 위성마다 다른 “무늬”를 신호에 곱해 보내기 때문이다. 이 무늬가 PRN 코드(Pseudo-Random Noise code)다. 이 장에서는 그 무늬를 규격대로 직접 만들어 보고, 규격 표와 칩 하나까지 맞춰 본다.

시프트 레지스터 두 개

C/A 코드는 10칸짜리 시프트 레지스터 두 개, G1과 G2로 만든다. 둘 다 처음에 모든 칸을 1로 채우고, 1.023 MHz 박자마다 한 칸씩 민다. 새로 들어오는 값은 정해진 칸들을 XOR한 값이다(G1은 3·10번 칸, G2는 2·3·6·8·9·10번 칸). 이런 레지스터는 1,023(= 2¹⁰ − 1)칩마다 같은 무늬가 돌아오는 가장 긴 수열(m-수열)을 만든다.

위성마다 다른 코드는 G2를 위성마다 정해진 칩 수만큼 늦춘 것과 G1을 XOR해서 얻는다. 이렇게 두 m-수열을 엇갈려 섞은 것을 골드 코드라 한다. 규격 표는 늦출 칩 수와 함께, 늦추는 대신 G2의 두 칸을 XOR해 같은 결과를 내는 “두 탭” 방식(예: PRN 1은 2·6번 칸)도 적어 둔다.

방송국마다 다른 시그널 음악

여러 방송국이 같은 주파수로 동시에 정시를 알린다고 해 보자. 방송국마다 고유한 음악을 틀면, 그 음악을 아는 사람은 섞인 소리 속에서도 원하는 방송을 골라 듣는다. 음악이 어디까지 흘렀는지를 맞추면 언제 보낸 소리인지도 안다. PRN 코드가 그 음악이다.

SIMULATOR

C/A 코드 발생기 한 칩씩

G1 (되먹임 3⊕10)
G2 (되먹임 2⊕3⊕6⊕8⊕9⊕10, 주황 테두리 = 이 위성의 두 탭)
처음 10칩(8진수 표기)—
규격 표 3-Ia—
G2 지연 / 두 탭—
출력 칩 = G1의 10번 칸 ⊕ (이 위성의 두 탭 XOR). 8진수 표기는 규격의 방식 그대로다: 첫 칩을 맨 앞 자리(1)로 쓰고 나머지 9칩을 3비트씩 8진수로 쓴다. 해볼 것: “10칩”을 눌러 처음 10칩을 만들면 규격 표 값과 같아진다. 모든 PRN 1~37이 같은지는 검증 스크립트가 확인한다(34번과 37번은 규격대로 같은 코드).

G1 = X¹⁰ + X³ + 1, G2 = X¹⁰ + X⁹ + X⁸ + X⁶ + X³ + X² + 1, 초기값 1111111111, 1.023 MHz: IS-GPS-200N 3.3.2.3(p.29, PDF 48쪽) · 위성별 두 탭·G2 지연·처음 10칩 8진수: 표 3-Ia(p.6~7) · 코드 길이 1,023칩, 1 ms: 3.2.1.3

골라 듣기와 거리 재기

골드 코드는 두 가지 성질을 함께 갖는다.

예측해 보기

PRN 1의 복제 코드로 PRN 2의 신호를 상관시키면 결과는?

골드 코드의 상호 상관은 세 값만 나온다.

C/A 코드끼리의 상호 상관은 −65, −1, 63 세 값뿐이라, 1,023인 자기 상관 봉우리보다 약 24 dB 낮다. 그래서 같은 주파수에서도 위성을 골라 들을 수 있다. 아래 시뮬레이터에서 다른 위성을 골라 확인해 보자.
SIMULATOR

상관을 밀어 가며 보기

가장 큰 상관값 / 위치—
나머지 값들—
코드 위상 → 거리(1 ms 안)—
그래프: 복제 코드를 0~1,022칩 밀었을 때의 주기 상관값. 해볼 것: ① 같은 위성이면 늦게 온 칩 수 위치에 1,023의 봉우리가 선다. ② 다른 위성으로 바꾸면 봉우리가 사라지고 값이 −65, −1, 63 셋으로만 나온다(골드 코드의 3값 상관). ③ 늦게 온 칩 수를 바꾸면 봉우리가 따라 움직인다. 칩 하나 = 1/1.023 MHz ≈ 977.5 ns ≈ 293 m.

C/A 코드는 1 ms마다 반복하므로, 코드 위상만으로는 0~300 km 안의 거리만 안다. 실제 거리(약 2만 km)의 나머지 “1 ms의 몇 배”는 항법 메시지의 시각(7장)으로 채운다. 대신 1 ms마다 다시 맞춰 볼 수 있어 찾기가 빠르다. Galileo E1 코드는 4,092칩(4 ms)이고, 수학식이 아니라 규격 부록에 실린 무작위 수열을 그대로 쓴다(메모리 코드).

핵심 정리

  1. C/A 코드 = G1 ⊕ (위성마다 다르게 늦춘 G2). G1 = X¹⁰+X³+1, G2 = X¹⁰+X⁹+X⁸+X⁶+X³+X²+1, 초기값 모두 1.
  2. 1,023칩, 1.023 Mchip/s, 1 ms마다 반복. 1칩 ≈ 293 m.
  3. 자기 상관은 맞을 때만 1,023, 상호 상관은 −65/−1/63. 같은 주파수에서 위성을 골라 듣고 시간을 잰다.
  4. 코드 위상은 1 ms(300 km) 안의 거리만 준다. 나머지는 항법 메시지의 시각으로.

확인 퀴즈

C/A 코드 한 주기의 길이는?

2¹⁰ − 1 = 1,023칩을 1.023 Mchip/s로.

규격 표의 PRN 1 처음 10칩 “1440”(8진수)을 2진수로 쓰면?

첫 자리 1 = 첫 칩, 나머지 440(8진) = 100 100 000.

같은 주파수의 위성 여럿을 구별할 수 있는 이유는?

CDMA. (GLONASS는 주파수를 나눈다.)

C/A 코드 1칩은 거리로 대략?

c ÷ 1.023 MHz. 수신기는 칩의 수십~수백분의 1까지 맞춰 m 단위를 얻는다(6장).