Monday, August 29, 2011

Is SiRF really bringing back carrier phase?

Lately I have been witnessing people reporting about getting carrier phase from various SiRF GSD4e receivers, such as Navman and OriginGPS. 
There is a moltitude of SiRF IV receivers out there, and the list below is not exhaustive:


Fastrax IT430
Maestro Wireless A-2100
Inventek ISM420

Wi2Wi W2SG0084i

Micro-modular MN8010
OriginGPS ORG4472

Locosys Technologies S4-0606
Navman Wireless Jupiter J-F2

Thanks to Димма on a Russian Geodesy blog, we have a snapshot of data collected with SiRFLive2.0 (please forgive text wrapping):


SiRFLive Version: SiRFLive 2.0 Marketing
Thursday, August 25, 2011
PC: W037D299
Physical Connection: UART
SW Version: GSD4e_4.1.0-P1 12/20/2010 354 GSD4e
DUT Name:
28,0,860041386,25,3.8972801716003340e+005,2.5330147020331487e+007,1.8319525e+004,2.5330178622016661e+007,30000,191,27,27,27,27,27,27,27,27,27,27,1000,500,-4,0,0
28,1,860041386,12,3.8972801716003340e+005,2.6510500006031543e+007,1.8745631e+004,2.6510516541034564e+007,30000,191,44,44,44,44,44,44,44,44,44,44,1000,500,-4,0,0
28,2,860041386,2,3.8972801716003340e+005,2.7095735858978566e+007,1.8233168e+004,2.7095742224695239e+007,30000,191,45,45,45,45,45,45,45,45,45,45,1000,500,-4,0,0
28,3,860041386,4,3.8972801716003340e+005,2.8811696972083870e+007,1.8818879e+004,2.8811729208855990e+007,30000,191,43,43,43,43,43,43,43,43,43,43,1000,500,-4,0,0
28,4,860041386,10,3.8972801716003340e+005,2.9933113007417683e+007,1.7881320e+004,2.9933150167102419e+007,30000,191,41,41,41,41,41,41,41,41,41,41,1000,500,-4,0,0
28,5,860041386,30,3.8972801716003340e+005,2.5056555168215591e+007,1.8287135e+004,2.5056605592962816e+007,30000,45,15,15,15,15,15,15,15,15,15,15,1000,500,0,50,0
28,6,860041386,31,3.8972801716003340e+005,2.7253274315252494e+007,1.7911645e+004,2.7253302286751069e+007,30000,45,21,20,20,20,20,20,20,20,20,20,1000,500,-4,50,0
64,2,25,16,2,0,860046711,2711796546,-2018378871,202101184,34,13,19486396,161,170064,14592,765,5295,127,0,373,37,19486200,8,0,0,1
64,2,12,16,2,0,860045683,2711665022,-999316371,206803073,-1,9,19486396,93,88983,14592,243,263,236,0,419,19,19486200,6,0,0,1
64,2,2,16,2,0,860044900,2711564712,590426562,201150408,2,7,19486396,58,34257,14592,209,-410,237,0,471,15,19486200,9,0,0,1
64,2,4,16,2,0,860056748,2713081329,-637293933,207611290,1,2,19486396,178,173482,14592,200,328,229,0,384,20,19486200,9,0,0,1
64,2,10,16,2,0,860052503,2712537904,-712001231,197268336,1,65534,19486396,206,199974,14592,-294,-424,231,0,340,16,19486200,14,0,0,1
64,2,30,16,6,0,860048142,2711979654,-68870448,201744724,2,14,19486396,265,271360,14592,-1060,2049,-30,0,108,130,19486200,0,-1,0,1
64,2,31,16,6,0,860053502,2712665770,-161848563,197604358,5,7,19486396,147,150528,14592,2103,-464,-38,0,83,165,19486200,8,0,0,1
30,25,3.8972799999998091e+005,1.5076749765686795e+007,3.5933861764103957e+006,2.1542989468968987e+007,6.4299937762260811e+001,2.7401660794328523e+003,-4.9865148201605086e+002,1.5608991872749377e-005,1.5621511e-012,1,0.0000000e+000,0.0000000e+000,3.2923935e+000
30,12,3.8972799999998091e+005,1.1884563679683834e+007,1.6291456387266476e+007,1.7384876625289034e+007,-1.1622553644346129e+002,2.1962242709684892e+003,-1.9626822261160808e+003,1.8102194566119174e-005,3.3094907e-012,1,0.0000000e+000,0.0000000e+000,4.2158856e+000
30,2,3.8972799999998091e+005,6.2082524729776531e+006,1.8408282380763520e+007,1.8385535284110300e+007,-2.1201026021377620e+003,-9.3213884708925502e+002,1.6059507862227920e+003,3.5292745438883114e-004,4.0546915e-012,1,0.0000000e+000,0.0000000e+000,4.7821899e+000
30,4,3.8972799999998091e+005,-1.0762067066920688e+007,1.1736652988876456e+007,2.1071583778895516e+007,-2.3825680363444444e+003,-1.3365420890936439e+003,-4.3364700696691807e+002,2.1170121762251255e-004,9.2645414e-012,1,0.0000000e+000,0.0000000e+000,6.5737190e+000
30,10,3.8972799999998091e+005,-9.8302346586159449e+006,2.0084912631979931e+007,1.3816020695044205e+007,-2.8794790172300321e+002,-1.8082575793544818e+003,2.4235822198007645e+003,-1.1038774409012209e-005,-4.5888042e-012,1,0.0000000e+000,0.0000000e+000,9.3115501e+000
30,30,3.8972799999998091e+005,1.5365798544428909e+007,2.2397196288039838e+006,2.1188563043022357e+007,3.0218839841904361e+002,2.7624647015425176e+003,-5.0214592859035730e+002,9.1548491532589152e-005,-3.8803110e-012,4,4.0960000e+005,1.0816000e+004,3.2914379e+000
30,31,3.8972799999998091e+005,7.1807381854674015e+006,-1.3033520067140032e+007,2.2198544705630817e+007,2.4188392313643085e+003,1.3389951664065002e+003,2.4421316559121053e+001,1.3109461800722862e-004,9.3347006e-012,4,4.0960000e+005,1.0816000e+004,4.2912688e+000
41,0,516,1650,389728000,2011,8,25,12,15,13000,16779786,577739216,142115489,22129,18638,21,0,19942,0,0,0,2504,2291,0,1,514445417,0,1830720,0,0,0,0,5,23,8
4,626,38972800,12,2,86,42,191,46,46,45,45,45,45,45,45,45,45,10,62,6,191,41,41,41,41,41,41,41,41,41,41,12,107,50,191,44,44,44,44,44,44,44,43,43,43,30,219,83,45,15,15,15,15,15,15,15,15,15,14,4,38,18,191,44,44,43,43,43,43,43,43,43,43,25,185,85,191,27,27,27,27,27,27,27,26,26,26,31,300,40,45,21,21,21,21,20,20,20,20,20,20,29,215,50,0,0,0,0,0,0,0,0,0,0,0,14,240,16,0,0,0,0,0,0,0,0,0,0,0,9,156,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
2,3305164,837044,5372540,0.000,0.000,0.000,4,4.6,2,626,38972800,5,25,12,2,4,10,0,0,0,0,0,0,0
9,0,0,0,0
7,1650,389728,5,96205,17160052,389727999
50,0,0,18,0,0
As this is a fantastic opportunity for people looking for a cheap RTK system, I am planning to have a further look into this. Any help and comments are appreciated!

EDIT 11/09/26:
I assembled Shilling20, a dual Origin GPS ORG4472 board

Figure1: Dual GSD4e (ORG4472) assembly, for short baseline applications.



And seems that both receivers, with firmware  
GSD4e_4.0.4-P1 08/13/2010 225 GSD4e
Output RAW measurements: pseudorange, carrier phase, Doppler, etc. MID64.2 is also preent. More to come soon.

Cheers,
Michele
 

20 comments:

Mirko said...

Hi Michele,

thanks for this post. I think we could also try to write a list of all gps modules that provide raw data measurements and cost less than 250$. Another important requirement is to be "in production". Most of popular raw data chipset are discontinued (Sirf II, AC-12, Garmin OEMs, etc.) and then not suitable for new designs. Do you know any (low cost) raw data receiver compatible with Galileo?

Cheers

Ps: remember for everyone is willing to try Sirf raw data output (MID 28) that it is NOT enabled by default! Use MID 128 to enable MID 28.

Mirko said...

Hi again,

I am having some discussion with the technical support people of Inventek. ISM480F1 looks to be a raw data enabled 5Hz SIRF IV module... wow! Firmware GSD4e_4.1.0-P1 12/20/2010. It could be the choice... coming soon with updated info.

Cheers

Mirko

Michele said...

Hi Mirko,

Yes we will always need to re-start the chip with Nav Data Lib enabled (as it used to be with older SiRF III).

The only thing I don't like of the Inventek ISM480 is the passive patch antenna built-in, which is no good for RTK. If it would be possible to have the same on the ISM420 though..

Mirko have you seen the MID64.2? Those pseudorange, Doppler, and carrier phase accuracy "estimators" are very interesting for developing a custom PVT, don't you agree?

Cheers.
Michele

Mirko said...

Hi Michele,

Inventek should launch soon a new version of ISM480 with external antenna. This comes from ISM480:

28,0,145953764,7,1.4867360054310077e+005,2.0472250788286384e+007,1.8310977e+004,2.0472265440004222e+007,8440,191,40,40,40,40,40,40,40,40,40,40,200,100,0,0,0
28,1,145953764,19,1.4867360054310077e+005,2.0705526380466010e+007,1.8679297e+004,2.0705529234693255e+007,8440,191,42,42,42,42,42,42,42,42,42,42,200,100,-1,0,0
28,2,145953764,8,1.4867360054310077e+005,2.1572945108205695e+007,1.7925490e+004,2.1572951958368298e+007,8440,191,41,41,41,41,41,41,41,41,41,41,200,100,-1,0,0

Instead, this comes from ORG4472:


28,6,648932673,2,3.06293000301797e+005,2.4040936854e+007,1.8650136719e+004,2.4040939899e+007,30000,255,33,33,33,33,33,33,33,33,33,33,1000,500,-4,1,0
28,7,648932673,5,3.06293000301797e+005,2.4562170887e+007,1.7849621094e+004,2.4562176215e+007,30000,253,29,29,29,29,29,29,29,29,29,29,13,500,0,11,0
Unk: 40021D14020026AE1C82570E409BAF9D6A030BFAF78C0002000D00E9AED6000000300000A6B1000019000117058A00C7000002C0004500E9ADE0000200000000000001
Unk: 40021E14020026AE11845708C185425F756C0C0D03730002000D00E9AED60000001100002FCE00001900FFFE002F00C1000002AE004800E9ADE0000100000000000001
Unk: 40021914020026AE0E70570737A5AA306FF50C1536030001000B00E9AED600000011000034CF00001900005C06BD00B2000001C6003600E9ADE0000000000000000001
Unk: 40021F14020026ADFF8C56FFC593A134762B0BD361F80005000900E9AED60000002C00009EEE00001900FFBA04DE00C0000002AC004700E9ADE0000100000000000001
Unk: 40021514020026ADEDAD56F6D61C56D647440B8B46840005000400E9AED60000005D00015B700000190000D400C900A800000232005E00E9ADE0000100000000000001
Unk: 40020C14020026AE1664570B31DB8D3B1DCE0C3FE98AFFFF000300E9AED6000000020000080000001900FE98F92100660000018A004D00E9ADE0000000000000000001
Unk: 40020214020026AE25FA5712FCD47CCCCB0D0C437D440000000100E9AED60000001000000EDA0000190000D1062E00B500000209003F00E9ADE0000200000000000001
Unk: 40020514020026AE1544570AA1CA9B085D820BBCB9BFFFF5001300E9AED50000001C000066000000190001B211AB0081000002D3006500E9ADE0000100000000000001
30,29,3.06293000000e+005,1.5785849135e+007,4.3501820427e+006,2.0972327451e+007,-1.7224569988e+003,2.0124431913e+003,8.8621226066e+002,2.3582913136e-004,3.7699630744e-012,1,0.0000000000e+000,0.0000000000e+000,1.5271326303e+000
30,30,3.06293000000e+005,1.7839796923e+007,1.1121673794e+007,1.5879575868e+007,7.1931816948e+002,1.9687881175e+003,-2.1360135443e+003,9.0749511809e-005,-5.9895404608e-012,1,0.0000000000e+000,0.0000000000e+000,1.5699721575e+000


As you can see, I have some Unk strings in the middle; however the other messages looks fine. Do you have a justification of that? I am using Sirfdemo; I would like to try with Sirflife. I have a long (1 hour - 12 MByte) .gps file. Do you want try to process those data? I can post the file somewhere.

MID64.2 looks interesting. It could help to built the covariance matrix... I will try to also capture this message.

I saw that MID 7 is also important, because it has the clock bias.
So we will need:
MID 7
MID 28
MID 30
Maybe MID 41
Maybe 64.2

Any other?

Cheers

Mirko

Michele said...

Hi Mirko,

Beautiful. Unk4002 is MID64.2 (0x40=64 0x02=2)!
So, ORG4472 outputs everything we need and it's cheap :D

I don't think we need MID7 for the clock bias as that can be calculated by the PVT and SiRF guarantees that it's not too big so that PVT starts in a good convergence region (sats are evaluated close to their real position).
MID7 is useful for the week number though.

MID30 is not important as the sat. positions are calculated inside the PVT too. MID41 is not raw data AFAIK. MID8 and/or MID15 are useful if we want to generate Rinex NAV too.

Summarising:
(I think) MID28, MID7, MID8 is all we need for standalone, differential, and RTK position calculation.

I have SiRFLive from a previous project, but it can be found on dodgy chinese websites..

If you post the raw data somewhere we can definitely give them a go: I already have a simple parser that generates Rinex3.0 OBS from the SiRFdemo (or SiRFlive) log.

Cheers!
Michele

Sebastien said...

This is a great opportunity for cheap RTK at last.
What would be interesting to check:
- Is the carrier phase of good quality i.e. is the half ambiguity resolved? One way to check it is a zero-baseline test with a good receiver (that as its half ambiguities resolved), plotting double difference and checking if residuals are centered on integer values.
-Zero baseline test using code and doppler measurements, to have an idea of the level of noise and multipath on the different tracking loop. If it is too high, RTK might be difficult.
-Is CN0 also recorded and output by the receiver? It can be useful for weighting measurements in the processing.
Cheers,
Sébastien

Svenn said...

I want to shop some parts for DIY RTK and found this blog helpful, but before I take the risk of ordering modules I cannot use, I allow myself to ask if the modules Maestro A2100-A or Wi2Wi W2SG0084i, which both use sirf IV, can provide the necessary data output needed for further experiments with RTK. I can't find any support for Sirf IV on RTKLIB, but I can also not find Ublox 4/5/6-T on Mouser, where I am going to place my order. I want to pair the GPS for the rover with a Beagleboard, also from Mouser.

Michele said...

Hi Svenn,

I am afraid I don't know at the moment if the MaestroWireless and the Wi2Wi module support raw data. I think you'd better stick to uBlox if your intention is to use RTKLIB. uBlox itself has an online shop where you can buy LEA-4/5/6T, or your could try Chinese wholesale:
http://www.dhgate.com/ublox-lea-4t/p-ff80808129d93e870129ee82838a43d2.html

Cheers,
Michele

Lukasz said...

Guys,

I suppose you know, but if not that's great small program to obtain RINEX data from receivers with SirfSTAR chipset.

http://rapidshare.com/files/459582957/kinematic-release-0.11.rar

I tested it with Navibe GB732 and works. I don't know if is possible to connect that receiver to RTKlib.

Best regards,
Lukasz

Sebastien said...

Hello Michele,
Did you have time to have a look at the quality of the Sirf carrier phase measurements?

Michele said...

Hi Sebastien,

I didn't yet. I am waiting to have GPS+Glonass measurements now.
Would you have time to process the data if I collect them for you?

Bests,
Michele

Sebastien said...

I don't have Sirf software but if you give me a RINEX file, I can sure have a look! I have a few matlab routine that could be interesting to run. One of the thing I was thinking was to collect data with your Dual GSD4e, with antenna spaced by a meter (measured precisely) and aligned to the north (in order to have a known baseline). If you have data of a close reference station, it would also be interesting to see if RTKlib can perform reliable RTK with a reasonable time to fix.. I'll be glad to have a look!
Best regards!
Sébastien

yjmenezes said...

Dear Michele Bavaro,

Nice to see onetalent-gnss.

I am interested in FOSS-GPS and I took your data

120218_lowcostrtkperformance.7z

Looking in Rinex Header I realize a minor mistake on XYZ APPROX POSITION.
I fixed it and processed under GNU/LINUX with:
a) RTKLIB rtkpos
b) GPSTK DDBase

I supose you have collected static data with an antenna splitter as both receivers produced the same final position.
Am I right ? If not, please give me more details, I am trying to learn how to use both softwares.

best regards,

julio menezes

I put my results here, if you would like to see:
http://gpl2.com.br/mb_test

Please, If it is not an abuse
I bought an Venus634FLPx, here in my country I could not find S1315F or U-bloxLEA T ( time serie ).
Do you think if It would be possible to replace the firmware to get raw carrier phase from this FLPx ? ( let say replacing with SkyTraq: Venus S1315F firmware, as both are Venus)?

thx again !

Michele said...

Dear Julio,

Thank you very much for spotting the error, it is now fixed!

Yes data are collected using a splitter.

I think that -in theory- it should be possible to flash your S1315F with a RAW data firmware file... as long as you can get hold of it!

Cheers,
Michele

yjmenezes said...

Hi Michele Bavaro,

Thank you for answer my questions.

I put, on the same link, some pictures of yours data signals, C1,L1,D1,S1,
they look very good, very cleam, no cycle slip. With antenna model have you worked with ? It looks great for me !

cheers !

julio menezes

Jens said...

Hi,

i am a student of the ruhr university in Bochum, Germany, and currently I am working on my master thesis. I am trying to get the raw GPS data from the SiRFstar IV in the Samsung Galaxy S2 smartphone, but I am still at the beginning. Can you perhaps help me? I am looking for some code (in best case C) how to get the data from the chip. My aim is to modify the c-code on the sgs2 to get this data from the chip and try to implement some anti gps spoofing techniques on the smartphone. If you can help me with that, here is my email adress: jens.jakobi (at) ruhr-uni-bochum.de

cheers
Jens

Michele said...

Hello Jens,

In my experience, the GPS chipsets in smartphones are shipped with a bespoke FW which is usually quite limited compared to OEM units. It may or not be the case with your Samsung.
Anyway -if you manage to have a reliable serial connection to the chip - enabling raw data is as easy as sending a binary message (MID128, "Initialise Data Shource") to it where BIT4 ("Enable Nav Lib Data") is set.
Please mind that nav lib data are usually a lot of data, so 4800 and 9600 bps are not likely to be enough to sustain all the data coming through.


I have not managed to use successfully SiRF carrier phase yet, but I have a lot of scattered C code to parse raw observations.
A common pitfall is in the representation of double precision floating point values which changes in different versions of the baseband.

It'd be very untidy to post it here so please contact me on OneTalent email for that.

Cheers,
Michele

adhityo said...

Hi Michele Bavaro,
Sirfstar IV definitely can being post processing. Leica-Geosystems GS05 use SIRF chipset and new update software can log raw data to incrase accuracy

Michele said...

Hello Adhityo,

Interesting, could you please provide references backing up your statement?

In my tests, carrier phase out of a standard SS4 was not good. Of course pseudoranges, although heavily smoothed, might still be useful for DGPS.

Michele

adhityo said...

Hi Michele

look at this link... I have do post processing with Leica Geo Office, it can increase accuracy by sub meter. I think enough for GIS not realtime

http://www.leica-geosystems.com/en/Product-News_934.htm?id=4933