/* 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; }
/* 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__); }
/* 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__); }
/* 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__); }
/* 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__); }
/* 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__); }
/* 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; }