@@ -1223,22 +1223,13 @@ static int ddres(rtk_t *rtk, const nav_t *nav, const obsd_t *obs, double dt, con
1223
1223
frq = f %nf ;code = f < nf ?0 :1 ;
1224
1224
1225
1225
/* find reference satellite with highest elevation, set to i */
1226
- for (i = -1 ,hiqual = 0 , j = 0 ;j < ns ;j ++ ) {
1226
+ for (i = -1 ,j = 0 ;j < ns ;j ++ ) {
1227
1227
sysi = rtk -> ssat [sat [j ]- 1 ].sys ;
1228
1228
if (!test_sys (sysi ,m ) || sysi == SYS_SBS ) continue ;
1229
1229
if (!validobs (iu [j ],ir [j ],f ,nf ,y )) continue ;
1230
- /* skip this sat if el is lower than current ref sat */
1231
- if (i > -1 && azel [1 + iu [j ]* 2 ]< azel [1 + iu [i ]* 2 ]) continue ;
1232
- /* skip low qual sat unless no other valid sat */
1233
- if ((rtk -> ssat [sat [j ]- 1 ].slip [frq ]& LLI_SLIP )||
1234
- (rtk -> ssat [sat [j ]- 1 ].lock [frq ]<=0 )) {
1235
- if (hiqual > 0 ) continue ; /* don't use low qual ref sat if have high qual sat */
1236
- i = j ; /* set ref sat (low quality) */
1237
- }
1238
- else {
1239
- hiqual = 1 ; /* indicate high quality ref sat found */
1240
- i = j ; /* set ref sat (hi quality) */
1241
- }
1230
+ /* skip sat with slip unless no other valid sat */
1231
+ if (i >=0 && rtk -> ssat [sat [j ]- 1 ].slip [frq ]& LLI_SLIP ) continue ;
1232
+ if (i < 0 || azel [1 + iu [j ]* 2 ]>=azel [1 + iu [i ]* 2 ]) i = j ;
1242
1233
}
1243
1234
if (i < 0 ) continue ;
1244
1235
@@ -1359,6 +1350,9 @@ static int ddres(rtk_t *rtk, const nav_t *nav, const obsd_t *obs, double dt, con
1359
1350
SNR_UNIT * rtk -> ssat [sat [j ]- 1 ].snr_rover [frq ],
1360
1351
SNR_UNIT * rtk -> ssat [sat [j ]- 1 ].snr_base [frq ],
1361
1352
bl ,dt ,f ,opt ,& obs [iu [j ]]);
1353
+ /* increase variance if half cycle flags set */
1354
+ if (!code && (obs [iu [i ]].LLI [frq ]& LLI_HALFC )) Ri [nv ]+= 0.01 ;
1355
+ if (!code && (obs [iu [j ]].LLI [frq ]& LLI_HALFC )) Rj [nv ]+= 0.01 ;
1362
1356
1363
1357
/* set valid data flags */
1364
1358
if (opt -> mode > PMODE_DGPS ) {
@@ -1416,10 +1410,10 @@ static double intpres(gtime_t time, const obsd_t *obs, int n, const nav_t *nav,
1416
1410
int i ,j ,k ,nf = NF (opt );
1417
1411
1418
1412
tt = timediff (time ,obs [0 ].time ); /* time delta between rover obs and current base obs */
1419
- trace (3 ,"intpres : n=%d tt=%.1f\n" ,n ,tt );
1413
+ trace (3 ,"intpres : n=%d tt=%.1f, epoch=%d \n" ,n ,tt , rtk -> epoch );
1420
1414
/* use current base obs if first epoch or delta time between rover obs and
1421
1415
current base obs very small */
1422
- if (nb == 0 || fabs (tt )< DTTOL ) {
1416
+ if (nb == 0 || rtk -> epoch == 0 || fabs (tt )< DTTOL ) {
1423
1417
nb = n ; for (i = 0 ;i < n ;i ++ ) obsb [i ]= obs [i ]; /* current base obs -> previous base obs */
1424
1418
return tt ;
1425
1419
}
@@ -1463,7 +1457,7 @@ static int ddidx(rtk_t *rtk, int *ix, int gps, int glo, int sbs)
1463
1457
int i ,j ,k ,m ,f ,n ,nb = 0 ,na = rtk -> na ,nf = NF (& rtk -> opt ),nofix ;
1464
1458
double fix [MAXSAT ],ref [MAXSAT ];
1465
1459
1466
- trace (3 ,"ddmat : gps=%d/%d glo=%d/%d sbs=%d\n" ,gps ,rtk -> opt .gpsmodear ,glo ,rtk -> opt .glomodear ,sbs );
1460
+ trace (3 ,"ddidx : gps=%d/%d glo=%d/%d sbs=%d\n" ,gps ,rtk -> opt .gpsmodear ,glo ,rtk -> opt .glomodear ,sbs );
1467
1461
1468
1462
/* clear fix flag for all sats (1=float, 2=fix) */
1469
1463
for (i = 0 ;i < MAXSAT ;i ++ ) for (j = 0 ;j < NFREQ ;j ++ ) {
@@ -2086,7 +2080,7 @@ static int relpos(rtk_t *rtk, const obsd_t *obs, int nu, int nr,
2086
2080
if (rtk -> opt .mode == PMODE_STATIC_START ) {
2087
2081
rtk -> opt .mode = PMODE_KINEMA ;
2088
2082
trace (3 ,"Fix and hold complete: switch to kinematic mode\n" );
2089
- }
2083
+ }
2090
2084
}
2091
2085
stat = SOLQ_FIX ;
2092
2086
}
@@ -2133,8 +2127,8 @@ static int relpos(rtk_t *rtk, const obsd_t *obs, int nu, int nr,
2133
2127
rtk -> sol .qv [5 ]= (float )rtk -> P [5 + 3 * rtk -> nx ];
2134
2128
}
2135
2129
rtk -> nfix = 0 ;
2136
- trace (3 ,"sol_rr= " );tracemat (3 ,rtk -> sol .rr ,1 ,6 ,15 ,3 );
2137
2130
}
2131
+ trace (3 ,"sol_rr= " );tracemat (3 ,rtk -> sol .rr ,1 ,6 ,15 ,3 );
2138
2132
/* save phase measurements */
2139
2133
for (i = 0 ;i < n ;i ++ ) for (j = 0 ;j < nf ;j ++ ) {
2140
2134
if (obs [i ].L [j ]== 0.0 ) continue ;
@@ -2177,6 +2171,7 @@ extern void rtkinit(rtk_t *rtk, const prcopt_t *opt)
2177
2171
rtk -> nx = opt -> mode <=PMODE_FIXED ?NX (opt ):pppnx (opt );
2178
2172
rtk -> na = opt -> mode <=PMODE_FIXED ?NR (opt ):pppnx (opt );
2179
2173
rtk -> tt = 0.0 ;
2174
+ rtk -> epoch = 0 ;
2180
2175
rtk -> x = zeros (rtk -> nx ,1 );
2181
2176
rtk -> P = zeros (rtk -> nx ,rtk -> nx );
2182
2177
rtk -> xa = zeros (rtk -> na ,1 );
@@ -2379,6 +2374,7 @@ extern int rtkpos(rtk_t *rtk, const obsd_t *obs, int n, const nav_t *nav)
2379
2374
}
2380
2375
/* relative potitioning */
2381
2376
relpos (rtk ,obs ,nu ,nr ,nav );
2377
+ rtk -> epoch ++ ;
2382
2378
outsolstat (rtk ,nav );
2383
2379
2384
2380
return 1 ;
0 commit comments