#include <SolverPPP.hpp>
Inheritance diagram for SolverPPP:


This class may be used either in a Vector- and Matrix-oriented way, or with GNSS data structure objects from "DataStructures" class (much more simple to use it this way).
A typical way to use this class with GNSS data structures follows:
// INITIALIZATION PART // EBRE station nominal position Position nominalPos(4833520.192, 41537.1043, 4147461.560); RinexObsStream rin("ebre0300.02o"); // Data stream // Load all the SP3 ephemerides files SP3EphemerisStore SP3EphList; SP3EphList.loadFile("igs11512.sp3"); SP3EphList.loadFile("igs11513.sp3"); SP3EphList.loadFile("igs11514.sp3"); NeillTropModel neillTM( nominalPos.getAltitude(), nominalPos.getGeodeticLatitude(), 30 ); // Objects to compute the tropospheric data BasicModel basicM(nominalPos, SP3EphList); ComputeTropModel computeTropo(neillTM); // More declarations here: ComputeMOPSWeights, SimpleFilter, // LICSDetector, MWCSDetector, SolidTides, OceanLoading, // PoleTides, CorrectObservables, ComputeWindUp, ComputeLinear, // LinearCombinations, etc. // Declare a SolverPPP object SolverPPP pppSolver; // PROCESSING PART gnssRinex gRin; while(rin >> gRin) { try { gRin >> basicM >> correctObs >> compWindup >> computeTropo >> linear1 // Compute combinations >> pcFilter >> markCSLI2 >> markCSMW >> markArc >> linear2 // Compute prefit residuals >> phaseAlign >> pppSolver; } catch(...) { cerr << "Unknown exception at epoch: " << time << endl; continue; } // Print results cout << time.DOYsecond() << " "; // Output field #1 cout << pppSolver.solution[1] << " "; // dx: Output field #2 cout << pppSolver.solution[2] << " "; // dy: Output field #3 cout << pppSolver.solution[3] << " "; // dz: Output field #4 cout << pppSolver.solution[0] << " "; // wetTropo: Out field #5 cout << endl; }
The "SolverPPP" object will extract all the data it needs from the GNSS data structure that is "gRin" and will try to solve the PPP system of equations using a Kalman filter. It will also insert back postfit residual data (both code and phase) into "gRin" if it successfully solves the equation system.
By default, it will build the geometry matrix from the values of coefficients wetMap, dx, dy, dz and cdt, IN THAT ORDER. Please note that the first field of the solution will be the estimation of the zenital wet tropospheric component (or at least, the part that wasn't modeled by the tropospheric model used).
You may configure the solver to work with a NEU system in the class constructor or using the "setNEU()" method.
In any case, the "SolverPPP" object will also automatically add and estimate the ionosphere-free phase ambiguities. The independent vector is composed of the code and phase prefit residuals.
This class expects some weights assigned to each satellite. That can be achieved with objects from classes such as "ComputeIURAWeights", "ComputeMOPSWeights", etc.
If these weights are not assigned, then the "SolverPPP" object will set a value of "1.0" to code measurements, and "weightFactor" to phase measurements. The default value of "weightFactor" is "10000.0". This implies that code sigma is 1 m, and phase sigma is 1 cm.
By default, the stochastic models used for each type of variable are:
For instance, in orden to use a 'full kinematic' mode we assign a white noise model to all the coordinates:
// Define a white noise model with 100 m of sigma WhiteNoiseModel wnM(100.0); // Configure the solver to use this model for all coordinates pppSolver.setCoordinatesModel(&wnM);
Be aware, however, that you MUST NOT use this method to set a state-aware stochastic model (like RandomWalkModel, for instance) to ALL coordinates, because the results will certainly be erroneous. Use this method ONLY with non-state-aware stochastic models like 'StochasticModel' (constant coordinates) or 'WhiteNoiseModel'.
In order to overcome the former limitation, this class provides methods to set different, specific stochastic models for each coordinate, like:
// Define a white noise model with 2 m of sigma for horizontal // coordinates (in this case, the solver is previously set to use // dLat, dLon and dH). WhiteNoiseModel wnHorizontalModel(2.0); // Define a random walk model with 0.04 m*m/s of process spectral // density for vertical coordinates. RandomWalkModel rwVerticalModel(0.04); // Configure the solver to use these models pppSolver.setXCoordinatesModel(&wnHorizontalModel); pppSolver.setYCoordinatesModel(&wnHorizontalModel); pppSolver.setZCoordinatesModel(&rwVerticalModel);
Definition at line 210 of file SolverPPP.hpp.
Public Member Functions | |
| SolverPPP (bool useNEU=false) | |
| Common constructor. | |
| virtual int | Compute (const Vector< double > &prefitResiduals, const Matrix< double > &designMatrix, const Matrix< double > &weightMatrix) throw (InvalidSolver) |
| Compute the PPP Solution of the given equations set. | |
| virtual int | Compute (const Vector< double > &prefitResiduals, const Matrix< double > &designMatrix, const Vector< double > &weightVector) throw (InvalidSolver) |
| Compute the PPP Solution of the given equations set. | |
| virtual gnssSatTypeValue & | Process (gnssSatTypeValue &gData) throw (ProcessingException) |
| Returns a reference to a gnnsSatTypeValue object after solving the previously defined equation system. | |
| virtual gnssRinex & | Process (gnssRinex &gData) throw (ProcessingException) |
| Returns a reference to a gnnsRinex object after solving the previously defined equation system. | |
| virtual SolverPPP & | Reset (const Vector< double > &newState, const Matrix< double > &newErrorCov) |
| Resets the PPP internal Kalman filter. | |
| virtual SolverPPP & | setNEU (bool useNEU) |
| Sets if a NEU system will be used. | |
| virtual double | getWeightFactor (void) const |
| Get the weight factor multiplying the phase measurements sigmas. | |
| virtual SolverPPP & | setWeightFactor (double factor) |
| Set the weight factor multiplying the phase measurement sigma. | |
| StochasticModel * | getXCoordinatesModel () const |
| Get stochastic model pointer for dx (or dLat) coordinate. | |
| SolverPPP & | setXCoordinatesModel (StochasticModel *pModel) |
| Set coordinates stochastic model for dx (or dLat) coordinate. | |
| StochasticModel * | getYCoordinatesModel () const |
| Get stochastic model pointer for dy (or dLon) coordinate. | |
| SolverPPP & | setYCoordinatesModel (StochasticModel *pModel) |
| Set coordinates stochastic model for dy (or dLon) coordinate. | |
| StochasticModel * | getZCoordinatesModel () const |
| Get stochastic model pointer for dz (or dH) coordinate. | |
| SolverPPP & | setZCoordinatesModel (StochasticModel *pModel) |
| Set coordinates stochastic model for dz (or dH) coordinate. | |
| virtual SolverPPP & | setCoordinatesModel (StochasticModel *pModel) |
| Set a single coordinates stochastic model to ALL coordinates. | |
| virtual StochasticModel * | getTroposphereModel (void) const |
| Get wet troposphere stochastic model pointer. | |
| virtual SolverPPP & | setTroposphereModel (StochasticModel *pModel) |
| Set zenital wet troposphere stochastic model. | |
| virtual StochasticModel * | getReceiverClockModel (void) const |
| Get receiver clock stochastic model pointer. | |
| virtual SolverPPP & | setReceiverClockModel (StochasticModel *pModel) |
| Set receiver clock stochastic model. | |
| virtual StochasticModel * | getPhaseBiasesModel (void) const |
| Get phase biases stochastic model pointer. | |
| virtual SolverPPP & | setPhaseBiasesModel (StochasticModel *pModel) |
| Set phase biases stochastic model. | |
| virtual Matrix< double > | getPhiMatrix (void) const |
| Get the State Transition Matrix (phiMatrix). | |
| virtual SolverPPP & | setPhiMatrix (const Matrix< double > &pMatrix) |
| Set the State Transition Matrix (phiMatrix). | |
| virtual Matrix< double > | getQMatrix (void) const |
| Get the Noise covariance matrix (QMatrix). | |
| virtual SolverPPP & | setQMatrix (const Matrix< double > &pMatrix) |
| Set the Noise Covariance Matrix (QMatrix). | |
| virtual SolverPPP & | setKinematic (bool kinematicMode=true, double sigmaX=100.0, double sigmaY=100.0, double sigmaZ=100.0) |
| Set the positioning mode, kinematic or static. | |
| virtual int | getIndex (void) const |
| Returns an index identifying this object. | |
| virtual std::string | getClassName (void) const |
| Returns a string identifying this object. | |
| virtual | ~SolverPPP () |
| Destructor. | |
|
|
Common constructor.
Definition at line 57 of file SolverPPP.cpp. References SolverPPP::setNEU(). |
|
|
Destructor.
Definition at line 493 of file SolverPPP.hpp. |
|
||||||||||||||||
|
Compute the PPP Solution of the given equations set.
Reimplemented from CodeKalmanSolver. Definition at line 121 of file SolverPPP.cpp. References GPSTK_THROW. |
|
||||||||||||||||
|
Compute the PPP Solution of the given equations set.
Reimplemented from CodeKalmanSolver. Definition at line 172 of file SolverPPP.cpp. References GPSTK_RETHROW, GPSTK_THROW, and gpstk::inverseChol(). |
|
|
Returns a string identifying this object.
Reimplemented from CodeKalmanSolver. Reimplemented in SolverPPPFB. Definition at line 48 of file SolverPPP.cpp. |
|
|
Returns an index identifying this object.
Reimplemented from CodeKalmanSolver. Reimplemented in SolverPPPFB. Definition at line 43 of file SolverPPP.cpp. |
|
|
Get phase biases stochastic model pointer.
Definition at line 418 of file SolverPPP.hpp. |
|
|
Get the State Transition Matrix (phiMatrix).
Reimplemented from CodeKalmanSolver. Definition at line 440 of file SolverPPP.hpp. |
|
|
Get the Noise covariance matrix (QMatrix).
Reimplemented from CodeKalmanSolver. Definition at line 458 of file SolverPPP.hpp. |
|
|
Get receiver clock stochastic model pointer.
Reimplemented from CodeKalmanSolver. Definition at line 399 of file SolverPPP.hpp. |
|
|
Get wet troposphere stochastic model pointer.
Definition at line 380 of file SolverPPP.hpp. |
|
|
Get the weight factor multiplying the phase measurements sigmas. This factor is the code_sigma/phase_sigma ratio. Definition at line 307 of file SolverPPP.hpp. References gpstk::sqrt(). |
|
|
Get stochastic model pointer for dx (or dLat) coordinate.
Reimplemented from CodeKalmanSolver. Definition at line 324 of file SolverPPP.hpp. |
|
|
Get stochastic model pointer for dy (or dLon) coordinate.
Reimplemented from CodeKalmanSolver. Definition at line 338 of file SolverPPP.hpp. |
|
|
Get stochastic model pointer for dz (or dH) coordinate.
Reimplemented from CodeKalmanSolver. Definition at line 352 of file SolverPPP.hpp. |
|
|
Returns a reference to a gnnsRinex object after solving the previously defined equation system.
Reimplemented from CodeKalmanSolver. Reimplemented in SolverPPPFB. Definition at line 329 of file SolverPPP.cpp. References Vector::end(), Matrix::end(), GPSTK_THROW, and gpstk::SatIDSet. |
|
|
Returns a reference to a gnnsSatTypeValue object after solving the previously defined equation system.
Reimplemented from CodeKalmanSolver. Reimplemented in SolverPPPFB. Definition at line 288 of file SolverPPP.cpp. References gnssData::body, GPSTK_THROW, and gnssRinex::header. |
|
||||||||||||
|
Resets the PPP internal Kalman filter.
Definition at line 290 of file SolverPPP.hpp. |
|
|
Set a single coordinates stochastic model to ALL coordinates.
Reimplemented from CodeKalmanSolver. Definition at line 774 of file SolverPPP.cpp. Referenced by SolverPPP::setKinematic(). |
|
||||||||||||||||||||
|
Set the positioning mode, kinematic or static.
Definition at line 790 of file SolverPPP.cpp. References SolverPPP::setCoordinatesModel(), WhiteNoiseModel::setSigma(), SolverPPP::setXCoordinatesModel(), SolverPPP::setYCoordinatesModel(), and SolverPPP::setZCoordinatesModel(). |
|
|
Sets if a NEU system will be used.
Reimplemented in SolverPPPFB. Definition at line 730 of file SolverPPP.cpp. References gnssData::body, gnssData::header, and gpstk::TypeIDSet. Referenced by SolverPPP::SolverPPP(). |
|
|
Set phase biases stochastic model.
Definition at line 435 of file SolverPPP.hpp. |
|
|
Set the State Transition Matrix (phiMatrix).
Reimplemented from CodeKalmanSolver. Definition at line 453 of file SolverPPP.hpp. |
|
|
Set the Noise Covariance Matrix (QMatrix).
Reimplemented from CodeKalmanSolver. Definition at line 471 of file SolverPPP.hpp. |
|
|
Set receiver clock stochastic model.
Reimplemented from CodeKalmanSolver. Definition at line 413 of file SolverPPP.hpp. |
|
|
Set zenital wet troposphere stochastic model.
Definition at line 394 of file SolverPPP.hpp. |
|
|
Set the weight factor multiplying the phase measurement sigma.
Definition at line 319 of file SolverPPP.hpp. |
|
|
Set coordinates stochastic model for dx (or dLat) coordinate.
Reimplemented from CodeKalmanSolver. Definition at line 333 of file SolverPPP.hpp. Referenced by SolverPPP::setKinematic(). |
|
|
Set coordinates stochastic model for dy (or dLon) coordinate.
Reimplemented from CodeKalmanSolver. Definition at line 347 of file SolverPPP.hpp. Referenced by SolverPPP::setKinematic(). |
|
|
Set coordinates stochastic model for dz (or dH) coordinate.
Reimplemented from CodeKalmanSolver. Definition at line 361 of file SolverPPP.hpp. Referenced by SolverPPP::setKinematic(). |
1.3.9.1