MATLAB仿真GPS的毕业设计论文开题报告

更新时间:2024-05-06 15:27:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

(此文档为word格式,下载后您可任意编辑修改!)

前言

全球定位系统(GPS)是新一代的精密卫星导航定位系统。由于其全球性、全天候以及连续实时三维定位等特点,在军事和民用领域得到了广泛的发展。近年来,随着科学技术的发展,GPS导航和定位技术已向高精度、高动态的方向发展。

GPS卫星接收机属于卫星导航定位系统中的用户设备,主要用于接收卫星信号和电文,由无线电信号测定用户至卫星的距离,或多普勒频移等观测量;根据导航电文,计算观测卫星的位置和速度,根据观测量和卫星的位置、速度,解算出用户的位置和速度。

目前,国内大多数GPS接收机都是在国外定位模块的基础上进行二次开发,但是随着GPS定位广泛的应用,要求我们全面透彻地研究GPS定位系统,为我国的定位导航应用作出贡献。为了满足更加高的定位要求,获得更加高的可靠性,对GPS接收机来说,要能兼容各种定位导航系统而且考虑到算法改进的成本问题,相比较于现有的GPS接收机需要更换硬件设备,GPS软件接收机只需改动软件,具有更强的灵活性和开放性。

本文所做的工作是利用Matlab软件搭建GPS仿真平台。本文阐述了C\\A码的生成原理与GPS信号的生成原理,捕获和跟踪的原理,GPS信号的捕获和跟踪。利用FFT相关法进行时间和频率串行搜索,。然后,利用MATLAB仿真环境开发信号仿真平台,并利用此仿真器实现GPS信号的仿真,并对所提出的信号的捕获和跟踪算法进行了仿真。仿真结果表明,所做的仿真达到了预期设计的目标..??

1 目录

绪论

1.1 GPS系统概述

1.2课题意义及研究方向 1.3论文内容安排

第二章 GPS的CA码捕获 2.1介绍

2.2 CA码起始点的精确性

2.3 MATLAB仿真CA码的产生

2.3. 1最大长度序列(MLS)和G2的输出及其延迟时间的检验 2.3.2 CA码的产生

第三章GPS卫星信号的捕获 3.1概述

3.2卫星信号捕获的考虑

3.2.1 捕获时的最大电文长度 3.2.2 捕获中的频率步长

3.3 GPS卫星信号的捕获方法 3.3.1 传统捕获方法

3.4 GPS卫星信号捕获的例子 3.5 关于捕获的一些子程序 3.5.1 随机编码过程仿真 3.5.2 获取导航信息的仿真

第四章 GPS信号接收机仿真系统概述 4.1 GPS信号接收机 4.1.1 GPS信号接收机架构

4.1.2 GPS信号接收机的工作原理 4.2 GPS载波相位测量定位 4.2.1 GPS载波相位测量 4.2.2 波数和整周跳变 4.2.3 表4-1 波数解算举例 第五章 GPS信号的跟踪 5.1 目的

5.2 GPS信号跟踪 5.2.1 载波和码元跟踪

5.2.2 利用锁相环跟踪GPS信号 5.2.3 二阶锁相环

5.3 跟踪过程的高测时精度

5.3.1 通过理想相关输出获得高测时精度 5.3.2 通过曲线拟合获得高测时精度 第六章 GPS卫星导航数据定位 6.1目的

6.2几何定位及架构

6.3. 卫星数据GPSsignal

2 6.3.1卫星数据分析

6.3.2卫星数据分析程序代码 第七章 总结和展望

3 基于METLAB的GPS全球定位系统关键技术仿真

摘 要

全球定位系统(GPS)是新一代的精密卫星导航定位系统。由于其全球性、全天候以及连续实时三维定位等特点,在军事和民用领域得到了广泛的发展。近年来,随着科学技术的发展,GPS导航和定位技术已向高精度、高动态的方向发展。

GPS卫星接收机属于卫星导航定位系统中的用户设备,主要用于接收卫星信号和电文,由无线电信号测定用户至卫星的距离,或多普勒频移等观测量;根据导航电文,根据观测量和卫星的位置、速度,解算出用户的位置和速度。

本文所做的工作是利用Matlab软件搭建GPS仿真平台。本文阐述了C\\A码的生成原理与GPS信号的生成原理,捕获和跟踪的原理,GPS信号的捕获和跟踪。然后,利用MATLAB仿真环境开发信号仿真平台,并利用此仿真器实现GPS信号的仿真,并对所提出的信号的捕获和跟踪算法进行了仿真。仿真结果表明,所做的仿真达到了预期设计的目标??

【关键词】GPS导航 定位 捕获 跟踪 MATLAB仿真

4 Simulation of GPS global positioning system key

techniques based on the METLAB

Abstract

Global positioning system (GPS) is a new generation of salite navigation and positioning systems. Due to its global, around-the-clock and continuous real time three dimensional positioning and so on, widely used in the field of development in military and civilian. In recent years, with the development of science and technology, GPS navigation and positioning technology to , and positioning system devices, mainly used for reception of salite signals and messages, determination of users by radio signals to a salite distance, or Doppler shift measurements under navigation message, according to the measurements and salite location, speed, and calculate the position and speed of the user. This work is done by the use of Matlab software to build GPS simulation platform.

This article expounded the C\\A principles of code generation and the generation of GPS signal theory, principles of acquisition and tracking, GPS signal acquisition and tracking. Then, using MATLAB simulation environment to develop signal simulation platform and simulation of GPS signal using the emulator, and on the proposed signal acquisition and tracking algorithms for the simulation. Simulation results show that the design of the simulation to achieve the desired goal……

【Key words】GPS navigation Locate Capture Track MATLAB simulation

5

绪论

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

3.3.1 传统捕获方法

捕获的基本思想就是展开输入信号,找到载波频率。如果相位正确的CA码与输入信号相乘,输入信号将如图4-1中所示变成一个连续信号。图3-1中最上端是输入信号,这个信号是CA码编码的射频信号相位。中间的图表示CA码,其值在±1之间。 最下端的图是连续信号,代表输入信号与CA码的乘积,是一个连续信号,这个过程有时称做输入信号的CA码剥离。

图3-1CA编码的输入信号与本地CA码相乘

3.3.2 CA码数值分析

一旦输入变成连续信号,通过傅立叶变换可以知晓其频率。可以设置一个阈值,即一个门限来判断一个频率分量是否足够大。高于这个门限的最高频率分量就是我们要找的频率。

由于输入信号中CA码的起始点还未知,因此,必须先找到这个点。为了找到这个点,我们产生本地的一个CA码,将其数字化为5000个点,且与输入信号点对点相乘,对此乘积的结果进行FFT或DFT,可以找到其频率。通过这种方法,可以用时间分辨率为200 ns(15 MHz)和1 kHz的频率分辨率找出CA码的起始点。 如果使用10 ms的电文,因为信号只需要卷积1 ms,因此需要5000次操作。每次操作包含50 000个点对点乘积和50 000次FFT,

8

总共有1.25×10(5000×25 000)个输出结果。

3.4 GPS卫星信号捕获的例子

程序中所用到的输入电文在时域内的情形如图3-2所示。 输入信号看起来像噪声,其频率描绘可通过FFT求得,如图3-3所示。正如预料的,FFT变换后带宽是2.5 MHz,其频谱形状与射频链的滤波器形状相似,通过循环相关后如图3-4所示, 其中给出了6号卫星的CA码起始点,其起始点在2884。图3-5给出了相距1 kHz的21个频率分量,最高值发生在k=7处。从图3-6和3-7我们可以轻易地看出CA码的起始点和频率。由于输入电文是实际收集到的数据,精频的精确度就难以测定, 因为其多普勒频率未知。精频还取决于在下变频中用到的本地振荡器的频率精确性和采样频率的精确性。

图3-2 5000个输入数据点

图3-3 输入信号的快速傅立叶变换

图 3-4 6号卫星的CA码起始点

图3-5卫星6的展开的各个频率分量

对弱信号(24号卫星)执行捕获,如图4-6和图4-7所示。从图中我们很难判断CA 码的起始点和频率是否为正确值,需要通过另外的相关运算才能找出它们

图3-6 24号卫星的CA码起始点

图3-7 24号卫星的展开信号的频率分量

3.5 关于捕获的一些子程序 3.5.1 随机编码过程仿真

打开Matlab,新建一个MFile,输入以下的文本,保存为GenerateCode.m,并调试运行。可以单步或多步运行M文件。

11 %该程序仿真产生三组伪随机数, 模拟随机编码过程 close all; clear; clc;

t=0:5:1000;

%时间变量为1 s, 步长5 ms 

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

x1=rand(1,length(t)); %生成一组1*length(t)维的伪随机数

x1=round(x1); %将x1数组中的元素转换到与其最近的整数 index1=find(x1==0); %找出x1数组中为0的元素

x1(index1)=-ones(1,length(index1)); %返回一个index1长度的一维数组 

x2=rand(1,length(t)); x2=round(x2);

index1=find(x2==0);

x2(index1)=-ones(1,length(index1)); x3=rand(1,length(t)); x3=round(x3);

index1=find(x3==0);

x3(index1)=-ones(1,length(index1));

y1=zeros(1,1); y2=zeros(1,1); y3=zeros(1,1); %生成三个1*1的零矩阵,存放伪随机值

t1=zeros(1,1); t2=zeros(1,1); t3=zeros(1,1); %生成三个1*1的零矩阵,存放时间值

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 

%%%%%将生成的伪随机值存放到对应的矩阵中%%%%%%

y1(1)=x1(1); y2(1)=x2(1); y3(1)=x3(1); t1(1)=t(1);t2(1)=t(1);t3(1)=t(1); k=2;m=2;n=2; 

for i=2: length(t)

if (x1(i)==x1(i-1)) y1(k)=x1(i); t1(k)=t(i); k=k+1; else

y1(k)=x1(i-1); y1(k+1)=x1(i); t1(k)=t(i);

t1(k+1)=t(i)+0.01; %如果该时刻阶跃变化, 则右移0.01来记录 k=k+2; end

12 if (x2(i)==x2(i-1)) y2(m)=x2(i); t2(m)=t(i); m=m+1; else

y2(m)=x2(i-1); y2(m+1)=x2(i); t2(m)=t(i);

t2(m+1)=t(i)+0.01; m=m+2; end

if (x3(i)==x3(i-1)) y3(n)=x3(i); t3(n)=t(i); n=n+1; else

y3(n)=x3(i-1); y3(n+1)=x3(i); t3(n)=t(i);

t3(n+1)=t(i)+0.01; n=n+2; end end

%%%%%%画图说明产生的三组伪随机码%%%%% subplot(3,1,1); plot(t1,y1,′y′); grid on; 

subplot(3,1,2); plot(t2,y2,′y′); grid on; 

subplot(3,1,3); plot(t3,y3,′y′); grid on;

whitebg(′black′); 

%将三组伪随机值存放到新矩阵并传送到Workspace中, 方便以后调用数据% simin1=[t1;y1]′; simin2=[t2;y2]′; simin3=[t3;y3]′;

输入上面的文本后,运行得到如图5-29所示的伪随机码。 其结果还可以通过Workspace查看,之所以要传送到Workspace中, 是因为我们在后面的仿真中还要用到这些伪随机码。

13

图 3.8 模拟三组伪随机码的仿真示意图

3.5.2 获取导航信息的仿真

在这个仿真中,我们要得到卫星的导航信息,其中忽略了频率偏移,且卫星信号的数据是基于前面章节中得到的卫星数据,存放在GPSsignal.mat文件中。在运行程序之前, 我们必须将GPSsignal.mat中的数据传送到Workspace中。

clear; %清除所有的变量 clc; %关闭所有指令窗

close all; %关闭所有未隐藏的窗口

load GPSsignal.mat %从GPSsignal.mat中获得所有变量到Workspace中 %n=length(GPSsignal); 

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% SvNum=12;

%调用fGenerateCAcode3.m文件, 获得卫星编号为12的CA码 Temp=fGenerateCAcode3(SvNum);

index1=find(Temp==0); %找出CA码中的低电平, 形成列向量存放在index1中 Temp(index1)=-ones(1,length(index1)); %返回一个与index1相同长 度的一维数组

SinWave=sin([0:2*pi8:2*pi*78]); %产生一个步进2*pi8的正弦波

SinWave=single(SinWave); %将SinWave矩阵转换成单精度矩阵 GpsMatch=zeros(1,1); %生成一个1*1的零矩阵 SinWave=[SinWave SinWave SinWave SinWave SinWave]; 

GPSsignal.mat %生成一个5 ms的连续信号 for i=1:length(Temp)

GpsMatch=[GpsMatch Temp(1,i)*SinWave]; end

GpsMatch=GpsMatch(2:length(GpsMatch)); %生成本地匹配信号并去掉第一个元素 n=length(GpsMatch); m=50000; for i=1:m

Res(i)=GpsMatch*GPSsignal(1,i:i+n-1)′; 

%将本地生成匹配信号GpsMatch与GPSsignal循环卷积 end

plot(1:m,Res); %图示卷积的幅值 

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Res2=abs(Res);

for i=1:100 %该循环目的是找出Res中的最大值 [C I]=max(Res2); Res2(1,I)=0; Index(1,i)=I; end; 

14 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %下面是要找到GPS signal中的导航电文%

%方法是检验GPS signal(已被CA code调制过)的每个最大值处是否具有相位偏移% w=length(GpsMatch); m=1;

for i=Index(1,1):w:(length(GPSsignal)-w+1)

NavigationBit(m)=(GPSsignal(i:i+w-1)*GpsMatch′)w; m=m+1; end

NavigationCode=zeros(1,1);

NavigationCode(1,1)=NavigationBit(1,1); m=2;Count=0;

for i=2:length(NavigationBit)

if(NavigationBit(1,i)~=NavigationBit(1,i-1)) NavigationCode(1,m)=NavigationBit(1,i); m=m+1;

Count=0; else

Count=Count+1; if(Count>=5)

NavigationCode(1,m)=NavigationBit(1,i); m=m+1; Count=0; end end end

%%%%%我们已得到导航码NavigationCode,下面将它转化成数字%%%% NavigationCode=NavigationCode.abs(NavigationCode); index1=find(NavigationCode<0);

NavigationCode(index1)=zeros(1,length(index1)); Table1=[0 0 0 0; 0 0 0 1; 0 0 1 0; 0 0 1 1; 0 1 0 0; 0 1 0 1; 0 1 1 0; 0 1 1 1; 1 0 0 0; 1 0 0 1; 1 0 1 0; 1 0 1 1; 1 1 0 0; 1 1 0 1;

15

1 1 1 0;

1 1 1 1;];  Result=″; 

for i=1:4:length(NavigationCode)  TT=NavigationCode(i:i+3);

MatchTable=Table1(:,1:4)-[TT; TT; TT; TT; TT; TT;TT; TT; TT;TT; TT; TT;TT; TT; TT;TT]; MatchTable=sum(abs(MatchTable)′); TempChar=′0′;

BestMatch=find(MatchTable==min(MatchTable)); %用查表的方式将导航码NavigationCode转换成十六进制数 switch (BestMatch) case 1 

TempChar=′0′;  case 2 

TempChar=′1′; case 3 

TempChar=′2′; case 4 

TempChar=′3′; case 5 

TempChar=′4′; case 6

TempChar=′5′; case 7 

TempChar=′6′; case 8

TempChar=′7′; case 9

TempChar=′8′; case 10

TempChar=′9′; case 11

TempChar=′a′; case 12

TempChar=′b′; case 13

TempChar=′c′; case 14

TempChar=′d′; case 15

TempChar=′e′; case 16

TempChar=′f′;

16 otherwise end 

Result=strcat(Result, TempChar); %将Result与TempChar两行的字符连接到一起

end

Num1=([0:2*pi8:2*pi*78]); SinWave=single(SinWave); GPSsignal=zeros(1,1);

SinWave=[SinWave SinWave SinWave SinWave SinWave]; for i=1:length(Code2)

GPSsignal=[GPSsignal Code2(1,i)*SinWave]; end

GPSsignal=GPSsignal(2:length(GPSsignal)); %将卫星数据GPSsignal存入GPSsignal.mat文件中 save GPSsignal.mat GPSsignal

下面介绍两个调用的子函数fGenerateCAcode3和fGenerateNavigationData。 

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %子函数fGenerateCAcode3

function y=fGenerateCAcode3(svnum)

%将程序2改为子函数的形式, 输入为卫星编号, 输出为相应的CA码 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); for i = 1:100 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); 

Table1=[ 2 6;

3 7; 4 8; 5 9; 1 9; 2 10; 1 8; 2 9; 3 10; 2 3;

17 3 4; 5 6; 6 7; 7 8; 8 9; 9 10; 1 4; 2 5; 3 6; 4 7; 5 8; 6 9; 1 3; 4 6;]; for i = 1:100

save2 = reg(2)*reg(3)*reg(6)*reg(8)*reg(9)*reg(10); g2(i) = reg(Table1(svnum,1))*reg(Table1(svnum,2)); reg(1,2:10) = reg(1:1:9); reg(1) = save2; end

%将G1和G2卷积后得到CA码 ss-ca = g1.*g2; ca = ss-ca; ind1=find(ca==-1); ind2=find(ca==1);

ca(ind1)=ones(1,length(ind1)); ca(ind2)=zeros(1,length(ind2)); y=ca;

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %子函数fGenerateNavigationData

function y=fGenerateNavigationData(x1,y1,z1); %将传进的参数转换为十六进制数 x=x1;  y=y1; z=z1;

str1 = num2hex(x);  str2 = num2hex(y); str3 = num2hex(z); 

Table1=[0 0 0 0; 

0 0 0 1; 0 0 1 0; 0 0 1 1; 0 1 0 0;

18 0 1 0 1; 0 1 1 0; 0 1 1 1; 1 0 0 0; 1 0 0 1; 1 0 1 0; 1 0 1 1; 1 1 0 0; 1 1 0 1; 1 1 1 0; 1 1 1 1;]; TotalStr=[str1 str2 str3]; DataCode=zeros(1,1); l=length(TotalStr);

%将TotalStr中的数转换为ASCII码表中的数值 for i=1:l

temp=int8(TotalStr(i));  if(temp>58)

temp=temp-96+10; else

temp=temp-47; end 

DataCode=[DataCode Table1(temp,:)]; end

y=DataCode(2:length(DataCode)); 第七章 总结和展望

本文课题是“基于METLAB的GPS全球定位系统关键技术方针”,通过一些参考书了解GPS的基本原理,系统以及对计算机语言MATLAB的初步掌握。在论文中对GPS的一些关键技术也有所掌握,如GPS测量的一些基本知识时间测量值测距,利用参考坐标系和伪随机噪声确定位置,GPS载波相位的测定。天体坐标系和地球坐标系,世界时系统,GPS卫星运动以及GPS卫星运动和开普勒定律的关系,CA码的产生以及相关知识,CA码起始点的精确性。GPS卫星信号的捕获,卫星捕获方法,GPS卫星信号捕获的一些例子,GPS信号接收机电路,基本构成和一些基本知识,,GPS信号接收机仿真系统,GPS信号的跟踪 跟踪过程的高测试精度。

19

本文来源:https://www.bwwdw.com/article/v1tg.html

Top