开源夏令营《基于HackRF开发GPS信号仿真模拟器》工作总结(三)

2014.07.21-2014.07.27,项目已经开展三周了,接下来就要面对中期检查了。实验室已经放假了,现在只剩下为数不多的几个人了,其中包括我。

这周主要解决的问题

这周主要解决的问题分为三个方面:信号传输时间、导航电文和通道数据。

卫星信号传输时间的计算

卫星信号的传输时间是整个模拟器的核心。它不仅涉及卫星位置的计算,更涉及坐标系的转换,以及迭代。而且传输时间直接决定了码相位的大小,因此在传输时间上差一点,都会对最后的结果产生比较大的影响。(CA码一个码片,产生的误差大致是3e8m/s*1us=300m。)查找了一些有关信号传输时间的计算的资料,其中卡尔加里大学的一篇论文《IF GPS Signal Simulator Development and Verification》对自己的启发很大,对其他的有关章节进行了翻译,地址: GPS模拟器中的传输时间计算。
编写了卫星传输时间计算的函数,主要是一个迭代过程,在卫星信号的发射时刻和卫星信号的接收时刻两者的位置关系上进行迭代,直到二者的误差在可接受范围内,可认为结果可用。

GPSL1导航电文的生成

按照GPSL1的ICD文件,对导航电文进行了生成。L1的导航电文是层次结构:一个超级帧为12.5分钟,分25页播发,每页是一帧;一帧为30s,包含5个子帧;每个子帧占据6s,包含10个字,这10个字的每一个都是由30bit组成的。其中每一帧的前三子帧包含了星历信息,是导航定位所需要的。而后两子帧则包含了历书信息,主要是电离层参数和UTC参数。
导航电文生成函数也按照这个层次进行编写。首先对于星历中的数据,按照相应的比例因子计算得到中间值,再将中间值转换为补码形式(补码形式是GPSICD中注明的),然后按照ICD说明注到每一个字中。同时,要对生成的数据进行奇偶校验,奇偶校验利用前一个字和当前字的前24bits,来得到当前字的最后6bits。同一子帧间的的字与字之间的是存在关联的,而每子帧的第一个字在校验时,认为上一个字为全0的30bits数据,即不同子帧的字之间在校验上不存在关联的。这是通过无信息位的添加实现的,对于某些字(一般是每子帧的第10个字)的23、24位,一般要求是特殊值,以保证这个字的最后事两位29、30为0,不影响下边字的校验。
因此,导航电文生成部分的函数就包括:genmessage、factor、paritycheck和noni,同时声明了新的结构体frame和subframe。

通道数据的生成

通道数据是用为在软件和硬件之间的进行数据传输用的。我们设定了最大的通道数为MaxChanNum(程序中为12),然后将与硬件底层相关的PRN、电文Frame和码相位等参数编写进这一结构体中,而硬件只需要从通道数据结构体中提取数据,不需要参与其他数据的生成工作,即二者是相互隔离,只通过通道数据进行联系的。
在通道数据的生成中,有一个原则:对于一直可见的卫星,其占据的通道不变;而对于新的可见星,它总是优先占据空的并且索引小的通道。

总结

本周主要完成了卫星传输时间的计算、导航电文的生成以及通道数据的生成。其中,传输时间是我所认为的模块器的重点,翻译了一篇文献中的有关章节;学习了GPS ICD中有关导航电文的说明,知道了每一帧中每一个字的每一比特所代表的信息;同时思考了软硬件的数据传输的解决方法,通过通道数据这一结构体,将二者隔离开,同时又在数据上有联系。
PS:这周已经拿到了HackRF板子,正在学习其基本的操作使用方法。暂时未整理出思路,所以没有写在报告里。
——————————————————
以下是有关项目要求和工作进展的信息——
项目要求: 基于HackRF开发GPS信号仿真模拟器
项目在csdn code上的地址: https://code.csdn.net/sywcxx/gps-sim-hackrf

你可能感兴趣的:(电文生成,GPS信号模拟器,信号传输时间)