diff --git a/app/convbin/convbin.c b/app/convbin/convbin.c index d3c7e704f3c19a506809e7c4877e5d1a9b274172..3ae74109124c3d9319f3c0395fd297492e986c05 100644 --- a/app/convbin/convbin.c +++ b/app/convbin/convbin.c @@ -561,7 +561,7 @@ int main(int argc, char **argv) fprintf(stderr,"input format can not be recognized\n"); return -1; } - sprintf(opt.prog,"%s %s",PRGNAME,VER_RTKLIB); + sprintf(opt.prog,"%s %s %s",PRGNAME,VER_RTKLIB,PATCH_LEVEL); sprintf(opt.comment[0],"log: %-55.55s",ifile); sprintf(opt.comment[1],"format: %s",formatstrs[format]); if (*opt.rcvopt) { diff --git a/app/rtkconv/convmain.cpp b/app/rtkconv/convmain.cpp index eede251f31934ca912efcfbd28d3e48ad10d7d5f..369f9af1e656343c2b9914cf0836ca00c04fe451 100644 --- a/app/rtkconv/convmain.cpp +++ b/app/rtkconv/convmain.cpp @@ -38,7 +38,6 @@ TMainWindow *MainWindow; #define PRGNAME "RTKCONV" // program name #define MAXHIST 20 // max number of histories #define TSTARTMARGIN 60.0 // time margin for file name replacement -#define TRACEFILE "rtkconv.trace" // trace file static int abortf=0; @@ -788,7 +787,7 @@ void __fastcall TMainWindow::ConvertFile(void) AnsiString OutFile9_Text=OutFile9->Text; int i,format,sat; char file[1024]="",*ofile[9],ofile_[9][1024]={""},msg[256],*p; - char buff[256],tstr[32]; + char buff[256],tstr[32],tracefile[1024]; double RNXVER[]={2.10,2.11,2.12,3.00,3.01,3.02,3.03}; FILE *fp; @@ -927,7 +926,9 @@ void __fastcall TMainWindow::ConvertFile(void) Message ->Caption=""; if (TraceLevel>0) { - traceopen(TRACEFILE); + strcpy(tracefile,ofile[0]); + strcat(tracefile,".trace"); + traceopen(tracefile); tracelevel(TraceLevel); } // convert to rinex diff --git a/app/rtkconv/convmain.dfm b/app/rtkconv/convmain.dfm index 2014eaa50577a7d5dec2f5e9cc538cb58c4e6fd6..96a5f160616c083279e88cc59837221722d1d602 100644 Binary files a/app/rtkconv/convmain.dfm and b/app/rtkconv/convmain.dfm differ diff --git a/src/pntpos.c b/src/pntpos.c index 630cee04a8153c133a56170d6a2e56895f8ccc26..274e4bc62ea5b4f93b56dbf57a691f18c259dc13 100644 --- a/src/pntpos.c +++ b/src/pntpos.c @@ -309,7 +309,7 @@ static int valsol(const double *azel, const int *vsat, int n, /* chi-square validation of residuals */ vv=dot(v,v,nv); if (nv>nx&&vv>chisqr[nv-nx-1]) { - sprintf(msg,"chi-square error nv=%d vv=%.1f cs=%.1f",nv,vv,chisqr[nv-nx-1]); + sprintf(msg,"Warning: large chi-square error nv=%d vv=%.1f cs=%.1f",nv,vv,chisqr[nv-nx-1]); /* return 0; */ /* threshold too strict for all use cases, report error but continue on */ } /* large gdop check */ diff --git a/src/rinex.c b/src/rinex.c index a55abc5b8ce56883306816cc777e70b0e0b01c06..9761b3be3393989c42a93e1fdfcb55bb8bc6d8e9 100644 --- a/src/rinex.c +++ b/src/rinex.c @@ -2200,6 +2200,17 @@ extern int outrnxobsb(FILE *fp, const rnxopt_t *opt, const obsd_t *obs, int n, case 'S': outrnxobsf(fp,obs[ind[i]].SNR[k]*0.25,-1,-1); break; } } + + /* set trace level to 1 generate CSV file of raw observations */ + if (gettracelevel()==1) { + trace(1,",%16.2f,%3d,%13.2f,%13.2f,%9.2f,%2.0f,%1d,%1d,%13.2f,%13.2f,%9.2f,%2.0f,%1d,%1d\n", + obs[0].time.time + obs[0].time.sec, obs[ind[i]].sat, + obs[ind[i]].P[0], obs[ind[i]].L[0], obs[ind[i]].D[0], + obs[ind[i]].SNR[0]*0.25, obs[ind[i]].LLI[0], obs[ind[i]].qualL[0], + obs[ind[i]].P[1], obs[ind[i]].L[1], obs[ind[i]].D[1], + obs[ind[i]].SNR[1]*0.25, obs[ind[i]].LLI[1], obs[ind[i]].qualL[1]); + } + if (opt->rnxver>2.99&&fprintf(fp,"\n")==EOF) return 0; } diff --git a/src/rtkcmn.c b/src/rtkcmn.c index c94ef3bd23a6f8ec948a47ce13ce952465a83dc5..da621ba4f0746db2505f20832c1320ca36087d10 100644 --- a/src/rtkcmn.c +++ b/src/rtkcmn.c @@ -2946,6 +2946,10 @@ extern void tracelevel(int level) { level_trace=level; } +extern int gettracelevel(void) +{ + return level_trace; +} extern void trace(int level, const char *format, ...) { va_list ap; diff --git a/src/rtklib.h b/src/rtklib.h index f6c39a4baba4645c736e9c60ca4fb6c1b4bb5a61..2c6a4a007a08c89454e0e4943eb83fd5e330105b 100644 --- a/src/rtklib.h +++ b/src/rtklib.h @@ -80,21 +80,21 @@ extern "C" { #define MAXFREQ 6 /* max NFREQ */ -#define FREQL1 1.57542E9 /* L1/E1/B1 frequency (Hz) */ +#define FREQL1 1.57542E9 /* L1/E1 frequency (Hz) */ #define FREQL2 1.22760E9 /* L2 frequency (Hz) */ #define FREQE5b 1.20714E9 /* E5b frequency (Hz) */ #define FREQL5 1.17645E9 /* L5/E5a frequency (Hz) */ #define FREQE6 1.27875E9 /* E6/LEX frequency (Hz) */ -#define FREQE5ab 1.191795E9 /* E5a+b/B2 frequency (Hz) */ +#define FREQE5ab 1.191795E9 /* E5a+b frequency (Hz) */ #define FREQs 2.492028E9 /* S frequency (Hz) */ +#define FREQ1_CMP 1.561098E9 /* BeiDou B1 frequency (Hz) */ +#define FREQ2_CMP 1.20714E9 /* BeiDou B2 frequency (Hz) */ +#define FREQ3_CMP 1.26852E9 /* BeiDou B3 frequency (Hz) */ #define FREQ1_GLO 1.60200E9 /* GLONASS G1 base frequency (Hz) */ #define DFRQ1_GLO 0.56250E6 /* GLONASS G1 bias frequency (Hz/n) */ #define FREQ2_GLO 1.24600E9 /* GLONASS G2 base frequency (Hz) */ #define DFRQ2_GLO 0.43750E6 /* GLONASS G2 bias frequency (Hz/n) */ #define FREQ3_GLO 1.202025E9 /* GLONASS G3 frequency (Hz) */ -#define FREQ1_CMP 1.561098E9 /* BeiDou B1 frequency (Hz) */ -#define FREQ2_CMP 1.20714E9 /* BeiDou B2 frequency (Hz) */ -#define FREQ3_CMP 1.26852E9 /* BeiDou B3 frequency (Hz) */ #define EFACT_GPS 1.0 /* error factor: GPS */ #define EFACT_GLO 1.5 /* error factor: GLONASS */ @@ -1564,6 +1564,7 @@ EXPORT void tracehnav(int level, const nav_t *nav); EXPORT void tracepeph(int level, const nav_t *nav); EXPORT void tracepclk(int level, const nav_t *nav); EXPORT void traceb (int level, const unsigned char *p, int n); +EXPORT int gettracelevel(void); /* platform dependent functions ----------------------------------------------*/ EXPORT int execcmd(const char *cmd); diff --git a/src/rtkpos.c b/src/rtkpos.c index 9ed662f6badd9fb8403b19cd24b7bf691746b03e..f1e8f2ca418a1d17049fde133c64a5a353bf476d 100644 --- a/src/rtkpos.c +++ b/src/rtkpos.c @@ -413,6 +413,7 @@ static double varerr(int sat, int sys, double el, double snr_rover, double snr_b frq=f%nf;code=f<nf?0:1; + /* extended error model, not currently used */ switch (sys) { case SYS_GPS: i = 0; break; case SYS_GLO: i = 1; break; @@ -420,7 +421,6 @@ static double varerr(int sat, int sys, double el, double snr_rover, double snr_b default: i = 0; break; } - /* extended error model, not currently used */ if (code && opt->exterr.ena[0]) { /* code */ a = opt->exterr.cerr[i][ frq * 2]; b = opt->exterr.cerr[i][1+frq * 2]; @@ -431,6 +431,7 @@ static double varerr(int sat, int sys, double el, double snr_rover, double snr_b b = opt->exterr.perr[i][1+frq * 2]; if (sys == SYS_SBS) {a *= EFACT_SBS; b *= EFACT_SBS;} } + else { /* normal error model */ if (opt->rcvstds&& obs->qualL[frq]!='\0'&&obs->qualP[frq]!='\0') { /* include err ratio and measurement std (P or L) from receiver */ @@ -441,7 +442,11 @@ static double varerr(int sat, int sys, double el, double snr_rover, double snr_b switch (sys) { case SYS_GPS: fact *= EFACT_GPS; break; case SYS_GLO: fact *= EFACT_GLO; break; + case SYS_GAL: fact *= EFACT_GAL; break; case SYS_SBS: fact *= EFACT_SBS; break; + case SYS_QZS: fact *= EFACT_QZS; break; + case SYS_CMP: fact *= EFACT_CMP; break; + case SYS_IRN: fact *= EFACT_IRN; break; default: fact *= EFACT_GPS; break; } @@ -1684,6 +1689,7 @@ static int resamb_LAMBDA(rtk_t *rtk, double *bias, double *xa,int gps,int glo,in prcopt_t *opt=&rtk->opt; int i,j,ny,nb,info,nx=rtk->nx,na=rtk->na; double *D,*DP,*y,*Qy,*b,*db,*Qb,*Qab,*QQ,s[2],var=0; + double QQb[MAXSAT]; trace(3,"resamb_LAMBDA : nx=%d\n",nx); @@ -1722,10 +1728,16 @@ static int resamb_LAMBDA(rtk_t *rtk, double *bias, double *xa,int gps,int glo,in matmul("NN",ny,ny,nx,1.0,DP,D ,0.0,Qy); /* Qy=DP'*D */ /* phase-bias covariance (Qb) and real-parameters to bias covariance (Qab) */ - for (i=0;i<nb;i++) for (j=0;j<nb;j++) Qb [i+j*nb]=Qy[na+i+(na+j)*ny]; + for (i=0;i<nb;i++) { + QQb[i]= Qy[na+i+(na+i)*ny]; + for (j=0;j<nb;j++) { + Qb [i+j*nb]=Qy[na+i+(na+j)*ny]; + } + } for (i=0;i<na;i++) for (j=0;j<nb;j++) Qab[i+j*na]=Qy[ i+(na+j)*ny]; trace(3,"N(0)= "); tracemat(3,y+na,1,nb,7,2); + trace(3,"Qb = "); tracemat(3,QQb,1,nb,7,5); /* lambda/mlambda integer least-square estimation */ /* return best integer solutions */