From f07240d5b1ceb530c34469d1c9d0fd612a11eeff Mon Sep 17 00:00:00 2001
From: Tim Everett <tim.everett3@gmail.com>
Date: Wed, 21 Aug 2019 17:46:03 -0600
Subject: [PATCH] - Additional improvement for outlier handling in RTK/PPK
 solutions

---
 src/rtkpos.c | 10 ++++++----
 1 file changed, 6 insertions(+), 4 deletions(-)

diff --git a/src/rtkpos.c b/src/rtkpos.c
index 5f780c4..3d7ce4e 100644
--- a/src/rtkpos.c
+++ b/src/rtkpos.c
@@ -1216,7 +1216,7 @@ static int ddres(rtk_t *rtk, const nav_t *nav, const obsd_t *obs, double dt, con
     prcopt_t *opt=&rtk->opt;
     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);
+    int i,j,ii,jj,k,m,f,frq,code,nv=0,nb[NFREQ*4*2+2]={0},b=0,sysi,sysj,nf=NF(opt);
     
     trace(3,"ddres   : dt=%.1f nx=%d ns=%d\n",dt,rtk->nx,ns);
     
@@ -1363,9 +1363,11 @@ 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 */
-                k=IB(sat[j],frq,opt);
-                /* adjust threshold by error stdev ratio unless phase bias just initialized*/
-                threshadj=code||(rtk->P[k+rtk->nx*k]>SQR(rtk->opt.std[0]/2))?opt->eratio[frq]:1;
+                ii=IB(sat[i],frq,opt);
+                jj=IB(sat[j],frq,opt);
+                /* adjust threshold by error stdev ratio unless one of the phase biases was just initialized*/
+                threshadj=code||(rtk->P[ii+rtk->nx*ii]>SQR(rtk->opt.std[0]/2))||
+                          (rtk->P[jj+rtk->nx*jj]>SQR(rtk->opt.std[0]/2))?opt->eratio[frq]:1;
                 if (opt->maxinno>0.0&&fabs(v[nv])>opt->maxinno*threshadj) {
                     if (!code) {
                         rtk->ssat[sat[j]-1].vsat[frq]=0;
-- 
GitLab