- gypsum은 GPS 신호를 처음부터 디코딩해 위치를 얻는 수신기 제작 프로젝트이며, 4부작 중 1부는 잡음 아래 묻힌 위성 신호를 찾는 데 집중함
- GPS는 약 30개 위성이 지구 전역으로 보내는 방송형 신호라서, 위성은 누가 듣는지 알 수 없고 데이터센터가 사용자의 전파 수신을 대신할 수도 없음
- 지상 안테나에 도달한 GPS 신호는 주변 잡음보다 100,000배 낮은 전력일 수 있고, 일반 셀룰러 신호보다 1억 배 약해 그대로는 거의 보이지 않음
- 수신기는 위성과 수신기가 모두 아는 C/A 코드를 반복 비교해 무작위 잡음을 평균화하고, 50bps 데이터 신호를 1Mbps PRN 코드 위에서 찾아냄
- 획득(acquisition)은 위성별 PRN, ±5kHz Doppler shift, 코드 위상을 함께 탐색해 보이는 위성과 대략적인 시간 지연·상대 속도를 찾는 계산 집약적 단계임
GPS 신호를 직접 듣는 프로젝트
- gypsum은 처음부터 만드는 GPS 수신기 프로젝트임
- 4부작 시리즈는 GPS 신호를 디코딩해 위치를 얻는 과정을 다루며, 1부는 신호를 찾고 위성을 획득하는 단계에 해당함
- GPS는 약 30개 위성이 지구 전체에 신호를 보내며, 이 신호는 고도나 날씨와 무관하게 항상 주변에 존재함
- GPS는 1978년에 시작됐고, 글 작성 시점 기준 45년이 지났음
조용한 비콘과 서버로 대체할 수 없는 위치 계산
- GPS 위성 신호는 송출될 때 주거용 전구와 비슷한 세기지만, 지상에 도달할 때는 극도로 약해짐
- GPS는 send-and-forget 방식에 가까워 위성은 누가 듣는지 알 수 없음
- FM 라디오와 방송 TV도 비슷한 특성을 가짐
- 이 구조 때문에 누구도 GPS 접근 자체에 과금하기 어려움
- 위치 계산은 웹 서비스가 대신 처리해 내려주는 구조와 맞지 않음
- GPS는 사용자가 있는 곳에 도달한 전파를 직접 들어야 함
- 데이터센터는 사용자의 위치에서 들어오는 전파를 대신 들을 수 없음
SDR로 GPS 주파수 탐색하기
- GPS 신호를 소프트웨어로 수신하고 후처리하려면 조정 가능한 RF 수신기가 필요하며, 이 장비가 소프트웨어 정의 라디오(SDR) 임
- SDR++를 사용해 스펙트럼을 탐색함
- SDR 사용 과정에서 몇 가지 개념이 필요함
- bias tee: SDR 내부 회로가 SMA로 연결된 안테나에 DC 전원을 공급함. 사용한 SDR은 기본적으로 꺼져 있어 수동으로 켜야 했음
- automatic gain control(AGC): 약한 신호를 증폭해 수신 데이터의 신호대잡음비(SNR)를 개선하려는 하드웨어 회로 또는 소프트웨어 기능임
- IQ samples: I는 in-phase, Q는 quadrature 또는 imaginary 성분이며, 시간·진폭·극성 관점의 처리를 가능하게 함
- SDR은 조정한 중심 주파수에 큰 스파이크가 생김
- 초보자에게는 어디를 보든 강한 신호가 있는 것처럼 보일 수 있음
- 중심 주파수에서 살짝 벗어나 조정하거나, 소프트웨어의 IQ correction으로 이 스파이크를 줄일 수 있음
잡음 아래 묻힌 신호를 찾는 방식
- 지상 안테나에서 GPS 신호는 주변 에너지와 신호보다 100,000배 낮은 전력으로 도달함
- GPS 신호는 thermal noise floor보다 최대 50dB 낮을 수 있음
- 최신 GPS 위성은 수신기에 약 -130dBm 수준으로 도달하는 신호를 보내도록 되어 있음
- C/A 대역폭에서 일반 주거 환경의 thermal noise floor는 약 -110dBm임
- 비교 대상으로 셀룰러 신호는 약 -50dBm이며, GPS 신호보다 1억 배 강함
- GPS는 이렇게 잡음 아래 묻힌 신호를 식별하고 디코딩하기 위해 확산 스펙트럼(spread-spectrum) 기법을 사용함
C/A 코드와 PRN으로 들리지 않는 신호 듣기
- GPS 위성은 수신자가 모르는 데이터와 함께, 위성과 수신자가 모두 아는 신호를 보냄
- 이 신호는 C/A code, PRN code, chipping code라고 불리며 위성이 초당 1,000번 반복함
- C/A는 coarse acquisition의 약자임
- 원래 군사용으로 구상된 GPS에서 C/A 코드는 더 정밀한 P code에 잠기기 위한 저해상도 단계였음
- 현재 C/A 코드는 대부분의 민간 GPS 기반이고, P code는 여전히 군사용으로만 사용 가능함
- 민간 수신기가 P code를 쓰지 못하는 이유는 chipping sequence 값을 모르기 때문임
- P code 생성 공식이 공개되어 있으면 C/A 코드와 같은 기법으로 잠길 수 있음
- P code가 더 정밀한 이유는 더 높은 chipping rate로 동작하기 때문임
- 수신기는 예상 PRN과 실제 수신 신호를 반복 합산·비교함
- 무작위 잡음은 시간이 지나며 0으로 평균화됨
- PRN 신호는 계속 누적되어 커짐
- GPS는 여러 위성을 동시에 다루기 위해 code-division multiple access(CDMA) 를 사용함
- 실제 데이터 신호는 PRN 코드에 섞여 전송됨
- PRN 코드는 1Mbps로 동작함
- 데이터 신호는 훨씬 느린 50bps로 전송됨
- 낮은 데이터 속도 덕분에 PRN 코드는 비교적 긴 시간 동안 안정적인 기준 신호로 남음
위성별 C/A 코드 생성
- 위성이 여러 개이므로 수신기는 어떤 위성이 보이는지 알아야 함
- 각 GPS 위성은 고유하고 안정적인 PRN 코드를 가짐
- 이 코드는 민간 GPS 명세인 IS-GPS-200L의
Table 3-I (Code Phase Assignments)에 정의되어 있음 - 온라인에는 PRN 코드 생성법을 설명하는 자료가 많지만, 전체 PRN 코드를 대조할 수 있는 재현 자료는 많지 않았음
획득 단계: 보이는 위성 찾기
- GPS 수신기는 하늘에 보이는 위성을 찾기 위해 각 위성이 내보내는 PRN 사본을 생성하고, 안테나로 수집한 데이터에서 해당 PRN을 찾음
- 이 단계가 acquisition이며, 목표는 사용자 위에 있는 위성에 잠기는 것임
- 수신기는 약 1초 정도의 짧은 안테나 데이터 스냅샷을 잡고 각 복제 PRN과 상관(correlation) 을 계산함
- 복제 PRN과 실제 데이터 사이에 강한 상관이 있으면 해당 PRN의 위성이 위에서 신호를 보내고 있음을 알 수 있음
- 실제 수신 신호는 이상적인 PRN과 다름
- GPS 신호는 지구 대기를 지나며 약해짐
- 위성이 빠르게 이동하므로 수신 신호는 Doppler-shifted됨
- GPS 위성의 궤도 속도는 잘 알려져 있어 예상 Doppler shift 범위도 정해짐
- 접근하는 위성은 최대 +5kHz 주파수 증가
- 멀어지는 위성은 -5kHz 주파수 감소
- 수신을 시작한 시간이 임의이므로 PRN 전송 중간부터 듣기 시작할 수도 있음
- 획득 단계는 세 축을 동시에 탐색함
- 각 위성의 PRN 코드
- 예상되는 Doppler shift 범위
- 수신 PRN과 맞추기 위해 복제 PRN을 미는 위상
- 계산량은 크지만, 올바른 매개변수를 찾으면 상관 스파이크가 뚜렷하게 나타남
구현 방식과 1부의 결과
- 구현은 각 PRN을 시간 영역에서 주파수 영역으로 변환하고, 들어오는 위성 데이터의 주파수와 각 PRN 코드의 스펙트럼을 상관시킴
- 이 방식은 주파수 영역 cross correlation에 해당함
- 시간 영역의 위상 오프셋은 주파수 성분의 이동이 되므로, Doppler shift 탐색과 위상 탐색을 같은 계산에서 처리할 수 있음
- Doppler shift는 각 보이는 위성에 대해 가장 강한 상관 스파이크가 나오는 값을 찾도록 binary search와 비슷한 방식으로 수렴시킴
- 1부의 결과로 현재 사용자 위에 있는 GPS 위성을 판단하고, 각 위성의 대략적인 phase/time delay와 Doppler shift/relative velocity를 얻음
- 다음 단계는 Part 2: Tracking Pinpricks로 이어짐