rtklib的demo版本
基本观测方程
1、 pppos(rtk_t *rtk, const obsd_t *obs, int n, const nav_t *nav)
该函数里调用的函数
1)udstate_ppp(rtk,obs,n,nav); 待估参数的预测,对应klaman公式中的xk/k-1、 Pk/k-1
只要是作为待估参数,则都需要时间更新,也就是在这里处理
udpos_ppp(rtk); 位置的时间更新也就是预测
udclk_ppp(rtk); 接收机钟差的预测 x
udtrop_ppp(rtk); 对流层如果作为待估参数的话,进行预测
udiono_ppp(rtk,obs,n,nav); 电离层估计的预测
uddcb_ppp(rtk); 多频的话涉及到频间偏差,估计第三个f的频间偏差
udbias_ppp(rtk,obs,n,nav); 模糊度、周跳、可选择的ssr等各种改正,模糊度都是单颗
卫星的模糊度或者双频组合后的模糊度
2) satposs(obs[0].time,obs,n,nav,rtk->opt.sateph,rs,dts,var,svh); 卫星位置 为了后面用ppp-re中求残差用。
3)testeclipse(obs,n,nav,rs); 对block IIA卫星的处理,如果排除block IIA的话
4) tidedisp(gpst2utc(obs[0].time),rtk->x,opt->tidecorr==1?1:7,&nav->erp, opt->odisp[0],dr); 如果配置潮汐改正,则进行潮汐改正
5) ppp_res(0,obs,n,rs,dts,var,svh,dr,exc,nav,xp,rtk,v,H,R,azel) ;残差处理,预测的值与量测做差,得到kalman中的v
这里面有几个重要的函数
model_trop model_iono 对流层电离层模型
atantpcv(rs+i*6,rr,nav->pcvs+sat-1,dants);卫星的pcv改正
antmodel(opt->pcvr,opt->antdel[0],azel+i*2,opt->posopt[1],dantr); 接收机端 pco pcv改正。
model_phw 相位缠绕
corr_meas(obs+i,nav,azel+i*2,&rtk->opt,dantr,dants,rtk->ssat[sat-1].phw,L,P,&Lc,&Pc);
各类模型修正
kalman公式中的 zk =hx+v 需要找到h,
各项修正corr_meas函数其实已经把hx解算出来了,那么需要把h区分出来,也就是找对应的系数
v= zk - hx 在代码中对应的是v[nv]=y-(r+cdtr-CLIGHT*dts[i*2]+dtrp+C*dion+dcb+bias); 这个公式中的都是在corr_meas中处理了,包含着待估的x
varerr(obs[i].sat,sys,azel[1+i*2], SNR_UNIT*rtk->ssat[sat-1].snr_rover[frq], j,opt,obs+i);量测方差
整个ppp_res()函数,如果不组合,就是非差非组合的残差v 如果组合就是组合后的残差v
想要模糊度固定,前面用了精密星历和精密钟差,那么还需要修正fcb,才能做ppp_ar()。
6) filter(xp,Pp,H,v,R,rtk->nx,nv) kalman方程中的测量xk = xk/k-1 +kv 以及pk = pk/k-1 - kh*pk/k-1 状态更新
7)ppp_res(i+1,obs,n,rs,dts,var,svh,dr,exc,nav,xp,rtk,v,H,R,azel) klamna迭代成功后进行验后浮点解的校验
8)ppp_ar(rtk,obs,n,exc,nav,azel,xp,Pp)模糊度固定(开源代码没有给出)
补充: 该部分代码有其他开源的版本,然后对应的解析在另一篇学习笔记里。
9) ppp_res(9,obs,n,rs,dts,var,svh,dr,exc,nav,xp,rtk,v,H,R,azel)) 模糊度固定的残差校验
10) update_stat(rtk,obs,n,stat); 输出结果的更新,取固定解还是浮点解
11) test_hold_amb(rtk) 固定结果的模糊度保持(没有开源全)
以上如果利用rtklib的源码解算,开源的其实是只能到浮点解。