RINEX2.10导航文件读取

广播星历包包含了卫星一系列参数和必要的摄动改正数。当前的卫星轨道参数是根据前一段时间求出的轨道参数外推得到的,因此广播星历也叫预报星历。

导航文件示例:

简单介绍一下导航文件,导航文件由文件头与数据记录部分构成。具体数据格式介绍可参考《GPS测量与数据处理》第三版的281页。

文件头包含:

RINEX的版本号和观测类型;

创建本数据文件所采用的程序名称、单位名称及日期;

注释行;

历书中电离层参数:A0~A4;

历书中电离层参数:B0~B3(第五行第六行的参数可做电离层改正);

用于计算UTC时间的历书参数;A0,A1为多项式系数;T为UTC数据的参考时刻;W为UTC参考周数,为连续计数;

跳秒,GPS时与UTC时之差。

数据块包含:

第一行为卫星的PRN号和该卫星钟的参考时刻及其改正模型参数;

第2~8行为该卫星的广播轨道数据。

读取文件头信息:根据不同信息所处行列号依次读取即可。ion中先存储默认电离层参数,若导航文件中提供电离层参数,则重新存储电离层参数即可。 

%电离层模型参数
    ion=[ 0.1118E-07,-0.7451E-08,-0.5961E-07, 0.1192E-06;...
        0.1167E+06,-0.2294E+06,-0.1311E+06, 0.1049E+07];
    NAV_header.ion=ion;
    NAV_header.RUNBY=filename(1:4);
    %头文件读取
    while(1)
        linestream=fgetl(fileID);
         %RINEX版本号
        if(contains(linestream,'RINEX VERSION / TYPE'))
            NAV_header.Rinex_version=str2double(linestream(6:9));
        end
        %结尾
        if(contains(linestream,'END OF HEADER'))
            break;
        end
        %观测单位
        if(contains(linestream,'PGM / RUN BY / DATE'))
            OBS_header.PGM=linestream(1:18);
            OBS_header.DATE=linestream(41:57);
        end
        %跳秒
        if(contains(linestream,'LEAP SECONDS'))
            NAV_header.LEAPsec=str2double(linestream(5:6));
        end
        %电离层参数
        if(contains(linestream,'ION ALPHA'))
            ION_ALPHA=[str2num(linestream(4:14)),str2num(linestream(16:26)),str2num(linestream(28:38)),str2num(linestream(40:50))];
            NAV_header.ion(1,:)=ION_ALPHA;
        end
        if(contains(linestream,'ION BETA'))
            ION_BETA=[str2num(linestream(4:14)),str2num(linestream(16:26)),str2num(linestream(28:38)),str2num(linestream(40:50))]; %#ok<*ST2NM> 
            NAV_header.ion(2,:)=ION_BETA;
        end
        %改正数
        if(contains(linestream,'DELTA-UTC: A0,A1,T,W'))
            Delta_UTC.A0=str2num(linestream(4:22));
            Delta_UTC.A1=str2num(linestream(23:41));
            Delta_UTC.T =str2num(linestream(42:50));
            Delta_UTC.W =str2num(linestream(51:59));
            NAV_header.Delta_UTC= Delta_UTC;
        end
    end

导航数据读取: 根据不同参数所处位置读取即可,此部分较为简单,但需要注意各数据对应列数,以免出现错误。

while(1)
         linestream=fgetl(fileID);
         if(~strcmp(linestream(1:2),'  '))
             %读取导航文件数据块
            NAV_body(i).prn=linestream(1:2); %#ok<*AGROW> 
            NAV_body(i).time.year=str2num(linestream(4:5))+2000;NAV_body(i).time.month=str2num(linestream(7:8));
            NAV_body(i).time.day =str2num(linestream(10:11));NAV_body(i).time.hour=str2num(linestream(13:14));
            NAV_body(i).time.min=str2num(linestream(16:17));NAV_body(i).time.sec=str2num(linestream(19:22));%%卫星钟时间
            NAV_body(i).a0=str2num(linestream(23:41));NAV_body(i).a1=str2num(linestream(42:60));NAV_body(i).a2=str2num(linestream(61:79));%钟差,钟飘:频飘
            linestream=fgetl(fileID);
            NAV_body(i).AODE=str2num(linestream(4:22));NAV_body(i).Crs=str2num(linestream(23:41));NAV_body(i).deltan=str2num(linestream(42:60));NAV_body(i).M0=str2num(linestream(61:79));%数据龄期(AODE)轨道半径改正项(Crs,rad)平均角速度改正项(deltan)平近点角(MO,rad)
            linestream=fgetl(fileID);
            NAV_body(i).Cuc=str2num(linestream(4:22));NAV_body(i).e=str2num(linestream(23:41));NAV_body(i).Cus=str2num(linestream(42:60));NAV_body(i).SqrtA=str2num(linestream(61:79));%升交点角距改正项(Cuc,rad)轨道偏心率(e)升交点角距改正项(Cus,rad)轨道长半轴平方根(sqrtA)
            linestream=fgetl(fileID);
            NAV_body(i).Toe=str2num(linestream(4:22));NAV_body(i).Cic=str2num(linestream(23:41));NAV_body(i).OMEGA=str2num(linestream(42:60));NAV_body(i).Cis=str2num(linestream(61:79));%星历的参考时刻(TOE)轨道倾角的改正项(Cic,rad)升交点经度(OMEGA)轨道倾角改正项(Cis,rad)
            linestream=fgetl(fileID);
            NAV_body(i).i0=str2num(linestream(4:22));NAV_body(i).Crc=str2num(linestream(23:41));NAV_body(i).omega=str2num(linestream(42:60));NAV_body(i).deltaomega=str2num(linestream(61:79));%轨道倾角(0)轨道半径的改正项(Crc,m)近地点角距(omega,rad)升交点赤经变化(deltaomega,rad)
            linestream=fgetl(fileID);
            NAV_body(i).IDOT=str2num(linestream(4:22));NAV_body(i).C_A=str2num(linestream(23:41));NAV_body(i).GPSWEEK=str2num(linestream(42:60));NAV_body(i).L2P=str2num(linestream(61:79));%轨道倾角的变率(IDOT) L2频道C/A码标识 GPS时间周(GPS Week) L2P码标识
            linestream=fgetl(fileID);
            NAV_body(i).Sva=str2num(linestream(4:22));NAV_body(i).SVH=str2num(linestream(23:41));NAV_body(i).TGD=str2num(linestream(42:60));NAV_body(i).IODC=str2num(linestream(61:79));%卫星精度(SVA,m) 卫星健康(SVH)电离层延迟(TGD,s)星钟的数据质量(IODC)
            linestream=fgetl(fileID);
            NAV_body(i).TofLau=str2num(linestream(4:22));NAV_body(i).fit_int=str2num(linestream(23:41));NAV_body(i).Plus1=str2num(linestream(42:60));NAV_body(i).Plus2=str2num(linestream(61:79));%信息发射时间 拟合区间(h) 备用p1 备用p2
            
            i=i+1;
         end
       if(feof(fileID)) 
            fclose(fileID);
            break;
       end
    end

 数据读取结果展示

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值