61549829GPS.zip

  • jnickj
    了解作者
  • matlab
    开发工具
  • 11KB
    文件大小
  • zip
    文件格式
  • 0
    收藏次数
  • 1 积分
    下载积分
  • 1
    下载次数
  • 2020-12-27 11:45
    上传日期
对于多频观测数据的读取,历元数据,导航文件
61549829GPS.zip
  • GPS程序
  • single_Delta1.m
    3.2KB
  • ReadObsFile.m
    52KB
  • get_doubleDelta.m
    6KB
  • ReadEphFile.m
    15.1KB
  • get_threeD.m
    1.1KB
内容介绍
%-------------函数:读取观测值文件的函数-------------------------------------------------- function [pObsHeader,pObsText,numEpoch]=ReadObsFile(file) format long; %------------------------- % numEpoch 有效历元数 % pObsHeader.nTypeNum %观测值类型个数(如C1,P1,P2,L1,L2等) % pObsHeader.typeObs %typeObs结构体为typeObs.C1、typeObs.P1、typeObs.P2、typeObs.L1、typeObs.L2、typeObs.D1、typeObs.D2 % pObsHeader.name 测站名 % pObsHeader.X0、pObsHeader.Y0、pObsHeader.Z0 %测站近似坐标 % pObsHeader.flag_Rdeltat %历元时标、码伪距、相位是否使用实时确定出的接收机钟差改正,0=否,1=是,默认0 % pObsText(numEpoch+1).epochFlag %历元标志 % pObsText(numEpoch+1).svNumOfEpoch %历元卫星数 % pObsText(numEpoch+1).GPSymd %历元年月日 % pObsText(numEpoch+1).GPSweekno %GPS周 % pObsText(numEpoch+1).GPSweeksec %周秒 % pObsText(numEpoch+1).Hour %小时 % pObsText(numEpoch+1).Min %分 % pObsText(numEpoch+1).Second %秒 % pObsText(numEpoch+1).svPrnOfEpoch(i) %历元第i颗卫星的卫星号 % pObsText(numEpoch+1).Rdeltat %历元接收机钟差改正 % pObsText(numEpoch+1).data(i,j) %历元第i颗卫星第j类观测值的数值 % pObsText(numEpoch+1).LLI(i,j) %失锁标识符,0和空格表示正常,见P249,10.1节Rinex格式 表10-3 % pObsText(numEpoch+1).SN(i,j) %信号强度,即信噪比,1表示最小信号强度,9表示最大信号强度,5表示良好信噪比的阈值,0或空格表示未给出,见P249,10.1节Rinex格式 表10-3 %------------------------- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%打开观测文件%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% fid = fopen(file); %%%fopen(file)表示打开文件名为file的文件 if fid<=0 %%%文件打开成功返回大于0的数 errordlg('文件打开错误','Open File Error') else tline=fgetl(fid); %开始读取文件的第一行 如 tline= "2.10 OBSERVATION DATA G (GPS) RINEX VERSION / TYPE" end if (strfind(tline,'OBSERVATION')>0)&&(strfind(tline,'RINEX')>0) %判断是否为观测值文件 flagReadData=0; %用flagReadData标志读文件,0表示文件为观测值文件,且开始读头文件部分,-1表示文件读完,1表示头文件读完开始读数据部分,2表示打开的不是观测值文件 else errordlg('打开的不是观测值文件','Open File Error') flagReadData=2; end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%开始读观测文件rinex的头文件,进入while循环,若flagReadData==0 ,表示程序正在读头文件%%%%%%%%%%%%%%%% while flagReadData==0 tline=fgetl(fid);%读文件的一行,将读的一行作为字符串存到tline变量中,fid指向第二行 if strfind(tline,'TYPES OF OBSERV')>0 %%%表示该行在描述观测值中包含的观测值类型 typeObs.C1 = -1; typeObs.P1 = -1;typeObs.P2 = -1; typeObs.L1 = -1;typeObs.L2 = -1; %所有类型观测值取值为-1,说明没有被观测,当下面检查到存在该类型观测值,将值改为大于0的数 typeObs.D1 = -1;typeObs.D2 = -1; typeObs.S1 = -1;typeObs.S2 = -1; %%%以下代码用以获取有几种观测值,用pObsHeader.nTypeNum来存储观测值类型的个数; 每种观测值出现的顺序 [s,tline] = strtok(tline); % 5 L1 L2 C1 P1 P2 # / TYPES OF OBSERV 分离该行 s=5, tline= L1 L2 C1 P1 P2 nTypeNum = str2num(s); %得到O文件中的观测类型个数 如该例中有5种类型的观测值 L1 L2 C1 P1 P2 for i=1:nTypeNum [s,tline] = strtok(tline); if strcmp(s,'C1')>0 typeObs.C1 = i; elseif strcmp(s,'P1')>0 typeObs.P1 = i; elseif strcmp(s,'P2')>0 typeObs.P2 = i; elseif strcmp(s,'L1')>0 typeObs.L1 = i; elseif strcmp(s,'L2')>0 typeObs.L2 = i; elseif strcmp(s,'D1')>0 typeObs.D1 = i; elseif strcmp(s,'D2')>0 typeObs.D2 = i; elseif strcmp(s,'S1')>0 typeObs.S1 =i; elseif strcmp(s,'S2')>0 typeObs.S2 =i; end end pObsHeader.nTypeNum=nTypeNum; pObsHeader.typeObs=typeObs; end if strfind(tline,'APPROX POSITION XYZ')>0 %表明该行描述的是测站近似坐标 0.0000 0.0000 0.0000 APPROX POSITION XYZ [s,tline] = strtok(tline); pObsHeader.X0 = str2num(s); [s,tline] = strtok(tline); pObsHeader.Y0 = str2num(s); [s,tline] = strtok(tline); pObsHeader.Z0 = str2num(s); end if strfind(tline,'MARKER NAME')>0 %获取测站名 [s,tline] = strtok(tline); pObsHeader.name= s; end if strfind(tline,'RCV CLOCK OFFS APPL')>0 [s,tline] = strtok(tline); pObsHeader.flag_Rdeltat = str2num(s);%历元时标、码伪距、相位是否使用实时确定出的接收机钟差改正,0=否,1=是,默认0 end if strfind(tline,'END OF HEADER')>0 %%%%%%%%%%%%%%%%%%%%%%%表示头文件已读完 flagReadData=1; end end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%flagReadData==1,开始读数据文件%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% numEpoch=0;%用来记录历元个数 while flagReadData==1 tline=fgetl(fid); %%%%读取数据文件的第一行 if tline==-1 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%表示文件读完 flagReadData=-1; %%%%给读取文件标志赋-1 elseif(length(tline)>=10)&&(strcmp(tline(1:10),' ')~=1)%%%%%%%%%%%%%%%%%%%%%%如果文件没有读完且读的字符串是观测数据 %%%%%%%%%开始读取rinex数据的数据头,即对历元的时间,状态,编号等的描述 %%%%读RINEX数据头为04 1 2 0 0 30.0000000 0 8G 2G25G 1G16G 3G 6G20G14 tline=strrep(tline,'G',' '); [s,tline] = strtok(tline); iYear = str2num(s); s1 = strcat(s,'/'); [s,tline] = strtok(tline); iMonth = str2num(s); s1 = strcat(s1,s,'/'); [s,tline] = strtok(tline); iDay = str2num(s); s1 = strcat(s1,s,'/'); [s,tline] = strtok(tline); iHour = str2num(s); s1 = strcat(s1,s,':'); [s,tline] = strtok(tline); iMin = str2num(s); s1 = strcat(s1,s,':'); [s,tline] = strtok(tline); fSecond = str2num(s); s1 = strcat(s1,s); [s,tline] = strtok(tline); pObsText(numEpoch+1).epochFlag = str2num(s); %历元标志,0表示信号正常,其他表示信号有中断等 [s,tline] = strtok(tline); pObsText(numEpoch+1).svNumOfEpoch = str2num(s); %表示该历元观测到的卫星数 if iYear<50 iYear=iYear+2000; end if iYear>50&&iYear<100 iYear=iYear+1900; end if fSecond==60 fSecond=0; iMin=iMin+1; end if iMin==60 iMin=0; iHour=iHour+1; end if iHour==24 iHour=0; iDay=iDay+1; end [weekno,weeksec,dayofy] =TimeConvertWeekTime(iYear,iMonth,iDay,iHour,iMin,fSecond);%%%%%%%%%%%给出年月日,时分秒,求GPS周,GPS秒等 pObsText(numEpoch+1).GPSweekno = weekno; pObsText(numEpoch+1).GPSweeksec = weeksec; pObsText(numEpoch+1).GPSymd = s1; pObsText(numEpoch+1).Hour = iHour; pObsText(numEpoch+1).Min = iMin; pObsText(numEpoch+1).Second = fSecond; if pObsText(numEpoch+1).svNumOfEpoch>12 %如果该历元的接收到的卫星数目大于12,记录内容要换行 for i=1:12 [s,tline] = strtok(tline); pObsText(numEpoch+1).svPrnOfEpoch(i) = str2num(s); end if isempty( str2num(tline) ) ~= 1 pObsText(numEpoch+1).Rdeltat = str2num(tline); % 接收机钟差改正 else pObsTe
评论
    相关推荐
    • C语言文件读写
      用C语言实现度文件读取,有源代码。 一个简单的实例。 文件读写
    • XML文件读写
      基于win32平台下libxml2库函数的XML文件读写,包含libxml2相关的所有库函数、xml文件读写相关代码以及xml文件读的一个实例(vs2010)。
    • C语言 文件读写
      文件读写 源程序 源码 C++语言 文件内容的读写
    • c#文件读写
      c#文件读写,欢迎下载多提意见!
    • bmp文件读写
      bmp文件读写以及一些基本的操作处理 bool Cex06 3Dlg::readBmp char bmpName { 二进制读方式打开指定的图像文件 FILE fp fopen bmpName "rb" ; if fp 0 return 0; 跳过位图文件头结构...
    • java 文件读写
      java文件读写读取properties配置文件,读取目录及文件
    • 文件读写操作
      我自己收集的文件读写操作汇总,C&C++编程支持,希望对那些操作文件指针的朋友有帮助!
    • txt文件读写
      txt文件读写,函数列表: WriteAtLastRow( ) WriteAtIndexRow( ) DeleteRow( ) ReviseRow( ) ReadAtLastRow( ) ReadAtIndexRow( )
    • C#文件读写
      C#文件读写C#文件读写C#文件读写C#文件读写C#文件读写C#文件读写
    • 文件读写.rar
      设计界面,文件读取和写入,保存地址修改等多种功能。