Dear Dago:

I try to do a weighed precise point positioning process,and a "ComputeMOPSWeights" object ("mops") was declared to caculate weight ,and here is my code:

processList.push_back(requireObs);      // Check if required observations are present
processList.push_back(linearCS);      // Compute linear combinations to detect CS
processList.push_back(markCSLI2);      // Mark cycle slips: LI algorithm
processList.push_back(markCSMW);      // Mark cycle slips: Melbourne-Wubbena
processList.push_back(markArc);         // Keep track of satellite arcs
processList.push_back(decimateData);   // If not a multiple of 900 s, decimate
processList.push_back(modelObs);      // Compute the basic components of model
processList.push_back(eclipsedSV);      // Remove satellites in eclipse
processList.push_back(grDelay);         // Compute gravitational delay
processList.push_back(svPcenter);      // Compute the effect of satellite phase center
processList.push_back(corr);         // Correct observables from tides, etc.
processList.push_back(windup);          // Compute wind-up effect
processList.push_back(computeTropo);    // Compute tropospheric effect
processList.push_back(linearIonFree);   // Compute ionosphere-free combinations
processList.push_back(pcFilter);      // Filter out spurious data
processList.push_back(phaseAlign);      // Align phases with codes
processList.push_back(linearPrefit);    // Compute prefit residuals
processList.push_back(mopsW);         // Compute weight
processList.push_back(baseChange);      // Prepare to use North-East-UP reference frame
processList.push_back(cDOP);            // Compute DOP figures
processList.push_back(pppSolver);       // Solve equations with a Kalman filter

These codes work well on Debug mode, but when I try to run on Release mode, an error occured. here is the error message:

"Unhandled exception at 0x0044ef46 in yanwei_gnsstk.exe: 0xC0000005: Access violation reading location 0x0543e990."

The program stop here:File TropModel.cpp line 2433: avr0(j) = avr(index-1,j);

By the way, my working IDE is VC++2008 professional edition.

Here is my first question: Is my codes ok? or there is a bug in "MOPSTropModel".


I inherit a class "PREEphemerisStore" from class "SP3EphemerisStore" to handle IGS SP3 files and CLK files. The PPP result with "IGS CLK file" seem to be improved little,except that the error on Notrh direction convergent more quickly. How can Imake PPP result convergent more quickly and stable? will the ionosphere second-order delay correction improve the PPP result?

I need your help and suggestion,thank you.

-- YanWei - 06 Apr 2009


ALERT! If you answer a question - or have a question you asked answered by someone - please remember to edit the page and set the status to answered. The status is in a drop-down list below the edit box.

Hi Wei!

I can't help you with your compiler error, because I never develop in Windows. I only work in Linux, so I'm not aware of VC++ issues.

However, I can help you with a suggestion: Given that you added a new piece of code ("PREEphemerisStore"), remove it from your software, change as little of your code as possible, and confirm if the error is at your new class or somewhere else.

It is not clear for me that the problem is at "TropModel" file, but anyway: Did you properly initialized your tropospheric model object?. There are several types of them, and they require different initialization steps.

At first glance, your code snippet looks OK, although it looks that you are now processing a surface-based station (not the LEO satellites you first talked about) because you added tropospheric models.

- Given that you are now processing with 30 s clocks, why do you keep the "decimateData" object?. Remember that it was needed to handle the mismatch between 30 s observations and 900 s ephemeris.

- About the former, I assume that you are still working with 30 s observations. If not, remember to properly tune objects "markCSLI2", "markCSMW" and "markArc".

I do not recommend to use "ComputeMOPSWeights" with PPP. Please remember that weights are based on estimated standard deviations (sigmas), and those sigmas are bound to specific models (in this case, MOPS models), and therefore:

- The sigmas to account for orbital errors and satellite clocks are related to broadcast ephemeris, not IGS ones.

- The sigmas that account for tropospheric models are bound to MOPS model. This is a nice model for code-based processing, but a phase-based processing like PPP requires a better model, like Neill's.

- The sigmas for ionospheric models are related to SBAS-based ionospheric estimations. On the other hand, PPP uses ionosphere-free combination, so this is not really applicable.

In summary, the "weights" generated with "ComputeMOPSWeights" are not related to PPP models, so improvements (if any) will come from the relatively simple mapping function (elevation-based) used. Indeed, it may even degrade your solution.

Some precise ephemeris products come with sigma estimations included, and these could be very helpful for PPP. However, you should write your own classes to take advantage of them.

Regarding the second-order ionosphere delay correction, it should yield, in my opinion, very small improvements at most.

Finally, about convergence speed and solution stability:

- Convergence speed is mainly a matter of properly estimating phase ambiguities. With PPP processing using 900 s standard SP3 ephemeris, you should usually wait about 2 hours (approx. 8 samples) to get proper convergence. With 30 s satellite clocks information it should be a little faster in TIME, but nevertheless it will require a lot more SAMPLES because change in satellite geometry is a very important source of information to properly estimate ambiguities.

- Solution stability depends on processing strategy (static or kinematic), model accuracy and outlier detection and removal (currently there are not many classes related to the later in the GPSTk). PPP processing in kinematic mode (without outliers) should yield solutions typically oscillating in the 10 cm range.



-- DagobertoSalazar - 06 Apr 2009


Thanks a lot for your help! And, I still have some questions:

1. Be aware of you develop in Linux, I want to know which developing environment you use, vi + Makefile? Infact, I have done a project(about gnss observation simulation) in Redhawk Linux X64, I feel it's less convient than develop in windows. I'll take your advice and try to find what lead to the error.

2. You are right, I'm processing a surface-based station(BJFS,a IGS station in China) indeed. I keep the "decimateData" object to easy changing observation sampling rate.I call the method:"decimateData.setSampleInterval(30.0);".

3. I didn't look into ComputeMOPSWeights in detail. As you said, the "weights" generated with "ComputeMOPSWeights" are not related to PPP models,I'll write a new class to get weights. Boonsap Witchayangkoon wrote in his PHD Thesis("ELEMENTS OF GPS PRECISE POINT POSITIONING" P120): "different weight methods yield different solutions particularly in the height component". I'll test several Observation Weighting Schemes and try to find out a good one.

4. It's kind of you to give me a good explain about convergence speed and solution stability. Indeed,more Classe to do outlier dectetion and removal should be added to GPSTk,I'll implement Quasi Accurate Detection of gross errors(QUAD) firstly.

Finally, thanks again.



-- YanWei - 07 Apr 2009

Hi again!

1) I develop with a single text editor (Kate) and g++ compiler. Sometimes I use "make" to build, although I usually use "jam" because of my GPSTk work.

2) Do not forget to also set a proper tolerance according to the characteristics of your data. For 30 s a tolerance of 0.5 s is usually enough (indeed, it is the default).

3) Tell me when you find a good weighting scheme.

4) Having QUAD in the GPSTk would be very nice smile



-- DagobertoSalazar - 07 Apr 2009


I have a new idea about PPP, and I need to do the following transformation: Assume there is a station with position [ecefStaX, ecefStaY, ecefStaZ] in ECEF, and a satellite with position [ecefSatX, ecefSatY, ecefSatZ] in ECEF. The station's topocentric system is UEN, I want to rotate the satellite position vector around the U axes. And here is my codes:
// station position
Position staPos(ecefStaX, ecefStaY, ecefStaZ);   
// satellite position
Position satPos(ecefSatX, ecefSatY, ecefSatZ);  

// the vector between station position and satellite position
Triple ecefDXYZ(satPos[0]-staPos[0],satPos[1]-staPos[1],ecefDetZ=satPos[2]-staPos[2]);

// transform ecefDXYZ from ECEF to UEN
Triple uen = ecefDXYZ.R3(+staPos.longitude()).R2(-staPos.geodeticLatitude());

// rotate angle around U axes

// transform the vector from UEN to ECEF
Triple xyz = enu.R2(+staPos.geodeticLatitude()).R3(-staPos.longitude());

// get the desire satellite position
Position satPos2(staPos[0]+xyz[0],staPos[1]+xyz[1],staPos[2]+xyz[2]);

Is there any problem in my codes? Thank you.


-- YanWei - 13 Jul 2009

Hi Yan,

maybe I can quickly jump in and help you with your Linux programming environment problem wink

I used Eclipse CDT for my work with the GPSTk during my diploma thesis. It feels very comfortable and offers many cool features as you may know from Visual Studio. In every case, it is worth a try and could change your opinion about Linux as developing environment.

Here is the URL:

BTW, I used the ganymede version but I didn't try the new galileo release. Maybe it is as promising as its GNSS pendant wink

Cheers Jakob

-- JakobR - 13 Jul 2009


Thanks for you suggestion. Now I develop with ms vs2008+intel fortran10.1+visual assist x under windows, after finishing the codes, I go to Linux to build and test the codes, I usually use "Kate text editor" and "Makefile", my compiler is g++4.3. This is efficient enough for me.

I used to do java development under Eclipse, it's a good tool. For my experience, ms vs2008 is far better than Eclipse when programing with C++ and Fortran.

Thanks again.


-- YanWei - 14 Jul 2009

Hi Yan, Just a hint, who knows maybe it helps. If you want to use the 'release' mode, please remember you also have to build the 'gpstk' libraries in this mode mode. After that, update all the links to these libraries in your project and build it.

As a weighting scheme I use sinus of elevation angle squared.


-- OctavianAndrei - 14 Jul 2009


I create a new label AboutVectorRotation to present my question more clearly.

-- YanWei - 14 Jul 2009 No such template def TMPL:DEF{PROMPT:supportquery}

Topic revision: r11 - 14 Jul 2009, RickMach

This site is powered by FoswikiCopyright © by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding Foswiki? Send feedback