Ejemplo n.º 1
0
/* main ----------------------------------------------------------------------*/
int main(int argc, char **argv)
{
    FILE *fp=stdout;
    nav_t nav={0};
    obs_t obs={0};
    double rr[3]={0};
    char *ifile[32],*ofile="";
    int i,j,n=0;
    
    for (i=1;i<argc;i++) {
        if (!strcmp(argv[i],"-r")&&i+3<argc) {
            for (j=0;j<3;j++) rr[j]=atof(argv[++i]);
        }
        else if (!strcmp(argv[i],"-o")&&i+1<argc) {
            ofile=argv[i];
        }
        else ifile[n++]=argv[i];
    }
    /* open output file */
    if (*ofile&&!(fp=fopen(ofile,"w"))) {
        fprintf(stderr,"output file open error: %s\n",ofile);
        return -1;
    }
    /* read rinex files */
    if (!readrnx(ifile,1,n,&obs,&nav,NULL)) {
        fprintf(stderr,"no observation data\n");
        return -1;
    }
    /* estimate ionosphere parameters */
    est_iono(&obs,&nav,rr,fp);
    
    fclose(fp);
    
    return 0;
}
Ejemplo n.º 2
0
/* outrnxnavb() */
void utest6(void)
{
    char file[]="../data/rinex/07590920.05n";
    nav_t nav={0};
    int i;
    readrnx(file,1,"",NULL,&nav,NULL);
    for (i=0;i<nav.n;i++) {
        outrnxnavb(stdout,&opt2,nav.eph+i);
    }
    printf("%s utest6 : OK\n",__FILE__);
}
Ejemplo n.º 3
0
/* tle_pos() accuracy --------------------------------------------------------*/
static void utest3(void)
{
    const char *file1="../data/tle/brdc3050.12*";
    const char *file2="../data/tle/TLE_GNSS_20121101.txt";
    const char *file3="../data/tle/igs17127.erp";
    const double ep[6]={2012,10,31,0,0,0};
    nav_t nav={0};
    erp_t erp={0};
    tle_t tle={0};
    gtime_t time;
    char sat[32];
    double rs1[6],rs2[6],ds[6],dts[2],var;
    int i,j,k,stat,svh;
    
    readrnx(file1,0,"",NULL,&nav,NULL);
        assert(nav.n>0);
    
    stat=readerp(file3,&erp);
        assert(stat);
    
    stat=tle_read(file2,&tle);
        assert(stat);
    
    for (i=0;i<MAXSAT;i++) {
        satno2id(i+1,sat);
        
        fprintf(OUT,"SAT=%s\n",sat);
        
        for (j=0;j<96;j++) {
            time=timeadd(epoch2time(ep),900.0*j);
            
            if (!satpos(time,time,i+1,EPHOPT_BRDC,&nav,rs1,dts,&var,&svh)) continue;
            
            if (satsys(i+1,NULL)==SYS_QZS) svh&=0xFE;
            
            if (svh) continue;
            
            stat=tle_pos(time,sat,"","",&tle,&erp,rs2);
                assert(stat);
            
            for (k=0;k<3;k++) ds[k]=rs2[k]-rs1[k];
            
            fprintf(OUT,"%6.0f %11.3f %11.3f %11.3f %11.3f\n",900.0*j,
                    ds[0]/1e3,ds[1]/1e3,ds[2]/1e3,norm(ds,3)/1e3);
                
                assert(norm(ds,3)/1e3<300.0);
        }
        fprintf(OUT,"\n");
    }
    fprintf(OUT,"%s utest3 : OK\n",__FILE__);
}
Ejemplo n.º 4
0
/* outrneobsb() */
void utest4(void)
{
    char file[]="../data/rinex/07590920.05o";
    obs_t obs={0};
    int i,j;
    
    readrnx(file,1,"",&obs,NULL,NULL);
    outrnxobsb(stdout,&opt2,obs.data,8,9);
    outrnxobsb(stdout,&opt2,obs.data,8,0);
    
    for (i=j=0;i<obs.n;i=j) {
        while (j<obs.n&&timediff(obs.data[j].time,obs.data[i].time)<=0.0) j++;
        outrnxobsb(stdout,&opt2,obs.data+i,j-i,0);
    }
    printf("%s utest4 : OK\n",__FILE__);
}
Ejemplo n.º 5
0
/* outrnxnavh() */
void utest5(void)
{
    char file1[]="../data/rinex/07590920.05n";
    double ion[]={1E9,2E-4,3E8,4E3,-4E-3,-5E99,-6E-33,-9E-123};
    double utc[]={1E9,2E4,3E2,-9999};
    nav_t nav={0};
    int i;
    for (i=0;i<8;i++) nav.ion_gps[i]=ion[i];
    for (i=0;i<4;i++) nav.utc_gps[i]=utc[i];
    nav.leaps=14;

    readrnx(file1,1,"",NULL,&nav,NULL);

    outrnxnavh(stdout,&opt1,&nav);
    outrnxnavh(stdout,&opt2,&nav);
    
    printf("%s utest5 : OK\n",__FILE__);
}
Ejemplo n.º 6
0
/* readrnx(), sortobs(), uniqnav()  */
void utest1(void)
{
    char file1[]="abc.00o";
    char file2[]="bcd.00n";
    char file3[]="../data/rinex/07590920.05o";
    char file4[]="../data/rinex/07590920.05n";
    char file5[]="../data/rinex/30400920.05o";
    char file6[]="../data/rinex/30400920.05n";
    obs_t obs={0};
    nav_t nav={0};
    sta_t sta={""};
    int n,stat;
    
    stat=readrnx(file1,1,"",&obs,&nav,&sta);
        assert(stat==0&&obs.n==0&&nav.n==0&&nav.ng==0&&nav.ns==0);
    stat=readrnx(file2,1,"",&obs,&nav,&sta);
        assert(stat==0&&obs.n==0&&nav.n==0&&nav.ng==0&&nav.ns==0);
    stat=readrnx(file3,1,"",&obs,&nav,&sta);
        assert(stat==1);
    stat=readrnx(file4,1,"",&obs,&nav,&sta);
        assert(stat==1);
    stat=readrnx(file5,2,"",&obs,&nav,&sta);
        assert(stat==1);
    stat=readrnx(file6,2,"",&obs,&nav,&sta);
        assert(stat==1);
    n=sortobs(&obs);
        assert(n==171);
    uniqnav(&nav);
        assert(nav.n==167);
    dumpobs(&obs); dumpnav(&nav); dumpsta(&sta);
        assert(obs.data&&obs.n>0&&nav.eph&&nav.n>0);
    free(obs.data);
    free(nav.eph);
    free(nav.geph);
    free(nav.seph);
    
    printf("%s utest1 : OK\n",__FILE__);
}
Ejemplo n.º 7
0
/* simgal main ---------------------------------------------------------------*/
int main(int argc, char **argv)
{
    FILE *fp;
    rnxopt_t rnxopt={{0}};
    obs_t obs={0};
    nav_t nav={0};
    gtime_t ts={0},te={0};
    double es[]={2000,1,1,0,0,0},ee[]={2000,1,1,0,0,0},tint=30.0;
    double pos[3]={0},rr[3];
    char *infile[16]={0},*outfile="";
    int i,j,n=0,opt=0;
    
    for (i=1;i<argc;i++) {
        if      (!strcmp(argv[i],"-o")&&i+1<argc) outfile=argv[++i];
        else if (!strcmp(argv[i],"-ts")&&i+1<argc) {
            sscanf(argv[++i],"%lf/%lf/%lf %lf:%lf:%lf",es,es+1,es+2,es+3,es+4,es+5);
            ts=epoch2time(es);
        }
        else if (!strcmp(argv[i],"-te")&&i+1<argc) {
            sscanf(argv[++i],"%lf/%lf/%lf %lf:%lf:%lf",ee,ee+1,ee+2,ee+3,ee+4,ee+5);
            te=epoch2time(ee);
        }
        else if (!strcmp(argv[i],"-ti")&&i+1<argc) tint=atof(argv[++i]);
        else if (!strcmp(argv[i],"-r")&&i+3<argc) {
            for (j=0;j<3;j++) pos[j]=atof(argv[++i]); /* lat,lon,hgt */
        }
        else infile[n++]=argv[i];
    }
    if (n<=0) {
        fprintf(stderr,"no input file\n");
        return -1;
    }
    if (!*outfile) {
        fprintf(stderr,"no output file\n");
        return -1;
    }
    if (norm(pos,3)<=0.0) {
        fprintf(stderr,"no receiver pos\n");
        return -1;
    }
    pos[0]*=D2R; pos[1]*=D2R; pos2ecef(pos,rr);
    
    /* read simulated/real rinex nav files */
    readrnx(infile,n,&obs,&nav);
    
    if (nav.n<=0) {
        fprintf(stderr,"no nav data\n");
        return -1;
    }
    /* generate simulated observation data */
    if (!simobs(ts,te,tint,rr,&nav,&obs,opt)) return -1;
    
    /* output rinex obs file */
    if (!(fp=fopen(outfile,"w"))) {
        fprintf(stderr,"error : outfile open %s\n",outfile);
        return -1;
    }
    fprintf(stderr,"saving...: %s\n",outfile);
    strcpy(rnxopt.prog,PROGNAME);
    strcpy(rnxopt.comment[0],"SIMULATED OBS DATA");
    rnxopt.tstart=ts;
    rnxopt.tstart=te;
    rnxopt.navsys=SYS_ALL;
    rnxopt.obstype=OBSTYPE_PR|OBSTYPE_CP|OBSTYPE_SNR;
    rnxopt.freqtype=FREQTYPE_L1|FREQTYPE_L2|FREQTYPE_L5|FREQTYPE_L7;
    for (i=0;i<3;i++) rnxopt.apppos[i]=rr[i];
    
    outrnxobsh(fp,&rnxopt);
    
    for (i=0;i<obs.n;i=j) {
        for (j=i;j<obs.n;j++) {
            if (timediff(obs.data[j].time,obs.data[i].time)>0.001) break;
        }
        outrnxobsb(fp,&rnxopt,obs.data+i,j-i,0);
    }
    fclose(fp);
    return 0;
}