RTKLIB学习(三)——单点定位-伪距残差计算

本文详细介绍了在RTKLIB中进行单点定位时的伪距残差计算过程,包括几何距离计算、电离层延迟改正、双频接收机的电离层改正、伪距计算、对流层延迟改正,以及最终的伪距残差计算和误差协方差矩阵的求取。
摘要由CSDN通过智能技术生成

单点定位2——伪距残差计算

上篇文章讲到单点定位之卫星位置的计算,得到卫星的位置、速度和钟差。接下来要求取电离层、对流层延迟等改正后的伪距,并求取伪距残差。

1、几何距离计算
观测瞬间接收机至卫星的几何距离可通过两点距离公式求得,rtklib通过norm函数求取,在此基础上考虑了地球自转影响。

/* 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
*/
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;
}

2、电离层延迟改正
单频接收机的电离层改正利用广播星历中的参数,通过克罗布歇模型实现;双频接收机改正可通过双频无电离层组合模型实现。
2.1 克罗布歇模型 电离层改正

/* ionosphere model ------------------------------------------------------------
* compute ionospheric delay by broadcast ionosphere model (klobuchar model)
* args   : gtime_t t        I   time (gpst)
*          double *ion      I   iono model parameters {a0,a1,a2,a3,b0,b1,b2,b3}
*          double *pos      I   receiver position {lat,lon,h} (rad,m)
*          double *azel     I   azimuth/elevation angle {az,el} (rad)
* return : ionospheric delay (L1) (m)
*-----------------------------------------------------------------------------*/
extern double ionmodel(gtime_t t, const double *ion, 
const double *pos,const double *azel)
{
   
    const double ion_default[]
  • 4
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
伪距单点定位是一种通过测量卫星与接收机之间的距离来确定接收机位置的定位方法。MATLAB可以用于伪距单点定位的实现。以下是一个简单的MATLAB程序,演示如何进行伪距单点定位: ```matlab % 伪距单点定位 % 卫星的位置信息 satellite_pos = [15600, 7540, 20140; 18760, 2750, 18610; 17610, 14630, 13480; 19170, 610, 18390; 1350, 7130, 22840]; % 接收机的初始位置估计值 receiver_pos = [0, 0, 0]; % 测量的伪距值 pseudorange = [20134.08; 22536.15; 19792.24; 23649.38; 14200.00]; % 初始化迭代计数器 iteration = 0; % 迭代计算接收机的位置 while iteration < 10 % 计算接收机到卫星的距离 distance = sqrt(sum((satellite_pos - receiver_pos).^2, 2)) + randn(5, 1) * 10; % 计算伪距残差 residual = distance - pseudorange; % 计算雅可比矩阵 jacobian = (receiver_pos - satellite_pos) ./ distance; jacobian = [jacobian, ones(5, 1)]; % 使用最小二乘法求解接收机位置的增量 delta = - inv(jacobian' * jacobian) * jacobian' * residual; % 更新接收机位置 receiver_pos = receiver_pos + delta(1:3)'; % 更新迭代计数器 iteration = iteration + 1; end % 输出接收机位置 disp(['Receiver Position: [', num2str(receiver_pos), ']']); ``` 在这个程序中,我们首先定义了卫星的位置信息、接收机的初始位置估计值和测量的伪距值。然后,我们使用迭代的方法计算接收机的位置,直到收敛为止。在每次迭代中,我们计算接收机到卫星的距离,然后计算伪距残差和雅可比矩阵,最后使用最小二乘法求解接收机位置的增量。最终,程序输出接收机的位置。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值