goGPS-Project / goGPS_Java

goGPS Java is a GNSS observation processing library.
http://www.gogps-project.org
61 stars 43 forks source link

Introduction of LAMBDA method for integer ambiguity resolution #21

Open ege010 opened 8 years ago

ege010 commented 8 years ago

It would be useful to add the use of the LAMBDA method to resolve integer values for phase ambiguities after the Kalman filter update on phase double differences. Reference code in goGPS MATLAB:

http://sourceforge.net/p/gogps/code/HEAD/tree/trunk/positioning/kalman/goGPS_KF_DD_code_phase_loop.m#l843

http://sourceforge.net/p/gogps/code/HEAD/tree/trunk/positioning/lambda/lambdafix.m

The latest MATLAB implementation of LAMBDA (v3) can be downloaded from here: http://gnss.curtin.edu.au/research/lambda.cfm

Not sure if a Java implementation of LAMBDA already exists somewhere...

ZiglioUK commented 8 years ago

Question: Lambda takes several epochs to converge, as far as I remember, or can it be applied to a single epoch?

[Update] @ege010 has already replied https://github.com/goGPS-Project/goGPS_Java/issues/19#issuecomment-157714270

ZiglioUK commented 8 years ago

Also, how does the current java code deal with phase ambiguities? I see the Kalman filter is implemented and appear to deal with phase double differenced

ege010 commented 8 years ago

Typically it takes some epochs to converge, unless the baseline is very short. Recently I also implemented the stand-alone version of the goGPS Kalman filter; both double-differenced phase ambiguities and stand-alone phase ambiguities are added as state variables in the two versions of the Kalman filter. Anyway, LAMBDA should be applied to double-differenced ones.

As we were already discussing in another thread, phase ambiguities are kept as float values in the Kalman filter; goGPS MATLAB version applies then the LAMBDA algorithm at each epoch separately, after the Kalman filter update step (see here, from line 843: http://sourceforge.net/p/gogps/code/HEAD/tree/trunk/positioning/kalman/goGPS_KF_DD_code_phase_loop.m#l807 ).

2016-01-13 22:03 GMT+01:00 Emanuele Ziglioli notifications@github.com:

Also, how does the current java code deal with phase ambiguities? I see the Kalman filter is implemented and appear to deal with phase double differenced

— Reply to this email directly or view it on GitHub https://github.com/goGPS-Project/goGPS_Java/issues/21#issuecomment-171431547 .

ZiglioUK commented 8 years ago

Thanks @ege010 , I now understand the concept of float values for ambiguities, it comes from Tenuissen's papers. So, just to make it clear, Lambda allows you to converge those ambiguities more rapidly, is that right? At what point do you actually round those values up to their integer part?

I've been experimenting myself with float ambiguities, I was curious to see if I could solve 20ms ambiguities by treating them as state variables. Not having a master station, I simply added equations that linked the N(k) ambiguities to that 20ms length. Then I would solve the system by keeping the position constant. Unfortunately I didn't get the result I was hoping for because the N(k) values would converge to very small values (less than 0.5), so either I was doing something wrong or methods like Lambda do something more sophisticated I don't understand yet.

ege010 commented 8 years ago

Sorry, it took a bit long to reply...

The EKF itself makes the float ambiguities converge. The Lambda method does not accelerate this process, but it allows to "round" them to the (hopefully correct) integer value in an optimal way (Integer Least Squares). In the goGPS MATLAB implementation, the Lambda algorithm is applied at every epoch after the EKF update step, without touching the EKF variables themselves (i.e. the EKF continues independently from the Lambda results, and "sees" just the float estimates).

2016-01-14 22:38 GMT+01:00 Emanuele Ziglioli notifications@github.com:

Thanks @ege010 https://github.com/ege010 , I now understand the concept of float values for ambiguities, it comes from Tenuissen's papers. So, just to make it clear, Lambda allows you to converge those ambiguity more rapidly, is that right? At what point do you actually round those values to their integer part?

I've been experimenting myself with float ambiguities, I was curious to see if I could solve 20ms ambiguities by treating them as state variables. Not having a master station, I simply added equations that linked the N(k) ambiguities to that 20ms length. Then I would solve the system by keeping the position constant. Unfortunately I didn't get the result I was hoping for because the N(k) values would converge to very small values (less than 0.5), so either I was doing something wrong or methods like Lambda do something more sophisticated I don't understand yet.

— Reply to this email directly or view it on GitHub https://github.com/goGPS-Project/goGPS_Java/issues/21#issuecomment-171788545 .

ZiglioUK commented 8 years ago

Thanks Eugenio!

Could you perhaps write a wiki/tutorial page about how to define a model for the Kalman filter? I'm thinking I'd like to track parameters such as the coarse time error with the Kalman filter. I've been able to process sets down to 3 satellites in the coarse time case! Although I simply apply the offset I've computed from the previous set, while the Kalman filter would be perfect to track this slow changing parameter.

Reimobar commented 7 years ago

Are there others methods to resolve carrier phase integer ambiguity resolution? is there a relation among lambda and DD?

ZiglioUK commented 7 years ago

@Reimobar I'm not an expert here, @ege010 ?

Reimobar commented 7 years ago

@ZiglioNZ @ege010 Good Afternoon! I am Reinaldo , i am a master student at Beihang University in China and I am really interesting about lambda method.

ege010 commented 7 years ago

Hi @Reimobar , sorry it took some time to reply! On Navipedia you can find some basic information about ambiguity resolution here: http://www.navipedia.net/index.php/Carrier_Phase_Ambiguity_Fixing, and in particular, I would take a look at references cited here: http://www.navipedia.net/index.php/Carrier_phase_ambiguity_fixing_with_two_frequencies#cite_note-3

Another invaluable source of information is the Bernese manual, that is freely downlodable here: http://www.bernese.unibe.ch/docs50/DOCU50.pdf - the chapter about ambiguity resolution starts at page 167 (page 195 of the PDF).

If you are particularly interested about the LAMBDA method, there is also this document about implementation aspects: http://www.citg.tudelft.nl/fileadmin/Faculteit/CiTG/Over_de_faculteit/Afdelingen/Afdeling_Geoscience_and_Remote_Sensing/pubs/lgr12.pdf

Reimobar commented 7 years ago

@ege010 thanks for the information, do you use MATLAB to prove Lambda method?

ege010 commented 7 years ago

@Reimobar yes, the LAMBDA MATLAB code in goGPS is called here: https://github.com/goGPS-Project/goGPS_MATLAB/blob/master/goGPS/positioning/lambda/lambdafix.m

Reimobar commented 7 years ago

thank you, have your ever heard about ARCE (ambiguity resolution constrain equation) to solve ambiguity? I need to work with two signal GPS and Beidu, and use these two method (lambda and ARCE). do you where can I get the information about both signal in RINEX format? thank you for you time.

Reimobar commented 7 years ago

@ege010 thank you, have your ever heard about ARCE (ambiguity resolution constrain equation) to solve ambiguity? I need to work with two signal GPS and Beidu, and use these two method (lambda and ARCE). do you know where can I get the information about both signal in RINEX format? thank you for you time. the name of my investigation is Carrier phase integer ambiguity resolution for GNSS single frequency RTK

Reimobar commented 7 years ago

@ege010 Good afternoon Sir, I was checking your code using MAtlab2017 and I had a problem. I cant find getID in matlab to run it well.

Reimobar commented 7 years ago

working with getepoch

clicat commented 7 years ago

Hi @Reimobar ...I changed the name of a function in GPS_Time, and I did not propagate it everywhere, now I should have fixed the problem, see: https://github.com/goGPS-Project/goGPS_MATLAB/commit/6396fb30dd21bc6bccebf0cca9ba83a48788c4a5. If you find any bug in the MATLAB code please add an issue here on github, it's very useful for us! Thanks for the report!

Reimobar commented 7 years ago

hello Andrea, Do you have a code of another ambiguity resolution method?

On Oct 24, 2017 15:32, "Andrea Gatti" notifications@github.com wrote:

Hi @Reimobar https://github.com/reimobar ...I changed the name of a function in GPS_Time, and I did not propagate it everywhere, now I should have fixed the problem, see: goGPS-Project/goGPS_MATLAB@6396fb3 https://github.com/goGPS-Project/goGPS_MATLAB/commit/6396fb30dd21bc6bccebf0cca9ba83a48788c4a5. If you find any bug in the MATLAB code please add an issue here on github, it's very useful for us! Thanks for the report!

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/goGPS-Project/goGPS_Java/issues/21#issuecomment-338900745, or mute the thread https://github.com/notifications/unsubscribe-auth/AbTS-Le38uNQdsWcfN-U4DjNAg7Pir7Wks5svZKfgaJpZM4HAOAZ .

clicat commented 7 years ago

@Reimobar I work with Eugenio, unfortunately, we only use the lambda methods simply because we are not enough people to develop all the ideas that we have for goGPS ;-) ...up to now, we have no code for other fixing approaches.

Reimobar commented 7 years ago

ok. there no problem. i want to resolve the ambiguity using lambda method. one single freqency.

On Oct 24, 2017 23:33, "Andrea Gatti" notifications@github.com wrote:

@Reimobar https://github.com/reimobar I work with Eugenio, unfortunately, we only use the lambda methods simply because we are not enough people to develop all the ideas that we have for goGPS ;-) ...up to now, we have no code for other fixing approaches.

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/goGPS-Project/goGPS_Java/issues/21#issuecomment-339031851, or mute the thread https://github.com/notifications/unsubscribe-auth/AbTS-De167RX27ZOxifivCxf7Hib5a3yks5svgM_gaJpZM4HAOAZ .

Reimobar commented 7 years ago

LAmbda​ goGPS_MATLAB-master.rar https://drive.google.com/file/d/0B7RtBvXQrzX_SW5wQ2ZUQUZjZm8/view?usp=drive_web

2017-10-25 1:23 GMT+08:00 Reinaldo Morales Barrera reimobar@gmail.com:

ok. there no problem. i want to resolve the ambiguity using lambda method. one single freqency.

On Oct 24, 2017 23:33, "Andrea Gatti" notifications@github.com wrote:

@Reimobar https://github.com/reimobar I work with Eugenio, unfortunately, we only use the lambda methods simply because we are not enough people to develop all the ideas that we have for goGPS ;-) ...up to now, we have no code for other fixing approaches.

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/goGPS-Project/goGPS_Java/issues/21#issuecomment-339031851, or mute the thread https://github.com/notifications/unsubscribe-auth/AbTS-De167RX27ZOxifivCxf7Hib5a3yks5svgM_gaJpZM4HAOAZ .

Reimobar commented 7 years ago

Hello Andrea, I need some help if you are available. Can we keep in touch by skype?

Sincerely,

Reinaldo

2017-10-24 23:33 GMT+08:00 Andrea Gatti notifications@github.com:

@Reimobar https://github.com/reimobar I work with Eugenio, unfortunately, we only use the lambda methods simply because we are not enough people to develop all the ideas that we have for goGPS ;-) ...up to now, we have no code for other fixing approaches.

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/goGPS-Project/goGPS_Java/issues/21#issuecomment-339031851, or mute the thread https://github.com/notifications/unsubscribe-auth/AbTS-De167RX27ZOxifivCxf7Hib5a3yks5svgM_gaJpZM4HAOAZ .

Reimobar commented 7 years ago

@ege010 @clicat Good Afternoon, sorry for the too many questions I'm doing, is jut because I want to understand everything about y try to use it. I have 3 questions about this software to ask:

  1. I want to make it works with a single frequency, is it posible to works with a RTK single frequency?
  2. How Algorithms are working in this Software?
  3. Can I use Matlab2007 or it is prefer to use Matlab2009?

Thank you, I'm working on it. REinaldo

Reimobar commented 7 years ago

@ege010 @clicat Good Afternoon, sorry for the too many questions I'm doing, is jut because I want to understand everything about y try to use it. I have 3 questions about this software to ask:

  1. I want to make it works with a single frequency, is it posible to works with a RTK single frequency?
  2. How Algorithms are working in this Software?
  3. Can I use Matlab2007 or it is prefer to use Matlab2009? Thank you, I'm working on it. REinald
clicat commented 7 years ago

Hi @Reimobar!

  1. the software was born to work on single frequency low-cost receiver in real time, but I cannot even recall the last time I tried to use it for that purpose.
  2. the main "Algorithm" used for the processing is, for a historical reason, the Kalman filter (https://en.wikipedia.org/wiki/Kalman_filter) goGPS was born to show to the students how the KF works.
  3. I think that with the latest version of the code such an old compatibility died, probably a long ago! For the development of the updates, we are currently using MATLAB 2016a and MATLAB 2017a
clicat commented 7 years ago

@Reimobar I'm not using Skype very often but you can try to contact me, my username is "gatti.andrea"

Reimobar commented 7 years ago

thank you very much. Andrea from Cernobbio, Italy?

2017-11-27 18:51 GMT+08:00 Andrea Gatti notifications@github.com:

@Reimobar https://github.com/reimobar I'm not using Skype very often but you can try to contact me, my username is "gatti.andrea"

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/goGPS-Project/goGPS_Java/issues/21#issuecomment-347146463, or mute the thread https://github.com/notifications/unsubscribe-auth/AbTS-KIi5eWs7st4iimZaQXTasZkT1pMks5s6pRIgaJpZM4HAOAZ .

Reimobar commented 7 years ago

@clicat thank you very much. Andrea from Cernobbio, Italy?

Reimobar commented 7 years ago

@clicat skype

Reimobar commented 7 years ago

@clicat hello sir, I added you I think so by skype

nafiq4 commented 3 years ago

Hello i have download the script for LAMBDA algorithm in solving the phased ambiguity. However i cant run it seems it required at least 2 parameter which is known as float ambiguity solution and variance-covariance matrices. Can someone help me how to calculate these two parameters?

nafiq4 commented 3 years ago

I try to find some article and journal on how to calculate these two parameter but still not found. Most of the article and journal skip this step so it makes me cant understand the step to resolve the ambiguity.

nafiq4 commented 3 years ago

@ege010 @clicat

daniskanberkcan commented 1 year ago

hi, these codes didn't solve my problem, do you know any other matlab code?

daniskanberkcan commented 1 year ago

I am using 3 gnss receiver and 3 antenna

ZiglioUK commented 1 year ago

this project is not active anymore, have you tried GoGPS MATLAB? or perhaps RTK-LIB