概述
大话卫星导航中的信号处理系列文章——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码生成GPS信号L1C/A信号的构成C/A码信号的生成的全部内容,希望文章能够帮你解决大话卫星导航中的信号处理系列文章——GPS信号以及C/A码生成GPS信号L1C/A信号的构成C/A码信号的生成所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复