Show HN: GPS 수신기 제작 프로젝트
(axleos.com)- 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로 이어짐
댓글과 토론
Hacker News 의견들
- “초당 10억 번 넘게 진동하는 파형을 샘플링할 수 있다고 주장하는 SDR은 시중에 없다”는 말은 예전엔 맞았지만 이제는 아님
GPS에 충분할 만큼 빠른 직접 RF 샘플링 또는 직접 RF 변환 수신기를 구할 수 있음. 예: Xilinx RFSoc https://www.mouser.com/datasheet/2/903/ds889_zynq_usp_rfsoc_..., National Instruments 글 https://www.ni.com/en/solutions/aerospace-defense/radar-elec..., 관련 기성 하드웨어 https://www.ni.com/en-us/shop/category/flexrio-custom-instru...
NI가 직접 RF 변환을 비용 효율적이라고 보면서도 장비는 3만 달러에 파는 건 좀 의아하지만, 3GHz 부근에서 위상 일관성이 있는 광대역 수신을 프로토타이핑하고 제대로 된 연구실과 예산이 있다면 몇 대 살 만함. 양산이라면 직접 만든 보드 비용이 더 내려가길 기다리거나 전통적인 헤테로다인 수신기로 가능한지 볼 듯함
군사용으로 고급 RF 추적 무기가 걱정된다면 직접 변환 수신기가 좋을 수 있음. 적 장비가 탐지할 수 있는 국부 발진기 누설이 없기 때문임- “국부 발진기 누설”이 왜 샘플 클록보다 더 큰 문제가 되는지 궁금함
- 좋은 글임
“from scratch”라는 표현을 보면 실제로 얼마나 밑바닥부터 했는지 궁금해지는데, 하드웨어가 RTL-SDR인 걸 보고는 약간 아쉬웠음. 그래도 프로토콜 디코딩은 매우 흥미롭고 결과도 훌륭함
GPS는 1978년에 시작됐지만 2000년까지 “선택적 사용성”이라는 방식으로 의도적으로 신호가 열화됐음. 이 때문에 많은 용도에는 GPS가 사실상 쓸모없었고, 도로 내비게이션에는 확실히 부적합했으며, 오지 탐색이나 해상 내비게이션에는 제한적으로 유용했음
gypsum이 안테나 신호를 1분도 안 들어도 냉시동에서 위치와 정확한 시간까지 잡는다는 건 매우 인상적이고, 오늘날 상용 수신기보다도 나아 보임. 2000년대 초 자동차 여행 때는 출발 전 갓길에서 GPS 수신기가 위치를 잡기까지 15~20분 기다려야 했고, 안 되면 그냥 종이 지도를 보며 출발하곤 했음- GPS 무선 계층인 L1+L2 신호 설계는 말도 안 되게 훌륭함
46년이 지난 지금도 무선 계층은 완전한 상·하위 호환성을 유지하고, 최초 위치 고정 시간과 사용자 등가 거리 오차 같은 주요 지표는 프로토콜 비호환 변경 없이 10~1000배 개선됐음
지구 전체에 서비스를 제공하는 총 RF 송신 전력은 일반적인 미국 가정의 전력 소비보다 작고, 5G나 TV, AM/FM 라디오보다 훨씬 낮으며 잡음 바닥 아래임. 이는 쌓아 올린 골드 코드 활용 덕분에 가능함
Galileo 같은 경쟁 시스템과 주파수 공유도 가능하게 설계됐는데, 이동통신망에서는 보기 어려운 일임. 변조 데이터와 반송파의 위상이 고정돼 있어 반송파 위상 디코딩 같은 것도 가능해졌고, 그 덕분에 더 나은 의사거리와 정확도를 얻을 수 있음
전체적으로 설계자들이 엄청난 선견지명을 가졌거나, 엄청나게 운이 좋았거나, 둘 다였던 듯함 - “from scratch”는 확실히 좀 묘한 표현임. 나도 수신기를 Python으로 구현했으니 진짜 밑바닥과는 거리가 멂
여기서 의미한 건 GPS를 전혀 모르는 하드웨어, 즉 전자기장을 샘플링할 수만 있는 장치에서 출발해 수신기를 쌓아 올렸다는 뜻임
예전 하드웨어의 최초 위치 고정 시간이 느렸던 이유는 본질적으로 처리 능력의 발전과 관련 있음. 전통적인 GPS 수신기는 모든 위성의 ‘알마낙’을 내려받아야 했고, GPS 데이터 전송 형식과 속도 때문에 조건이 맞아도 최소 12.5분이 걸림
현대 처리 능력으로는 수신기, gypsum 포함, 공중에서 내려오는 힌트를 기다리는 대신 탐색 공간을 무차별 대입해 보이는 위성을 찾을 수 있음. 이 기법은 1부 끝에서 설명한 방식임 - “도로 내비게이션에는 확실히 쓸모없었다”는 말에는 강하게 동의하지 않음
1999년에 Delorme Earthmate Hyperformance GPS 수신기 RS-232 버전을 Toughbook에 연결하고 Delorme Street Atlas USA 6.0쯤을 돌려서 자동차 여행을 했음
전국을 가로지르는 동안 충분히 쓸 만한 길 안내를 제공했음. 차선 안내는 없었지만, 매 회전 전에 도로명까지 포함해 회전을 알려줬음
그 버전에는 음성 인식도 있어서 “아직 멀었어?” 같은 말을 하면 다음 경유지와 최종 목적지까지의 예상 도착 시간, 현재 위치를 알려줬고 꽤 재미있었음
선택적 사용성 하에서 일반적인 최악의 원형 공산 오차가 30m 정도라면, 아주 밀집한 지역을 제외하면 도로 내비게이션에 충분히 정확함. 그런 곳에서도 지도를 한 번 보면 되고, 탁 트인 도로에서는 훌륭했음 - RTL-SDR 하드웨어라 실망했다는 반응도 이해하지만, 15~20년 전으로 돌아가면 여기서 소프트웨어가 하는 일 상당수가 하드웨어로 구현됐을 것임
예전 GPS 수신기는 추적 채널 수를 마케팅 포인트로 삼았고, 저가 수신기는 6~8개 위성을 추적할 하드웨어만 있었던 반면 고가 수신기는 12개를 추적할 수 있었음
따라서 이 소프트웨어 정의 수신기는 원래 하드웨어가 맡았을 꽤 많은 부분을 구현하고 있으며, 보이는 모든 위성을 추적할 수 있음
소프트웨어 정의 방식에는 강력한 장점이 있음. 예를 들어 초기 위성 획득은 수신 신호와 여러 골드 코드 사이의 상호상관을 계산하는데, 이를 푸리에 영역에서 처리하면 신호를 꽤 빠르게 획득할 수 있음
트랜지스터 수준까지 내려가는 하드코어 DIY GPS 수신기를 원한다면 https://lea.hamradio.si/~s53mv/navsats/theory.html를 재미있게 읽을 듯함. 1990년대식 DIY GPS 수신기로, 손그림 회로도, 손그림 PCB, 수제 안테나까지 갖췄음 - https://en.wikipedia.org/wiki/Automotive_navigation_system
게다가 1990년대 말에는 조밀한 도심 환경에서 이상적이지는 않았지만, 현대 수신기도 종종 고생하는 영역이고, 차량용 차분 GPS 보정도 가능했음. NYC 같은 해안 대도시 인구 밀집 지역에서 쓸 수 있었음
오래된 자동차 내비게이션은 투박하고 지도 데이터도 전반적으로 형편없었지만, 선택적 사용성 때문에 “확실히 쓸모없었다”고 보기는 어려움
물론 꽤 나빴다는 점은 인정함. 다만 선택적 사용성은 한 요인일 뿐이고, 오늘날의 처리 능력과 더 좋은 지도라면 선택적 사용성 위치 오차가 있더라도 더 쉽게 보정할 수 있었을 것임
- GPS 무선 계층인 L1+L2 신호 설계는 말도 안 되게 훌륭함
- 초속 600m 이상으로 움직이는 동안 항법 데이터를 제공할 수 있는, 즉 인위적으로 제한되지 않은 GPS 수신기는 예전 ITAR에서 군수품으로 간주됐음
업데이트된 규정 https://www.space.commerce.gov/itar-controls-on-gps-gnss-rec...의 법률 문구는 너무 복잡해서 아직도 적용되는지조차 이해하기 어려움
SDR 얘기를 하자면, ITAR는 Kraken RF 팀이 만든 수동 레이더 GNU Radio 모듈이 내려간 이유이기도 함- Kraken RF 팀의 수동 레이더 GNU Radio 모듈 삭제 관련 글: https://hackaday.com/2022/11/19/open-source-passive-radar-ta...
- 필요한 신호 처리를 꽤 자세히 잘 보여주는 글임
이 설명과 함께 보기 좋은 멋진 시각 자료가 있는 https://ciechanow.ski/gps/도 좋아함- 그 블로그는 볼 때마다 놀라움. 이 글을 읽으면서도 Bartosz가 쓸 법한 글이라고 생각했는데, 실제로 이미 만들었음
그 인터랙티브 그래픽은 이길 수가 없음
- 그 블로그는 볼 때마다 놀라움. 이 글을 읽으면서도 Bartosz가 쓸 법한 글이라고 생각했는데, 실제로 이미 만들었음
- 훌륭함. 작성자의 기술 배경은 모르지만, 방대하고 복잡한 GPS 세계의 세부를 풀어내는 것 자체가 엄청난 성취임
분석을 돕고 최종 해법을 구현하는 소프트웨어까지 만들어낸 능력과 결합해 멋진 프로젝트가 됐음. GPS를 공부하고 몇 년간 직업적으로 다뤄 왔지만 아직도 모든 걸 알지는 못함. 코드를 들여다보는 게 기대됨- 좋은 말에 정말 감사함. 독학 프로그래머이고 RF나 전기전자 배경이 없어서, 이 프로젝트는 꽤 큰 도전이었고 때로는 답답한 학습과 실험이 많이 필요했음
돌아보면 정말 잘한 일이라고 느낌. 이제 RF라는 영역을 훨씬 더 손에 잡히게 이해하고 도구처럼 쓸 수 있게 된 것 같음. 컴퓨터 자체에서 좋아하는 부분들이 떠오름 - 민간인이 P 코드를 쓰지 못하게 막는 유일한 것은 치핑 시퀀스 값을 모른다는 점이라는 대목이 흥미로움
P 코드를 생성하는 공식이 공개돼 있다면, 민간 GPS 수신기도 C/A 코드와 똑같은 기법으로 잠금할 수 있을 것임
전체를 다 읽지는 못했지만 궁금함. 더 정밀한 GPS를 위해 P 코드 치핑 시퀀스를 무차별 대입하거나 다른 요령으로 얻는 방법이 있을까?
- 좋은 말에 정말 감사함. 독학 프로그래머이고 RF나 전기전자 배경이 없어서, 이 프로젝트는 꽤 큰 도전이었고 때로는 답답한 학습과 실험이 많이 필요했음
- 매우 인상적임. GPS가 놀라울 정도로 영리한 공학적 성취라는 작성자의 말에 전적으로 동의함
GPS 개발 이야기에 관심 있다면 Richard Easton의 “GPS Declassified”가 흥미롭게 풀어낸 책이었음- Amazon 리뷰를 읽다가 Hedy Lamarr의 기여가 빠졌다는 걸 알게 됐음. 매우 흥미롭고 인상적인 인물임: https://en.wikipedia.org/wiki/Hedy_Lamarr
- 놀라움. 몇 년 전 이것을 조사하게 된 계기도 정확히 같았음
GPS는 비행기 모드에서도, 문자 그대로 비행기 안에서도 작동함. 셀룰러 서비스나 Wi-Fi 없이도 동작함. 미국이 GPS 위성군을 통제하고, 필요할 때 특정 지역의 GPS를 끌 수 있고 실제로 그렇게 한 적도 있음. 그래서 다른 나라들이 자기 GNSS 위성군을 쏘아 올리게 됐음
GPS 위성은 위치를 내려보내는 게 아니라 시간만 내려보낸다는 점도 재미있음. 휴대폰으로 받은 데이터로 이걸 해보는 건 정말 재미있는 연습이고, 휴대폰은 위성과 직접 연결돼 있음
덧붙이면 최근 별을 이용한 항법의 기본 원리를 배웠는데, 완전히 다른 메커니즘이지만 역시 정확한 시간을 유지하는 데 크게 의존한다는 대칭성이 재미있었음- GPS가 비행기 모드에서도 작동하고 데이터 서비스나 Wi-Fi 없이도 된다는 오해는, 첫 GPS 경험이 스마트폰이었던 사람들에게서 나오는 것일 수 있음
내가 처음 쓴 몇 대의 GPS 수신기는 데이터 연결이 전혀 없는 독립형 장치였기 때문에, GPS에 데이터가 필요 없다는 건 당연하게 느껴짐 - GPS 위성이 위치를 보내지 않는다는 말은 정확하지 않음. 더 정확히는 전체 위성군의 대략적 위치인 알마낙과 자기 자신의 정밀 위치인 에페머리스를 보냄
다만 휴대폰 같은 장치는 GPS 데이터 전송을 기다리는 것보다 훨씬 빠르기 때문에 보통 다른 출처에서 그 데이터를 받음 - 데이터 서비스가 없으면 GPS가 멈춘다고 믿으려면 GPS가 무엇인지에 대한 정신 모델이 꽤 잘못돼 있어야 하지 않나 싶음
- 미국이 GPS 위성군을 통제하긴 하지만, 전 세계 위치 결정 시스템이 그것뿐인 것은 아님. EU, 중국, 인도, 러시아도 각자의 시스템을 갖고 있음
- GPS 위성이 보내는 알마낙 데이터는 사실상 위치 정보임. 말 그대로 위치는 아니지만, P 코드도 말 그대로 시간은 아님
특정 지역의 GPS를 마음대로 끌 수 있다는 기능은 내가 이해하기로는 더 최신 GPS 위성에는 더 이상 없고, 어쩌면 현재 운용 중인 모든 위성에도 없을 수 있음
- GPS가 비행기 모드에서도 작동하고 데이터 서비스나 Wi-Fi 없이도 된다는 오해는, 첫 GPS 경험이 스마트폰이었던 사람들에게서 나오는 것일 수 있음
- 지도 앱이 비행 중에도 작동한다는 걸 알고 있고, 그래서 비행 중 아래 지형을 사진으로 찍는 데 사용함
iPhone을 쓰면 착륙 후 그 사진들이 촬영 당시 위치와 연결됨. 덕분에 우연히 본 흥미로운 지형을 나중에 찾을 수 있음 - 이 글이 1인칭의 학습 여정으로 실시간 진행되듯 구성된 점이 정말 좋음
사용한 검색어와 내적 독백까지 담겨 있음. 단순히 물고기 잡는 법을 가르치는 게 아니라, 직접 낚시 기계를 만들 부품을 어떻게 구하는지 보여주는 식이라 내가 가장 좋아하는 유형의 튜토리얼임- 이런 방식으로 글을 쓰는 건 어느 정도 취약함을 드러내는 일임. 내 무지의 모양과 한계, 그리고 학습해 간 경로가 드러나기 때문임
그래도 그런 접근을 좋게 봐줬다니 정말 고마움
- 이런 방식으로 글을 쓰는 건 어느 정도 취약함을 드러내는 일임. 내 무지의 모양과 한계, 그리고 학습해 간 경로가 드러나기 때문임
- GPS 창설에 관여한 핵심 인물들을 인터뷰한 다큐멘터리 The Lonely Halls Meeting이 YouTube에 있음: https://youtu.be/Z5N4CqJLAhQ?si=lvaQZv-WG3ab_gEI