Single Point Positioning
Sequence Diagram Scroll down (bug in rendering) %%{init: {'theme':'forest'}}%% sequenceDiagram autonumber pntpos()->>pntpos(): satposs() satellite positons, velocities and clocks pntpos()->>estpos(): estimate receiver position and time with pseudorange loop (MAXITR) estpos()->>rescode(): pseudorange residuals (prefit residuals) loop (MAXOBS) rescode()->>rescode(): satsys() (valid satellite system) rescode()->>rescode(): reject duplicated observation data rescode()->>rescode(): satexclude() excluded satellite rescode()->>rescode(): geodist() geometric distance rescode()->>rescode(): satazel() elevation mask alt iter>0 rescode()->>rescode(): snrmask() test SNR mask rescode()->>rescode(): ionocorr() ionospheric correction rescode()->>rescode(): sat2freq() (check for valid frequency) rescode()->>rescode(): tropcorr() tropospheric correction end rescode()->>rescode(): prange() psendorange with code bias correction rescode()->>rescode(): pseudorange residual (prefit residuals) rescode()->>rescode(): design matrix rescode()->>rescode(): time system offset and receiver bias correction note over rescode(): Set valid satellite and count satellite rescode()->>rescode(): varerr() variance of pseudorange error rescode()->>rescode(): constraint to avoid rank-deficient rescode()->>estpos(): return nv (Number of valid measurements) end estpos()->>estpos(): weight by variance (lsq uses sqrt of weight) estpos()->>estpos(): lsq() least square estimation estpos()->>estpos(): norm(dx,NX)<1E-4 Update state terms estpos()->>estpos(): valsol() validate solution end alt norm(dx,NX)<1E-4 estpos()-->>pntpos(): return stat else (i >= MAXITR) estpos()-->>pntpos(): return 0 iteration divergent else estpos()-->>pntpos(): return stat end pntpos()->>pntpos(): raim_fde() RAIM FDE (failure detection and exclution) pntpos()->>estvel(): estimate receiver velocity with Doppler estvel()->>resdop(): range rate residuals loop (MAXOBS) resdop()->>resdop(): LOS (line-of-sight) vector in ECEF resdop()->>resdop(): satellite velocity relative to receiver in ECEF resdop()->>resdop(): range rate with earth rotation correction resdop()->>resdop(): Std of range rate error (m/s) resdop()->>resdop(): range rate residual (m/s) resdop()->>resdop(): design matrix end resdop()->>estvel(): return stat estvel()->>estvel(): lsq() least square estimation estvel()->>estvel(): (norm(dx,4)<1E-6) (Update state terms) estvel()->>estpos(): return estpos()->>pntpos(): return pntpos()->>pntpos(): return stat Reference : https://mermaid.
Precise Point Positioning
Sequence Diagram Scroll down (bug in rendering) %%{init: {'theme':'forest'}}%% sequenceDiagram autonumber pppos()->>udstate_ppp(): temporal update of states udstate_ppp()->>udpos_ppp(): temporal update of position udpos_ppp()->>udpos_ppp(): initx() fixed mode udpos_ppp()->>udpos_ppp(): PMODE_PPP_STATIC static ppp mode udpos_ppp()->>udpos_ppp(): kinmatic mode without dynamics udpos_ppp()->>udpos_ppp(): VAR_POS initx() reset position with large variance udpos_ppp()->>udpos_ppp(): state transition of position/velocity/acceleration udpos_ppp()->>udpos_ppp(): include accel terms if filter is converged udpos_ppp()->>udpos_ppp(): process noise added to only acceleration udpos_ppp()->>udstate_ppp(): return udstate_ppp()->>udstate_ppp(): udclk_ppp() temporal update of clock udstate_ppp()->>udstate_ppp(): udtrop_ppp() temporal update of tropospheric parameters udstate_ppp()->>udstate_ppp(): udiono_ppp() temporal update of ionospheric parameters udstate_ppp()->>udstate_ppp(): uddcb_ppp() temporal update of L5-receiver-dcb parameters udstate_ppp()->>udbias_ppp(): temporal update of phase-bias udbias_ppp()->>udbias_ppp(): handle day-boundary clock jump udbias_ppp()->>udbias_ppp(): detslp_ll() detect cycle slip by LLI udbias_ppp()->>udbias_ppp(): detslp_gf() detect cycle slip by geometry-free phase jump udbias_ppp()->>udbias_ppp(): detslp_mw() detect slip by Melbourne-Wubbena linear combination jump udbias_ppp()->>udbias_ppp(): reset phase-bias if expire obs outage counter udbias_ppp()->>udbias_ppp(): correct phase-code jump to ensure phase-code coherency udbias_ppp()->>udbias_ppp(): reinitialize phase-bias if detecting cycle slip udbias_ppp()->>udbias_ppp(): reset fix flags udbias_ppp()->>udstate_ppp(): return udstate_ppp()->>pppos(): return pppos()->>pppos(): satposs() satellite positions and clocks pppos()->>pppos(): testeclipse() exclude measurements of eclipsing satellite (block IIA) pppos()->>pppos(): tidedisp() earth tides correction loop MAX_ITER pppos()->>pppos(): ppp_res() prefit residuals pppos()->>pppos(): filter() measurement update of ekf states pppos()->>pppos(): ppp_res() postfit residuals end pppos()->>pppos(): ppp_ar() ppp ambiguity resolution pppos()->>pppos(): ppp_res() phase and code residuals pppos()->>pppos(): update_stat() update solution status pppos()->>pppos(): test_hold_amb() test hold ambiguity