【最新版】MATLAB仿真GPS的毕业论文开题报告 联系客服

发布时间 : 星期三 文章【最新版】MATLAB仿真GPS的毕业论文开题报告更新完毕开始阅读4448c214ba68a98271fe910ef12d2af90242a882

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %本程序要求输入卫星的编号, 在图4-10中显示的是第4颗卫星产生的CA码, 即输入为4

svnum=input(′enter the satellite 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);

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卫星信号的捕获方法

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文件。

%该程序仿真产生三组伪随机数, 模拟随机编码过程 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