• 大小: 2KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-04-19
  • 语言: Matlab
  • 标签: GPS  Matlab  GPS仿真  CNO  

资源简介

《gps基本原理及其matlab仿真》(西安电子科技大学)里面的程序源代码,都是自己亲自敲上的。对入门很有用的。这是获取导航信息的。

资源截图

代码片段和文件信息

clear;                %清除所有的变量
clc;                  %关闭所有指令窗
close all;            %关闭所有未隐藏的窗口
load GPSsignal.mat    %从GPSsignal.mat中获得所有变量到Workspace中
                      %n=length(GPSsignal);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
SvNum=12;
%调用fGenerateCAcode3.m文件, 获得卫星编号为12的C/A码
Temp=fGenerateCAcode3(SvNum);
index1=find(Temp==0); %找出C/A码中的低电平, 形成列向量存放在index1中
Temp(index1)=-ones(1length(index1)); %返回一个与index1相同长度的一维数组 
SinWave=sin([0:2*pi/8:2*pi*7/8]);   %产生一个步进2*pi/8的正弦波
SinWave=single(SinWave);              %将SinWave矩阵转换成单精度矩阵
GpsMatch=zeros(11);                  %生成一个1*1的零矩阵
SinWave=[SinWave SinWave SinWave SinWave SinWave];
       GPSsignal.mat        %生成一个5 ms的连续信号 
 for i=1:length(Temp)
     GpsMatch=[GpsMatch Temp(1i)*SinWave];
 end
GpsMatch=GpsMatch(2:length(GpsMatch)); %生成本地匹配信号并去掉第一个元素
n=length(GpsMatch);
m=50000;
for i=1:m
    Res(i)=GpsMatch*GPSsignal(1i:i+n-1)‘;
      %将本地生成匹配信号GpsMatch与GPSsignal循环卷积 
end
plot(1:mRes);          %图示卷积的幅值

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

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%下面是要找到GPS signal中的导航电文% 
%方法是检验GPS signal(已被C/A code调制过)的每个最大值处是否具有相位偏移%
w=length(GpsMatch);
m=1;
for i=Index(11):w:(length(GPSsignal)-w+1)
    NavigationBit(m)=(GPSsignal(i:i+w-1)*GpsMatch′)/w;
    m=m+1;
end
NavigationCode=zeros(11);
NavigationCode(11)=NavigationBit(11);
m=2;Count=0;

for i=2:length(NavigationBit)
    if(NavigationBit(1i)~=NavigationBit(1i-1))
             NavigationCode(1m)=NavigationBit(1i);
m=m+1;
            Count=0;
    else
         Count=Count+1;
         if(Count>=5)
              NavigationCode(1m)=NavigationBit(1i);
            m=m+1;
            Count=0;
         end
    end
end
%%%%%我们已得到导航码NavigationCode下面将它转化成数字%%%%
NavigationCode=NavigationCode./abs(NavigationCode);
index1=find(NavigationCode<0);
NavigationCode(index1)=zeros(1length(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;
       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‘;
        

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     文件        4316  2013-07-30 15:38  huodaohangxinxi.m

评论

共有 条评论