⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 loadrinexnav.m

📁 利用gps多天线载波相位技术
💻 M
字号:
%%========================================
%%     Toolbox for attitude determination
%%     Zhen Dai
%%     dai@zess.uni-siegen.de
%%     ZESS, University of Siegen, Germany
%%     Last Modified  : 1.Sep.2008
%%========================================
%% Functions:
%%      Read the RINEX navigation file and save it into a internal matrix
%% Input parameters:
%%      NavFileName --> RINEX navigation file name
%% Output:
%%      mEphTime -> Time of each ephemerides paragraph in "seconds of week"
%%      mEphemerides -> Ephemerides parameters.   
%%  Remarks:
%%      1. The matrix mEphemerides is a 3-D matrix. The 1st order reflects the
%%      satellite PRN. The 2nd order denotes the ephemerides epochs (about
%%      2 hours interval). the 3rd order is the index of the parameters
%%      which are defined internally.
%%      2. The output is saved in the data file named "RinexNav".


function LoadRinexNav(NavFileName)

%% Open the navigation file
fid=fopen(NavFileName);
if fid==-1,
    error ('Cannot open this file!!!')
end

totalGPSsatellite=32;
clear  mEphTime mEphemerides vSatTotalRec mTime

while (1)
    %% ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    %%                  Check the head section
    %% ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    line80 = GetLine80(fid);
    if findstr(line80,'END OF HEADER'),
        break;
    end
    if findstr(line80,'ION ALPHA'),
        ALPHA(1) = str2num(line80(3:14));
        ALPHA(2) = str2num(line80(15:26));
        ALPHA(3) = str2num(line80(27:38));
        ALPHA(4) = str2num(line80(39:50));
    end
    if findstr(line80,'ION BETA'),
        BETA(1) = str2num(line80(3:14));
        BETA(2) = str2num(line80(15:26));
        BETA(3) = str2num(line80(27:38));
        BETA(4) = str2num(line80(39:50));
    end
    if findstr(line80,'DELTA-UTC'),
        UTC_A0 = str2num(line80(4:23));
        UTC_A1 = str2num(line80(24:42));
        UTC_TOT = str2num(line80(43:51));
        UTC_WN = str2num(line80(52:60));
    end
    if findstr(line80,'LEAP SECONDS'),
        LEAP_SEC = str2num(line80(1:6));
    end
end
%
%  Initialize vector of Satellite ID's
vSatTotalRec(1:totalGPSsatellite) = 0;
%  Loop through the file
while (1)
    %% ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    %%         Read each ephemerides paragraph
    %% ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    line80 = GetLine80(fid);

    if line80(1)==-1, break, end
    %% Satellite PRN
    satID = str2num(line80(1:2));
    rec=vSatTotalRec(satID); %% Used for saving the data  into matrix
    %% Get the ephemerides epoch
    year = str2num(line80(4:5));
    month = str2num(line80(7:8));
    day= str2num(line80(10:11));
    hour = str2num(line80(13:14));
    minute = str2num(line80(16:17));
    second = str2num(line80(18:22));
    [gps_week,sec_of_week]=GetWeekSeconds(year, month ,day, hour, minute, second);
    %% If the deviation between the adjacent ephemerides of a
    %% satellite are lager than 1000s, we then consider  that a new
    %% ephemerides reflecting the next 2 hours is coming. for example, 
    %% one ephemerides is on17:59 and the other on 18:00
    %% than we use the latter one and we consider they represent the same
    %% ephemerides epoch.
    if (rec>=1) ,
        if (abs(sec_of_week-mTime(satID,rec))<1000),
            rec=rec-1; %% erase the old one
        end
    end
    rec=rec+1;
    %% vSatTotalRec reflects how many ephemerides for a certain satellite
    %% are saved.
    vSatTotalRec(satID)=rec;
    %% mTime has the ephemerides epoch
    mTime(satID,rec)=sec_of_week;
    %% Parameters related to satellite clock correction
    clockbias = str2num(line80(23:41));
    clockdrift = str2num(line80(42:60));
    clockdriftrate= str2num(line80(61:79));
    %% Read ephemerides parameters one by one
    line80 = GetLine80(fid);
    IODE  = str2num(line80(4:22));
    Crs  = str2num(line80(23:41));
    Delta_n = str2num(line80(42:60));
    M0 = str2num(line80(61:79));

    line80 = GetLine80(fid);
    Cuc = str2num(line80(4:22));
    e = str2num(line80(23:41));
    Cus = str2num(line80(42:60));
    sqrt_A = str2num(line80(61:79));

    line80 = GetLine80(fid);
    TOE = str2num(line80(4:22));
    Cic= str2num(line80(23:41));
    OMEGA = str2num(line80(42:60));
    CIS = str2num(line80(61:79));

    line80 = GetLine80(fid);
    i0= str2num(line80(4:22));
    Crc = str2num(line80(23:41));
    omega = str2num(line80(42:60));
    OMEGA_DOT= str2num(line80(61:79));

    line80 = GetLine80(fid);
    IDOT = str2num(line80(4:22));
    code_l2= str2num(line80(23:41));
    gps_week = str2num(line80(42:60));
    l2_p_data = str2num(line80(61:79));

    line80 = GetLine80(fid);
    sv_accuracy= str2num(line80(4:22));
    sv_health = str2num(line80(23:41));
    TGD= str2num(line80(42:60));
    IODC = str2num(line80(61:79));

    line80 = GetLine80(fid);
    trans_time_message = str2num(line80(4:22));
    spare1 = str2num(line80(23:41));
    spare2 = str2num(line80(42:60));
    spare3 = str2num(line80(61:79));

    %% Put the ephemerides parameters into a matrix
    mEphemerides(satID,rec,1)=satID;
    mEphemerides(satID,rec,2)=sec_of_week; %% Time: Seconds of week
    mEphemerides(satID,rec,3)=clockbias;
    mEphemerides(satID,rec,4)=clockdrift;
    mEphemerides(satID,rec,5)=clockdriftrate;
    mEphemerides(satID,rec,6)=IODE;
    mEphemerides(satID,rec,7)=Crs;
    mEphemerides(satID,rec,8)=Delta_n;
    mEphemerides(satID,rec,9)=M0;
    mEphemerides(satID,rec,10)=Cuc;
    mEphemerides(satID,rec,11)=e;
    mEphemerides(satID,rec,12)=Cus;
    mEphemerides(satID,rec,13)=sqrt_A;
    mEphemerides(satID,rec,14)=TOE;
    mEphemerides(satID,rec,15)=Cic;
    mEphemerides(satID,rec,16)=OMEGA;
    mEphemerides(satID,rec,17)=CIS;
    mEphemerides(satID,rec,18)=i0;
    mEphemerides(satID,rec,19)=Crc;
    mEphemerides(satID,rec,20)=omega;
    mEphemerides(satID,rec,21)=OMEGA_DOT;
    mEphemerides(satID,rec,22)=IDOT;
    mEphemerides(satID,rec,23)=code_l2;
    mEphemerides(satID,rec,24)=gps_week;
    mEphemerides(satID,rec,25)=l2_p_data;
    mEphemerides(satID,rec,26)=sv_accuracy;
    mEphemerides(satID,rec,27)=sv_health;
    mEphemerides(satID,rec,28)=TGD;
    mEphemerides(satID,rec,29)=IODC;
    mEphemerides(satID,rec,30)=trans_time_message;
    %% The time of each ephemerides
    mEphTime(satID,rec)=sec_of_week;
end
 %% Sate the ephemerides parameters into a matrix
save('RinexNav','mEphTime','mEphemerides' )

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -