(一)基于MATLAB读取RINEX3.02格式的接收机观测数据和卫星导航数据

基于MATLAB读取RINEX3.02格式的接收机观测数据和卫星导航数据
1.观测文件(.o)读取

%打开O文件
[filename,pathname] = uigetfile('*.??O','打开O文件');   
fid = fopen(strcat(pathname,filename),'rt');           

%读取头文件
while (1)                 
    line = fgets(fid);    
    if (line == -1)       
    end
    
    if (strfind(line,'APPROX POSITION XYZ')~= 0)      %读取测站近似坐标 ,存入结构体以备之后使用
        appro_x = str2double(line(1:14));               
        appro_y = str2double(line(15:28));            
        approx_z = str2double(line(29:42));
     end
    if (strfind(line,'DELTA H/E/N')~= 0)                %读取天线参数:高,东向、北向的偏心
        ant_h = str2double(line(1:14));
        ant_e = str2double(line(15:28));
        ant_n = str2double(line(29:42));
    end
    
    end
    if (strfind(line,'INTERVAL')~= 0)                  
        interval = str2double(line(1:11));
    end
    
    if (strfind(line,'TIME OF FIRST OBS')~= 0)        
        year(1,1) = str2double(line(1:6));           
        month(1,1) = str2double(line(7:12));
        day(1,1) = str2double(line(13:18));
        hour(1,1) = str2double(line(19:24));
        minute(1,1) = str2double(line(25:30));
        second(1,1) = str2double(line(31:43));
    end
    
    if (strfind(line,'END OF HEADER')~= 0)   
        break;
    end
end
%% 读取观测数据  
EPROCH_num = 0;                                          
while feof(fid)~= 1                                    
        EPROCH_num = EPROCH_num+1;                      %历元计数
        tline = fgetl(fid);                            
        chartline = char(tline) ;                       
        SatNum = str2double(chartline(34:35));          
        dline =  fgetl(fid); 
        %GPS
        NumPRN1 = 0 ;                                 
        for Nr = 1:SatNum                               
            chartline = char(fgetl(fid));               
            if (strfind(chartline,'G')~= 0)           
                NumPRN1 = NumPRN1 + 1 ;               
                GPS_Constellation = 1;                
                str2double(chartline(2:3)) ;    
                Obs(EPROCH_num).GPS( NumPRN1) .PRN= str2double(chartline(2:3)) ; 
                Obs(EPROCH_num).GPS( NumPRN1) .PseudoRange = str2double(chartline(6:17)); %伪距
                Obs(EPROCH_num).GPS( NumPRN1) .phase = str2double(chartline(21:33));      %载波相位
            end
end

2.导航文件(.n)读取

function [Nav,NavHead]=readGPSDATA3_02_n()
%% 打开文件
[filename,pathname] = uigetfile('*.??n','打开n文件');   
fid = fopen(strcat(pathname,filename),'rt');
%读取头文件
while(1)
  line=fgetl(fid);
  if (line == -1)       
        break;        
  end
  if (strfind(line(1:4),'GPSA')~=0)        %读GPS的α0-α3(电离层延时校正参数 Alpha0- Alpha3)
      NavHead.alpha(1) = str2num(line(9:17));  
      NavHead.alpha(2)= str2num(line(21:29));
      NavHead.alpha(3) = str2num(line(32:41));
      NavHead.alpha(4) = str2num(line(44:53));
  end                                    
  
  if (strfind(line(1:4),'GPSB')~=0 )       %读GPS的β0-β3(电离层延时校正参数 Beta0- Beta3)
      NavHead.beta(1)= str2num(line(9:17));
      NavHead.beta(2)= str2num(line(21:29));
      NavHead.beta(3)= str2num(line(32:41));
      NavHead.beta(4) = str2num(line(44:53));
  end
  
  if (strfind(line(1:4),'GPUT')~=0)      %读GPS到UTC时的转换数据,CORR=a0+a1*deltat
      NavHead.utc(1) = str2num(line(8:22));   %a0
      NavHead.utc(2) = str2num(line(25:38));  %a1
      NavHead.utc(3) = str2num(line(40:45));  %T,UTC数据参考时刻
      NavHead.utc(4) = str2num(line(47:50));  %W,UTC参考周数
  end
  
  if (strfind(line(61:72),'LEAP SECONDS')~=0)   %由于跳秒产生的时间差
      NavHead.leap=str2num(line(1:6));
  end
  
    if (strfind(line,'END OF HEADER')~= 0)     
        break;
    end
end

%% 读导航电文星历数据
   i=0;
 while feof(fid)==0
   i=i+1;
   line = fgetl(fid);%0
   Nav(i).prn=str2num(line(2:3));
   year =str2num(line(5:8));
   month = str2num(line(10:11));
   day = str2num(line(13:14));
   hour = str2num(line(16:17));
   minute = str2num(line(19:20));
   second =str2num(line(22:23));
   cal=[year,month,day,hour,minute,second];
   Nav(i).toe=cal2gps(cal);                               %参考时间toe
   Nav(i).bias= str2num(line(25:42));                     %卫星钟偏差 (s) af0
   Nav(i).drift = str2num(line(44:61));                   %卫星钟漂移 (s/s) af1
   Nav(i).rate = str2num(line(64:80));                    %卫星钟漂移速度 (s/s^2) af2
   line = fgetl(fid);%1
   Nav(i).iode = str2num(line(5:23));                      
   Nav(i).crs =str2num(line(25:42));                      
   Nav(i).dn = str2num(line(44:61));                      %平均角速度校正值
   Nav(i).M0 = str2num(line(63:80));                      %平近点角
    line = fgetl(fid);%2
   Nav(i).cuc =str2num(line(5:23));                      
   Nav(i).ec = str2num(line(25:42));                      %椭圆轨道偏心率
   Nav(i).cus = str2num(line(44:61));
   Nav(i).sqrtA = str2num(line(63:80));                   %椭圆长半轴平方根
    line = fgetl(fid);%3
   Nav(i).toe = str2num(line(7:23));
   Nav(i).cic = str2num(line(25:42));
   Nav(i).OMEGA0 = str2num(line(44:61));
   Nav(i).cis = str2num(line(63:80));
    line = fgetl(fid);%4
   Nav(i).i0 = str2num(line(5:23));                       %toe时刻轨道倾角
   Nav(i).crc = str2num(line(25:42));
   Nav(i).omega =str2num(line(44:61));                    %轨道近地角距
   Nav(i).OMEGAdot = str2num(line(63:80));
    line = fgetl(fid);%5
   Nav(i).idt = str2num(line(5:23));                      %轨道倾角对时间的变化率
   Nav(i).cflgl2 = str2num(line(25:42));
   Nav(i).weekno = str2num(line(44:61));
   Nav(i).pflgl2 = str2num(line(63:80));
    line = fgetl(fid);%6
   Nav(i).svacc = str2num(line(5:23));
   Nav(i).svhlth = str2num(line(25:42));
   Nav(i).tgd = str2num(line(43:61));                    %卫星群延迟时间参数,表征卫星不同频率信号通道之间的延迟偏差
   Nav(i).iodc =str2num(line(63:80));
    line = fgetl(fid);%7
   Nav(i).transmit =str2num(line(5:23));
   Nav(i).fitint = str2num(line(25:42));  
 end
  • 25
    点赞
  • 164
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
根据提供的引用内容,您提供的代码片段似乎是C语言的代码。根据您的问题,您遇到了编译错误。要解决这个问题,您可以尝试以下几个步骤: 1. 检查代码中是否存在拼写错误或语法错误。编译错误通常是由于代码中的错误导致的。请确保您的代码中没有任何拼写错误,并且所有的语法都是正确的。 2. 检查是否缺少头文件。在C语言中,您需要包含所需的头文件来使用特定的函数和库。请确保您的代码中包含了所需的头文件,并且这些头文件的路径是正确的。 3. 检查是否缺少库文件。有时候,编译错误可能是由于缺少所需的库文件而引起的。请确保您的代码中包含了所需的库文件,并且这些库文件的路径是正确的。 4. 检查编译命令是否正确。编译C语言代码时,您需要使用正确的编译命令来编译代码。请确保您使用的编译命令是正确的,并且所有的参数都是正确的。 以下是一个示例的C语言代码,用于创建和读取共享内存: 创建共享内存: ```c #include <stdio.h> #include <stdlib.h> #include <sys/shm.h> int main(int argc, char* argv[]) { key_t key = ftok(argv[1], 1); if (-1 == key) { perror("ftok err"); return 1; } int shmid = shmget(key, atoi(argv[2]), IPC_CREAT | 0644); if (-1 == shmid) { perror("shmget err"); return 1; } printf("shmid:%d\n", shmid); return 0; } ``` 读取共享内存: ```c #include <stdio.h> #include <stdlib.h> #include <sys/shm.h> int main(int argc, char* argv[]) { int shmid = atoi(argv[1]); if (-1 == shmctl(shmid, IPC_RMID, NULL)) { perror("shmctl err"); return 1; } return 0; } ``` 请注意,这只是一个示例代码,您需要根据您的具体需求进行修改和适应。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值