Ignore:
Timestamp:
Jul 15, 2020, 9:24:30 AM (4 years ago)
Author:
stuerze
Message:

intial imprort for igs ssr encoding and decoding

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/BNC/src/RTCM3/clock_and_orbit/clock_orbit_rtcm.c

    r8969 r8970  
    9090
    9191/* GPS macros also used for other systems when matching! */
    92 #define T_MESSAGE_NUMBER(a)              ADDBITS(12, a)     /* DF002 */
    93 #define T_GPS_SATELLITE_ID(a)            ADDBITS(6, a)      /* DF068 */
    94 #define T_QZSS_SATELLITE_ID(a)           ADDBITS(4, a)      /* DF249 */
    95 #define T_GLONASS_SATELLITE_ID(a)        ADDBITS(5, a)
    96 
    97 #define T_GPS_IODE(a)                    ADDBITS(8, a)      /* DF071 */
    98 #define T_GLONASS_IOD(a)                 ADDBITS(8, a)      /* DF239 */
    99 #define T_GALILEO_IOD(a)                 ADDBITS(10, a)     /* DF459 */
    100 #define T_SBAS_T0MOD(a)                  ADDBITS(9, (a/16)) /* DF468 */
    101 #define T_SBAS_IODCRC(a)                 ADDBITS(24, a)     /* DF469 */
    102 #define T_BDS_TOEMOD(a)                  ADDBITS(10, (a/8)) /* DF470 */
    103 #define T_BDS_IOD(a)                     ADDBITS(8, a)      /* DF471 */
     92#define T_RTCM_MESSAGE_NUMBER(a)         ADDBITS(12, a)      /* DF002 */
     93#define T_GPS_SATELLITE_ID(a)            ADDBITS( 6, a)      /* DF068 */
     94#define T_QZSS_SATELLITE_ID(a)           ADDBITS( 4, a)      /* DF249 */
     95#define T_GLONASS_SATELLITE_ID(a)        ADDBITS( 5, a)
     96
     97#define T_GPS_IODE(a)                    ADDBITS( 8, a)      /* DF071 */
     98#define T_GLONASS_IOD(a)                 ADDBITS( 8, a)      /* DF239 */
     99#define T_GALILEO_IOD(a)                 ADDBITS(10, a)      /* DF459 */
     100#define T_SBAS_T0MOD(a)                  ADDBITS( 9, (a/16)) /* DF468 */
     101#define T_SBAS_IODCRC(a)                 ADDBITS(24, a)      /* DF469 */
     102#define T_BDS_TOEMOD(a)                  ADDBITS(10, (a/8))  /* DF470 */
     103#define T_BDS_IOD(a)                     ADDBITS( 8, a)      /* DF471 */
    104104
    105105#define T_DELTA_RADIAL(a)                SCALEADDBITS(22,    10000.0, a)
     
    114114#define T_DELTA_CLOCK_C1(a)              SCALEADDBITS(21,  1000000.0, a)
    115115#define T_DELTA_CLOCK_C2(a)              SCALEADDBITS(27, 50000000.0, a)
    116 #define T_NO_OF_CODE_BIASES(a)           ADDBITS(5, a)
    117 #define T_NO_OF_PHASE_BIASES(a)          ADDBITS(5, a)
    118 #define T_SIGNAL_IDENTIFIER(a)           ADDBITS(5, a)
     116#define T_NO_OF_CODE_BIASES(a)           ADDBITS( 5, a)
     117#define T_NO_OF_PHASE_BIASES(a)          ADDBITS( 5, a)
     118#define T_SIGNAL_IDENTIFIER(a)           ADDBITS( 5, a)
    119119#define T_CODE_BIAS(a)                   SCALEADDBITS(14,      100.0, a)
    120 #define T_YAW_ANGLE(a)                   SCALEADDBITS(9,   256.0/MPI, a)
    121 #define T_YAW_RATE(a)                    SCALEADDBITS(8, 8192.0/MPI, a)
     120#define T_YAW_ANGLE(a)                   SCALEADDBITS( 9,  256.0/MPI, a)
     121#define T_YAW_RATE(a)                    SCALEADDBITS( 8, 8192.0/MPI, a)
    122122#define T_PHASE_BIAS(a)                  SCALEADDBITS(20,    10000.0, a)
    123123
    124124#define T_GPS_EPOCH_TIME(a)              ADDBITS(20, a)
    125125#define T_GLONASS_EPOCH_TIME(a)          ADDBITS(17, a)
    126 #define T_NO_OF_SATELLITES(a)            ADDBITS(6, a)
    127 #define T_MULTIPLE_MESSAGE_INDICATOR(a)  ADDBITS(1, a)
    128 #define T_DISPERSIVE_BIAS_INDICATOR(a)   ADDBITS(1, a)
    129 #define T_MW_CONSISTENCY_INDICATOR(a)    ADDBITS(1, a)
    130 #define T_INTEGER_INDICATOR(a)           ADDBITS(1, a)
    131 #define T_WIDE_LANE_INDICATOR(a)         ADDBITS(2, a)
    132 #define T_DISCONTINUITY_COUNTER(a)       ADDBITS(4, a)
    133 #define T_SSR_URA(a)                     ADDBITS(6, a)
     126#define T_NO_OF_SATELLITES(a)            ADDBITS( 6, a)
     127#define T_MULTIPLE_MESSAGE_INDICATOR(a)  ADDBITS( 1, a)
     128#define T_DISPERSIVE_BIAS_INDICATOR(a)   ADDBITS( 1, a)
     129#define T_MW_CONSISTENCY_INDICATOR(a)    ADDBITS( 1, a)
     130#define T_INTEGER_INDICATOR(a)           ADDBITS( 1, a)
     131#define T_WIDE_LANE_INDICATOR(a)         ADDBITS( 2, a)
     132#define T_DISCONTINUITY_COUNTER(a)       ADDBITS( 4, a)
     133#define T_SSR_URA(a)                     ADDBITS( 6, a)
    134134#define T_HR_CLOCK_CORRECTION(a)         SCALEADDBITS(22,    10000.0, a)
    135 #define T_SSR_UPDATE_INTERVAL(a)         ADDBITS(4, a)
    136 
    137 #define T_SSR_IOD(a)                     ADDBITS(4, a)
     135#define T_SSR_UPDATE_INTERVAL(a)         ADDBITS( 4, a)
     136
     137#define T_SSR_IOD(a)                     ADDBITS( 4, a)
    138138#define T_SSR_PROVIDER_ID(a)             ADDBITS(16, a)
    139 #define T_SSR_SOLUTION_ID(a)             ADDBITS(4, a)
    140 
    141 #define T_NO_IONO_LAYERS(a)              ADDBITS(2, a-1)
    142 #define T_VTEC_QUALITY_INDICATOR(a)      SCALEADDBITS(9,        20.0, a)
     139#define T_SSR_SOLUTION_ID(a)             ADDBITS( 4, a)
     140
     141#define T_NO_IONO_LAYERS(a)              ADDBITS( 2, a-1)
     142#define T_VTEC_QUALITY_INDICATOR(a)      SCALEADDBITS( 9,       20.0, a)
    143143#define T_IONO_COEFF(a)                  SCALEADDBITS(16,      200.0, a)
    144 #define T_IONO_DEGREE(a)                 ADDBITS(4, a-1)
    145 #define T_IONO_ORDER(a)                  ADDBITS(4, a-1)
    146 #define T_IONO_HEIGHT(a)                 SCALEADDBITS(8,   1/10000.0, a)
     144#define T_IONO_DEGREE(a)                 ADDBITS( 4, a-1)
     145#define T_IONO_ORDER(a)                  ADDBITS( 4, a-1)
     146#define T_IONO_HEIGHT(a)                 SCALEADDBITS( 8,   1/10000.0, a)
    147147
    148148static double URAToValue(int ura) {
     
    186186  CLOCKORBIT_COUNTSAT
    187187};
    188 /*
    189 //CNES PATCH MEDIAN
    190 static double Median(int n, double x[50]) {
    191   double temp;
    192   int i, j;
    193   // the following two loops sort the array x in ascending order
    194   if (n <= 2)
    195     return 0.0;
    196 
    197   for (i = 0; i < n - 1; i++)
    198     for (j = i + 1; j < n; j++)
    199       if (x[j] < x[i]) {
    200         // swap elements
    201         temp = x[i];
    202         x[i] = x[j];
    203         x[j] = temp;
    204       }
    205 
    206   if (n % 2 == 0)
    207     return ((x[n / 2] + x[n / 2 - 1]) / 2.0);
    208   else
    209     return x[n / 2];
    210 }
    211 //PATCH MEDIAN
    212 //PATCH CLKOFFSET
    213  size_t MakeClockOrbit(struct ClockOrbit *co, enum ClockOrbitType type,*/
    214188
    215189size_t MakeClockOrbit(const struct ClockOrbit *co, enum ClockOrbitType type,
     
    218192
    219193  memset(status, 0, sizeof(status));
    220 /*  PATCH CLKOFFSET /////////////////////////////////////////////////////
    221   //double tSum
    222   double tOffset, tClock[50];
    223   int j, tNb;
    224   for (s = 0; s < CLOCKORBIT_SATNUM; ++s)
    225       {
    226     //tSum = 0.0;
    227     tOffset = 0.0;
    228     tNb = 0;
    229     for (j = 0; j < 50; j++)
    230       tClock[j] = 0.0;
    231 
    232     for (i = satoffset[s]; i < satoffset[s] + co->NumberOfSat[s]; ++i) {
    233       if (co->Sat[i].Clock.DeltaA0)  {
    234         //tSum += co->Sat[i].Clock.DeltaA0; //Average
    235         tClock[tNb] = co->Sat[i].Clock.DeltaA0; //Median
    236         tNb++;
    237       }
    238     }
    239     //tOffset = tSum/(double)tNb; //Average
    240     tOffset = Median(tNb, tClock); //Median
    241     for (i = satoffset[s]; i < satoffset[s] + co->NumberOfSat[s]; ++i)
    242       if (co->Sat[i].Clock.DeltaA0) {
    243          //clkoffset_test
    244 //         FILE *ficOffsetClk = fopen("ClkOffset.txt","a");
    245 //         fprintf(ficOffsetClk,"%d %d %d %lf %lf %lf\n",co->EpochTime[s], s, i, co->Sat[i].Clock.DeltaA0, tOffset, co->Sat[i].Clock.DeltaA0-tOffset);
    246 //         fclose(ficOffsetClk);
    247 
    248         co->Sat[i].Clock.DeltaA0 -= tOffset;
    249       }
    250   }
    251   //PATCH CLKOFFSET ///////////////////////////////////////////////////// */
    252 
    253    STARTDATA
     194
     195  STARTDATA
    254196
    255197  for (s = 0; s < CLOCKORBIT_SATNUM; ++s) {
     
    269211    if (status[s][COBOFS_ORBIT]) {
    270212      INITBLOCK
    271       T_MESSAGE_NUMBER(corbase[s] + COBOFS_ORBIT)
     213      T_RTCM_MESSAGE_NUMBER(corbase[s] + COBOFS_ORBIT)
    272214      switch (s) {
    273215        case CLOCKORBIT_SATGPS:
     
    329271    if (status[s][COBOFS_CLOCK]) {
    330272      INITBLOCK
    331       T_MESSAGE_NUMBER(corbase[s] + COBOFS_CLOCK)
     273      T_RTCM_MESSAGE_NUMBER(corbase[s] + COBOFS_CLOCK)
    332274      switch (s) {
    333275        case CLOCKORBIT_SATGPS:
     
    383325#endif
    384326      INITBLOCK
    385       T_MESSAGE_NUMBER(corbase[s] + COBOFS_COMBINED)
     327      T_RTCM_MESSAGE_NUMBER(corbase[s] + COBOFS_COMBINED)
    386328      switch (s) {
    387329        case CLOCKORBIT_SATGPS:
     
    462404    if (status[s][COBOFS_HR]) {
    463405      INITBLOCK
    464       T_MESSAGE_NUMBER(corbase[s] + COBOFS_HR)
     406      T_RTCM_MESSAGE_NUMBER(corbase[s] + COBOFS_HR)
    465407      switch (s) {
    466408        case CLOCKORBIT_SATGPS:
     
    502444    if (status[s][COBOFS_URA]) {
    503445      INITBLOCK
    504       T_MESSAGE_NUMBER(corbase[s] + COBOFS_URA)
     446      T_RTCM_MESSAGE_NUMBER(corbase[s] + COBOFS_URA)
    505447      switch (s) {
    506448        case CLOCKORBIT_SATGPS:
     
    553495    if (b->NumberOfSat[s] && (type == CBTYPE_AUTO || type == corbase[s] + COBOFS_CBIAS)) {
    554496      INITBLOCK
    555       T_MESSAGE_NUMBER(corbase[s] + COBOFS_CBIAS)
     497      T_RTCM_MESSAGE_NUMBER(corbase[s] + COBOFS_CBIAS)
    556498      switch (s) {
    557499        case CLOCKORBIT_SATGPS:
     
    608550    if (b->NumberOfSat[s] && (type == PBTYPE_AUTO || type == s + PBTYPE_BASE)) {
    609551      INITBLOCK
    610       T_MESSAGE_NUMBER(s + PBTYPE_BASE)
     552      T_RTCM_MESSAGE_NUMBER(s + PBTYPE_BASE)
    611553      switch (s) {
    612554        case CLOCKORBIT_SATGPS:
     
    669611  STARTDATA
    670612    INITBLOCK
    671   T_MESSAGE_NUMBER(VTEC_BASE)
     613  T_RTCM_MESSAGE_NUMBER(VTEC_BASE)
    672614
    673615  T_GPS_EPOCH_TIME(v->EpochTime)
     
    13461288          continue;
    13471289      }
    1348 #ifdef COR_LATENCY
    1349       if(s == CLOCKORBIT_SATGPS && type-corbase[s] != COBOFS_BIAS) {
    1350         co->epochGPS[co->epochSize] = co->EpochTime[s];
    1351         if(co->epochSize < COR_LATENCYCOUNT)
    1352         ++co->epochSize;
    1353       }
    1354 #endif
    13551290#ifdef DEBUG
    13561291      for(type = 0; type < (int)size && (unsigned char)buffer[type] != 0xD3; ++type)
Note: See TracChangeset for help on using the changeset viewer.