大话卫星导航中的信号处理系列文章——GPS信号以及C/A码生成
2021/11/12 23:40:54
本文主要是介绍大话卫星导航中的信号处理系列文章——GPS信号以及C/A码生成,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
大话卫星导航中的信号处理系列文章——GPS信号以及C/A码生成
- GPS信号
- L1C/A信号的构成
- C/A码信号的生成
GPS信号
目前GPS信号一共有三个频点L1/L2/L3。
其中传统GPS信号就是 L1C/A和L1P和L2P 双频,
L1C/A和L1P是正交的,L2只有L2P而没有民用信号
L1C/L2C/L5C都是GPS现代化后新增的信号,L1M/L2M是新增的军用信号。GPS后续发展是这些新信号逐渐取代原来的旧信号,不过这个过程将相当漫长。
后面我们介绍最典型的L1C/A信号的构成。
L1C/A信号的构成
L1C/A信号由三部分组成。
1、载波
2、伪随机码,这里称为C/A码
3、电文,数据码
载波就是L1频率为1575.42MHz的载波信号,将伪码和数据调制到载波上发射出去。
C/A码是长度为1023个码片的伪随机序列,其设计具有良好的自相关和互相关特性,即自相关函数幅值大大高于互相关函数幅值。这个特性被用来识别不同的伪随机序列。C/A码自然也具有这个良好的特性。因此不同的卫星可以用不同的C/A码来区分。
电文,数据码包含周内秒,星历,历书等内容,用于定位解算。
C/A码信号的生成
C/A码的生成是我们进行接收处理的第一步,首先我们需要根据其定义用程序描述出来
根据GPS ICD描述,CA码发射发生器使用2个M序列构成,分别被称为G1序列和G2序列。每个卫星测距码信号使用的唯一C/A码序列就是通过将G1序列和一定抽头选择后的G2序列模2和(modulo-2 sum,其实就是异或运算(^,xor()),就是二进制加法)产生的。
每个M序列寄存器都是10Bit,则根据M序列性质,G1序列和G2序列的周期都是2^10-1=1023。两个序列模2和运算得到的Gold码周期也是1023,也就是书上到处说的1023个码片(CA Chip)。
由于Gold码周期是1023个码片,所以在1.023MHz时钟驱动下,一个周期信号长度(1023个码片)为1ms,即每隔1ms产生一个周期的全部1023个码片,每个码片持续时间长度为1ms/1023 ≈1us.
如下图是2个线性移位寄存器组,每个寄存器组是10bit,上本部分产生G1序列,下半部分产生G2序列,受GPS时钟控制。CA码时钟是1.023MHz。
输出的C/A码是G1的最后一级寄存器内容和G2抽头选择寄存器输出,进行模2和运算输出。
M序列的使用一般都是提供一个多项式,通过抽头控制;
G1和G2的初始相位设置为全1。根据GPS ICD中 PRN对应的抽头的描述可以得到以下matlab程序来生成1-32组C/A码
function [caCode] = prn_GPS_L1CA_Gen(prn); %10阶的移位寄存器G1和G2 %G1,G2寄存器初始化 regG1 = 1 * ones(1,10); regG2 = 1 * ones(1,10); %获取卫星PRN号码 snum = prn; %确定CA码的抽头选择 switch snum case 1 %1号星 m = 2; n = 6; case 2 %2号星 m = 3; n = 7; case 3 %3号星 m = 4; n = 8; case 4 %4号星 m = 5; n = 9; case 5 %5号星 m = 1; n = 9; case 6 m = 2; n = 10; case 7 m = 1; n = 8; case 8 m = 2; n = 9; case 9 m = 3; n = 10; case 10 m = 2; n = 3; case 11 m = 3; n = 4; case 12 m = 5; n = 6; case 13 m = 6; n = 7; case 14 m = 7; n = 8; case 15 m = 8; n = 9; case 16 m = 9; n = 10; case 17 m = 1; n = 4; case 18 m = 2; n = 5; case 19 m = 3; n = 6; case 20 m = 4; n = 7; case 21 m = 5; n = 8; case 22 m = 6; n = 9; case 23 m = 1; n = 3; case 24 m = 4; n = 6; case 25 m = 5; n = 7; case 26 m = 6; n = 8; case 27 m = 7; n = 9; case 28 m = 8; n = 10; case 29 m = 1; n = 6; case 30 %30号星 m = 2; n = 7; case 31 %31号星 m = 3; n = 8; case 32 %32号星 m = 4; n = 9; end %reg1存储移位寄存器regG1的1023点输出 for i= 1:1023 reg1(i) = regG1(10); %G1输出存储到reg1 temp = xor(regG1(3),regG1(10)); %移位寄存器G1的反馈 regG1(1,2:10) = regG1(1,1:9); %G1移位 regG1(1) = temp; %反馈 end %reg2存储移位寄存器regG2的1023点输出 for i= 1:1023 reg2(i) = xor(regG2(m),regG2(n)); %G2输出存储到reg2 temp1 = xor(xor(regG2(2),regG2(3)), regG2(6)); %移位寄存器G2的反馈 temp2 = xor(xor(regG2(8),regG2(9)), regG2(10)); temp = xor(temp1,temp2); regG2(1,2:10) = regG2(1,1:9); %G2移位 regG2(1) = temp; %反馈 end caCode = mod(reg1 + reg2 , 2); I = find(caCode == 0); caCode(I) = -1;
以上我们完成了GPS C/A码生成,走出了GPS信号处理的第一步。
这篇关于大话卫星导航中的信号处理系列文章——GPS信号以及C/A码生成的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23增量更新怎么做?-icode9专业技术文章分享
- 2024-11-23压缩包加密方案有哪些?-icode9专业技术文章分享
- 2024-11-23用shell怎么写一个开机时自动同步远程仓库的代码?-icode9专业技术文章分享
- 2024-11-23webman可以同步自己的仓库吗?-icode9专业技术文章分享
- 2024-11-23在 Webman 中怎么判断是否有某命令进程正在运行?-icode9专业技术文章分享
- 2024-11-23如何重置new Swiper?-icode9专业技术文章分享
- 2024-11-23oss直传有什么好处?-icode9专业技术文章分享
- 2024-11-23如何将oss直传封装成一个组件在其他页面调用时都可以使用?-icode9专业技术文章分享
- 2024-11-23怎么使用laravel 11在代码里获取路由列表?-icode9专业技术文章分享
- 2024-11-22怎么实现ansible playbook 备份代码中命名包含时间戳功能?-icode9专业技术文章分享