概述
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
大话卫星导航中的信号处理系列文章——GPS信号L1频点的中频数据生成与验证
- 需求
- 扩频码的生成
- 其他
- 验证
需求
这篇文章,主要记录我的一些设计过程。实现一个GPS L1频点的C/A码或者P码的中频数据,为我后面写《从零开始研发GPS接收机连载》文章做一些准备。
主要实现下面两个功能,以作备用:
1、 能够生成指定卫星号的GPS L1频点的C/A码或者P码的中频数据
2、 生成的中频数据可以指定时间长度
我想想我正好可以趁此回顾一下之前的知识,我正好不是一直在总结之前的一些知识么。不过以前都没有说要生成指定长度的数据,一般顶多1-2s也就差不多了,对于捕获跟踪而言也就差不多了。这点确实还耗费了不少时间。不过呢,搞出来了也算是自己的一个积累吧,也是值得的。
简单的说一些细节,以便我自己能够快速回忆。
扩频码的生成
C/A码的生成自然不必说了,还是比较简单的。就是1023个码片1ms一个周期
P码的4个移位寄存器其自然周期为4095,均做截断并按照一定的规律周期运行。X1A和X1B被截短为4092个码片一个周期,X2A和X2B被截短为4093个码片一个周期。X1序列按如下规律运行。X1A按其4092个码片为1周期,运行整3750个周期。X1B按4093个码片为1周期,运行完成其自身的3749个周期,然后停止推送待X1A运行完结后一同复位重新开始。X1B在完成其3749个周期后,需停止推送343个码钟,便载入初相重新运转。
同样,X2序列中的X2A和X2B的时序关系与X1序列中的X1A和X1B的规律一样,只是X2A到一个3750周期结束时,X2A和X2B同时停止推送,待37个码片时钟后重新开始启动。即X2A需停止推送37个码钟,X2B需停止343+37个码钟,再重新载入各自的初相重新运转。X2由X2A和X2B异或而得,X1由X1A和X1B异或而得。X1和X2序列异或得到P码序列。每颗卫星使用该序列的一个星期。在X2序列的输出位置使用移位寄存器来对X2序列进行i个码片的延迟,就形成了37种不同的P码序列。
X1A是1.5s为周期的,包含15345000个码片
X1B是1.5s为周期的,包含15345000个码片
而
A(i) = X1A(12);
B(i) = X1B(12);
X1(i) =mod(A(i)+B(i),2);
这里我们为了处理方便,我们预先将X1的15345000码片存在一个.mat文件中;
类似的,
X2A是15345000 + 37码片为周期的
X2B是15345000 + 37码片为周期的
C(i) = X2A(12);
D(i) = X2B(12);
X2(i) = mod(C(i)+D(i),2);
这里我们为了处理方便,我们预先将X2的15345000+ 37码片存在一个.mat文件中;
因此在我们的主程序中,就可以直接导入
X1=importdata('my_X1.mat');
X2=importdata('my_X2.mat');
X2还需要进行移位,移位的多少和Z计数以及PRN号有关
X2’ = [zeros(1,PRN), zeros (1,z_in*37)]
Z_in 是1.5s一个,一周一共有403200个,因此计数范围为0~403199
PRN是0-36(这个我还要确认下0-36还是1-37?有点模糊了,回头确认下)
P1(i) = mod (X1 (i) + X2’ (i),2);
其他
1、为了能够产生无限长的数据,而不让内存爆掉,每生成1000000个点存储一次,并且是追加存储,因此要及时删除原文件,或者换个文件名,否则同样的文件名文件会一直追加到尾巴上。
2、电文、扩频码等都是按照nco的形式进行采样,一个点一个点的生成,保证相位的连续性。
输出调制信号过程
验证
主要是为了验证信号相位连续性,P码这个也没办法仿真验证,只能说之前我实际接收过,所以是经过验证的了。
为了验证CA码和P码的正确性,均进行捕获跟踪验证,都可以正常捕获跟踪,主要是为了证明信号相位是连续的,没有问题。
捕获结果:
跟踪解出数据码:
同时使用开源的 GNSS_SDR来验证,也是可以捕获到的。
设计文件存于百度网盘中,以备用
最后
以上就是喜悦外套为你收集整理的大话卫星导航中的信号处理系列文章——GPS信号L1频点的中频数据生成与验证需求扩频码的生成其他验证的全部内容,希望文章能够帮你解决大话卫星导航中的信号处理系列文章——GPS信号L1频点的中频数据生成与验证需求扩频码的生成其他验证所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复