一、多路径
在GNSS测量中,被测站附近的反射物所反射的卫星信号(反射波)如果进入接收机天线,就将和直接来自卫星的信号(直射波)产生干涉,从而使观测值偏离真值,产生所谓的“多路径误差”。这种由于多路径的信号传播所引起的干涉时延效应被称做多路径效应。
1、反射波对直射波/信号的影响
实际测量中,GNSS天线接收到的信号是直射波和反射波发生干涉后的组合信号。反射物可以是地面、山坡和测站附近的建筑物等。现以地面为例来加以说明。若接收天线同时收到了直接来自卫星的信号S和经地面反射后的反射信号S′,显然这两种信号所经过的路径长度是不同的,反射信号多经过的路径长度称为程差,用Δ表示。下图所示:
式中,H为天线离地面的高度。由于存在着波程差Δ,所以反射波和直射波间存在一个相位延迟θ(以弧度为单位),如下,其中λ为载波波长;
因此,反射波信号北接收机接收时,会出现两个现象:
1、相位延迟;
2、信号强度降低;
将反射物发射信号的能力用反射系数α表示;
α=0表示信号完全吸收,不反射;
α=1表示信号完全发射,不吸收;
公式表示如下:
直射波信号表达式为:U为信号电压,w为载波的角频率;
反射信号表达式为:
U 为直接信号的振幅,ω 为载波卫星的角频率,θ 为反射信号的相位延迟,α 为物体的反射系数。 由于卫星接收的是反射信号和直接信号的叠加信号,所以天线实际接收的信号为:
β、φ为:
φ即为多路径误差。当有多个反射信号同时进入接收机天线时,此时的多路径误差为:
2、消除和削弱多路径误差的方法和措施
1、选择合适的站址
2、选择合适的GNSS接收机
- 在天线下设置抑径板或抑径圈;
- 接收机天线对极化方向相反的反射信号应有较强的抑制能立;
- 改进接收机的软、硬件;
3、适当延长观测时间
二、地球自转校正
简单说,一般情况下,我们解算的坐标系为ECEF或BLH,两个坐标系都不是惯性坐标系,都收到地球自转的影响;计算卫星位置的时刻,是卫星信号发射的时刻/Ts;求解接收机位置的时刻,是接收到卫星导航信号的时刻/Tr;
Ts+传输时间=Tr;因此,Tr时刻的ECEF与Ts时刻的ECEF,发生了传输时间的转动,因此,需要将卫星位置做相应的变动,才能够准确计算的接收机位置。
以RTKLIB中,计算卫星、接收机几何距离代码为例:
/* geometric distance ----------------------------------------------------------
* compute geometric distance and receiver-to-satellite unit vector
* args : double *rs I satellilte position (ecef at transmission) (m)
* double *rr I receiver position (ecef at reception) (m)
* double *e O line-of-sight vector (ecef)
* return : geometric distance (m) (0>:error/no satellite position)
* notes : distance includes sagnac effect correction
*-----------------------------------------------------------------------------*/
//计算卫星和当前接收机位置之间的几何距离和 receiver-to-satellite 方向的单位向量。
extern double geodist(const double *rs, const double *rr, double *e)
{
double r;
int i;
if (norm(rs,3)<RE_WGS84) return -1.0;
for (i=0;i<3;i++) e[i]=rs[i]-rr[i];//矢量由接收机指向卫星
r=norm(e,3);
for (i=0;i<3;i++) e[i]/=r;
return r+OMGE*(rs[0]*rr[1]-rs[1]*rr[0])/CLIGHT; //校正地球自转
}
三、天线相位缠绕
相位缠绕(Phase Wind-Up)是发射端与接收端之间的相对运动导致的载波相位变化。对 GPS 系统来说,因为 GPS 卫星发送的是右旋圆极化(RHCP: Right Hand Circularly Polarized)的信号,在这种情况下,接收机或者卫星天线的旋转会导致载波相位发生改变,这个值可能达到一个载波周期,我们把这种现象叫做相位缠绕。
接收机端由于载体/接收机的运动导致的旋转/相位缠绕被接收机钟差吸收掉;因此,在PPP中不予以考虑,只考虑卫星端的相位缠绕。
所幸相位缠绕只影响载波相位测量,不影响码相位测量,在非精密定位中可以忽略其影响。对差分定位来说其影响一般也可以忽略,尤其是短基线的时候。然而对精密单点定位来说,其影响就不能忽略了,因其影响可能会达到分米级。
下面介绍常用的相位缠绕模型。
如下图所示是卫星、地球与太阳的位置关系:
在 RTKLIB 中是通过调用model_phw 函数来进行相位缠绕校正的。此函数的计算过程同上述模型几乎完全一致,这里附上代码,过程很直接,就不多解释了。/函数对卫星端和接收机端都进行了校正。
/* phase windup model --------------------------------------------------------*/
static int model_phw(gtime_t time, int sat, const char *type, int opt,
const double *rs, const double *rr, double *phw)
{
double exs[3],eys[3],ek[3],exr[3],eyr[3],eks[3],ekr[3],E[9];
double dr[3],ds[3],drs[3],r[3],pos[3],cosp,ph;
int i;
if (opt<=0) return 1; /* no phase windup */
/* satellite yaw attitude model */
if (!sat_yaw(time,sat,type,opt,rs,exs,eys)) return 0;
/* unit vector satellite to receiver */
for (i=0;i<3;i++) r[i]=rr[i]-rs[i];
if (!normv3(r,ek)) return 0;
/* unit vectors of receiver antenna */
ecef2pos(rr,pos);
xyz2enu(pos,E);
exr[0]= E[1]; exr[1]= E[4]; exr[2]= E[7]; /* x = north */
eyr[0]=-E[0]; eyr[1]=-E[3]; eyr[2]=-E[6]; /* y = west */
/* phase windup effect */
cross3(ek,eys,eks);
cross3(ek,eyr,ekr);
for (i=0;i<3;i++) {
ds[i]=exs[i]-ek[i]*dot(ek,exs,3)-eks[i];
dr[i]=exr[i]-ek[i]*dot(ek,exr,3)+ekr[i];
}
cosp=dot(ds,dr,3)/norm(ds,3)/norm(dr,3);
if (cosp<-1.0) cosp=-1.0;
else if (cosp> 1.0) cosp= 1.0;
ph=acos(cosp)/2.0/PI;
cross3(ds,dr,drs);
if (dot(ek,drs,3)<0.0) ph=-ph;
*phw=ph+floor(*phw-ph+0.5); /* in cycle */
return 1;
}
四、相位中心误差
1、天线高改正
即地面标示到天线参考点的向量
对应Rinex文件头中
0.0000 0.0000 0.0000 ANTENNA: DELTA H/E/N
对应RTKLIB中变量类型为;
double antdel[2][3]; /* antenna delta {{rov_e,rov_n,rov_u},{ref_e,ref_n,ref_u}} */
2、天线相位中心参考点/PCO 参考6
nadir angle:天低角
GPS距离观测值是以卫星和接收机天线相位中心位置为参考,而IGS精密星历中卫星位置以及卫星钟差都是以卫星质心为参考的。通常卫星天线相位中心与质心存在偏差(见下图),在精密单点定位中需要通过精确模型进行改正。卫星天线相位中心相对于卫星质心的偏差通常用星固坐标系的偏差量来表示,在实际应用中要对星固坐标系中的偏差向量进行坐标转换,从而将偏差改正数转换到协议地球坐标系中。
卫星天线相位中心,下图:
接收机天线相位中心(如下)变化通常为数个毫米,对于某种类型的天线,可能达到数厘米。观测站为减小环境及多路径效应的影响,通常会在天线上安装天线罩,也会对相位中心产生影响。一般地,天线相位中心变化仅与天线类型和天线罩类型相关,用户按照天线和天线罩类型进行相位中心改正。
接收机天线相位中心,间下图:
3、天线相位中心变化/PCV
RTKLIB中天线改正模型,相关的代码:
typedef struct { /* antenna parameter type */
int sat; /* satellite number (0:receiver) */ //设置卫星的号码,0代表接收机。
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;
off为相位中心偏移;
var为相位中心变化;
/* receiver antenna model ------------------------------------------------------
* compute antenna offset by antenna phase center parameters
* args : pcv_t *pcv I antenna phase center parameters
* double *azel I azimuth/elevation for receiver {az,el} (rad)
* int opt I option (0:only offset,1:offset+pcv)
* double *dant O range offsets for each frequency (m)
* return : none
* notes : current version does not support azimuth dependent terms
*-----------------------------------------------------------------------------*/
extern 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]);
}
/* satellite antenna model ------------------------------------------------------
* compute satellite antenna phase center parameters
* args : pcv_t *pcv I antenna phase center parameters
* double nadir I nadir angle for satellite (rad)
* double *dant O range offsets for each frequency (m)
* return : none
*-----------------------------------------------------------------------------*/
extern void antmodel_s(const pcv_t *pcv, double nadir, double *dant)
{
int i;
trace(4,"antmodel_s: nadir=%6.1f\n",nadir*R2D);
for (i=0;i<NFREQ;i++) {
dant[i]=interpvar(nadir*R2D*5.0,pcv->var[i]);
}
trace(5,"antmodel_s: dant=%6.3f %6.3f\n",dant[0],dant[1]);
}
以下部分来自网友链接
将地面标志点到平均天线相位中心的向量投影到视线向量e上,将其作为改正值修正到原始的观测值上,不知道这样修正之后得到的距离观测值的实际物理意义是什么,所以接下来的是我个人的理解,不知道是否正确。
个人理解,这种做法是想根据原始ρ得到一个修正到标识上的“假的”观测值P,如下图所示:
其数学关系:
P=RH+SH RH即为代码中的dot(off,e,3),SH=ρ * cosα,由于Mark到APC的距离相比于卫地距很小,可认为SH = ρ,这是因为: ρ-SH=ρ(1-cosα)=x*tan(α/2) ≈ x*sin(α/2)≈x*sinα * 1/2=(x*x)/(2ρ)≈0 所以,P = RH + ρ
也就是说,在真观测值ρ上加上改正量RH,即可近似组成假的观测量P,而该观测量是直接联系Mark和Satellite的。
不知道我的理解对不对,因为没看到相关的文献解释这么改正的数学原理,所以暂且认为是这样,等看到相关文献再来修改。
IGS天线文件中:参考7
关于卫星端天线相位中心的改正分为两部分:
- 将卫星质心加上卫星天线PCO改正至其相位中心;
- 对站星几何距离通过加上卫星天线PCV进行改正;
接收机端的天线相位中心改正也包括两部分:
- 将接收机天线参考点(ARP)加上接收机天线PCO改正至其相位中心;
- 对站星几何距离通过加上接收机天线PCV进行改正。
五、地球潮汐 参考6
地球潮汐包括:固体潮、海潮以及极潮。
1、固体潮:
固体潮是指摄动天体(月球、太阳)对弹性地球的引力作用,引起地球表面周期性涨落的现象。固体潮导致地球在地心与摄动天体连线方向上变长,与连线垂直的方向上趋于扁平(如下图所示),从而引起测站坐标的变化。固体潮对测站的影响包括与纬度有关的长期偏移项以及由口周期和半口周期组成的周期变化项。对于24小时的静态观测,周期项的影响可通过平滑大部分消除。然而,不能利用此类方法消除长期偏移项,即使利用长时间观测的方法消除周期项,其残余误差在径向仍可达12cm左右,在水平方向可达5 cm左右。所幸,固体潮的影响可以利用模型精确改正,改正后的残余影响在几毫米以内。
2、海洋潮:
海洋潮是指口月对地球的引力作用引起的实际海平面相对于平均海平面产生周期性的涨落。海洋潮引起海水质量重新分布,又会导致固体地球产生弹性响应,通常称之为海潮负荷效应。海潮改正比固体潮小一个量级,对精密单点定位单历元解的影响可达5 cm,单天静态定位结果的影响为mm级。当测站与海岸线的距离大于1000km时,海潮的影响可忽略不计。与固体潮影响一样,在精密单点定位中,海潮的影响必须利用模型改正,其改正模型如下
3、极潮:
地球的自转轴会在20平方米的范围内漂移(极移),引起地壳的弹性响应,从而导致地球表面测站位置发生变化,这一现象称为极潮。极潮影响在垂向可达 2.5cm,在水平方向上变形可达0.7cm,因而在高精度数据处理中应进行模型改正。本文采用IERS提供的极潮改正模型,在输入测站经纬度后可以计算得到极潮改正值。
参考:
1、《GPS与北斗卫星多路径效应的对比研究》
2、《GPS测量与数据处理》
3、《GPS多路径效应实例计算与分析》
6、《精密单点定位理论与方法研究》 郑彬
7、《天线相位中心改正模型对PPP参数估计的影响》张小红