手机版 欢迎访问it开发者社区(www.mfbz.cn)网站

当前位置: > 开发

天线文件读取(.atx)

时间:2021/5/18 15:36:51|来源:|点击: 次

.atx文件读取主要涉及到boby部分,对于头文件并未对其详细读取,boby部分主要读取的范围如下

                                                                                     START OF ANTENNA    
BLOCK IIA           G01                 G032      1992-079A TYPE / SERIAL NO    
                                             0    29-JAN-17 METH / BY / # / DATE
     0.0                                                    DAZI                
     0.0  17.0   1.0                                        ZEN1 / ZEN2 / DZEN  
     2                                                      # OF FREQUENCIES    
  1992    11    22     0     0    0.0000000                 VALID FROM          
  2008    10    16    23    59   59.9999999                 VALID UNTIL         
IGS14_2136                                                  SINEX CODE          
   G01                                                      START OF FREQUENCY  
    279.00      0.00   2319.50                              NORTH / EAST / UP   
   NOAZI   -0.80   -0.90   -0.90   -0.80   -0.40    0.20    0.80    1.30    1.40    1.20    0.70    0.00   -0.40   -0.70   -0.90   -0.90   -0.90   -0.90
   G01                                                      END OF FREQUENCY    
   G02                                                      START OF FREQUENCY  
    279.00      0.00   2319.50                              NORTH / EAST / UP   
   NOAZI   -0.80   -0.90   -0.90   -0.80   -0.40    0.20    0.80    1.30    1.40    1.20    0.70    0.00   -0.40   -0.70   -0.90   -0.90   -0.90   -0.90
   G02                                                      END OF FREQUENCY    
                                                            END OF ANTENNA      

START OF ANTENNA开始,END OF ANTENNA结束。

结构体储存

typedef struct {        /* antenna parameters type */
    int n,nmax;         /* number of data/allocated */
    pcv_t *pcv;         /* antenna parameters data */
} pcvs_t;

typedef struct {        /* antenna parameter type */
    int sat;            /* satellite number (0:receiver) */
    char type[MAXANT];  /* antenna type */
    char code[MAXANT];  /* serial number or satellite code */
    gtime_t ts,te;      /* valid time start and end */
    double off[NFREQ][ 3]; /* phase center offset e/n/u or x/y/z (m) */
    double var[NFREQ][19]; /* phase center variation (m) */
                        /* el=90,85,...,0 or nadir=0,1,2,3,... (deg) */
} pcv_t;

读取数据部分主要是:

                      NORTH / EAST / UP储存在pcv.off。接收天线:平均天线相位中心相对于天线参考点(ARP)的偏心距。北、东、上分量(以毫米计)。卫星天线:在X、Y和z方向上,平均天线相位中心相对于卫星质心的偏心距(以毫米为单位)。

                      NOAZI储存在pcv.var。与方位角无关的模式的值。标志'NOAZI'表示一个非方位相关的模式,在任何情况下都必须指定。相位模式值以毫米为单位从'ZEN1'到'ZEN2'(增量为'DZEN')。

主要读取代码

    while (fgets(buff,sizeof(buff),fp)) {
        
        if (strlen(buff)<60||strstr(buff+60,"COMMENT")) continue;
        
        if (strstr(buff+60,"START OF ANTENNA")) {
            pcv=pcv0;
            state=1;
        }
        if (strstr(buff+60,"END OF ANTENNA")) {
            addpcv(&pcv,pcvs);
            state=0;
        }
        if (!state) continue;
        
        if (strstr(buff+60,"TYPE / SERIAL NO")) {
            strncpy(pcv.type,buff   ,20); pcv.type[20]='\0';
            strncpy(pcv.code,buff+20,20); pcv.code[20]='\0';
            if (!strncmp(pcv.code+3,"        ",8)) {
                pcv.sat=satid2no(pcv.code);
            }
        }
        else if (strstr(buff+60,"VALID FROM")) {
            if (!str2time(buff,0,43,&pcv.ts)) continue;
        }
        else if (strstr(buff+60,"VALID UNTIL")) {
            if (!str2time(buff,0,43,&pcv.te)) continue;
        }
        else if (strstr(buff+60,"START OF FREQUENCY")) {
            if (!pcv.sat&&buff[3]!='G') continue; /* only read rec ant for GPS */
            if (sscanf(buff+4,"%d",&f)<1) continue;
            for (i=0;freqs[i];i++) if (freqs[i]==f) break;
            if (freqs[i]) freq=i+1;
            /* for Galileo E5b: save to E2, not E7  */
            if (satsys(pcv.sat,NULL)==SYS_GAL&&f==7) freq=2;
        }
        else if (strstr(buff+60,"END OF FREQUENCY")) {
            freq=0;
        }
        else if (strstr(buff+60,"NORTH / EAST / UP")) {
            if (freq<1||NFREQ<freq) continue;
            if (decodef(buff,3,neu)<3) continue;
            pcv.off[freq-1][0]=neu[pcv.sat?0:1]; /* x or e */
            pcv.off[freq-1][1]=neu[pcv.sat?1:0]; /* y or n */
            pcv.off[freq-1][2]=neu[2];           /* z or u */
        }
        else if (strstr(buff,"NOAZI")) {
            if (freq<1||NFREQ<freq) continue;
            if ((i=decodef(buff+8,19,pcv.var[freq-1]))<=0) continue; //解码天线参数字段
            for (;i<19;i++) pcv.var[freq-1][i]=pcv.var[freq-1][i-1];
        }
    }

需要注意:(1)该代码只对GPS单系统天线文件读取,并未对其它系统读取。

                  (2)数据储存的部分只是储存了与相位角无关的值。

                  (3)接收机天线文件应用的同样的读取方法。

                  (4)freqs[]={1,2,5,0}。

                 (5)一个卫星读取完成后,通过判断END OF ANTENNA写入pcv结构体内,pcvs->n++。(pcvs->pcv[pcvs->n++]=*pcv;)

Copyright © 2002-2019 某某自媒体运营 版权所有