GPS Receive with the LimeSDR


I’m looking for information with definite links to source that the LimeSDR can function as a GPS receiver. Does anyone have that info for the Lime? Just checking for a friend of mine that has a LimeSDR and is wanting to perform receive in the GPS band with it. Any/All inquires will be greatly appreciated - thanks,

73 de Marty, KN0CK


pls check this ->

1 Like

@9a4db - Djani,

Great article and thanks for that. But this is where the LimeSDR is a transmitter for GPS and receive is being performed on an RTL-SDR. I’m looking for the LimeSDR being the receiver in this case. One might infer from the article that it may be possible for the OsmoSDR code to be compiled to work with the LimeSDR, but that’s what I’m on the hunt for - - an actual application where the LimeSDR is receiving GPS.

Thanks again for the link - that will help in another phase of this project.

73 de Marty, KN0CK


Marty, you have seen this video I presume ?

1 Like


I have, but I haven’t found anything of the underpinnings of the Octave flow diagrams or setup to receive GPS with the Lime. Are you aware of any links for this Octave GPS app with the Lime? I haven’t found any related to that other than the video. Anything - source code, etc will be greatly appreciated. Transmit appears to be conquered, but I am looking for the receive side, now.

@andrewback, @cswiger, @TegwynTwmfatt @gerryk : Do any of you Gents know of any source or Octave code or flowdiagrams that allow the LimeSDR to receive GPS? Please let me know if you do - Many thanks in advance.

73 de Marty, KN0CK


There’s soft-gnss for Matlab. For Octave just searched ‘soft gnss octave’ turns up a 7 yr old port might be a starting point.


@cswiger - Chuck,

Thanks for the info - much appreciated…! I’ll consider this along with the other options in Octave as I can make that work later on. Again, thanks for passing this along.

73 de Marty, KN0CK


Just gave a go on Ubuntu 16 after apt-get install octave octave-signal. Basically worked as advertised after one snafu of having to type > pkg load signal then run init.m and with the samples where expected in …/GNSS_signal_records it chugs the numbers - looks intensive enough that we will have to record from LimeSDR to a file and process offline.

Enter "1" to initiate GNSS processing or "0" to exit : 1

Starting processing...
   Acquiring satellites...
(. . 03 . . . . . . . . . . . 15 16 . 18 19 . . 22 . . . . . . . . . . )

| Channel | PRN |   Frequency   |  Doppler  | Code Offset | Status |
|       1 |  22 |  4.13468e+06 |    4277   |      8475   |     T  |
|       2 |   3 |  4.13440e+06 |    4004   |      1764   |     T  |
|       3 |  19 |  4.13694e+06 |    6541   |       740   |     T  |
|       4 |  18 |  4.13247e+06 |    2069   |     12297   |     T  |
|       5 |  15 |  4.13209e+06 |    1686   |     12260   |     T  |
|       6 |  16 |  4.13125e+06 |     851   |     12838   |     T  |
|       7 | --- |  ------------ |   -----   |    ------   |   Off  |
|       8 | --- |  ------------ |   -----   |    ------   |   Off  |

   Tracking started at 18-Nov-2017 08:18:11
Not able to read the specified number of samples  for tracking, exiting!
   Tracking is over (elapsed time 00:00:02)
   Saving Acq & Tracking results to file "trackingResults.mat"
   Calculating navigation solutions...
Record is to short or too few satellites tracked. Exiting!
   Processing is complete for this data block
   Ploting results...
plotNavigation: No navigation data to plot.
Post processing of the signal is over.



Also works using USRP/UmTRX via UHD and HackRF/BladeRF via gr-osmosdr so I don’t see any reason why it should not work with the LimeSDR.

1 Like

@cswiger - Chuck,

WOW!! THANK YOU for the information on this, Chuck…!! I will try this over the next day or two when I’m not as busy as I am right now and report back my findings. Looks like I’m also going to have to find a patch antenna, too, to make this happen (hello Amazon)… :slight_smile:

More to follow on this as I have it - Stay tuned and thanks again for the info and real world checkout…!

73 de Marty, KN0CK



I will give that a try, too - I’m guessing that there are OsmoSDR hooks for LimeSDR that I can obtain to make the app compatible? Would this be via ZADIG? Elaborate on that when you can - this ALSO looks interesting…!

EDIT: Okay - having looked at the documentation it appears that this would all be compiled under Ubuntu 16.04 which is not an issue - Looked pretty straightforward.

73 de Marty, KN0CK


Played with gnss-sdr today, the Ubuntu package is 0.0.6, and instructions say build from source to get 0.0.9 (had to $ pip install mako as the user compiling it even though it was already installed on the system, to satisfy cmake) - got it to decode rf signal files created by gps-sdr sim ok - have not run it thru the LimeSDR but in theory it should work :slight_smile: That’s because I don’t have a +27db gain active patch antenna for gps, just an unamplified patch and need stronger signals from a local source.

Anyway, gps-sdr-sim --> file --> gnss-sdr printed a location:

Tracking of GPS L1 C/A signal started on channel 4 for satellite GPS PRN 19 (Block IIR)
Position at 2017-Oct-16 20:00:34.844000 UTC using 4 observations is Lat = 52.2067 [deg], Long = 0.116738 [deg], Height= 18.5959 [m]


@cswiger - Chuck,

Another WOW for all the research on this…! I’ll have to get my setup working on another bench to try this and also get onto another platform (Linux) to compile this up. If you make any further stride on this keep us all in the loop - Amazing work on this thus far - many thanks for that…!

73 de Marty, KN0CK


Yes you can use either gnss-sdr or SoftGNSS (I maintain a Matlab fork here with several bug fixes and improvements).

The only trick is you will need to use an active antenna (which requires power) and a bias tee (to provide the power since LimeSDR lacks a bias tee). Optional but recommended is an amplifier (LNA4ALL)

I haven’t blogged about it because I don’t see a good use case for it - you can mod a $10 RTLSDR stick to have a bias tee. That is more interesting to me - cheap commodity hardware. LimeSDR offered a unique opportunity to share in that it could transmit replay attacks (I was also hoping to do some things on the FPGA but I overestimated my capabilities, there) I did pre-order several LimeSDR Mini’s and hope to do some in-flight GPS tracking with those in the future. The LimeSDR is a little too expensive for me to risk crashing :slight_smile:

Philip Hahn

1 Like

There is one very notable bug in this fork (also a bug on the CD accompanying the book)

tracking.m, line 275, reads

trackResults(channelNr).absoluteSample(loopCnt) = ftell(fid);

This provides extremely coarse results as you are rounding to the nearest sample. The correct calculation should be

trackResults(channelNr).absoluteSample(loopCnt) =(ftell(fid))/dataAdaptCoeff- remCodePhase/codePhaseStep;

This accomodates for where you are in the code phase (a fraction of a sample) and provides a more accurate solution than counting how many samples have been processed (IE, the old code was rounding to the nearest sample).


1 Like

@hahnpv - Phil,

Fundamental question: Are the scripts on Github for SoftGNSS tailored to perform an acquisition on the LimeSDR? Please advise on that because the focus of my GPS study is entirely based on the LimeSDR. If there is anything that needs to be modified with the script to make them work with the LimeSDR please advise where that’s at.

I am using the V1.4 LimeSDR with the Matlab scrips that you advised the group on ( and I performed the init file function first and received an error about the file and filepath. I tried several times to start but kept getting the same issue even when the SoftGNSS was on the shell of the C: drive. I also tried to perform a SetSettings to see if that could remedy the issue - to no avail.

Can you advise me the right way to set this up for an acquisition? I have both a sky view roof antenna and a GPS Sat Sim that I have access to and I’m on the Sat Sim (for guaranteed good signal strength) right now and want to prove that before I start on the roof antenna. Anything you can help me with getting started with the SoftGNSS scripts (especially init for acquisition) will be GREATLY appreciated.

Thanks in advance -

Marty (KN0CK)


Marty, there is no tailoring, this code is agnostic to acquisition hardware. It takes a prerecorded file of rf samples. You need to appropriately specify bandwidth, IF and data types (short, ushort, float, double etc.) and corresponding data size in the initSettings.m file.

I’ve used gps-sdr-sim ( for GPS simulation and documented replay attacks in these blog posts: and . While the posts are about a replay attacks (LimeSDR broadcast, RTLSDR receive, offline decode with SoftGNSS), I was able to take the output of gps-sdr-sim in both cases and use it directly with SoftGNSS.

I was also able to use a Spirent GPS simulator at work with excellent results (using proprietary data… no blog post)

I was intending to do a GPS acquisition blog post with LimeSDR Mini once it arrives (tick, tock…). There’s now way I’d fly a $300 LimeSDR on a rocket, but I might be tempted to do it with the LimeSDR Mini at the early bird pricing (using the tx channel for telemetry, nauturally). As small as it is I could likely package it to give it a fighting chance in a hard landing.



I’m also looking for some introductory code for GPS signal reception using LimeSuite API. Dumping the RX samples to a file is a good starter. Eventually, I’d like to capture phase coherent signals from the dual RX channels for simple beamforming / null-steering.

By the way, I’ve just uploaded a real-time version of gps-sdr-sim for LimeSDR to my GitHub repository. You don’t need to generate that massive baseband file anymore.


For realtime I would suggest gnss-sdr. I don’t believe they have Soapy support yet.

1 Like

@hahnpv - Phil,

Appears that GNSS-SDR supports OsmoSDR so there may be some hope of it being used with the Lime from that angle…It’s a slim hope, but I think as long as OsmoSDR is built into GNSS-SDR then it should be able to detect the Lime, but there’s the matter of how does one assign the Lime from Osmo as a device? Let me know your thoughts on that - thanks,