@@ -2031,7 +2031,7 @@ extern int outrnxobsh(FILE *fp, const rnxopt_t *opt, const nav_t *nav)
2031
2031
{
2032
2032
double ep [6 ],pos [3 ]= {0 },del [3 ]= {0 };
2033
2033
char date [32 ],* sys ,* tsys = "GPS" ;
2034
- int i ;
2034
+ int i , m , j , snr ;
2035
2035
2036
2036
trace (3 ,"outrnxobsh:\n" );
2037
2037
@@ -2085,6 +2085,15 @@ extern int outrnxobsh(FILE *fp, const rnxopt_t *opt, const nav_t *nav)
2085
2085
if (opt -> tint > 0.0 ) {
2086
2086
fprintf (fp ,"%10.3f%50s%-20s\n" ,opt -> tint ,"" ,"INTERVAL" );
2087
2087
}
2088
+ if (opt -> rnxver >=300 ) { /* ver.3 */
2089
+ snr = 0 ;
2090
+ for (m = 0 ;m < 7 ;m ++ ) {
2091
+ for (j = 0 ;j < opt -> nobs [m ];j ++ ) {
2092
+ if (opt -> tobs [m ][j ][0 ]== 'S' ) snr = 1 ;
2093
+ }
2094
+ }
2095
+ if (snr ) fprintf (fp ,"%4s%-56s%-20s\n" ,"DBHZ" ,"" ,"SIGNAL STRENGTH UNIT" );
2096
+ }
2088
2097
time2epoch (opt -> tstart ,ep );
2089
2098
fprintf (fp ," %04.0f %02.0f %02.0f %02.0f %02.0f %010.7f %-12s%-20s\n" ,
2090
2099
ep [0 ],ep [1 ],ep [2 ],ep [3 ],ep [4 ],ep [5 ],tsys ,"TIME OF FIRST OBS" );
@@ -2105,7 +2114,7 @@ extern int outrnxobsh(FILE *fp, const rnxopt_t *opt, const nav_t *nav)
2105
2114
return fprintf (fp ,"%-60.60s%-20s\n" ,"" ,"END OF HEADER" )!= EOF ;
2106
2115
}
2107
2116
/* output observation data field ---------------------------------------------*/
2108
- static void outrnxobsf (FILE * fp , double obs , int lli )
2117
+ static void outrnxobsf (FILE * fp , double obs , int lli , int snr )
2109
2118
{
2110
2119
if (obs == 0.0 || obs <=-1E9 || obs >=1E9 ) {
2111
2120
fprintf (fp ," " );
@@ -2114,10 +2123,16 @@ static void outrnxobsf(FILE *fp, double obs, int lli)
2114
2123
fprintf (fp ,"%14.3f" ,obs );
2115
2124
}
2116
2125
if (lli < 0 || !(lli & (LLI_SLIP |LLI_HALFC |LLI_BOCTRK ))) {
2117
- fprintf (fp ," " );
2126
+ fprintf (fp ," " );
2118
2127
}
2119
2128
else {
2120
- fprintf (fp ,"%1.1d " ,lli & (LLI_SLIP |LLI_HALFC |LLI_BOCTRK ));
2129
+ fprintf (fp ,"%1.1d" ,lli & (LLI_SLIP |LLI_HALFC |LLI_BOCTRK ));
2130
+ }
2131
+ if (snr < 0 ) {
2132
+ fprintf (fp ," " );
2133
+ }
2134
+ else {
2135
+ fprintf (fp ,"%1.1d" ,snr );
2121
2136
}
2122
2137
}
2123
2138
/* search obsservattion data index -------------------------------------------*/
@@ -2195,9 +2210,9 @@ extern int outrnxobsb(FILE *fp, const rnxopt_t *opt, const obsd_t *obs, int n,
2195
2210
int flag , double _dClockBias )
2196
2211
{
2197
2212
const char * mask ;
2198
- double ep [6 ],dL ;
2213
+ double ep [6 ],dL , snrRaw ;
2199
2214
char sats [MAXOBS ][4 ]= {"" };
2200
- int i ,j ,k ,m ,ns ,sys ,ind [MAXOBS ],s [MAXOBS ]= {0 };
2215
+ int i ,j ,k ,m ,ns ,sys ,ind [MAXOBS ],s [MAXOBS ]= {0 }, snrRnx ;
2201
2216
2202
2217
trace (3 ,"outrnxobsb: n=%d\n" ,n );
2203
2218
@@ -2253,19 +2268,29 @@ extern int outrnxobsb(FILE *fp, const rnxopt_t *opt, const obsd_t *obs, int n,
2253
2268
/* search obs data index */
2254
2269
if ((k = obsindex (opt -> rnxver ,sys ,obs [ind [i ]].code ,opt -> tobs [m ][j ],
2255
2270
mask ))< 0 ) {
2256
- outrnxobsf (fp ,0.0 ,-1 );
2271
+ outrnxobsf (fp ,0.0 ,-1 , -1 );
2257
2272
continue ;
2258
2273
}
2259
2274
/* phase shift (cyc) */
2260
2275
dL = (obs [ind [i ]].L [k ]!= 0.0 )?opt -> shift [m ][j ]:0.0 ;
2261
2276
2277
+ /* stardized signal strength */
2278
+ snrRaw = obs [ind [i ]].SNR [k ]* SNR_UNIT ;
2279
+ if (opt -> outsnr && snrRaw > 0.0 ) {
2280
+ snrRnx = snrRaw /6 ;
2281
+ snrRnx = snrRnx < 1 ?1 :snrRnx ;
2282
+ snrRnx = snrRnx > 9 ?9 :snrRnx ;
2283
+ } else {
2284
+ snrRnx = -1 ;
2285
+ }
2286
+
2262
2287
/* output field */
2263
2288
switch (opt -> tobs [m ][j ][0 ]) {
2264
2289
case 'C' :
2265
- case 'P' : outrnxobsf (fp ,obs [ind [i ]].P [k ],-1 ); break ;
2266
- case 'L' : outrnxobsf (fp ,obs [ind [i ]].L [k ]+ dL ,obs [ind [i ]].LLI [k ]); break ;
2267
- case 'D' : outrnxobsf (fp ,obs [ind [i ]].D [k ],-1 ); break ;
2268
- case 'S' : outrnxobsf (fp ,obs [ ind [ i ]]. SNR [ k ] * SNR_UNIT ,-1 ); break ;
2290
+ case 'P' : outrnxobsf (fp ,obs [ind [i ]].P [k ],-1 , snrRnx ); break ;
2291
+ case 'L' : outrnxobsf (fp ,obs [ind [i ]].L [k ]+ dL ,obs [ind [i ]].LLI [k ], -1 ); break ;
2292
+ case 'D' : outrnxobsf (fp ,obs [ind [i ]].D [k ],-1 , -1 ); break ;
2293
+ case 'S' : outrnxobsf (fp ,snrRaw , -1 ,-1 ); break ;
2269
2294
}
2270
2295
}
2271
2296
if (opt -> rnxver >=300 && fprintf (fp ,"\n" )== EOF ) return 0 ;
0 commit comments