1. Show HN: Building a GPS receiver (axleos.com)
本文详细介绍了作者从零开始构建GPS接收器的过程,涵盖了GPS信号的基本原理、所需硬件、关键技术挑战以及实现解码的核心方法。
GPS信号特性
- 普遍存在但极其微弱:GPS信号由约30颗卫星广播,7x24小时覆盖全球。其发射功率相当于一颗普通灯泡,但经过2万公里传输后,信号强度会衰减至远低于环境噪声水平(例如比手机信号弱1亿倍)。
- 免费且隐蔽:GPS系统是广播式的,卫星只管发送,用户接收无需授权,且卫星无法知道谁在接收。
- 核心处理必须在本地:GPS定位必须依赖接收器本地测量电磁波,无法像云服务一样外包计算。
接收硬件与设置
- 使用软件定义无线电(SDR):作者购买了可调谐的SDR设备来接收GPS的L1频段(1575.42 MHz)信号。
- 关键配置:需要开启SDR的偏置三通为天线供电,启用自动增益控制放大微弱信号,并使用IQ校正来消除因SDR电路产生的中心频率尖峰干扰。
解码的核心挑战与原理
- 信号淹没在噪声中:GPS信号强度比噪声低约50dB,直接解码看似不可能。
- 关键技巧——扩频技术:
- 每颗卫星广播一个独特的、已知的伪随机噪声(PRN)码序列,即C/A码,码率为1MHz。
- 接收器本地生成完全相同的PRN码,并与接收信号进行相关运算。
- 由于噪声是随机的,在多次叠加平均后会趋于零,而确定的PRN码信号则会不断累积,从而从噪声中“浮现”出来。
- 码分多址(CDMA):每颗卫星使用不同的PRN码,使接收器能同时区分来自多颗卫星的信号。
- 数据调制:低速的导航数据(50比特/秒)被调制到高速的PRN码上进行传输。
信号捕获(Acquisition) 这是确定天空中哪些卫星可见的第一步。
- 目标:通过对接收到的信号与所有可能的PRN码进行大量相关运算,寻找强相关峰值,从而识别出可见卫星,并获取其伪码相位(时间延迟) 和多普勒频移(相对速度) 的粗略估计。
- 搜索空间:需要在三个维度上搜索:
- 卫星PRN编号(共32颗)。
- 多普勒频移(因卫星高速运动,预期范围在±5kHz)。
- 本地PRN码的相位偏移。
- 优化方法:作者采用频域相关方法,将PRN码和接收信号转换到频域,可同时高效处理相位偏移和多普勒频移搜索。并使用二分搜索来快速定位最佳多普勒频移,提高效率。
总结与展望 作者成功构建了一个能够检测天空中可见GPS卫星及其粗略信号参数的接收器,完成了定位流程的第一大步。文章预告后续内容将介绍如何“跟踪”这些微弱信号并最终计算出位置。