绪论
GPS目前处于良好的运行状态,并满足20世纪60年代所提出的最佳定位系统标准。这个系统向有适当接收设备的全球范围内的用户提供精确、连续的三维位置和速度信息。 GPS也向全球广播世界协调时(UTC)。组成卫星星座的24颗卫星被安排在6个轨道平面上,即每个平面上4颗。一个分布在全世界的地面控制监视网监视着卫星的运行状态。卫星用叫做码分多址(CDMA)的技术在两个频率上广播测距码和导航数据。 也就是说, 系统只使用两个频率, 称为L1(1575.42 MHz)和L2(1227.6 MHz)。
每颗卫星都在这两个频率上发射,但所有的测距码与其他卫星所使用的不一样。导航数据提供给接收机, 以确定卫星在发射信号时的位置,而测距码使用户接收机能够确定信号的传输延时,从而确定卫星到用户的距离。 这种技术要求用户接收机也包含一个时钟。利用这种技术来测量接收机的三维位置时,要求测量接收机到4颗卫星的TOA(信号到达时间)距离,如果接收机时钟已经是与卫星时钟同步的,便需要3个距离测量值。因此,为测量用户的纬度、经度、高度和接收机相对于内在系统时的偏移,需要有4个测量值。如果系统时或高度已准确获知, 便只需要4颗以下的卫星。
GPS系统除定位服务外,同时也能利用GPS卫星具有的高稳定性原子时钟为用户提供授时服务,由此用户可以计算出自身的速度。 这些服务被称为标准的PVT(位置、速度、时间的英文缩写)服务。GPS提供两种精度不同的PVT测量: 标准定位服务(SPS)和精密定位服务(PPS)。SPS是为民用服务的, 而PPS是为美国军方用户和特定的政府部门用户服务的,两者精度不同。
1 课题意义及研究方向
目前,国内大多数GPS接收机都是在国外定位模块的基础上进行二次开发,但是随着GPS定位广泛的应用,要求我们全面透彻地研究GPS定位系统,为我国的定位导航应用作出贡献。为了满足更加高的定位要求,获得更加高的可靠性,对GPS接收机来说,要能兼容各种定位导航系统而且考虑到算法改进的成本问题,相比较于现有的GPS接收机需要更换硬件设备,GPS软件接收机只需改动软件,具有更强的灵活性和开放性。
1.1 航空领域的应用?
GPS在航空领域的应用推动着全球卫星系统(GNSS)的发展, 它可以提供从航路直到精密飞行轨道阶段(起飞、 降落)的引导。
1.1.2 空间运载引导
从1992年起,GPS接收机便被用于TOPEXPOSEIDON卫星上, 这种卫星是用于研究海洋环境的。
1.1.3 海洋应用
商业和娱乐海事企业都已在利用GNSS。从洋面旅行到内河航路,尤其是艰险的水域,所有船舶的导航都得到了提高。
1.1.4 陆用GPS
测绘行业依靠差分GPS已经获得毫米级的测量精度。铁路部门利用类似的技术获得相对于附近的铁轨组的火车位置。 GPS是智能交通系统(ITS)的关键组成部分。
1.2 论文内容安排
本文所做的工作是利用Matlab软件搭建GPS仿真平台。本文阐述了C\\A码的生成原理与GPS信号的生成原理,捕获和跟踪的原理,GPS信号的捕获和跟踪。利用FFT相关法进行时间和频率串行搜索,。然后,利用MATLAB仿真环境开发信号仿真平台,并利用此仿真器实现GPS信号的仿真,并对所提出的信号的捕获和跟踪算法进行了仿真。
6 2 GPS的CA码捕获
2.1 介绍
CA码(Coarse Acquisition Code)是用于粗测距和捕获GPS卫星信号的伪随机码。它是由两个10级反馈移位寄存器组合产生的,其产生原理如图2-1所示。
图2-1 CA码发生器
2.2 CA码起始点的精确性
输入信号以5 MHz的频率数字化,或者说,每个数据点相隔200 ns。这样的时间分辨
8-9
率,与之相应的距离分辨率大约是60 m(3×10×200×10),这个数值对确定用户位置来说不够精确。由于GPS信号与接收机数字时钟不同步,所以某个特定数据点不可能完全匹配CA码起始点。在最坏情况下,即CA码的起始点落在两个数据点中间,CA码的数字化起始点与真实值相差100 ns。捕获过程只能在数字频率下测量出CA码起始点的精确性,而我们需要的是测得CA码起始点极其精确。
传统跟踪环,本地生成CA码每毫秒更新一次。更新的目的是生成CA码来匹配输入信号的CA码, 并且生成一个载波频率来匹配输入信号的载波频率。这里仅讨论CA码的匹配问题。例如,如果实际的CA码的起始点准确落在两个数据点之间,完全可以产生一个本地CA码,准确地匹配这一点。但是,由于噪声的影响,本地生成的CA码只能接近目标值,不会完全达到目标值。
在BASS方法跟踪过程中,本地产生的CA码是固定的,第一个数据点通常从CA码的起始点开始,且这个码元将一直使用。 在最糟情况下,本地产生的CA码和数字输入之间相差100 ns。 可以采用两种方法,以较高的测时精度来找出输入信号中CA码的起始点。?
一个方法是利用三种信号:即时码、超前码和滞后码。 本地产生的CA码看做即时码。利用这个信号以固定间隔产生超前码和滞后码。 CA码以5 MHz的频率生成即时码。CA码为1 ms长,产生5000个数据点,超前码和滞后码通过平移即时码获得。
图6-9示意了即时码,数据点从1到5000,任意选择平移两个数据点,向前平移两个数据
另一个方法是利用五种信号:一个即时码, 两个超前码和两个滞后码。 将即时码移动四个数据点产生附加的一个超前码和滞后码。
2.2 Matlab仿真CA码的产生及调制
2.3 MATLAB仿真CA码的产生
2.3.1 最大长度序列(MLS)和G2的输出及其延迟时间的检验?
该仿真程序的原理性描述见图4-5, 运行结果见图4-9。 其完整的M程序代码如下: ?
%产生CA码的方法一?
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%?
k1=2; k2=6; delay=5; %将10号寄存器的 Reg=-ones(1,10); %定义参数k1、 k2以及延迟? %定义寄存器1~10的初始值都为-1?
%通过循环产生长度为1024的MLS序列以及G2序列? for j=1:1023;? MLS(j)=Reg(10); %将10号寄存器的输出作为 MLS 输出 modulo=Reg(2)*Reg(3)*Reg(6)*Reg(8)*Reg(9)*Reg(10);?
7 Reg(2:10)=Reg(1:9);? Reg(1)=modulo;?
g2(j)=Reg(k1)*Reg(k2);
%将参数k1和k2所代表的寄存器模二相加后作为G2 输出? end?
%将G2与MLS进行延迟检验?
if MLS==g2([delay:1023 1:delay-1]) ? disp(′OK′)? else?
disp(′not match′)? end?
%在G2序列中找出-1并转换为0, 找出1并转换为1 ind1=find(g2==-1);? ind2=find(g2==1);?
g2(ind1)=ones(1,length(ind1));? g2(ind2)=zeros(1,length(ind2));? temp=g2(1:120);?
x(1)=0;Show(1)=temp(1);? P=2;?
%下面的循环是为了将结果显示成方波形式? for i=2:length(temp)?
if ((temp(i)==temp(i-1)))? x(P)=i-1;?
Show(P)=temp(i-1); x(P+1)=i-1+0.01;? Show(P+1)=temp(i);? P=P+2;? else?
Show(P)=temp(i);? x(P)=i;? P=P+1;? end? end?
%画出仿真结果图? plot(x,Show);?
axis([0 length(x)-60 -0.1 1.1]); ? grid;
图2-3 最大长度序列(MLS)和G2的输出
2.3.2 CA码的产生
该程序对CA码的产生进行了仿真,运行结果显示了第4颗卫星产生的CA码,如图4-10所示。仿真程序完整的M程序代码如下:
2.3.3 程序代码
%产生CA码的方法二?
8 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%? %本程序要求输入卫星的编号, 在图4-10中显示的是第4颗卫星产生的CA码, 即输入为4?
svnum=input(′enter the salite number = ′);?
g2s = [5;6;7;8;17;18;139;140;141;251;252;254;255;256;257;258;? 469;470;471; ...?
472;473;474;509;512;513;514;515;516;859;860;861;862];? g2shift=g2s(svnum,1);?
reg =-1*ones(1,10); %将1~10号寄存器的初始值设为-1? %将10号寄存器的输出作为G1码?
%并将10号寄存器与3号寄存器输出模二相加后反馈给1号寄存器? for i = 1:1023,? g1(i) = reg(10);?
slave1 = reg(3)*reg(10);? reg(1,2:10) = reg(1:1:9);? reg(1) = slave1;? end?
reg = -1*ones(1,10); %将1~10号寄存器的初始值设为-1? %将10号寄存器的输出作为G2码?
%并将10、 9、 8、 6、 3、 2寄存器输出模二相加后反馈给1号寄存器? for i = 1:1023,? g2(i) = reg(10);?
save2 = reg(2)*reg(3)*reg(6)*reg(8)*reg(9)*reg(10);? reg(1,2:10) = reg(1:1:9);? reg(1) = save2;? end?
g2tmp(1,g2shift+1:1023)=g2(1,1:1023-g2shift);? g2 = g2tmp;
%G1和G2卷积后得到CA码? ss-ca = g1.*g2;? ca = ss-ca;?
%在CA码的序列中找出-1并转换为0, 找出1并转换为1? ind1=find(ca==-1);? ind2=find(ca==1);?
ca(ind1)=ones(1,length(ind1));? ca(ind2)=zeros(1,length(ind2));? temp=ca(1:102) ;?
%下面的循环是为了将结果显示成方波形式? x(1)=0;Show(1)=temp(1);? P=2;?
for i=2:length(temp)?
if ((temp(i)~=temp(i-1)))? x(P)=i;? Show(P)=temp(i-1);?
9 x(P+1)=i+0.01;?
Show(P+1)=temp(i);? P=P+2;? else?
Show(P)=temp(i);? x(P)=i;? P=P+1;? end? end?
%画出仿真结果图? plot(x,Show);?
axis([0 length(x)+5 -1 1.5]); ? grid;
2.3.3 模拟产生代码波形
图2-4 第4颗卫星产生的CA码
3 GPS卫星信号的捕获
3.1 概述
为了跟踪和解码GPS信号, 首先要捕获到GPS信号。将捕获到的GPS信号的必要参数立刻传递给跟踪过程,再通过跟踪过程便可得到卫星的导航电文。GPS卫星处于高速运动中,因此,其频率会产生多普勒频移。为覆盖高速卫星预期中的所有多普勒频率范围,捕获方法覆盖的频率范围必须在±10 kHz之内。针对某个特定的卫星信号, 捕获过程就是要找到CA码的起始点,并利用找到的起始点展开CA码频谱,一旦复现了CA码的频谱, 输出信号将变成连续波(Continuous Wave, CW),于是便得到其载波频率。也就是说,捕获过程就是要获得输入信号的CA码的起始点和载波频率,然后传递给跟踪过程。 ?
3.2 卫星信号捕获的考虑 3.2.1 捕获时的最大电文长度
CA码长1 ms,那么至少要用1ms的电文来捕获,甚至只用1 ms的电文来捕获时,都可能发生导航电文相位偏移。因此,为了保证捕获电文中不含有数据偏移,需要用两组连续的电文来捕获, 这个电文最大长度是10 ms。如果使用两组连续的10 ms电文来捕获, 就保证了在某一组电文中不含相位偏移。
限制电文长度的第二个因素是CA码的多普勒效应。
3.2.2 捕获中的频率步长
捕获时的另一个考虑因素是捕获中剥离载波所需的频率。步进频率的大小与捕获中的电文长度紧密相关。如果输入信号与本地混频信号相距1个周期,它们两者没有相关性;如果两者小于1个周期, 则它们有部分相关性。解决信号周期和步进频率问题的一个简单方法是频率相离与电文长度成反向关系。
可得出如下结论:捕获中的操作执行次数与总的数据点并不是成线性比例关系,当电文长度从1 ms上升到10 ms时,电文长度上升10倍,频率点数目也上升了10倍, 捕获所需的操作次数上升了不止10倍。因此,实际捕获时, 如果强调捕获的速度的话,电文长度需保持在最小值。 执行次数的增加,取决于实际捕获所用的方法,下面将讨论具体的捕获方法。
3.3 GPS卫星信号的捕获方法
10