GPS Receive with the LimeSDR

Deleted my last post because I found out I was wrong.

gnss-sdr has full osmosdr support.

I was under the impression that osmosdr does not support soapy, but it does: https://git.osmocom.org/gr-osmosdr/tree/lib/soapy

In theory then you should be able to use a LimeSDR with gnss-sdr. I’ll try tinkering with this in the next few evenings

philip

1 Like

Phil,

I’m quite interested in this, too, because I’d like to collect receive samples with the LimeSDR and then use the Matlab post-analysis tools to see how well the Lime does for the application I have for this. Let me know your findings and I, too, will look this over some more.

Marty

@hahnpv - Philip,

Have you had a chance to try connecting the LimeSDR to GNSS_SDR through the .conf file yet? Please advise when you can - I’m about to try that myself but not entirely sure of the arguments necessary to make that happen.

Keep in touch - 73 de Marty, KN0CK

I havent had an evening free since my last post - kids are mid basketball season. I do have some time tonight and Friday night and will let you know what I find.

philip

1 Like

@hahnpv - Philip,

All good - I’m going to be in the lab later on this evening playing with GNSS_SDR (since I have it working with the virtual SDR) and see if I can make any headway with it. If I stumble onto an answer I’ll post it here first…Stay tuned…

73 de Marty, KN0CK

@hahnpv - Philip

Well, I hate to say I beat you to it, but…

Here is the file content <copy/paste to a .conf file of your own for GNSS_SDR> that will work with GNSS_SDR, capture the LimeSDR, go through acquisition, and start logging GPS Sats. It worked like a champ for me and the only change I made was taking the HackRF example and just ‘hacking’ into it for the line that shows:

WAS:
;# Next line enables the internal HackRF One bias (3.3 VDC)
SignalSource.osmosdr_args=hackrf,bias=1

IS NOW:
;# Next line enables the LimeSDR
SignalSource.osmosdr_args=driver=lime,soapy=0

Please see the entire file that you just copy below and then paste into a text file and save as a .conf of your choice to run GNSS_SDR with the Lime.

Have fun with it…!

73 de Marty, KN0CK

<start text file for .conf>

[GNSS-SDR]

;######### GLOBAL OPTIONS ##################
GNSS-SDR.internal_fs_hz=2000000

;######### SIGNAL_SOURCE CONFIG ############
SignalSource.implementation=Osmosdr_Signal_Source
SignalSource.item_type=gr_complex
SignalSource.sampling_frequency=2000000
SignalSource.freq=1575420000
SignalSource.gain=40
SignalSource.rf_gain=40
SignalSource.if_gain=30
SignalSource.AGC_enabled=false
SignalSource.samples=0
SignalSource.repeat=false
;# Next line enables the LimeSDR
SignalSource.osmosdr_args=driver=lime,soapy=0
SignalSource.enable_throttle_control=false
SignalSource.dump=false
SignalSource.dump_filename=./limesignal_source.dat

;######### SIGNAL_CONDITIONER CONFIG ############
SignalConditioner.implementation=Signal_Conditioner

;######### DATA_TYPE_ADAPTER CONFIG ############
DataTypeAdapter.implementation=Pass_Through

;######### INPUT_FILTER CONFIG ############
InputFilter.implementation=Freq_Xlating_Fir_Filter
InputFilter.decimation_factor=1
InputFilter.input_item_type=gr_complex
InputFilter.output_item_type=gr_complex
InputFilter.taps_item_type=float
InputFilter.number_of_taps=5
InputFilter.number_of_bands=2
InputFilter.band1_begin=0.0
InputFilter.band1_end=0.85
InputFilter.band2_begin=0.9
InputFilter.band2_end=1.0
InputFilter.ampl1_begin=1.0
InputFilter.ampl1_end=1.0
InputFilter.ampl2_begin=0.0
InputFilter.ampl2_end=0.0
InputFilter.band1_error=1.0
InputFilter.band2_error=1.0
InputFilter.filter_type=bandpass
InputFilter.grid_density=16
InputFilter.dump=false
InputFilter.dump_filename=…/data/input_filter.dat

;######### RESAMPLER CONFIG ############
Resampler.implementation=Pass_Through

;######### CHANNELS GLOBAL CONFIG ############
Channels_1C.count=8
Channels.in_acquisition=1
Channel.signal=1C

;######### ACQUISITION GLOBAL CONFIG ############
Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition_Fine_Doppler
Acquisition_1C.item_type=gr_complex
Acquisition_1C.if=0
Acquisition_1C.sampled_ms=1
Acquisition_1C.threshold=0.015
Acquisition_1C.doppler_max=10000
Acquisition_1C.doppler_min=-10000
Acquisition_1C.doppler_step=500
Acquisition_1C.max_dwells=15
Acquisition_1C.dump=false
Acquisition_1C.dump_filename=./acq_dump.dat

;######### TRACKING GLOBAL CONFIG ############
Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking
Tracking_1C.item_type=gr_complex
Tracking_1C.if=0
Tracking_1C.pll_bw_hz=40.0;
Tracking_1C.dll_bw_hz=2.0;
Tracking_1C.order=3;
Tracking_1C.early_late_space_chips=0.5;
Tracking_1C.dump=false
Tracking_1C.dump_filename=./tracking_ch_

;######### TELEMETRY DECODER GPS CONFIG ############
TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder
TelemetryDecoder_1C.dump=false
TelemetryDecoder_1C.decimation_factor=1;

;######### OBSERVABLES CONFIG ############
Observables.implementation=GPS_L1_CA_Observables
Observables.dump=true
Observables.dump_filename=./observables.dat

;######### PVT CONFIG ############
PVT.implementation=GPS_L1_CA_PVT
PVT.flag_averaging=true
PVT.averaging_depth=5
PVT.output_rate_ms=100
PVT.display_rate_ms=500
PVT.flag_nmea_tty_port=false;
PVT.nmea_dump_devname=/dev/pts/4
PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea;
PVT.flag_rtcm_server=false
PVT.flag_rtcm_tty_port=false
PVT.rtcm_dump_devname=/dev/pts/1
PVT.dump=false
PVT.dump_filename=./PVT

;######### PVT CONFIG if using the next branch ####
;PVT.implementation=RTKLIB_PVT
;PVT.positioning_mode=Single
;PVT.output_rate_ms=100
;PVT.display_rate_ms=500
;PVT.iono_model=Broadcast
;PVT.trop_model=Saastamoinen
;PVT.flag_rtcm_server=true
;PVT.flag_rtcm_tty_port=false
;PVT.rtcm_dump_devname=/dev/pts/1
;PVT.rtcm_tcp_port=2101
;PVT.rtcm_MT1019_rate_ms=5000
;PVT.rtcm_MT1077_rate_ms=1000
;PVT.rinex_version=2

<end text file for .conf>

1 Like

@martywittrock

im-not-even-9f9nzd

I spent last night updating software, my gr-osmosdr was pre-Soapy and I had a mismatch on LimeSuite. Glad to know it should Just Work ™.

Do you want to guest post on the blog? Otherwise ill likely get around to it when the LimeSDR Mini shows up (will attribute of course).

philip

1 Like

Which RX port do you recommend to use for GPS signal reception?

@hahnpv - Philip,

Thanks, I’m quite honored by that… :slight_smile:

I just posted on this forum my entire setup (in software and .conf) how to do this. You are welcome to copy/paste the entire thing into your blog - you have my permission (and hopefully MyriadRF’s).

Try it and let me know your observations - I’m off to torch this thing off again… :slight_smile: !!

73 de Marty, KN0CK

2 Likes

@osqzss,

It appears that RX1_H is the winner…I’m finding that GNSS_SDR seems to like it…

73 de Marty, KN0CK

2 Likes

Hi,
I tried with the above steps and gnss-sdr says that it is able to acquire satellites. I was able to confirm that whatever acquisitions were reported were of actual satellites. The problem is that it is losing lock and therefore has become quite useless. If I log the data from gnss-sdr (in the conf file I have enabled the signal source dump) and use this in soft-gnss it is not even able to acquire any satellites and the constellation diagram looks bad.
I’m suspecting that the TCXO is the problem. Does anyone else have had the same experience and have somehow overcome the same?
I’m using limeSDR USB on Ubuntu 17.1 (hosted thru VMWare, host operating system is Win10) with a passive antenna.
I’m seeing the same behavior when I log data thru pothosSDR and process the file thru softgnss.
Any help is highly appreciated.
Thanks
Venkatesh

@venk,

You need an active GPS antenna with a good LNA and a bias-tee to deliver DC to it.

1 Like

@osqzss
Thanks for the suggestion… I tried that and the result is that the false locks have increased.
Now to debug further, I’m interested in knowing how the clock is behaving. Is there some method by which I can get finer details of the clock? I’m currently suspecting the hardware more than the software or configuration as I’m using the same software and configuration that is seemingly working for everyone else.

Thanks
Venkatesh

Thinking further, I was wondering whether I can log the IF samples thru LimeSuite and then post process the data? Can someone help me with either info or links as to how to configure LimeSuite for capturing GPS IF data for a 4Msps sampling with 2MHz bandwidth around 1575.42MHz?
(I know this is rather a primitive question, but I’m new to this hardware and am not getting info about how to configure the front end for GNSS operation and to log the data). I’ve tried with Pothos SDR but had faced the problem of improper spectrum. Example.ini given configures the hardware for 800MHz, LNAL configuration and I’m not too sure whether by just changing the frequency to 1575.42MHz everything will work fine!
Thanks
Venkatesh

@venk,

Try rx_sdr to capture the baseband samples:

@osqzss,
I tried using the rx_sdr utility but it is not working. The warning message is “WARNING: sync read failed. -5” and it doesn’t collect any data. I’m using the following parameters
./rx_sdr -f 1575420000 -d [“driver=lime”] -F CF32 trial.dat
Pl. let me know if I’ve not given the arguments properly.
Also, the other issue I found out is that SoapySDRUtil --info, says that there are no modules or factories installed.
Is there something completely amiss?
gnss_sdr and limeutils and pothosflow are able to detect the LimeSDR board.

Thanks
Venkatesh

Ya’ll have any recommendations for antennas? any old amazon 15$ type thing work?

@venk,

I observed the same symptom on my Ubuntu 18.04 machine with the latest LimeSDR firmware. Both the SoapySDR and rx_sdr are working just fine with Windows 10.

EDIT: This could solve the issue:

@osqzss
Do you have an .ini file to capture the Rx samples using LimeSuite? I’ll try using that and see if there is something different that needs to be done for this hardware.
Thanks for your patience.
Venkatesh

@venk,

No, I’ve never tried to use LimeSuite to record the RX samples.