diff --git a/RTKLib.pri b/RTKLib.pri index f41bcf6ed644be8f121912911720b4b8d12d3318..7952b911d9e998bc553f133a58f7eea51f6808a9 100644 --- a/RTKLib.pri +++ b/RTKLib.pri @@ -1,5 +1,5 @@ -DEFINES += _RTLDLL NO_STRICT TRACE ENAGLO ENAQZS ENAGAL ENACMP ENAIRN NFREQ=3 NEXOBS=3 EXTLEX +DEFINES += _RTLDLL NO_STRICT TRACE ENAGLO ENAQZS ENAGAL ENACMP ENAIRN NFREQ=4 NEXOBS=3 EXTLEX win32{ DEFINES += WIN32 diff --git a/app/rnx2rtkp/gcc/makefile b/app/rnx2rtkp/gcc/makefile index 0a0a31e7ba8596df2faada2d6586ad79b9c3c232..c82380b5a2ceab808376bd8739c714b24a1fa2e7 100644 --- a/app/rnx2rtkp/gcc/makefile +++ b/app/rnx2rtkp/gcc/makefile @@ -3,9 +3,7 @@ BINDIR = /usr/local/bin SRC = ../../../src -#OPTS = -DTRACE -DENAGLO -DENAQZS -DENAGAL -DENACMP -DENAIRN -DNFREQ=3 -OPTS = -DTRACE -DENAGLO -DENAGAL -DENACMP -DNFREQ=4 -DNEXOBS=3 -#OPTS = -DENAGLO -DENAQZS -DENAGAL -DENACMP -DNFREQ=2 +OPTS = -DTRACE -DENAGLO -DENAQZS -DENAGAL -DENACMP -DNFREQ=4 -DNEXOBS=3 # for no lapack CFLAGS = -Wall -O3 -ansi -pedantic -Wno-unused-but-set-variable -I$(SRC) $(OPTS) -g diff --git a/app/rtkconv/rtkconv.cbproj b/app/rtkconv/rtkconv.cbproj index c3c5ef13bbd2af94b8f6401d45ce6a56513ab24f..add20ff00fa5fcccb81f0faaab5e1f7b6fa1c2d8 100644 --- a/app/rtkconv/rtkconv.cbproj +++ b/app/rtkconv/rtkconv.cbproj @@ -89,9 +89,9 @@ <VerInfo_Locale>1033</VerInfo_Locale> <Manifest_File>$(BDS)\bin\default_app.manifest</Manifest_File> <VerInfo_IncludeVerInfo>true</VerInfo_IncludeVerInfo> - <BCC_Defines>_RTLDLL;WIN32;TRACE;ENAGLO;ENAGAL;ENAQZS;ENACMP;NEXOBS=3;NFREQ=3;$(BCC_Defines)</BCC_Defines> - <BRCC_Defines>_RTLDLL;WIN32;TRACE;ENAGLO;ENAGAL;ENAQZS;NEXOBS=3;NFREQ=3;$(BRCC_Defines)</BRCC_Defines> - <TASM_Defines>_RTLDLL;WIN32;TRACE;ENAGLO;ENAGAL;ENAQZS;NEXOBS=3;NFREQ=3;$(TASM_Defines)</TASM_Defines> + <BCC_Defines>_RTLDLL;WIN32;TRACE;ENAGLO;ENAGAL;ENAQZS;ENACMP;NEXOBS=3;NFREQ=4;$(BCC_Defines)</BCC_Defines> + <BRCC_Defines>_RTLDLL;WIN32;TRACE;ENAGLO;ENAGAL;ENAQZS;NEXOBS=3;NFREQ=4;$(BRCC_Defines)</BRCC_Defines> + <TASM_Defines>_RTLDLL;WIN32;TRACE;ENAGLO;ENAGAL;ENAQZS;NEXOBS=3;NFREQ=4;$(TASM_Defines)</TASM_Defines> <BCC_UserSuppliedOptions> -tWM</BCC_UserSuppliedOptions> <OutputExt>exe</OutputExt> <AppEnableRuntimeThemes>true</AppEnableRuntimeThemes> diff --git a/app/rtkplot/plotinfo.cpp b/app/rtkplot/plotinfo.cpp index c01e00f5f74d81de2c8d4e06c780fc16853cc519..9d849d9a762df622536a273d63265ce5fb94e44f 100644 --- a/app/rtkplot/plotinfo.cpp +++ b/app/rtkplot/plotinfo.cpp @@ -319,7 +319,7 @@ void __fastcall TPlot::UpdateObsType(void) { AnsiString s; char *codes[MAXCODE+1]; - const char *freqs[]={"L1","L2","E5b","L5","E6","E5ab"}; + const char *freqs[]={"L1","L2/E5b","L5","E6","E5ab"}; int i,j,n=0,cmask[MAXCODE+1]={0},fmask[6]={0}; trace(3,"UpdateObsType\n"); diff --git a/app/rtkplot/rtkplot.cbproj b/app/rtkplot/rtkplot.cbproj index 9b6bcbf25af9f88bc504ef70060a6415366645c7..02a0bc87202f7118f7ded3f24295aab4e058acfc 100644 --- a/app/rtkplot/rtkplot.cbproj +++ b/app/rtkplot/rtkplot.cbproj @@ -82,9 +82,9 @@ <PropertyGroup Condition="'$(Base_Win32)'!=''"> <AppEnableRuntimeThemes>true</AppEnableRuntimeThemes> <OutputExt>exe</OutputExt> - <TASM_Defines>_RTLDLL;WIN32;TRACE;ENAGLO;ENAGAL;ENAQZS;NFREQ=3;NEXOBS=3;$(TASM_Defines)</TASM_Defines> - <BCC_Defines>_RTLDLL;WIN32;TRACE;ENAGLO;ENAGAL;ENAQZS;ENACMP;ENAIRN;NFREQ=3;NEXOBS=3;$(BCC_Defines)</BCC_Defines> - <BRCC_Defines>_RTLDLL;WIN32;TRACE;ENAGLO;ENAGAL;ENAQZS;NFREQ=3;NEXOBS=3;$(BRCC_Defines)</BRCC_Defines> + <TASM_Defines>_RTLDLL;WIN32;TRACE;ENAGLO;ENAGAL;ENAQZS;NFREQ=4;NEXOBS=3;$(TASM_Defines)</TASM_Defines> + <BCC_Defines>_RTLDLL;WIN32;TRACE;ENAGLO;ENAGAL;ENAQZS;ENACMP;ENAIRN;NFREQ=4;NEXOBS=3;$(BCC_Defines)</BCC_Defines> + <BRCC_Defines>_RTLDLL;WIN32;TRACE;ENAGLO;ENAGAL;ENAQZS;NFREQ=4;NEXOBS=3;$(BRCC_Defines)</BRCC_Defines> <BCC_UserSuppliedOptions> -tWM</BCC_UserSuppliedOptions> <DCC_Namespace>Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace)</DCC_Namespace> <IncludePath>$(BDSINCLUDE)\windows\vcl;$(IncludePath)</IncludePath> diff --git a/app/srctblbrows/srctblbrows.cbproj b/app/srctblbrows/srctblbrows.cbproj index 3d412c20cdcddf4f61bdbc3c789587ebc1e6880e..ab0a261e7032156a464acabffc38464b10fc8bf8 100644 --- a/app/srctblbrows/srctblbrows.cbproj +++ b/app/srctblbrows/srctblbrows.cbproj @@ -101,7 +101,7 @@ <TASM_Defines>_RTLDLL;WIN32;TRACE;$(TASM_Defines)</TASM_Defines> <BCC_UserSuppliedOptions> -tWM</BCC_UserSuppliedOptions> <BRCC_Defines>_RTLDLL;WIN32;TRACE;$(BRCC_Defines)</BRCC_Defines> - <BCC_Defines>_RTLDLL;WIN32;TRACE;ENAGLO;ENAGAL;ENAQZS;NFREQ=3;$(BCC_Defines)</BCC_Defines> + <BCC_Defines>_RTLDLL;WIN32;TRACE;ENAGLO;ENAGAL;ENAQZS;NFREQ=4;$(BCC_Defines)</BCC_Defines> <DCC_Namespace>Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace)</DCC_Namespace> <IncludePath>$(BDSINCLUDE)\windows\vcl;$(IncludePath)</IncludePath> <VerInfo_IncludeVerInfo>true</VerInfo_IncludeVerInfo> diff --git a/src/options.c b/src/options.c index b3737ba942fa81b8daccfa52b082976d39a3de84..1d18d4188e3651924d6fa9659c12e0ddfe054a15 100644 --- a/src/options.c +++ b/src/options.c @@ -136,6 +136,7 @@ EXPORT opt_t sysopts[]={ {"stats-weightmode",3, (void *)&prcopt_.weightmode, WEIGHTOPT}, {"stats-eratio1", 1, (void *)&prcopt_.eratio[0], "" }, {"stats-eratio2", 1, (void *)&prcopt_.eratio[1], "" }, + {"stats-eratio5", 1, (void *)&prcopt_.eratio[2], "" }, {"stats-errphase", 1, (void *)&prcopt_.err[1], "m" }, {"stats-errphaseel",1, (void *)&prcopt_.err[2], "m" }, {"stats-errphasebl",1, (void *)&prcopt_.err[3], "m/10km"}, diff --git a/src/rtkcmn.c b/src/rtkcmn.c index d2d0e9c975fb9bc5358272e484a07c642f3f17ab..5af0b14fdd9940862d4ed4c51f136af31d211fa1 100644 --- a/src/rtkcmn.c +++ b/src/rtkcmn.c @@ -184,7 +184,7 @@ const double chisqr[100]={ /* chi-sqr(n) (alpha=0.001) */ 138 ,139 ,140 ,142 ,143 ,144 ,145 ,147 ,148 ,149 }; const double lam_carr[MAXFREQ]={ /* carrier wave length (m) */ - CLIGHT/FREQL1,CLIGHT/FREQL2,CLIGHT/FREQE5b,CLIGHT/FREQL5,CLIGHT/FREQE6, + CLIGHT/FREQL1,CLIGHT/FREQL2,CLIGHT/FREQL5,CLIGHT/FREQE6, CLIGHT/FREQE5ab,CLIGHT/FREQs }; const prcopt_t prcopt_default={ /* defaults processing options */ @@ -273,13 +273,13 @@ static unsigned char obsfreqs_cmp[]={ static char codepris[7][MAXFREQ][16]={ /* code priority table */ /* L1/E1/B1 L2/B2 E5b/B3 L5/E5a/L3 E6/LEX E5(a+b) S */ - {"CPYWMNSL","CLPYWMNDSX","IQX" ,"IQX" ,"" ,"" ,"" }, /* GPS */ - {"PC" ,"PC" ,"IQX" ,"IQX" ,"" ,"" ,"" }, /* GLO */ - {"CABXZ" ,"" ,"IQX" ,"IQX" ,"ABCXZ" ,"IQX" ,"" }, /* GAL */ - {"CSLXZ" ,"SLX" ,"IQX" ,"IQX" ,"SLX" ,"" ,"" }, /* QZS */ - {"C" ,"" ,"IQX" ,"IQX" ,"" ,"" ,"" }, /* SBS */ - {"IQX" ,"IQX" ,"IQX" ,"IQX" ,"IQX" ,"" ,"" }, /* BDS */ - {"" ,"" ,"ABCX" ,"ABCX" ,"" ,"" ,"ABCX"} /* IRN */ + {"CPYWMNSL","CLPYWMNDSX","IQX" ,"" ,"" ,"" }, /* GPS */ + {"PC" ,"PC" ,"IQX" ,"" ,"" ,"" }, /* GLO */ + {"CABXZ" ,"" ,"IQX" ,"ABCXZ" ,"IQX" ,"" }, /* GAL */ + {"CSLXZ" ,"SLX" ,"IQX" ,"SLX" ,"" ,"" }, /* QZS */ + {"C" ,"" ,"IQX" ,"" ,"" ,"" }, /* SBS */ + {"IQX" ,"IQX" ,"IQX" ,"IQX" ,"" ,"" }, /* BDS */ + {"" ,"" ,"ABCX" ,"" ,"" ,"ABCX"} /* IRN */ }; static fatalfunc_t *fatalfunc=NULL; /* fatal callback function */ @@ -647,7 +647,7 @@ extern void setcodepri(int sys, int freq, const char *pri) trace(3,"setcodepri:sys=%d freq=%d pri=%s\n",sys,freq,pri); if (freq<=0||MAXFREQ<freq) return; - if (sys&SYS_GPS) strcpy(codepris[0][freq-1],pri); + if (sys&SYS_GPS) strcpy(codepris[0][freq-1],pri); if (sys&SYS_GLO) strcpy(codepris[1][freq-1],pri); if (sys&SYS_GAL) strcpy(codepris[2][freq-1],pri); if (sys&SYS_QZS) strcpy(codepris[3][freq-1],pri); diff --git a/src/rtklib.h b/src/rtklib.h index 2abdfe5cd8078dba5bf19a700d1633d0f57e522b..f8cc401e4f6c21fb1606f45a991f2779d439b5fc 100644 --- a/src/rtklib.h +++ b/src/rtklib.h @@ -78,7 +78,7 @@ extern "C" { #define HION 350000.0 /* ionosphere height (m) */ -#define MAXFREQ 7 /* max NFREQ */ +#define MAXFREQ 6 /* max NFREQ */ #define FREQL1 1.57542E9 /* L1/E1/B1 frequency (Hz) */ #define FREQL2 1.22760E9 /* L2 frequency (Hz) */ diff --git a/src/rtkpos.c b/src/rtkpos.c index bfd77e991e269f822afc33e55cde99a923c20d06..29ae04d4e38772449250c9b1f269a98ddb33a7a0 100644 --- a/src/rtkpos.c +++ b/src/rtkpos.c @@ -788,7 +788,7 @@ static void udbias(rtk_t *rtk, double tt, const obsd_t *obs, const int *sat, const int *iu, const int *ir, int ns, const nav_t *nav) { double cp,pr,cp1,cp2,pr1,pr2,*bias,offset,lami,lam1,lam2,C1,C2; - int i,j,f,slip,reset,nf=NF(&rtk->opt),sysi; + int i,j,f,slip,rejc,reset,nf=NF(&rtk->opt),sysi; trace(3,"udbias : tt=%.3f ns=%d\n",tt,ns); @@ -832,14 +832,16 @@ static void udbias(rtk_t *rtk, double tt, const obsd_t *obs, const int *sat, rtk->ssat[i-1].lock[f]=-rtk->opt.minlock; } } - /* reset phase-bias state if detecting cycle slip */ + /* reset phase-bias state if detecting cycle slip or outlier */ for (i=0;i<ns;i++) { j=IB(sat[i],f,&rtk->opt); rtk->P[j+j*rtk->nx]+=rtk->opt.prn[0]*rtk->opt.prn[0]*fabs(tt); slip=rtk->ssat[sat[i]-1].slip[f]; + rejc=rtk->ssat[sat[i]-1].rejc[f]; if (rtk->opt.ionoopt==IONOOPT_IFLC) slip|=rtk->ssat[sat[i]-1].slip[1]; - if (rtk->opt.modear==ARMODE_INST||!(slip&1)) continue; + if (rtk->opt.modear==ARMODE_INST||(!(slip&1)&&rejc<2)) continue; rtk->x[j]=0.0; + rtk->ssat[sat[i]-1].rejc[f]=0; rtk->ssat[sat[i]-1].lock[f]=-rtk->opt.minlock; /* retain icbiases for GLONASS sats */ if (rtk->ssat[sat[i]-1].sys!=SYS_GLO) rtk->ssat[sat[i]-1].icbias[f]=0; @@ -1212,7 +1214,7 @@ static int ddres(rtk_t *rtk, const nav_t *nav, const obsd_t *obs, double dt, con double *H, double *R, int *vflg) { prcopt_t *opt=&rtk->opt; - double bl,dr[3],posu[3],posr[3],didxi=0.0,didxj=0.0,*im,icb; + double bl,dr[3],posu[3],posr[3],didxi=0.0,didxj=0.0,*im,icb,threshadj; double *tropr,*tropu,*dtdxr,*dtdxu,*Ri,*Rj,lami,lamj,fi,fj,df,*Hi=NULL; int i,j,k,m,f,frq,code,nv=0,nb[NFREQ*4*2+2]={0},b=0,sysi,sysj,nf=NF(opt); @@ -1361,15 +1363,20 @@ static int ddres(rtk_t *rtk, const nav_t *nav, const obsd_t *obs, double dt, con else rtk->ssat[sat[j]-1].resc[frq]=v[nv]; /* carrier phase */ /* if residual too large, flag as outlier */ - if (opt->maxinno>0.0&&fabs(v[nv])>opt->maxinno) { - if (!code) { - rtk->ssat[sat[i]-1].rejc[frq]++; - rtk->ssat[sat[j]-1].rejc[frq]++; + k=IB(sat[j],frq,opt); + if (rtk->P[k+rtk->nx*k]<SQR(rtk->opt.std[0]/2)) { /* skip check if bias just intialized */ + threshadj=code?1:opt->eratio[frq]; /* adjust threshold by error stdev ratio */ + if (opt->maxinno>0.0&&fabs(v[nv])>opt->maxinno/threshadj) { + if (!code) { + rtk->ssat[sat[j]-1].vsat[frq]=0; + rtk->ssat[sat[j]-1].rejc[frq]++; + } + errmsg(rtk,"outlier rejected (sat=%3d-%3d %s%d v=%.3f)\n", + sat[i],sat[j],code?"P":"L",frq+1,v[nv]); + continue; } - errmsg(rtk,"outlier rejected (sat=%3d-%3d %s%d v=%.3f)\n", - sat[i],sat[j],code?"P":"L",frq+1,v[nv]); - continue; } + /* single-differenced measurement error variances */ Ri[nv] = varerr(sat[i], sysi, azel[1+iu[i]*2], 0.25 * rtk->ssat[sat[i]-1].snr_rover[frq],