easy_GPS开源代码归整!

1、最小二乘求解单点定位:

当矩阵G可逆时,如下两种求解方式一致!

G*Δx=b

Δx=inv(G^G)*G^b

代码出现在:

2、利用伪距进行相对定位中:easy4

选取卫星高度角最大的一颗,当作参考卫星!

    %选高度角最大的当作参考星
    flag=0;
    if flag==0
        id=find(max(el)==el);
        flag=1;
    end
    
for iter = 1:30
    % k is the reference satellite. We select the first one   k是参考卫星,选择第一颗卫星作为参考卫星

    [tcorr,rhok_j,Xk_ECF] = get_rho(time, obs2(id), Eph(:,col_Eph(id)),X_j);      % time时刻,卫星k钟差,流动站j到卫星k的距离rhok_j,卫星k(第一颗)的位置
    [tcorr,rhok_i,Xk_ECF] = get_rho(time, obs1(id), Eph(:,col_Eph(id)),X_i);      % time时刻,卫星k钟差,参考站i到卫星k的距离rhok_i,卫星k(第一颗)的位置
%     obs2(id)=[];obs1(id)=[];Eph(:,col_Eph(id))=[];
%     for t = 1:m-1 % t runs over PRNs given in sats; ref.sat. is number 1
    t=1;
    while (t<=m)
        [tcorr,rhol_j,Xl_ECF] = get_rho(time, obs2(t), Eph(:,col_Eph(t)), X_j);       % time时刻,卫星t钟差,流动站j到卫星t的距离rhok_j,卫星t(t = 2:m)的位置
        [tcorr,rhol_i,Xl_ECF] = get_rho(time, obs1(t), Eph(:,col_Eph(t)), X_i);       % time时刻,卫星t钟差,参考站i到卫星t的距离rhok_i,卫星t(t = 2:m)的位置
        A(t,:) = [(Xk_ECF(1)-X_j(1))/rhok_j - (Xl_ECF(1)-X_j(1))/rhol_j,  ...   % (参考卫星-流动站)-(卫星-流动站)
            (Xk_ECF(2)-X_j(2))/rhok_j - (Xl_ECF(2)-X_j(2))/rhol_j,  ...
            (Xk_ECF(3)-X_j(3))/rhok_j - (Xl_ECF(3)-X_j(3))/rhol_j];             % 接收机间求一次差,卫星间求二次差后组成的双差观测方程 系数阵 A
        observed = (obs1(id)-obs2(id))-(obs1(t)-obs2(t)); % (参考卫星和基准站伪距-参考卫星和流动站伪距)-(基准站伪距-流动站伪距)
        calculated = (rhok_i-rhok_j)-(rhol_i-rhol_j);
        omc(t,1) = observed - calculated;     % 常数项 = 双差观测值 - 双差计算值
        t=t+1;
    end; % t 
    %删掉
    A(id,:)=[];omc(id)=[];

注意参考星选好了之后,如何构建矩阵:参考谢刚P171

3、Rinex观测文文件中,如果只含有GPS观测量,则历元时间为GPST

教材:《GPS测量与数据处理》第二版P247

4、伪距差分定位:

用修改后的easy4,进行短基线的处理:

历元间隔1秒;时间长度1个小时。

(1)RTKLIB载波相位解算结果为:

% (e/n/u-baseline=WGS84,Q=1:fix,2:float,3:sbas,4:dgps,5:single,6:ppp,ns=# of satellites)

2019/12/05 01:00:00.000        -1.1103        -1.0791        -0.4888   1   6   0.0004   0.0005   0.0014  -0.0000  -0.0005  -0.0003   0.00    5.4

 

(2)easy4处理的Baseline:

 

(3)RTKLiB差分处理结果:

其相关选项设置如下:

处理结果如下:

5、RTK事后差分定位:

数据为GPS的 L1 L2 P1 P1,7颗卫星,去掉一颗高度角小于10°卫星,剩6颗共视卫星;待求解参数为:3+2*6=15;

构造矩阵为: P1、L1、L2双差方程15个,观测量为L1、L2双差 和 伪距双差之差。

步骤:先利用伪距和载波求出基线向量和模糊度的实数解,然后利用LAMBDA对模糊度进行固定;最后利用最小二乘进行基线求解!(范例中数据已经进行了周跳探测和修复)

定位前,先去掉高度角小于10°,然后选高度角最大卫星做参考星!

利用范例中的数据文件,结果如下:

% Read RINEX ephemerides file and convert to internal Matlab format
rinexe('SITE247J.01N','eph.dat'); 
Eph = get_eph('eph.dat'); 

% We identify the master observation file and open it
ofile1 = 'SITE247J.01O'; 
fid1 = fopen(ofile1,'rt');


…………………………………………………………………………………………
ofile1 = 'SITE247J.01O'; 
fid1 = fopen(ofile1,'rt');
ofile2 = 'SITE24~1.01O'; 
fid2 = fopen(ofile2,'rt');

6、利用EKF进行求解基线向量:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值