当前位置:网站首页>GPS从入门到放弃(二十)、天线偏移
GPS从入门到放弃(二十)、天线偏移
2022-07-06 13:46:00 【追捕的风】
天线偏移(Antenna Offsets)是指天线相位中心与物体质心的偏移,此偏移会给卫星定位带来厘米级的误差。在一般定位中,此误差可以忽略,但在精密定位中,需要消除此误差的影响。质心的概念中学物理都学过,不多说。这里解释一下天线相位中心。天线所辐射出的电磁波在离开天线一定的距离后,其等相位面会近似为一个球面,该球面的球心即为该天线的等效相位中心,即天线相位中心(Antenna Phase Center )。天线相位中心是一个理论上的点,也就是说,在理论上认为天线辐射的信号是以这个点为圆心向外辐射的。
天线偏移包括卫星的天线偏移以及接收机的天线偏移。
一、卫星天线偏移
卫星天线偏移(Satellite Antenna Offsets)是指卫星的天线相位中心与卫星质心的偏移。在精密定位中,我们需要用到精密星历。IGS 提供的精密星历是相对卫星质心的,而 GPS 的导航电文是相对天线相位中心的,我们在计算中必须考虑两者之间的差异。测量值因为是由接收到的信号得到的,所以其值也都是相对天线相位中心的。知道卫星天线偏移后,我们就可以将所有值统一转换成相对天线相位中心的,这样方便后面的定位解算。
那我们不是制造卫星的,怎么来知道卫星的天线偏移呢?理论上来说,卫星天线偏移只有制造卫星的才知道,而且每个卫星还可能各不相同。所幸我们有 IGS。卫星的天线偏移数据会上报给 IGS,而 IGS 统一整理发布提供所有的卫星天线偏移数据。数据可以从 IGS 的 ftp 服务器下载,地址为 ftp://ftp.igs.org/pub/station/general/。
IGS 提供的与卫星天线偏移相关的文件主要有两个:rcvr_ant.tab 和 igs14.atx
rcvr_ant.tab
这个文件的内容是 IGS 对各个设备的命名规范,如接收机、天线、雷达天线罩、卫星天线等。只有符合规范的名字才能用在 IGS 站提供的各种文件中。换句话说,如果在 IGS 的一些文件中看到一些疑惑的名字,也可以到这个文件中来查找对应的意义。
igs14.atx
这是一个符号链接文件,链接到最新修改的的 igs14_wwww.atx 文件,这里的 wwww 表示 GPS 周数。此文件包含卫星和接收机天线相位校正值,基于 IGS14 地球参考框架。
atx 文件的格式是 Antenna Exchange Format (ANTEX),在 antex14.txt 文件中有详细的对这个格式的说明(antex14.txt 文件同样可以在 IGS 的 ftp 服务器下载),这里只做简单的介绍。
如下内容是截取的igs14.atx中的一部分:
START OF ANTENNA
BLOCK IIF G01 G063 2011-036A 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
2011 7 16 0 0 0.0000000 VALID FROM
IGS14_2082 SINEX CODE
G01 START OF FREQUENCY
394.00 0.00 1501.80 NORTH / EAST / UP
NOAZI 6.10 4.40 2.80 1.30 -0.20 -1.40 -2.80 -3.90 -4.40 -4.40 -3.70 -2.30 -0.20 3.00 5.70 12.40 18.20 23.50
G01 END OF FREQUENCY
G02 START OF FREQUENCY
394.00 0.00 1501.80 NORTH / EAST / UP
NOAZI 6.10 4.40 2.80 1.30 -0.20 -1.40 -2.80 -3.90 -4.40 -4.40 -3.70 -2.30 -0.20 3.00 5.70 12.40 18.20 23.50
G02 END OF FREQUENCY
END OF ANTENNA
这是 GPS 系统中 PRN 为 01 的卫星的天线偏移数据。由 “# OF FREQUENCIES” 这一行可知它有 2 个频率。对第一个频率来说,“NORTH / EAST / UP” 这一行的三个数分别是三个方向的偏移值,单位为毫米。“ZEN1 / ZEN2 / DZEN” 这一行表示的是天底角的范围从 ZEN1 到 ZEN2,DZEN为步长,“NOAZI” 这一行中按照天底角的范围和步长给出了对应的相位中心变化值(pcv: phase center variations)。以第一个频率为例,“NOAZI” 行有18个值,对应 “ZEN1 / ZEN2 / DZEN” 这一行天底角0.0度到17.0度,步长1.0度,正好也是 ( Z E N 2 − Z E N 1 ) / D Z E N = 18 (ZEN2-ZEN1)/DZEN=18(ZEN2−ZEN1)/DZEN=18 个值。“DAZI” 这一行的值为0.0表示这个卫星的天线偏移数据是不依赖于方位角的(non-azimuth-dependent)。“NOAZI” 表示的也是不依赖方位角的值。若依赖于方位角,则 “DAZI” 为步长,“NOAZI” 行的下方会有 360 / D A Z I 360/DAZI360/DAZI 行,每一行也有( Z E N 2 − Z E N 1 ) / D Z E N (ZEN2-ZEN1)/DZEN(ZEN2−ZEN1)/DZEN 个值,对应一个方位角时不同的天底角时的相位中心变化值。因为步长分辨率有限,所以在实际应用中,若是角度在两个值之间,则可以通过插值在进行计算。
在RTKLIB中,是通过调用 readantex 函数来解析 atx 文件的,这里附上代码,过程很直接,就不多解释了。
static int readantex(const char *file, pcvs_t *pcvs)
{
FILE *fp;
static const pcv_t pcv0={0};
pcv_t pcv;
double neu[3];
int i,f,freq=0,state=0,freqs[]={1,2,5,6,7,8,0};
char buff[256];
trace(3,"readantex: file=%s\n",file);
if (!(fp=fopen(file,"r"))) {
trace(2,"antex pcv file open error: %s\n",file);
return 0;
}
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 (sscanf(buff+4,"%d",&f)<1) continue;
for (i=0;i<NFREQ;i++) if (freqs[i]==f) break;
if (i<NFREQ) freq=i+1;
}
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];
}
}
fclose(fp);
return 1;
}
而对于卫星天线偏移校正值的计算,RTKLIB 中则是调用 satantpcv 函数来进行的。个人觉得这个函数有点问题,其中只考虑了 phase center variations,而没有考虑 phase center offset。
二、接收机天线偏移
接收机天线偏移与卫星天线偏移有很多类似的地方,同样要用到 IGS 提供的这两个文件:rcvr_ant.tab 和 igs14.atx。rcvr_ant.tab 里面有接收机名字,igs14.atx 中有接收机天线偏移数据。
有所区别的是,接收机还有另外一个文件 antenna.gra,它提供了接收机的天线参考点(ARP: antenna reference point)和北向参考点(NRP: north reference point)的定义,以及天线的物理尺寸等。这是一个纯文本的文件,然而里面有各种天线的示意图,这里不得不对作图人表示佩服,有兴趣的同学可以自己去看。
在算法上,计算接收机天线偏移时不光要考虑计算卫星天线偏移时考虑的 phase center offset 和 phase center variations,还要考虑接收机的天线参考点位置。如在 RTKLIB 中,是通过 antmodel 函数来计算接收机的天线偏移校正值,代码如下。其中 del 为相对天线参考点偏移值,azel 为方位角和俯仰角,pcv->off 为 phase center offset,pcv->var 为 phase center variations。
void antmodel(const pcv_t *pcv, const double *del, const double *azel,
int opt, double *dant)
{
double e[3],off[3],cosel=cos(azel[1]);
int i,j;
trace(4,"antmodel: azel=%6.1f %4.1f opt=%d\n",azel[0]*R2D,azel[1]*R2D,opt);
e[0]=sin(azel[0])*cosel;
e[1]=cos(azel[0])*cosel;
e[2]=sin(azel[1]);
for (i=0;i<NFREQ;i++) {
for (j=0;j<3;j++) off[j]=pcv->off[i][j]+del[j];
dant[i]=-dot(off,e,3)+(opt?interpvar(90.0-azel[1]*R2D,pcv->var[i]):0.0);
}
trace(5,"antmodel: dant=%6.3f %6.3f\n",dant[0],dant[1]);
}
边栏推荐
- 新入职一家公司需要去实践和注意的内容
- Aggregate function with key in spark
- 50 commonly used numpy function explanations, parameters and usage examples
- 小满网络模型&http1-http2 &浏览器缓存
- High precision face recognition based on insightface, which can directly benchmark hongruan
- Yuan Xiaolin: safety is not only a standard, but also Volvo's unchanging belief and pursuit
- 红杉中国,刚刚募资90亿美元
- 首批入选!腾讯安全天御风控获信通院业务安全能力认证
- 美国科技行业结束黄金时代,芯片求售、裁员3万等哀声不断
- Torch Cookbook
猜你喜欢
Z function (extended KMP)
It's not my boast. You haven't used this fairy idea plug-in!
C how to set two columns comboboxcolumn in DataGridView to bind a secondary linkage effect of cascading events
Basic introduction of figure
Leetcode learning records (starting from the novice village, you can't kill out of the novice Village) ---1
PostgreSQL install GIS plug-in create extension PostGIS_ topology
Reptile practice (V): climbing watercress top250
Make menuconfig has a recipe for target 'menuconfig' failed error
Five wars of Chinese Baijiu
jvm:大对象在老年代的分配
随机推荐
guava:Collections.unmodifiableXXX创建的collection并不immutable
强化学习-学习笔记5 | AlphaGo
Unity3D学习笔记6——GPU实例化(1)
JS method to stop foreach
Redistemplate common collection instructions opsforhash (IV)
[Chongqing Guangdong education] Tianjin urban construction university concrete structure design principle a reference
PostgreSQL modifies the password of the database user
Reset Mikrotik Routeros using netinstall
Huawei has launched attacks in many industries at the same time, and its frightening technology has made European and American enterprises tremble
Realization of epoll reactor model
Acdreamoj1110 (multiple backpacks)
Efficiency tool +wps check box shows the solution to the sun problem
AI 企业多云存储架构实践 | 深势科技分享
From campus to Tencent work for a year of those stumbles!
11、 Service introduction and port
Quick news: the flybook players' conference is held online; Wechat payment launched "education and training service toolbox"
PostgreSQL install GIS plug-in create extension PostGIS_ topology
[Chongqing Guangdong education] Information Literacy of Sichuan Normal University: a new engine for efficiency improvement and lifelong learning reference materials
string的底层实现
十一、服务介绍及端口