相关代码解读好像并不多,这是另一个博主的,内容比较详细。https://blog.youkuaiyun.com/weixin_43179259/article/details/116794856
本文仅介绍依据谢钢《GPS原理与接收机设计》对代码进行理解的关键内容,其中涉及的基本原理还是建议阅读书籍原文。
整套代码为单频GPS伪距中频数据处理,由中频卫星数据得到定位结果,属于软件接收机入门的基础,适合初学者学习,或者是用于借鉴完成一些课堂作业。
中频数据处理的总体流程划分为捕获、跟踪和定位,下文将分三个小节进行讲解。
目录
1.捕获
捕获对应代码中的acquisition.m函数;实现的功能是:粗略地估计可见卫星的载波频率和码相位,帮助接收机初始化跟踪环路;基本原理是:不同卫星信号基于码分多址设计,对应不同的伪随机序列/扩频码。将中频信号与本地生成的一定频率的载波和一定相位的C/A码(GPS系统的伪随机序列)的复制信号进行相关运算,遍历搜索可能的载波频率和C/A码相位,当本地生成的载波频率和C/A码相位与中频信号中的一致时,相关运算结果取到最大值,据此可以判断该卫星被捕获。
程序中采用的捕获策略是:并行码相位搜索捕获算法,原理如图 1,对应谢钢书P373。捕获需要遍历所有卫星、所有载波频率、所有C/A码相位,需要三重循环,这里利用并行码相位捕获,可以减少码相位的这重循环。数字中频信号分别与同频率的正弦和余弦载波混频,混频结果组成一个复数进行傅里叶变换,同时与C/A码傅里叶变换后复数共轭的结果相乘,最后进行傅里叶逆变换和取模,输出的取模结果表示在当前卫星号的C/A码和当前频率下对所有码相位的捕获结果。
程序中具体的并行码相位搜索捕获算法的伪代码实现如下:
For循环遍历每一颗GPS卫星
{
对当前卫星生成C/A码、进行FFT、取复数共轭
For循环遍历所有待捕获频率
{
对当前频率生成1ms时长的sin、cos序列与1ms时长的中频信号序列相乘
组合成复数序列进行FFT
两个FFT序列相乘
IFFT
存储当前频率遍历所有码相位的捕获结果
&n