mirror of
https://github.com/gnss-sdr/gnss-sdr
synced 2024-11-17 07:14:55 +00:00
Merge branch 'next' into upgrade_spirent_gss6450_source
This commit is contained in:
commit
8c9ab31799
3
.gitignore
vendored
3
.gitignore
vendored
@ -6,7 +6,10 @@ docs/latex
|
|||||||
docs/GNSS-SDR_manual.pdf
|
docs/GNSS-SDR_manual.pdf
|
||||||
src/tests/data/output.dat
|
src/tests/data/output.dat
|
||||||
thirdparty/
|
thirdparty/
|
||||||
|
.settings
|
||||||
.project
|
.project
|
||||||
.cproject
|
.cproject
|
||||||
|
.idea
|
||||||
|
cmake-build-debug/
|
||||||
/install
|
/install
|
||||||
.DS_Store
|
.DS_Store
|
||||||
|
26
AUTHORS
26
AUTHORS
@ -34,23 +34,25 @@ Contact Information
|
|||||||
List of authors
|
List of authors
|
||||||
------------------------------------------------------------------------------
|
------------------------------------------------------------------------------
|
||||||
Carles Fernandez-Prades carles.fernandez@cttc.cat Project manager
|
Carles Fernandez-Prades carles.fernandez@cttc.cat Project manager
|
||||||
Javier Arribas javier.arribas@cttc.cat Developer
|
Javier Arribas javier.arribas@cttc.es Developer
|
||||||
Luis Esteve Elfau luis@epsilon-formacion.com Developer
|
Luis Esteve Elfau luis@epsilon-formacion.com Developer
|
||||||
Pau Closas pau.closas@cttc.cat Consultant
|
Antonio Ramos antonio.ramos@cttc.es Developer
|
||||||
Carlos Aviles carlos.avilesr@googlemail.com Developer
|
Marc Majoral marc.majoral@cttc.cat Developer
|
||||||
David Pubill david.pubill@cttc.cat Developer
|
Pau Closas pau.closas@northeastern.edu Consultant
|
||||||
Mara Branzanti mara.branzanti@gmail.com Developer
|
Jordi Vila-Valls jordi.vila@cttc.cat Consultant
|
||||||
Marc Molina marc.molina.pena@gmail.com Developer
|
Carlos Aviles carlos.avilesr@googlemail.com Contributor
|
||||||
Daniel Fehr daniel.co@bluewin.ch Developer
|
David Pubill david.pubill@cttc.cat Contributor
|
||||||
Marc Sales marcsales92@gmail.com Developer
|
Mara Branzanti mara.branzanti@gmail.com Contributor
|
||||||
Damian Miralles dmiralles2009@gmail.com Developer
|
Marc Molina marc.molina.pena@gmail.com Contributor
|
||||||
Andres Cecilia Luque a.cecilia.luque@gmail.com Developer
|
Daniel Fehr daniel.co@bluewin.ch Contributor
|
||||||
|
Marc Sales marcsales92@gmail.com Contributor
|
||||||
|
Damian Miralles dmiralles2009@gmail.com Contributor
|
||||||
|
Andres Cecilia Luque a.cecilia.luque@gmail.com Contributor
|
||||||
Leonardo Tonetto tonetto.dev@gmail.com Contributor
|
Leonardo Tonetto tonetto.dev@gmail.com Contributor
|
||||||
Anthony Arnold anthony.arnold@uqconnect.edu.au Contributor
|
Anthony Arnold anthony.arnold@uqconnect.edu.au Contributor
|
||||||
Fran Fabra fabra@ice.csic.es Contributor
|
Fran Fabra fabra@ice.csic.es Contributor
|
||||||
Cillian O'Driscoll cillian.odriscoll@gmail.com Contributor
|
Cillian O'Driscoll cillian.odriscoll@gmail.com Contributor
|
||||||
Ignacio Paniego ignacio.paniego@gmail.com Web design
|
Gabriel Araujo gabriel.araujo.5000@gmail.com Contributor
|
||||||
Eva Puchol eva.puchol@gmail.com Web developer
|
|
||||||
Carlos Paniego carpanie@hotmail.com Artwork
|
Carlos Paniego carpanie@hotmail.com Artwork
|
||||||
|
|
||||||
|
|
||||||
|
28
README.md
28
README.md
@ -4,7 +4,21 @@
|
|||||||
|
|
||||||
**Welcome to GNSS-SDR!**
|
**Welcome to GNSS-SDR!**
|
||||||
|
|
||||||
Visit [http://gnss-sdr.org](http://gnss-sdr.org "GNSS-SDR website") for more information about this open source GNSS software defined receiver.
|
This program is a software-defined receiver which is able to process (that is, to perform detection, synchronization, demodulation and decoding of the navigation message, computation of observables and, finally, computation of position fixes) the following Global Navigation Satellite System's signals:
|
||||||
|
|
||||||
|
In the L1 band (centered at 1575.42 MHz):
|
||||||
|
- 🛰 GPS L1 C/A :white_check_mark:
|
||||||
|
- 🛰 Galileo E1b/c :white_check_mark:
|
||||||
|
- 🛰 GLONASS L1 C/A :white_check_mark:
|
||||||
|
|
||||||
|
In the L2 band (centered at 1227.60 MHz):
|
||||||
|
- 🛰 GPS L2C :white_check_mark:
|
||||||
|
|
||||||
|
In the L5 band (centered at 1176.45 MHz):
|
||||||
|
- 🛰 GPS L5 :white_check_mark:
|
||||||
|
- 🛰 Galileo E5a :white_check_mark:
|
||||||
|
|
||||||
|
GNSS-SDR provides interfaces for a wide range of radio frequency front-ends, generates processing outputs in standard formats, allows for the full inspection of the whole signal processing chain, and offers a framework for the development of new features. Please visit [http://gnss-sdr.org](http://gnss-sdr.org "GNSS-SDR website") for more information about this open source software-defined GNSS receiver.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -593,6 +607,7 @@ The CMake script will create Makefiles that download, build and link Armadillo,
|
|||||||
|
|
||||||
Other builds
|
Other builds
|
||||||
---------
|
---------
|
||||||
|
* **Docker container**: A technology providing operating-system-level virtualization to build, ship, and run distributed applications, whether on laptops, data center VMs, or the cloud. Visit [https://github.com/carlesfernandez/docker-gnsssdr](https://github.com/carlesfernandez/docker-gnsssdr) or [https://github.com/carlesfernandez/docker-pybombs-gnsssdr](https://github.com/carlesfernandez/docker-pybombs-gnsssdr) for instructions.
|
||||||
|
|
||||||
* **Snap packages**: [Snaps](http://snapcraft.io) are universal Linux packages aimed to work on any distribution or device, from IoT devices to servers, desktops to mobile devices. Visit [https://github.com/carlesfernandez/snapcraft-sandbox](https://github.com/carlesfernandez/snapcraft-sandbox) for instructions.
|
* **Snap packages**: [Snaps](http://snapcraft.io) are universal Linux packages aimed to work on any distribution or device, from IoT devices to servers, desktops to mobile devices. Visit [https://github.com/carlesfernandez/snapcraft-sandbox](https://github.com/carlesfernandez/snapcraft-sandbox) for instructions.
|
||||||
|
|
||||||
@ -767,14 +782,13 @@ The user can configure the receiver for reading from a file, setting in the conf
|
|||||||
SignalSource.implementation=File_Signal_Source
|
SignalSource.implementation=File_Signal_Source
|
||||||
SignalSource.filename=/home/user/gnss-sdr/data/my_capture.dat
|
SignalSource.filename=/home/user/gnss-sdr/data/my_capture.dat
|
||||||
SignalSource.item_type=gr_complex
|
SignalSource.item_type=gr_complex
|
||||||
SignalSource.sampling_frequency=4000000 ; Sampling frequency in [Hz]
|
SignalSource.sampling_frequency=4000000 ; Sampling frequency in samples per second (Sps)
|
||||||
SignalSource.freq=1575420000 ; RF front-end center frequency in [Hz]
|
|
||||||
~~~~~~
|
~~~~~~
|
||||||
|
|
||||||
Type ```gr_complex``` refers to a GNU Radio typedef equivalent to ```std::complex<float>```. In order to save some storage space, you might wanted to store your signal in a more efficient format such as an I/Q interleaved ```short`` integer sample stream. In that case, change the corresponding line to:
|
Type ```gr_complex``` refers to a GNU Radio typedef equivalent to ```std::complex<float>```. In order to save some storage space, you might wanted to store your signal in a more efficient format such as an I/Q interleaved ```short`` integer sample stream. In that case, change the corresponding line to:
|
||||||
|
|
||||||
~~~~~~
|
~~~~~~
|
||||||
SignalSource.item_type=short
|
SignalSource.item_type=ishort
|
||||||
~~~~~~
|
~~~~~~
|
||||||
|
|
||||||
In this latter case, you will need to convert the interleaved I/Q samples to a complex stream via Data Type Adapter block (see below).
|
In this latter case, you will need to convert the interleaved I/Q samples to a complex stream via Data Type Adapter block (see below).
|
||||||
@ -874,7 +888,7 @@ SignalSource.freq=1575420000
|
|||||||
SignalSource.rf_gain=40
|
SignalSource.rf_gain=40
|
||||||
SignalSource.if_gain=30
|
SignalSource.if_gain=30
|
||||||
SignalSource.enable_throttle_control=false
|
SignalSource.enable_throttle_control=false
|
||||||
SignalSource.osmosdr_args=rtl_tcp,offset_tune=1
|
SignalSource.osmosdr_args=hackrf,bias=1
|
||||||
~~~~~~
|
~~~~~~
|
||||||
|
|
||||||
In case of using a Zarlink's RTL2832 based DVB-T receiver, you can even use the ```rtl_tcp``` I/Q server in order to use the USB dongle remotely. In a terminal, type:
|
In case of using a Zarlink's RTL2832 based DVB-T receiver, you can even use the ```rtl_tcp``` I/Q server in order to use the USB dongle remotely. In a terminal, type:
|
||||||
@ -1046,12 +1060,14 @@ Each channel must be assigned to a GNSS signal, according to the following ident
|
|||||||
| **Signal** | **Identifier** |
|
| **Signal** | **Identifier** |
|
||||||
|:------------------|:---------------:|
|
|:------------------|:---------------:|
|
||||||
| GPS L1 C/A | 1C |
|
| GPS L1 C/A | 1C |
|
||||||
|
| Galileo E1b/c | 1B |
|
||||||
|
| Glonass L1 C/A | 1G |
|
||||||
| GPS L2 L2C(M) | 2S |
|
| GPS L2 L2C(M) | 2S |
|
||||||
| GPS L5 | L5 |
|
| GPS L5 | L5 |
|
||||||
| Galileo E1b/c | 1B |
|
|
||||||
| Galileo E5a | 5X |
|
| Galileo E5a | 5X |
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Example: Eight GPS L1 C/A channels.
|
Example: Eight GPS L1 C/A channels.
|
||||||
~~~~~~
|
~~~~~~
|
||||||
;######### CHANNELS GLOBAL CONFIG ############
|
;######### CHANNELS GLOBAL CONFIG ############
|
||||||
|
@ -42,16 +42,12 @@ GNSS-SDR.SUPL_CI=40184
|
|||||||
|
|
||||||
;######### SIGNAL_SOURCE CONFIG ############
|
;######### SIGNAL_SOURCE CONFIG ############
|
||||||
SignalSource.implementation=Osmosdr_Signal_Source
|
SignalSource.implementation=Osmosdr_Signal_Source
|
||||||
|
|
||||||
;#freq: RF front-end center frequency in [Hz]
|
;#freq: RF front-end center frequency in [Hz]
|
||||||
SignalSource.freq=1575420000
|
SignalSource.freq=1575420000
|
||||||
|
|
||||||
;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
|
;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
|
||||||
SignalSource.item_type=gr_complex
|
SignalSource.item_type=gr_complex
|
||||||
|
;#sampling_frequency: Original Signal sampling frequency in samples per second
|
||||||
;#sampling_frequency: Original Signal sampling frequency in [Hz]
|
|
||||||
SignalSource.sampling_frequency=2000000
|
SignalSource.sampling_frequency=2000000
|
||||||
|
|
||||||
;#gain: Front-end Gain in [dB]
|
;#gain: Front-end Gain in [dB]
|
||||||
SignalSource.gain=40
|
SignalSource.gain=40
|
||||||
SignalSource.rf_gain=40
|
SignalSource.rf_gain=40
|
||||||
@ -91,7 +87,7 @@ SignalSource.dump_filename=../data/signal_source.dat
|
|||||||
SignalConditioner.implementation=Pass_Through
|
SignalConditioner.implementation=Pass_Through
|
||||||
|
|
||||||
;######### DATA_TYPE_ADAPTER CONFIG ############
|
;######### DATA_TYPE_ADAPTER CONFIG ############
|
||||||
;## Changes the type of input data. Please disable it in this version.
|
;## Changes the type of input data.
|
||||||
;#implementation: Use [Ishort_To_Complex] or [Pass_Through]
|
;#implementation: Use [Ishort_To_Complex] or [Pass_Through]
|
||||||
DataTypeAdapter.implementation=Pass_Through
|
DataTypeAdapter.implementation=Pass_Through
|
||||||
;#dump: Dump the filtered data to a file.
|
;#dump: Dump the filtered data to a file.
|
||||||
@ -109,20 +105,15 @@ DataTypeAdapter.dump_filename=../data/data_type_adapter.dat
|
|||||||
|
|
||||||
InputFilter.implementation=Freq_Xlating_Fir_Filter
|
InputFilter.implementation=Freq_Xlating_Fir_Filter
|
||||||
|
|
||||||
;#dump: Dump the filtered data to a file.
|
|
||||||
InputFilter.dump=false
|
|
||||||
|
|
||||||
;#dump_filename: Log path and filename.
|
|
||||||
InputFilter.dump_filename=../data/input_filter.dat
|
|
||||||
|
|
||||||
;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation.
|
;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation.
|
||||||
;#These options are based on parameters of gnuradio's function: gr_remez.
|
;#These options are based on parameters of gnuradio's function: gr_remez.
|
||||||
;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges, the desired reponse on those bands, and the weight given to the error in those bands.
|
;#This function calculates the optimal (in the Chebyshev/minimax sense) FIR filter impulse response given a set of band edges,
|
||||||
|
;#the desired response on those bands, and the weight given to the error in those bands.
|
||||||
|
|
||||||
;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version.
|
;#input_item_type: Type and resolution for input signal samples.
|
||||||
InputFilter.input_item_type=gr_complex
|
InputFilter.input_item_type=gr_complex
|
||||||
|
|
||||||
;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version.
|
;#outut_item_type: Type and resolution for output filtered signal samples.
|
||||||
InputFilter.output_item_type=gr_complex
|
InputFilter.output_item_type=gr_complex
|
||||||
|
|
||||||
;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version.
|
;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version.
|
||||||
@ -172,6 +163,12 @@ InputFilter.IF=0
|
|||||||
|
|
||||||
InputFilter.decimation_factor=1
|
InputFilter.decimation_factor=1
|
||||||
|
|
||||||
|
;#dump: Dump the filtered data to a file.
|
||||||
|
InputFilter.dump=false
|
||||||
|
|
||||||
|
;#dump_filename: Log path and filename.
|
||||||
|
InputFilter.dump_filename=../data/input_filter.dat
|
||||||
|
|
||||||
;######### RESAMPLER CONFIG ############
|
;######### RESAMPLER CONFIG ############
|
||||||
;## Resamples the input data.
|
;## Resamples the input data.
|
||||||
;#implementation: Use [Pass_Through] or [Direct_Resampler]
|
;#implementation: Use [Pass_Through] or [Direct_Resampler]
|
||||||
@ -179,11 +176,7 @@ InputFilter.decimation_factor=1
|
|||||||
Resampler.implementation=Pass_Through
|
Resampler.implementation=Pass_Through
|
||||||
|
|
||||||
;######### ACQUISITION GLOBAL CONFIG ############
|
;######### ACQUISITION GLOBAL CONFIG ############
|
||||||
|
Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition_Fine_Doppler
|
||||||
;#dump: Enable or disable the acquisition internal data file logging [true] or [false]
|
|
||||||
Acquisition.dump=false
|
|
||||||
;#filename: Log path and filename
|
|
||||||
Acquisition.dump_filename=./acq_dump.dat
|
|
||||||
;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
|
;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
|
||||||
Acquisition.item_type=gr_complex
|
Acquisition.item_type=gr_complex
|
||||||
;#if: Signal intermediate frequency in [Hz]
|
;#if: Signal intermediate frequency in [Hz]
|
||||||
@ -200,4 +193,8 @@ Acquisition.doppler_min=-100000
|
|||||||
Acquisition.doppler_step=500
|
Acquisition.doppler_step=500
|
||||||
;#maximum dwells
|
;#maximum dwells
|
||||||
Acquisition.max_dwells=15
|
Acquisition.max_dwells=15
|
||||||
|
;#dump: Enable or disable the acquisition internal data file logging [true] or [false]
|
||||||
|
Acquisition.dump=false
|
||||||
|
;#filename: Log path and filename
|
||||||
|
Acquisition.dump_filename=./acq_dump.dat
|
||||||
|
|
||||||
|
@ -25,32 +25,18 @@ GNSS-SDR.SUPL_LAC=0x59e2
|
|||||||
GNSS-SDR.SUPL_CI=0x31b0
|
GNSS-SDR.SUPL_CI=0x31b0
|
||||||
|
|
||||||
;######### SIGNAL_SOURCE CONFIG ############
|
;######### SIGNAL_SOURCE CONFIG ############
|
||||||
;#implementation: Use [File_Signal_Source] or [UHD_Signal_Source] or [GN3S_Signal_Source] (experimental)
|
;#implementation
|
||||||
SignalSource.implementation=File_Signal_Source
|
SignalSource.implementation=File_Signal_Source
|
||||||
|
|
||||||
;#filename: path to file with the captured GNSS signal samples to be processed
|
;#filename: path to file with the captured GNSS signal samples to be processed
|
||||||
SignalSource.filename=/datalogger/signals/CTTC/2013_04_04_GNSS_SIGNAL_at_CTTC_SPAIN/2013_04_04_GNSS_SIGNAL_at_CTTC_SPAIN.dat ; <- PUT YOUR FILE HERE
|
SignalSource.filename=/datalogger/signals/CTTC/2013_04_04_GNSS_SIGNAL_at_CTTC_SPAIN/2013_04_04_GNSS_SIGNAL_at_CTTC_SPAIN.dat ; <- PUT YOUR FILE HERE
|
||||||
|
|
||||||
;#item_type: Type and resolution for each of the signal samples.
|
;#item_type: Type and resolution for each of the signal samples.
|
||||||
SignalSource.item_type=ishort
|
SignalSource.item_type=ishort
|
||||||
|
;#sampling_frequency: Original Signal sampling frequency in samples per second
|
||||||
;#sampling_frequency: Original Signal sampling frequency in [Hz]
|
|
||||||
SignalSource.sampling_frequency=4000000
|
SignalSource.sampling_frequency=4000000
|
||||||
|
|
||||||
;#freq: RF front-end center frequency in [Hz]
|
|
||||||
SignalSource.freq=1575420000
|
|
||||||
|
|
||||||
;#samples: Number of samples to be processed. Notice that 0 indicates the entire file.
|
;#samples: Number of samples to be processed. Notice that 0 indicates the entire file.
|
||||||
SignalSource.samples=0
|
SignalSource.samples=0
|
||||||
|
|
||||||
;#repeat: Repeat the processing file.
|
;#repeat: Repeat the processing file.
|
||||||
SignalSource.repeat=false
|
SignalSource.repeat=false
|
||||||
|
|
||||||
;#dump: Dump the Signal source data to a file. Disable this option in this version
|
|
||||||
SignalSource.dump=false
|
|
||||||
|
|
||||||
SignalSource.dump_filename=../data/signal_source.dat
|
|
||||||
|
|
||||||
;#enable_throttle_control: Enabling this option tells the signal source to keep the delay between samples in post processing.
|
;#enable_throttle_control: Enabling this option tells the signal source to keep the delay between samples in post processing.
|
||||||
; it helps to not overload the CPU, but the processing time will be longer.
|
; it helps to not overload the CPU, but the processing time will be longer.
|
||||||
SignalSource.enable_throttle_control=false
|
SignalSource.enable_throttle_control=false
|
||||||
@ -82,15 +68,10 @@ DataTypeAdapter.implementation=Ishort_To_Complex
|
|||||||
;InputFilter.implementation=Freq_Xlating_Fir_Filter
|
;InputFilter.implementation=Freq_Xlating_Fir_Filter
|
||||||
InputFilter.implementation=Pass_Through
|
InputFilter.implementation=Pass_Through
|
||||||
|
|
||||||
;#dump: Dump the filtered data to a file.
|
|
||||||
InputFilter.dump=false
|
|
||||||
|
|
||||||
;#dump_filename: Log path and filename.
|
|
||||||
InputFilter.dump_filename=../data/input_filter.dat
|
|
||||||
|
|
||||||
;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation.
|
;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation.
|
||||||
;#These options are based on parameters of GNU Radio's function: gr_remez.
|
;#These options are based on parameters of GNU Radio's function: gr_remez.
|
||||||
;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter impulse response given a set of band edges, the desired response on those bands, and the weight given to the error in those bands.
|
;#This function calculates the optimal (in the Chebyshev/minimax sense) FIR filter impulse response given a set of band edges,
|
||||||
|
;#the desired response on those bands, and the weight given to the error in those bands.
|
||||||
|
|
||||||
;#input_item_type: Type and resolution for input signal samples.
|
;#input_item_type: Type and resolution for input signal samples.
|
||||||
InputFilter.input_item_type=gr_complex
|
InputFilter.input_item_type=gr_complex
|
||||||
@ -142,31 +123,31 @@ InputFilter.grid_density=16
|
|||||||
InputFilter.sampling_frequency=4000000
|
InputFilter.sampling_frequency=4000000
|
||||||
InputFilter.IF=0
|
InputFilter.IF=0
|
||||||
|
|
||||||
|
;#dump: Dump the filtered data to a file.
|
||||||
|
InputFilter.dump=false
|
||||||
|
|
||||||
|
;#dump_filename: Log path and filename.
|
||||||
|
InputFilter.dump_filename=../data/input_filter.dat
|
||||||
|
|
||||||
|
|
||||||
;######### RESAMPLER CONFIG ############
|
;######### RESAMPLER CONFIG ############
|
||||||
;## Resamples the input data.
|
;## Resamples the input data.
|
||||||
|
|
||||||
;#implementation: Use [Pass_Through] or [Direct_Resampler]
|
;#implementation: Use [Pass_Through] or [Direct_Resampler]
|
||||||
;#[Pass_Through] disables this block
|
;#[Pass_Through] disables this block
|
||||||
;#[Direct_Resampler] enables a resampler that implements a nearest neighborhood interpolation
|
;#[Direct_Resampler] enables a resampler that implements a nearest neighborhood interpolation
|
||||||
;Resampler.implementation=Direct_Resampler
|
;Resampler.implementation=Direct_Resampler
|
||||||
Resampler.implementation=Pass_Through
|
Resampler.implementation=Pass_Through
|
||||||
|
;#item_type: Type and resolution for each of the signal samples.
|
||||||
|
Resampler.item_type=gr_complex
|
||||||
|
;#sample_freq_in: the sample frequency of the input signal
|
||||||
|
Resampler.sample_freq_in=4000000
|
||||||
|
;#sample_freq_out: the desired sample frequency of the output signal
|
||||||
|
Resampler.sample_freq_out=2000000
|
||||||
;#dump: Dump the resampled data to a file.
|
;#dump: Dump the resampled data to a file.
|
||||||
Resampler.dump=false
|
Resampler.dump=false
|
||||||
;#dump_filename: Log path and filename.
|
;#dump_filename: Log path and filename.
|
||||||
Resampler.dump_filename=../data/resampler.dat
|
Resampler.dump_filename=../data/resampler.dat
|
||||||
|
|
||||||
;#item_type: Type and resolution for each of the signal samples.
|
|
||||||
Resampler.item_type=gr_complex
|
|
||||||
|
|
||||||
;#sample_freq_in: the sample frequency of the input signal
|
|
||||||
Resampler.sample_freq_in=4000000
|
|
||||||
|
|
||||||
;#sample_freq_out: the desired sample frequency of the output signal
|
|
||||||
Resampler.sample_freq_out=2000000
|
|
||||||
|
|
||||||
|
|
||||||
;######### CHANNELS GLOBAL CONFIG ############
|
;######### CHANNELS GLOBAL CONFIG ############
|
||||||
;#count: Number of available GPS L1 C/A satellite channels.
|
;#count: Number of available GPS L1 C/A satellite channels.
|
||||||
@ -194,19 +175,13 @@ Channel.signal=1C
|
|||||||
;Channel1.satellite=18
|
;Channel1.satellite=18
|
||||||
|
|
||||||
;######### ACQUISITION GLOBAL CONFIG ############
|
;######### ACQUISITION GLOBAL CONFIG ############
|
||||||
|
Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition_Fine_Doppler
|
||||||
;#dump: Enable or disable the acquisition internal data file logging [true] or [false]
|
|
||||||
Acquisition_1C.dump=false
|
|
||||||
;#filename: Log path and filename
|
|
||||||
Acquisition_1C.dump_filename=./acq_dump.dat
|
|
||||||
;#item_type: Type and resolution for each of the signal samples.
|
;#item_type: Type and resolution for each of the signal samples.
|
||||||
Acquisition_1C.item_type=gr_complex
|
Acquisition_1C.item_type=gr_complex
|
||||||
;#if: Signal intermediate frequency in [Hz]
|
;#if: Signal intermediate frequency in [Hz]
|
||||||
Acquisition_1C.if=0
|
Acquisition_1C.if=0
|
||||||
;#sampled_ms: Signal block duration for the acquisition signal detection [ms]
|
;#sampled_ms: Signal block duration for the acquisition signal detection [ms]
|
||||||
Acquisition_1C.sampled_ms=1
|
Acquisition_1C.sampled_ms=1
|
||||||
;#implementation: Acquisition algorithm selection for this channel
|
|
||||||
Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition_Fine_Doppler
|
|
||||||
;#threshold: Acquisition threshold
|
;#threshold: Acquisition threshold
|
||||||
Acquisition_1C.threshold=0.005
|
Acquisition_1C.threshold=0.005
|
||||||
;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
|
;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
|
||||||
@ -219,46 +194,41 @@ Acquisition_1C.doppler_min=-10000
|
|||||||
Acquisition_1C.doppler_step=500
|
Acquisition_1C.doppler_step=500
|
||||||
;#maximum dwells
|
;#maximum dwells
|
||||||
Acquisition_1C.max_dwells=5
|
Acquisition_1C.max_dwells=5
|
||||||
|
;#dump: Enable or disable the acquisition internal data file logging [true] or [false]
|
||||||
|
Acquisition_1C.dump=false
|
||||||
|
;#filename: Log path and filename
|
||||||
|
Acquisition_1C.dump_filename=./acq_dump.dat
|
||||||
|
|
||||||
|
|
||||||
;######### TRACKING GLOBAL CONFIG ############
|
;######### TRACKING GLOBAL CONFIG ############
|
||||||
|
|
||||||
;#implementation: Selected tracking algorithm:
|
|
||||||
Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking
|
Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking
|
||||||
;#item_type: Type and resolution for each of the signal samples.
|
;#item_type: Type and resolution for each of the signal samples.
|
||||||
Tracking_1C.item_type=gr_complex
|
Tracking_1C.item_type=gr_complex
|
||||||
|
|
||||||
;#sampling_frequency: Signal Intermediate Frequency in [Hz]
|
;#sampling_frequency: Signal Intermediate Frequency in [Hz]
|
||||||
Tracking_1C.if=0
|
Tracking_1C.if=0
|
||||||
|
;#pll_bw_hz: PLL loop filter bandwidth [Hz]
|
||||||
|
Tracking_1C.pll_bw_hz=45.0;
|
||||||
|
;#dll_bw_hz: DLL loop filter bandwidth [Hz]
|
||||||
|
Tracking_1C.dll_bw_hz=3.0;
|
||||||
|
;#order: PLL/DLL loop filter order [2] or [3]
|
||||||
|
Tracking_1C.order=3;
|
||||||
;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false]
|
;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false]
|
||||||
Tracking_1C.dump=false
|
Tracking_1C.dump=false
|
||||||
|
|
||||||
;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number.
|
;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number.
|
||||||
Tracking_1C.dump_filename=../data/epl_tracking_ch_
|
Tracking_1C.dump_filename=../data/epl_tracking_ch_
|
||||||
|
|
||||||
;#pll_bw_hz: PLL loop filter bandwidth [Hz]
|
|
||||||
Tracking_1C.pll_bw_hz=45.0;
|
|
||||||
|
|
||||||
;#dll_bw_hz: DLL loop filter bandwidth [Hz]
|
|
||||||
Tracking_1C.dll_bw_hz=3.0;
|
|
||||||
|
|
||||||
;#order: PLL/DLL loop filter order [2] or [3]
|
|
||||||
Tracking_1C.order=3;
|
|
||||||
|
|
||||||
;######### TELEMETRY DECODER GPS CONFIG ############
|
;######### TELEMETRY DECODER GPS CONFIG ############
|
||||||
;#implementation: Use [GPS_L1_CA_Telemetry_Decoder] for GPS L1 C/A
|
;#implementation: Use [GPS_L1_CA_Telemetry_Decoder] for GPS L1 C/A
|
||||||
TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder
|
TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder
|
||||||
TelemetryDecoder_1C.dump=false
|
TelemetryDecoder_1C.dump=false
|
||||||
;#decimation factor
|
|
||||||
TelemetryDecoder_1C.decimation_factor=1;
|
|
||||||
|
|
||||||
;######### OBSERVABLES CONFIG ############
|
;######### OBSERVABLES CONFIG ############
|
||||||
;#implementation:
|
;#implementation:
|
||||||
Observables.implementation=Hybrid_Observables
|
Observables.implementation=Hybrid_Observables
|
||||||
|
|
||||||
;#dump: Enable or disable the Observables internal binary data file logging [true] or [false]
|
;#dump: Enable or disable the Observables internal binary data file logging [true] or [false]
|
||||||
Observables.dump=false
|
Observables.dump=false
|
||||||
|
|
||||||
;#dump_filename: Log path and filename.
|
;#dump_filename: Log path and filename.
|
||||||
Observables.dump_filename=./observables.dat
|
Observables.dump_filename=./observables.dat
|
||||||
|
|
||||||
@ -266,42 +236,30 @@ Observables.dump_filename=./observables.dat
|
|||||||
;######### PVT CONFIG ############
|
;######### PVT CONFIG ############
|
||||||
;#implementation: Position Velocity and Time (PVT) implementation:
|
;#implementation: Position Velocity and Time (PVT) implementation:
|
||||||
PVT.implementation=RTKLIB_PVT
|
PVT.implementation=RTKLIB_PVT
|
||||||
|
|
||||||
PVT.positioning_mode=PPP_Static ; options: Single, Static, Kinematic, PPP_Static, PPP_Kinematic
|
PVT.positioning_mode=PPP_Static ; options: Single, Static, Kinematic, PPP_Static, PPP_Kinematic
|
||||||
PVT.iono_model=Broadcast ; options: OFF, Broadcast, SBAS, Iono-Free-LC, Estimate_STEC, IONEX
|
PVT.iono_model=Broadcast ; options: OFF, Broadcast, SBAS, Iono-Free-LC, Estimate_STEC, IONEX
|
||||||
PVT.trop_model=Saastamoinen ; options: OFF, Saastamoinen, SBAS, Estimate_ZTD, Estimate_ZTD_Grad
|
PVT.trop_model=Saastamoinen ; options: OFF, Saastamoinen, SBAS, Estimate_ZTD, Estimate_ZTD_Grad
|
||||||
PVT.AR_GPS=PPP-AR ; options: OFF, Continuous, Instantaneous, Fix-and-Hold, PPP-AR
|
PVT.AR_GPS=PPP-AR ; options: OFF, Continuous, Instantaneous, Fix-and-Hold, PPP-AR
|
||||||
|
|
||||||
;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms]
|
;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms]
|
||||||
PVT.output_rate_ms=10
|
PVT.output_rate_ms=10
|
||||||
|
|
||||||
;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms <= display_rate_ms.
|
;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms <= display_rate_ms.
|
||||||
PVT.display_rate_ms=500
|
PVT.display_rate_ms=500
|
||||||
|
|
||||||
PVT.positioning_mode=PPP_Static
|
PVT.positioning_mode=PPP_Static
|
||||||
|
|
||||||
;# KML, GeoJSON, NMEA and RTCM output configuration
|
;# KML, GeoJSON, NMEA and RTCM output configuration
|
||||||
|
;#nmea_dump_filename: NMEA log path and filename
|
||||||
|
PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea
|
||||||
|
;#flag_nmea_tty_port: Enables or disables the NMEA log to a serial TTY port (Can be used with real hardware or virtual one)
|
||||||
|
PVT.flag_nmea_tty_port=true
|
||||||
|
;#nmea_dump_devname: serial device descriptor for NMEA logging
|
||||||
|
PVT.nmea_dump_devname=/dev/pts/4
|
||||||
|
;#flag_rtcm_server: Enables or disables a TCP/IP server transmitting RTCM 3.2 messages (accepts multiple clients, port 2101 by default)
|
||||||
|
PVT.flag_rtcm_server=true
|
||||||
|
;#flag_rtcm_tty_port: Enables or disables the RTCM log to a serial TTY port (Can be used with real hardware or virtual one)
|
||||||
|
PVT.flag_rtcm_tty_port=false
|
||||||
|
;#rtcm_dump_devname: serial device descriptor for RTCM logging
|
||||||
|
PVT.rtcm_dump_devname=/dev/pts/1
|
||||||
|
;#dump: Enable or disable the PVT internal binary data file logging [true] or [false]
|
||||||
|
PVT.dump=false
|
||||||
;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump, ".kml" and ".geojson" to GIS-friendly formats.
|
;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump, ".kml" and ".geojson" to GIS-friendly formats.
|
||||||
PVT.dump_filename=./PVT
|
PVT.dump_filename=./PVT
|
||||||
|
|
||||||
;#nmea_dump_filename: NMEA log path and filename
|
|
||||||
PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea
|
|
||||||
|
|
||||||
;#flag_nmea_tty_port: Enables or disables the NMEA log to a serial TTY port (Can be used with real hardware or virtual one)
|
|
||||||
PVT.flag_nmea_tty_port=true
|
|
||||||
|
|
||||||
;#nmea_dump_devname: serial device descriptor for NMEA logging
|
|
||||||
PVT.nmea_dump_devname=/dev/pts/4
|
|
||||||
|
|
||||||
;#flag_rtcm_server: Enables or disables a TCP/IP server transmitting RTCM 3.2 messages (accepts multiple clients, port 2101 by default)
|
|
||||||
PVT.flag_rtcm_server=true
|
|
||||||
|
|
||||||
;#flag_rtcm_tty_port: Enables or disables the RTCM log to a serial TTY port (Can be used with real hardware or virtual one)
|
|
||||||
PVT.flag_rtcm_tty_port=false
|
|
||||||
|
|
||||||
;#rtcm_dump_devname: serial device descriptor for RTCM logging
|
|
||||||
PVT.rtcm_dump_devname=/dev/pts/1
|
|
||||||
|
|
||||||
;#dump: Enable or disable the PVT internal binary data file logging [true] or [false]
|
|
||||||
PVT.dump=false
|
|
||||||
|
141
conf/gnss-sdr_GLONASS_L1_CA_GPS_L1_CA_ibyte.conf
Normal file
141
conf/gnss-sdr_GLONASS_L1_CA_GPS_L1_CA_ibyte.conf
Normal file
@ -0,0 +1,141 @@
|
|||||||
|
[GNSS-SDR]
|
||||||
|
|
||||||
|
;######### GLOBAL OPTIONS ##################
|
||||||
|
GNSS-SDR.internal_fs_sps=6625000
|
||||||
|
Receiver.sources_count=2
|
||||||
|
|
||||||
|
;######### SIGNAL_SOURCE CONFIG ############
|
||||||
|
SignalSource0.implementation=File_Signal_Source
|
||||||
|
SignalSource0.filename=/archive/NT1065_L1_20160923_fs6625e6_if60e3_schar.bin ; <- PUT YOUR FILE HERE
|
||||||
|
SignalSource0.item_type=ibyte
|
||||||
|
SignalSource0.sampling_frequency=6625000
|
||||||
|
SignalSource0.samples=0
|
||||||
|
SignalSource0.dump=false;
|
||||||
|
SignalSource0.dump_filename=/archive/signal_glonass.bin
|
||||||
|
|
||||||
|
SignalSource1.implementation=File_Signal_Source
|
||||||
|
SignalSource1.filename=/archive/NT1065_GLONASS_L1_20160923_fs6625e6_if0e3_schar.bin ; <- PUT YOUR FILE HERE
|
||||||
|
SignalSource1.item_type=ibyte
|
||||||
|
SignalSource1.sampling_frequency=6625000
|
||||||
|
SignalSource1.samples=0
|
||||||
|
SignalSource1.dump=false;
|
||||||
|
SignalSource1.dump_filename=/archive/signal_glonass.bin
|
||||||
|
|
||||||
|
;######### SIGNAL_CONDITIONER CONFIG ############
|
||||||
|
SignalConditioner0.implementation=Signal_Conditioner
|
||||||
|
DataTypeAdapter0.implementation=Ibyte_To_Complex
|
||||||
|
InputFilter0.implementation=Freq_Xlating_Fir_Filter
|
||||||
|
InputFilter0.item_type=gr_complex
|
||||||
|
InputFilter0.output_item_type=gr_complex
|
||||||
|
InputFilter0.taps_item_type=float
|
||||||
|
InputFilter0.number_of_taps=5
|
||||||
|
InputFilter0.number_of_bands=2
|
||||||
|
InputFilter0.band1_begin=0.0
|
||||||
|
InputFilter0.band1_end=0.70
|
||||||
|
InputFilter0.band2_begin=0.80
|
||||||
|
InputFilter0.band2_end=1.0
|
||||||
|
InputFilter0.ampl1_begin=1.0
|
||||||
|
InputFilter0.ampl1_end=1.0
|
||||||
|
InputFilter0.ampl2_begin=0.0
|
||||||
|
InputFilter0.ampl2_end=0.0
|
||||||
|
InputFilter0.band1_error=1.0
|
||||||
|
InputFilter0.band2_error=1.0
|
||||||
|
InputFilter0.filter_type=bandpass
|
||||||
|
InputFilter0.grid_density=16
|
||||||
|
InputFilter0.sampling_frequency=6625000
|
||||||
|
InputFilter0.IF=60000
|
||||||
|
Resampler0.implementation=Direct_Resampler
|
||||||
|
Resampler0.sample_freq_in=6625000
|
||||||
|
Resampler0.sample_freq_out=6625000
|
||||||
|
Resampler0.item_type=gr_complex
|
||||||
|
|
||||||
|
SignalConditioner1.implementation=Signal_Conditioner
|
||||||
|
DataTypeAdapter1.implementation=Ibyte_To_Complex
|
||||||
|
InputFilter1.implementation=Pass_Through
|
||||||
|
InputFilter1.item_type=gr_complex
|
||||||
|
Resampler1.implementation=Pass_Through
|
||||||
|
Resampler1.item_type=gr_complex
|
||||||
|
|
||||||
|
;######### CHANNELS GLOBAL CONFIG ############
|
||||||
|
Channels.in_acquisition=1
|
||||||
|
Channels_1G.count=5
|
||||||
|
Channels_1C.count=5
|
||||||
|
|
||||||
|
;# Defining GLONASS satellites
|
||||||
|
Channel0.RF_channel_ID=0
|
||||||
|
Channel1.RF_channel_ID=0
|
||||||
|
Channel2.RF_channel_ID=0
|
||||||
|
Channel3.RF_channel_ID=0
|
||||||
|
Channel4.RF_channel_ID=0
|
||||||
|
Channel5.RF_channel_ID=1
|
||||||
|
Channel6.RF_channel_ID=1
|
||||||
|
Channel7.RF_channel_ID=1
|
||||||
|
Channel8.RF_channel_ID=1
|
||||||
|
Channel9.RF_channel_ID=1
|
||||||
|
|
||||||
|
|
||||||
|
;######### ACQUISITION GLOBAL CONFIG ############
|
||||||
|
Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition
|
||||||
|
Acquisition_1C.item_type=gr_complex
|
||||||
|
Acquisition_1C.threshold=0.0
|
||||||
|
Acquisition_1C.pfa=0.00001
|
||||||
|
Acquisition_1C.if=0
|
||||||
|
Acquisition_1C.doppler_max=10000
|
||||||
|
Acquisition_1C.doppler_step=250
|
||||||
|
Acquisition_1C.dump=false;
|
||||||
|
Acquisition_1C.dump_filename=/archive/gps_acquisition.dat
|
||||||
|
;Acquisition_1C.coherent_integration_time_ms=10
|
||||||
|
|
||||||
|
Acquisition_1G.implementation=GLONASS_L1_CA_PCPS_Acquisition
|
||||||
|
Acquisition_1G.item_type=gr_complex
|
||||||
|
Acquisition_1G.threshold=0.0
|
||||||
|
Acquisition_1G.pfa=0.00001
|
||||||
|
Acquisition_1G.if=0
|
||||||
|
Acquisition_1G.doppler_max=10000
|
||||||
|
Acquisition_1G.doppler_step=250
|
||||||
|
Acquisition_1G.dump=false;
|
||||||
|
Acquisition_1G.dump_filename=/archive/glo_acquisition.dat
|
||||||
|
;Acquisition_1G.coherent_integration_time_ms=10
|
||||||
|
|
||||||
|
;######### TRACKING GLOBAL CONFIG ############
|
||||||
|
Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking
|
||||||
|
Tracking_1C.item_type=gr_complex
|
||||||
|
Tracking_1C.if=0
|
||||||
|
Tracking_1C.early_late_space_chips=0.5
|
||||||
|
Tracking_1C.pll_bw_hz=20.0;
|
||||||
|
Tracking_1C.dll_bw_hz=2.0;
|
||||||
|
Tracking_1C.dump=false;
|
||||||
|
Tracking_1C.dump_filename=/archive/gps_tracking_ch_
|
||||||
|
|
||||||
|
Tracking_1G.implementation=GLONASS_L1_CA_DLL_PLL_Tracking
|
||||||
|
Tracking_1G.item_type=gr_complex
|
||||||
|
Tracking_1G.if=0
|
||||||
|
Tracking_1G.early_late_space_chips=0.5
|
||||||
|
Tracking_1G.pll_bw_hz=25.0;
|
||||||
|
Tracking_1G.dll_bw_hz=3.0;
|
||||||
|
Tracking_1G.dump=false;
|
||||||
|
Tracking_1G.dump_filename=/archive/glo_tracking_ch_
|
||||||
|
|
||||||
|
;######### TELEMETRY DECODER GPS CONFIG ############
|
||||||
|
TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder
|
||||||
|
TelemetryDecoder_1G.implementation=GLONASS_L1_CA_Telemetry_Decoder
|
||||||
|
|
||||||
|
;######### OBSERVABLES CONFIG ############
|
||||||
|
Observables.implementation=Hybrid_Observables
|
||||||
|
Observables.dump=false;
|
||||||
|
Observables.dump_filename=/archive/gnss_observables.dat
|
||||||
|
|
||||||
|
;######### PVT CONFIG ############
|
||||||
|
PVT.implementation=RTKLIB_PVT
|
||||||
|
PVT.output_rate_ms=100
|
||||||
|
PVT.display_rate_ms=500
|
||||||
|
PVT.trop_model=Saastamoinen
|
||||||
|
PVT.flag_rtcm_server=false
|
||||||
|
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_MT1045_rate_ms=5000
|
||||||
|
PVT.rtcm_MT1097_rate_ms=1000
|
||||||
|
PVT.rtcm_MT1077_rate_ms=1000
|
||||||
|
PVT.rinex_version=3
|
142
conf/gnss-sdr_GLONASS_L1_CA_GPS_L2C_ibyte.conf
Normal file
142
conf/gnss-sdr_GLONASS_L1_CA_GPS_L2C_ibyte.conf
Normal file
@ -0,0 +1,142 @@
|
|||||||
|
[GNSS-SDR]
|
||||||
|
|
||||||
|
;######### GLOBAL OPTIONS ##################
|
||||||
|
GNSS-SDR.internal_fs_sps=6625000
|
||||||
|
Receiver.sources_count=2
|
||||||
|
|
||||||
|
;######### SIGNAL_SOURCE CONFIG ############
|
||||||
|
SignalSource0.implementation=File_Signal_Source
|
||||||
|
SignalSource0.filename=/archive/NT1065_L2_20160923_fs6625e6_if60e3_schar.bin ; <- PUT YOUR FILE HERE
|
||||||
|
SignalSource0.item_type=ibyte
|
||||||
|
SignalSource0.sampling_frequency=6625000
|
||||||
|
SignalSource0.samples=0
|
||||||
|
SignalSource0.dump=false;
|
||||||
|
SignalSource0.dump_filename=/archive/signal_glonass.bin
|
||||||
|
|
||||||
|
SignalSource1.implementation=File_Signal_Source
|
||||||
|
SignalSource1.filename=/archive/NT1065_GLONASS_L1_20160923_fs6625e6_if0e3_schar.bin ; <- PUT YOUR FILE HERE
|
||||||
|
SignalSource1.item_type=ibyte
|
||||||
|
SignalSource1.sampling_frequency=6625000
|
||||||
|
SignalSource1.samples=0
|
||||||
|
SignalSource1.dump=false;
|
||||||
|
SignalSource1.dump_filename=/archive/signal_glonass.bin
|
||||||
|
|
||||||
|
;######### SIGNAL_CONDITIONER CONFIG ############
|
||||||
|
SignalConditioner0.implementation=Signal_Conditioner
|
||||||
|
DataTypeAdapter0.implementation=Ibyte_To_Complex
|
||||||
|
InputFilter0.implementation=Freq_Xlating_Fir_Filter
|
||||||
|
InputFilter0.item_type=gr_complex
|
||||||
|
InputFilter0.output_item_type=gr_complex
|
||||||
|
InputFilter0.taps_item_type=float
|
||||||
|
InputFilter0.number_of_taps=5
|
||||||
|
InputFilter0.number_of_bands=2
|
||||||
|
InputFilter0.band1_begin=0.0
|
||||||
|
InputFilter0.band1_end=0.70
|
||||||
|
InputFilter0.band2_begin=0.80
|
||||||
|
InputFilter0.band2_end=1.0
|
||||||
|
InputFilter0.ampl1_begin=1.0
|
||||||
|
InputFilter0.ampl1_end=1.0
|
||||||
|
InputFilter0.ampl2_begin=0.0
|
||||||
|
InputFilter0.ampl2_end=0.0
|
||||||
|
InputFilter0.band1_error=1.0
|
||||||
|
InputFilter0.band2_error=1.0
|
||||||
|
InputFilter0.filter_type=bandpass
|
||||||
|
InputFilter0.grid_density=16
|
||||||
|
InputFilter0.sampling_frequency=6625000
|
||||||
|
InputFilter0.IF=60000
|
||||||
|
Resampler0.implementation=Pass_Through
|
||||||
|
Resampler0.item_type=gr_complex
|
||||||
|
|
||||||
|
SignalConditioner1.implementation=Signal_Conditioner
|
||||||
|
DataTypeAdapter1.implementation=Ibyte_To_Complex
|
||||||
|
InputFilter1.implementation=Pass_Through
|
||||||
|
InputFilter1.item_type=gr_complex
|
||||||
|
Resampler1.implementation=Pass_Through
|
||||||
|
Resampler1.item_type=gr_complex
|
||||||
|
|
||||||
|
;######### CHANNELS GLOBAL CONFIG ############
|
||||||
|
Channels.in_acquisition=5
|
||||||
|
Channels_2S.count=5
|
||||||
|
Channels_1G.count=5
|
||||||
|
|
||||||
|
;# Defining GLONASS satellites
|
||||||
|
Channel0.RF_channel_ID=0
|
||||||
|
Channel0.signal=2S
|
||||||
|
Channel1.RF_channel_ID=0
|
||||||
|
Channel1.signal=2S
|
||||||
|
Channel2.RF_channel_ID=0
|
||||||
|
Channel2.signal=2S
|
||||||
|
Channel3.RF_channel_ID=0
|
||||||
|
Channel3.signal=2S
|
||||||
|
Channel4.RF_channel_ID=0
|
||||||
|
Channel4.signal=2S
|
||||||
|
Channel5.RF_channel_ID=1
|
||||||
|
Channel6.RF_channel_ID=1
|
||||||
|
Channel7.RF_channel_ID=1
|
||||||
|
Channel8.RF_channel_ID=1
|
||||||
|
Channel9.RF_channel_ID=1
|
||||||
|
|
||||||
|
|
||||||
|
;######### ACQUISITION GLOBAL CONFIG ############
|
||||||
|
Acquisition_2S.implementation=GPS_L2_M_PCPS_Acquisition
|
||||||
|
Acquisition_2S.item_type=gr_complex
|
||||||
|
Acquisition_2S.threshold=0.0
|
||||||
|
Acquisition_2S.pfa=0.00001
|
||||||
|
Acquisition_2S.if=0
|
||||||
|
Acquisition_2S.doppler_max=10000
|
||||||
|
Acquisition_2S.doppler_step=60
|
||||||
|
Acquisition_2S.max_dwells=1
|
||||||
|
|
||||||
|
Acquisition_1G.implementation=GLONASS_L1_CA_PCPS_Acquisition
|
||||||
|
Acquisition_1G.item_type=gr_complex
|
||||||
|
Acquisition_1G.threshold=0.0
|
||||||
|
Acquisition_1G.pfa=0.00001
|
||||||
|
Acquisition_1G.if=0
|
||||||
|
Acquisition_1G.doppler_max=10000
|
||||||
|
Acquisition_1G.doppler_step=250
|
||||||
|
Acquisition_1G.dump=false;
|
||||||
|
Acquisition_1G.dump_filename=/archive/glo_acquisition.dat
|
||||||
|
|
||||||
|
;######### TRACKING GLOBAL CONFIG ############
|
||||||
|
Tracking_2S.implementation=GPS_L2_M_DLL_PLL_Tracking
|
||||||
|
Tracking_2S.item_type=gr_complex
|
||||||
|
Tracking_2S.if=0
|
||||||
|
Tracking_2S.early_late_space_chips=0.5
|
||||||
|
Tracking_2S.pll_bw_hz=2.0;
|
||||||
|
Tracking_2S.dll_bw_hz=0.250;
|
||||||
|
Tracking_2S.order=2;
|
||||||
|
Tracking_2S.dump=false;
|
||||||
|
Tracking_2S.dump_filename=/archive/gps_tracking_ch_
|
||||||
|
|
||||||
|
Tracking_1G.implementation=GLONASS_L1_CA_DLL_PLL_Tracking
|
||||||
|
Tracking_1G.item_type=gr_complex
|
||||||
|
Tracking_1G.if=0
|
||||||
|
Tracking_1G.early_late_space_chips=0.5
|
||||||
|
Tracking_1G.pll_bw_hz=25.0;
|
||||||
|
Tracking_1G.dll_bw_hz=3.0;
|
||||||
|
Tracking_1G.dump=false;
|
||||||
|
Tracking_1G.dump_filename=/archive/glo_tracking_ch_
|
||||||
|
|
||||||
|
;######### TELEMETRY DECODER GPS CONFIG ############
|
||||||
|
TelemetryDecoder_2S.implementation=GPS_L2C_Telemetry_Decoder
|
||||||
|
TelemetryDecoder_1G.implementation=GLONASS_L1_CA_Telemetry_Decoder
|
||||||
|
|
||||||
|
;######### OBSERVABLES CONFIG ############
|
||||||
|
Observables.implementation=Hybrid_Observables
|
||||||
|
Observables.dump=false;
|
||||||
|
Observables.dump_filename=/archive/gnss_observables.dat
|
||||||
|
|
||||||
|
;######### PVT CONFIG ############
|
||||||
|
PVT.implementation=RTKLIB_PVT
|
||||||
|
PVT.output_rate_ms=100
|
||||||
|
PVT.display_rate_ms=500
|
||||||
|
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_MT1045_rate_ms=5000
|
||||||
|
PVT.rtcm_MT1097_rate_ms=1000
|
||||||
|
PVT.rtcm_MT1077_rate_ms=1000
|
||||||
|
PVT.rinex_version=3
|
79
conf/gnss-sdr_GLONASS_L1_CA_ibyte.conf
Normal file
79
conf/gnss-sdr_GLONASS_L1_CA_ibyte.conf
Normal file
@ -0,0 +1,79 @@
|
|||||||
|
[GNSS-SDR]
|
||||||
|
|
||||||
|
;######### GLOBAL OPTIONS ##################
|
||||||
|
GNSS-SDR.internal_fs_sps=6625000
|
||||||
|
|
||||||
|
;######### SIGNAL_SOURCE CONFIG ############
|
||||||
|
SignalSource.implementation=File_Signal_Source
|
||||||
|
SignalSource.filename=/archive/NT1065_GLONASS_L1_20160923_fs6625e6_if0e3_schar.bin ; <- PUT YOUR FILE HERE
|
||||||
|
SignalSource.item_type=ibyte
|
||||||
|
SignalSource.sampling_frequency=6625000
|
||||||
|
SignalSource.samples=0
|
||||||
|
SignalSource.dump=false;
|
||||||
|
SignalSource.dump_filename=/archive/signal_glonass.bin
|
||||||
|
|
||||||
|
;######### SIGNAL_CONDITIONER CONFIG ############
|
||||||
|
SignalConditioner.implementation=Signal_Conditioner
|
||||||
|
DataTypeAdapter.implementation=Ibyte_To_Complex
|
||||||
|
InputFilter.implementation=Pass_Through
|
||||||
|
InputFilter.item_type=gr_complex
|
||||||
|
Resampler.implementation=Pass_Through
|
||||||
|
Resampler.item_type=gr_complex
|
||||||
|
|
||||||
|
;######### CHANNELS GLOBAL CONFIG ############
|
||||||
|
Channel.signal=1G
|
||||||
|
Channels.in_acquisition=1
|
||||||
|
Channels_1G.count=5
|
||||||
|
|
||||||
|
;Channel0.satellite=24 ; k=
|
||||||
|
;Channel1.satellite=1 ; k=1
|
||||||
|
;Channel2.satellite=2 ; k=-4
|
||||||
|
;Channel3.satellite=20 ; k=-5
|
||||||
|
;Channel4.satellite=21 ; k=4
|
||||||
|
|
||||||
|
;######### ACQUISITION GLOBAL CONFIG ############
|
||||||
|
Acquisition_1G.implementation=GLONASS_L1_CA_PCPS_Acquisition
|
||||||
|
Acquisition_1G.item_type=gr_complex
|
||||||
|
Acquisition_1G.threshold=0.0
|
||||||
|
Acquisition_1G.pfa=0.0001
|
||||||
|
Acquisition_1G.if=0
|
||||||
|
Acquisition_1G.doppler_max=10000
|
||||||
|
Acquisition_1G.doppler_step=250
|
||||||
|
Acquisition_1G.dump=false;
|
||||||
|
Acquisition_1G.dump_filename=/archive/glo_acquisition.dat
|
||||||
|
;Acquisition_1G.coherent_integration_time_ms=1
|
||||||
|
;Acquisition_1G.max_dwells = 5
|
||||||
|
|
||||||
|
;######### TRACKING GLOBAL CONFIG ############
|
||||||
|
Tracking_1G.implementation=GLONASS_L1_CA_DLL_PLL_Tracking
|
||||||
|
Tracking_1G.item_type=gr_complex
|
||||||
|
Tracking_1G.if=0
|
||||||
|
Tracking_1G.early_late_space_chips=0.5
|
||||||
|
Tracking_1G.pll_bw_hz=25.0;
|
||||||
|
Tracking_1G.dll_bw_hz=3.0;
|
||||||
|
Tracking_1G.dump=false;
|
||||||
|
Tracking_1G.dump_filename=/archive/glo_tracking_ch_
|
||||||
|
|
||||||
|
;######### TELEMETRY DECODER GPS CONFIG ############
|
||||||
|
TelemetryDecoder_1G.implementation=GLONASS_L1_CA_Telemetry_Decoder
|
||||||
|
|
||||||
|
;######### OBSERVABLES CONFIG ############
|
||||||
|
Observables.implementation=Hybrid_Observables
|
||||||
|
Observables.dump=false;
|
||||||
|
Observables.dump_filename=/archive/glo_observables.dat
|
||||||
|
|
||||||
|
;######### PVT CONFIG ############
|
||||||
|
PVT.implementation=RTKLIB_PVT
|
||||||
|
PVT.positioning_mode=Single
|
||||||
|
PVT.output_rate_ms=100
|
||||||
|
PVT.display_rate_ms=500
|
||||||
|
PVT.trop_model=Saastamoinen
|
||||||
|
PVT.flag_rtcm_server=false
|
||||||
|
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_MT1045_rate_ms=5000
|
||||||
|
PVT.rtcm_MT1097_rate_ms=1000
|
||||||
|
PVT.rtcm_MT1077_rate_ms=1000
|
||||||
|
PVT.rinex_version=3
|
83
conf/gnss-sdr_GLONASS_L1_CA_ibyte_coh_trk.conf
Normal file
83
conf/gnss-sdr_GLONASS_L1_CA_ibyte_coh_trk.conf
Normal file
@ -0,0 +1,83 @@
|
|||||||
|
[GNSS-SDR]
|
||||||
|
|
||||||
|
;######### GLOBAL OPTIONS ##################
|
||||||
|
GNSS-SDR.internal_fs_sps=6625000
|
||||||
|
|
||||||
|
;######### SIGNAL_SOURCE CONFIG ############
|
||||||
|
SignalSource.implementation=File_Signal_Source
|
||||||
|
SignalSource.filename=/archive/NT1065_GLONASS_L1_20160923_fs6625e6_if0e3_schar.bin ; <- PUT YOUR FILE HERE
|
||||||
|
SignalSource.item_type=ibyte
|
||||||
|
SignalSource.sampling_frequency=6625000
|
||||||
|
SignalSource.samples=0
|
||||||
|
SignalSource.dump=false;
|
||||||
|
SignalSource.dump_filename=/archive/signal_glonass.bin
|
||||||
|
|
||||||
|
;######### SIGNAL_CONDITIONER CONFIG ############
|
||||||
|
SignalConditioner.implementation=Signal_Conditioner
|
||||||
|
DataTypeAdapter.implementation=Ibyte_To_Complex
|
||||||
|
InputFilter.implementation=Pass_Through
|
||||||
|
InputFilter.item_type=gr_complex
|
||||||
|
Resampler.implementation=Pass_Through
|
||||||
|
Resampler.item_type=gr_complex
|
||||||
|
|
||||||
|
;######### CHANNELS GLOBAL CONFIG ############
|
||||||
|
Channel.signal=1G
|
||||||
|
Channels.in_acquisition=2
|
||||||
|
Channels_1G.count=8
|
||||||
|
|
||||||
|
;Channel0.satellite=24 ; k=2
|
||||||
|
;Channel1.satellite=1 ; k=1
|
||||||
|
;Channel2.satellite=2 ; k=-4
|
||||||
|
;Channel3.satellite=20 ; k=-5
|
||||||
|
;Channel4.satellite=21 ; k=4
|
||||||
|
|
||||||
|
;######### ACQUISITION GLOBAL CONFIG ############
|
||||||
|
Acquisition_1G.implementation=GLONASS_L1_CA_PCPS_Acquisition
|
||||||
|
Acquisition_1G.item_type=gr_complex
|
||||||
|
Acquisition_1G.threshold=0.0
|
||||||
|
Acquisition_1G.pfa=0.0001
|
||||||
|
Acquisition_1G.if=0
|
||||||
|
Acquisition_1G.doppler_max=10000
|
||||||
|
Acquisition_1G.doppler_step=250
|
||||||
|
Acquisition_1G.dump=false;
|
||||||
|
Acquisition_1G.dump_filename=/archive/glo_acquisition.dat
|
||||||
|
;Acquisition_1G.coherent_integration_time_ms=1
|
||||||
|
;Acquisition_1G.max_dwells = 5
|
||||||
|
|
||||||
|
;######### TRACKING GLOBAL CONFIG ############
|
||||||
|
Tracking_1G.implementation=GLONASS_L1_CA_DLL_PLL_C_Aid_Tracking
|
||||||
|
Tracking_1G.item_type=gr_complex
|
||||||
|
Tracking_1G.if=0
|
||||||
|
Tracking_1G.early_late_space_chips=0.5
|
||||||
|
Tracking_1G.pll_bw_hz=40.0;
|
||||||
|
Tracking_1G.dll_bw_hz=3.0;
|
||||||
|
Tracking_1G.pll_bw_narrow_hz = 25.0;
|
||||||
|
Tracking_1G.dll_bw_narrow_hz = 2.0;
|
||||||
|
Tracking_1G.extend_correlation_ms = 1;
|
||||||
|
Tracking_1G.dump=false;
|
||||||
|
Tracking_1G.dump_filename=/archive/glo_tracking_ch_
|
||||||
|
|
||||||
|
|
||||||
|
;######### TELEMETRY DECODER GPS CONFIG ############
|
||||||
|
TelemetryDecoder_1G.implementation=GLONASS_L1_CA_Telemetry_Decoder
|
||||||
|
|
||||||
|
;######### OBSERVABLES CONFIG ############
|
||||||
|
Observables.implementation=Hybrid_Observables
|
||||||
|
Observables.dump=false
|
||||||
|
Observables.dump_filename=/archive/glo_observables.dat
|
||||||
|
|
||||||
|
;######### PVT CONFIG ############
|
||||||
|
PVT.implementation=RTKLIB_PVT
|
||||||
|
PVT.positioning_mode=Single
|
||||||
|
PVT.output_rate_ms=100
|
||||||
|
PVT.display_rate_ms=500
|
||||||
|
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_MT1045_rate_ms=5000
|
||||||
|
PVT.rtcm_MT1097_rate_ms=1000
|
||||||
|
PVT.rtcm_MT1077_rate_ms=1000
|
||||||
|
PVT.rinex_version=2
|
91
conf/gnss-sdr_GPS_L1_CA_ibyte.conf
Normal file
91
conf/gnss-sdr_GPS_L1_CA_ibyte.conf
Normal file
@ -0,0 +1,91 @@
|
|||||||
|
[GNSS-SDR]
|
||||||
|
|
||||||
|
;######### GLOBAL OPTIONS ##################
|
||||||
|
GNSS-SDR.internal_fs_sps=6625000
|
||||||
|
|
||||||
|
;######### SIGNAL_SOURCE CONFIG ############
|
||||||
|
SignalSource.implementation=File_Signal_Source
|
||||||
|
SignalSource.filename=/archive/NT1065_L1_20160923_fs6625e6_if60e3_schar.bin ; <- PUT YOUR FILE HERE
|
||||||
|
SignalSource.item_type=ibyte
|
||||||
|
;SignalSource.samples=66250000
|
||||||
|
SignalSource.samples=0
|
||||||
|
SignalSource.dump=false;
|
||||||
|
|
||||||
|
;######### SIGNAL_CONDITIONER CONFIG ############
|
||||||
|
SignalConditioner.implementation=Signal_Conditioner
|
||||||
|
DataTypeAdapter.implementation=Ibyte_To_Complex
|
||||||
|
InputFilter.implementation=Freq_Xlating_Fir_Filter
|
||||||
|
InputFilter.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.70
|
||||||
|
InputFilter.band2_begin=0.80
|
||||||
|
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.sampling_frequency=6625000
|
||||||
|
InputFilter.IF=60000
|
||||||
|
Resampler.implementation=Direct_Resampler
|
||||||
|
Resampler.sample_freq_in=6625000
|
||||||
|
Resampler.sample_freq_out=6625000
|
||||||
|
Resampler.item_type=gr_complex
|
||||||
|
|
||||||
|
;######### CHANNELS GLOBAL CONFIG ############
|
||||||
|
Channel.signal=1C
|
||||||
|
Channels.in_acquisition=1
|
||||||
|
Channels_1C.count=6
|
||||||
|
|
||||||
|
;######### ACQUISITION GLOBAL CONFIG ############
|
||||||
|
Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition
|
||||||
|
Acquisition_1C.item_type=gr_complex
|
||||||
|
Acquisition_1C.threshold=0.01
|
||||||
|
;Acquisition_1C.pfa=0.00001
|
||||||
|
Acquisition_1C.if=0
|
||||||
|
Acquisition_1C.doppler_max=10000
|
||||||
|
Acquisition_1C.doppler_step=250
|
||||||
|
Acquisition_1C.dump=false;
|
||||||
|
Acquisition_1C.dump_filename=/archive/gps_acquisition.dat
|
||||||
|
;Acquisition_1C.coherent_integration_time_ms=10
|
||||||
|
|
||||||
|
;######### TRACKING GLOBAL CONFIG ############
|
||||||
|
Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking
|
||||||
|
Tracking_1C.item_type=gr_complex
|
||||||
|
Tracking_1C.if=60000
|
||||||
|
Tracking_1C.early_late_space_chips=0.5
|
||||||
|
Tracking_1C.pll_bw_hz=25.0;
|
||||||
|
Tracking_1C.dll_bw_hz=3.0;
|
||||||
|
Tracking_1C.dump=false;
|
||||||
|
Tracking_1C.dump_filename=/archive/gps_tracking_ch_
|
||||||
|
|
||||||
|
;######### TELEMETRY DECODER GPS CONFIG ############
|
||||||
|
TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder
|
||||||
|
|
||||||
|
;######### OBSERVABLES CONFIG ############
|
||||||
|
Observables.implementation=Hybrid_Observables
|
||||||
|
Observables.dump=true;
|
||||||
|
Observables.dump_filename=/archive/gps_observables.dat
|
||||||
|
|
||||||
|
;######### PVT CONFIG ############
|
||||||
|
PVT.implementation=RTKLIB_PVT
|
||||||
|
PVT.positioning_mode=PPP_Static
|
||||||
|
PVT.output_rate_ms=100
|
||||||
|
PVT.display_rate_ms=500
|
||||||
|
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_MT1045_rate_ms=5000
|
||||||
|
PVT.rtcm_MT1097_rate_ms=1000
|
||||||
|
PVT.rtcm_MT1077_rate_ms=1000
|
||||||
|
PVT.rinex_version=3
|
@ -10,7 +10,7 @@ GNSS-SDR.internal_fs_sps=2727933.33 ; 8183800/3
|
|||||||
|
|
||||||
|
|
||||||
;######### SIGNAL_SOURCE CONFIG ############
|
;######### SIGNAL_SOURCE CONFIG ############
|
||||||
;#implementation: Use [File_Signal_Source] or [UHD_Signal_Source] or [GN3S_Signal_Source] (experimental)
|
;#implementation:
|
||||||
;#Notes for GN3S source:
|
;#Notes for GN3S source:
|
||||||
; - The front-end sampling frequency is fixed to 8.1838 MSPS (8183800 Hz).
|
; - The front-end sampling frequency is fixed to 8.1838 MSPS (8183800 Hz).
|
||||||
; - The baseband signal is shifted to an IF of 38400 Hz. It should be corrected with the signal conditioner block
|
; - The baseband signal is shifted to an IF of 38400 Hz. It should be corrected with the signal conditioner block
|
||||||
@ -66,25 +66,25 @@ Channels.in_acquisition=1
|
|||||||
Channel.signal=1C
|
Channel.signal=1C
|
||||||
|
|
||||||
;######### ACQUISITION GLOBAL CONFIG ############
|
;######### ACQUISITION GLOBAL CONFIG ############
|
||||||
Acquisition_1C.dump=false
|
Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition
|
||||||
Acquisition_1C.dump_filename=./acq_dump.dat
|
|
||||||
Acquisition_1C.item_type=gr_complex
|
Acquisition_1C.item_type=gr_complex
|
||||||
Acquisition_1C.if=0
|
Acquisition_1C.if=0
|
||||||
Acquisition_1C.sampled_ms=1
|
Acquisition_1C.sampled_ms=1
|
||||||
Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition
|
|
||||||
Acquisition_1C.threshold=0.008
|
Acquisition_1C.threshold=0.008
|
||||||
Acquisition_1C.doppler_max=10000
|
Acquisition_1C.doppler_max=10000
|
||||||
Acquisition_1C.doppler_step=500
|
Acquisition_1C.doppler_step=500
|
||||||
|
Acquisition_1C.dump=false
|
||||||
|
Acquisition_1C.dump_filename=./acq_dump.dat
|
||||||
|
|
||||||
;######### TRACKING GLOBAL CONFIG ############
|
;######### TRACKING GLOBAL CONFIG ############
|
||||||
Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking
|
Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking
|
||||||
Tracking_1C.item_type=gr_complex
|
Tracking_1C.item_type=gr_complex
|
||||||
Tracking_1C.if=0
|
Tracking_1C.if=0
|
||||||
Tracking_1C.dump=false
|
|
||||||
Tracking_1C.dump_filename=../data/epl_tracking_ch_
|
|
||||||
Tracking_1C.pll_bw_hz=45.0;
|
Tracking_1C.pll_bw_hz=45.0;
|
||||||
Tracking_1C.dll_bw_hz=2.0;
|
Tracking_1C.dll_bw_hz=2.0;
|
||||||
Tracking_1C.order=3;
|
Tracking_1C.order=3;
|
||||||
|
Tracking_1C.dump=false
|
||||||
|
Tracking_1C.dump_filename=../data/epl_tracking_ch_
|
||||||
|
|
||||||
;######### TELEMETRY DECODER GPS CONFIG ############
|
;######### TELEMETRY DECODER GPS CONFIG ############
|
||||||
TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder
|
TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder
|
||||||
|
@ -11,30 +11,18 @@ GNSS-SDR.internal_fs_sps=4000000
|
|||||||
|
|
||||||
|
|
||||||
;######### SIGNAL_SOURCE CONFIG ############
|
;######### SIGNAL_SOURCE CONFIG ############
|
||||||
;#implementation: Use [File_Signal_Source] or [UHD_Signal_Source] or [GN3S_Signal_Source] (experimental)
|
;#implementation
|
||||||
SignalSource.implementation=Spir_File_Signal_Source
|
SignalSource.implementation=Spir_File_Signal_Source
|
||||||
|
|
||||||
;#filename: path to file with the captured GNSS signal samples to be processed
|
;#filename: path to file with the captured GNSS signal samples to be processed
|
||||||
SignalSource.filename=/dtalogger/signals/spir/data/20Secs/20Secs_L1.dat ; <- PUT YOUR FILE HERE
|
SignalSource.filename=/dtalogger/signals/spir/data/20Secs/20Secs_L1.dat ; <- PUT YOUR FILE HERE
|
||||||
|
|
||||||
;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
|
;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
|
||||||
SignalSource.item_type=int
|
SignalSource.item_type=int
|
||||||
|
;#sampling_frequency: Original Signal sampling frequency in samples per second
|
||||||
;#sampling_frequency: Original Signal sampling frequency in [Hz]
|
|
||||||
SignalSource.sampling_frequency=80000000
|
SignalSource.sampling_frequency=80000000
|
||||||
|
|
||||||
;#samples: Number of samples to be processed. Notice that 0 indicates the entire file.
|
;#samples: Number of samples to be processed. Notice that 0 indicates the entire file.
|
||||||
SignalSource.samples=0
|
SignalSource.samples=0
|
||||||
|
;#repeat: Repeat the processing file.
|
||||||
;#repeat: Repeat the processing file. Disable this option in this version
|
|
||||||
SignalSource.repeat=false
|
SignalSource.repeat=false
|
||||||
|
|
||||||
;#dump: Dump the Signal source data to a file. Disable this option in this version
|
|
||||||
SignalSource.dump=false
|
|
||||||
|
|
||||||
SignalSource.dump_filename=../data/signal_source.dat
|
|
||||||
|
|
||||||
|
|
||||||
;#enable_throttle_control: Enabling this option tells the signal source to keep the delay between samples in post processing.
|
;#enable_throttle_control: Enabling this option tells the signal source to keep the delay between samples in post processing.
|
||||||
; it helps to not overload the CPU, but the processing time will be longer.
|
; it helps to not overload the CPU, but the processing time will be longer.
|
||||||
SignalSource.enable_throttle_control=false
|
SignalSource.enable_throttle_control=false
|
||||||
@ -49,7 +37,7 @@ SignalSource.enable_throttle_control=false
|
|||||||
SignalConditioner.implementation=Signal_Conditioner
|
SignalConditioner.implementation=Signal_Conditioner
|
||||||
|
|
||||||
;######### DATA_TYPE_ADAPTER CONFIG ############
|
;######### DATA_TYPE_ADAPTER CONFIG ############
|
||||||
;## Changes the type of input data. Please disable it in this version.
|
;## Changes the type of input data.
|
||||||
;#implementation: [Pass_Through] disables this block
|
;#implementation: [Pass_Through] disables this block
|
||||||
DataTypeAdapter.implementation=Pass_Through
|
DataTypeAdapter.implementation=Pass_Through
|
||||||
DataTypeAdapter.item_type=float
|
DataTypeAdapter.item_type=float
|
||||||
@ -74,12 +62,13 @@ InputFilter.dump_filename=../data/input_filter.dat
|
|||||||
|
|
||||||
;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation.
|
;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation.
|
||||||
;#These options are based on parameters of gnuradio's function: gr_remez.
|
;#These options are based on parameters of gnuradio's function: gr_remez.
|
||||||
;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges, the desired reponse on those bands, and the weight given to the error in those bands.
|
;#This function calculates the optimal (in the Chebyshev/minimax sense) FIR filter impulse response given a set of band edges,
|
||||||
|
;#the desired response on those bands, and the weight given to the error in those bands.
|
||||||
|
|
||||||
;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version.
|
;#input_item_type: Type and resolution for input signal samples.
|
||||||
InputFilter.input_item_type=float
|
InputFilter.input_item_type=float
|
||||||
|
|
||||||
;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version.
|
;#outut_item_type: Type and resolution for output filtered signal samples.
|
||||||
InputFilter.output_item_type=gr_complex
|
InputFilter.output_item_type=gr_complex
|
||||||
|
|
||||||
;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version.
|
;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version.
|
||||||
@ -131,27 +120,22 @@ InputFilter.decimation_factor=20
|
|||||||
|
|
||||||
;######### RESAMPLER CONFIG ############
|
;######### RESAMPLER CONFIG ############
|
||||||
;## Resamples the input data.
|
;## Resamples the input data.
|
||||||
|
|
||||||
;#implementation: Use [Pass_Through] or [Direct_Resampler]
|
;#implementation: Use [Pass_Through] or [Direct_Resampler]
|
||||||
;#[Pass_Through] disables this block
|
;#[Pass_Through] disables this block
|
||||||
;#[Direct_Resampler] enables a resampler that implements a nearest neigbourhood interpolation
|
;#[Direct_Resampler] enables a resampler that implements a nearest neigbourhood interpolation
|
||||||
;Resampler.implementation=Direct_Resampler
|
;Resampler.implementation=Direct_Resampler
|
||||||
Resampler.implementation=Pass_Through
|
Resampler.implementation=Pass_Through
|
||||||
|
;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
|
||||||
|
Resampler.item_type=gr_complex
|
||||||
|
;#sample_freq_in: the sample frequency of the input signal
|
||||||
|
Resampler.sample_freq_in=80000000
|
||||||
|
;#sample_freq_out: the desired sample frequency of the output signal
|
||||||
|
Resampler.sample_freq_out=4000000
|
||||||
;#dump: Dump the resamplered data to a file.
|
;#dump: Dump the resamplered data to a file.
|
||||||
Resampler.dump=false
|
Resampler.dump=false
|
||||||
;#dump_filename: Log path and filename.
|
;#dump_filename: Log path and filename.
|
||||||
Resampler.dump_filename=../data/resampler.dat
|
Resampler.dump_filename=../data/resampler.dat
|
||||||
|
|
||||||
;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
|
|
||||||
Resampler.item_type=gr_complex
|
|
||||||
|
|
||||||
;#sample_freq_in: the sample frequency of the input signal
|
|
||||||
Resampler.sample_freq_in=80000000
|
|
||||||
|
|
||||||
;#sample_freq_out: the desired sample frequency of the output signal
|
|
||||||
Resampler.sample_freq_out=4000000
|
|
||||||
|
|
||||||
|
|
||||||
;######### CHANNELS GLOBAL CONFIG ############
|
;######### CHANNELS GLOBAL CONFIG ############
|
||||||
;#count: Number of available GPS satellite channels.
|
;#count: Number of available GPS satellite channels.
|
||||||
@ -189,19 +173,13 @@ Channel.signal=1C
|
|||||||
;Channel3.satellite=19
|
;Channel3.satellite=19
|
||||||
|
|
||||||
;######### ACQUISITION GLOBAL CONFIG ############
|
;######### ACQUISITION GLOBAL CONFIG ############
|
||||||
_1C
|
Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition_Fine_Doppler
|
||||||
;#dump: Enable or disable the acquisition internal data file logging [true] or [false]
|
|
||||||
Acquisition_1C.dump=false
|
|
||||||
;#filename: Log path and filename
|
|
||||||
Acquisition_1C.dump_filename=./acq_dump.dat
|
|
||||||
;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
|
;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
|
||||||
Acquisition_1C.item_type=gr_complex
|
Acquisition_1C.item_type=gr_complex
|
||||||
;#if: Signal intermediate frequency in [Hz]
|
;#if: Signal intermediate frequency in [Hz]
|
||||||
Acquisition_1C.if=0
|
Acquisition_1C.if=0
|
||||||
;#sampled_ms: Signal block duration for the acquisition signal detection [ms]
|
;#sampled_ms: Signal block duration for the acquisition signal detection [ms]
|
||||||
Acquisition_1C.sampled_ms=1
|
Acquisition_1C.sampled_ms=1
|
||||||
;#implementation: Acquisition algorithm selection for this channel: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
|
|
||||||
Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition_Fine_Doppler
|
|
||||||
;#threshold: Acquisition threshold
|
;#threshold: Acquisition threshold
|
||||||
Acquisition_1C.threshold=0.005
|
Acquisition_1C.threshold=0.005
|
||||||
;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
|
;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
|
||||||
@ -214,95 +192,65 @@ Acquisition_1C.doppler_min=-10000
|
|||||||
Acquisition_1C.doppler_step=500
|
Acquisition_1C.doppler_step=500
|
||||||
;#maximum dwells
|
;#maximum dwells
|
||||||
Acquisition_1C.max_dwells=5
|
Acquisition_1C.max_dwells=5
|
||||||
|
;#dump: Enable or disable the acquisition internal data file logging [true] or [false]
|
||||||
|
Acquisition_1C.dump=false
|
||||||
|
;#filename: Log path and filename
|
||||||
|
Acquisition_1C.dump_filename=./acq_dump.dat
|
||||||
|
|
||||||
;######### ACQUISITION CHANNELS CONFIG ######
|
|
||||||
|
|
||||||
;######### ACQUISITION CH 0 CONFIG ############
|
|
||||||
|
|
||||||
;#repeat_satellite: Use only jointly with the satellite PRN ID option. The default value is false
|
|
||||||
;Acquisition0.repeat_satellite = true
|
|
||||||
;Acquisition1.repeat_satellite = true
|
|
||||||
;Acquisition2.repeat_satellite = true
|
|
||||||
;Acquisition3.repeat_satellite = true
|
|
||||||
|
|
||||||
;#cboc: Only for [Galileo_E1_PCPS_Ambiguous_Acquisition]. This option allows you to choose between acquiring with CBOC signal [true] or sinboc(1,1) signal [false].
|
|
||||||
;#Use only if GNSS-SDR.internal_fs_sps is greater than or equal to 6138000
|
|
||||||
Acquisition0.cboc=false
|
|
||||||
|
|
||||||
|
|
||||||
;######### ACQUISITION CH 1 CONFIG ############
|
|
||||||
Acquisition1.cboc=false
|
|
||||||
|
|
||||||
;######### TRACKING GLOBAL CONFIG ############
|
;######### TRACKING GLOBAL CONFIG ############
|
||||||
|
|
||||||
;#implementation: Selected tracking algorithm: [GPS_L1_CA_DLL_PLL_Tracking] or [GPS_L1_CA_DLL_PLL_C_Aid_Tracking] or [GPS_L1_CA_TCP_CONNECTOR_Tracking] or [Galileo_E1_DLL_PLL_VEML_Tracking]
|
|
||||||
Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking
|
Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking
|
||||||
;#item_type: Type and resolution for each of the signal samples. Use only [gr_complex] in this version.
|
;#item_type: Type and resolution for each of the signal samples.
|
||||||
Tracking_1C.item_type=gr_complex
|
Tracking_1C.item_type=gr_complex
|
||||||
|
|
||||||
;#sampling_frequency: Signal Intermediate Frequency in [Hz]
|
;#sampling_frequency: Signal Intermediate Frequency in [Hz]
|
||||||
Tracking_1C.if=0
|
Tracking_1C.if=0
|
||||||
|
;#pll_bw_hz: PLL loop filter bandwidth [Hz]
|
||||||
|
Tracking_1C.pll_bw_hz=20.0;
|
||||||
|
;#dll_bw_hz: DLL loop filter bandwidth [Hz]
|
||||||
|
Tracking_1
|
||||||
|
;#order: PLL/DLL loop filter order [2] or [3]
|
||||||
|
Tracking_1C.order=3;
|
||||||
;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false]
|
;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false]
|
||||||
Tracking_1C.dump=false
|
Tracking_1C.dump=false
|
||||||
|
|
||||||
;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number.
|
;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number.
|
||||||
Tracking_1C.dump_filename=../data/epl_tracking_ch_
|
Tracking_1C.dump_filename=../data/epl_tracking_ch_
|
||||||
|
|
||||||
;#pll_bw_hz: PLL loop filter bandwidth [Hz]
|
|
||||||
Tracking_1C.pll_bw_hz=20.0;
|
|
||||||
|
|
||||||
;#dll_bw_hz: DLL loop filter bandwidth [Hz]
|
|
||||||
Tracking_1C.dll_bw_hz=2.0;
|
|
||||||
|
|
||||||
;#order: PLL/DLL loop filter order [2] or [3]
|
|
||||||
Tracking_1C.order=3;
|
|
||||||
|
|
||||||
;######### TELEMETRY DECODER GPS CONFIG ############
|
;######### TELEMETRY DECODER GPS CONFIG ############
|
||||||
;#implementation: Use [GPS_L1_CA_Telemetry_Decoder] for GPS L1 C/A
|
;#implementation: Use [GPS_L1_CA_Telemetry_Decoder] for GPS L1 C/A
|
||||||
TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder
|
TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder
|
||||||
TelemetryDecoder_1C.dump=false
|
TelemetryDecoder_1C.dump=false
|
||||||
;#decimation factor
|
|
||||||
TelemetryDecoder_1C.decimation_factor=1;
|
|
||||||
|
|
||||||
;######### OBSERVABLES CONFIG ############
|
;######### OBSERVABLES CONFIG ############
|
||||||
;#implementation:
|
;#implementation:
|
||||||
Observables.implementation=Hybrid_Observables
|
Observables.implementation=Hybrid_Observables
|
||||||
|
|
||||||
;#dump: Enable or disable the Observables internal binary data file logging [true] or [false]
|
;#dump: Enable or disable the Observables internal binary data file logging [true] or [false]
|
||||||
Observables.dump=false
|
Observables.dump=false
|
||||||
|
|
||||||
;#dump_filename: Log path and filename.
|
;#dump_filename: Log path and filename.
|
||||||
Observables.dump_filename=./observables.dat
|
Observables.dump_filename=./observables.dat
|
||||||
|
|
||||||
|
|
||||||
;######### PVT CONFIG ############
|
;######### PVT CONFIG ############
|
||||||
;#implementation: Position Velocity and Time (PVT) implementation algorithm: Use [GPS_L1_CA_PVT] in this version.
|
;#implementation: Position Velocity and Time (PVT) implementation algorithm
|
||||||
PVT.implementation=RTKLIB_PVT
|
PVT.implementation=RTKLIB_PVT
|
||||||
PVT.positioning_mode=PPP_Static ; options: Single, Static, Kinematic, PPP_Static, PPP_Kinematic
|
PVT.positioning_mode=PPP_Static ; options: Single, Static, Kinematic, PPP_Static, PPP_Kinematic
|
||||||
PVT.iono_model=Broadcast ; options: OFF, Broadcast, SBAS, Iono-Free-LC, Estimate_STEC, IONEX
|
PVT.iono_model=Broadcast ; options: OFF, Broadcast, SBAS, Iono-Free-LC, Estimate_STEC, IONEX
|
||||||
PVT.trop_model=Saastamoinen ; options: OFF, Saastamoinen, SBAS, Estimate_ZTD, Estimate_ZTD_Grad
|
PVT.trop_model=Saastamoinen ; options: OFF, Saastamoinen, SBAS, Estimate_ZTD, Estimate_ZTD_Grad
|
||||||
|
;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1 ms) [ms]
|
||||||
;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms]
|
|
||||||
PVT.output_rate_ms=500
|
PVT.output_rate_ms=500
|
||||||
|
|
||||||
;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms.
|
;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms.
|
||||||
PVT.display_rate_ms=500
|
PVT.display_rate_ms=500
|
||||||
|
|
||||||
;# RINEX, KML, and NMEA output configuration
|
;# RINEX, KML, and NMEA output configuration
|
||||||
|
;#nmea_dump_filename: NMEA log path and filename
|
||||||
|
PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea;
|
||||||
|
;#flag_nmea_tty_port: Enable or disable the NMEA log to a serial TTY port (Can be used with real hardware or virtual one)
|
||||||
|
PVT.flag_nmea_tty_port=true;
|
||||||
|
;#nmea_dump_devname: serial device descriptor for NMEA logging
|
||||||
|
PVT.nmea_dump_devname=/dev/pts/4
|
||||||
|
;#dump: Enable or disable the PVT internal binary data file logging [true] or [false]
|
||||||
|
PVT.dump=false
|
||||||
;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump.
|
;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump.
|
||||||
PVT.dump_filename=./PVT
|
PVT.dump_filename=./PVT
|
||||||
|
|
||||||
;#nmea_dump_filename: NMEA log path and filename
|
|
||||||
PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea;
|
|
||||||
|
|
||||||
;#flag_nmea_tty_port: Enable or disable the NMEA log to a serial TTY port (Can be used with real hardware or virtual one)
|
|
||||||
PVT.flag_nmea_tty_port=true;
|
|
||||||
|
|
||||||
;#nmea_dump_devname: serial device descriptor for NMEA logging
|
|
||||||
PVT.nmea_dump_devname=/dev/pts/4
|
|
||||||
|
|
||||||
|
|
||||||
;#dump: Enable or disable the PVT internal binary data file logging [true] or [false]
|
|
||||||
PVT.dump=false
|
|
||||||
|
@ -26,39 +26,28 @@ GNSS-SDR.SUPL_LAC=0x59e2
|
|||||||
GNSS-SDR.SUPL_CI=0x31b0
|
GNSS-SDR.SUPL_CI=0x31b0
|
||||||
|
|
||||||
;######### SIGNAL_SOURCE CONFIG ############
|
;######### SIGNAL_SOURCE CONFIG ############
|
||||||
; # implementation: Use [File_Signal_Source] or [UHD_Signal_Source] or [GN3S_Signal_Source] (experimental)
|
; # implementation:
|
||||||
SignalSource.implementation=UHD_Signal_Source
|
SignalSource.implementation=UHD_Signal_Source
|
||||||
|
|
||||||
; # When left empty, the device discovery routines will search all vailable transports on the system (ethernet, usb...)
|
; # When left empty, the device discovery routines will search all vailable transports on the system (ethernet, usb...)
|
||||||
SignalSource.device_address=192.168.40.2 ; <- PUT THE IP ADDRESS OF YOUR USRP HERE
|
SignalSource.device_address=192.168.40.2 ; <- PUT THE IP ADDRESS OF YOUR USRP HERE
|
||||||
|
; # item_type: Type and resolution for each of the signal samples.
|
||||||
; # item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
|
|
||||||
;SignalSource.item_type=gr_complex
|
;SignalSource.item_type=gr_complex
|
||||||
SignalSource.item_type=cshort
|
SignalSource.item_type=cshort
|
||||||
|
; # sampling_frequency: Original Signal sampling frequency in samples per second
|
||||||
; # sampling_frequency: Original Signal sampling frequency in [Hz]
|
|
||||||
SignalSource.sampling_frequency=4000000
|
SignalSource.sampling_frequency=4000000
|
||||||
|
|
||||||
; # freq: RF front-end center frequency in [Hz]
|
; # freq: RF front-end center frequency in [Hz]
|
||||||
SignalSource.freq=1575420000
|
SignalSource.freq=1575420000
|
||||||
|
|
||||||
; # gain: Front-end Gain in [dB]
|
; # gain: Front-end Gain in [dB]
|
||||||
SignalSource.gain=40
|
SignalSource.gain=40
|
||||||
|
|
||||||
; # subdevice: UHD subdevice specification (for USRP1 use A:0 or B:0)
|
; # subdevice: UHD subdevice specification (for USRP1 use A:0 or B:0)
|
||||||
SignalSource.subdevice=A:0
|
SignalSource.subdevice=A:0
|
||||||
|
|
||||||
; # samples: Number of samples to be processed. Notice that 0 indicates the entire file.
|
; # samples: Number of samples to be processed. Notice that 0 indicates the entire file.
|
||||||
SignalSource.samples=0
|
SignalSource.samples=0
|
||||||
|
; # repeat: Repeat the processing file.
|
||||||
; # repeat: Repeat the processing file. Disable this option in this version
|
|
||||||
SignalSource.repeat=false
|
SignalSource.repeat=false
|
||||||
|
; # dump: Dump the Signal source data to a file.
|
||||||
; # dump: Dump the Signal source data to a file. Disable this option in this version
|
|
||||||
SignalSource.dump=false
|
SignalSource.dump=false
|
||||||
SignalSource.dump_filename=../data/signal_source.dat
|
SignalSource.dump_filename=../data/signal_source.dat
|
||||||
|
|
||||||
|
|
||||||
;#enable_throttle_control: Enabling this option tells the signal source to keep the delay between samples in post processing.
|
;#enable_throttle_control: Enabling this option tells the signal source to keep the delay between samples in post processing.
|
||||||
; it helps to not overload the CPU, but the processing time will be longer.
|
; it helps to not overload the CPU, but the processing time will be longer.
|
||||||
SignalSource.enable_throttle_control=false
|
SignalSource.enable_throttle_control=false
|
||||||
@ -74,7 +63,7 @@ SignalConditioner.implementation=Signal_Conditioner
|
|||||||
;SignalConditioner.implementation=Pass_Through
|
;SignalConditioner.implementation=Pass_Through
|
||||||
|
|
||||||
;######### DATA_TYPE_ADAPTER CONFIG ############
|
;######### DATA_TYPE_ADAPTER CONFIG ############
|
||||||
;## Changes the type of input data. Please disable it in this version.
|
;## Changes the type of input data.
|
||||||
;#implementation: [Pass_Through] disables this block
|
;#implementation: [Pass_Through] disables this block
|
||||||
DataTypeAdapter.implementation=Pass_Through
|
DataTypeAdapter.implementation=Pass_Through
|
||||||
DataTypeAdapter.item_type=cshort
|
DataTypeAdapter.item_type=cshort
|
||||||
@ -92,20 +81,15 @@ InputFilter.implementation=Fir_Filter
|
|||||||
;InputFilter.implementation=Freq_Xlating_Fir_Filter
|
;InputFilter.implementation=Freq_Xlating_Fir_Filter
|
||||||
;InputFilter.implementation=Pass_Through
|
;InputFilter.implementation=Pass_Through
|
||||||
|
|
||||||
;#dump: Dump the filtered data to a file.
|
|
||||||
InputFilter.dump=false
|
|
||||||
|
|
||||||
;#dump_filename: Log path and filename.
|
|
||||||
InputFilter.dump_filename=../data/input_filter.dat
|
|
||||||
|
|
||||||
;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation.
|
;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation.
|
||||||
;#These options are based on parameters of gnuradio's function: gr_remez.
|
;#These options are based on parameters of gnuradio's function: gr_remez.
|
||||||
;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges, the desired reponse on those bands, and the weight given to the error in those bands.
|
;#This function calculates the optimal (in the Chebyshev/minimax sense) FIR filter impulse response given a set of band edges,
|
||||||
|
;#the desired response on those bands, and the weight given to the error in those bands.
|
||||||
|
|
||||||
;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version.
|
;#input_item_type: Type and resolution for input signal samples.
|
||||||
InputFilter.input_item_type=cshort
|
InputFilter.input_item_type=cshort
|
||||||
|
|
||||||
;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version.
|
;#outut_item_type: Type and resolution for output filtered signal samples.
|
||||||
InputFilter.output_item_type=gr_complex
|
InputFilter.output_item_type=gr_complex
|
||||||
|
|
||||||
;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version.
|
;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version.
|
||||||
@ -152,31 +136,31 @@ InputFilter.grid_density=16
|
|||||||
InputFilter.sampling_frequency=4000000
|
InputFilter.sampling_frequency=4000000
|
||||||
InputFilter.IF=0
|
InputFilter.IF=0
|
||||||
|
|
||||||
|
;#dump: Dump the filtered data to a file.
|
||||||
|
InputFilter.dump=false
|
||||||
|
|
||||||
|
;#dump_filename: Log path and filename.
|
||||||
|
InputFilter.dump_filename=../data/input_filter.dat
|
||||||
|
|
||||||
|
|
||||||
;######### RESAMPLER CONFIG ############
|
;######### RESAMPLER CONFIG ############
|
||||||
;## Resamples the input data.
|
;## Resamples the input data.
|
||||||
|
|
||||||
;#implementation: Use [Pass_Through] or [Direct_Resampler]
|
;#implementation: Use [Pass_Through] or [Direct_Resampler]
|
||||||
;#[Pass_Through] disables this block
|
;#[Pass_Through] disables this block
|
||||||
;#[Direct_Resampler] enables a resampler that implements a nearest neigbourhood interpolation
|
;#[Direct_Resampler] enables a resampler that implements a nearest neigbourhood interpolation
|
||||||
;Resampler.implementation=Direct_Resampler
|
;Resampler.implementation=Direct_Resampler
|
||||||
Resampler.implementation=Pass_Through
|
Resampler.implementation=Pass_Through
|
||||||
|
;#item_type: Type and resolution for each of the signal samples.
|
||||||
|
Resampler.item_type=gr_complex
|
||||||
|
;#sample_freq_in: the sample frequency of the input signal
|
||||||
|
Resampler.sample_freq_in=4000000
|
||||||
|
;#sample_freq_out: the desired sample frequency of the output signal
|
||||||
|
Resampler.sample_freq_out=4000000
|
||||||
;#dump: Dump the resampled data to a file.
|
;#dump: Dump the resampled data to a file.
|
||||||
Resampler.dump=false
|
Resampler.dump=false
|
||||||
;#dump_filename: Log path and filename.
|
;#dump_filename: Log path and filename.
|
||||||
Resampler.dump_filename=../data/resampler.dat
|
Resampler.dump_filename=../data/resampler.dat
|
||||||
|
|
||||||
;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
|
|
||||||
Resampler.item_type=gr_complex
|
|
||||||
|
|
||||||
;#sample_freq_in: the sample frequency of the input signal
|
|
||||||
Resampler.sample_freq_in=4000000
|
|
||||||
|
|
||||||
;#sample_freq_out: the desired sample frequency of the output signal
|
|
||||||
Resampler.sample_freq_out=4000000
|
|
||||||
|
|
||||||
|
|
||||||
;######### CHANNELS GLOBAL CONFIG ############
|
;######### CHANNELS GLOBAL CONFIG ############
|
||||||
;#count: Number of available GPS satellite channels.
|
;#count: Number of available GPS satellite channels.
|
||||||
@ -223,19 +207,13 @@ Channel.signal=1C
|
|||||||
|
|
||||||
|
|
||||||
;######### ACQUISITION GLOBAL CONFIG ############
|
;######### ACQUISITION GLOBAL CONFIG ############
|
||||||
|
Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition
|
||||||
;#dump: Enable or disable the acquisition internal data file logging [true] or [false]
|
;#item_type: Type and resolution for each of the signal samples.
|
||||||
Acquisition_1C.dump=false
|
|
||||||
;#filename: Log path and filename
|
|
||||||
Acquisition_1C.dump_filename=./acq_dump.dat
|
|
||||||
;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
|
|
||||||
Acquisition_1C.item_type=gr_complex
|
Acquisition_1C.item_type=gr_complex
|
||||||
;#if: Signal intermediate frequency in [Hz]
|
;#if: Signal intermediate frequency in [Hz]
|
||||||
Acquisition_1C.if=0
|
Acquisition_1C.if=0
|
||||||
;#sampled_ms: Signal block duration for the acquisition signal detection [ms]
|
;#sampled_ms: Signal block duration for the acquisition signal detection [ms]
|
||||||
Acquisition_1C.coherent_integration_time_ms=1
|
Acquisition_1C.coherent_integration_time_ms=1
|
||||||
;#implementation: Acquisition algorithm selection for this channel: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
|
|
||||||
Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition
|
|
||||||
;#threshold: Acquisition threshold. It will be ignored if pfa is defined.
|
;#threshold: Acquisition threshold. It will be ignored if pfa is defined.
|
||||||
Acquisition_1C.threshold=0.01
|
Acquisition_1C.threshold=0.01
|
||||||
;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
|
;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
|
||||||
@ -249,54 +227,42 @@ maximum test statistics. Only use with implementation: [GPS_L1_CA_PCPS_Acquisiti
|
|||||||
Acquisition_1C.bit_transition_flag=false
|
Acquisition_1C.bit_transition_flag=false
|
||||||
;#max_dwells: Maximum number of consecutive dwells to be processed. It will be ignored if bit_transition_flag=true
|
;#max_dwells: Maximum number of consecutive dwells to be processed. It will be ignored if bit_transition_flag=true
|
||||||
Acquisition_1C.max_dwells=1
|
Acquisition_1C.max_dwells=1
|
||||||
|
;#dump: Enable or disable the acquisition internal data file logging [true] or [false]
|
||||||
|
Acquisition_1C.dump=false
|
||||||
;######### ACQUISITION CHANNELS CONFIG ######
|
;#filename: Log path and filename
|
||||||
;#The following options are specific to each channel and overwrite the generic options
|
Acquisition_1C.dump_filename=./acq_dump.dat
|
||||||
|
|
||||||
|
|
||||||
;######### TRACKING GLOBAL CONFIG ############
|
;######### TRACKING GLOBAL CONFIG ############
|
||||||
|
|
||||||
;#implementation: Selected tracking algorithm: [GPS_L1_CA_DLL_PLL_Tracking] or [GPS_L1_CA_DLL_PLL_C_Aid_Tracking]
|
|
||||||
Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking
|
Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking
|
||||||
;#item_type: Type and resolution for each of the signal samples.
|
;#item_type: Type and resolution for each of the signal samples.
|
||||||
Tracking_1C.item_type=gr_complex
|
Tracking_1C.item_type=gr_complex
|
||||||
|
|
||||||
;#sampling_frequency: Signal Intermediate Frequency in [Hz]
|
;#sampling_frequency: Signal Intermediate Frequency in [Hz]
|
||||||
Tracking_1C.if=0
|
Tracking_1C.if=0
|
||||||
|
;#pll_bw_hz: PLL loop filter bandwidth [Hz]
|
||||||
|
Tracking_1C.pll_bw_hz=30.0;
|
||||||
|
;#dll_bw_hz: DLL loop filter bandwidth [Hz]
|
||||||
|
Tracking_1C.dll_bw_hz=4.0;
|
||||||
|
;#order: PLL/DLL loop filter order [2] or [3]
|
||||||
|
Tracking_1C.order=3;
|
||||||
|
;#early_late_space_chips: correlator early-late space [chips]. Use [0.5]
|
||||||
|
Tracking_1C.early_late_space_chips=0.5;
|
||||||
;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false]
|
;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false]
|
||||||
Tracking_1C.dump=false
|
Tracking_1C.dump=false
|
||||||
|
|
||||||
;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number.
|
;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number.
|
||||||
Tracking_1C.dump_filename=./tracking_ch_
|
Tracking_1C.dump_filename=./tracking_ch_
|
||||||
|
|
||||||
;#pll_bw_hz: PLL loop filter bandwidth [Hz]
|
|
||||||
Tracking_1C.pll_bw_hz=30.0;
|
|
||||||
|
|
||||||
;#dll_bw_hz: DLL loop filter bandwidth [Hz]
|
|
||||||
Tracking_1C.dll_bw_hz=4.0;
|
|
||||||
|
|
||||||
;#order: PLL/DLL loop filter order [2] or [3]
|
|
||||||
Tracking_1C.order=3;
|
|
||||||
|
|
||||||
;#early_late_space_chips: correlator early-late space [chips]. Use [0.5]
|
|
||||||
Tracking_1C.early_late_space_chips=0.5;
|
|
||||||
|
|
||||||
;######### TELEMETRY DECODER GPS CONFIG ############
|
;######### TELEMETRY DECODER GPS CONFIG ############
|
||||||
;#implementation: Use [GPS_L1_CA_Telemetry_Decoder] for GPS L1 C/A
|
|
||||||
TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder
|
TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder
|
||||||
TelemetryDecoder_1C.dump=false
|
TelemetryDecoder_1C.dump=false
|
||||||
;#decimation factor
|
|
||||||
TelemetryDecoder_1C.decimation_factor=1;
|
|
||||||
|
|
||||||
;######### OBSERVABLES CONFIG ############
|
;######### OBSERVABLES CONFIG ############
|
||||||
;#implementation:
|
;#implementation:
|
||||||
Observables.implementation=Hybrid_Observables
|
Observables.implementation=Hybrid_Observables
|
||||||
|
|
||||||
;#dump: Enable or disable the Observables internal binary data file logging [true] or [false]
|
;#dump: Enable or disable the Observables internal binary data file logging [true] or [false]
|
||||||
Observables.dump=false
|
Observables.dump=false
|
||||||
|
|
||||||
;#dump_filename: Log path and filename.
|
;#dump_filename: Log path and filename.
|
||||||
Observables.dump_filename=./observables.dat
|
Observables.dump_filename=./observables.dat
|
||||||
|
|
||||||
@ -304,34 +270,24 @@ Observables.dump_filename=./observables.dat
|
|||||||
;######### PVT CONFIG ############
|
;######### PVT CONFIG ############
|
||||||
;#implementation: Position Velocity and Time (PVT) implementation:
|
;#implementation: Position Velocity and Time (PVT) implementation:
|
||||||
PVT.implementation=RTKLIB_PVT
|
PVT.implementation=RTKLIB_PVT
|
||||||
|
|
||||||
PVT.positioning_mode=PPP_Static ; options: Single, Static, Kinematic, PPP_Static, PPP_Kinematic
|
PVT.positioning_mode=PPP_Static ; options: Single, Static, Kinematic, PPP_Static, PPP_Kinematic
|
||||||
PVT.iono_model=Broadcast ; options: OFF, Broadcast, SBAS, Iono-Free-LC, Estimate_STEC, IONEX
|
PVT.iono_model=Broadcast ; options: OFF, Broadcast, SBAS, Iono-Free-LC, Estimate_STEC, IONEX
|
||||||
PVT.trop_model=Saastamoinen ; options: OFF, Saastamoinen, SBAS, Estimate_ZTD, Estimate_ZTD_Grad
|
PVT.trop_model=Saastamoinen ; options: OFF, Saastamoinen, SBAS, Estimate_ZTD, Estimate_ZTD_Grad
|
||||||
|
|
||||||
;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms]
|
;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms]
|
||||||
PVT.output_rate_ms=100
|
PVT.output_rate_ms=100
|
||||||
|
|
||||||
;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms.
|
;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms.
|
||||||
PVT.display_rate_ms=500
|
PVT.display_rate_ms=500
|
||||||
|
|
||||||
;# KML, GeoJSON, NMEA and RTCM output configuration
|
;# KML, GeoJSON, NMEA and RTCM output configuration
|
||||||
|
|
||||||
;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump.
|
|
||||||
PVT.dump_filename=./PVT
|
|
||||||
|
|
||||||
;#nmea_dump_filename: NMEA log path and filename
|
;#nmea_dump_filename: NMEA log path and filename
|
||||||
PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea;
|
PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea;
|
||||||
|
|
||||||
;#flag_nmea_tty_port: Enable or disable the NMEA log to a serial TTY port (Can be used with real hardware or virtual one)
|
;#flag_nmea_tty_port: Enable or disable the NMEA log to a serial TTY port (Can be used with real hardware or virtual one)
|
||||||
PVT.flag_nmea_tty_port=false;
|
PVT.flag_nmea_tty_port=false;
|
||||||
|
|
||||||
;#nmea_dump_devname: serial device descriptor for NMEA logging
|
;#nmea_dump_devname: serial device descriptor for NMEA logging
|
||||||
PVT.nmea_dump_devname=/dev/pts/4
|
PVT.nmea_dump_devname=/dev/pts/4
|
||||||
|
|
||||||
PVT.flag_rtcm_server=true
|
PVT.flag_rtcm_server=true
|
||||||
PVT.flag_rtcm_tty_port=false
|
PVT.flag_rtcm_tty_port=false
|
||||||
PVT.rtcm_dump_devname=/dev/pts/1
|
PVT.rtcm_dump_devname=/dev/pts/1
|
||||||
|
|
||||||
;#dump: Enable or disable the PVT internal binary data file logging [true] or [false]
|
;#dump: Enable or disable the PVT internal binary data file logging [true] or [false]
|
||||||
PVT.dump=false
|
PVT.dump=false
|
||||||
|
;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump.
|
||||||
|
PVT.dump_filename=./PVT
|
||||||
|
@ -25,39 +25,27 @@ GNSS-SDR.SUPL_LAC=0x59e2
|
|||||||
GNSS-SDR.SUPL_CI=0x31b0
|
GNSS-SDR.SUPL_CI=0x31b0
|
||||||
|
|
||||||
;######### SIGNAL_SOURCE CONFIG ############
|
;######### SIGNAL_SOURCE CONFIG ############
|
||||||
;#implementation: Use [File_Signal_Source] or [UHD_Signal_Source] or [GN3S_Signal_Source] (experimental)
|
;#implementation
|
||||||
SignalSource.implementation=UHD_Signal_Source
|
SignalSource.implementation=UHD_Signal_Source
|
||||||
|
|
||||||
;#When left empty, the device discovery routines will search all available transports on the system (ethernet, usb...)
|
;#When left empty, the device discovery routines will search all available transports on the system (ethernet, usb...)
|
||||||
;SignalSource.device_address=192.168.40.2 ; <- PUT THE IP ADDRESS OF YOUR USRP HERE
|
;SignalSource.device_address=192.168.40.2 ; <- PUT THE IP ADDRESS OF YOUR USRP HERE
|
||||||
|
;#item_type: Type and resolution for each of the signal samples.
|
||||||
;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
|
|
||||||
SignalSource.item_type=gr_complex
|
SignalSource.item_type=gr_complex
|
||||||
|
;#sampling_frequency: Original Signal sampling frequency in samples per second
|
||||||
;#sampling_frequency: Original Signal sampling frequency in [Hz]
|
|
||||||
SignalSource.sampling_frequency=2000000
|
SignalSource.sampling_frequency=2000000
|
||||||
|
|
||||||
;#freq: RF front-end center frequency in [Hz]
|
;#freq: RF front-end center frequency in [Hz]
|
||||||
SignalSource.freq=1575420000
|
SignalSource.freq=1575420000
|
||||||
|
|
||||||
;#gain: Front-end Gain in [dB]
|
;#gain: Front-end Gain in [dB]
|
||||||
SignalSource.gain=60
|
SignalSource.gain=60
|
||||||
|
|
||||||
;#subdevice: UHD subdevice specification (for USRP1 use A:0 or B:0)
|
;#subdevice: UHD subdevice specification (for USRP1 use A:0 or B:0)
|
||||||
SignalSource.subdevice=A:0
|
SignalSource.subdevice=A:0
|
||||||
|
|
||||||
;#samples: Number of samples to be processed. Notice that 0 indicates the entire file.
|
;#samples: Number of samples to be processed. Notice that 0 indicates the entire file.
|
||||||
SignalSource.samples=0
|
SignalSource.samples=0
|
||||||
|
;#repeat: Repeat the processing file.
|
||||||
;#repeat: Repeat the processing file. Disable this option in this version
|
|
||||||
SignalSource.repeat=false
|
SignalSource.repeat=false
|
||||||
|
;#dump: Dump the Signal source data to a file.
|
||||||
;#dump: Dump the Signal source data to a file. Disable this option in this version
|
|
||||||
SignalSource.dump=false
|
SignalSource.dump=false
|
||||||
|
|
||||||
SignalSource.dump_filename=../data/signal_source.dat
|
SignalSource.dump_filename=../data/signal_source.dat
|
||||||
|
|
||||||
|
|
||||||
;#enable_throttle_control: Enabling this option tells the signal source to keep the delay between samples in post processing.
|
;#enable_throttle_control: Enabling this option tells the signal source to keep the delay between samples in post processing.
|
||||||
; it helps to not overload the CPU, but the processing time will be longer.
|
; it helps to not overload the CPU, but the processing time will be longer.
|
||||||
SignalSource.enable_throttle_control=false
|
SignalSource.enable_throttle_control=false
|
||||||
@ -89,20 +77,15 @@ DataTypeAdapter.implementation=Pass_Through
|
|||||||
;InputFilter.implementation=Freq_Xlating_Fir_Filter
|
;InputFilter.implementation=Freq_Xlating_Fir_Filter
|
||||||
InputFilter.implementation=Pass_Through
|
InputFilter.implementation=Pass_Through
|
||||||
|
|
||||||
;#dump: Dump the filtered data to a file.
|
|
||||||
InputFilter.dump=false
|
|
||||||
|
|
||||||
;#dump_filename: Log path and filename.
|
|
||||||
InputFilter.dump_filename=../data/input_filter.dat
|
|
||||||
|
|
||||||
;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation.
|
;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation.
|
||||||
;#These options are based on parameters of gnuradio's function: gr_remez.
|
;#These options are based on parameters of gnuradio's function: gr_remez.
|
||||||
;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges, the desired reponse on those bands, and the weight given to the error in those bands.
|
;#This function calculates the optimal (in the Chebyshev/minimax sense) FIR filter impulse response given a set of band edges,
|
||||||
|
;#the desired response on those bands, and the weight given to the error in those bands.
|
||||||
|
|
||||||
;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version.
|
;#input_item_type: Type and resolution for input signal samples.
|
||||||
InputFilter.input_item_type=gr_complex
|
InputFilter.input_item_type=gr_complex
|
||||||
|
|
||||||
;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version.
|
;#outut_item_type: Type and resolution for output filtered signal samples.
|
||||||
InputFilter.output_item_type=gr_complex
|
InputFilter.output_item_type=gr_complex
|
||||||
|
|
||||||
;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version.
|
;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version.
|
||||||
@ -149,31 +132,31 @@ InputFilter.grid_density=16
|
|||||||
InputFilter.sampling_frequency=2000000
|
InputFilter.sampling_frequency=2000000
|
||||||
InputFilter.IF=0
|
InputFilter.IF=0
|
||||||
|
|
||||||
|
;#dump: Dump the filtered data to a file.
|
||||||
|
InputFilter.dump=false
|
||||||
|
|
||||||
|
;#dump_filename: Log path and filename.
|
||||||
|
InputFilter.dump_filename=../data/input_filter.dat
|
||||||
|
|
||||||
|
|
||||||
;######### RESAMPLER CONFIG ############
|
;######### RESAMPLER CONFIG ############
|
||||||
;## Resamples the input data.
|
;## Resamples the input data.
|
||||||
|
|
||||||
;#implementation: Use [Pass_Through] or [Direct_Resampler]
|
;#implementation: Use [Pass_Through] or [Direct_Resampler]
|
||||||
;#[Pass_Through] disables this block
|
;#[Pass_Through] disables this block
|
||||||
;#[Direct_Resampler] enables a resampler that implements a nearest neigbourhood interpolation
|
;#[Direct_Resampler] enables a resampler that implements a nearest neigbourhood interpolation
|
||||||
;Resampler.implementation=Direct_Resampler
|
;Resampler.implementation=Direct_Resampler
|
||||||
Resampler.implementation=Pass_Through
|
Resampler.implementation=Pass_Through
|
||||||
|
;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
|
||||||
|
Resampler.item_type=gr_complex
|
||||||
|
;#sample_freq_in: the sample frequency of the input signal
|
||||||
|
Resampler.sample_freq_in=8000000
|
||||||
|
;#sample_freq_out: the desired sample frequency of the output signal
|
||||||
|
Resampler.sample_freq_out=2000000
|
||||||
;#dump: Dump the resamplered data to a file.
|
;#dump: Dump the resamplered data to a file.
|
||||||
Resampler.dump=false
|
Resampler.dump=false
|
||||||
;#dump_filename: Log path and filename.
|
;#dump_filename: Log path and filename.
|
||||||
Resampler.dump_filename=../data/resampler.dat
|
Resampler.dump_filename=../data/resampler.dat
|
||||||
|
|
||||||
;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
|
|
||||||
Resampler.item_type=gr_complex
|
|
||||||
|
|
||||||
;#sample_freq_in: the sample frequency of the input signal
|
|
||||||
Resampler.sample_freq_in=8000000
|
|
||||||
|
|
||||||
;#sample_freq_out: the desired sample frequency of the output signal
|
|
||||||
Resampler.sample_freq_out=2000000
|
|
||||||
|
|
||||||
|
|
||||||
;######### CHANNELS GLOBAL CONFIG ############
|
;######### CHANNELS GLOBAL CONFIG ############
|
||||||
;#count: Number of available GPS satellite channels.
|
;#count: Number of available GPS satellite channels.
|
||||||
@ -186,9 +169,11 @@ Channels.in_acquisition=1
|
|||||||
|
|
||||||
;#signal:
|
;#signal:
|
||||||
;# "1C" GPS L1 C/A
|
;# "1C" GPS L1 C/A
|
||||||
;# "2S" GPS L2 L2C (M)
|
|
||||||
;# "1B" GALILEO E1 B (I/NAV OS/CS/SoL)
|
;# "1B" GALILEO E1 B (I/NAV OS/CS/SoL)
|
||||||
|
;# "1G" GLONASS L1 C/A
|
||||||
|
;# "2S" GPS L2 L2C (M)
|
||||||
;# "5X" GALILEO E5a I+Q
|
;# "5X" GALILEO E5a I+Q
|
||||||
|
;# "L5" GPS L5
|
||||||
|
|
||||||
;#if the option is disabled by default is assigned "1C" GPS L1 C/A
|
;#if the option is disabled by default is assigned "1C" GPS L1 C/A
|
||||||
Channel.signal=1C
|
Channel.signal=1C
|
||||||
@ -212,18 +197,13 @@ Channel.signal=1C
|
|||||||
|
|
||||||
|
|
||||||
;######### ACQUISITION GLOBAL CONFIG ############
|
;######### ACQUISITION GLOBAL CONFIG ############
|
||||||
|
Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition
|
||||||
;#dump: Enable or disable the acquisition internal data file logging [true] or [false]
|
|
||||||
Acquisition_1C.dump=false
|
|
||||||
;#filename: Log path and filename
|
|
||||||
Acquisition_1C.dump_filename=./acq_dump.dat
|
|
||||||
;#item_type: Type and resolution for each of the signal samples.
|
;#item_type: Type and resolution for each of the signal samples.
|
||||||
Acquisition_1C.item_type=gr_complex
|
Acquisition_1C.item_type=gr_complex
|
||||||
;#if: Signal intermediate frequency in [Hz]
|
;#if: Signal intermediate frequency in [Hz]
|
||||||
Acquisition_1C.if=0
|
Acquisition_1C.if=0
|
||||||
;#sampled_ms: Signal block duration for the acquisition signal detection [ms]
|
;#sampled_ms: Signal block duration for the acquisition signal detection [ms]
|
||||||
Acquisition_1C.coherent_integration_time_ms=1
|
Acquisition_1C.coherent_integration_time_ms=1
|
||||||
Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition
|
|
||||||
;#threshold: Acquisition threshold. It will be ignored if pfa is defined.
|
;#threshold: Acquisition threshold. It will be ignored if pfa is defined.
|
||||||
Acquisition_1C.threshold=0.01
|
Acquisition_1C.threshold=0.01
|
||||||
;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
|
;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
|
||||||
@ -237,54 +217,43 @@ maximum test statistics. Only use with implementation: [GPS_L1_CA_PCPS_Acquisiti
|
|||||||
Acquisition_1C.bit_transition_flag=false
|
Acquisition_1C.bit_transition_flag=false
|
||||||
;#max_dwells: Maximum number of consecutive dwells to be processed. It will be ignored if bit_transition_flag=true
|
;#max_dwells: Maximum number of consecutive dwells to be processed. It will be ignored if bit_transition_flag=true
|
||||||
Acquisition_1C.max_dwells=1
|
Acquisition_1C.max_dwells=1
|
||||||
|
;#dump: Enable or disable the acquisition internal data file logging [true] or [false]
|
||||||
|
Acquisition_1C.dump=false
|
||||||
;######### ACQUISITION CHANNELS CONFIG ######
|
;#filename: Log path and filename
|
||||||
;#The following options are specific to each channel and overwrite the generic options
|
Acquisition_1C.dump_filename=./acq_dump.dat
|
||||||
|
|
||||||
|
|
||||||
;######### TRACKING GLOBAL CONFIG ############
|
;######### TRACKING GLOBAL CONFIG ############
|
||||||
|
|
||||||
;#implementation: Selected tracking algorithm: [GPS_L1_CA_DLL_PLL_Tracking] or [GPS_L1_CA_DLL_PLL_C_Aid_Tracking]
|
|
||||||
Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking
|
Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking
|
||||||
;#item_type: Type and resolution for each of the signal samples.
|
;#item_type: Type and resolution for each of the signal samples.
|
||||||
Tracking_1C.item_type=gr_complex
|
Tracking_1C.item_type=gr_complex
|
||||||
|
|
||||||
;#sampling_frequency: Signal Intermediate Frequency in [Hz]
|
;#sampling_frequency: Signal Intermediate Frequency in [Hz]
|
||||||
Tracking_1C.if=0
|
Tracking_1C.if=0
|
||||||
|
;#pll_bw_hz: PLL loop filter bandwidth [Hz]
|
||||||
|
Tracking_1C.pll_bw_hz=30.0;
|
||||||
|
;#dll_bw_hz: DLL loop filter bandwidth [Hz]
|
||||||
|
Tracking_1C.dll_bw_hz=4.0;
|
||||||
|
;#order: PLL/DLL loop filter order [2] or [3]
|
||||||
|
Tracking_1C.order=3;
|
||||||
|
;#early_late_space_chips: correlator early-late space [chips]
|
||||||
|
Tracking_1C.early_late_space_chips=0.5;
|
||||||
;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false]
|
;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false]
|
||||||
Tracking_1C.dump=false
|
Tracking_1C.dump=false
|
||||||
|
|
||||||
;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number.
|
;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number.
|
||||||
Tracking_1C.dump_filename=./tracking_ch_
|
Tracking_1C.dump_filename=./tracking_ch_
|
||||||
|
|
||||||
;#pll_bw_hz: PLL loop filter bandwidth [Hz]
|
|
||||||
Tracking_1C.pll_bw_hz=30.0;
|
|
||||||
|
|
||||||
;#dll_bw_hz: DLL loop filter bandwidth [Hz]
|
|
||||||
Tracking_1C.dll_bw_hz=4.0;
|
|
||||||
|
|
||||||
;#order: PLL/DLL loop filter order [2] or [3]
|
|
||||||
Tracking_1C.order=3;
|
|
||||||
|
|
||||||
;#early_late_space_chips: correlator early-late space [chips]
|
|
||||||
Tracking_1C.early_late_space_chips=0.5;
|
|
||||||
|
|
||||||
;######### TELEMETRY DECODER GPS CONFIG ############
|
;######### TELEMETRY DECODER GPS CONFIG ############
|
||||||
;#implementation: Use [GPS_L1_CA_Telemetry_Decoder] for GPS L1 C/A
|
;#implementation: Use [GPS_L1_CA_Telemetry_Decoder] for GPS L1 C/A
|
||||||
TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder
|
TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder
|
||||||
TelemetryDecoder_1C.dump=false
|
TelemetryDecoder_1C.dump=false
|
||||||
;#decimation factor
|
|
||||||
TelemetryDecoder_1C.decimation_factor=1;
|
|
||||||
|
|
||||||
;######### OBSERVABLES CONFIG ############
|
;######### OBSERVABLES CONFIG ############
|
||||||
;#implementation:
|
;#implementation:
|
||||||
Observables.implementation=Hybrid_Observables
|
Observables.implementation=Hybrid_Observables
|
||||||
|
|
||||||
;#dump: Enable or disable the Observables internal binary data file logging [true] or [false]
|
;#dump: Enable or disable the Observables internal binary data file logging [true] or [false]
|
||||||
Observables.dump=false
|
Observables.dump=false
|
||||||
|
|
||||||
;#dump_filename: Log path and filename.
|
;#dump_filename: Log path and filename.
|
||||||
Observables.dump_filename=./observables.dat
|
Observables.dump_filename=./observables.dat
|
||||||
|
|
||||||
@ -292,35 +261,24 @@ Observables.dump_filename=./observables.dat
|
|||||||
;######### PVT CONFIG ############
|
;######### PVT CONFIG ############
|
||||||
;#implementation: Position Velocity and Time (PVT) implementation:
|
;#implementation: Position Velocity and Time (PVT) implementation:
|
||||||
PVT.implementation=RTKLIB_PVT
|
PVT.implementation=RTKLIB_PVT
|
||||||
|
|
||||||
PVT.positioning_mode=PPP_Static ; options: Single, Static, Kinematic, PPP_Static, PPP_Kinematic
|
PVT.positioning_mode=PPP_Static ; options: Single, Static, Kinematic, PPP_Static, PPP_Kinematic
|
||||||
PVT.iono_model=Broadcast ; options: OFF, Broadcast, SBAS, Iono-Free-LC, Estimate_STEC, IONEX
|
PVT.iono_model=Broadcast ; options: OFF, Broadcast, SBAS, Iono-Free-LC, Estimate_STEC, IONEX
|
||||||
PVT.trop_model=Saastamoinen ; options: OFF, Saastamoinen, SBAS, Estimate_ZTD, Estimate_ZTD_Grad
|
PVT.trop_model=Saastamoinen ; options: OFF, Saastamoinen, SBAS, Estimate_ZTD, Estimate_ZTD_Grad
|
||||||
|
|
||||||
;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms]
|
;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms]
|
||||||
PVT.output_rate_ms=100
|
PVT.output_rate_ms=100
|
||||||
|
|
||||||
;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms.
|
;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms.
|
||||||
PVT.display_rate_ms=500
|
PVT.display_rate_ms=500
|
||||||
|
|
||||||
;# KML, GeoJSON, NMEA and RTCM output configuration
|
;# KML, GeoJSON, NMEA and RTCM output configuration
|
||||||
|
|
||||||
;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump.
|
|
||||||
PVT.dump_filename=./PVT
|
|
||||||
|
|
||||||
;#nmea_dump_filename: NMEA log path and filename
|
;#nmea_dump_filename: NMEA log path and filename
|
||||||
PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea;
|
PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea;
|
||||||
|
|
||||||
;#flag_nmea_tty_port: Enable or disable the NMEA log to a serial TTY port (Can be used with real hardware or virtual one)
|
;#flag_nmea_tty_port: Enable or disable the NMEA log to a serial TTY port (Can be used with real hardware or virtual one)
|
||||||
PVT.flag_nmea_tty_port=false;
|
PVT.flag_nmea_tty_port=false;
|
||||||
|
|
||||||
;#nmea_dump_devname: serial device descriptor for NMEA logging
|
;#nmea_dump_devname: serial device descriptor for NMEA logging
|
||||||
PVT.nmea_dump_devname=/dev/pts/4
|
PVT.nmea_dump_devname=/dev/pts/4
|
||||||
|
|
||||||
PVT.flag_rtcm_server=true
|
PVT.flag_rtcm_server=true
|
||||||
PVT.flag_rtcm_tty_port=false
|
PVT.flag_rtcm_tty_port=false
|
||||||
PVT.rtcm_dump_devname=/dev/pts/1
|
PVT.rtcm_dump_devname=/dev/pts/1
|
||||||
|
|
||||||
|
|
||||||
;#dump: Enable or disable the PVT internal binary data file logging [true] or [false]
|
;#dump: Enable or disable the PVT internal binary data file logging [true] or [false]
|
||||||
PVT.dump=false
|
PVT.dump=false
|
||||||
|
;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump.
|
||||||
|
PVT.dump_filename=./PVT
|
||||||
|
@ -11,36 +11,16 @@ GNSS-SDR.internal_fs_sps=4000000
|
|||||||
|
|
||||||
|
|
||||||
;######### SIGNAL_SOURCE CONFIG ############
|
;######### SIGNAL_SOURCE CONFIG ############
|
||||||
;#implementation: Use [File_Signal_Source] or [UHD_Signal_Source] or [GN3S_Signal_Source] or [Rtlsdr_Signal_Source]
|
|
||||||
SignalSource.implementation=File_Signal_Source
|
SignalSource.implementation=File_Signal_Source
|
||||||
|
|
||||||
;#filename: path to file with the captured GNSS signal samples to be processed
|
;#filename: path to file with the captured GNSS signal samples to be processed
|
||||||
SignalSource.filename=/datalogger/signals/CTTC/2013_04_04_GNSS_SIGNAL_at_CTTC_SPAIN/2013_04_04_GNSS_SIGNAL_at_CTTC_SPAIN.dat ; <- PUT YOUR FILE HERE
|
SignalSource.filename=/datalogger/signals/CTTC/2013_04_04_GNSS_SIGNAL_at_CTTC_SPAIN/2013_04_04_GNSS_SIGNAL_at_CTTC_SPAIN.dat ; <- PUT YOUR FILE HERE
|
||||||
|
|
||||||
;#item_type: Type and resolution for each of the signal samples.
|
|
||||||
;#Use gr_complex for 32 bits float I/Q or short for I/Q interleaved short integer.
|
|
||||||
;#If short is selected you should have to instantiate the Ishort_To_Complex data_type_adapter.
|
|
||||||
|
|
||||||
SignalSource.item_type=ishort
|
SignalSource.item_type=ishort
|
||||||
|
;#sampling_frequency: Original Signal sampling frequency in samples per second
|
||||||
;#sampling_frequency: Original Signal sampling frequency in [Hz]
|
|
||||||
SignalSource.sampling_frequency=4000000
|
SignalSource.sampling_frequency=4000000
|
||||||
|
|
||||||
;#freq: RF front-end center frequency in [Hz]
|
|
||||||
SignalSource.freq=1575420000
|
|
||||||
|
|
||||||
;#samples: Number of samples to be processed. Notice that 0 indicates the entire file.
|
;#samples: Number of samples to be processed. Notice that 0 indicates the entire file.
|
||||||
SignalSource.samples=0
|
SignalSource.samples=0
|
||||||
|
;#repeat: Repeat the processing file.
|
||||||
;#repeat: Repeat the processing file. Disable this option in this version
|
|
||||||
SignalSource.repeat=false
|
SignalSource.repeat=false
|
||||||
|
|
||||||
;#dump: Dump the Signal source data to a file. Disable this option in this version
|
|
||||||
SignalSource.dump=false
|
|
||||||
|
|
||||||
SignalSource.dump_filename=../data/signal_source.dat
|
|
||||||
|
|
||||||
|
|
||||||
;#enable_throttle_control: Enabling this option tells the signal source to keep the delay between samples in post processing.
|
;#enable_throttle_control: Enabling this option tells the signal source to keep the delay between samples in post processing.
|
||||||
; it helps to not overload the CPU, but the processing time will be longer.
|
; it helps to not overload the CPU, but the processing time will be longer.
|
||||||
SignalSource.enable_throttle_control=false
|
SignalSource.enable_throttle_control=false
|
||||||
@ -75,20 +55,15 @@ DataTypeAdapter.dump_filename=../data/data_type_adapter.dat
|
|||||||
;InputFilter.implementation=Freq_Xlating_Fir_Filter
|
;InputFilter.implementation=Freq_Xlating_Fir_Filter
|
||||||
InputFilter.implementation=Pass_Through
|
InputFilter.implementation=Pass_Through
|
||||||
|
|
||||||
;#dump: Dump the filtered data to a file.
|
|
||||||
InputFilter.dump=false
|
|
||||||
|
|
||||||
;#dump_filename: Log path and filename.
|
|
||||||
InputFilter.dump_filename=../data/input_filter.dat
|
|
||||||
|
|
||||||
;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation.
|
;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation.
|
||||||
;#These options are based on parameters of gnuradio's function: gr_remez.
|
;#These options are based on parameters of gnuradio's function: gr_remez.
|
||||||
;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges, the desired reponse on those bands, and the weight given to the error in those bands.
|
;#This function calculates the optimal (in the Chebyshev/minimax sense) FIR filter impulse response given a set of band edges,
|
||||||
|
;#the desired response on those bands, and the weight given to the error in those bands.
|
||||||
|
|
||||||
;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version.
|
;#input_item_type: Type and resolution for input signal samples
|
||||||
InputFilter.input_item_type=gr_complex
|
InputFilter.input_item_type=gr_complex
|
||||||
|
|
||||||
;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version.
|
;#outut_item_type: Type and resolution for output filtered signal samples.
|
||||||
InputFilter.output_item_type=gr_complex
|
InputFilter.output_item_type=gr_complex
|
||||||
|
|
||||||
;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version.
|
;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version.
|
||||||
@ -136,6 +111,11 @@ InputFilter.grid_density=16
|
|||||||
InputFilter.sampling_frequency=4000000
|
InputFilter.sampling_frequency=4000000
|
||||||
InputFilter.IF=0
|
InputFilter.IF=0
|
||||||
|
|
||||||
|
;#dump: Dump the filtered data to a file.
|
||||||
|
InputFilter.dump=false
|
||||||
|
|
||||||
|
;#dump_filename: Log path and filename.
|
||||||
|
InputFilter.dump_filename=../data/input_filter.dat
|
||||||
|
|
||||||
|
|
||||||
;######### RESAMPLER CONFIG ############
|
;######### RESAMPLER CONFIG ############
|
||||||
@ -146,21 +126,17 @@ InputFilter.IF=0
|
|||||||
;#[Direct_Resampler] enables a resampler that implements a nearest neigbourhood interpolation
|
;#[Direct_Resampler] enables a resampler that implements a nearest neigbourhood interpolation
|
||||||
;Resampler.implementation=Direct_Resampler
|
;Resampler.implementation=Direct_Resampler
|
||||||
Resampler.implementation=Pass_Through
|
Resampler.implementation=Pass_Through
|
||||||
|
;#item_type: Type and resolution for each of the signal samples.
|
||||||
|
Resampler.item_type=gr_complex
|
||||||
|
;#sample_freq_in: the sample frequency of the input signal
|
||||||
|
Resampler.sample_freq_in=4000000
|
||||||
|
;#sample_freq_out: the desired sample frequency of the output signal
|
||||||
|
Resampler.sample_freq_out=4000000
|
||||||
;#dump: Dump the resamplered data to a file.
|
;#dump: Dump the resamplered data to a file.
|
||||||
Resampler.dump=false
|
Resampler.dump=false
|
||||||
;#dump_filename: Log path and filename.
|
;#dump_filename: Log path and filename.
|
||||||
Resampler.dump_filename=../data/resampler.dat
|
Resampler.dump_filename=../data/resampler.dat
|
||||||
|
|
||||||
;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
|
|
||||||
Resampler.item_type=gr_complex
|
|
||||||
|
|
||||||
;#sample_freq_in: the sample frequency of the input signal
|
|
||||||
Resampler.sample_freq_in=4000000
|
|
||||||
|
|
||||||
;#sample_freq_out: the desired sample frequency of the output signal
|
|
||||||
Resampler.sample_freq_out=4000000
|
|
||||||
|
|
||||||
|
|
||||||
;######### CHANNELS GLOBAL CONFIG ############
|
;######### CHANNELS GLOBAL CONFIG ############
|
||||||
;#count: Number of available satellite channels.
|
;#count: Number of available satellite channels.
|
||||||
@ -195,22 +171,20 @@ Channel4.satellite=32
|
|||||||
Channel4.repeat_satellite=false
|
Channel4.repeat_satellite=false
|
||||||
|
|
||||||
;######### ACQUISITION GLOBAL CONFIG ############_1C
|
;######### ACQUISITION GLOBAL CONFIG ############_1C
|
||||||
|
Acquisition_1C.implementation=GPS_L1_CA_PCPS_QuickSync_Acquisition
|
||||||
;#dump: Enable or disable the acquisition internal data file logging [true] or [false]
|
;#item_type: Type and resolution for each of the signal samples.
|
||||||
Acquisition_1C.dump=true
|
|
||||||
;#filename: Log path and filename
|
|
||||||
;Acquisition_1C.dump_filename=./acq_dump.dat
|
|
||||||
;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
|
|
||||||
Acquisition_1C.item_type=gr_complex
|
Acquisition_1C.item_type=gr_complex
|
||||||
;#if: Signal intermediate frequency in [Hz]
|
;#if: Signal intermediate frequency in [Hz]
|
||||||
Acquisition_1C.if=0
|
Acquisition_1C.if=0
|
||||||
;#sampled_ms: Signal block duration for the acquisition signal detection [ms]
|
;#sampled_ms: Signal block duration for the acquisition signal detection [ms]
|
||||||
Acquisition_1C.coherent-integration_time_ms=4
|
Acquisition_1C.coherent-integration_time_ms=4
|
||||||
|
;#dump: Enable or disable the acquisition internal data file logging [true] or [false]
|
||||||
|
Acquisition_1C.dump=true
|
||||||
|
;#filename: Log path and filename
|
||||||
|
;Acquisition_1C.dump_filename=./acq_dump.dat
|
||||||
|
|
||||||
Acquisition_1C.implementation=GPS_L1_CA_PCPS_QuickSync_Acquisition
|
|
||||||
|
|
||||||
;######### ACQUISITION CHANNELS CONFIG ######
|
;######### ACQUISITION CHANNELS CONFIG ######
|
||||||
;#implementation: Acquisition algorithm selection for this channel: [GPS_L1_CA_PCPS_Acquisition]
|
|
||||||
Acquisition_1C.implementation=GPS_L1_CA_PCPS_QuickSync_Acquisition
|
Acquisition_1C.implementation=GPS_L1_CA_PCPS_QuickSync_Acquisition
|
||||||
;#threshold: Acquisition threshold
|
;#threshold: Acquisition threshold
|
||||||
Acquisition_1C.threshold=0.4
|
Acquisition_1C.threshold=0.4
|
||||||
@ -222,45 +196,36 @@ Acquisition_1C.doppler_step=250
|
|||||||
|
|
||||||
|
|
||||||
;######### TRACKING GLOBAL CONFIG ############
|
;######### TRACKING GLOBAL CONFIG ############
|
||||||
|
|
||||||
;#implementation: Selected tracking algorithm: [GPS_L1_CA_DLL_PLL_Tracking] or [GPS_L1_CA_DLL_PLL_C_Aid_Tracking]
|
|
||||||
Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking
|
Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking
|
||||||
;#item_type: Type and resolution for each of the signal samples. Use only [gr_complex] in this version.
|
;#item_type: Type and resolution for each of the signal samples.
|
||||||
Tracking_1C.item_type=gr_complex
|
Tracking_1C.item_type=gr_complex
|
||||||
|
|
||||||
;#sampling_frequency: Signal Intermediate Frequency in [Hz]
|
;#sampling_frequency: Signal Intermediate Frequency in [Hz]
|
||||||
Tracking_1C.if=0
|
Tracking_1C.if=0
|
||||||
|
;#pll_bw_hz: PLL loop filter bandwidth [Hz]
|
||||||
|
Tracking_1C.pll_bw_hz=50.0;
|
||||||
|
;#dll_bw_hz: DLL loop filter bandwidth [Hz]
|
||||||
|
Tracking_1C.dll_bw_hz=4.0;
|
||||||
|
;#order: PLL/DLL loop filter order [2] or [3]
|
||||||
|
Tracking_1C.order=3;
|
||||||
|
;#early_late_space_chips: correlator early-late space [chips]. Use [0.5]
|
||||||
|
Tracking_1C.early_late_space_chips=0.5
|
||||||
;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false]
|
;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false]
|
||||||
Tracking_1C.dump=false
|
Tracking_1C.dump=false
|
||||||
|
|
||||||
;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number.
|
;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number.
|
||||||
Tracking_1C.dump_filename=./tracking_ch_
|
Tracking_1C.dump_filename=./tracking_ch_
|
||||||
|
|
||||||
;#pll_bw_hz: PLL loop filter bandwidth [Hz]
|
|
||||||
Tracking_1C.pll_bw_hz=50.0;
|
|
||||||
|
|
||||||
;#dll_bw_hz: DLL loop filter bandwidth [Hz]
|
|
||||||
Tracking_1C.dll_bw_hz=4.0;
|
|
||||||
|
|
||||||
;#order: PLL/DLL loop filter order [2] or [3]
|
|
||||||
Tracking_1C.order=3;
|
|
||||||
|
|
||||||
;#early_late_space_chips: correlator early-late space [chips]. Use [0.5]
|
|
||||||
Tracking_1C.early_late_space_chips=0.5;
|
|
||||||
|
|
||||||
;######### TELEMETRY DECODER CONFIG ############
|
;######### TELEMETRY DECODER CONFIG ############
|
||||||
;#implementation: Use [GPS_L1_CA_Telemetry_Decoder] for GPS L1 C/A.
|
;#implementation: Use [GPS_L1_CA_Telemetry_Decoder] for GPS L1 C/A.
|
||||||
TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder
|
TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder
|
||||||
TelemetryDecoder_1C.dump=false
|
TelemetryDecoder_1C.dump=false
|
||||||
|
|
||||||
|
|
||||||
;######### OBSERVABLES CONFIG ############
|
;######### OBSERVABLES CONFIG ############
|
||||||
;#implementation:
|
;#implementation:
|
||||||
Observables.implementation=Hybrid_Observables
|
Observables.implementation=Hybrid_Observables
|
||||||
|
|
||||||
;#dump: Enable or disable the Observables internal binary data file logging [true] or [false]
|
;#dump: Enable or disable the Observables internal binary data file logging [true] or [false]
|
||||||
Observables.dump=false
|
Observables.dump=false
|
||||||
|
|
||||||
;#dump_filename: Log path and filename.
|
;#dump_filename: Log path and filename.
|
||||||
Observables.dump_filename=./observables.dat
|
Observables.dump_filename=./observables.dat
|
||||||
|
|
||||||
@ -268,26 +233,20 @@ Observables.dump_filename=./observables.dat
|
|||||||
;######### PVT CONFIG ############
|
;######### PVT CONFIG ############
|
||||||
;#implementation: Position Velocity and Time (PVT) implementation:
|
;#implementation: Position Velocity and Time (PVT) implementation:
|
||||||
PVT.implementation=RTKLIB_PVT
|
PVT.implementation=RTKLIB_PVT
|
||||||
|
|
||||||
PVT.positioning_mode=PPP_Static ; options: Single, Static, Kinematic, PPP_Static, PPP_Kinematic
|
PVT.positioning_mode=PPP_Static ; options: Single, Static, Kinematic, PPP_Static, PPP_Kinematic
|
||||||
PVT.iono_model=Broadcast ; options: OFF, Broadcast, SBAS, Iono-Free-LC, Estimate_STEC, IONEX
|
PVT.iono_model=Broadcast ; options: OFF, Broadcast, SBAS, Iono-Free-LC, Estimate_STEC, IONEX
|
||||||
PVT.trop_model=Saastamoinen ; options: OFF, Saastamoinen, SBAS, Estimate_ZTD, Estimate_ZTD_Grad
|
PVT.trop_model=Saastamoinen ; options: OFF, Saastamoinen, SBAS, Estimate_ZTD, Estimate_ZTD_Grad
|
||||||
|
;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1 ms) [ms]
|
||||||
;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms]
|
|
||||||
PVT.output_rate_ms=100;
|
PVT.output_rate_ms=100;
|
||||||
|
|
||||||
;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms.
|
;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms.
|
||||||
PVT.display_rate_ms=500;
|
PVT.display_rate_ms=500;
|
||||||
|
|
||||||
;#dump: Enable or disable the PVT internal binary data file logging [true] or [false]
|
|
||||||
PVT.dump=false
|
|
||||||
|
|
||||||
;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump.
|
|
||||||
PVT.dump_filename=./PVT
|
|
||||||
|
|
||||||
PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea
|
PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea
|
||||||
PVT.flag_nmea_tty_port=true
|
PVT.flag_nmea_tty_port=true
|
||||||
PVT.nmea_dump_devname=/dev/pts/4
|
PVT.nmea_dump_devname=/dev/pts/4
|
||||||
PVT.flag_rtcm_server=false
|
PVT.flag_rtcm_server=false
|
||||||
PVT.flag_rtcm_tty_port=false
|
PVT.flag_rtcm_tty_port=false
|
||||||
PVT.rtcm_dump_devname=/dev/pts/1
|
PVT.rtcm_dump_devname=/dev/pts/1
|
||||||
|
;#dump: Enable or disable the PVT internal binary data file logging [true] or [false]
|
||||||
|
PVT.dump=false
|
||||||
|
;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump.
|
||||||
|
PVT.dump_filename=./PVT
|
||||||
|
@ -86,18 +86,18 @@ Channel.signal=1C
|
|||||||
|
|
||||||
|
|
||||||
;######### ACQUISITION GLOBAL CONFIG ############
|
;######### ACQUISITION GLOBAL CONFIG ############
|
||||||
Acquisition_1C.dump=false
|
Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition_Fine_Doppler
|
||||||
Acquisition_1C.dump_filename=./acq_dump.dat
|
|
||||||
Acquisition_1C.item_type=gr_complex
|
Acquisition_1C.item_type=gr_complex
|
||||||
Acquisition_1C.if=0
|
Acquisition_1C.if=0
|
||||||
Acquisition_1C.sampled_ms=1
|
Acquisition_1C.sampled_ms=1
|
||||||
Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition_Fine_Doppler
|
|
||||||
Acquisition_1C.threshold=0.015
|
Acquisition_1C.threshold=0.015
|
||||||
;Acquisition_1C.pfa=0.0001
|
;Acquisition_1C.pfa=0.0001
|
||||||
Acquisition_1C.doppler_max=10000
|
Acquisition_1C.doppler_max=10000
|
||||||
Acquisition_1C.doppler_min=-10000
|
Acquisition_1C.doppler_min=-10000
|
||||||
Acquisition_1C.doppler_step=500
|
Acquisition_1C.doppler_step=500
|
||||||
Acquisition_1C.max_dwells=15
|
Acquisition_1C.max_dwells=15
|
||||||
|
Acquisition_1C.dump=false
|
||||||
|
Acquisition_1C.dump_filename=./acq_dump.dat
|
||||||
|
|
||||||
|
|
||||||
;######### TRACKING GLOBAL CONFIG ############
|
;######### TRACKING GLOBAL CONFIG ############
|
||||||
@ -111,11 +111,13 @@ Tracking_1C.dll_bw_hz=2.0;
|
|||||||
Tracking_1C.order=3;
|
Tracking_1C.order=3;
|
||||||
Tracking_1C.early_late_space_chips=0.5;
|
Tracking_1C.early_late_space_chips=0.5;
|
||||||
|
|
||||||
|
|
||||||
;######### TELEMETRY DECODER GPS CONFIG ############
|
;######### TELEMETRY DECODER GPS CONFIG ############
|
||||||
TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder
|
TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder
|
||||||
TelemetryDecoder_1C.dump=false
|
TelemetryDecoder_1C.dump=false
|
||||||
TelemetryDecoder_1C.decimation_factor=1;
|
TelemetryDecoder_1C.decimation_factor=1;
|
||||||
|
|
||||||
|
|
||||||
;######### OBSERVABLES CONFIG ############
|
;######### OBSERVABLES CONFIG ############
|
||||||
Observables.implementation=Hybrid_Observables
|
Observables.implementation=Hybrid_Observables
|
||||||
Observables.dump=false
|
Observables.dump=false
|
||||||
|
@ -14,11 +14,8 @@ SignalSource.implementation=File_Signal_Source
|
|||||||
SignalSource.filename=/home/javier/gnss/gnss-simulator/build/signal_out.bin ; <- PUT YOUR FILE HERE
|
SignalSource.filename=/home/javier/gnss/gnss-simulator/build/signal_out.bin ; <- PUT YOUR FILE HERE
|
||||||
SignalSource.item_type=byte
|
SignalSource.item_type=byte
|
||||||
SignalSource.sampling_frequency=2600000
|
SignalSource.sampling_frequency=2600000
|
||||||
SignalSource.freq=1575420000
|
|
||||||
SignalSource.samples=0
|
SignalSource.samples=0
|
||||||
SignalSource.repeat=false
|
SignalSource.repeat=false
|
||||||
SignalSource.dump=false
|
|
||||||
SignalSource.dump_filename=../data/signal_source.dat
|
|
||||||
SignalSource.enable_throttle_control=false
|
SignalSource.enable_throttle_control=false
|
||||||
|
|
||||||
|
|
||||||
@ -26,45 +23,56 @@ SignalSource.enable_throttle_control=false
|
|||||||
SignalConditioner.implementation=Signal_Conditioner
|
SignalConditioner.implementation=Signal_Conditioner
|
||||||
|
|
||||||
;######### DATA_TYPE_ADAPTER CONFIG ############
|
;######### DATA_TYPE_ADAPTER CONFIG ############
|
||||||
;## Changes the type of input data. Please disable it in this version.
|
;## Changes the type of input data.
|
||||||
;#implementation: [Pass_Through] disables this block
|
;#implementation: [Pass_Through] disables this block
|
||||||
DataTypeAdapter.implementation=Ibyte_To_Complex
|
DataTypeAdapter.implementation=Ibyte_To_Complex
|
||||||
DataTypeAdapter.dump=false
|
DataTypeAdapter.dump=false
|
||||||
;#dump_filename: Log path and filename.
|
;#dump_filename: Log path and filename.
|
||||||
DataTypeAdapter.dump_filename=../data/DataTypeAdapter.dat
|
DataTypeAdapter.dump_filename=../data/DataTypeAdapter.dat
|
||||||
|
|
||||||
|
InputFilter.implementation=Pass_Through
|
||||||
|
InputFilter.input_item_type=gr_complex
|
||||||
|
InputFilter.output_item_type=gr_complex
|
||||||
|
|
||||||
|
Resampler.implementation=Pass_Through
|
||||||
|
Resampler.item_type=gr_complex
|
||||||
|
|
||||||
|
|
||||||
;######### CHANNELS GLOBAL CONFIG ############
|
;######### CHANNELS GLOBAL CONFIG ############
|
||||||
Channels_1C.count=8
|
Channels_1C.count=5
|
||||||
Channels.in_acquisition=1
|
Channels.in_acquisition=1
|
||||||
Channel.signal=1C
|
Channel.signal=1C
|
||||||
|
|
||||||
|
|
||||||
;######### ACQUISITION GLOBAL CONFIG ############
|
;######### ACQUISITION GLOBAL CONFIG ############
|
||||||
Acquisition_1C.dump=false
|
Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition
|
||||||
Acquisition_1C.dump_filename=./acq_dump.dat
|
|
||||||
Acquisition_1C.item_type=gr_complex
|
Acquisition_1C.item_type=gr_complex
|
||||||
Acquisition_1C.if=0
|
Acquisition_1C.if=0
|
||||||
Acquisition_1C.sampled_ms=1
|
Acquisition_1C.sampled_ms=1
|
||||||
Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition
|
|
||||||
Acquisition_1C.threshold=0.05
|
Acquisition_1C.threshold=0.05
|
||||||
;Acquisition_1C.pfa=0.01
|
;Acquisition_1C.pfa=0.01
|
||||||
Acquisition_1C.doppler_max=10000
|
Acquisition_1C.doppler_max=10000
|
||||||
Acquisition_1C.doppler_step=250
|
Acquisition_1C.doppler_step=250
|
||||||
|
Acquisition_1C.dump=false
|
||||||
|
Acquisition_1C.dump_filename=./acq_dump.dat
|
||||||
|
|
||||||
|
|
||||||
;######### TRACKING GLOBAL CONFIG ############
|
;######### TRACKING GLOBAL CONFIG ############
|
||||||
Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_C_Aid_Tracking
|
Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_C_Aid_Tracking
|
||||||
Tracking_1C.item_type=gr_complex
|
Tracking_1C.item_type=gr_complex
|
||||||
Tracking_1C.if=0
|
Tracking_1C.if=0
|
||||||
Tracking_1C.dump=false
|
|
||||||
Tracking_1C.dump_filename=../data/epl_tracking_ch_
|
|
||||||
Tracking_1C.pll_bw_hz=25.0;
|
Tracking_1C.pll_bw_hz=25.0;
|
||||||
Tracking_1C.dll_bw_hz=1.0;
|
Tracking_1C.dll_bw_hz=1.0;
|
||||||
Tracking_1C.order=3;
|
Tracking_1C.order=3;
|
||||||
|
Tracking_1C.dump=false
|
||||||
|
Tracking_1C.dump_filename=../data/epl_tracking_c
|
||||||
|
|
||||||
|
|
||||||
;######### TELEMETRY DECODER GPS CONFIG ############
|
;######### TELEMETRY DECODER GPS CONFIG ############
|
||||||
TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder
|
TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder
|
||||||
TelemetryDecoder_1C.dump=false
|
TelemetryDecoder_1C.dump=false
|
||||||
|
|
||||||
|
|
||||||
;######### OBSERVABLES CONFIG ############
|
;######### OBSERVABLES CONFIG ############
|
||||||
Observables.implementation=Hybrid_Observables
|
Observables.implementation=Hybrid_Observables
|
||||||
Observables.dump=false
|
Observables.dump=false
|
||||||
|
@ -13,8 +13,6 @@ GNSS-SDR.internal_fs_sps=4000000
|
|||||||
SignalSource.implementation=File_Signal_Source
|
SignalSource.implementation=File_Signal_Source
|
||||||
SignalSource.filename=/datalogger/signals/Agilent/New York/4msps.dat ; <- PUT YOUR FILE HERE
|
SignalSource.filename=/datalogger/signals/Agilent/New York/4msps.dat ; <- PUT YOUR FILE HERE
|
||||||
SignalSource.item_type=gr_complex
|
SignalSource.item_type=gr_complex
|
||||||
SignalSource.sampling_frequency=4000000
|
|
||||||
SignalSource.freq=1575420000
|
|
||||||
SignalSource.samples=250000000
|
SignalSource.samples=250000000
|
||||||
SignalSource.repeat=false
|
SignalSource.repeat=false
|
||||||
SignalSource.dump=false
|
SignalSource.dump=false
|
||||||
@ -33,16 +31,17 @@ Channel.signal=1C
|
|||||||
|
|
||||||
|
|
||||||
;######### ACQUISITION GLOBAL CONFIG ############
|
;######### ACQUISITION GLOBAL CONFIG ############
|
||||||
Acquisition_1C.dump=false
|
Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition
|
||||||
Acquisition_1C.dump_filename=./acq_dump.dat
|
|
||||||
Acquisition_1C.item_type=gr_complex
|
Acquisition_1C.item_type=gr_complex
|
||||||
Acquisition_1C.if=0
|
Acquisition_1C.if=0
|
||||||
Acquisition_1C.sampled_ms=1
|
Acquisition_1C.sampled_ms=1
|
||||||
Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition
|
|
||||||
Acquisition_1C.threshold=0.005
|
Acquisition_1C.threshold=0.005
|
||||||
;Acquisition_1C.pfa=0.01
|
;Acquisition_1C.pfa=0.01
|
||||||
Acquisition_1C.doppler_max=10000
|
Acquisition_1C.doppler_max=10000
|
||||||
Acquisition_1C.doppler_step=500
|
Acquisition_1C.doppler_step=500
|
||||||
|
Acquisition_1C.dump=false
|
||||||
|
Acquisition_1C.dump_filename=./acq_dump.dat
|
||||||
|
|
||||||
|
|
||||||
;######### TRACKING GLOBAL CONFIG ############
|
;######### TRACKING GLOBAL CONFIG ############
|
||||||
Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking_GPU
|
Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking_GPU
|
||||||
@ -54,10 +53,12 @@ Tracking_1C.pll_bw_hz=45.0;
|
|||||||
Tracking_1C.dll_bw_hz=2.0;
|
Tracking_1C.dll_bw_hz=2.0;
|
||||||
Tracking_1C.order=3;
|
Tracking_1C.order=3;
|
||||||
|
|
||||||
|
|
||||||
;######### TELEMETRY DECODER GPS CONFIG ############
|
;######### TELEMETRY DECODER GPS CONFIG ############
|
||||||
TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder
|
TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder
|
||||||
TelemetryDecoder_1C.dump=false
|
TelemetryDecoder_1C.dump=false
|
||||||
|
|
||||||
|
|
||||||
;######### OBSERVABLES CONFIG ############
|
;######### OBSERVABLES CONFIG ############
|
||||||
Observables.implementation=Hybrid_Observables
|
Observables.implementation=Hybrid_Observables
|
||||||
Observables.dump=false
|
Observables.dump=false
|
||||||
|
@ -13,10 +13,9 @@ ControlThread.wait_for_flowgraph=false
|
|||||||
|
|
||||||
;######### SIGNAL_SOURCE CONFIG ############
|
;######### SIGNAL_SOURCE CONFIG ############
|
||||||
SignalSource.implementation=File_Signal_Source
|
SignalSource.implementation=File_Signal_Source
|
||||||
SignalSource.filename=/Users/carlesfernandez/Documents/workspace/code2/trunk/data/2013_04_04_GNSS_SIGNAL_at_CTTC_SPAIN.dat ;/datalogger/signals/CTTC/2013_04_04_GNSS_SIGNAL_at_CTTC_SPAIN/2013_04_04_GNSS_SIGNAL_at_CTTC_SPAIN.dat ; <- PUT YOUR FILE HERE
|
SignalSource.filename=/archive/2013_04_04_GNSS_SIGNAL_at_CTTC_SPAIN.dat ;/datalogger/signals/CTTC/2013_04_04_GNSS_SIGNAL_at_CTTC_SPAIN/2013_04_04_GNSS_SIGNAL_at_CTTC_SPAIN.dat ; <- PUT YOUR FILE HERE
|
||||||
SignalSource.item_type=ishort
|
SignalSource.item_type=ishort
|
||||||
SignalSource.sampling_frequency=4000000
|
SignalSource.sampling_frequency=4000000
|
||||||
SignalSource.freq=1575420000
|
|
||||||
SignalSource.samples=0
|
SignalSource.samples=0
|
||||||
SignalSource.repeat=false
|
SignalSource.repeat=false
|
||||||
SignalSource.dump=false
|
SignalSource.dump=false
|
||||||
@ -45,16 +44,13 @@ Resampler.item_type=cshort
|
|||||||
Channels_1C.count=8
|
Channels_1C.count=8
|
||||||
Channels.in_acquisition=1
|
Channels.in_acquisition=1
|
||||||
Channel.signal=1C
|
Channel.signal=1C
|
||||||
;Channel.item_type=cshort
|
|
||||||
|
|
||||||
|
|
||||||
;######### ACQUISITION GLOBAL CONFIG ############
|
;######### ACQUISITION GLOBAL CONFIG ############
|
||||||
Acquisition_1C.dump=false
|
Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition
|
||||||
Acquisition_1C.dump_filename=./acq_dump.dat
|
|
||||||
Acquisition_1C.item_type=cshort
|
Acquisition_1C.item_type=cshort
|
||||||
Acquisition_1C.if=0
|
Acquisition_1C.if=0
|
||||||
Acquisition_1C.sampled_ms=1
|
Acquisition_1C.sampled_ms=1
|
||||||
Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition
|
|
||||||
Acquisition_1C.threshold=0.008
|
Acquisition_1C.threshold=0.008
|
||||||
;Acquisition_1C.pfa=0.000001
|
;Acquisition_1C.pfa=0.000001
|
||||||
Acquisition_1C.doppler_max=10000
|
Acquisition_1C.doppler_max=10000
|
||||||
@ -62,6 +58,9 @@ Acquisition_1C.doppler_step=250
|
|||||||
Acquisition_1C.tong_init_val=2
|
Acquisition_1C.tong_init_val=2
|
||||||
Acquisition_1C.tong_max_val=10
|
Acquisition_1C.tong_max_val=10
|
||||||
Acquisition_1C.tong_max_dwells=20
|
Acquisition_1C.tong_max_dwells=20
|
||||||
|
Acquisition_1C.dump=false
|
||||||
|
Acquisition_1C.dump_filename=./acq_dump.dat
|
||||||
|
|
||||||
|
|
||||||
;######### TRACKING GLOBAL CONFIG ############
|
;######### TRACKING GLOBAL CONFIG ############
|
||||||
Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_C_Aid_Tracking
|
Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_C_Aid_Tracking
|
||||||
@ -73,11 +72,13 @@ Tracking_1C.pll_bw_hz=40.0;
|
|||||||
Tracking_1C.dll_bw_hz=4.0;
|
Tracking_1C.dll_bw_hz=4.0;
|
||||||
Tracking_1C.order=3;
|
Tracking_1C.order=3;
|
||||||
|
|
||||||
|
|
||||||
;######### TELEMETRY DECODER GPS CONFIG ############
|
;######### TELEMETRY DECODER GPS CONFIG ############
|
||||||
TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder
|
TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder
|
||||||
TelemetryDecoder_1C.dump=false
|
TelemetryDecoder_1C.dump=false
|
||||||
TelemetryDecoder_1C.decimation_factor=1;
|
TelemetryDecoder_1C.decimation_factor=1;
|
||||||
|
|
||||||
|
|
||||||
;######### OBSERVABLES CONFIG ############
|
;######### OBSERVABLES CONFIG ############
|
||||||
Observables.implementation=Hybrid_Observables
|
Observables.implementation=Hybrid_Observables
|
||||||
Observables.dump=false
|
Observables.dump=false
|
||||||
|
@ -31,7 +31,6 @@ SignalSource.implementation=Nsr_File_Signal_Source
|
|||||||
SignalSource.filename=/home/javier/Descargas/RoofTop_FE0_Band1.stream ; <- PUT YOUR FILE HERE
|
SignalSource.filename=/home/javier/Descargas/RoofTop_FE0_Band1.stream ; <- PUT YOUR FILE HERE
|
||||||
SignalSource.item_type=byte
|
SignalSource.item_type=byte
|
||||||
SignalSource.sampling_frequency=20480000
|
SignalSource.sampling_frequency=20480000
|
||||||
SignalSource.freq=1575420000
|
|
||||||
SignalSource.samples=0
|
SignalSource.samples=0
|
||||||
SignalSource.repeat=false
|
SignalSource.repeat=false
|
||||||
SignalSource.dump=false
|
SignalSource.dump=false
|
||||||
@ -89,71 +88,69 @@ Channels.in_acquisition=1
|
|||||||
|
|
||||||
|
|
||||||
;######### GPS ACQUISITION CONFIG ############
|
;######### GPS ACQUISITION CONFIG ############
|
||||||
Acquisition_1C.dump=false
|
Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition
|
||||||
Acquisition_1C.dump_filename=./acq_dump.dat
|
|
||||||
Acquisition_1C.item_type=gr_complex
|
Acquisition_1C.item_type=gr_complex
|
||||||
Acquisition_1C.if=0
|
Acquisition_1C.if=0
|
||||||
Acquisition_1C.sampled_ms=1
|
Acquisition_1C.sampled_ms=1
|
||||||
Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition
|
|
||||||
Acquisition_1C.threshold=0.0075
|
Acquisition_1C.threshold=0.0075
|
||||||
;Acquisition_1C.pfa=0.01
|
;Acquisition_1C.pfa=0.01
|
||||||
Acquisition_1C.doppler_max=10000
|
Acquisition_1C.doppler_max=10000
|
||||||
Acquisition_1C.doppler_step=500
|
Acquisition_1C.doppler_step=500
|
||||||
|
Acquisition_1C.dump=false
|
||||||
|
Acquisition_1C.dump_filename=./acq_dump.dat
|
||||||
|
|
||||||
Acquisition_2S.dump=false
|
Acquisition_2S.implementation=GPS_L2_M_PCPS_Acquisition
|
||||||
Acquisition_2S.dump_filename=./acq_dump.dat
|
|
||||||
Acquisition_2S.item_type=gr_complex
|
Acquisition_2S.item_type=gr_complex
|
||||||
Acquisition_2S.if=0
|
Acquisition_2S.if=0
|
||||||
Acquisition_2S.coherent_integration_time_ms=20
|
Acquisition_2S.coherent_integration_time_ms=20
|
||||||
Acquisition_2S.implementation=GPS_L2_M_PCPS_Acquisition
|
|
||||||
Acquisition_2S.threshold=0.00045
|
Acquisition_2S.threshold=0.00045
|
||||||
Acquisition_2S.doppler_max=5000
|
Acquisition_2S.doppler_max=5000
|
||||||
Acquisition_2S.doppler_step=100
|
Acquisition_2S.doppler_step=100
|
||||||
Acquisition_2S.bit_transition_flag=false
|
Acquisition_2S.bit_transition_flag=false
|
||||||
Acquisition_2S.max_dwells=1
|
Acquisition_2S.max_dwells=1
|
||||||
|
Acquisition_2S.dump=false
|
||||||
|
Acquisition_2S.dump_filename=./acq_dump.dat
|
||||||
|
|
||||||
|
|
||||||
;######### TRACKING GPS CONFIG ############
|
;######### TRACKING GPS CONFIG ############
|
||||||
Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking
|
Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking
|
||||||
Tracking_1C.item_type=gr_complex
|
Tracking_1C.item_type=gr_complex
|
||||||
Tracking_1C.if=0
|
Tracking_1C.if=0
|
||||||
Tracking_1C.dump=false
|
|
||||||
Tracking_1C.dump_filename=../data/epl_tracking_ch_
|
|
||||||
Tracking_1C.pll_bw_hz=45.0;
|
Tracking_1C.pll_bw_hz=45.0;
|
||||||
Tracking_1C.dll_bw_hz=2.0;
|
Tracking_1C.dll_bw_hz=2.0;
|
||||||
Tracking_1C.order=3;
|
Tracking_1C.order=3;
|
||||||
|
Tracking_1C.dump=false
|
||||||
|
Tracking_1C.dump_filename=../data/epl_tracking_ch_
|
||||||
|
|
||||||
;######### GPS L2C GENERIC TRACKING CONFIG ############
|
;######### GPS L2C GENERIC TRACKING CONFIG ############
|
||||||
Tracking_2S.implementation=GPS_L2_M_DLL_PLL_Tracking
|
Tracking_2S.implementation=GPS_L2_M_DLL_PLL_Tracking
|
||||||
Tracking_2S.item_type=gr_complex
|
Tracking_2S.item_type=gr_complex
|
||||||
Tracking_2S.if=0
|
Tracking_2S.if=0
|
||||||
Tracking_2S.dump=true
|
|
||||||
Tracking_2S.dump_filename=../data/epl_tracking_ch_
|
|
||||||
Tracking_2S.pll_bw_hz=1.5;
|
Tracking_2S.pll_bw_hz=1.5;
|
||||||
Tracking_2S.dll_bw_hz=0.4;
|
Tracking_2S.dll_bw_hz=0.4;
|
||||||
Tracking_2S.order=2;
|
Tracking_2S.order=2;
|
||||||
Tracking_2S.early_late_space_chips=0.5;
|
Tracking_2S.early_late_space_chips=0.5;
|
||||||
|
Tracking_2S.dump=true
|
||||||
|
Tracking_2S.dump_filename=../data/epl_tracking_ch_
|
||||||
|
|
||||||
|
|
||||||
;######### TELEMETRY DECODER GPS CONFIG ############
|
;######### TELEMETRY DECODER GPS CONFIG ############
|
||||||
TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder
|
TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder
|
||||||
TelemetryDecoder_1C.dump=false
|
TelemetryDecoder_1C.dump=false
|
||||||
TelemetryDecoder_1C.decimation_factor=1;
|
|
||||||
|
|
||||||
TelemetryDecoder_2S.implementation=GPS_L2C_Telemetry_Decoder
|
TelemetryDecoder_2S.implementation=GPS_L2C_Telemetry_Decoder
|
||||||
TelemetryDecoder_2S.dump=false
|
TelemetryDecoder_2S.dump=false
|
||||||
TelemetryDecoder_2S.decimation_factor=1;
|
|
||||||
|
|
||||||
;######### OBSERVABLES CONFIG ############
|
;######### OBSERVABLES CONFIG ############
|
||||||
;#implementation:
|
;#implementation:
|
||||||
Observables.implementation=Hybrid_Observables
|
Observables.implementation=Hybrid_Observables
|
||||||
|
|
||||||
;#dump: Enable or disable the Observables internal binary data file logging [true] or [false]
|
;#dump: Enable or disable the Observables internal binary data file logging [true] or [false]
|
||||||
Observables.dump=false
|
Observables.dump=false
|
||||||
|
|
||||||
;#dump_filename: Log path and filename.
|
;#dump_filename: Log path and filename.
|
||||||
Observables.dump_filename=./observables.dat
|
Observables.dump_filename=./observables.dat
|
||||||
|
|
||||||
|
|
||||||
;######### PVT CONFIG ############
|
;######### PVT CONFIG ############
|
||||||
PVT.implementation=RTKLIB_PVT
|
PVT.implementation=RTKLIB_PVT
|
||||||
PVT.positioning_mode=PPP_Static ; options: Single, Static, Kinematic, PPP_Static, PPP_Kinematic
|
PVT.positioning_mode=PPP_Static ; options: Single, Static, Kinematic, PPP_Static, PPP_Kinematic
|
||||||
|
@ -46,7 +46,6 @@ SignalSource.big_endian_bytes=false
|
|||||||
; This setting specifies which of the three cases holds for this data file
|
; This setting specifies which of the three cases holds for this data file
|
||||||
SignalSource.sample_type=real
|
SignalSource.sample_type=real
|
||||||
SignalSource.sampling_frequency=20480000
|
SignalSource.sampling_frequency=20480000
|
||||||
SignalSource.freq=1575420000
|
|
||||||
SignalSource.samples=0
|
SignalSource.samples=0
|
||||||
SignalSource.repeat=false
|
SignalSource.repeat=false
|
||||||
SignalSource.dump=false
|
SignalSource.dump=false
|
||||||
@ -102,37 +101,40 @@ Channel.signal=1C
|
|||||||
|
|
||||||
|
|
||||||
;######### GPS ACQUISITION CONFIG ############
|
;######### GPS ACQUISITION CONFIG ############
|
||||||
Acquisition_1C.dump=false
|
Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition
|
||||||
Acquisition_1C.dump_filename=./acq_dump.dat
|
|
||||||
Acquisition_1C.item_type=gr_complex
|
Acquisition_1C.item_type=gr_complex
|
||||||
Acquisition_1C.if=0
|
Acquisition_1C.if=0
|
||||||
Acquisition_1C.sampled_ms=1
|
Acquisition_1C.sampled_ms=1
|
||||||
Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition
|
|
||||||
Acquisition_1C.threshold=0.0075
|
Acquisition_1C.threshold=0.0075
|
||||||
;Acquisition_1C.pfa=0.01
|
;Acquisition_1C.pfa=0.01
|
||||||
Acquisition_1C.doppler_max=10000
|
Acquisition_1C.doppler_max=10000
|
||||||
Acquisition_1C.doppler_step=500
|
Acquisition_1C.doppler_step=500
|
||||||
|
Acquisition_1C.dump=false
|
||||||
|
Acquisition_1C.dump_filename=./acq_dump.dat
|
||||||
|
|
||||||
|
|
||||||
;######### TRACKING GPS CONFIG ############
|
;######### TRACKING GPS CONFIG ############
|
||||||
Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking
|
Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking
|
||||||
Tracking_1C.item_type=gr_complex
|
Tracking_1C.item_type=gr_complex
|
||||||
Tracking_1C.if=0
|
Tracking_1C.if=0
|
||||||
Tracking_1C.dump=false
|
|
||||||
Tracking_1C.dump_filename=../data/epl_tracking_ch_
|
|
||||||
Tracking_1C.pll_bw_hz=45.0;
|
Tracking_1C.pll_bw_hz=45.0;
|
||||||
Tracking_1C.dll_bw_hz=2.0;
|
Tracking_1C.dll_bw_hz=2.0;
|
||||||
Tracking_1C.order=3;
|
Tracking_1C.order=3;
|
||||||
|
Tracking_1C.dump=false
|
||||||
|
Tracking_1C.dump_filename=../data/epl_tracking_ch_
|
||||||
|
|
||||||
|
|
||||||
;######### TELEMETRY DECODER GPS CONFIG ############
|
;######### TELEMETRY DECODER GPS CONFIG ############
|
||||||
TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder
|
TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder
|
||||||
TelemetryDecoder_1C.dump=false
|
TelemetryDecoder_1C.dump=false
|
||||||
|
|
||||||
|
|
||||||
;######### OBSERVABLES CONFIG ############
|
;######### OBSERVABLES CONFIG ############
|
||||||
Observables.implementation=Hybrid_Observables
|
Observables.implementation=Hybrid_Observables
|
||||||
Observables.dump=false
|
Observables.dump=false
|
||||||
Observables.dump_filename=./observables.dat
|
Observables.dump_filename=./observables.dat
|
||||||
|
|
||||||
|
|
||||||
;######### PVT CONFIG ############
|
;######### PVT CONFIG ############
|
||||||
PVT.implementation=RTKLIB_PVT
|
PVT.implementation=RTKLIB_PVT
|
||||||
PVT.positioning_mode=PPP_Static ; options: Single, Static, Kinematic, PPP_Static, PPP_Kinematic
|
PVT.positioning_mode=PPP_Static ; options: Single, Static, Kinematic, PPP_Static, PPP_Kinematic
|
||||||
|
@ -25,42 +25,21 @@ GNSS-SDR.SUPL_LAC=0x59e2
|
|||||||
GNSS-SDR.SUPL_CI=0x31b0
|
GNSS-SDR.SUPL_CI=0x31b0
|
||||||
|
|
||||||
;######### SIGNAL_SOURCE CONFIG ############
|
;######### SIGNAL_SOURCE CONFIG ############
|
||||||
;#implementation: Use [File_Signal_Source] or [UHD_Signal_Source] or [GN3S_Signal_Source] (experimental)
|
;#implementation
|
||||||
SignalSource.implementation=File_Signal_Source
|
SignalSource.implementation=File_Signal_Source
|
||||||
|
|
||||||
;#When left empty, the device discovery routines will search all vailable transports on the system (ethernet, usb...)
|
|
||||||
SignalSource.device_address=192.168.50.2
|
|
||||||
|
|
||||||
;#filename: path to file with the captured GNSS signal samples to be processed
|
;#filename: path to file with the captured GNSS signal samples to be processed
|
||||||
SignalSource.filename=/home/javier/signals/signal_source_int.dat
|
SignalSource.filename=/home/javier/signals/signal_source_int.dat
|
||||||
|
|
||||||
;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
|
;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
|
||||||
SignalSource.item_type=gr_complex
|
SignalSource.item_type=gr_complex
|
||||||
|
;#sampling_frequency: Original Signal sampling frequency in samples per second
|
||||||
;#sampling_frequency: Original Signal sampling frequency in [Hz]
|
|
||||||
SignalSource.sampling_frequency=2000000
|
SignalSource.sampling_frequency=2000000
|
||||||
|
|
||||||
;#freq: RF front-end center frequency in [Hz]
|
|
||||||
SignalSource.freq=1575420000
|
|
||||||
|
|
||||||
;#gain: Front-end Gain in [dB]
|
|
||||||
SignalSource.gain=40
|
|
||||||
|
|
||||||
;#subdevice: UHD subdevice specification (for USRP1 use A:0 or B:0)
|
|
||||||
SignalSource.subdevice=A:0
|
|
||||||
|
|
||||||
;#samples: Number of samples to be processed. Notice that 0 indicates the entire file.
|
;#samples: Number of samples to be processed. Notice that 0 indicates the entire file.
|
||||||
SignalSource.samples=0
|
SignalSource.samples=0
|
||||||
|
|
||||||
;#repeat: Repeat the processing file. Disable this option in this version
|
;#repeat: Repeat the processing file. Disable this option in this version
|
||||||
SignalSource.repeat=false
|
SignalSource.repeat=false
|
||||||
|
|
||||||
;#dump: Dump the Signal source data to a file. Disable this option in this version
|
;#dump: Dump the Signal source data to a file. Disable this option in this version
|
||||||
SignalSource.dump=false
|
SignalSource.dump=false
|
||||||
|
|
||||||
SignalSource.dump_filename=dump.dat
|
SignalSource.dump_filename=dump.dat
|
||||||
|
|
||||||
|
|
||||||
;#enable_throttle_control: Enabling this option tells the signal source to keep the delay between samples in post processing.
|
;#enable_throttle_control: Enabling this option tells the signal source to keep the delay between samples in post processing.
|
||||||
; it helps to not overload the CPU, but the processing time will be longer.
|
; it helps to not overload the CPU, but the processing time will be longer.
|
||||||
SignalSource.enable_throttle_control=false
|
SignalSource.enable_throttle_control=false
|
||||||
@ -100,12 +79,10 @@ Channel.signal=1C
|
|||||||
|
|
||||||
|
|
||||||
;######### ACQUISITION GLOBAL CONFIG ############
|
;######### ACQUISITION GLOBAL CONFIG ############
|
||||||
Acquisition_1C.dump=false
|
Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition
|
||||||
Acquisition_1C.dump_filename=./acq_dump.dat
|
|
||||||
Acquisition_1C.item_type=gr_complex
|
Acquisition_1C.item_type=gr_complex
|
||||||
Acquisition_1C.if=0
|
Acquisition_1C.if=0
|
||||||
Acquisition_1C.sampled_ms=1
|
Acquisition_1C.sampled_ms=1
|
||||||
Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition
|
|
||||||
;#use_CFAR_algorithm: If enabled, acquisition estimates the input signal power to implement CFAR detection algorithms
|
;#use_CFAR_algorithm: If enabled, acquisition estimates the input signal power to implement CFAR detection algorithms
|
||||||
;#notice that this affects the Acquisition threshold range!
|
;#notice that this affects the Acquisition threshold range!
|
||||||
Acquisition_1C.use_CFAR_algorithm=false;
|
Acquisition_1C.use_CFAR_algorithm=false;
|
||||||
@ -114,50 +91,41 @@ Acquisition_1C.threshold=20
|
|||||||
;Acquisition_1C.pfa=0.01
|
;Acquisition_1C.pfa=0.01
|
||||||
Acquisition_1C.doppler_max=5000
|
Acquisition_1C.doppler_max=5000
|
||||||
Acquisition_1C.doppler_step=250
|
Acquisition_1C.doppler_step=250
|
||||||
|
Acquisition_1C.dump=false
|
||||||
|
Acquisition_1C.dump_filename=./acq_dump.dat
|
||||||
|
|
||||||
|
|
||||||
;######### TRACKING GPS CONFIG ############
|
;######### TRACKING GPS CONFIG ############
|
||||||
|
|
||||||
;#implementation: Selected tracking algorithm: [GPS_L1_CA_DLL_PLL_Tracking] or [GPS_L1_CA_DLL_PLL_C_Aid_Tracking] or [GPS_L1_CA_TCP_CONNECTOR_Tracking] or [Galileo_E1_DLL_PLL_VEML_Tracking]
|
|
||||||
Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_C_Aid_Tracking
|
Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_C_Aid_Tracking
|
||||||
;#item_type: Type and resolution for each of the signal samples. Use only [gr_complex] in this version.
|
;#item_type: Type and resolution for each of the signal samples.
|
||||||
Tracking_1C.item_type=gr_complex
|
Tracking_1C.item_type=gr_complex
|
||||||
|
|
||||||
;#sampling_frequency: Signal Intermediate Frequency in [Hz]
|
;#sampling_frequency: Signal Intermediate Frequency in [Hz]
|
||||||
Tracking_1C.if=0
|
Tracking_1C.if=0
|
||||||
|
|
||||||
;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false]
|
|
||||||
Tracking_1C.dump=true
|
|
||||||
|
|
||||||
;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number.
|
|
||||||
Tracking_1C.dump_filename=../data/epl_tracking_ch_
|
|
||||||
|
|
||||||
;# Extended correlation after telemetry bit synchronization
|
;# Extended correlation after telemetry bit synchronization
|
||||||
;# Valid values are: [1,2,4,5,10,20] (integer divisors of the GPS L1 CA bit period (20 ms) )
|
;# Valid values are: [1,2,4,5,10,20] (integer divisors of the GPS L1 CA bit period (20 ms) )
|
||||||
;# Longer integration period require more stable front-end LO
|
;# Longer integration period require more stable front-end LO
|
||||||
|
|
||||||
Tracking_1C.extend_correlation_ms=10
|
Tracking_1C.extend_correlation_ms=10
|
||||||
|
|
||||||
;#pll_bw_hz: PLL loop filter bandwidth [Hz]
|
;#pll_bw_hz: PLL loop filter bandwidth [Hz]
|
||||||
Tracking_1C.pll_bw_hz=35;
|
Tracking_1C.pll_bw_hz=35;
|
||||||
Tracking_1C.pll_bw_narrow_hz=30;
|
Tracking_1C.pll_bw_narrow_hz=30;
|
||||||
|
|
||||||
;#dll_bw_hz: DLL loop filter bandwidth [Hz]
|
;#dll_bw_hz: DLL loop filter bandwidth [Hz]
|
||||||
Tracking_1C.dll_bw_hz=2.0;
|
Tracking_1C.dll_bw_hz=2.0;
|
||||||
|
|
||||||
Tracking_1C.dll_bw_narrow_hz=1.5;
|
Tracking_1C.dll_bw_narrow_hz=1.5;
|
||||||
|
|
||||||
;#fll_bw_hz: FLL loop filter bandwidth [Hz]
|
;#fll_bw_hz: FLL loop filter bandwidth [Hz]
|
||||||
Tracking_1C.fll_bw_hz=2.0;
|
Tracking_1C.fll_bw_hz=2.0;
|
||||||
|
|
||||||
;#order: PLL/DLL loop filter order [2] or [3]
|
;#order: PLL/DLL loop filter order [2] or [3]
|
||||||
Tracking_1C.order=3;
|
Tracking_1C.order=3;
|
||||||
|
;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false]
|
||||||
|
Tracking_1C.dump=true
|
||||||
|
;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number.
|
||||||
|
Tracking_1C.dump_filename=../data/epl_tracking_ch_
|
||||||
|
|
||||||
|
|
||||||
;######### TELEMETRY DECODER GPS CONFIG ############
|
;######### TELEMETRY DECODER GPS CONFIG ############
|
||||||
TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder
|
TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder
|
||||||
TelemetryDecoder_1C.dump=false
|
TelemetryDecoder_1C.dump=false
|
||||||
|
|
||||||
|
|
||||||
;######### OBSERVABLES CONFIG ############
|
;######### OBSERVABLES CONFIG ############
|
||||||
Observables.implementation=Hybrid_Observables
|
Observables.implementation=Hybrid_Observables
|
||||||
Observables.dump=true
|
Observables.dump=true
|
||||||
|
@ -27,44 +27,31 @@ GNSS-SDR.SUPL_LAC=0x59e2
|
|||||||
GNSS-SDR.SUPL_CI=0x31b0
|
GNSS-SDR.SUPL_CI=0x31b0
|
||||||
|
|
||||||
;######### SIGNAL_SOURCE CONFIG ############
|
;######### SIGNAL_SOURCE CONFIG ############
|
||||||
;#implementation: Use [File_Signal_Source] or [UHD_Signal_Source] or [GN3S_Signal_Source] [Osmosdr_Signal_Source]
|
;#implementation
|
||||||
SignalSource.implementation=RtlTcp_Signal_Source
|
SignalSource.implementation=RtlTcp_Signal_Source
|
||||||
|
|
||||||
;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
|
;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
|
||||||
SignalSource.item_type=gr_complex
|
SignalSource.item_type=gr_complex
|
||||||
|
;#sampling_frequency: Original Signal sampling frequency in samples per second
|
||||||
;#sampling_frequency: Original Signal sampling frequency in [Hz]
|
|
||||||
;FOR USE GNSS-SDR WITH RTLSDR DONGLES USER MUST SET THE CALIBRATED SAMPLE RATE HERE
|
;FOR USE GNSS-SDR WITH RTLSDR DONGLES USER MUST SET THE CALIBRATED SAMPLE RATE HERE
|
||||||
; i.e. using front-end-cal as reported here:http://www.cttc.es/publication/turning-a-television-into-a-gnss-receiver/
|
; i.e. using front-end-cal as reported here:http://www.cttc.es/publication/turning-a-television-into-a-gnss-receiver/
|
||||||
SignalSource.sampling_frequency=1200000
|
SignalSource.sampling_frequency=1200000
|
||||||
|
|
||||||
;#freq: RF front-end center frequency in [Hz]
|
;#freq: RF front-end center frequency in [Hz]
|
||||||
SignalSource.freq=1575420000
|
SignalSource.freq=1575420000
|
||||||
|
|
||||||
;#gain: Front-end overall gain Gain in [dB]
|
;#gain: Front-end overall gain Gain in [dB]
|
||||||
SignalSource.gain=40
|
SignalSource.gain=40
|
||||||
|
|
||||||
;#rf_gain: Front-end RF stage gain in [dB]
|
;#rf_gain: Front-end RF stage gain in [dB]
|
||||||
SignalSource.rf_gain=40
|
SignalSource.rf_gain=40
|
||||||
|
|
||||||
;#rf_gain: Front-end IF stage gain in [dB]
|
;#rf_gain: Front-end IF stage gain in [dB]
|
||||||
SignalSource.if_gain=30
|
SignalSource.if_gain=30
|
||||||
|
|
||||||
;#AGC_enabled: Front-end AGC enabled or disabled
|
;#AGC_enabled: Front-end AGC enabled or disabled
|
||||||
SignalSource.AGC_enabled = false
|
SignalSource.AGC_enabled = false
|
||||||
|
|
||||||
;#samples: Number of samples to be processed. Notice that 0 indicates the entire file.
|
;#samples: Number of samples to be processed. Notice that 0 indicates the entire file.
|
||||||
SignalSource.samples=0
|
SignalSource.samples=0
|
||||||
|
|
||||||
;#repeat: Repeat the processing file. Disable this option in this version
|
;#repeat: Repeat the processing file. Disable this option in this version
|
||||||
SignalSource.repeat=false
|
SignalSource.repeat=false
|
||||||
|
|
||||||
;#dump: Dump the Signal source data to a file. Disable this option in this version
|
;#dump: Dump the Signal source data to a file. Disable this option in this version
|
||||||
SignalSource.dump=false
|
SignalSource.dump=false
|
||||||
|
|
||||||
SignalSource.dump_filename=../data/signal_source.dat
|
SignalSource.dump_filename=../data/signal_source.dat
|
||||||
|
|
||||||
|
|
||||||
;#enable_throttle_control: Enabling this option tells the signal source to keep the delay between samples in post processing.
|
;#enable_throttle_control: Enabling this option tells the signal source to keep the delay between samples in post processing.
|
||||||
; it helps to not overload the CPU, but the processing time will be longer.
|
; it helps to not overload the CPU, but the processing time will be longer.
|
||||||
SignalSource.enable_throttle_control=false
|
SignalSource.enable_throttle_control=false
|
||||||
@ -78,6 +65,7 @@ SignalSource.port=1234
|
|||||||
;# Set to true if I/Q samples come swapped
|
;# Set to true if I/Q samples come swapped
|
||||||
SignalSource.swap_iq=false
|
SignalSource.swap_iq=false
|
||||||
|
|
||||||
|
|
||||||
;######### SIGNAL_CONDITIONER CONFIG ############
|
;######### SIGNAL_CONDITIONER CONFIG ############
|
||||||
;## It holds blocks to change data type, filter and resample input data.
|
;## It holds blocks to change data type, filter and resample input data.
|
||||||
|
|
||||||
@ -87,7 +75,7 @@ SignalSource.swap_iq=false
|
|||||||
SignalConditioner.implementation=Signal_Conditioner
|
SignalConditioner.implementation=Signal_Conditioner
|
||||||
|
|
||||||
;######### DATA_TYPE_ADAPTER CONFIG ############
|
;######### DATA_TYPE_ADAPTER CONFIG ############
|
||||||
;## Changes the type of input data. Please disable it in this version.
|
;## Changes the type of input data.
|
||||||
;#implementation: [Pass_Through] disables this block
|
;#implementation: [Pass_Through] disables this block
|
||||||
DataTypeAdapter.implementation=Pass_Through
|
DataTypeAdapter.implementation=Pass_Through
|
||||||
|
|
||||||
@ -109,12 +97,13 @@ InputFilter.dump_filename=../data/input_filter.dat
|
|||||||
|
|
||||||
;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation.
|
;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation.
|
||||||
;#These options are based on parameters of gnuradio's function: gr_remez.
|
;#These options are based on parameters of gnuradio's function: gr_remez.
|
||||||
;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges, the desired reponse on those bands, and the weight given to the error in those bands.
|
;#This function calculates the optimal (in the Chebyshev/minimax sense) FIR filter impulse response given a set of band edges,
|
||||||
|
;#the desired response on those bands, and the weight given to the error in those bands.
|
||||||
|
|
||||||
;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version.
|
;#input_item_type: Type and resolution for input signal samples.
|
||||||
InputFilter.input_item_type=gr_complex
|
InputFilter.input_item_type=gr_complex
|
||||||
|
|
||||||
;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version.
|
;#outut_item_type: Type and resolution for output filtered signal samples.
|
||||||
InputFilter.output_item_type=gr_complex
|
InputFilter.output_item_type=gr_complex
|
||||||
|
|
||||||
;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version.
|
;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version.
|
||||||
@ -163,6 +152,7 @@ InputFilter.sampling_frequency=1200000
|
|||||||
;# IF deviation due to front-end LO inaccuracies [HZ]
|
;# IF deviation due to front-end LO inaccuracies [HZ]
|
||||||
InputFilter.IF=80558
|
InputFilter.IF=80558
|
||||||
|
|
||||||
|
|
||||||
;######### RESAMPLER CONFIG ############
|
;######### RESAMPLER CONFIG ############
|
||||||
;## Resamples the input data.
|
;## Resamples the input data.
|
||||||
;# DISABLED IN THE RTL-SDR REALTIME
|
;# DISABLED IN THE RTL-SDR REALTIME
|
||||||
@ -170,6 +160,7 @@ InputFilter.IF=80558
|
|||||||
;#[Pass_Through] disables this block
|
;#[Pass_Through] disables this block
|
||||||
Resampler.implementation=Pass_Through
|
Resampler.implementation=Pass_Through
|
||||||
|
|
||||||
|
|
||||||
;######### CHANNELS GLOBAL CONFIG ############
|
;######### CHANNELS GLOBAL CONFIG ############
|
||||||
;#count: Number of available GPS satellite channels.
|
;#count: Number of available GPS satellite channels.
|
||||||
Channels_1C.count=4
|
Channels_1C.count=4
|
||||||
@ -180,19 +171,14 @@ Channel.signal=1C
|
|||||||
|
|
||||||
|
|
||||||
;######### ACQUISITION GLOBAL CONFIG ############
|
;######### ACQUISITION GLOBAL CONFIG ############
|
||||||
|
Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition_Fine_Doppler
|
||||||
;#dump: Enable or disable the acquisition internal data file logging [true] or [false]
|
;#dump: Enable or disable the acquisition internal data file logging [true] or [false]
|
||||||
Acquisition_1C.dump=false
|
|
||||||
;#filename: Log path and filename
|
|
||||||
Acquisition_1C.dump_filename=./acq_dump.dat
|
|
||||||
;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
|
;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
|
||||||
Acquisition_1C.item_type=gr_complex
|
Acquisition_1C.item_type=gr_complex
|
||||||
;#if: Signal intermediate frequency in [Hz]
|
;#if: Signal intermediate frequency in [Hz]
|
||||||
Acquisition_1C.if=0
|
Acquisition_1C.if=0
|
||||||
;#sampled_ms: Signal block duration for the acquisition signal detection [ms]
|
;#sampled_ms: Signal block duration for the acquisition signal detection [ms]
|
||||||
Acquisition_1C.sampled_ms=1
|
Acquisition_1C.sampled_ms=1
|
||||||
;#implementation: Acquisition algorithm selection for this channel: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
|
|
||||||
Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition_Fine_Doppler
|
|
||||||
;#threshold: Acquisition threshold
|
;#threshold: Acquisition threshold
|
||||||
Acquisition_1C.threshold=0.015
|
Acquisition_1C.threshold=0.015
|
||||||
;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
|
;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
|
||||||
@ -205,50 +191,42 @@ Acquisition_1C.doppler_min=-10000
|
|||||||
Acquisition_1C.doppler_step=500
|
Acquisition_1C.doppler_step=500
|
||||||
;#maximum dwells
|
;#maximum dwells
|
||||||
Acquisition_1C.max_dwells=15
|
Acquisition_1C.max_dwells=15
|
||||||
|
Acquisition_1C.dump=false
|
||||||
|
;#filename: Log path and filename
|
||||||
|
Acquisition_1C.dump_filename=./acq_dump.dat
|
||||||
|
|
||||||
|
|
||||||
;######### TRACKING GLOBAL CONFIG ############
|
;######### TRACKING GLOBAL CONFIG ############
|
||||||
|
|
||||||
;#implementation: Selected tracking algorithm: [GPS_L1_CA_DLL_PLL_Tracking] or [GPS_L1_CA_DLL_PLL_C_Aid_Tracking] [GPS_L1_CA_DLL_PLL_Optim_Tracking]
|
|
||||||
Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking
|
Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking
|
||||||
;#item_type: Type and resolution for each of the signal samples.
|
;#item_type: Type and resolution for each of the signal samples.
|
||||||
Tracking_1C.item_type=gr_complex
|
Tracking_1C.item_type=gr_complex
|
||||||
|
|
||||||
;#sampling_frequency: Signal Intermediate Frequency in [Hz]
|
;#sampling_frequency: Signal Intermediate Frequency in [Hz]
|
||||||
Tracking_1C.if=0
|
Tracking_1C.if=0
|
||||||
|
;#pll_bw_hz: PLL loop filter bandwidth [Hz]
|
||||||
|
Tracking_1C.pll_bw_hz=40.0;
|
||||||
|
;#dll_bw_hz: DLL loop filter bandwidth [Hz]
|
||||||
|
Tracking_1C.dll_bw_hz=2.0;
|
||||||
|
;#order: PLL/DLL loop filter order [2] or [3]
|
||||||
|
Tracking_1C.order=3;
|
||||||
|
;#early_late_space_chips: correlator early-late space [chips]. Use [0.5]
|
||||||
|
Tracking_1C.early_late_space_chips=0.5;
|
||||||
;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false]
|
;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false]
|
||||||
Tracking_1C.dump=false
|
Tracking_1C.dump=false
|
||||||
|
|
||||||
;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number.
|
;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number.
|
||||||
Tracking_1C.dump_filename=./tracking_ch_
|
Tracking_1C.dump_filename=./tracking_ch_
|
||||||
|
|
||||||
;#pll_bw_hz: PLL loop filter bandwidth [Hz]
|
|
||||||
Tracking_1C.pll_bw_hz=40.0;
|
|
||||||
|
|
||||||
;#dll_bw_hz: DLL loop filter bandwidth [Hz]
|
|
||||||
Tracking_1C.dll_bw_hz=2.0;
|
|
||||||
|
|
||||||
;#order: PLL/DLL loop filter order [2] or [3]
|
|
||||||
Tracking_1C.order=3;
|
|
||||||
|
|
||||||
;#early_late_space_chips: correlator early-late space [chips]. Use [0.5]
|
|
||||||
Tracking_1C.early_late_space_chips=0.5;
|
|
||||||
|
|
||||||
;######### TELEMETRY DECODER GPS CONFIG ############
|
;######### TELEMETRY DECODER GPS CONFIG ############
|
||||||
;#implementation: Use [GPS_L1_CA_Telemetry_Decoder] for GPS L1 C/A
|
;#implementation: Use [GPS_L1_CA_Telemetry_Decoder] for GPS L1 C/A
|
||||||
TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder
|
TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder
|
||||||
TelemetryDecoder_1C.dump=false
|
TelemetryDecoder_1C.dump=false
|
||||||
;#decimation factor
|
|
||||||
TelemetryDecoder_1C.decimation_factor=1;
|
|
||||||
|
|
||||||
;######### OBSERVABLES CONFIG ############
|
;######### OBSERVABLES CONFIG ############
|
||||||
;#implementation:
|
;#implementation:
|
||||||
Observables.implementation=Hybrid_Observables
|
Observables.implementation=Hybrid_Observables
|
||||||
|
|
||||||
;#dump: Enable or disable the Observables internal binary data file logging [true] or [false]
|
;#dump: Enable or disable the Observables internal binary data file logging [true] or [false]
|
||||||
Observables.dump=false
|
Observables.dump=false
|
||||||
|
|
||||||
;#dump_filename: Log path and filename.
|
;#dump_filename: Log path and filename.
|
||||||
Observables.dump_filename=./observables.dat
|
Observables.dump_filename=./observables.dat
|
||||||
|
|
||||||
@ -259,31 +237,21 @@ PVT.implementation=RTKLIB_PVT
|
|||||||
PVT.positioning_mode=PPP_Static ; options: Single, Static, Kinematic, PPP_Static, PPP_Kinematic
|
PVT.positioning_mode=PPP_Static ; options: Single, Static, Kinematic, PPP_Static, PPP_Kinematic
|
||||||
PVT.iono_model=Broadcast ; options: OFF, Broadcast, SBAS, Iono-Free-LC, Estimate_STEC, IONEX
|
PVT.iono_model=Broadcast ; options: OFF, Broadcast, SBAS, Iono-Free-LC, Estimate_STEC, IONEX
|
||||||
PVT.trop_model=Saastamoinen ; options: OFF, Saastamoinen, SBAS, Estimate_ZTD, Estimate_ZTD_Grad
|
PVT.trop_model=Saastamoinen ; options: OFF, Saastamoinen, SBAS, Estimate_ZTD, Estimate_ZTD_Grad
|
||||||
|
|
||||||
;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms]
|
;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms]
|
||||||
PVT.output_rate_ms=100
|
PVT.output_rate_ms=100
|
||||||
|
|
||||||
;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms.
|
;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms.
|
||||||
PVT.display_rate_ms=500
|
PVT.display_rate_ms=500
|
||||||
|
|
||||||
;# KML, GeoJSON, NMEA and RTCM output configuration
|
;# KML, GeoJSON, NMEA and RTCM output configuration
|
||||||
|
|
||||||
;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump.
|
|
||||||
PVT.dump_filename=./PVT
|
|
||||||
|
|
||||||
;#nmea_dump_filename: NMEA log path and filename
|
;#nmea_dump_filename: NMEA log path and filename
|
||||||
PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea;
|
PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea;
|
||||||
|
|
||||||
;#flag_nmea_tty_port: Enable or disable the NMEA log to a serial TTY port (Can be used with real hardware or virtual one)
|
;#flag_nmea_tty_port: Enable or disable the NMEA log to a serial TTY port (Can be used with real hardware or virtual one)
|
||||||
PVT.flag_nmea_tty_port=false;
|
PVT.flag_nmea_tty_port=false;
|
||||||
|
|
||||||
;#nmea_dump_devname: serial device descriptor for NMEA logging
|
;#nmea_dump_devname: serial device descriptor for NMEA logging
|
||||||
PVT.nmea_dump_devname=/dev/pts/4
|
PVT.nmea_dump_devname=/dev/pts/4
|
||||||
|
|
||||||
PVT.flag_rtcm_server=false
|
PVT.flag_rtcm_server=false
|
||||||
PVT.flag_rtcm_tty_port=false
|
PVT.flag_rtcm_tty_port=false
|
||||||
PVT.rtcm_dump_devname=/dev/pts/1
|
PVT.rtcm_dump_devname=/dev/pts/1
|
||||||
|
|
||||||
|
|
||||||
;#dump: Enable or disable the PVT internal binary data file logging [true] or [false]
|
;#dump: Enable or disable the PVT internal binary data file logging [true] or [false]
|
||||||
PVT.dump=true
|
PVT.dump=true
|
||||||
|
;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump.
|
||||||
|
PVT.dump_filename=./PVT
|
||||||
|
@ -101,18 +101,18 @@ Channel.signal=1C
|
|||||||
|
|
||||||
|
|
||||||
;######### ACQUISITION GLOBAL CONFIG ############
|
;######### ACQUISITION GLOBAL CONFIG ############
|
||||||
Acquisition_1C.dump=false
|
Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition_Fine_Doppler
|
||||||
Acquisition_1C.dump_filename=./acq_dump.dat
|
|
||||||
Acquisition_1C.item_type=gr_complex
|
Acquisition_1C.item_type=gr_complex
|
||||||
Acquisition_1C.if=0
|
Acquisition_1C.if=0
|
||||||
Acquisition_1C.sampled_ms=1
|
Acquisition_1C.sampled_ms=1
|
||||||
Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition_Fine_Doppler
|
|
||||||
Acquisition_1C.threshold=0.015
|
Acquisition_1C.threshold=0.015
|
||||||
;Acquisition_1C.pfa=0.0001
|
;Acquisition_1C.pfa=0.0001
|
||||||
Acquisition_1C.doppler_max=10000
|
Acquisition_1C.doppler_max=10000
|
||||||
Acquisition_1C.doppler_min=-10000
|
Acquisition_1C.doppler_min=-10000
|
||||||
Acquisition_1C.doppler_step=500
|
Acquisition_1C.doppler_step=500
|
||||||
Acquisition_1C.max_dwells=15
|
Acquisition_1C.max_dwells=15
|
||||||
|
Acquisition_1C.dump=false
|
||||||
|
Acquisition_1C.dump_filename=./acq_dump.dat
|
||||||
|
|
||||||
|
|
||||||
;######### TRACKING GLOBAL CONFIG ############
|
;######### TRACKING GLOBAL CONFIG ############
|
||||||
@ -126,10 +126,11 @@ Tracking_1C.dll_bw_hz=2.0;
|
|||||||
Tracking_1C.order=3;
|
Tracking_1C.order=3;
|
||||||
Tracking_1C.early_late_space_chips=0.5;
|
Tracking_1C.early_late_space_chips=0.5;
|
||||||
|
|
||||||
|
|
||||||
;######### TELEMETRY DECODER GPS CONFIG ############
|
;######### TELEMETRY DECODER GPS CONFIG ############
|
||||||
TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder
|
TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder
|
||||||
TelemetryDecoder_1C.dump=false
|
TelemetryDecoder_1C.dump=false
|
||||||
TelemetryDecoder_1C.decimation_factor=1;
|
|
||||||
|
|
||||||
;######### OBSERVABLES CONFIG ############
|
;######### OBSERVABLES CONFIG ############
|
||||||
Observables.implementation=Hybrid_Observables
|
Observables.implementation=Hybrid_Observables
|
||||||
|
@ -28,7 +28,6 @@ SignalSource.implementation=Two_Bit_Cpx_File_Signal_Source
|
|||||||
SignalSource.filename=/datalogger/captures/ajith/test1_two_cpx_live.dat ; <- PUT YOUR FILE HERE
|
SignalSource.filename=/datalogger/captures/ajith/test1_two_cpx_live.dat ; <- PUT YOUR FILE HERE
|
||||||
SignalSource.item_type=byte
|
SignalSource.item_type=byte
|
||||||
SignalSource.sampling_frequency=19200000
|
SignalSource.sampling_frequency=19200000
|
||||||
SignalSource.freq=1575420000
|
|
||||||
SignalSource.samples=0
|
SignalSource.samples=0
|
||||||
SignalSource.repeat=false
|
SignalSource.repeat=false
|
||||||
SignalSource.dump=false
|
SignalSource.dump=false
|
||||||
@ -45,8 +44,6 @@ DataTypeAdapter.item_type=gr_complex
|
|||||||
|
|
||||||
;######### INPUT_FILTER CONFIG ############
|
;######### INPUT_FILTER CONFIG ############
|
||||||
InputFilter.implementation=Freq_Xlating_Fir_Filter
|
InputFilter.implementation=Freq_Xlating_Fir_Filter
|
||||||
InputFilter.dump=false
|
|
||||||
InputFilter.dump_filename=../data/input_filter.dat
|
|
||||||
InputFilter.input_item_type=gr_complex
|
InputFilter.input_item_type=gr_complex
|
||||||
InputFilter.output_item_type=gr_complex
|
InputFilter.output_item_type=gr_complex
|
||||||
InputFilter.taps_item_type=float
|
InputFilter.taps_item_type=float
|
||||||
@ -67,6 +64,9 @@ InputFilter.grid_density=16
|
|||||||
InputFilter.sampling_frequency=19200000
|
InputFilter.sampling_frequency=19200000
|
||||||
InputFilter.IF=4024000
|
InputFilter.IF=4024000
|
||||||
InputFilter.decimation_factor=6
|
InputFilter.decimation_factor=6
|
||||||
|
InputFilter.dump=false
|
||||||
|
InputFilter.dump_filename=../data/input_filter.dat
|
||||||
|
|
||||||
|
|
||||||
;######### RESAMPLER CONFIG ############
|
;######### RESAMPLER CONFIG ############
|
||||||
Resampler.implementation=Pass_Through
|
Resampler.implementation=Pass_Through
|
||||||
@ -82,35 +82,35 @@ Channel.signal=1C
|
|||||||
|
|
||||||
|
|
||||||
;######### GPS ACQUISITION CONFIG ############
|
;######### GPS ACQUISITION CONFIG ############
|
||||||
Acquisition_1C.dump=false
|
Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition_Fine_Doppler
|
||||||
Acquisition_1C.dump_filename=./acq_dump.dat
|
|
||||||
Acquisition_1C.item_type=gr_complex
|
Acquisition_1C.item_type=gr_complex
|
||||||
Acquisition_1C.if=0
|
Acquisition_1C.if=0
|
||||||
Acquisition_1C.sampled_ms=1
|
Acquisition_1C.sampled_ms=1
|
||||||
Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition_Fine_Doppler
|
|
||||||
Acquisition_1C.threshold=0.007
|
Acquisition_1C.threshold=0.007
|
||||||
;Acquisition_1C.pfa=0.0001
|
;Acquisition_1C.pfa=0.0001
|
||||||
Acquisition_1C.doppler_max=10000
|
Acquisition_1C.doppler_max=10000
|
||||||
Acquisition_1C.doppler_min=-10000
|
Acquisition_1C.doppler_min=-10000
|
||||||
Acquisition_1C.doppler_step=500
|
Acquisition_1C.doppler_step=500
|
||||||
Acquisition_1C.max_dwells=15
|
Acquisition_1C.max_dwells=15
|
||||||
|
Acquisition_1C.dump=false
|
||||||
|
Acquisition_1C.dump_filename=./acq_dump.dat
|
||||||
|
|
||||||
|
|
||||||
;######### TRACKING GPS CONFIG ############
|
;######### TRACKING GPS CONFIG ############
|
||||||
Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking
|
Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking
|
||||||
Tracking_1C.item_type=gr_complex
|
Tracking_1C.item_type=gr_complex
|
||||||
Tracking_1C.if=0
|
Tracking_1C.if=0_
|
||||||
Tracking_1C.dump=true
|
|
||||||
Tracking_1C.dump_filename=./tracking_ch_
|
|
||||||
Tracking_1C.pll_bw_hz=40.0;
|
Tracking_1C.pll_bw_hz=40.0;
|
||||||
Tracking_1C.dll_bw_hz=1.5;
|
Tracking_1C.dll_bw_hz=1.5;
|
||||||
Tracking_1C.order=3;
|
Tracking_1C.order=3;
|
||||||
|
Tracking_1C.dump=true
|
||||||
|
Tracking_1C.dump_filename=./tracking_ch
|
||||||
|
|
||||||
|
|
||||||
;######### TELEMETRY DECODER GPS CONFIG ############
|
;######### TELEMETRY DECODER GPS CONFIG ############
|
||||||
TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder
|
TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder
|
||||||
TelemetryDecoder_1C.dump=false
|
TelemetryDecoder_1C.dump=false
|
||||||
TelemetryDecoder_1C.decimation_factor=1;
|
|
||||||
|
|
||||||
;######### OBSERVABLES CONFIG ############
|
;######### OBSERVABLES CONFIG ############
|
||||||
Observables.implementation=Hybrid_Observables
|
Observables.implementation=Hybrid_Observables
|
||||||
|
@ -55,21 +55,18 @@ DataTypeAdapter.item_type=gr_complex
|
|||||||
|
|
||||||
InputFilter.implementation=Freq_Xlating_Fir_Filter
|
InputFilter.implementation=Freq_Xlating_Fir_Filter
|
||||||
|
|
||||||
;#dump: Dump the filtered data to a file.
|
|
||||||
InputFilter.dump=false
|
|
||||||
|
|
||||||
;#dump_filename: Log path and filename.
|
|
||||||
InputFilter.dump_filename=../data/input_filter.dat
|
InputFilter.dump_filename=../data/input_filter.dat
|
||||||
|
|
||||||
;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation.
|
;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation.
|
||||||
;#These options are based on parameters of gnuradio's function: gr_remez.
|
;#These options are based on parameters of gnuradio's function: gr_remez.
|
||||||
;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges,
|
;#This function calculates the optimal (in the Chebyshev/minimax sense) FIR filter impulse response given a set of band edges,
|
||||||
;#the desired reponse on those bands, and the weight given to the error in those bands.
|
;#the desired response on those bands, and the weight given to the error in those bands.
|
||||||
|
|
||||||
;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version.
|
|
||||||
|
;#input_item_type: Type and resolution for input signal samples.
|
||||||
InputFilter.input_item_type=gr_complex
|
InputFilter.input_item_type=gr_complex
|
||||||
|
|
||||||
;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version.
|
;#outut_item_type: Type and resolution for output filtered signal samples.
|
||||||
InputFilter.output_item_type=gr_complex
|
InputFilter.output_item_type=gr_complex
|
||||||
|
|
||||||
;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version.
|
;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version.
|
||||||
@ -120,6 +117,12 @@ InputFilter.IF=-1600000
|
|||||||
;# Decimation factor after the frequency tranaslating block
|
;# Decimation factor after the frequency tranaslating block
|
||||||
InputFilter.decimation_factor=1
|
InputFilter.decimation_factor=1
|
||||||
|
|
||||||
|
;#dump: Dump the filtered data to a file.
|
||||||
|
InputFilter.dump=false
|
||||||
|
|
||||||
|
;#dump_filename: Log path and filename.
|
||||||
|
|
||||||
|
|
||||||
;######### RESAMPLER CONFIG ############
|
;######### RESAMPLER CONFIG ############
|
||||||
Resampler.implementation=Pass_Through
|
Resampler.implementation=Pass_Through
|
||||||
Resampler.dump=false
|
Resampler.dump=false
|
||||||
@ -151,41 +154,44 @@ Channel7.signal=2S
|
|||||||
;Channel11.signal=2S
|
;Channel11.signal=2S
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
;######### ACQUISITION GLOBAL CONFIG ############
|
;######### ACQUISITION GLOBAL CONFIG ############
|
||||||
|
|
||||||
;# GPS L2C M
|
;# GPS L2C M
|
||||||
Acquisition_2S.dump=false
|
Acquisition_2S.implementation=GPS_L2_M_PCPS_Acquisition
|
||||||
Acquisition_2S.dump_filename=./acq_dump.dat
|
|
||||||
Acquisition_2S.item_type=gr_complex
|
Acquisition_2S.item_type=gr_complex
|
||||||
Acquisition_2S.if=0
|
Acquisition_2S.if=0
|
||||||
Acquisition_2S.implementation=GPS_L2_M_PCPS_Acquisition
|
|
||||||
Acquisition_2S.threshold=0.0013
|
Acquisition_2S.threshold=0.0013
|
||||||
;Acquisition_2S.pfa=0.001
|
;Acquisition_2S.pfa=0.001
|
||||||
Acquisition_2S.doppler_max=10000
|
Acquisition_2S.doppler_max=10000
|
||||||
Acquisition_2S.doppler_min=-10000
|
Acquisition_2S.doppler_min=-10000
|
||||||
Acquisition_2S.doppler_step=100
|
Acquisition_2S.doppler_step=100
|
||||||
Acquisition_2S.max_dwells=1
|
Acquisition_2S.max_dwells=1
|
||||||
|
Acquisition_2S.dump=false
|
||||||
|
Acquisition_2S.dump_filename=./acq_dump.dat
|
||||||
|
|
||||||
|
|
||||||
|
;######### TRACKING GLOBAL CONFIG ############
|
||||||
Tracking_2S.implementation=GPS_L2_M_DLL_PLL_Tracking
|
Tracking_2S.implementation=GPS_L2_M_DLL_PLL_Tracking
|
||||||
Tracking_2S.item_type=gr_complex
|
Tracking_2S.item_type=gr_complex
|
||||||
Tracking_2S.if=0
|
Tracking_2S.if=0
|
||||||
Tracking_2S.dump=true
|
|
||||||
Tracking_2S.dump_filename=./tracking_ch_
|
|
||||||
Tracking_2S.pll_bw_hz=1.5;
|
Tracking_2S.pll_bw_hz=1.5;
|
||||||
Tracking_2S.dll_bw_hz=0.3;
|
Tracking_2S.dll_bw_hz=0.3;
|
||||||
Tracking_2S.order=3;
|
Tracking_2S.order=3;
|
||||||
Tracking_2S.early_late_space_chips=0.5;
|
Tracking_2S.early_late_space_chips=0.5;
|
||||||
|
Tracking_2S.dump=true
|
||||||
|
Tracking_2S.dump_filename=./tracking_ch_
|
||||||
|
|
||||||
|
|
||||||
;######### TELEMETRY DECODER GPS CONFIG ############
|
;######### TELEMETRY DECODER GPS CONFIG ############
|
||||||
TelemetryDecoder_2S.implementation=GPS_L2C_Telemetry_Decoder
|
TelemetryDecoder_2S.implementation=GPS_L2C_Telemetry_Decoder
|
||||||
TelemetryDecoder_2S.dump=false
|
TelemetryDecoder_2S.dump=false
|
||||||
|
|
||||||
|
|
||||||
;######### OBSERVABLES CONFIG ############.
|
;######### OBSERVABLES CONFIG ############.
|
||||||
Observables.implementation=Hybrid_Observables
|
Observables.implementation=Hybrid_Observables
|
||||||
Observables.dump=false
|
Observables.dump=false
|
||||||
Observables.dump_filename=./observables.dat
|
Observables.dump_filename=./observables.dat
|
||||||
|
|
||||||
|
|
||||||
;######### PVT CONFIG ############
|
;######### PVT CONFIG ############
|
||||||
PVT.implementation=RTKLIB_PVT
|
PVT.implementation=RTKLIB_PVT
|
||||||
PVT.positioning_mode=PPP_Static ; options: Single, Static, Kinematic, PPP_Static, PPP_Kinematic
|
PVT.positioning_mode=PPP_Static ; options: Single, Static, Kinematic, PPP_Static, PPP_Kinematic
|
||||||
|
@ -50,8 +50,6 @@ DataTypeAdapter.item_type=cshort
|
|||||||
|
|
||||||
;######### INPUT_FILTER CONFIG ############
|
;######### INPUT_FILTER CONFIG ############
|
||||||
InputFilter.implementation=Fir_Filter
|
InputFilter.implementation=Fir_Filter
|
||||||
InputFilter.dump=false
|
|
||||||
InputFilter.dump_filename=../data/input_filter.dat
|
|
||||||
InputFilter.input_item_type=cshort
|
InputFilter.input_item_type=cshort
|
||||||
InputFilter.output_item_type=gr_complex
|
InputFilter.output_item_type=gr_complex
|
||||||
InputFilter.taps_item_type=float
|
InputFilter.taps_item_type=float
|
||||||
@ -76,6 +74,9 @@ InputFilter.grid_density=16
|
|||||||
InputFilter.sampling_frequency=4000000
|
InputFilter.sampling_frequency=4000000
|
||||||
InputFilter.IF=0
|
InputFilter.IF=0
|
||||||
|
|
||||||
|
InputFilter.dump=false
|
||||||
|
InputFilter.dump_filename=../data/input_filter.dat
|
||||||
|
|
||||||
;######### RESAMPLER CONFIG ############
|
;######### RESAMPLER CONFIG ############
|
||||||
Resampler.implementation=Pass_Through
|
Resampler.implementation=Pass_Through
|
||||||
Resampler.dump=false
|
Resampler.dump=false
|
||||||
@ -106,42 +107,44 @@ Channel7.signal=2S
|
|||||||
;Channel10.signal=2S
|
;Channel10.signal=2S
|
||||||
;Channel11.signal=2S
|
;Channel11.signal=2S
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
;######### ACQUISITION GLOBAL CONFIG ############
|
;######### ACQUISITION GLOBAL CONFIG ############
|
||||||
|
|
||||||
;# GPS L2C M
|
;# GPS L2C M
|
||||||
Acquisition_2S.dump=false
|
Acquisition_2S.implementation=GPS_L2_M_PCPS_Acquisition
|
||||||
Acquisition_2S.dump_filename=./acq_dump.dat
|
|
||||||
Acquisition_2S.item_type=gr_complex
|
Acquisition_2S.item_type=gr_complex
|
||||||
Acquisition_2S.if=0
|
Acquisition_2S.if=0
|
||||||
Acquisition_2S.implementation=GPS_L2_M_PCPS_Acquisition
|
|
||||||
Acquisition_2S.threshold=0.0015
|
Acquisition_2S.threshold=0.0015
|
||||||
;Acquisition_2S.pfa=0.001
|
;Acquisition_2S.pfa=0.001
|
||||||
Acquisition_2S.doppler_max=5000
|
Acquisition_2S.doppler_max=5000
|
||||||
Acquisition_2S.doppler_min=-5000
|
Acquisition_2S.doppler_min=-5000
|
||||||
Acquisition_2S.doppler_step=60
|
Acquisition_2S.doppler_step=60
|
||||||
Acquisition_2S.max_dwells=1
|
Acquisition_2S.max_dwells=1
|
||||||
|
Acquisition_2S.dump=false
|
||||||
|
Acquisition_2S.dump_filename=./acq_dump.dat
|
||||||
|
|
||||||
|
|
||||||
Tracking_2S.implementation=GPS_L2_M_DLL_PLL_Tracking
|
Tracking_2S.implementation=GPS_L2_M_DLL_PLL_Tracking
|
||||||
Tracking_2S.item_type=gr_complex
|
Tracking_2S.item_type=gr_complex
|
||||||
Tracking_2S.if=0
|
Tracking_2S.if=0
|
||||||
Tracking_2S.dump=true
|
|
||||||
Tracking_2S.dump_filename=./tracking_ch_
|
|
||||||
Tracking_2S.pll_bw_hz=2.0;
|
Tracking_2S.pll_bw_hz=2.0;
|
||||||
Tracking_2S.dll_bw_hz=0.25;
|
Tracking_2S.dll_bw_hz=0.25;
|
||||||
Tracking_2S.order=2;
|
Tracking_2S.order=2;
|
||||||
Tracking_2S.early_late_space_chips=0.5;
|
Tracking_2S.early_late_space_chips=0.5;
|
||||||
|
Tracking_2S.dump=true
|
||||||
|
Tracking_2S.dump_filename=./tracking_ch_
|
||||||
|
|
||||||
|
|
||||||
;######### TELEMETRY DECODER GPS CONFIG ############
|
;######### TELEMETRY DECODER GPS CONFIG ############
|
||||||
TelemetryDecoder_2S.implementation=GPS_L2C_Telemetry_Decoder
|
TelemetryDecoder_2S.implementation=GPS_L2C_Telemetry_Decoder
|
||||||
TelemetryDecoder_2S.dump=true
|
TelemetryDecoder_2S.dump=true
|
||||||
|
|
||||||
|
|
||||||
;######### OBSERVABLES CONFIG ############.
|
;######### OBSERVABLES CONFIG ############.
|
||||||
Observables.implementation=Hybrid_Observables
|
Observables.implementation=Hybrid_Observables
|
||||||
Observables.dump=false
|
Observables.dump=false
|
||||||
Observables.dump_filename=./observables.dat
|
Observables.dump_filename=./observables.dat
|
||||||
|
|
||||||
|
|
||||||
;######### PVT CONFIG ############
|
;######### PVT CONFIG ############
|
||||||
PVT.implementation=RTKLIB_PVT
|
PVT.implementation=RTKLIB_PVT
|
||||||
PVT.positioning_mode=PPP_Static ; options: Single, Static, Kinematic, PPP_Static, PPP_Kinematic
|
PVT.positioning_mode=PPP_Static ; options: Single, Static, Kinematic, PPP_Static, PPP_Kinematic
|
||||||
@ -149,7 +152,6 @@ PVT.iono_model=Broadcast ; options: OFF, Broadcast, SBAS, Iono-Free-LC, Estimate
|
|||||||
PVT.trop_model=Saastamoinen ; options: OFF, Saastamoinen, SBAS, Estimate_ZTD, Estimate_ZTD_Grad
|
PVT.trop_model=Saastamoinen ; options: OFF, Saastamoinen, SBAS, Estimate_ZTD, Estimate_ZTD_Grad
|
||||||
PVT.output_rate_ms=100
|
PVT.output_rate_ms=100
|
||||||
PVT.display_rate_ms=500
|
PVT.display_rate_ms=500
|
||||||
PVT.dump_filename=./PVT
|
|
||||||
PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea;
|
PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea;
|
||||||
PVT.flag_nmea_tty_port=false;
|
PVT.flag_nmea_tty_port=false;
|
||||||
PVT.nmea_dump_devname=/dev/pts/4
|
PVT.nmea_dump_devname=/dev/pts/4
|
||||||
@ -157,3 +159,4 @@ PVT.flag_rtcm_server=false
|
|||||||
PVT.flag_rtcm_tty_port=false
|
PVT.flag_rtcm_tty_port=false
|
||||||
PVT.rtcm_dump_devname=/dev/pts/1
|
PVT.rtcm_dump_devname=/dev/pts/1
|
||||||
PVT.dump=false
|
PVT.dump=false
|
||||||
|
PVT.dump_filename=./PVT
|
||||||
|
@ -24,48 +24,55 @@ SignalSource.dump=false
|
|||||||
SignalSource.dump_filename=../data/signal_source.dat
|
SignalSource.dump_filename=../data/signal_source.dat
|
||||||
SignalSource.enable_throttle_control=false
|
SignalSource.enable_throttle_control=false
|
||||||
|
|
||||||
|
|
||||||
;######### SIGNAL_CONDITIONER CONFIG ############
|
;######### SIGNAL_CONDITIONER CONFIG ############
|
||||||
SignalConditioner.implementation=Pass_Through
|
SignalConditioner.implementation=Pass_Through
|
||||||
|
|
||||||
|
|
||||||
;######### CHANNELS GLOBAL CONFIG ######
|
;######### CHANNELS GLOBAL CONFIG ######
|
||||||
Channels_1B.count=4
|
Channels_1B.count=4
|
||||||
Channels.in_acquisition=1
|
Channels.in_acquisition=1
|
||||||
Channel.signal=1B
|
Channel.signal=1B
|
||||||
|
|
||||||
|
|
||||||
;######### ACQUISITION GLOBAL CONFIG ############
|
;######### ACQUISITION GLOBAL CONFIG ############
|
||||||
Acquisition_1B.dump=false
|
Acquisition_1B.implementation=Galileo_E1_PCPS_Ambiguous_Acquisition
|
||||||
Acquisition_1B.dump_filename=./acq_dump.dat
|
|
||||||
Acquisition_1B.item_type=gr_complex
|
Acquisition_1B.item_type=gr_complex
|
||||||
Acquisition_1B.if=0
|
Acquisition_1B.if=0
|
||||||
Acquisition_1B.sampled_ms=4
|
Acquisition_1B.sampled_ms=4
|
||||||
Acquisition_1B.implementation=Galileo_E1_PCPS_Ambiguous_Acquisition
|
|
||||||
;Acquisition_1B.threshold=1
|
;Acquisition_1B.threshold=1
|
||||||
Acquisition_1B.pfa=0.000008
|
Acquisition_1B.pfa=0.000008
|
||||||
Acquisition_1B.doppler_max=6000
|
Acquisition_1B.doppler_max=6000
|
||||||
Acquisition_1B.doppler_step=250
|
Acquisition_1B.doppler_step=250
|
||||||
Acquisition_1B.cboc=false
|
Acquisition_1B.cboc=false
|
||||||
|
Acquisition_1B.dump=false
|
||||||
|
Acquisition_1B.dump_filename=./acq_dump.dat
|
||||||
|
|
||||||
|
|
||||||
;######### TRACKING GLOBAL CONFIG ############
|
;######### TRACKING GLOBAL CONFIG ############
|
||||||
Tracking_1B.implementation=Galileo_E1_DLL_PLL_VEML_Tracking
|
Tracking_1B.implementation=Galileo_E1_DLL_PLL_VEML_Tracking
|
||||||
Tracking_1B.item_type=gr_complex
|
Tracking_1B.item_type=gr_complex
|
||||||
Tracking_1B.if=0
|
Tracking_1B.if=0
|
||||||
Tracking_1B.dump=false
|
|
||||||
Tracking_1B.dump_filename=../data/veml_tracking_ch_
|
|
||||||
Tracking_1B.pll_bw_hz=20.0;
|
Tracking_1B.pll_bw_hz=20.0;
|
||||||
Tracking_1B.dll_bw_hz=2.0;
|
Tracking_1B.dll_bw_hz=2.0;
|
||||||
Tracking_1B.order=3;
|
Tracking_1B.order=3;
|
||||||
Tracking_1B.early_late_space_chips=0.15;
|
Tracking_1B.early_late_space_chips=0.15;
|
||||||
Tracking_1B.very_early_late_space_chips=0.6;
|
Tracking_1B.very_early_late_space_chips=0.6;
|
||||||
|
Tracking_1B.dump=false
|
||||||
|
Tracking_1B.dump_filename=../data/veml_tracking_ch_
|
||||||
|
|
||||||
|
|
||||||
;######### TELEMETRY DECODER CONFIG ############
|
;######### TELEMETRY DECODER CONFIG ############
|
||||||
TelemetryDecoder_1B.implementation=Galileo_E1B_Telemetry_Decoder
|
TelemetryDecoder_1B.implementation=Galileo_E1B_Telemetry_Decoder
|
||||||
TelemetryDecoder_1B.dump=false
|
TelemetryDecoder_1B.dump=false
|
||||||
|
|
||||||
|
|
||||||
;######### OBSERVABLES CONFIG ############
|
;######### OBSERVABLES CONFIG ############
|
||||||
Observables.implementation=Hybrid_Observables
|
Observables.implementation=Hybrid_Observables
|
||||||
Observables.dump=false
|
Observables.dump=false
|
||||||
Observables.dump_filename=./observables.dat
|
Observables.dump_filename=./observables.dat
|
||||||
|
|
||||||
|
|
||||||
;######### PVT CONFIG ############
|
;######### PVT CONFIG ############
|
||||||
PVT.implementation=RTKLIB_PVT
|
PVT.implementation=RTKLIB_PVT
|
||||||
PVT.positioning_mode=PPP_Static ; options: Single, Static, Kinematic, PPP_Static, PPP_Kinematic
|
PVT.positioning_mode=PPP_Static ; options: Single, Static, Kinematic, PPP_Static, PPP_Kinematic
|
||||||
@ -73,11 +80,11 @@ PVT.iono_model=Broadcast ; options: OFF, Broadcast, SBAS, Iono-Free-LC, Estimate
|
|||||||
PVT.trop_model=Saastamoinen ; options: OFF, Saastamoinen, SBAS, Estimate_ZTD, Estimate_ZTD_Grad
|
PVT.trop_model=Saastamoinen ; options: OFF, Saastamoinen, SBAS, Estimate_ZTD, Estimate_ZTD_Grad
|
||||||
PVT.output_rate_ms=100;
|
PVT.output_rate_ms=100;
|
||||||
PVT.display_rate_ms=500;
|
PVT.display_rate_ms=500;
|
||||||
PVT.dump=false
|
|
||||||
PVT.dump_filename=./PVT
|
|
||||||
PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea
|
PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea
|
||||||
PVT.flag_nmea_tty_port=true
|
PVT.flag_nmea_tty_port=true
|
||||||
PVT.nmea_dump_devname=/dev/pts/4
|
PVT.nmea_dump_devname=/dev/pts/4
|
||||||
PVT.flag_rtcm_server=true
|
PVT.flag_rtcm_server=true
|
||||||
PVT.flag_rtcm_tty_port=false
|
PVT.flag_rtcm_tty_port=false
|
||||||
PVT.rtcm_dump_devname=/dev/pts/1
|
PVT.rtcm_dump_devname=/dev/pts/1
|
||||||
|
PVT.dump=false
|
||||||
|
PVT.dump_filename=./PVT
|
||||||
|
@ -10,7 +10,7 @@ GNSS-SDR.internal_fs_sps=4000000
|
|||||||
|
|
||||||
|
|
||||||
;######### SIGNAL_SOURCE CONFIG ############
|
;######### SIGNAL_SOURCE CONFIG ############
|
||||||
;#implementation: Use [File_Signal_Source] or [UHD_Signal_Source] or [GN3S_Signal_Source] or [Rtlsdr_Signal_Source]
|
;#implementation:
|
||||||
SignalSource.implementation=File_Signal_Source
|
SignalSource.implementation=File_Signal_Source
|
||||||
|
|
||||||
;#filename: path to file with the captured GNSS signal samples to be processed
|
;#filename: path to file with the captured GNSS signal samples to be processed
|
||||||
@ -21,22 +21,15 @@ SignalSource.filename=/datalogger/signals/CTTC/2013_04_04_GNSS_SIGNAL_at_CTTC_SP
|
|||||||
;#If ishort is selected you should have to instantiate the Ishort_To_Complex data_type_adapter.
|
;#If ishort is selected you should have to instantiate the Ishort_To_Complex data_type_adapter.
|
||||||
SignalSource.item_type=ishort
|
SignalSource.item_type=ishort
|
||||||
|
|
||||||
;#sampling_frequency: Original Signal sampling frequency in [Hz]
|
;#sampling_frequency: Original Signal sampling frequency in samples per second
|
||||||
SignalSource.sampling_frequency=4000000
|
SignalSource.sampling_frequency=4000000
|
||||||
|
|
||||||
;#freq: RF front-end center frequency in [Hz]
|
|
||||||
SignalSource.freq=1575420000
|
|
||||||
|
|
||||||
;#samples: Number of samples to be processed. Notice that 0 indicates the entire file.
|
;#samples: Number of samples to be processed. Notice that 0 indicates the entire file.
|
||||||
SignalSource.samples=0
|
SignalSource.samples=0
|
||||||
|
|
||||||
;#repeat: Repeat the processing file. Disable this option in this version
|
;#repeat: Repeat the processing file.
|
||||||
SignalSource.repeat=false
|
SignalSource.repeat=false
|
||||||
|
|
||||||
;#dump: Dump the Signal source data to a file. Disable this option in this version
|
|
||||||
SignalSource.dump=false
|
|
||||||
SignalSource.dump_filename=../data/signal_source.dat
|
|
||||||
|
|
||||||
;#enable_throttle_control: Enabling this option tells the signal source to keep the delay between samples in post processing.
|
;#enable_throttle_control: Enabling this option tells the signal source to keep the delay between samples in post processing.
|
||||||
; it helps to not overload the CPU, but the processing time will be longer.
|
; it helps to not overload the CPU, but the processing time will be longer.
|
||||||
SignalSource.enable_throttle_control=false
|
SignalSource.enable_throttle_control=false
|
||||||
@ -71,20 +64,15 @@ DataTypeAdapter.dump_filename=../data/data_type_adapter.dat
|
|||||||
;InputFilter.implementation=Freq_Xlating_Fir_Filter
|
;InputFilter.implementation=Freq_Xlating_Fir_Filter
|
||||||
InputFilter.implementation=Pass_Through
|
InputFilter.implementation=Pass_Through
|
||||||
|
|
||||||
;#dump: Dump the filtered data to a file.
|
|
||||||
InputFilter.dump=false
|
|
||||||
|
|
||||||
;#dump_filename: Log path and filename.
|
|
||||||
InputFilter.dump_filename=../data/input_filter.dat
|
|
||||||
|
|
||||||
;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation.
|
;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation.
|
||||||
;#These options are based on parameters of gnuradio's function: gr_remez.
|
;#These options are based on parameters of gnuradio's function: gr_remez.
|
||||||
;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges, the desired reponse on those bands, and the weight given to the error in those bands.
|
;#This function calculates the optimal (in the Chebyshev/minimax sense) FIR filter impulse response given a set of band edges,
|
||||||
|
;#the desired response on those bands, and the weight given to the error in those bands.
|
||||||
|
|
||||||
;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version.
|
;#input_item_type: Type and resolution for input signal samples.
|
||||||
InputFilter.input_item_type=gr_complex
|
InputFilter.input_item_type=gr_complex
|
||||||
|
|
||||||
;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version.
|
;#outut_item_type: Type and resolution for output filtered signal samples.
|
||||||
InputFilter.output_item_type=gr_complex
|
InputFilter.output_item_type=gr_complex
|
||||||
|
|
||||||
;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version.
|
;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version.
|
||||||
@ -116,7 +104,6 @@ InputFilter.band2_end=1.0
|
|||||||
|
|
||||||
;#ampl: desired amplitude at the band edges [ a(b1) a(e1) a(b2) a(e2) ...].
|
;#ampl: desired amplitude at the band edges [ a(b1) a(e1) a(b2) a(e2) ...].
|
||||||
;#The number of ampl_begin and ampl_end elements must match the number of bands
|
;#The number of ampl_begin and ampl_end elements must match the number of bands
|
||||||
|
|
||||||
InputFilter.ampl1_begin=1.0
|
InputFilter.ampl1_begin=1.0
|
||||||
InputFilter.ampl1_end=1.0
|
InputFilter.ampl1_end=1.0
|
||||||
InputFilter.ampl2_begin=0.0
|
InputFilter.ampl2_begin=0.0
|
||||||
@ -136,10 +123,14 @@ InputFilter.grid_density=16
|
|||||||
|
|
||||||
;#The following options are used only in Freq_Xlating_Fir_Filter implementation.
|
;#The following options are used only in Freq_Xlating_Fir_Filter implementation.
|
||||||
;#InputFilter.IF is the intermediate frequency (in Hz) shifted down to zero Hz
|
;#InputFilter.IF is the intermediate frequency (in Hz) shifted down to zero Hz
|
||||||
|
|
||||||
InputFilter.sampling_frequency=4000000
|
InputFilter.sampling_frequency=4000000
|
||||||
InputFilter.IF=0
|
InputFilter.IF=0
|
||||||
|
|
||||||
|
;#dump: Dump the filtered data to a file.
|
||||||
|
InputFilter.dump=false
|
||||||
|
|
||||||
|
;#dump_filename: Log path and filename.
|
||||||
|
InputFilter.dump_filename=../data/input_filter.dat
|
||||||
|
|
||||||
|
|
||||||
;######### RESAMPLER CONFIG ############
|
;######### RESAMPLER CONFIG ############
|
||||||
@ -156,7 +147,7 @@ Resampler.dump=false
|
|||||||
;#dump_filename: Log path and filename.
|
;#dump_filename: Log path and filename.
|
||||||
Resampler.dump_filename=../data/resampler.dat
|
Resampler.dump_filename=../data/resampler.dat
|
||||||
|
|
||||||
;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
|
;#item_type: Type and resolution for each of the signal samples.
|
||||||
Resampler.item_type=gr_complex
|
Resampler.item_type=gr_complex
|
||||||
|
|
||||||
;#sample_freq_in: the sample frequency of the input signal
|
;#sample_freq_in: the sample frequency of the input signal
|
||||||
@ -175,19 +166,13 @@ Channel.signal=1B
|
|||||||
|
|
||||||
|
|
||||||
;######### ACQUISITION GLOBAL CONFIG ############
|
;######### ACQUISITION GLOBAL CONFIG ############
|
||||||
;#dump: Enable or disable the acquisition internal data file logging [true] or [false]
|
Acquisition_1B.implementation=Galileo_E1_PCPS_QuickSync_Ambiguous_Acquisition
|
||||||
Acquisition_1B.dump=false
|
;#item_type: Type and resolution for each of the signal samples.
|
||||||
;#filename: Log path and filename
|
|
||||||
Acquisition_1B.dump_filename=./acq_dump.dat
|
|
||||||
;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
|
|
||||||
Acquisition_1B.item_type=gr_complex
|
Acquisition_1B.item_type=gr_complex
|
||||||
;#if: Signal intermediate frequency in [Hz]
|
;#if: Signal intermediate frequency in [Hz]
|
||||||
Acquisition_1B.if=0
|
Acquisition_1B.if=0
|
||||||
;#sampled_ms: Signal block duration for the acquisition signal detection [ms]
|
;#sampled_ms: Signal block duration for the acquisition signal detection [ms]
|
||||||
Acquisition_1B.coherent_integration_time_ms=4
|
Acquisition_1B.coherent_integration_time_ms=4
|
||||||
|
|
||||||
Acquisition_1B.implementation=Galileo_E1_PCPS_QuickSync_Ambiguous_Acquisition
|
|
||||||
|
|
||||||
;#threshold: Acquisition threshold
|
;#threshold: Acquisition threshold
|
||||||
Acquisition_1B.threshold=0.05
|
Acquisition_1B.threshold=0.05
|
||||||
;#doppler_max: Maximum expected Doppler shift [Hz]
|
;#doppler_max: Maximum expected Doppler shift [Hz]
|
||||||
@ -196,39 +181,33 @@ Acquisition_1B.doppler_max=15000
|
|||||||
Acquisition_1B.doppler_step=125
|
Acquisition_1B.doppler_step=125
|
||||||
;#sampled_ms: Signal block duration for the acquisition signal detection [ms];
|
;#sampled_ms: Signal block duration for the acquisition signal detection [ms];
|
||||||
Acquisition_1B.coherent_integration_time_ms=8
|
Acquisition_1B.coherent_integration_time_ms=8
|
||||||
|
|
||||||
Acquisition_1B.cboc=false
|
Acquisition_1B.cboc=false
|
||||||
|
;#dump: Enable or disable the acquisition internal data file logging [true] or [false]
|
||||||
|
Acquisition_1B.dump=false
|
||||||
|
;#filename: Log path and filename
|
||||||
|
Acquisition_1B.dump_filename=./acq_dump.dat
|
||||||
|
|
||||||
;######### TRACKING GLOBAL CONFIG ############
|
;######### TRACKING GLOBAL CONFIG ############
|
||||||
|
;#implementation:
|
||||||
;#implementation: Selected tracking algorithm [Galileo_E1_DLL_PLL_VEML_Tracking]
|
|
||||||
Tracking_1B.implementation=Galileo_E1_DLL_PLL_VEML_Tracking
|
Tracking_1B.implementation=Galileo_E1_DLL_PLL_VEML_Tracking
|
||||||
;#item_type: Type and resolution for each of the signal samples. Use only [gr_complex] in this version.
|
;#item_type: Type and resolution for each of the signal samples.
|
||||||
Tracking_1B.item_type=gr_complex
|
Tracking_1B.item_type=gr_complex
|
||||||
|
|
||||||
;#sampling_frequency: Signal Intermediate Frequency in [Hz]
|
;#sampling_frequency: Signal Intermediate Frequency in [Hz]
|
||||||
Tracking_1B.if=0
|
Tracking_1B.if=0
|
||||||
|
|
||||||
;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false]
|
|
||||||
Tracking_1B.dump=true
|
|
||||||
|
|
||||||
;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number.
|
|
||||||
Tracking_1B.dump_filename=../data/veml_tracking_ch_
|
|
||||||
|
|
||||||
;#pll_bw_hz: PLL loop filter bandwidth [Hz]
|
;#pll_bw_hz: PLL loop filter bandwidth [Hz]
|
||||||
Tracking_1B.pll_bw_hz=20.0;
|
Tracking_1B.pll_bw_hz=20.0;
|
||||||
|
|
||||||
;#dll_bw_hz: DLL loop filter bandwidth [Hz]
|
;#dll_bw_hz: DLL loop filter bandwidth [Hz]
|
||||||
Tracking_1B.dll_bw_hz=2.0;
|
Tracking_1B.dll_bw_hz=2.0;
|
||||||
|
|
||||||
;#order: PLL/DLL loop filter order [2] or [3]
|
;#order: PLL/DLL loop filter order [2] or [3]
|
||||||
Tracking_1B.order=3;
|
Tracking_1B.order=3;
|
||||||
|
|
||||||
;#early_late_space_chips: correlator early-late space [chips]. Use [0.5] for GPS and [0.15] for Galileo
|
;#early_late_space_chips: correlator early-late space [chips]. Use [0.5] for GPS and [0.15] for Galileo
|
||||||
Tracking_1B.early_late_space_chips=0.15;
|
Tracking_1B.early_late_space_chips=0.15;
|
||||||
|
|
||||||
;#very_early_late_space_chips: only for [Galileo_E1_DLL_PLL_VEML_Tracking], correlator very early-late space [chips]. Use [0.6]
|
;#very_early_late_space_chips: only for [Galileo_E1_DLL_PLL_VEML_Tracking], correlator very early-late space [chips]. Use [0.6]
|
||||||
Tracking_1B.very_early_late_space_chips=0.6;
|
Tracking_1B.very_early_late_space_chips=0.6;
|
||||||
|
;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false]
|
||||||
|
Tracking_1B.dump=true
|
||||||
|
;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number.
|
||||||
|
Tracking_1B.dump_filename=../data/veml_tracking_ch_
|
||||||
|
|
||||||
;######### TELEMETRY DECODER CONFIG ############
|
;######### TELEMETRY DECODER CONFIG ############
|
||||||
;#implementation: Use [GPS_L1_CA_Telemetry_Decoder] for GPS L1 C/A or [Galileo_E1B_Telemetry_Decoder] for Galileo E1B
|
;#implementation: Use [GPS_L1_CA_Telemetry_Decoder] for GPS L1 C/A or [Galileo_E1B_Telemetry_Decoder] for Galileo E1B
|
||||||
|
@ -10,32 +10,17 @@ GNSS-SDR.internal_fs_sps=4000000
|
|||||||
|
|
||||||
|
|
||||||
;######### SIGNAL_SOURCE CONFIG ############
|
;######### SIGNAL_SOURCE CONFIG ############
|
||||||
;#implementation: Use [File_Signal_Source] or [UHD_Signal_Source] or [GN3S_Signal_Source] (experimental)
|
|
||||||
SignalSource.implementation=File_Signal_Source
|
SignalSource.implementation=File_Signal_Source
|
||||||
|
|
||||||
;#filename: path to file with the captured GNSS signal samples to be processed
|
;#filename: path to file with the captured GNSS signal samples to be processed
|
||||||
SignalSource.filename=/Users/carlesfernandez/Documents/workspace/code2/trunk/data/2013_04_04_GNSS_SIGNAL_at_CTTC_SPAIN.dat ;/datalogger/signals/CTTC/2013_04_04_GNSS_SIGNAL_at_CTTC_SPAIN/2013_04_04_GNSS_SIGNAL_at_CTTC_SPAIN.dat ; <- PUT YOUR FILE HERE
|
SignalSource.filename=/datalogger/signals/CTTC/2013_04_04_GNSS_SIGNAL_at_CTTC_SPAIN/2013_04_04_GNSS_SIGNAL_at_CTTC_SPAIN.dat ; <- PUT YOUR FILE HERE
|
||||||
|
|
||||||
;#item_type: Type and resolution for each of the signal samples.
|
;#item_type: Type and resolution for each of the signal samples.
|
||||||
SignalSource.item_type=ishort
|
SignalSource.item_type=ishort
|
||||||
|
;#sampling_frequency: Original Signal sampling frequency in samples per second
|
||||||
;#sampling_frequency: Original Signal sampling frequency in [Hz]
|
|
||||||
SignalSource.sampling_frequency=4000000
|
SignalSource.sampling_frequency=4000000
|
||||||
|
|
||||||
;#freq: RF front-end center frequency in [Hz]
|
|
||||||
SignalSource.freq=1575420000
|
|
||||||
|
|
||||||
;#samples: Number of samples to be processed. Notice that 0 indicates the entire file.
|
;#samples: Number of samples to be processed. Notice that 0 indicates the entire file.
|
||||||
SignalSource.samples=0
|
SignalSource.samples=0
|
||||||
|
;#repeat: Repeat the processing file.
|
||||||
;#repeat: Repeat the processing file. Disable this option in this version
|
|
||||||
SignalSource.repeat=false
|
SignalSource.repeat=false
|
||||||
|
|
||||||
;#dump: Dump the Signal source data to a file. Disable this option in this version
|
|
||||||
SignalSource.dump=false
|
|
||||||
|
|
||||||
SignalSource.dump_filename=../data/signal_source.dat
|
|
||||||
|
|
||||||
;#enable_throttle_control: Enabling this option tells the signal source to keep the delay between samples in post processing.
|
;#enable_throttle_control: Enabling this option tells the signal source to keep the delay between samples in post processing.
|
||||||
; it helps to not overload the CPU, but the processing time will be longer.
|
; it helps to not overload the CPU, but the processing time will be longer.
|
||||||
SignalSource.enable_throttle_control=false
|
SignalSource.enable_throttle_control=false
|
||||||
@ -57,24 +42,18 @@ DataTypeAdapter.implementation=Ishort_To_Complex
|
|||||||
;######### INPUT_FILTER CONFIG ############
|
;######### INPUT_FILTER CONFIG ############
|
||||||
;## Filter the input data. Can be combined with frequency translation for IF signals
|
;## Filter the input data. Can be combined with frequency translation for IF signals
|
||||||
|
|
||||||
;#implementation: Use [Pass_Through] or [Fir_Filter] or [Freq_Xlating_Fir_Filter]
|
;#implementation:
|
||||||
;#[Pass_Through] disables this block
|
;#[Pass_Through] disables this block
|
||||||
;#[Fir_Filter] enables a FIR Filter
|
;#[Fir_Filter] enables a FIR Filter
|
||||||
;#[Freq_Xlating_Fir_Filter] enables FIR filter and a composite frequency translation that shifts IF down to zero Hz.
|
;#[Freq_Xlating_Fir_Filter] enables FIR filter and a composite frequency translation that shifts IF down to zero Hz.
|
||||||
|
|
||||||
;InputFilter.implementation=Fir_Filter
|
;InputFilter.implementation=Fir_Filter
|
||||||
;InputFilter.implementation=Freq_Xlating_Fir_Filter
|
;InputFilter.implementation=Freq_Xlating_Fir_Filter
|
||||||
InputFilter.implementation=Pass_Through
|
InputFilter.implementation=Pass_Through
|
||||||
|
|
||||||
;#dump: Dump the filtered data to a file.
|
|
||||||
InputFilter.dump=false
|
|
||||||
|
|
||||||
;#dump_filename: Log path and filename.
|
|
||||||
InputFilter.dump_filename=../data/input_filter.dat
|
|
||||||
|
|
||||||
;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation.
|
;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation.
|
||||||
;#These options are based on parameters of GNU Radio's function: gr_remez.
|
;#These options are based on parameters of GNU Radio's function: gr_remez.
|
||||||
;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter impulse response given a set of band edges, the desired response on those bands, and the weight given to the error in those bands.
|
;#This function calculates the optimal (in the Chebyshev/minimax sense) FIR filter impulse response given a set of band edges,
|
||||||
|
;#the desired response on those bands, and the weight given to the error in those bands.
|
||||||
|
|
||||||
;#input_item_type: Type and resolution for input signal samples.
|
;#input_item_type: Type and resolution for input signal samples.
|
||||||
InputFilter.input_item_type=gr_complex
|
InputFilter.input_item_type=gr_complex
|
||||||
@ -125,7 +104,10 @@ InputFilter.grid_density=16
|
|||||||
|
|
||||||
InputFilter.sampling_frequency=4000000
|
InputFilter.sampling_frequency=4000000
|
||||||
InputFilter.IF=0
|
InputFilter.IF=0
|
||||||
|
;#dump: Dump the filtered data to a file.
|
||||||
|
InputFilter.dump=false
|
||||||
|
;#dump_filename: Log path and filename.
|
||||||
|
InputFilter.dump_filename=../data/input_filter.dat
|
||||||
|
|
||||||
|
|
||||||
;######### RESAMPLER CONFIG ############
|
;######### RESAMPLER CONFIG ############
|
||||||
@ -136,21 +118,17 @@ InputFilter.IF=0
|
|||||||
;#[Direct_Resampler] enables a resampler that implements a nearest neighborhood interpolation
|
;#[Direct_Resampler] enables a resampler that implements a nearest neighborhood interpolation
|
||||||
;Resampler.implementation=Direct_Resampler
|
;Resampler.implementation=Direct_Resampler
|
||||||
Resampler.implementation=Pass_Through
|
Resampler.implementation=Pass_Through
|
||||||
|
;#item_type: Type and resolution for each of the signal samples.
|
||||||
|
Resampler.item_type=gr_complex
|
||||||
|
;#sample_freq_in: the sample frequency of the input signal
|
||||||
|
Resampler.sample_freq_in=4000000
|
||||||
|
;#sample_freq_out: the desired sample frequency of the output signal
|
||||||
|
Resampler.sample_freq_out=4000000
|
||||||
;#dump: Dump the resampled data to a file.
|
;#dump: Dump the resampled data to a file.
|
||||||
Resampler.dump=false
|
Resampler.dump=false
|
||||||
;#dump_filename: Log path and filename.
|
;#dump_filename: Log path and filename.
|
||||||
Resampler.dump_filename=../data/resampler.dat
|
Resampler.dump_filename=../data/resampler.dat
|
||||||
|
|
||||||
;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
|
|
||||||
Resampler.item_type=gr_complex
|
|
||||||
|
|
||||||
;#sample_freq_in: the sample frequency of the input signal
|
|
||||||
Resampler.sample_freq_in=4000000
|
|
||||||
|
|
||||||
;#sample_freq_out: the desired sample frequency of the output signal
|
|
||||||
Resampler.sample_freq_out=4000000
|
|
||||||
|
|
||||||
|
|
||||||
;######### CHANNELS GLOBAL CONFIG ############
|
;######### CHANNELS GLOBAL CONFIG ############
|
||||||
;#count: Number of available Galileo satellite channels.
|
;#count: Number of available Galileo satellite channels.
|
||||||
@ -159,20 +137,15 @@ Channels_1B.count=8
|
|||||||
Channels.in_acquisition=1
|
Channels.in_acquisition=1
|
||||||
Channel.signal=1B
|
Channel.signal=1B
|
||||||
|
|
||||||
;######### ACQUISITION GLOBAL CONFIG ############
|
|
||||||
|
|
||||||
;#dump: Enable or disable the acquisition internal data file logging [true] or [false]
|
;######### ACQUISITION GLOBAL CONFIG ############
|
||||||
Acquisition_1B.dump=false
|
Acquisition_1B.implementation=Galileo_E1_PCPS_Ambiguous_Acquisition
|
||||||
;#filename: Log path and filename
|
;#item_type: Type and resolution for each of the signal samples.
|
||||||
Acquisition_1B.dump_filename=./acq_dump.dat
|
|
||||||
;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
|
|
||||||
Acquisition_1B.item_type=gr_complex
|
Acquisition_1B.item_type=gr_complex
|
||||||
;#if: Signal intermediate frequency in [Hz]
|
;#if: Signal intermediate frequency in [Hz]
|
||||||
Acquisition_1B.if=0
|
Acquisition_1B.if=0
|
||||||
;#sampled_ms: Signal block duration for the acquisition signal detection [ms]
|
;#sampled_ms: Signal block duration for the acquisition signal detection [ms]
|
||||||
Acquisition_1B.sampled_ms=4
|
Acquisition_1B.sampled_ms=4
|
||||||
;#implementation: Acquisition algorithm selection for this channel: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
|
|
||||||
Acquisition_1B.implementation=Galileo_E1_PCPS_Ambiguous_Acquisition
|
|
||||||
;#threshold: Acquisition threshold
|
;#threshold: Acquisition threshold
|
||||||
;Acquisition_1B.threshold=0
|
;Acquisition_1B.threshold=0
|
||||||
;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
|
;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
|
||||||
@ -181,70 +154,59 @@ Acquisition_1B.pfa=0.000002
|
|||||||
Acquisition_1B.doppler_max=15000
|
Acquisition_1B.doppler_max=15000
|
||||||
;#doppler_max: Doppler step in the grid search [Hz]
|
;#doppler_max: Doppler step in the grid search [Hz]
|
||||||
Acquisition_1B.doppler_step=125
|
Acquisition_1B.doppler_step=125
|
||||||
|
;#cboc: Only for [Galileo_E1_PCPS_Ambiguous_Acquisition]. This option allows you to choose between acquiring with CBOC signal [true] or sinboc(1,1) signal [false].
|
||||||
|
;#Use only if GNSS-SDR.internal_fs_sps is greater than or equal to 6138000
|
||||||
|
Acquisition_1B.cboc=false
|
||||||
|
;#dump: Enable or disable the acquisition internal data file logging [true] or [false]
|
||||||
|
Acquisition_1B.dump=false
|
||||||
|
;#filename: Log path and filename
|
||||||
|
Acquisition_1B.dump_filename=./acq_dump.dat
|
||||||
|
|
||||||
|
|
||||||
;######### ACQUISITION CHANNELS CONFIG ######
|
;######### ACQUISITION CHANNELS CONFIG ######
|
||||||
|
|
||||||
;######### ACQUISITION CH 0 CONFIG ############
|
;######### ACQUISITION CH 0 CONFIG ############
|
||||||
|
|
||||||
;#repeat_satellite: Use only jointly with the satellite PRN ID option. The default value is false
|
;#repeat_satellite: Use only jointly with the satellite PRN ID option. The default value is false
|
||||||
;Acquisition_1B0.repeat_satellite = true
|
;Acquisition_1B0.repeat_satellite = true
|
||||||
;Acquisition_1B1.repeat_satellite = true
|
;Acquisition_1B1.repeat_satellite = true
|
||||||
;Acquisition_1B2.repeat_satellite = true
|
;Acquisition_1B2.repeat_satellite = true
|
||||||
;Acquisition_1B3.repeat_satellite = true
|
;Acquisition_1B3.repeat_satellite = true
|
||||||
|
|
||||||
;#cboc: Only for [Galileo_E1_PCPS_Ambiguous_Acquisition]. This option allows you to choose between acquiring with CBOC signal [true] or sinboc(1,1) signal [false].
|
|
||||||
;#Use only if GNSS-SDR.internal_fs_sps is greater than or equal to 6138000
|
|
||||||
Acquisition_1B.cboc=false
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
;######### TRACKING GLOBAL CONFIG ############
|
;######### TRACKING GLOBAL CONFIG ############
|
||||||
|
|
||||||
;#implementation: Selected tracking algorithm: [GPS_L1_CA_DLL_PLL_Tracking] or [GPS_L1_CA_DLL_FLL_PLL_Tracking] or [GPS_L1_CA_TCP_CONNECTOR_Tracking] or [Galileo_E1_DLL_PLL_VEML_Tracking]
|
|
||||||
Tracking_1B.implementation=Galileo_E1_DLL_PLL_VEML_Tracking
|
Tracking_1B.implementation=Galileo_E1_DLL_PLL_VEML_Tracking
|
||||||
;#item_type: Type and resolution for each of the signal samples. Use only [gr_complex] in this version.
|
;#item_type: Type and resolution for each of the signal samples.
|
||||||
Tracking_1B.item_type=gr_complex
|
Tracking_1B.item_type=gr_complex
|
||||||
|
|
||||||
;#sampling_frequency: Signal Intermediate Frequency in [Hz]
|
;#sampling_frequency: Signal Intermediate Frequency in [Hz]
|
||||||
Tracking_1B.if=0
|
Tracking_1B.if=0
|
||||||
|
;#pll_bw_hz: PLL loop filter bandwidth [Hz]
|
||||||
|
Tracking_1B.pll_bw_hz=15.0;
|
||||||
|
;#dll_bw_hz: DLL loop filter bandwidth [Hz]
|
||||||
|
Tracking_1B.dll_bw_hz=2.0;
|
||||||
|
;#fll_bw_hz: FLL loop filter bandwidth [Hz]
|
||||||
|
Tracking_1B.fll_bw_hz=10.0;
|
||||||
|
;#order: PLL/DLL loop filter order [2] or [3]
|
||||||
|
Tracking_1B.order=3;
|
||||||
|
;#early_late_space_chips: correlator early-late space [chips]. Use [0.5] for GPS and [0.15] for Galileo
|
||||||
|
Tracking_1B.early_late_space_chips=0.15;
|
||||||
|
;#very_early_late_space_chips: only for [Galileo_E1_DLL_PLL_VEML_Tracking], correlator very early-late space [chips]. Use [0.6]
|
||||||
|
Tracking_1B.very_early_late_space_chips=0.6;
|
||||||
|
Tracking_1B.track_pilot=true
|
||||||
;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false]
|
;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false]
|
||||||
Tracking_1B.dump=false
|
Tracking_1B.dump=false
|
||||||
|
|
||||||
;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number.
|
;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number.
|
||||||
Tracking_1B.dump_filename=../data/veml_tracking_ch_
|
Tracking_1B.dump_filename=../data/veml_tracking_ch_
|
||||||
|
|
||||||
;#pll_bw_hz: PLL loop filter bandwidth [Hz]
|
|
||||||
Tracking_1B.pll_bw_hz=15.0;
|
|
||||||
|
|
||||||
;#dll_bw_hz: DLL loop filter bandwidth [Hz]
|
|
||||||
Tracking_1B.dll_bw_hz=2.0;
|
|
||||||
|
|
||||||
;#fll_bw_hz: FLL loop filter bandwidth [Hz]
|
|
||||||
Tracking_1B.fll_bw_hz=10.0;
|
|
||||||
|
|
||||||
;#order: PLL/DLL loop filter order [2] or [3]
|
|
||||||
Tracking_1B.order=3;
|
|
||||||
|
|
||||||
;#early_late_space_chips: correlator early-late space [chips]. Use [0.5] for GPS and [0.15] for Galileo
|
|
||||||
Tracking_1B.early_late_space_chips=0.15;
|
|
||||||
|
|
||||||
;#very_early_late_space_chips: only for [Galileo_E1_DLL_PLL_VEML_Tracking], correlator very early-late space [chips]. Use [0.6]
|
|
||||||
Tracking_1B.very_early_late_space_chips=0.6;
|
|
||||||
|
|
||||||
|
|
||||||
;######### TELEMETRY DECODER CONFIG ############
|
;######### TELEMETRY DECODER CONFIG ############
|
||||||
;#implementation: Use [GPS_L1_CA_Telemetry_Decoder] for GPS L1 C/A or [Galileo_E1B_Telemetry_Decoder] for Galileo E1B
|
|
||||||
TelemetryDecoder_1B.implementation=Galileo_E1B_Telemetry_Decoder
|
TelemetryDecoder_1B.implementation=Galileo_E1B_Telemetry_Decoder
|
||||||
TelemetryDecoder_1B.dump=false
|
TelemetryDecoder_1B.dump=false
|
||||||
|
|
||||||
;######### OBSERVABLES CONFIG ############
|
|
||||||
;#implementation:
|
|
||||||
Observables.implementation=Hybrid_Observables
|
|
||||||
|
|
||||||
|
;######### OBSERVABLES CONFIG ############
|
||||||
|
Observables.implementation=Hybrid_Observables
|
||||||
;#dump: Enable or disable the Observables internal binary data file logging [true] or [false]
|
;#dump: Enable or disable the Observables internal binary data file logging [true] or [false]
|
||||||
Observables.dump=false
|
Observables.dump=false
|
||||||
|
|
||||||
;#dump_filename: Log path and filename.
|
;#dump_filename: Log path and filename.
|
||||||
Observables.dump_filename=./observables.dat
|
Observables.dump_filename=./observables.dat
|
||||||
|
|
||||||
@ -255,38 +217,27 @@ PVT.implementation=RTKLIB_PVT
|
|||||||
PVT.positioning_mode=PPP_Static ; options: Single, Static, Kinematic, PPP_Static, PPP_Kinematic
|
PVT.positioning_mode=PPP_Static ; options: Single, Static, Kinematic, PPP_Static, PPP_Kinematic
|
||||||
PVT.iono_model=Broadcast ; options: OFF, Broadcast, SBAS, Iono-Free-LC, Estimate_STEC, IONEX
|
PVT.iono_model=Broadcast ; options: OFF, Broadcast, SBAS, Iono-Free-LC, Estimate_STEC, IONEX
|
||||||
PVT.trop_model=Saastamoinen ; options: OFF, Saastamoinen, SBAS, Estimate_ZTD, Estimate_ZTD_Grad
|
PVT.trop_model=Saastamoinen ; options: OFF, Saastamoinen, SBAS, Estimate_ZTD, Estimate_ZTD_Grad
|
||||||
|
|
||||||
;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms]
|
;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms]
|
||||||
PVT.output_rate_ms=100;
|
PVT.output_rate_ms=100;
|
||||||
|
|
||||||
;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms.
|
;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms.
|
||||||
PVT.display_rate_ms=500;
|
PVT.display_rate_ms=500;
|
||||||
|
|
||||||
;#dump: Enable or disable the PVT internal binary data file logging [true] or [false]
|
|
||||||
PVT.dump=false
|
|
||||||
|
|
||||||
;# KML, GeoJSON, NMEA and RTCM output configuration
|
;# KML, GeoJSON, NMEA and RTCM output configuration
|
||||||
|
|
||||||
;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump, ".kml" and ".geojson" to GIS-friendly formats.
|
|
||||||
PVT.dump_filename=./PVT
|
|
||||||
|
|
||||||
;#nmea_dump_filename: NMEA log path and filename
|
;#nmea_dump_filename: NMEA log path and filename
|
||||||
PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea;
|
PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea;
|
||||||
|
|
||||||
;#flag_nmea_tty_port: Enables or disables the NMEA log to a serial TTY port (Can be used with real hardware or virtual one)
|
;#flag_nmea_tty_port: Enables or disables the NMEA log to a serial TTY port (Can be used with real hardware or virtual one)
|
||||||
PVT.flag_nmea_tty_port=true;
|
PVT.flag_nmea_tty_port=true
|
||||||
|
|
||||||
;#nmea_dump_devname: serial device descriptor for NMEA logging
|
;#nmea_dump_devname: serial device descriptor for NMEA logging
|
||||||
PVT.nmea_dump_devname=/dev/pts/4
|
PVT.nmea_dump_devname=/dev/pts/4
|
||||||
|
|
||||||
;#flag_rtcm_server: Enables or disables a TCP/IP server transmitting RTCM 3.2 messages (accepts multiple clients, port 2101 by default)
|
;#flag_rtcm_server: Enables or disables a TCP/IP server transmitting RTCM 3.2 messages (accepts multiple clients, port 2101 by default)
|
||||||
PVT.flag_rtcm_server=true;
|
PVT.flag_rtcm_server=true;
|
||||||
PVT.rtcm_tcp_port=2101
|
PVT.rtcm_tcp_port=2101
|
||||||
PVT.rtcm_MT1045_rate_ms=5000
|
PVT.rtcm_MT1045_rate_ms=5000
|
||||||
PVT.rtcm_MSM_rate_ms=1000
|
PVT.rtcm_MSM_rate_ms=1000
|
||||||
|
|
||||||
;#flag_rtcm_tty_port: Enables or disables the RTCM log to a serial TTY port (Can be used with real hardware or virtual one)
|
;#flag_rtcm_tty_port: Enables or disables the RTCM log to a serial TTY port (Can be used with real hardware or virtual one)
|
||||||
PVT.flag_rtcm_tty_port=false;
|
PVT.flag_rtcm_tty_port=false;
|
||||||
|
|
||||||
;#rtcm_dump_devname: serial device descriptor for RTCM logging
|
;#rtcm_dump_devname: serial device descriptor for RTCM logging
|
||||||
PVT.rtcm_dump_devname=/dev/pts/1
|
PVT.rtcm_dump_devname=/dev/pts/1
|
||||||
|
;#dump: Enable or disable the PVT internal binary data file logging [true] or [false]
|
||||||
|
PVT.dump=false
|
||||||
|
;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump, ".kml" and ".geojson" to GIS-friendly formats.
|
||||||
|
PVT.dump_filename=./PVT
|
@ -17,7 +17,6 @@ SignalSource.implementation=Nsr_File_Signal_Source
|
|||||||
SignalSource.filename=/datalogger/signals/ifen/E1L1_FE0_Band0.stream ; <- PUT YOUR FILE HERE
|
SignalSource.filename=/datalogger/signals/ifen/E1L1_FE0_Band0.stream ; <- PUT YOUR FILE HERE
|
||||||
SignalSource.item_type=byte
|
SignalSource.item_type=byte
|
||||||
SignalSource.sampling_frequency=20480000
|
SignalSource.sampling_frequency=20480000
|
||||||
SignalSource.freq=1575420000
|
|
||||||
SignalSource.samples=0 ; 0 means the entire file
|
SignalSource.samples=0 ; 0 means the entire file
|
||||||
SignalSource.repeat=false
|
SignalSource.repeat=false
|
||||||
SignalSource.dump=false
|
SignalSource.dump=false
|
||||||
@ -31,7 +30,6 @@ SignalSource.enable_throttle_control=false
|
|||||||
|
|
||||||
;######### SIGNAL_CONDITIONER CONFIG ############
|
;######### SIGNAL_CONDITIONER CONFIG ############
|
||||||
;## It holds blocks to change data type, filter and resample input data.
|
;## It holds blocks to change data type, filter and resample input data.
|
||||||
|
|
||||||
SignalConditioner.implementation=Signal_Conditioner
|
SignalConditioner.implementation=Signal_Conditioner
|
||||||
|
|
||||||
;######### DATA_TYPE_ADAPTER CONFIG ############
|
;######### DATA_TYPE_ADAPTER CONFIG ############
|
||||||
@ -40,8 +38,6 @@ DataTypeAdapter.item_type=float
|
|||||||
|
|
||||||
;######### INPUT_FILTER CONFIG ############
|
;######### INPUT_FILTER CONFIG ############
|
||||||
InputFilter.implementation=Freq_Xlating_Fir_Filter
|
InputFilter.implementation=Freq_Xlating_Fir_Filter
|
||||||
InputFilter.dump=false
|
|
||||||
InputFilter.dump_filename=../data/input_filter.dat
|
|
||||||
InputFilter.input_item_type=float
|
InputFilter.input_item_type=float
|
||||||
InputFilter.output_item_type=gr_complex
|
InputFilter.output_item_type=gr_complex
|
||||||
InputFilter.taps_item_type=float
|
InputFilter.taps_item_type=float
|
||||||
@ -65,6 +61,8 @@ InputFilter.grid_density=16
|
|||||||
InputFilter.sampling_frequency=20480000
|
InputFilter.sampling_frequency=20480000
|
||||||
InputFilter.IF=5499998.47412109
|
InputFilter.IF=5499998.47412109
|
||||||
InputFilter.decimation_factor=8
|
InputFilter.decimation_factor=8
|
||||||
|
InputFilter.dump=false
|
||||||
|
InputFilter.dump_filename=../data/input_filter.dat
|
||||||
|
|
||||||
|
|
||||||
;######### RESAMPLER CONFIG ############
|
;######### RESAMPLER CONFIG ############
|
||||||
@ -78,33 +76,36 @@ Channel.signal=1B
|
|||||||
|
|
||||||
|
|
||||||
;######### ACQUISITION GLOBAL CONFIG ############
|
;######### ACQUISITION GLOBAL CONFIG ############
|
||||||
Acquisition_1B.dump=false
|
Acquisition_1B.implementation=Galileo_E1_PCPS_Ambiguous_Acquisition
|
||||||
Acquisition_1B.dump_filename=./acq_dump.dat
|
|
||||||
Acquisition_1B.item_type=gr_complex
|
Acquisition_1B.item_type=gr_complex
|
||||||
Acquisition_1B.if=0
|
Acquisition_1B.if=0
|
||||||
Acquisition_1B.sampled_ms=4
|
Acquisition_1B.sampled_ms=4
|
||||||
Acquisition_1B.implementation=Galileo_E1_PCPS_Ambiguous_Acquisition
|
|
||||||
Acquisition_1B.pfa=0.0000008
|
Acquisition_1B.pfa=0.0000008
|
||||||
Acquisition_1B.doppler_max=15000
|
Acquisition_1B.doppler_max=15000
|
||||||
Acquisition_1B.doppler_step=125
|
Acquisition_1B.doppler_step=125
|
||||||
Acquisition_1B.cboc=false ; This option allows you to choose between acquiring with CBOC signal [true] or sinboc(1,1) signal [false]. Use only if GNSS-SDR.internal_fs_sps is greater than or equal to 6138000
|
Acquisition_1B.cboc=false ; This option allows you to choose between acquiring with CBOC signal [true] or sinboc(1,1) signal [false]. Use only if GNSS-SDR.internal_fs_sps is greater than or equal to 6138000
|
||||||
|
Acquisition_1B.dump=false
|
||||||
|
Acquisition_1B.dump_filename=./acq_dump.dat
|
||||||
|
|
||||||
|
|
||||||
;######### TRACKING GLOBAL CONFIG ############
|
;######### TRACKING GLOBAL CONFIG ############
|
||||||
Tracking_1B.implementation=Galileo_E1_DLL_PLL_VEML_Tracking
|
Tracking_1B.implementation=Galileo_E1_DLL_PLL_VEML_Tracking
|
||||||
Tracking_1B.item_type=gr_complex
|
Tracking_1B.item_type=gr_complex
|
||||||
Tracking_1B.if=0
|
Tracking_1B.if=0
|
||||||
Tracking_1B.dump=false
|
|
||||||
Tracking_1B.dump_filename=../data/veml_tracking_ch_
|
|
||||||
Tracking_1B.pll_bw_hz=20.0;
|
Tracking_1B.pll_bw_hz=20.0;
|
||||||
Tracking_1B.dll_bw_hz=2.0;
|
Tracking_1B.dll_bw_hz=2.0;
|
||||||
Tracking_1B.order=3;
|
Tracking_1B.order=3;
|
||||||
Tracking_1B.early_late_space_chips=0.15;
|
Tracking_1B.early_late_space_chips=0.15;
|
||||||
Tracking_1B.very_early_late_space_chips=0.6;
|
Tracking_1B.very_early_late_space_chips=0.6;
|
||||||
|
Tracking_1B.dump=false
|
||||||
|
Tracking_1B.dump_filename=../data/veml_tracking_ch_
|
||||||
|
|
||||||
|
|
||||||
;######### TELEMETRY DECODER CONFIG ############
|
;######### TELEMETRY DECODER CONFIG ############
|
||||||
TelemetryDecoder_1B.implementation=Galileo_E1B_Telemetry_Decoder
|
TelemetryDecoder_1B.implementation=Galileo_E1B_Telemetry_Decoder
|
||||||
TelemetryDecoder_1B.dump=false
|
TelemetryDecoder_1B.dump=false
|
||||||
|
|
||||||
|
|
||||||
;######### OBSERVABLES CONFIG ############
|
;######### OBSERVABLES CONFIG ############
|
||||||
Observables.implementation=Hybrid_Observables
|
Observables.implementation=Hybrid_Observables
|
||||||
Observables.dump=true
|
Observables.dump=true
|
||||||
|
@ -25,32 +25,18 @@ GNSS-SDR.internal_fs_sps=32000000
|
|||||||
;GNSS-SDR.SUPL_CI=0x31b0
|
;GNSS-SDR.SUPL_CI=0x31b0
|
||||||
|
|
||||||
;######### SIGNAL_SOURCE CONFIG ############
|
;######### SIGNAL_SOURCE CONFIG ############
|
||||||
;#implementation: Use [File_Signal_Source] or [UHD_Signal_Source] or [GN3S_Signal_Source] (experimental)
|
;#implementation
|
||||||
SignalSource.implementation=File_Signal_Source
|
SignalSource.implementation=File_Signal_Source
|
||||||
|
|
||||||
;#filename: path to file with the captured GNSS signal samples to be processed
|
;#filename: path to file with the captured GNSS signal samples to be processed
|
||||||
SignalSource.filename=/datalogger/signals/ifen/32MS_complex.dat ; <- PUT YOUR FILE HERE
|
SignalSource.filename=/datalogger/signals/ifen/32MS_complex.dat ; <- PUT YOUR FILE HERE
|
||||||
|
;#item_type: Type and resolution for each of the signal samples.
|
||||||
;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
|
|
||||||
SignalSource.item_type=gr_complex
|
SignalSource.item_type=gr_complex
|
||||||
|
;#sampling_frequency: Original Signal sampling frequency in samples per second
|
||||||
;#sampling_frequency: Original Signal sampling frequency in [Hz]
|
|
||||||
SignalSource.sampling_frequency=32000000
|
SignalSource.sampling_frequency=32000000
|
||||||
|
|
||||||
;#freq: RF front-end center frequency in [Hz]
|
|
||||||
SignalSource.freq=1176450000
|
|
||||||
|
|
||||||
;#samples: Number of samples to be processed. Notice that 0 indicates the entire file.
|
;#samples: Number of samples to be processed. Notice that 0 indicates the entire file.
|
||||||
SignalSource.samples=0
|
SignalSource.samples=0
|
||||||
|
;#repeat: Repeat the processing file.
|
||||||
;#repeat: Repeat the processing file. Disable this option in this version
|
|
||||||
SignalSource.repeat=false
|
SignalSource.repeat=false
|
||||||
|
|
||||||
;#dump: Dump the Signal source data to a file. Disable this option in this version
|
|
||||||
SignalSource.dump=false
|
|
||||||
|
|
||||||
SignalSource.dump_filename=../data/signal_source.dat
|
|
||||||
|
|
||||||
;#enable_throttle_control: Enabling this option tells the signal source to keep the delay between samples in post processing.
|
;#enable_throttle_control: Enabling this option tells the signal source to keep the delay between samples in post processing.
|
||||||
; it helps to not overload the CPU, but the processing time will be longer.
|
; it helps to not overload the CPU, but the processing time will be longer.
|
||||||
SignalSource.enable_throttle_control=false
|
SignalSource.enable_throttle_control=false
|
||||||
@ -73,7 +59,7 @@ DataTypeAdapter.implementation=Pass_Through
|
|||||||
;######### INPUT_FILTER CONFIG ############
|
;######### INPUT_FILTER CONFIG ############
|
||||||
;## Filter the input data. Can be combined with frequency translation for IF signals
|
;## Filter the input data. Can be combined with frequency translation for IF signals
|
||||||
|
|
||||||
;#implementation: Use [Pass_Through] or [Fir_Filter] or [Freq_Xlating_Fir_Filter]
|
;#implementation:
|
||||||
;#[Pass_Through] disables this block
|
;#[Pass_Through] disables this block
|
||||||
;#[Fir_Filter] enables a FIR Filter
|
;#[Fir_Filter] enables a FIR Filter
|
||||||
;#[Freq_Xlating_Fir_Filter] enables FIR filter and a composite frequency translation that shifts IF down to zero Hz.
|
;#[Freq_Xlating_Fir_Filter] enables FIR filter and a composite frequency translation that shifts IF down to zero Hz.
|
||||||
@ -82,20 +68,15 @@ DataTypeAdapter.implementation=Pass_Through
|
|||||||
;InputFilter.implementation=Freq_Xlating_Fir_Filter
|
;InputFilter.implementation=Freq_Xlating_Fir_Filter
|
||||||
InputFilter.implementation=Pass_Through
|
InputFilter.implementation=Pass_Through
|
||||||
|
|
||||||
;#dump: Dump the filtered data to a file.
|
|
||||||
InputFilter.dump=false
|
|
||||||
|
|
||||||
;#dump_filename: Log path and filename.
|
|
||||||
InputFilter.dump_filename=../data/input_filter.dat
|
|
||||||
|
|
||||||
;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation.
|
;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation.
|
||||||
;#These options are based on parameters of gnuradio's function: gr_remez.
|
;#These options are based on parameters of gnuradio's function: gr_remez.
|
||||||
;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges, the desired reponse on those bands, and the weight given to the error in those bands.
|
;#This function calculates the optimal (in the Chebyshev/minimax sense) FIR filter impulse response given a set of band edges,
|
||||||
|
;#the desired response on those bands, and the weight given to the error in those bands.
|
||||||
|
|
||||||
;#input_item_type: Type and resolution for input signal samples.
|
;#input_item_type: Type and resolution for input signal samples.
|
||||||
InputFilter.input_item_type=gr_complex
|
InputFilter.input_item_type=gr_complex
|
||||||
|
|
||||||
;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version.
|
;#outut_item_type: Type and resolution for output filtered signal samples.
|
||||||
InputFilter.output_item_type=gr_complex
|
InputFilter.output_item_type=gr_complex
|
||||||
|
|
||||||
;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version.
|
;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version.
|
||||||
@ -142,6 +123,11 @@ InputFilter.grid_density=16
|
|||||||
InputFilter.sampling_frequency=32000000
|
InputFilter.sampling_frequency=32000000
|
||||||
InputFilter.IF=0
|
InputFilter.IF=0
|
||||||
|
|
||||||
|
;#dump: Dump the filtered data to a file.
|
||||||
|
InputFilter.dump=false
|
||||||
|
|
||||||
|
;#dump_filename: Log path and filename.
|
||||||
|
InputFilter.dump_filename=../data/input_filter.dat
|
||||||
|
|
||||||
|
|
||||||
;######### RESAMPLER CONFIG ############
|
;######### RESAMPLER CONFIG ############
|
||||||
@ -152,21 +138,17 @@ InputFilter.IF=0
|
|||||||
;#[Direct_Resampler] enables a resampler that implements a nearest neigbourhood interpolation
|
;#[Direct_Resampler] enables a resampler that implements a nearest neigbourhood interpolation
|
||||||
;Resampler.implementation=Direct_Resampler
|
;Resampler.implementation=Direct_Resampler
|
||||||
Resampler.implementation=Pass_Through
|
Resampler.implementation=Pass_Through
|
||||||
|
;#item_type: Type and resolution for each of the signal samples.
|
||||||
|
Resampler.item_type=gr_complex
|
||||||
|
;#sample_freq_in: the sample frequency of the input signal
|
||||||
|
Resampler.sample_freq_in=8000000
|
||||||
|
;#sample_freq_out: the desired sample frequency of the output signal
|
||||||
|
Resampler.sample_freq_out=4000000
|
||||||
;#dump: Dump the resamplered data to a file.
|
;#dump: Dump the resamplered data to a file.
|
||||||
Resampler.dump=false
|
Resampler.dump=false
|
||||||
;#dump_filename: Log path and filename.
|
;#dump_filename: Log path and filename.
|
||||||
Resampler.dump_filename=../data/resampler.dat
|
Resampler.dump_filename=../data/resampler.dat
|
||||||
|
|
||||||
;#item_type: Type and resolution for each of the signal samples.
|
|
||||||
Resampler.item_type=gr_complex
|
|
||||||
|
|
||||||
;#sample_freq_in: the sample frequency of the input signal
|
|
||||||
Resampler.sample_freq_in=8000000
|
|
||||||
|
|
||||||
;#sample_freq_out: the desired sample frequency of the output signal
|
|
||||||
Resampler.sample_freq_out=4000000
|
|
||||||
|
|
||||||
|
|
||||||
;######### CHANNELS GLOBAL CONFIG ############
|
;######### CHANNELS GLOBAL CONFIG ############
|
||||||
;#count: Number of available satellite channels.
|
;#count: Number of available satellite channels.
|
||||||
@ -181,11 +163,9 @@ Channel.signal=5X
|
|||||||
;#The following options are specific to each channel and overwrite the generic options
|
;#The following options are specific to each channel and overwrite the generic options
|
||||||
|
|
||||||
;######### CHANNEL 0 CONFIG ############
|
;######### CHANNEL 0 CONFIG ############
|
||||||
|
;Channel0.signal=5X
|
||||||
Channel0.signal=5X
|
|
||||||
|
|
||||||
;#satellite: Satellite PRN ID for this channel. Disable this option to random search
|
;#satellite: Satellite PRN ID for this channel. Disable this option to random search
|
||||||
Channel0.satellite=19
|
;Channel0.satellite=19
|
||||||
;Channel0.repeat_satellite=true
|
;Channel0.repeat_satellite=true
|
||||||
|
|
||||||
;######### CHANNEL 1 CONFIG ############
|
;######### CHANNEL 1 CONFIG ############
|
||||||
@ -207,19 +187,13 @@ Channel0.satellite=19
|
|||||||
;Channel3.satellite=20
|
;Channel3.satellite=20
|
||||||
|
|
||||||
;######### ACQUISITION GLOBAL CONFIG ############
|
;######### ACQUISITION GLOBAL CONFIG ############
|
||||||
|
Acquisition_5X.implementation=Galileo_E5a_Noncoherent_IQ_Acquisition_CAF
|
||||||
;#dump: Enable or disable the acquisition internal data file logging [true] or [false]
|
;#item_type: Type and resolution for each of the signal samples.
|
||||||
Acquisition_5X.dump=true
|
|
||||||
;#filename: Log path and filename
|
|
||||||
Acquisition_5X.dump_filename=./acq_dump.dat
|
|
||||||
;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
|
|
||||||
Acquisition_5X.item_type=gr_complex
|
Acquisition_5X.item_type=gr_complex
|
||||||
;#if: Signal intermediate frequency in [Hz]
|
;#if: Signal intermediate frequency in [Hz]
|
||||||
Acquisition_5X.if=0
|
Acquisition_5X.if=0
|
||||||
;#sampled_ms: Signal block duration for the acquisition signal detection [ms]
|
;#sampled_ms: Signal block duration for the acquisition signal detection [ms]
|
||||||
Acquisition_5X.coherent_integration_time_ms=1
|
Acquisition_5X.coherent_integration_time_ms=1
|
||||||
;#implementation: Acquisition algorithm selection for this channel: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
|
|
||||||
Acquisition_5X.implementation=Galileo_E5a_Noncoherent_IQ_Acquisition_CAF
|
|
||||||
;#threshold: Acquisition threshold. It will be ignored if pfa is defined.
|
;#threshold: Acquisition threshold. It will be ignored if pfa is defined.
|
||||||
Acquisition_5X.threshold=0.001
|
Acquisition_5X.threshold=0.001
|
||||||
;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
|
;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
|
||||||
@ -233,30 +207,23 @@ Acquisition_5X.doppler_step=250
|
|||||||
Acquisition_5X.bit_transition_flag=false
|
Acquisition_5X.bit_transition_flag=false
|
||||||
;#max_dwells: Maximum number of consecutive dwells to be processed. It will be ignored if bit_transition_flag=true
|
;#max_dwells: Maximum number of consecutive dwells to be processed. It will be ignored if bit_transition_flag=true
|
||||||
Acquisition_5X.max_dwells=1
|
Acquisition_5X.max_dwells=1
|
||||||
|
|
||||||
;#CAF filter: **Only for E5a** Resolves doppler ambiguity averaging the specified BW in the winner code delay. If set to 0 CAF filter is desactivated. Recommended value 3000 Hz
|
;#CAF filter: **Only for E5a** Resolves doppler ambiguity averaging the specified BW in the winner code delay. If set to 0 CAF filter is desactivated. Recommended value 3000 Hz
|
||||||
Acquisition_5X.CAF_window_hz=0
|
Acquisition_5X.CAF_window_hz=0
|
||||||
;#Zero_padding: **Only for E5a** Avoids power loss and doppler ambiguity in bit transitions by correlating one code with twice the input data length, ensuring that at least one full code is present without transitions.
|
;#Zero_padding: **Only for E5a** Avoids power loss and doppler ambiguity in bit transitions by correlating one code with twice the input data length, ensuring that at least one full code is present without transitions.
|
||||||
;#If set to 1 it is ON, if set to 0 it is OFF.
|
;#If set to 1 it is ON, if set to 0 it is OFF.
|
||||||
Acquisition_5X.Zero_padding=0
|
Acquisition_5X.Zero_padding=0
|
||||||
|
;#dump: Enable or disable the acquisition internal data file logging [true] or [false]
|
||||||
|
Acquisition_5X.dump=true
|
||||||
|
;#filename: Log path and filename
|
||||||
|
Acquisition_5X.dump_filename=./acq_dump.dat
|
||||||
|
|
||||||
|
|
||||||
;######### TRACKING GLOBAL CONFIG ############
|
;######### TRACKING GLOBAL CONFIG ############
|
||||||
|
|
||||||
;#implementation: Selected tracking algorithm:
|
|
||||||
Tracking_5X.implementation=Galileo_E5a_DLL_PLL_Tracking
|
Tracking_5X.implementation=Galileo_E5a_DLL_PLL_Tracking
|
||||||
;#item_type: Type and resolution for each of the signal samples. Use only [gr_complex] in this version.
|
;#item_type: Type and resolution for each of the signal samples.
|
||||||
Tracking_5X.item_type=gr_complex
|
Tracking_5X.item_type=gr_complex
|
||||||
|
|
||||||
;#sampling_frequency: Signal Intermediate Frequency in [Hz]
|
;#sampling_frequency: Signal Intermediate Frequency in [Hz]
|
||||||
Tracking_5X.if=0
|
Tracking_5X.if=0
|
||||||
|
|
||||||
;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false]
|
|
||||||
Tracking_5X.dump=true
|
|
||||||
|
|
||||||
;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number.
|
|
||||||
Tracking_5X.dump_filename=./tracking_ch_
|
|
||||||
|
|
||||||
;#pll_bw_hz_init: **Only for E5a** PLL loop filter bandwidth during initialization [Hz]
|
;#pll_bw_hz_init: **Only for E5a** PLL loop filter bandwidth during initialization [Hz]
|
||||||
Tracking_5X.pll_bw_hz_init=20.0;
|
Tracking_5X.pll_bw_hz_init=20.0;
|
||||||
;#dll_bw_hz_init: **Only for E5a** DLL loop filter bandwidth during initialization [Hz]
|
;#dll_bw_hz_init: **Only for E5a** DLL loop filter bandwidth during initialization [Hz]
|
||||||
@ -264,33 +231,33 @@ Tracking_5X.dll_bw_hz_init=20.0;
|
|||||||
;#dll_ti_ms: **Only for E5a** loop filter integration time after initialization (secondary code delay search)[ms]
|
;#dll_ti_ms: **Only for E5a** loop filter integration time after initialization (secondary code delay search)[ms]
|
||||||
;Tracking_5X.ti_ms=3;
|
;Tracking_5X.ti_ms=3;
|
||||||
Tracking_5X.ti_ms=1;
|
Tracking_5X.ti_ms=1;
|
||||||
|
|
||||||
;#pll_bw_hz: PLL loop filter bandwidth [Hz]
|
;#pll_bw_hz: PLL loop filter bandwidth [Hz]
|
||||||
;Tracking.pll_bw_hz=5.0;
|
;Tracking.pll_bw_hz=5.0;
|
||||||
Tracking_5X.pll_bw_hz=20.0;
|
Tracking_5X.pll_bw_hz=20.0;
|
||||||
|
|
||||||
;#dll_bw_hz: DLL loop filter bandwidth [Hz]
|
;#dll_bw_hz: DLL loop filter bandwidth [Hz]
|
||||||
;Tracking.dll_bw_hz=2.0;
|
;Tracking.dll_bw_hz=2.0;
|
||||||
Tracking_5X.dll_bw_hz=20.0;
|
Tracking_5X.dll_bw_hz=20.0;
|
||||||
|
|
||||||
;#order: PLL/DLL loop filter order [2] or [3]
|
;#order: PLL/DLL loop filter order [2] or [3]
|
||||||
Tracking_5X.order=2;
|
Tracking_5X.order=2;
|
||||||
|
|
||||||
;#early_late_space_chips: correlator early-late space [chips]. Use [0.5]
|
;#early_late_space_chips: correlator early-late space [chips]. Use [0.5]
|
||||||
Tracking_5X.early_late_space_chips=0.5;
|
Tracking_5X.early_late_space_chips=0.5;
|
||||||
|
;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false]
|
||||||
|
Tracking_5X.dump=true
|
||||||
|
;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number.
|
||||||
|
Tracking_5X.dump_filename=./tracking_ch_
|
||||||
|
|
||||||
|
|
||||||
;######### TELEMETRY DECODER CONFIG ############
|
;######### TELEMETRY DECODER CONFIG ############
|
||||||
;#implementation:
|
;#implementation:
|
||||||
TelemetryDecoder_5X.implementation=Galileo_E5a_Telemetry_Decoder
|
TelemetryDecoder_5X.implementation=Galileo_E5a_Telemetry_Decoder
|
||||||
TelemetryDecoder_5X.dump=false
|
TelemetryDecoder_5X.dump=false
|
||||||
|
|
||||||
|
|
||||||
;######### OBSERVABLES CONFIG ############
|
;######### OBSERVABLES CONFIG ############
|
||||||
;#implementation:
|
;#implementation:
|
||||||
Observables.implementation=Hybrid_Observables
|
Observables.implementation=Hybrid_Observables
|
||||||
|
|
||||||
;#dump: Enable or disable the Observables internal binary data file logging [true] or [false]
|
;#dump: Enable or disable the Observables internal binary data file logging [true] or [false]
|
||||||
Observables.dump=false
|
Observables.dump=false
|
||||||
|
|
||||||
;#dump_filename: Log path and filename.
|
;#dump_filename: Log path and filename.
|
||||||
Observables.dump_filename=./observables.dat
|
Observables.dump_filename=./observables.dat
|
||||||
|
|
||||||
@ -298,34 +265,24 @@ Observables.dump_filename=./observables.dat
|
|||||||
;######### PVT CONFIG ############
|
;######### PVT CONFIG ############
|
||||||
;#implementation: Position Velocity and Time (PVT) implementation algorithm:
|
;#implementation: Position Velocity and Time (PVT) implementation algorithm:
|
||||||
PVT.implementation=RTKLIB_PVT
|
PVT.implementation=RTKLIB_PVT
|
||||||
|
|
||||||
PVT.positioning_mode=Single ; options: Single, Static, Kinematic, PPP_Static, PPP_Kinematic
|
PVT.positioning_mode=Single ; options: Single, Static, Kinematic, PPP_Static, PPP_Kinematic
|
||||||
PVT.iono_model=Broadcast ; options: OFF, Broadcast, SBAS, Iono-Free-LC, Estimate_STEC, IONEX
|
PVT.iono_model=Broadcast ; options: OFF, Broadcast, SBAS, Iono-Free-LC, Estimate_STEC, IONEX
|
||||||
PVT.trop_model=Saastamoinen ; options: OFF, Saastamoinen, SBAS, Estimate_ZTD, Estimate_ZTD_Grad
|
PVT.trop_model=Saastamoinen ; options: OFF, Saastamoinen, SBAS, Estimate_ZTD, Estimate_ZTD_Grad
|
||||||
|
|
||||||
;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time [ms]
|
;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time [ms]
|
||||||
PVT.output_rate_ms=100
|
PVT.output_rate_ms=100
|
||||||
|
|
||||||
;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms.
|
;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms.
|
||||||
PVT.display_rate_ms=500
|
PVT.display_rate_ms=500
|
||||||
|
|
||||||
;# KML, GeoJSON, NMEA and RTCM output configuration
|
;# KML, GeoJSON, NMEA and RTCM output configuration
|
||||||
;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump.
|
|
||||||
PVT.dump_filename=./PVT
|
|
||||||
|
|
||||||
;#nmea_dump_filename: NMEA log path and filename
|
;#nmea_dump_filename: NMEA log path and filename
|
||||||
PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea;
|
PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea;
|
||||||
|
|
||||||
;#flag_nmea_tty_port: Enable or disable the NMEA log to a serial TTY port (Can be used with real hardware or virtual one)
|
;#flag_nmea_tty_port: Enable or disable the NMEA log to a serial TTY port (Can be used with real hardware or virtual one)
|
||||||
PVT.flag_nmea_tty_port=true;
|
PVT.flag_nmea_tty_port=true;
|
||||||
|
|
||||||
;#nmea_dump_devname: serial device descriptor for NMEA logging
|
;#nmea_dump_devname: serial device descriptor for NMEA logging
|
||||||
PVT.nmea_dump_devname=/dev/pts/4
|
PVT.nmea_dump_devname=/dev/pts/4
|
||||||
|
|
||||||
PVT.flag_rtcm_server=false
|
PVT.flag_rtcm_server=false
|
||||||
PVT.flag_rtcm_tty_port=false
|
PVT.flag_rtcm_tty_port=false
|
||||||
PVT.rtcm_dump_devname=/dev/pts/1
|
PVT.rtcm_dump_devname=/dev/pts/1
|
||||||
|
|
||||||
|
|
||||||
;#dump: Enable or disable the PVT internal binary data file logging [true] or [false]
|
;#dump: Enable or disable the PVT internal binary data file logging [true] or [false]
|
||||||
PVT.dump=false
|
PVT.dump=false
|
||||||
|
;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump.
|
||||||
|
PVT.dump_filename=./PVT
|
||||||
|
@ -28,7 +28,6 @@ SignalSource.implementation=File_Signal_Source
|
|||||||
SignalSource.filename=/datalogger/signals/ifen/Galileo_E5ab_IFEN_CTTC_run1.dat ; <- PUT YOUR FILE HERE
|
SignalSource.filename=/datalogger/signals/ifen/Galileo_E5ab_IFEN_CTTC_run1.dat ; <- PUT YOUR FILE HERE
|
||||||
SignalSource.item_type=gr_complex
|
SignalSource.item_type=gr_complex
|
||||||
SignalSource.sampling_frequency=50000000
|
SignalSource.sampling_frequency=50000000
|
||||||
SignalSource.freq=1176450000
|
|
||||||
SignalSource.samples=0
|
SignalSource.samples=0
|
||||||
SignalSource.repeat=false
|
SignalSource.repeat=false
|
||||||
SignalSource.dump=false
|
SignalSource.dump=false
|
||||||
@ -44,8 +43,6 @@ DataTypeAdapter.implementation=Pass_Through
|
|||||||
|
|
||||||
;######### INPUT_FILTER CONFIG ############
|
;######### INPUT_FILTER CONFIG ############
|
||||||
InputFilter.implementation=Freq_Xlating_Fir_Filter
|
InputFilter.implementation=Freq_Xlating_Fir_Filter
|
||||||
InputFilter.dump=false
|
|
||||||
InputFilter.dump_filename=../data/input_filter.dat
|
|
||||||
InputFilter.input_item_type=gr_complex
|
InputFilter.input_item_type=gr_complex
|
||||||
InputFilter.output_item_type=gr_complex
|
InputFilter.output_item_type=gr_complex
|
||||||
InputFilter.taps_item_type=float
|
InputFilter.taps_item_type=float
|
||||||
@ -66,6 +63,8 @@ InputFilter.grid_density=16
|
|||||||
InputFilter.sampling_frequency=50000000
|
InputFilter.sampling_frequency=50000000
|
||||||
InputFilter.IF=-15345000
|
InputFilter.IF=-15345000
|
||||||
InputFilter.decimation_factor=1
|
InputFilter.decimation_factor=1
|
||||||
|
InputFilter.dump=false
|
||||||
|
InputFilter.dump_filename=../data/input_filter.dat
|
||||||
|
|
||||||
|
|
||||||
;######### RESAMPLER CONFIG ############
|
;######### RESAMPLER CONFIG ############
|
||||||
@ -89,23 +88,21 @@ Channel0.satellite=19
|
|||||||
|
|
||||||
;######### CHANNEL 1 CONFIG ############
|
;######### CHANNEL 1 CONFIG ############
|
||||||
Channel1.signal=5X
|
Channel1.signal=5X
|
||||||
Channel1.satellite=12
|
;Channel1.satellite=12
|
||||||
|
|
||||||
;######### CHANNEL 2 CONFIG ############
|
;######### CHANNEL 2 CONFIG ############
|
||||||
Channel2.signal=5X
|
Channel2.signal=5X
|
||||||
Channel2.satellite=11
|
;Channel2.satellite=11
|
||||||
|
|
||||||
;######### CHANNEL 3 CONFIG ############
|
;######### CHANNEL 3 CONFIG ############
|
||||||
Channel3.signal=5X
|
Channel3.signal=5X
|
||||||
Channel3.satellite=20
|
;Channel3.satellite=20
|
||||||
|
|
||||||
;######### ACQUISITION GLOBAL CONFIG ############
|
;######### ACQUISITION GLOBAL CONFIG ############
|
||||||
Acquisition_5X.dump=false
|
Acquisition_5X.implementation=Galileo_E5a_Noncoherent_IQ_Acquisition_CAF
|
||||||
Acquisition_5X.dump_filename=./acq_dump.dat
|
|
||||||
Acquisition_5X.item_type=gr_complex
|
Acquisition_5X.item_type=gr_complex
|
||||||
Acquisition_5X.if=0
|
Acquisition_5X.if=0
|
||||||
Acquisition_5X.coherent_integration_time_ms=1
|
Acquisition_5X.coherent_integration_time_ms=1
|
||||||
Acquisition_5X.implementation=Galileo_E5a_Noncoherent_IQ_Acquisition_CAF
|
|
||||||
Acquisition_5X.threshold=0.002
|
Acquisition_5X.threshold=0.002
|
||||||
Acquisition_5X.doppler_max=10000
|
Acquisition_5X.doppler_max=10000
|
||||||
Acquisition_5X.doppler_step=250
|
Acquisition_5X.doppler_step=250
|
||||||
@ -113,14 +110,14 @@ Acquisition_5X.bit_transition_flag=false
|
|||||||
Acquisition_5X.max_dwells=1
|
Acquisition_5X.max_dwells=1
|
||||||
Acquisition_5X.CAF_window_hz=0 ; **Only for E5a** Resolves doppler ambiguity averaging the specified BW in the winner code delay. If set to 0 CAF filter is desactivated. Recommended value 3000 Hz
|
Acquisition_5X.CAF_window_hz=0 ; **Only for E5a** Resolves doppler ambiguity averaging the specified BW in the winner code delay. If set to 0 CAF filter is desactivated. Recommended value 3000 Hz
|
||||||
Acquisition_5X.Zero_padding=0 ; **Only for E5a** Avoids power loss and doppler ambiguity in bit transitions by correlating one code with twice the input data length, ensuring that at least one full code is present without transitions. If set to 1 it is ON, if set to 0 it is OFF.
|
Acquisition_5X.Zero_padding=0 ; **Only for E5a** Avoids power loss and doppler ambiguity in bit transitions by correlating one code with twice the input data length, ensuring that at least one full code is present without transitions. If set to 1 it is ON, if set to 0 it is OFF.
|
||||||
|
Acquisition_5X.dump=false
|
||||||
|
Acquisition_5X.dump_filename=./acq_dump.dat
|
||||||
|
|
||||||
|
|
||||||
;######### TRACKING GLOBAL CONFIG ############
|
;######### TRACKING GLOBAL CONFIG ############
|
||||||
Tracking_5X.implementation=Galileo_E5a_DLL_PLL_Tracking
|
Tracking_5X.implementation=Galileo_E5a_DLL_PLL_Tracking
|
||||||
Tracking_5X.item_type=gr_complex
|
Tracking_5X.item_type=gr_complex
|
||||||
Tracking_5X.if=0
|
Tracking_5X.if=0
|
||||||
Tracking_5X.dump=false
|
|
||||||
Tracking_5X.dump_filename=./tracking_ch_
|
|
||||||
Tracking_5X.pll_bw_hz_init=20.0; **Only for E5a** PLL loop filter bandwidth during initialization [Hz]
|
Tracking_5X.pll_bw_hz_init=20.0; **Only for E5a** PLL loop filter bandwidth during initialization [Hz]
|
||||||
Tracking_5X.dll_bw_hz_init=20.0; **Only for E5a** DLL loop filter bandwidth during initialization [Hz]
|
Tracking_5X.dll_bw_hz_init=20.0; **Only for E5a** DLL loop filter bandwidth during initialization [Hz]
|
||||||
Tracking_5X.ti_ms=1; **Only for E5a** loop filter integration time after initialization (secondary code delay search)[ms]
|
Tracking_5X.ti_ms=1; **Only for E5a** loop filter integration time after initialization (secondary code delay search)[ms]
|
||||||
@ -128,11 +125,15 @@ Tracking_5X.pll_bw_hz=20.0;
|
|||||||
Tracking_5X.dll_bw_hz=20.0;
|
Tracking_5X.dll_bw_hz=20.0;
|
||||||
Tracking_5X.order=2;
|
Tracking_5X.order=2;
|
||||||
Tracking_5X.early_late_space_chips=0.5;
|
Tracking_5X.early_late_space_chips=0.5;
|
||||||
|
Tracking_5X.dump=false
|
||||||
|
Tracking_5X.dump_filename=./tracking_ch_
|
||||||
|
|
||||||
|
|
||||||
;######### TELEMETRY DECODER CONFIG ############
|
;######### TELEMETRY DECODER CONFIG ############
|
||||||
TelemetryDecoder_5X.implementation=Galileo_E5a_Telemetry_Decoder
|
TelemetryDecoder_5X.implementation=Galileo_E5a_Telemetry_Decoder
|
||||||
TelemetryDecoder_5X.dump=false
|
TelemetryDecoder_5X.dump=false
|
||||||
|
|
||||||
|
|
||||||
;######### OBSERVABLES CONFIG ############
|
;######### OBSERVABLES CONFIG ############
|
||||||
Observables.implementation=Hybrid_Observables
|
Observables.implementation=Hybrid_Observables
|
||||||
Observables.dump=false
|
Observables.dump=false
|
||||||
|
@ -11,32 +11,17 @@ GNSS-SDR.internal_fs_sps=20000000
|
|||||||
|
|
||||||
|
|
||||||
;######### SIGNAL_SOURCE CONFIG ############
|
;######### SIGNAL_SOURCE CONFIG ############
|
||||||
;#implementation: Use [File_Signal_Source] or [UHD_Signal_Source] or [GN3S_Signal_Source] (experimental)
|
|
||||||
SignalSource.implementation=File_Signal_Source
|
SignalSource.implementation=File_Signal_Source
|
||||||
|
|
||||||
;#filename: path to file with the captured GNSS signal samples to be processed
|
;#filename: path to file with the captured GNSS signal samples to be processed
|
||||||
SignalSource.filename=/datalogger/signals/Fraunhofer/L125_III1b_210s_L1.bin ; <- PUT YOUR FILE HERE
|
SignalSource.filename=/datalogger/signals/Fraunhofer/L125_III1b_210s_L1.bin ; <- PUT YOUR FILE HERE
|
||||||
|
;#item_type: Type and resolution for each of the signal samples..
|
||||||
;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
|
|
||||||
SignalSource.item_type=byte
|
SignalSource.item_type=byte
|
||||||
|
;#sampling_frequency: Original Signal sampling frequency in samples per second
|
||||||
;#sampling_frequency: Original Signal sampling frequency in [Hz]
|
|
||||||
SignalSource.sampling_frequency=20000000
|
SignalSource.sampling_frequency=20000000
|
||||||
|
|
||||||
;#freq: RF front-end center frequency in [Hz]
|
|
||||||
SignalSource.freq=1575420000
|
|
||||||
|
|
||||||
;#samples: Number of samples to be processed. Notice that 0 indicates the entire file.
|
;#samples: Number of samples to be processed. Notice that 0 indicates the entire file.
|
||||||
SignalSource.samples=0
|
SignalSource.samples=0
|
||||||
|
;#repeat: Repeat the processing file.
|
||||||
;#repeat: Repeat the processing file. Disable this option in this version
|
|
||||||
SignalSource.repeat=false
|
SignalSource.repeat=false
|
||||||
|
|
||||||
;#dump: Dump the Signal source data to a file. Disable this option in this version
|
|
||||||
SignalSource.dump=false
|
|
||||||
|
|
||||||
SignalSource.dump_filename=../data/signal_source.dat
|
|
||||||
|
|
||||||
;#enable_throttle_control: Enabling this option tells the signal source to keep the delay between samples in post processing.
|
;#enable_throttle_control: Enabling this option tells the signal source to keep the delay between samples in post processing.
|
||||||
; it helps to not overload the CPU, but the processing time will be longer.
|
; it helps to not overload the CPU, but the processing time will be longer.
|
||||||
SignalSource.enable_throttle_control=false
|
SignalSource.enable_throttle_control=false
|
||||||
@ -51,14 +36,12 @@ SignalSource.enable_throttle_control=false
|
|||||||
SignalConditioner.implementation=Signal_Conditioner
|
SignalConditioner.implementation=Signal_Conditioner
|
||||||
|
|
||||||
;######### DATA_TYPE_ADAPTER CONFIG ############
|
;######### DATA_TYPE_ADAPTER CONFIG ############
|
||||||
;## Changes the type of input data. Please disable it in this version.
|
;## Changes the type of input data.
|
||||||
;#implementation: [Pass_Through] disables this block
|
;#implementation: [Pass_Through] disables this block
|
||||||
DataTypeAdapter.implementation=Ibyte_To_Complex
|
DataTypeAdapter.implementation=Ibyte_To_Complex
|
||||||
|
|
||||||
;######### INPUT_FILTER CONFIG ############
|
;######### INPUT_FILTER CONFIG ############
|
||||||
;## Filter the input data. Can be combined with frequency translation for IF signals
|
;## Filter the input data. Can be combined with frequency translation for IF signals
|
||||||
|
|
||||||
;#implementation: Use [Pass_Through] or [Fir_Filter] or [Freq_Xlating_Fir_Filter]
|
|
||||||
;#[Pass_Through] disables this block
|
;#[Pass_Through] disables this block
|
||||||
;#[Fir_Filter] enables a FIR Filter
|
;#[Fir_Filter] enables a FIR Filter
|
||||||
;#[Freq_Xlating_Fir_Filter] enables FIR filter and a composite frequency translation that shifts IF down to zero Hz.
|
;#[Freq_Xlating_Fir_Filter] enables FIR filter and a composite frequency translation that shifts IF down to zero Hz.
|
||||||
@ -67,20 +50,15 @@ DataTypeAdapter.implementation=Ibyte_To_Complex
|
|||||||
;InputFilter.implementation=Freq_Xlating_Fir_Filter
|
;InputFilter.implementation=Freq_Xlating_Fir_Filter
|
||||||
InputFilter.implementation=Pass_Through
|
InputFilter.implementation=Pass_Through
|
||||||
|
|
||||||
;#dump: Dump the filtered data to a file.
|
|
||||||
InputFilter.dump=false
|
|
||||||
|
|
||||||
;#dump_filename: Log path and filename.
|
|
||||||
InputFilter.dump_filename=../data/input_filter.dat
|
|
||||||
|
|
||||||
;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation.
|
;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation.
|
||||||
;#These options are based on parameters of gnuradio's function: gr_remez.
|
;#These options are based on parameters of gnuradio's function: gr_remez.
|
||||||
;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges, the desired reponse on those bands, and the weight given to the error in those bands.
|
;#This function calculates the optimal (in the Chebyshev/minimax sense) FIR filter impulse response given a set of band edges,
|
||||||
|
;#the desired response on those bands, and the weight given to the error in those bands.
|
||||||
|
|
||||||
;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version.
|
;#input_item_type: Type and resolution for input signal samples.
|
||||||
InputFilter.input_item_type=gr_complex
|
InputFilter.input_item_type=gr_complex
|
||||||
|
|
||||||
;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version.
|
;#outut_item_type: Type and resolution for output filtered signal samples..
|
||||||
InputFilter.output_item_type=gr_complex
|
InputFilter.output_item_type=gr_complex
|
||||||
|
|
||||||
;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version.
|
;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version.
|
||||||
@ -126,32 +104,30 @@ InputFilter.grid_density=16
|
|||||||
|
|
||||||
InputFilter.sampling_frequency=20000000
|
InputFilter.sampling_frequency=20000000
|
||||||
InputFilter.IF=0
|
InputFilter.IF=0
|
||||||
|
;#dump: Dump the filtered data to a file.
|
||||||
|
InputFilter.dump=false
|
||||||
|
;#dump_filename: Log path and filename.
|
||||||
|
InputFilter.dump_filename=../data/input_filter.dat
|
||||||
|
|
||||||
|
|
||||||
;######### RESAMPLER CONFIG ############
|
;######### RESAMPLER CONFIG ############
|
||||||
;## Resamples the input data.
|
;## Resamples the input data.
|
||||||
|
|
||||||
;#implementation: Use [Pass_Through] or [Direct_Resampler]
|
;#implementation: Use [Pass_Through] or [Direct_Resampler]
|
||||||
;#[Pass_Through] disables this block
|
;#[Pass_Through] disables this block
|
||||||
;#[Direct_Resampler] enables a resampler that implements a nearest neigbourhood interpolation
|
;#[Direct_Resampler] enables a resampler that implements a nearest neigbourhood interpolation
|
||||||
;Resampler.implementation=Direct_Resampler
|
;Resampler.implementation=Direct_Resampler
|
||||||
Resampler.implementation=Pass_Through
|
Resampler.implementation=Pass_Through
|
||||||
|
;#item_type: Type and resolution for each of the signal samples.
|
||||||
|
Resampler.item_type=gr_complex
|
||||||
|
;#sample_freq_in: the sample frequency of the input signal
|
||||||
|
Resampler.sample_freq_in=20000000
|
||||||
|
;#sample_freq_out: the desired sample frequency of the output signal
|
||||||
|
Resampler.sample_freq_out=20000000
|
||||||
;#dump: Dump the resamplered data to a file.
|
;#dump: Dump the resamplered data to a file.
|
||||||
Resampler.dump=false
|
Resampler.dump=false
|
||||||
;#dump_filename: Log path and filename.
|
;#dump_filename: Log path and filename.
|
||||||
Resampler.dump_filename=../data/resampler.dat
|
Resampler.dump_filename=../data/resampler.dat
|
||||||
|
|
||||||
;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
|
|
||||||
Resampler.item_type=gr_complex
|
|
||||||
|
|
||||||
;#sample_freq_in: the sample frequency of the input signal
|
|
||||||
Resampler.sample_freq_in=20000000
|
|
||||||
|
|
||||||
;#sample_freq_out: the desired sample frequency of the output signal
|
|
||||||
Resampler.sample_freq_out=20000000
|
|
||||||
|
|
||||||
|
|
||||||
;######### CHANNELS GLOBAL CONFIG ############
|
;######### CHANNELS GLOBAL CONFIG ############
|
||||||
;#count: Number of available GPS satellite channels.
|
;#count: Number of available GPS satellite channels.
|
||||||
@ -181,19 +157,13 @@ Channel15.signal=1B
|
|||||||
|
|
||||||
|
|
||||||
;######### GPS ACQUISITION CONFIG ############
|
;######### GPS ACQUISITION CONFIG ############
|
||||||
|
Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition
|
||||||
;#dump: Enable or disable the acquisition internal data file logging [true] or [false]
|
;#item_type: Type and resolution for each of the signal samples.
|
||||||
Acquisition_1C.dump=false
|
|
||||||
;#filename: Log path and filename
|
|
||||||
Acquisition_1C.dump_filename=./acq_dump.dat
|
|
||||||
;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
|
|
||||||
Acquisition_1C.item_type=gr_complex
|
Acquisition_1C.item_type=gr_complex
|
||||||
;#if: Signal intermediate frequency in [Hz]
|
;#if: Signal intermediate frequency in [Hz]
|
||||||
Acquisition_1C.if=0
|
Acquisition_1C.if=0
|
||||||
;#sampled_ms: Signal block duration for the acquisition signal detection [ms]
|
;#sampled_ms: Signal block duration for the acquisition signal detection [ms]
|
||||||
Acquisition_1C.sampled_ms=1
|
Acquisition_1C.sampled_ms=1
|
||||||
;#implementation: Acquisition algorithm selection for this channel: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
|
|
||||||
Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition
|
|
||||||
;#threshold: Acquisition threshold
|
;#threshold: Acquisition threshold
|
||||||
Acquisition_1C.threshold=0.0060
|
Acquisition_1C.threshold=0.0060
|
||||||
;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
|
;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
|
||||||
@ -202,22 +172,20 @@ Acquisition_1C.threshold=0.0060
|
|||||||
Acquisition_1C.doppler_max=10000
|
Acquisition_1C.doppler_max=10000
|
||||||
;#doppler_max: Doppler step in the grid search [Hz]
|
;#doppler_max: Doppler step in the grid search [Hz]
|
||||||
Acquisition_1C.doppler_step=500
|
Acquisition_1C.doppler_step=500
|
||||||
|
;#dump: Enable or disable the acquisition internal data file logging [true] or [false]
|
||||||
|
Acquisition_1C.dump=false
|
||||||
|
;#filename: Log path and filename
|
||||||
|
Acquisition_1C.dump_filename=./acq_dump.dat
|
||||||
|
|
||||||
|
|
||||||
;######### GALILEO ACQUISITION CONFIG ############
|
;######### GALILEO ACQUISITION CONFIG ############
|
||||||
|
Acquisition_1B.implementation=Galileo_E1_PCPS_Ambiguous_Acquisition
|
||||||
;#dump: Enable or disable the acquisition internal data file logging [true] or [false]
|
;#item_type: Type and resolution for each of the signal samples.
|
||||||
Acquisition_1B.dump=false
|
|
||||||
;#filename: Log path and filename
|
|
||||||
Acquisition_1B.dump_filename=./acq_dump.dat
|
|
||||||
;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
|
|
||||||
Acquisition_1B.item_type=gr_complex
|
Acquisition_1B.item_type=gr_complex
|
||||||
;#if: Signal intermediate frequency in [Hz]
|
;#if: Signal intermediate frequency in [Hz]
|
||||||
Acquisition_1B.if=0
|
Acquisition_1B.if=0
|
||||||
;#sampled_ms: Signal block duration for the acquisition signal detection [ms]
|
;#sampled_ms: Signal block duration for the acquisition signal detection [ms]
|
||||||
Acquisition_1B.sampled_ms=4
|
Acquisition_1B.sampled_ms=4
|
||||||
;#implementation: Acquisition algorithm selection for this channel: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
|
|
||||||
Acquisition_1B.implementation=Galileo_E1_PCPS_Ambiguous_Acquisition
|
|
||||||
;#threshold: Acquisition threshold
|
;#threshold: Acquisition threshold
|
||||||
;Acquisition_1B.threshold=0
|
;Acquisition_1B.threshold=0
|
||||||
;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
|
;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
|
||||||
@ -226,83 +194,69 @@ Acquisition_1B.pfa=0.0000008
|
|||||||
Acquisition_1B.doppler_max=15000
|
Acquisition_1B.doppler_max=15000
|
||||||
;#doppler_max: Doppler step in the grid search [Hz]
|
;#doppler_max: Doppler step in the grid search [Hz]
|
||||||
Acquisition_1B.doppler_step=125
|
Acquisition_1B.doppler_step=125
|
||||||
|
;#dump: Enable or disable the acquisition internal data file logging [true] or [false]
|
||||||
|
Acquisition_1B.dump=false
|
||||||
|
;#filename: Log path and filename
|
||||||
|
Acquisition_1B.dump_filename=./acq_dump.dat
|
||||||
|
|
||||||
|
|
||||||
;######### TRACKING GPS CONFIG ############
|
;######### TRACKING GPS CONFIG ############
|
||||||
|
|
||||||
;#implementation: Selected tracking algorithm: [GPS_L1_CA_DLL_PLL_Tracking] or [GPS_L1_CA_DLL_PLL_C_Aid_Tracking] or [GPS_L1_CA_TCP_CONNECTOR_Tracking] or [Galileo_E1_DLL_PLL_VEML_Tracking]
|
|
||||||
Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking
|
Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking
|
||||||
;#item_type: Type and resolution for each of the signal samples. Use only [gr_complex] in this version.
|
;#item_type: Type and resolution for each of the signal samples.
|
||||||
Tracking_1C.item_type=gr_complex
|
Tracking_1C.item_type=gr_complex
|
||||||
|
|
||||||
;#sampling_frequency: Signal Intermediate Frequency in [Hz]
|
;#sampling_frequency: Signal Intermediate Frequency in [Hz]
|
||||||
Tracking_1C.if=0
|
Tracking_1C.if=0
|
||||||
|
;#pll_bw_hz: PLL loop filter bandwidth [Hz]
|
||||||
|
Tracking_1C.pll_bw_hz=45.0;
|
||||||
|
;#dll_bw_hz: DLL loop filter bandwidth [Hz]
|
||||||
|
Tracking_1C.dll_bw_hz=4.0;
|
||||||
|
;#order: PLL/DLL loop filter order [2] or [3]
|
||||||
|
Tracking_1C.order=3;
|
||||||
;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false]
|
;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false]
|
||||||
Tracking_1C.dump=false
|
Tracking_1C.dump=false
|
||||||
|
|
||||||
;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number.
|
;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number.
|
||||||
Tracking_1C.dump_filename=../data/epl_tracking_ch_
|
Tracking_1C.dump_filename=../data/epl_tracking_ch_
|
||||||
|
|
||||||
;#pll_bw_hz: PLL loop filter bandwidth [Hz]
|
|
||||||
Tracking_1C.pll_bw_hz=45.0;
|
|
||||||
|
|
||||||
;#dll_bw_hz: DLL loop filter bandwidth [Hz]
|
|
||||||
Tracking_1C.dll_bw_hz=4.0;
|
|
||||||
|
|
||||||
;#order: PLL/DLL loop filter order [2] or [3]
|
|
||||||
Tracking_1C.order=3;
|
|
||||||
|
|
||||||
;######### TRACKING GALILEO CONFIG ############
|
;######### TRACKING GALILEO CONFIG ############
|
||||||
|
|
||||||
;#implementation: Selected tracking algorithm: [GPS_L1_CA_DLL_PLL_Tracking] or [GPS_L1_CA_DLL_PLL_C_Aid_Tracking] or [GPS_L1_CA_TCP_CONNECTOR_Tracking] or [Galileo_E1_DLL_PLL_VEML_Tracking]
|
|
||||||
Tracking_1B.implementation=Galileo_E1_DLL_PLL_VEML_Tracking
|
Tracking_1B.implementation=Galileo_E1_DLL_PLL_VEML_Tracking
|
||||||
;#item_type: Type and resolution for each of the signal samples.
|
;#item_type: Type and resolution for each of the signal samples.
|
||||||
Tracking_1B.item_type=gr_complex
|
Tracking_1B.item_type=gr_complex
|
||||||
|
|
||||||
;#sampling_frequency: Signal Intermediate Frequency in [Hz]
|
;#sampling_frequency: Signal Intermediate Frequency in [Hz]
|
||||||
Tracking_1B.if=0
|
Tracking_1B.if=0
|
||||||
|
|
||||||
;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false]
|
|
||||||
Tracking_1B.dump=false
|
|
||||||
|
|
||||||
;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number.
|
|
||||||
Tracking_1B.dump_filename=../data/veml_tracking_ch_
|
|
||||||
|
|
||||||
;#pll_bw_hz: PLL loop filter bandwidth [Hz]
|
;#pll_bw_hz: PLL loop filter bandwidth [Hz]
|
||||||
Tracking_1B.pll_bw_hz=15.0;
|
Tracking_1B.pll_bw_hz=15.0;
|
||||||
|
|
||||||
;#dll_bw_hz: DLL loop filter bandwidth [Hz]
|
;#dll_bw_hz: DLL loop filter bandwidth [Hz]
|
||||||
Tracking_1B.dll_bw_hz=2.0;
|
Tracking_1B.dll_bw_hz=2.0;
|
||||||
|
|
||||||
;#order: PLL/DLL loop filter order [2] or [3]
|
;#order: PLL/DLL loop filter order [2] or [3]
|
||||||
Tracking_1B.order=3;
|
Tracking_1B.order=3;
|
||||||
|
|
||||||
;#early_late_space_chips: correlator early-late space [chips]. Use [0.5] for GPS and [0.15] for Galileo
|
;#early_late_space_chips: correlator early-late space [chips]. Use [0.5] for GPS and [0.15] for Galileo
|
||||||
Tracking_1B.early_late_space_chips=0.15;
|
Tracking_1B.early_late_space_chips=0.15;
|
||||||
|
|
||||||
;#very_early_late_space_chips: only for [Galileo_E1_DLL_PLL_VEML_Tracking], correlator very early-late space [chips]. Use [0.6]
|
;#very_early_late_space_chips: only for [Galileo_E1_DLL_PLL_VEML_Tracking], correlator very early-late space [chips]. Use [0.6]
|
||||||
Tracking_1B.very_early_late_space_chips=0.6;
|
Tracking_1B.very_early_late_space_chips=0.6;
|
||||||
|
;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false]
|
||||||
|
Tracking_1B.dump=false
|
||||||
|
;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number.
|
||||||
|
Tracking_1B.dump_filename=../data/veml_tracking_ch_
|
||||||
|
|
||||||
|
|
||||||
;######### TELEMETRY DECODER GPS CONFIG ############
|
;######### TELEMETRY DECODER GPS CONFIG ############
|
||||||
;#implementation: Use [GPS_L1_CA_Telemetry_Decoder] for GPS L1 C/A
|
;#implementation: Use [GPS_L1_CA_Telemetry_Decoder] for GPS L1 C/A
|
||||||
TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder
|
TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder
|
||||||
TelemetryDecoder_1C.dump=false
|
TelemetryDecoder_1C.dump=false
|
||||||
;#decimation factor
|
|
||||||
TelemetryDecoder_1C.decimation_factor=4;
|
|
||||||
|
|
||||||
;######### TELEMETRY DECODER GALILEO CONFIG ############
|
;######### TELEMETRY DECODER GALILEO CONFIG ############
|
||||||
;#implementation: Use [Galileo_E1B_Telemetry_Decoder] for Galileo E1B
|
;#implementation: Use [Galileo_E1B_Telemetry_Decoder] for Galileo E1B
|
||||||
TelemetryDecoder_1B.implementation=Galileo_E1B_Telemetry_Decoder
|
TelemetryDecoder_1B.implementation=Galileo_E1B_Telemetry_Decoder
|
||||||
TelemetryDecoder_1B.dump=false
|
TelemetryDecoder_1B.dump=false
|
||||||
|
|
||||||
|
|
||||||
;######### OBSERVABLES CONFIG ############
|
;######### OBSERVABLES CONFIG ############
|
||||||
;#implementation:
|
;#implementation:
|
||||||
Observables.implementation=Hybrid_Observables
|
Observables.implementation=Hybrid_Observables
|
||||||
|
|
||||||
;#dump: Enable or disable the Observables internal binary data file logging [true] or [false]
|
;#dump: Enable or disable the Observables internal binary data file logging [true] or [false]
|
||||||
Observables.dump=false
|
Observables.dump=false
|
||||||
|
|
||||||
;#dump_filename: Log path and filename.
|
;#dump_filename: Log path and filename.
|
||||||
Observables.dump_filename=./observables.dat
|
Observables.dump_filename=./observables.dat
|
||||||
|
|
||||||
@ -310,23 +264,17 @@ Observables.dump_filename=./observables.dat
|
|||||||
;######### PVT CONFIG ############
|
;######### PVT CONFIG ############
|
||||||
;#implementation: Position Velocity and Time (PVT) implementation:
|
;#implementation: Position Velocity and Time (PVT) implementation:
|
||||||
PVT.implementation=RTKLIB_PVT
|
PVT.implementation=RTKLIB_PVT
|
||||||
|
|
||||||
PVT.positioning_mode=PPP_Static ; options: Single, Static, Kinematic, PPP_Static, PPP_Kinematic
|
PVT.positioning_mode=PPP_Static ; options: Single, Static, Kinematic, PPP_Static, PPP_Kinematic
|
||||||
PVT.iono_model=Broadcast ; options: OFF, Broadcast, SBAS, Iono-Free-LC, Estimate_STEC, IONEX
|
PVT.iono_model=Broadcast ; options: OFF, Broadcast, SBAS, Iono-Free-LC, Estimate_STEC, IONEX
|
||||||
PVT.trop_model=Saastamoinen ; options: OFF, Saastamoinen, SBAS, Estimate_ZTD, Estimate_ZTD_Grad
|
PVT.trop_model=Saastamoinen ; options: OFF, Saastamoinen, SBAS, Estimate_ZTD, Estimate_ZTD_Grad
|
||||||
|
|
||||||
;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms]
|
;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms]
|
||||||
PVT.output_rate_ms=100;
|
PVT.output_rate_ms=100;
|
||||||
|
|
||||||
;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms.
|
;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms.
|
||||||
PVT.display_rate_ms=500;
|
PVT.display_rate_ms=500;
|
||||||
|
|
||||||
;#dump: Enable or disable the PVT internal binary data file logging [true] or [false]
|
;#dump: Enable or disable the PVT internal binary data file logging [true] or [false]
|
||||||
PVT.dump=false
|
PVT.dump=false
|
||||||
|
|
||||||
PVT.flag_rtcm_server=false
|
PVT.flag_rtcm_server=false
|
||||||
PVT.flag_rtcm_tty_port=false
|
PVT.flag_rtcm_tty_port=false
|
||||||
PVT.rtcm_dump_devname=/dev/pts/1
|
PVT.rtcm_dump_devname=/dev/pts/1
|
||||||
|
|
||||||
;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump.
|
;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump.
|
||||||
PVT.dump_filename=./PVT
|
PVT.dump_filename=./PVT
|
||||||
|
@ -12,33 +12,22 @@ GNSS-SDR.internal_fs_sps=2600000
|
|||||||
|
|
||||||
|
|
||||||
;######### SIGNAL_SOURCE CONFIG ############
|
;######### SIGNAL_SOURCE CONFIG ############
|
||||||
;#implementation: Use [File_Signal_Source] or [UHD_Signal_Source] or [GN3S_Signal_Source] (experimental)
|
;#implementation
|
||||||
SignalSource.implementation=File_Signal_Source
|
SignalSource.implementation=File_Signal_Source
|
||||||
|
|
||||||
;#filename: path to file with the captured GNSS signal samples to be processed
|
;#filename: path to file with the captured GNSS signal samples to be processed
|
||||||
;#SignalSource.filename=/home/javier/Descargas/rtlsdr_tcxo_l1/rtlsdr_tcxo_l1.bin ; <- PUT YOUR FILE HERE
|
;#SignalSource.filename=/home/javier/Descargas/rtlsdr_tcxo_l1/rtlsdr_tcxo_l1.bin ; <- PUT YOUR FILE HERE
|
||||||
SignalSource.filename=/Users/carlesfernandez/git/cttc/build/signal_out.bin ; <- PUT YOUR FILE HERE
|
SignalSource.filename=/Users/carlesfernandez/git/cttc/build/signal_out.bin ; <- PUT YOUR FILE HERE
|
||||||
|
;#item_type: Type and resolution for each of the signal samples.
|
||||||
;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
|
|
||||||
SignalSource.item_type=byte
|
SignalSource.item_type=byte
|
||||||
|
;#sampling_frequency: Original Signal sampling frequency in samples per second
|
||||||
;#sampling_frequency: Original Signal sampling frequency in [Hz]
|
|
||||||
SignalSource.sampling_frequency=4000000
|
SignalSource.sampling_frequency=4000000
|
||||||
|
|
||||||
;#freq: RF front-end center frequency in [Hz]
|
|
||||||
SignalSource.freq=1575420000
|
|
||||||
|
|
||||||
;#samples: Number of samples to be processed. Notice that 0 indicates the entire file.
|
;#samples: Number of samples to be processed. Notice that 0 indicates the entire file.
|
||||||
SignalSource.samples=0
|
SignalSource.samples=0
|
||||||
|
;#repeat: Repeat the processing file.
|
||||||
;#repeat: Repeat the processing file. Disable this option in this version
|
|
||||||
SignalSource.repeat=false
|
SignalSource.repeat=false
|
||||||
|
;#dump: Dump the Signal source data to a file.
|
||||||
;#dump: Dump the Signal source data to a file. Disable this option in this version
|
|
||||||
SignalSource.dump=false
|
SignalSource.dump=false
|
||||||
|
|
||||||
SignalSource.dump_filename=../data/signal_source.dat
|
SignalSource.dump_filename=../data/signal_source.dat
|
||||||
|
|
||||||
;#enable_throttle_control: Enabling this option tells the signal source to keep the delay between samples in post processing.
|
;#enable_throttle_control: Enabling this option tells the signal source to keep the delay between samples in post processing.
|
||||||
; it helps to not overload the CPU, but the processing time will be longer.
|
; it helps to not overload the CPU, but the processing time will be longer.
|
||||||
SignalSource.enable_throttle_control=false
|
SignalSource.enable_throttle_control=false
|
||||||
@ -80,12 +69,13 @@ InputFilter.dump_filename=../data/input_filter.dat
|
|||||||
|
|
||||||
;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation.
|
;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation.
|
||||||
;#These options are based on parameters of gnuradio's function: gr_remez.
|
;#These options are based on parameters of gnuradio's function: gr_remez.
|
||||||
;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges, the desired reponse on those bands, and the weight given to the error in those bands.
|
;#This function calculates the optimal (in the Chebyshev/minimax sense) FIR filter impulse response given a set of band edges,
|
||||||
|
;#the desired response on those bands, and the weight given to the error in those bands.
|
||||||
|
|
||||||
;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version.
|
;#input_item_type: Type and resolution for input signal samples.
|
||||||
InputFilter.input_item_type=gr_complex
|
InputFilter.input_item_type=gr_complex
|
||||||
|
|
||||||
;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version.
|
;#outut_item_type: Type and resolution for output filtered signal samples.
|
||||||
InputFilter.output_item_type=gr_complex
|
InputFilter.output_item_type=gr_complex
|
||||||
|
|
||||||
;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version.
|
;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version.
|
||||||
@ -136,10 +126,10 @@ InputFilter.IF=0
|
|||||||
|
|
||||||
;######### RESAMPLER CONFIG ############
|
;######### RESAMPLER CONFIG ############
|
||||||
;## Resamples the input data.
|
;## Resamples the input data.
|
||||||
|
|
||||||
Resampler.implementation=Pass_Through
|
Resampler.implementation=Pass_Through
|
||||||
Resampler.item_type = gr_complex;
|
Resampler.item_type = gr_complex;
|
||||||
|
|
||||||
|
|
||||||
;######### CHANNELS GLOBAL CONFIG ############
|
;######### CHANNELS GLOBAL CONFIG ############
|
||||||
;#count: Number of available GPS satellite channels.
|
;#count: Number of available GPS satellite channels.
|
||||||
Channels_1C.count=11
|
Channels_1C.count=11
|
||||||
@ -148,10 +138,6 @@ Channels_1B.count=0
|
|||||||
;#in_acquisition: Number of channels simultaneously acquiring for the whole receiver
|
;#in_acquisition: Number of channels simultaneously acquiring for the whole receiver
|
||||||
Channels.in_acquisition=1
|
Channels.in_acquisition=1
|
||||||
|
|
||||||
|
|
||||||
;#IMPORTANT: When cshort is used as input type for Acq and Trk, please set the Channel type to cshort here
|
|
||||||
;#item_type: Type and resolution for each of the signal samples.
|
|
||||||
Channel.item_type=gr_complex
|
|
||||||
;#signal:
|
;#signal:
|
||||||
;#if the option is disabled by default is assigned "1C" GPS L1 C/A
|
;#if the option is disabled by default is assigned "1C" GPS L1 C/A
|
||||||
Channel1.signal=1C
|
Channel1.signal=1C
|
||||||
@ -172,19 +158,14 @@ Channel15.signal=1B
|
|||||||
|
|
||||||
|
|
||||||
;######### GPS ACQUISITION CONFIG ############
|
;######### GPS ACQUISITION CONFIG ############
|
||||||
|
Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition
|
||||||
;#dump: Enable or disable the acquisition internal data file logging [true] or [false]
|
;#item_type: Type and resolution for each of the signal samples.
|
||||||
Acquisition_1C.dump=false
|
|
||||||
;#filename: Log path and filename
|
|
||||||
Acquisition_1C.dump_filename=./acq_dump.dat
|
|
||||||
;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
|
|
||||||
Acquisition_1C.item_type=gr_complex
|
Acquisition_1C.item_type=gr_complex
|
||||||
;#if: Signal intermediate frequency in [Hz]
|
;#if: Signal intermediate frequency in [Hz]
|
||||||
Acquisition_1C.if=0
|
Acquisition_1C.if=0
|
||||||
;#sampled_ms: Signal block duration for the acquisition signal detection [ms]
|
;#sampled_ms: Signal block duration for the acquisition signal detection [ms]
|
||||||
Acquisition_1C.sampled_ms=1
|
Acquisition_1C.sampled_ms=1
|
||||||
;#implementation: Acquisition algorithm selection for this channel: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
|
;#implementation: Acquisition algorithm selection for this channel: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
|
||||||
Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition
|
|
||||||
;#use_CFAR_algorithm: If enabled, acquisition estimates the input signal power to implement CFAR detection algorithms
|
;#use_CFAR_algorithm: If enabled, acquisition estimates the input signal power to implement CFAR detection algorithms
|
||||||
;#notice that this affects the Acquisition threshold range!
|
;#notice that this affects the Acquisition threshold range!
|
||||||
Acquisition_1C.use_CFAR_algorithm=false;
|
Acquisition_1C.use_CFAR_algorithm=false;
|
||||||
@ -196,22 +177,20 @@ Acquisition_1C.threshold=15
|
|||||||
Acquisition_1C.doppler_max=6000
|
Acquisition_1C.doppler_max=6000
|
||||||
;#doppler_max: Doppler step in the grid search [Hz]
|
;#doppler_max: Doppler step in the grid search [Hz]
|
||||||
Acquisition_1C.doppler_step=100
|
Acquisition_1C.doppler_step=100
|
||||||
|
;#dump: Enable or disable the acquisition internal data file logging [true] or [false]
|
||||||
|
Acquisition_1C.dump=false
|
||||||
|
;#filename: Log path and filename
|
||||||
|
Acquisition_1C.dump_filename=./acq_dump.dat
|
||||||
|
|
||||||
|
|
||||||
;######### GALILEO ACQUISITION CONFIG ############
|
;######### GALILEO ACQUISITION CONFIG ############
|
||||||
|
Acquisition_1B.implementation=Galileo_E1_PCPS_Ambiguous_Acquisition
|
||||||
;#dump: Enable or disable the acquisition internal data file logging [true] or [false]
|
;#item_type: Type and resolution for each of the signal samples.
|
||||||
Acquisition_1B.dump=false
|
|
||||||
;#filename: Log path and filename
|
|
||||||
Acquisition_1B.dump_filename=./acq_dump.dat
|
|
||||||
;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
|
|
||||||
Acquisition_1B.item_type=gr_complex
|
Acquisition_1B.item_type=gr_complex
|
||||||
;#if: Signal intermediate frequency in [Hz]
|
;#if: Signal intermediate frequency in [Hz]
|
||||||
Acquisition_1B.if=0
|
Acquisition_1B.if=0
|
||||||
;#sampled_ms: Signal block duration for the acquisition signal detection [ms]
|
;#sampled_ms: Signal block duration for the acquisition signal detection [ms]
|
||||||
Acquisition_1B.sampled_ms=4
|
Acquisition_1B.sampled_ms=4
|
||||||
;#implementation: Acquisition algorithm selection for this channel: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
|
|
||||||
Acquisition_1B.implementation=Galileo_E1_PCPS_Ambiguous_Acquisition
|
|
||||||
;#threshold: Acquisition threshold
|
;#threshold: Acquisition threshold
|
||||||
;Acquisition_1B.threshold=0
|
;Acquisition_1B.threshold=0
|
||||||
;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
|
;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
|
||||||
@ -220,108 +199,85 @@ Acquisition_1B.pfa=0.0000008
|
|||||||
Acquisition_1B.doppler_max=15000
|
Acquisition_1B.doppler_max=15000
|
||||||
;#doppler_max: Doppler step in the grid search [Hz]
|
;#doppler_max: Doppler step in the grid search [Hz]
|
||||||
Acquisition_1B.doppler_step=125
|
Acquisition_1B.doppler_step=125
|
||||||
|
;#dump: Enable or disable the acquisition internal data file logging [true] or [false]
|
||||||
|
Acquisition_1B.dump=false
|
||||||
|
;#filename: Log path and filename
|
||||||
|
Acquisition_1B.dump_filename=./acq_dump.dat
|
||||||
|
|
||||||
|
|
||||||
;######### TRACKING GPS CONFIG ############
|
;######### TRACKING GPS CONFIG ############
|
||||||
|
|
||||||
;#implementation: Selected tracking algorithm: [GPS_L1_CA_DLL_PLL_Tracking] or [GPS_L1_CA_DLL_PLL_C_Aid_Tracking] or [GPS_L1_CA_TCP_CONNECTOR_Tracking] or [Galileo_E1_DLL_PLL_VEML_Tracking]
|
|
||||||
Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking
|
Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking
|
||||||
;#item_type: Type and resolution for each of the signal samples. Use only [gr_complex] in this version.
|
;#item_type: Type and resolution for each of the signal samples.
|
||||||
Tracking_1C.item_type=gr_complex
|
Tracking_1C.item_type=gr_complex
|
||||||
|
|
||||||
;#sampling_frequency: Signal Intermediate Frequency in [Hz]
|
;#sampling_frequency: Signal Intermediate Frequency in [Hz]
|
||||||
Tracking_1C.if=0
|
Tracking_1C.if=0
|
||||||
|
|
||||||
;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false]
|
|
||||||
Tracking_1C.dump=false
|
|
||||||
|
|
||||||
;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number.
|
|
||||||
Tracking_1C.dump_filename=../data/epl_tracking_ch_
|
|
||||||
|
|
||||||
;#pll_bw_hz: PLL loop filter bandwidth [Hz]
|
;#pll_bw_hz: PLL loop filter bandwidth [Hz]
|
||||||
Tracking_1C.pll_bw_hz=20.0;
|
Tracking_1C.pll_bw_hz=20.0;
|
||||||
|
|
||||||
;#dll_bw_hz: DLL loop filter bandwidth [Hz]
|
;#dll_bw_hz: DLL loop filter bandwidth [Hz]
|
||||||
Tracking_1C.dll_bw_hz=1.5;
|
Tracking_1C.dll_bw_hz=1.5;
|
||||||
|
|
||||||
;#order: PLL/DLL loop filter order [2] or [3]
|
;#order: PLL/DLL loop filter order [2] or [3]
|
||||||
Tracking_1C.order=3;
|
Tracking_1C.order=3;
|
||||||
|
|
||||||
;######### TRACKING GALILEO CONFIG ############
|
|
||||||
|
|
||||||
;#implementation: Selected tracking algorithm: [GPS_L1_CA_DLL_PLL_Tracking] or [GPS_L1_CA_DLL_PLL_C_Aid_Tracking] or [GPS_L1_CA_TCP_CONNECTOR_Tracking] or [Galileo_E1_DLL_PLL_VEML_Tracking]
|
;######### TRACKING GALILEO CONFIG ############
|
||||||
Tracking_1B.implementation=Galileo_E1_DLL_PLL_VEML_Tracking
|
Tracking_1B.implementation=Galileo_E1_DLL_PLL_VEML_Tracking
|
||||||
;#item_type: Type and resolution for each of the signal samples.
|
;#item_type: Type and resolution for each of the signal samples.
|
||||||
Tracking_1B.item_type=gr_complex
|
Tracking_1B.item_type=gr_complex
|
||||||
|
|
||||||
;#sampling_frequency: Signal Intermediate Frequency in [Hz]
|
;#sampling_frequency: Signal Intermediate Frequency in [Hz]
|
||||||
Tracking_1B.if=0
|
Tracking_1B.if=0
|
||||||
|
|
||||||
;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false]
|
;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false]
|
||||||
Tracking_1B.dump=false
|
Tracking_1B.dump=false
|
||||||
|
|
||||||
;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number.
|
;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number.
|
||||||
Tracking_1B.dump_filename=../data/veml_tracking_ch_
|
Tracking_1B.dump_filename=../data/veml_tracking_ch_
|
||||||
|
|
||||||
;#pll_bw_hz: PLL loop filter bandwidth [Hz]
|
;#pll_bw_hz: PLL loop filter bandwidth [Hz]
|
||||||
Tracking_1B.pll_bw_hz=15.0;
|
Tracking_1B.pll_bw_hz=15.0;
|
||||||
|
|
||||||
;#dll_bw_hz: DLL loop filter bandwidth [Hz]
|
;#dll_bw_hz: DLL loop filter bandwidth [Hz]
|
||||||
Tracking_1B.dll_bw_hz=2.0;
|
Tracking_1B.dll_bw_hz=2.0;
|
||||||
|
|
||||||
;#order: PLL/DLL loop filter order [2] or [3]
|
;#order: PLL/DLL loop filter order [2] or [3]
|
||||||
Tracking_1B.order=3;
|
Tracking_1B.order=3;
|
||||||
|
|
||||||
;#early_late_space_chips: correlator early-late space [chips]. Use [0.5] for GPS and [0.15] for Galileo
|
;#early_late_space_chips: correlator early-late space [chips]. Use [0.5] for GPS and [0.15] for Galileo
|
||||||
Tracking_1B.early_late_space_chips=0.15;
|
Tracking_1B.early_late_space_chips=0.15;
|
||||||
|
|
||||||
;#very_early_late_space_chips: only for [Galileo_E1_DLL_PLL_VEML_Tracking], correlator very early-late space [chips]. Use [0.6]
|
;#very_early_late_space_chips: only for [Galileo_E1_DLL_PLL_VEML_Tracking], correlator very early-late space [chips]. Use [0.6]
|
||||||
Tracking_1B.very_early_late_space_chips=0.6;
|
Tracking_1B.very_early_late_space_chips=0.6;
|
||||||
|
;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false]
|
||||||
|
Tracking_1C.dump=false
|
||||||
|
;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number.
|
||||||
|
Tracking_1C.dump_filename=../data/epl_tracking_ch_
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
;######### TELEMETRY DECODER GPS CONFIG ############
|
;######### TELEMETRY DECODER GPS CONFIG ############
|
||||||
;#implementation: Use [GPS_L1_CA_Telemetry_Decoder] for GPS L1 C/A
|
;#implementation: Use [GPS_L1_CA_Telemetry_Decoder] for GPS L1 C/A
|
||||||
TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder
|
TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder
|
||||||
TelemetryDecoder_1C.dump=false
|
TelemetryDecoder_1C.dump=false
|
||||||
;#decimation factor
|
|
||||||
TelemetryDecoder_1C.decimation_factor=1;
|
|
||||||
|
|
||||||
;######### TELEMETRY DECODER GALILEO CONFIG ############
|
;######### TELEMETRY DECODER GALILEO CONFIG ############
|
||||||
;#implementation: Use [Galileo_E1B_Telemetry_Decoder] for Galileo E1B
|
;#implementation: Use [Galileo_E1B_Telemetry_Decoder] for Galileo E1B
|
||||||
TelemetryDecoder_1B.implementation=Galileo_E1B_Telemetry_Decoder
|
TelemetryDecoder_1B.implementation=Galileo_E1B_Telemetry_Decoder
|
||||||
TelemetryDecoder_1B.dump=false
|
|
||||||
TelemetryDecoder_1B.decimation_factor=1;
|
|
||||||
|
|
||||||
;######### OBSERVABLES CONFIG ############
|
;######### OBSERVABLES CONFIG ############
|
||||||
;#implementation:
|
|
||||||
Observables.implementation=Hybrid_Observables
|
Observables.implementation=Hybrid_Observables
|
||||||
|
|
||||||
;#dump: Enable or disable the Observables internal binary data file logging [true] or [false]
|
;#dump: Enable or disable the Observables internal binary data file logging [true] or [false]
|
||||||
Observables.dump=false
|
Observables.dump=false
|
||||||
|
|
||||||
;#dump_filename: Log path and filename.
|
;#dump_filename: Log path and filename.
|
||||||
Observables.dump_filename=./observables.dat
|
Observables.dump_filename=./observables.dat
|
||||||
|
|
||||||
|
|
||||||
;######### PVT CONFIG ############
|
;######### PVT CONFIG ############
|
||||||
;#implementation: Position Velocity and Time (PVT) implementation algorithm: Use [GPS_L1_CA_PVT] in this version.
|
|
||||||
PVT.implementation=RTKLIB_PVT
|
PVT.implementation=RTKLIB_PVT
|
||||||
|
|
||||||
PVT.positioning_mode=PPP_Static ; options: Single, Static, Kinematic, PPP_Static, PPP_Kinematic
|
PVT.positioning_mode=PPP_Static ; options: Single, Static, Kinematic, PPP_Static, PPP_Kinematic
|
||||||
PVT.iono_model=Broadcast ; options: OFF, Broadcast, SBAS, Iono-Free-LC, Estimate_STEC, IONEX
|
PVT.iono_model=Broadcast ; options: OFF, Broadcast, SBAS, Iono-Free-LC, Estimate_STEC, IONEX
|
||||||
PVT.trop_model=Saastamoinen ; options: OFF, Saastamoinen, SBAS, Estimate_ZTD, Estimate_ZTD_Grad
|
PVT.trop_model=Saastamoinen ; options: OFF, Saastamoinen, SBAS, Estimate_ZTD, Estimate_ZTD_Grad
|
||||||
|
|
||||||
;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms]
|
;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms]
|
||||||
PVT.output_rate_ms=100;
|
PVT.output_rate_ms=100;
|
||||||
|
|
||||||
;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms.
|
;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms.
|
||||||
PVT.display_rate_ms=500;
|
PVT.display_rate_ms=500;
|
||||||
|
|
||||||
;#dump: Enable or disable the PVT internal binary data file logging [true] or [false]
|
|
||||||
PVT.dump=false
|
|
||||||
|
|
||||||
PVT.flag_rtcm_server=false
|
PVT.flag_rtcm_server=false
|
||||||
PVT.flag_rtcm_tty_port=false
|
PVT.flag_rtcm_tty_port=false
|
||||||
PVT.rtcm_dump_devname=/dev/pts/1
|
PVT.rtcm_dump_devname=/dev/pts/1
|
||||||
|
;#dump: Enable or disable the PVT internal binary data file logging [true] or [false]
|
||||||
|
PVT.dump=false
|
||||||
;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump.
|
;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump.
|
||||||
PVT.dump_filename=./PVT
|
PVT.dump_filename=./PVT
|
||||||
|
@ -10,32 +10,18 @@
|
|||||||
GNSS-SDR.internal_fs_sps=4092000
|
GNSS-SDR.internal_fs_sps=4092000
|
||||||
|
|
||||||
;######### SIGNAL_SOURCE CONFIG ############
|
;######### SIGNAL_SOURCE CONFIG ############
|
||||||
;#implementation: Use [File_Signal_Source] [Nsr_File_Signal_Source] or [UHD_Signal_Source] or [GN3S_Signal_Source] (experimental)
|
;#implementation
|
||||||
SignalSource.implementation=File_Signal_Source
|
SignalSource.implementation=File_Signal_Source
|
||||||
|
|
||||||
;#filename: path to file with the captured GNSS signal samples to be processed
|
;#filename: path to file with the captured GNSS signal samples to be processed
|
||||||
SignalSource.filename=/datalogger/signals/sim/GPS_sim1.dat ; <- PUT YOUR FILE HERE
|
SignalSource.filename=/datalogger/signals/sim/GPS_sim1.dat ; <- PUT YOUR FILE HERE
|
||||||
|
;#item_type: Type and resolution for each of the signal samples.
|
||||||
;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
|
|
||||||
SignalSource.item_type=gr_complex
|
SignalSource.item_type=gr_complex
|
||||||
|
;#sampling_frequency: Original Signal sampling frequency in samples per second
|
||||||
;#sampling_frequency: Original Signal sampling frequency in [Hz]
|
|
||||||
SignalSource.sampling_frequency=4092000
|
SignalSource.sampling_frequency=4092000
|
||||||
|
|
||||||
;#freq: RF front-end center frequency in [Hz]
|
|
||||||
SignalSource.freq=1575420000
|
|
||||||
|
|
||||||
;#samples: Number of samples to be processed. Notice that 0 indicates the entire file.
|
;#samples: Number of samples to be processed. Notice that 0 indicates the entire file.
|
||||||
SignalSource.samples=0
|
SignalSource.samples=0
|
||||||
|
;#repeat: Repeat the processing file.
|
||||||
;#repeat: Repeat the processing file. Disable this option in this version
|
|
||||||
SignalSource.repeat=false
|
SignalSource.repeat=false
|
||||||
|
|
||||||
;#dump: Dump the Signal source data to a file. Disable this option in this version
|
|
||||||
SignalSource.dump=false
|
|
||||||
|
|
||||||
SignalSource.dump_filename=../data/signal_source.dat
|
|
||||||
|
|
||||||
;#enable_throttle_control: Enabling this option tells the signal source to keep the delay between samples in post processing.
|
;#enable_throttle_control: Enabling this option tells the signal source to keep the delay between samples in post processing.
|
||||||
; it helps to not overload the CPU, but the processing time will be longer.
|
; it helps to not overload the CPU, but the processing time will be longer.
|
||||||
SignalSource.enable_throttle_control=false
|
SignalSource.enable_throttle_control=false
|
||||||
@ -64,22 +50,15 @@ DataTypeAdapter.item_type=gr_complex
|
|||||||
|
|
||||||
InputFilter.implementation=Pass_Through
|
InputFilter.implementation=Pass_Through
|
||||||
|
|
||||||
;#dump: Dump the filtered data to a file.
|
|
||||||
InputFilter.dump=false
|
|
||||||
|
|
||||||
;#dump_filename: Log path and filename.
|
|
||||||
InputFilter.dump_filename=../data/input_filter.dat
|
|
||||||
|
|
||||||
;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation.
|
;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation.
|
||||||
;#These options are based on parameters of gnuradio's function: gr_remez.
|
;#These options are based on parameters of gnuradio's function: gr_remez.
|
||||||
;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse
|
;#This function calculates the optimal (in the Chebyshev/minimax sense) FIR filter impulse response given a set of band edges,
|
||||||
;#reponse given a set of band edges, the desired reponse on those bands,
|
;#the desired response on those bands, and the weight given to the error in those bands.
|
||||||
;#and the weight given to the error in those bands.
|
|
||||||
|
|
||||||
;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version.
|
;#input_item_type: Type and resolution for input signal samples.
|
||||||
InputFilter.input_item_type=gr_complex
|
InputFilter.input_item_type=gr_complex
|
||||||
|
|
||||||
;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version.
|
;#outut_item_type: Type and resolution for output filtered signal samples.
|
||||||
InputFilter.output_item_type=gr_complex
|
InputFilter.output_item_type=gr_complex
|
||||||
|
|
||||||
;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version.
|
;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version.
|
||||||
@ -131,15 +110,21 @@ InputFilter.IF=5499998.47412109
|
|||||||
;# Decimation factor after the frequency tranaslating block
|
;# Decimation factor after the frequency tranaslating block
|
||||||
InputFilter.decimation_factor=8
|
InputFilter.decimation_factor=8
|
||||||
|
|
||||||
|
;#dump: Dump the filtered data to a file.
|
||||||
|
InputFilter.dump=false
|
||||||
|
|
||||||
|
;#dump_filename: Log path and filename.
|
||||||
|
InputFilter.dump_filename=../data/input_filter.dat
|
||||||
|
|
||||||
|
|
||||||
;######### RESAMPLER CONFIG ############
|
;######### RESAMPLER CONFIG ############
|
||||||
;## Resamples the input data.
|
;## Resamples the input data.
|
||||||
|
|
||||||
;#implementation: Use [Pass_Through] or [Direct_Resampler]
|
;#implementation: Use [Pass_Through] or [Direct_Resampler]
|
||||||
;#[Pass_Through] disables this block
|
;#[Pass_Through] disables this block
|
||||||
;#[Direct_Resampler] enables a resampler that implements a nearest neigbourhood interpolation
|
;#[Direct_Resampler] enables a resampler that implements a nearest neigbourhood interpolation
|
||||||
Resampler.implementation=Pass_Through
|
Resampler.implementation=Pass_Through
|
||||||
|
|
||||||
|
|
||||||
;######### CHANNELS GLOBAL CONFIG ############
|
;######### CHANNELS GLOBAL CONFIG ############
|
||||||
;#count: Number of available GPS satellite channels.
|
;#count: Number of available GPS satellite channels.
|
||||||
Channels_1C.count=1
|
Channels_1C.count=1
|
||||||
@ -174,19 +159,13 @@ Channel15.signal=1B
|
|||||||
|
|
||||||
|
|
||||||
;######### GPS ACQUISITION CONFIG ############
|
;######### GPS ACQUISITION CONFIG ############
|
||||||
|
Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition
|
||||||
;#dump: Enable or disable the acquisition internal data file logging [true] or [false]
|
;#item_type: Type and resolution for each of the signal samples.
|
||||||
Acquisition_1C.dump=false
|
|
||||||
;#filename: Log path and filename
|
|
||||||
Acquisition_1C.dump_filename=./acq_dump.dat
|
|
||||||
;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
|
|
||||||
Acquisition_1C.item_type=gr_complex
|
Acquisition_1C.item_type=gr_complex
|
||||||
;#if: Signal intermediate frequency in [Hz]
|
;#if: Signal intermediate frequency in [Hz]
|
||||||
Acquisition_1C.if=0
|
Acquisition_1C.if=0
|
||||||
;#sampled_ms: Signal block duration for the acquisition signal detection [ms]
|
;#sampled_ms: Signal block duration for the acquisition signal detection [ms]
|
||||||
Acquisition_1C.sampled_ms=1
|
Acquisition_1C.sampled_ms=1
|
||||||
;#implementation: Acquisition algorithm selection for this channel: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
|
|
||||||
Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition
|
|
||||||
Acquisition_1C.use_CFAR_algorithm=false;
|
Acquisition_1C.use_CFAR_algorithm=false;
|
||||||
;#threshold: Acquisition threshold
|
;#threshold: Acquisition threshold
|
||||||
Acquisition_1C.threshold=30
|
Acquisition_1C.threshold=30
|
||||||
@ -196,22 +175,20 @@ Acquisition_1C.threshold=30
|
|||||||
Acquisition_1C.doppler_max=5000
|
Acquisition_1C.doppler_max=5000
|
||||||
;#doppler_max: Doppler step in the grid search [Hz]
|
;#doppler_max: Doppler step in the grid search [Hz]
|
||||||
Acquisition_1C.doppler_step=100
|
Acquisition_1C.doppler_step=100
|
||||||
|
;#dump: Enable or disable the acquisition internal data file logging [true] or [false]
|
||||||
|
Acquisition_1C.dump=false
|
||||||
|
;#filename: Log path and filename
|
||||||
|
Acquisition_1C.dump_filename=./acq_dump.dat
|
||||||
|
|
||||||
|
|
||||||
;######### GALILEO ACQUISITION CONFIG ############
|
;######### GALILEO ACQUISITION CONFIG ############
|
||||||
|
Acquisition_1B.implementation=Galileo_E1_PCPS_Ambiguous_Acquisition
|
||||||
;#dump: Enable or disable the acquisition internal data file logging [true] or [false]
|
;#item_type: Type and resolution for each of the signal samples.
|
||||||
Acquisition_1B.dump=false
|
|
||||||
;#filename: Log path and filename
|
|
||||||
Acquisition_1B.dump_filename=./acq_dump.dat
|
|
||||||
;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
|
|
||||||
Acquisition_1B.item_type=gr_complex
|
Acquisition_1B.item_type=gr_complex
|
||||||
;#if: Signal intermediate frequency in [Hz]
|
;#if: Signal intermediate frequency in [Hz]
|
||||||
Acquisition_1B.if=0
|
Acquisition_1B.if=0
|
||||||
;#sampled_ms: Signal block duration for the acquisition signal detection [ms]
|
;#sampled_ms: Signal block duration for the acquisition signal detection [ms]
|
||||||
Acquisition_1B.sampled_ms=4
|
Acquisition_1B.sampled_ms=4
|
||||||
;#implementation: Acquisition algorithm selection for this channel: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
|
|
||||||
Acquisition_1B.implementation=Galileo_E1_PCPS_Ambiguous_Acquisition
|
|
||||||
;#threshold: Acquisition threshold
|
;#threshold: Acquisition threshold
|
||||||
;Acquisition_1B.threshold=0
|
;Acquisition_1B.threshold=0
|
||||||
;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
|
;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
|
||||||
@ -220,98 +197,79 @@ Acquisition_1B.pfa=0.0000002
|
|||||||
Acquisition_1B.doppler_max=15000
|
Acquisition_1B.doppler_max=15000
|
||||||
;#doppler_max: Doppler step in the grid search [Hz]
|
;#doppler_max: Doppler step in the grid search [Hz]
|
||||||
Acquisition_1B.doppler_step=125
|
Acquisition_1B.doppler_step=125
|
||||||
|
;#dump: Enable or disable the acquisition internal data file logging [true] or [false]
|
||||||
|
Acquisition_1B.dump=false
|
||||||
|
;#filename: Log path and filename
|
||||||
|
Acquisition_1B.dump_filename=./acq_dump.dat
|
||||||
|
|
||||||
|
|
||||||
;######### TRACKING GPS CONFIG ############
|
;######### TRACKING GPS CONFIG ############
|
||||||
|
|
||||||
;#implementation: Selected tracking algorithm: [GPS_L1_CA_DLL_PLL_Tracking] or [GPS_L1_CA_DLL_PLL_C_Aid_Tracking] or [GPS_L1_CA_TCP_CONNECTOR_Tracking] or [Galileo_E1_DLL_PLL_VEML_Tracking]
|
|
||||||
Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_C_Aid_Tracking
|
Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_C_Aid_Tracking
|
||||||
;#item_type: Type and resolution for each of the signal samples. Use only [gr_complex] in this version.
|
;#item_type: Type and resolution for each of the signal samples.
|
||||||
Tracking_1C.item_type=gr_complex
|
Tracking_1C.item_type=gr_complex
|
||||||
|
|
||||||
;#sampling_frequency: Signal Intermediate Frequency in [Hz]
|
;#sampling_frequency: Signal Intermediate Frequency in [Hz]
|
||||||
Tracking_1C.if=0
|
Tracking_1C.if=0
|
||||||
|
|
||||||
;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false]
|
|
||||||
Tracking_1C.dump=true
|
|
||||||
|
|
||||||
;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number.
|
|
||||||
Tracking_1C.dump_filename=../data/epl_tracking_ch_
|
|
||||||
|
|
||||||
;# Extended correlation after telemetry bit synchronization
|
;# Extended correlation after telemetry bit synchronization
|
||||||
;# Valid values are: [1,2,4,5,10,20] (integer divisors of the GPS L1 CA bit period (20 ms) )
|
;# Valid values are: [1,2,4,5,10,20] (integer divisors of the GPS L1 CA bit period (20 ms) )
|
||||||
;# Longer integration period require more stable front-end LO
|
;# Longer integration period require more stable front-end LO
|
||||||
|
|
||||||
Tracking_1C.extend_correlation_ms=10
|
Tracking_1C.extend_correlation_ms=10
|
||||||
|
|
||||||
;#pll_bw_hz: PLL loop filter bandwidth [Hz]
|
;#pll_bw_hz: PLL loop filter bandwidth [Hz]
|
||||||
Tracking_1C.pll_bw_hz=40;
|
Tracking_1C.pll_bw_hz=40;
|
||||||
Tracking_1C.pll_bw_narrow_hz=25;
|
Tracking_1C.pll_bw_narrow_hz=25;
|
||||||
|
|
||||||
;#dll_bw_hz: DLL loop filter bandwidth [Hz]
|
;#dll_bw_hz: DLL loop filter bandwidth [Hz]
|
||||||
Tracking_1C.dll_bw_hz=2.0;
|
Tracking_1C.dll_bw_hz=2.0;
|
||||||
|
|
||||||
Tracking_1C.dll_bw_narrow_hz=2.0;
|
Tracking_1C.dll_bw_narrow_hz=2.0;
|
||||||
|
|
||||||
;#fll_bw_hz: FLL loop filter bandwidth [Hz]
|
;#fll_bw_hz: FLL loop filter bandwidth [Hz]
|
||||||
Tracking_1C.fll_bw_hz=2.0;
|
Tracking_1C.fll_bw_hz=2.0;
|
||||||
|
|
||||||
;#order: PLL/DLL loop filter order [2] or [3]
|
;#order: PLL/DLL loop filter order [2] or [3]
|
||||||
Tracking_1C.order=3;
|
Tracking_1C.order=3;
|
||||||
|
;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false]
|
||||||
|
Tracking_1C.dump=true
|
||||||
|
;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number.
|
||||||
|
Tracking_1C.dump_filename=../data/epl_tracking_ch_
|
||||||
|
|
||||||
|
|
||||||
;######### TRACKING GALILEO CONFIG ############
|
;######### TRACKING GALILEO CONFIG ############
|
||||||
|
|
||||||
;#implementation: Selected tracking algorithm: [GPS_L1_CA_DLL_PLL_Tracking] or [GPS_L1_CA_DLL_FLL_PLL_Tracking] or [GPS_L1_CA_TCP_CONNECTOR_Tracking] or [Galileo_E1_DLL_PLL_VEML_Tracking]
|
|
||||||
Tracking_1B.implementation=Galileo_E1_DLL_PLL_VEML_Tracking
|
Tracking_1B.implementation=Galileo_E1_DLL_PLL_VEML_Tracking
|
||||||
;#item_type: Type and resolution for each of the signal samples. Use only [gr_complex] in this version.
|
;#item_type: Type and resolution for each of the signal samples.
|
||||||
Tracking_1B.item_type=gr_complex
|
Tracking_1B.item_type=gr_complex
|
||||||
|
|
||||||
;#sampling_frequency: Signal Intermediate Frequency in [Hz]
|
;#sampling_frequency: Signal Intermediate Frequency in [Hz]
|
||||||
Tracking_1B.if=0
|
Tracking_1B.if=0
|
||||||
|
|
||||||
;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false]
|
|
||||||
Tracking_1B.dump=false
|
|
||||||
|
|
||||||
;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number.
|
|
||||||
Tracking_1B.dump_filename=../data/veml_tracking_ch_
|
|
||||||
|
|
||||||
;#pll_bw_hz: PLL loop filter bandwidth [Hz]
|
;#pll_bw_hz: PLL loop filter bandwidth [Hz]
|
||||||
Tracking_1B.pll_bw_hz=15.0;
|
Tracking_1B.pll_bw_hz=15.0;
|
||||||
|
|
||||||
;#dll_bw_hz: DLL loop filter bandwidth [Hz]
|
;#dll_bw_hz: DLL loop filter bandwidth [Hz]
|
||||||
Tracking_1B.dll_bw_hz=2.0;
|
Tracking_1B.dll_bw_hz=2.0;
|
||||||
|
|
||||||
;#fll_bw_hz: FLL loop filter bandwidth [Hz]
|
;#fll_bw_hz: FLL loop filter bandwidth [Hz]
|
||||||
Tracking_1B.fll_bw_hz=10.0;
|
Tracking_1B.fll_bw_hz=10.0;
|
||||||
|
|
||||||
;#order: PLL/DLL loop filter order [2] or [3]
|
;#order: PLL/DLL loop filter order [2] or [3]
|
||||||
Tracking_1B.order=3;
|
Tracking_1B.order=3;
|
||||||
|
|
||||||
;#early_late_space_chips: correlator early-late space [chips]. Use [0.5] for GPS and [0.15] for Galileo
|
;#early_late_space_chips: correlator early-late space [chips]. Use [0.5] for GPS and [0.15] for Galileo
|
||||||
Tracking_1B.early_late_space_chips=0.15;
|
Tracking_1B.early_late_space_chips=0.15;
|
||||||
|
|
||||||
;#very_early_late_space_chips: only for [Galileo_E1_DLL_PLL_VEML_Tracking], correlator very early-late space [chips]. Use [0.6]
|
;#very_early_late_space_chips: only for [Galileo_E1_DLL_PLL_VEML_Tracking], correlator very early-late space [chips]. Use [0.6]
|
||||||
Tracking_1B.very_early_late_space_chips=0.6;
|
Tracking_1B.very_early_late_space_chips=0.6;
|
||||||
|
;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false]
|
||||||
|
Tracking_1B.dump=false
|
||||||
|
;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number.
|
||||||
|
Tracking_1B.dump_filename=../data/veml_tracking_ch_
|
||||||
|
|
||||||
|
|
||||||
;######### TELEMETRY DECODER GPS CONFIG ############
|
;######### TELEMETRY DECODER GPS CONFIG ############
|
||||||
;#implementation: Use [GPS_L1_CA_Telemetry_Decoder] for GPS L1 C/A
|
;#implementation: Use [GPS_L1_CA_Telemetry_Decoder] for GPS L1 C/A
|
||||||
TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder
|
TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder
|
||||||
TelemetryDecoder_1C.dump=false
|
TelemetryDecoder_1C.dump=false
|
||||||
;#decimation factor
|
|
||||||
TelemetryDecoder_1C.decimation_factor=4;
|
|
||||||
|
|
||||||
;######### TELEMETRY DECODER GALILEO CONFIG ############
|
;######### TELEMETRY DECODER GALILEO CONFIG ############
|
||||||
;#implementation: Use [Galileo_E1B_Telemetry_Decoder] for Galileo E1B
|
;#implementation: Use [Galileo_E1B_Telemetry_Decoder] for Galileo E1B
|
||||||
TelemetryDecoder_1B.implementation=Galileo_E1B_Telemetry_Decoder
|
TelemetryDecoder_1B.implementation=Galileo_E1B_Telemetry_Decoder
|
||||||
TelemetryDecoder_1B.dump=false
|
TelemetryDecoder_1B.dump=false
|
||||||
|
|
||||||
|
|
||||||
;######### OBSERVABLES CONFIG ############
|
;######### OBSERVABLES CONFIG ############
|
||||||
;#implementation:
|
;#implementation:
|
||||||
Observables.implementation=Hybrid_Observables
|
Observables.implementation=Hybrid_Observables
|
||||||
|
|
||||||
;#dump: Enable or disable the Observables internal binary data file logging [true] or [false]
|
;#dump: Enable or disable the Observables internal binary data file logging [true] or [false]
|
||||||
Observables.dump=false
|
Observables.dump=false
|
||||||
|
|
||||||
;#dump_filename: Log path and filename.
|
;#dump_filename: Log path and filename.
|
||||||
Observables.dump_filename=./observables.dat
|
Observables.dump_filename=./observables.dat
|
||||||
|
|
||||||
@ -319,23 +277,17 @@ Observables.dump_filename=./observables.dat
|
|||||||
;######### PVT CONFIG ############
|
;######### PVT CONFIG ############
|
||||||
;#implementation: Position Velocity and Time (PVT) implementation:
|
;#implementation: Position Velocity and Time (PVT) implementation:
|
||||||
PVT.implementation=RTKLIB_PVT
|
PVT.implementation=RTKLIB_PVT
|
||||||
|
|
||||||
PVT.positioning_mode=PPP_Static ; options: Single, Static, Kinematic, PPP_Static, PPP_Kinematic
|
PVT.positioning_mode=PPP_Static ; options: Single, Static, Kinematic, PPP_Static, PPP_Kinematic
|
||||||
PVT.iono_model=Broadcast ; options: OFF, Broadcast, SBAS, Iono-Free-LC, Estimate_STEC, IONEX
|
PVT.iono_model=Broadcast ; options: OFF, Broadcast, SBAS, Iono-Free-LC, Estimate_STEC, IONEX
|
||||||
PVT.trop_model=Saastamoinen ; options: OFF, Saastamoinen, SBAS, Estimate_ZTD, Estimate_ZTD_Grad
|
PVT.trop_model=Saastamoinen ; options: OFF, Saastamoinen, SBAS, Estimate_ZTD, Estimate_ZTD_Grad
|
||||||
|
|
||||||
;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms]
|
;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms]
|
||||||
PVT.output_rate_ms=10;
|
PVT.output_rate_ms=10;
|
||||||
|
|
||||||
;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms.
|
;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms.
|
||||||
PVT.display_rate_ms=500;
|
PVT.display_rate_ms=500;
|
||||||
|
|
||||||
;#dump: Enable or disable the PVT internal binary data file logging [true] or [false]
|
;#dump: Enable or disable the PVT internal binary data file logging [true] or [false]
|
||||||
PVT.dump=false
|
PVT.dump=false
|
||||||
|
|
||||||
PVT.flag_rtcm_server=false
|
PVT.flag_rtcm_server=false
|
||||||
PVT.flag_rtcm_tty_port=false
|
PVT.flag_rtcm_tty_port=false
|
||||||
PVT.rtcm_dump_devname=/dev/pts/1
|
PVT.rtcm_dump_devname=/dev/pts/1
|
||||||
|
|
||||||
;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump.
|
;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump.
|
||||||
PVT.dump_filename=./PVT
|
PVT.dump_filename=./PVT
|
||||||
|
@ -26,32 +26,18 @@ GNSS-SDR.SUPL_CI=0x31b0
|
|||||||
|
|
||||||
|
|
||||||
;######### SIGNAL_SOURCE CONFIG ############
|
;######### SIGNAL_SOURCE CONFIG ############
|
||||||
;#implementation: Use [File_Signal_Source] or [UHD_Signal_Source] or [GN3S_Signal_Source] (experimental)
|
;#implementation
|
||||||
SignalSource.implementation=File_Signal_Source
|
SignalSource.implementation=File_Signal_Source
|
||||||
|
|
||||||
;#filename: path to file with the captured GNSS signal samples to be processed
|
;#filename: path to file with the captured GNSS signal samples to be processed
|
||||||
SignalSource.filename=/datalogger/signals/CTTC/2013_04_04_GNSS_SIGNAL_at_CTTC_SPAIN/2013_04_04_GNSS_SIGNAL_at_CTTC_SPAIN.dat ; <- PUT YOUR FILE HERE
|
SignalSource.filename=/datalogger/signals/CTTC/2013_04_04_GNSS_SIGNAL_at_CTTC_SPAIN/2013_04_04_GNSS_SIGNAL_at_CTTC_SPAIN.dat ; <- PUT YOUR FILE HERE
|
||||||
|
|
||||||
;#item_type: Type and resolution for each of the signal samples.
|
;#item_type: Type and resolution for each of the signal samples.
|
||||||
SignalSource.item_type=ishort
|
SignalSource.item_type=ishort
|
||||||
|
;#sampling_frequency: Original Signal sampling frequency in samples per second
|
||||||
;#sampling_frequency: Original Signal sampling frequency in [Hz]
|
|
||||||
SignalSource.sampling_frequency=4000000
|
SignalSource.sampling_frequency=4000000
|
||||||
|
|
||||||
;#freq: RF front-end center frequency in [Hz]
|
|
||||||
SignalSource.freq=1575420000
|
|
||||||
|
|
||||||
;#samples: Number of samples to be processed. Notice that 0 indicates the entire file.
|
;#samples: Number of samples to be processed. Notice that 0 indicates the entire file.
|
||||||
SignalSource.samples=0
|
SignalSource.samples=0
|
||||||
|
;#repeat: Repeat the processing file.
|
||||||
;#repeat: Repeat the processing file. Disable this option in this version
|
|
||||||
SignalSource.repeat=false
|
SignalSource.repeat=false
|
||||||
|
|
||||||
;#dump: Dump the Signal source data to a file. Disable this option in this version
|
|
||||||
SignalSource.dump=false
|
|
||||||
|
|
||||||
SignalSource.dump_filename=../data/signal_source.dat
|
|
||||||
|
|
||||||
;#enable_throttle_control: Enabling this option tells the signal source to keep the delay between samples in post processing.
|
;#enable_throttle_control: Enabling this option tells the signal source to keep the delay between samples in post processing.
|
||||||
; it helps to not overload the CPU, but the processing time will be longer.
|
; it helps to not overload the CPU, but the processing time will be longer.
|
||||||
SignalSource.enable_throttle_control=false
|
SignalSource.enable_throttle_control=false
|
||||||
@ -82,20 +68,15 @@ DataTypeAdapter.implementation=Ishort_To_Complex
|
|||||||
;InputFilter.implementation=Freq_Xlating_Fir_Filter
|
;InputFilter.implementation=Freq_Xlating_Fir_Filter
|
||||||
InputFilter.implementation=Pass_Through
|
InputFilter.implementation=Pass_Through
|
||||||
|
|
||||||
;#dump: Dump the filtered data to a file.
|
|
||||||
InputFilter.dump=false
|
|
||||||
|
|
||||||
;#dump_filename: Log path and filename.
|
|
||||||
InputFilter.dump_filename=../data/input_filter.dat
|
|
||||||
|
|
||||||
;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation.
|
;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation.
|
||||||
;#These options are based on parameters of gnuradio's function: gr_remez.
|
;#These options are based on parameters of gnuradio's function: gr_remez.
|
||||||
;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges, the desired reponse on those bands, and the weight given to the error in those bands.
|
;#This function calculates the optimal (in the Chebyshev/minimax sense) FIR filter impulse response given a set of band edges,
|
||||||
|
;#the desired response on those bands, and the weight given to the error in those bands.
|
||||||
|
|
||||||
;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version.
|
;#input_item_type: Type and resolution for input signal samples.
|
||||||
InputFilter.input_item_type=gr_complex
|
InputFilter.input_item_type=gr_complex
|
||||||
|
|
||||||
;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version.
|
;#outut_item_type: Type and resolution for output filtered signal samples.
|
||||||
InputFilter.output_item_type=gr_complex
|
InputFilter.output_item_type=gr_complex
|
||||||
|
|
||||||
;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version.
|
;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version.
|
||||||
@ -142,31 +123,31 @@ InputFilter.grid_density=16
|
|||||||
InputFilter.sampling_frequency=4000000
|
InputFilter.sampling_frequency=4000000
|
||||||
InputFilter.IF=0
|
InputFilter.IF=0
|
||||||
|
|
||||||
|
;#dump: Dump the filtered data to a file.
|
||||||
|
InputFilter.dump=false
|
||||||
|
|
||||||
|
;#dump_filename: Log path and filename.
|
||||||
|
InputFilter.dump_filename=../data/input_filter.dat
|
||||||
|
|
||||||
|
|
||||||
;######### RESAMPLER CONFIG ############
|
;######### RESAMPLER CONFIG ############
|
||||||
;## Resamples the input data.
|
;## Resamples the input data.
|
||||||
|
|
||||||
;#implementation: Use [Pass_Through] or [Direct_Resampler]
|
;#implementation: Use [Pass_Through] or [Direct_Resampler]
|
||||||
;#[Pass_Through] disables this block
|
;#[Pass_Through] disables this block
|
||||||
;#[Direct_Resampler] enables a resampler that implements a nearest neigbourhood interpolation
|
;#[Direct_Resampler] enables a resampler that implements a nearest neigbourhood interpolation
|
||||||
;Resampler.implementation=Direct_Resampler
|
;Resampler.implementation=Direct_Resampler
|
||||||
Resampler.implementation=Pass_Through
|
Resampler.implementation=Pass_Through
|
||||||
|
;#item_type: Type and resolution for each of the signal samples.
|
||||||
|
Resampler.item_type=gr_complex
|
||||||
|
;#sample_freq_in: the sample frequency of the input signalq
|
||||||
|
Resampler.sample_freq_in=4000000
|
||||||
|
;#sample_freq_out: the desired sample frequency of the output signal
|
||||||
|
Resampler.sample_freq_out=4000000
|
||||||
;#dump: Dump the resamplered data to a file.
|
;#dump: Dump the resamplered data to a file.
|
||||||
Resampler.dump=false
|
Resampler.dump=false
|
||||||
;#dump_filename: Log path and filename.
|
;#dump_filename: Log path and filename.
|
||||||
Resampler.dump_filename=../data/resampler.dat
|
Resampler.dump_filename=../data/resampler.dat
|
||||||
|
|
||||||
;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
|
|
||||||
Resampler.item_type=gr_complex
|
|
||||||
|
|
||||||
;#sample_freq_in: the sample frequency of the input signalq
|
|
||||||
Resampler.sample_freq_in=4000000
|
|
||||||
|
|
||||||
;#sample_freq_out: the desired sample frequency of the output signal
|
|
||||||
Resampler.sample_freq_out=4000000
|
|
||||||
|
|
||||||
|
|
||||||
;######### CHANNELS GLOBAL CONFIG ############
|
;######### CHANNELS GLOBAL CONFIG ############
|
||||||
;#count: Number of available GPS satellite channels.
|
;#count: Number of available GPS satellite channels.
|
||||||
@ -191,21 +172,14 @@ Channel6.signal=1B
|
|||||||
Channel7.signal=1B
|
Channel7.signal=1B
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
;######### GPS ACQUISITION CONFIG ############
|
;######### GPS ACQUISITION CONFIG ############
|
||||||
|
Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition
|
||||||
;#dump: Enable or disable the acquisition internal data file logging [true] or [false]
|
;#item_type: Type and resolution for each of the signal samples.
|
||||||
Acquisition_1C.dump=false
|
|
||||||
;#filename: Log path and filename
|
|
||||||
Acquisition_1C.dump_filename=./acq_dump.dat
|
|
||||||
;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
|
|
||||||
Acquisition_1C.item_type=gr_complex
|
Acquisition_1C.item_type=gr_complex
|
||||||
;#if: Signal intermediate frequency in [Hz]
|
;#if: Signal intermediate frequency in [Hz]
|
||||||
Acquisition_1C.if=0
|
Acquisition_1C.if=0
|
||||||
;#sampled_ms: Signal block duration for the acquisition signal detection [ms]
|
;#sampled_ms: Signal block duration for the acquisition signal detection [ms]
|
||||||
Acquisition_1C.sampled_ms=1
|
Acquisition_1C.sampled_ms=1
|
||||||
;#implementation: Acquisition algorithm selection for this channel:
|
|
||||||
Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition
|
|
||||||
;#threshold: Acquisition threshold
|
;#threshold: Acquisition threshold
|
||||||
Acquisition_1C.threshold=0.0075
|
Acquisition_1C.threshold=0.0075
|
||||||
;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
|
;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
|
||||||
@ -214,22 +188,21 @@ Acquisition_1C.threshold=0.0075
|
|||||||
Acquisition_1C.doppler_max=10000
|
Acquisition_1C.doppler_max=10000
|
||||||
;#doppler_max: Doppler step in the grid search [Hz]
|
;#doppler_max: Doppler step in the grid search [Hz]
|
||||||
Acquisition_1C.doppler_step=500
|
Acquisition_1C.doppler_step=500
|
||||||
|
;#dump: Enable or disable the acquisition internal data file logging [true] or [false]
|
||||||
|
Acquisition_1C.dump=false
|
||||||
|
;#filename: Log path and filename
|
||||||
|
Acquisition_1C.dump_filename=./acq_dump.dat
|
||||||
|
|
||||||
|
|
||||||
;######### GALILEO ACQUISITION CONFIG ############
|
;######### GALILEO ACQUISITION CONFIG ############
|
||||||
|
Acquisition_1B.implementation=Galileo_E1_PCPS_Ambiguous_Acquisition
|
||||||
;#dump: Enable or disable the acquisition internal data file logging [true] or [false]
|
;#item_type: Type and resolution for each of the signal samples.
|
||||||
Acquisition_1B.dump=false
|
|
||||||
;#filename: Log path and filename
|
|
||||||
Acquisition_1B.dump_filename=./acq_dump.dat
|
|
||||||
;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
|
|
||||||
Acquisition_1B.item_type=gr_complex
|
Acquisition_1B.item_type=gr_complex
|
||||||
;#if: Signal intermediate frequency in [Hz]
|
;#if: Signal intermediate frequency in [Hz]
|
||||||
Acquisition_1B.if=0
|
Acquisition_1B.if=0
|
||||||
;#sampled_ms: Signal block duration for the acquisition signal detection [ms]
|
;#sampled_ms: Signal block duration for the acquisition signal detection [ms]
|
||||||
Acquisition_1B.sampled_ms=4
|
Acquisition_1B.sampled_ms=4
|
||||||
;#implementation: Acquisition algorithm selection for this channel:
|
;#implementation: Acquisition algorithm selection for this channel:
|
||||||
Acquisition_1B.implementation=Galileo_E1_PCPS_Ambiguous_Acquisition
|
|
||||||
;#threshold: Acquisition threshold
|
;#threshold: Acquisition threshold
|
||||||
;Acquisition_1B.threshold=0
|
;Acquisition_1B.threshold=0
|
||||||
;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
|
;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
|
||||||
@ -239,84 +212,69 @@ Acquisition_1B.doppler_max=15000
|
|||||||
;#doppler_max: Doppler step in the grid search [Hz]
|
;#doppler_max: Doppler step in the grid search [Hz]
|
||||||
Acquisition_1B.doppler_step=125
|
Acquisition_1B.doppler_step=125
|
||||||
Acquisition_1B.cboc=false;
|
Acquisition_1B.cboc=false;
|
||||||
|
;#dump: Enable or disable the acquisition internal data file logging [true] or [false]
|
||||||
|
Acquisition_1B.dump=false
|
||||||
|
;#filename: Log path and filename
|
||||||
|
Acquisition_1B.dump_filename=./acq_dump.dat
|
||||||
|
|
||||||
|
|
||||||
;######### TRACKING GPS CONFIG ############
|
;######### TRACKING GPS CONFIG ############
|
||||||
|
|
||||||
;#implementation: Selected tracking algorithm: [GPS_L1_CA_DLL_PLL_Tracking] or [GPS_L1_CA_DLL_PLL_C_Aid_Tracking]
|
|
||||||
Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_C_Aid_Tracking
|
Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_C_Aid_Tracking
|
||||||
;#item_type: Type and resolution for each of the signal samples.
|
;#item_type: Type and resolution for each of the signal samples.
|
||||||
Tracking_1C.item_type=gr_complex
|
Tracking_1C.item_type=gr_complex
|
||||||
|
|
||||||
;#sampling_frequency: Signal Intermediate Frequency in [Hz]
|
;#sampling_frequency: Signal Intermediate Frequency in [Hz]
|
||||||
Tracking_1C.if=0
|
Tracking_1C.if=0
|
||||||
|
;#pll_bw_hz: PLL loop filter bandwidth [Hz]
|
||||||
|
Tracking_1C.pll_bw_hz=50.0;
|
||||||
|
;#dll_bw_hz: DLL loop filter bandwidth [Hz]
|
||||||
|
Tracking_1C.dll_bw_hz=5.0;
|
||||||
|
;#order: PLL/DLL loop filter order [2] or [3]
|
||||||
|
Tracking_1C.order=3;
|
||||||
;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false]
|
;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false]
|
||||||
Tracking_1C.dump=false
|
Tracking_1C.dump=false
|
||||||
|
|
||||||
;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number.
|
;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number.
|
||||||
Tracking_1C.dump_filename=../data/epl_tracking_ch_
|
Tracking_1C.dump_filename=../data/epl_tracking_ch_
|
||||||
|
|
||||||
;#pll_bw_hz: PLL loop filter bandwidth [Hz]
|
|
||||||
Tracking_1C.pll_bw_hz=50.0;
|
|
||||||
|
|
||||||
;#dll_bw_hz: DLL loop filter bandwidth [Hz]
|
|
||||||
Tracking_1C.dll_bw_hz=5.0;
|
|
||||||
|
|
||||||
;#order: PLL/DLL loop filter order [2] or [3]
|
|
||||||
Tracking_1C.order=3;
|
|
||||||
|
|
||||||
;######### TRACKING GALILEO CONFIG ############
|
;######### TRACKING GALILEO CONFIG ############
|
||||||
|
|
||||||
;#implementation: Selected tracking algorithm:
|
|
||||||
Tracking_1B.implementation=Galileo_E1_DLL_PLL_VEML_Tracking
|
Tracking_1B.implementation=Galileo_E1_DLL_PLL_VEML_Tracking
|
||||||
;#item_type: Type and resolution for each of the signal samples.
|
;#item_type: Type and resolution for each of the signal samples.
|
||||||
Tracking_1B.item_type=gr_complex
|
Tracking_1B.item_type=gr_complex
|
||||||
|
|
||||||
;#sampling_frequency: Signal Intermediate Frequency in [Hz]
|
;#sampling_frequency: Signal Intermediate Frequency in [Hz]
|
||||||
Tracking_1B.if=0
|
Tracking_1B.if=0
|
||||||
|
|
||||||
;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false]
|
|
||||||
Tracking_1B.dump=false
|
|
||||||
|
|
||||||
;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number.
|
|
||||||
Tracking_1B.dump_filename=../data/veml_tracking_ch_
|
|
||||||
|
|
||||||
;#pll_bw_hz: PLL loop filter bandwidth [Hz]
|
;#pll_bw_hz: PLL loop filter bandwidth [Hz]
|
||||||
Tracking_1B.pll_bw_hz=20.0;
|
Tracking_1B.pll_bw_hz=20.0;
|
||||||
|
|
||||||
;#dll_bw_hz: DLL loop filter bandwidth [Hz]
|
;#dll_bw_hz: DLL loop filter bandwidth [Hz]
|
||||||
Tracking_1B.dll_bw_hz=2.0;
|
Tracking_1B.dll_bw_hz=2.0;
|
||||||
|
|
||||||
;#order: PLL/DLL loop filter order [2] or [3]
|
;#order: PLL/DLL loop filter order [2] or [3]
|
||||||
Tracking_1B.order=3;
|
Tracking_1B.order=3;
|
||||||
|
|
||||||
;#early_late_space_chips: correlator early-late space [chips]. Use [0.5] for GPS and [0.15] for Galileo
|
;#early_late_space_chips: correlator early-late space [chips]. Use [0.5] for GPS and [0.15] for Galileo
|
||||||
Tracking_1B.early_late_space_chips=0.15;
|
Tracking_1B.early_late_space_chips=0.15;
|
||||||
|
|
||||||
;#very_early_late_space_chips: only for [Galileo_E1_DLL_PLL_VEML_Tracking], correlator very early-late space [chips]. Use [0.6]
|
;#very_early_late_space_chips: only for [Galileo_E1_DLL_PLL_VEML_Tracking], correlator very early-late space [chips]. Use [0.6]
|
||||||
Tracking_1B.very_early_late_space_chips=0.6;
|
Tracking_1B.very_early_late_space_chips=0.6;
|
||||||
|
;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false]
|
||||||
|
Tracking_1B.dump=false
|
||||||
|
;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number.
|
||||||
|
Tracking_1B.dump_filename=../data/veml_tracking_ch_
|
||||||
|
|
||||||
|
|
||||||
;######### TELEMETRY DECODER GPS CONFIG ############
|
;######### TELEMETRY DECODER GPS CONFIG ############
|
||||||
;#implementation: Use [GPS_L1_CA_Telemetry_Decoder] for GPS L1 C/A
|
;#implementation: Use [GPS_L1_CA_Telemetry_Decoder] for GPS L1 C/A
|
||||||
TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder
|
TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder
|
||||||
TelemetryDecoder_1C.dump=false
|
TelemetryDecoder_1C.dump=false
|
||||||
;#decimation factor
|
|
||||||
TelemetryDecoder_1C.decimation_factor=4;
|
|
||||||
|
|
||||||
;######### TELEMETRY DECODER GALILEO CONFIG ############
|
;######### TELEMETRY DECODER GALILEO CONFIG ############
|
||||||
;#implementation: Use [Galileo_E1B_Telemetry_Decoder] for Galileo E1B
|
;#implementation: Use [Galileo_E1B_Telemetry_Decoder] for Galileo E1B
|
||||||
TelemetryDecoder_1B.implementation=Galileo_E1B_Telemetry_Decoder
|
TelemetryDecoder_1B.implementation=Galileo_E1B_Telemetry_Decoder
|
||||||
TelemetryDecoder_1B.dump=false
|
TelemetryDecoder_1B.dump=false
|
||||||
TelemetryDecoder_1B.decimation_factor=1;
|
|
||||||
|
|
||||||
;######### OBSERVABLES CONFIG ############
|
;######### OBSERVABLES CONFIG ############
|
||||||
;#implementation:
|
;#implementation:
|
||||||
Observables.implementation=Hybrid_Observables
|
Observables.implementation=Hybrid_Observables
|
||||||
|
|
||||||
;#dump: Enable or disable the Observables internal binary data file logging [true] or [false]
|
;#dump: Enable or disable the Observables internal binary data file logging [true] or [false]
|
||||||
Observables.dump=false
|
Observables.dump=false
|
||||||
|
|
||||||
;#dump_filename: Log path and filename.
|
;#dump_filename: Log path and filename.
|
||||||
Observables.dump_filename=./observables.dat
|
Observables.dump_filename=./observables.dat
|
||||||
|
|
||||||
@ -324,20 +282,13 @@ Observables.dump_filename=./observables.dat
|
|||||||
;######### PVT CONFIG ############
|
;######### PVT CONFIG ############
|
||||||
;#implementation: Position Velocity and Time (PVT) implementation:
|
;#implementation: Position Velocity and Time (PVT) implementation:
|
||||||
PVT.implementation=RTKLIB_PVT
|
PVT.implementation=RTKLIB_PVT
|
||||||
|
|
||||||
PVT.positioning_mode=PPP_Static ; options: Single, Static, Kinematic, PPP_Static, PPP_Kinematic
|
PVT.positioning_mode=PPP_Static ; options: Single, Static, Kinematic, PPP_Static, PPP_Kinematic
|
||||||
PVT.iono_model=Broadcast ; options: OFF, Broadcast, SBAS, Iono-Free-LC, Estimate_STEC, IONEX
|
PVT.iono_model=Broadcast ; options: OFF, Broadcast, SBAS, Iono-Free-LC, Estimate_STEC, IONEX
|
||||||
PVT.trop_model=Saastamoinen ; options: OFF, Saastamoinen, SBAS, Estimate_ZTD, Estimate_ZTD_Grad
|
PVT.trop_model=Saastamoinen ; options: OFF, Saastamoinen, SBAS, Estimate_ZTD, Estimate_ZTD_Grad
|
||||||
|
|
||||||
;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms]
|
;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms]
|
||||||
PVT.output_rate_ms=100;
|
PVT.output_rate_ms=100;
|
||||||
|
|
||||||
;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms.
|
;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms.
|
||||||
PVT.display_rate_ms=500;
|
PVT.display_rate_ms=500;
|
||||||
|
|
||||||
;#dump: Enable or disable the PVT internal binary data file logging [true] or [false]
|
|
||||||
PVT.dump=false
|
|
||||||
|
|
||||||
PVT.flag_rtcm_server=true
|
PVT.flag_rtcm_server=true
|
||||||
PVT.flag_rtcm_tty_port=false
|
PVT.flag_rtcm_tty_port=false
|
||||||
PVT.rtcm_dump_devname=/dev/pts/1
|
PVT.rtcm_dump_devname=/dev/pts/1
|
||||||
@ -346,6 +297,7 @@ PVT.rtcm_MT1045_rate_ms=5000 ; Period (in ms) of Galileo ephemeris messages. 0 m
|
|||||||
PVT.rtcm_MT1045_rate_ms=5000 ; Period (in ms) of GPS ephemeris messages. 0 mutes this message
|
PVT.rtcm_MT1045_rate_ms=5000 ; Period (in ms) of GPS ephemeris messages. 0 mutes this message
|
||||||
PVT.rtcm_MT1097_rate_ms=1000 ; Period (in ms) of Galileo observables. 0 mutes this message
|
PVT.rtcm_MT1097_rate_ms=1000 ; Period (in ms) of Galileo observables. 0 mutes this message
|
||||||
PVT.rtcm_MT1077_rate_ms=1000 ; Period (in ms) of GPS observables. 0 mutes this message
|
PVT.rtcm_MT1077_rate_ms=1000 ; Period (in ms) of GPS observables. 0 mutes this message
|
||||||
|
;#dump: Enable or disable the PVT internal binary data file logging [true] or [false]
|
||||||
|
PVT.dump=false
|
||||||
;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump.
|
;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump.
|
||||||
PVT.dump_filename=./PVT
|
PVT.dump_filename=./PVT
|
||||||
|
@ -13,33 +13,21 @@ GNSS-SDR.internal_fs_sps=2560000
|
|||||||
;GNSS-SDR.internal_fs_sps=5120000
|
;GNSS-SDR.internal_fs_sps=5120000
|
||||||
|
|
||||||
;######### SIGNAL_SOURCE CONFIG ############
|
;######### SIGNAL_SOURCE CONFIG ############
|
||||||
;#implementation: Use [File_Signal_Source] [Nsr_File_Signal_Source] or [UHD_Signal_Source] or [GN3S_Signal_Source] (experimental)
|
;#implementation
|
||||||
SignalSource.implementation=Nsr_File_Signal_Source
|
SignalSource.implementation=Nsr_File_Signal_Source
|
||||||
|
|
||||||
;#filename: path to file with the captured GNSS signal samples to be processed
|
;#filename: path to file with the captured GNSS signal samples to be processed
|
||||||
SignalSource.filename=/media/javier/SISTEMA/signals/ifen/E1L1_FE0_Band0.stream ; <- PUT YOUR FILE HERE
|
SignalSource.filename=/media/javier/SISTEMA/signals/ifen/E1L1_FE0_Band0.stream ; <- PUT YOUR FILE HERE
|
||||||
|
|
||||||
;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
|
;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
|
||||||
SignalSource.item_type=byte
|
SignalSource.item_type=byte
|
||||||
|
;#sampling_frequency: Original Signal sampling frequency in samples per second
|
||||||
;#sampling_frequency: Original Signal sampling frequency in [Hz]
|
|
||||||
SignalSource.sampling_frequency=20480000
|
SignalSource.sampling_frequency=20480000
|
||||||
|
|
||||||
;#freq: RF front-end center frequency in [Hz]
|
|
||||||
SignalSource.freq=1575420000
|
|
||||||
|
|
||||||
;#samples: Number of samples to be processed. Notice that 0 indicates the entire file.
|
;#samples: Number of samples to be processed. Notice that 0 indicates the entire file.
|
||||||
SignalSource.samples=0
|
SignalSource.samples=0
|
||||||
|
;#repeat: Repeat the processing file.
|
||||||
;#repeat: Repeat the processing file. Disable this option in this version
|
|
||||||
SignalSource.repeat=false
|
SignalSource.repeat=false
|
||||||
|
;#dump: Dump the Signal source data to a file.
|
||||||
;#dump: Dump the Signal source data to a file. Disable this option in this version
|
|
||||||
SignalSource.dump=false
|
SignalSource.dump=false
|
||||||
|
|
||||||
SignalSource.dump_filename=../data/signal_source.dat
|
SignalSource.dump_filename=../data/signal_source.dat
|
||||||
|
|
||||||
|
|
||||||
;#enable_throttle_control: Enabling this option tells the signal source to keep the delay between samples in post processing.
|
;#enable_throttle_control: Enabling this option tells the signal source to keep the delay between samples in post processing.
|
||||||
; it helps to not overload the CPU, but the processing time will be longer.
|
; it helps to not overload the CPU, but the processing time will be longer.
|
||||||
SignalSource.enable_throttle_control=false
|
SignalSource.enable_throttle_control=false
|
||||||
@ -68,22 +56,15 @@ DataTypeAdapter.item_type=float
|
|||||||
|
|
||||||
InputFilter.implementation=Freq_Xlating_Fir_Filter
|
InputFilter.implementation=Freq_Xlating_Fir_Filter
|
||||||
|
|
||||||
;#dump: Dump the filtered data to a file.
|
|
||||||
InputFilter.dump=false
|
|
||||||
|
|
||||||
;#dump_filename: Log path and filename.
|
|
||||||
InputFilter.dump_filename=../data/input_filter.dat
|
|
||||||
|
|
||||||
;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation.
|
;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation.
|
||||||
;#These options are based on parameters of gnuradio's function: gr_remez.
|
;#These options are based on parameters of gnuradio's function: gr_remez.
|
||||||
;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse
|
;#This function calculates the optimal (in the Chebyshev/minimax sense) FIR filter impulse response given a set of band edges,
|
||||||
;#reponse given a set of band edges, the desired reponse on those bands,
|
;#the desired response on those bands, and the weight given to the error in those bands.
|
||||||
;#and the weight given to the error in those bands.
|
|
||||||
|
|
||||||
;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version.
|
;#input_item_type: Type and resolution for input signal samples.
|
||||||
InputFilter.input_item_type=float
|
InputFilter.input_item_type=float
|
||||||
|
|
||||||
;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version.
|
;#outut_item_type: Type and resolution for output filtered signal samples.
|
||||||
InputFilter.output_item_type=gr_complex
|
InputFilter.output_item_type=gr_complex
|
||||||
|
|
||||||
;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version.
|
;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version.
|
||||||
@ -135,6 +116,12 @@ InputFilter.IF=5499998.47412109
|
|||||||
;# Decimation factor after the frequency tranaslating block
|
;# Decimation factor after the frequency tranaslating block
|
||||||
InputFilter.decimation_factor=8
|
InputFilter.decimation_factor=8
|
||||||
|
|
||||||
|
;#dump: Dump the filtered data to a file.
|
||||||
|
InputFilter.dump=false
|
||||||
|
|
||||||
|
;#dump_filename: Log path and filename.
|
||||||
|
InputFilter.dump_filename=../data/input_filter.dat
|
||||||
|
|
||||||
|
|
||||||
;######### RESAMPLER CONFIG ############
|
;######### RESAMPLER CONFIG ############
|
||||||
;## Resamples the input data.
|
;## Resamples the input data.
|
||||||
@ -154,9 +141,11 @@ Channels.in_acquisition=1
|
|||||||
|
|
||||||
;#signal:
|
;#signal:
|
||||||
;# "1C" GPS L1 C/A
|
;# "1C" GPS L1 C/A
|
||||||
;# "2S" GPS L2 L2C (M)
|
|
||||||
;# "1B" GALILEO E1 B (I/NAV OS/CS/SoL)
|
;# "1B" GALILEO E1 B (I/NAV OS/CS/SoL)
|
||||||
|
;# "1G" GLONASS L1 C/A
|
||||||
|
;# "2S" GPS L2 L2C (M)
|
||||||
;# "5X" GALILEO E5a I+Q
|
;# "5X" GALILEO E5a I+Q
|
||||||
|
;# "L5" GPS L5
|
||||||
|
|
||||||
;#if the option is disabled by default is assigned "1C" GPS L1 C/A
|
;#if the option is disabled by default is assigned "1C" GPS L1 C/A
|
||||||
Channel0.signal=1C
|
Channel0.signal=1C
|
||||||
@ -178,19 +167,13 @@ Channel15.signal=1B
|
|||||||
|
|
||||||
|
|
||||||
;######### GPS ACQUISITION CONFIG ############
|
;######### GPS ACQUISITION CONFIG ############
|
||||||
|
Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition
|
||||||
;#dump: Enable or disable the acquisition internal data file logging [true] or [false]
|
;#item_type: Type and resolution for each of the signal samples.
|
||||||
Acquisition_1C.dump=false
|
|
||||||
;#filename: Log path and filename
|
|
||||||
Acquisition_1C.dump_filename=./acq_dump.dat
|
|
||||||
;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
|
|
||||||
Acquisition_1C.item_type=gr_complex
|
Acquisition_1C.item_type=gr_complex
|
||||||
;#if: Signal intermediate frequency in [Hz]
|
;#if: Signal intermediate frequency in [Hz]
|
||||||
Acquisition_1C.if=0
|
Acquisition_1C.if=0
|
||||||
;#sampled_ms: Signal block duration for the acquisition signal detection [ms]
|
;#sampled_ms: Signal block duration for the acquisition signal detection [ms]
|
||||||
Acquisition_1C.sampled_ms=1
|
Acquisition_1C.sampled_ms=1
|
||||||
;#implementation: Acquisition algorithm selection for this channel: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
|
|
||||||
Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition
|
|
||||||
;#threshold: Acquisition threshold
|
;#threshold: Acquisition threshold
|
||||||
Acquisition_1C.threshold=0.0075
|
Acquisition_1C.threshold=0.0075
|
||||||
;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
|
;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
|
||||||
@ -199,22 +182,21 @@ Acquisition_1C.threshold=0.0075
|
|||||||
Acquisition_1C.doppler_max=5000
|
Acquisition_1C.doppler_max=5000
|
||||||
;#doppler_max: Doppler step in the grid search [Hz]
|
;#doppler_max: Doppler step in the grid search [Hz]
|
||||||
Acquisition_1C.doppler_step=250
|
Acquisition_1C.doppler_step=250
|
||||||
|
;#dump: Enable or disable the acquisition internal data file logging [true] or [false]
|
||||||
|
Acquisition_1C.dump=false
|
||||||
|
;#filename: Log path and filename
|
||||||
|
Acquisition_1C.dump_filename=./acq_dump.dat
|
||||||
|
|
||||||
|
|
||||||
;######### GALILEO ACQUISITION CONFIG ############
|
;######### GALILEO ACQUISITION CONFIG ############
|
||||||
|
Acquisition_1B.implementation=Galileo_E1_PCPS_Ambiguous_Acquisition
|
||||||
;#dump: Enable or disable the acquisition internal data file logging [true] or [false]
|
;#item_type: Type and resolution for each of the signal samples.
|
||||||
Acquisition_1B.dump=false
|
|
||||||
;#filename: Log path and filename
|
|
||||||
Acquisition_1B.dump_filename=./acq_dump.dat
|
|
||||||
;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
|
|
||||||
Acquisition_1B.item_type=gr_complex
|
Acquisition_1B.item_type=gr_complex
|
||||||
;#if: Signal intermediate frequency in [Hz]
|
;#if: Signal intermediate frequency in [Hz]
|
||||||
Acquisition_1B.if=0
|
Acquisition_1B.if=0
|
||||||
;#sampled_ms: Signal block duration for the acquisition signal detection [ms]
|
;#sampled_ms: Signal block duration for the acquisition signal detection [ms]
|
||||||
Acquisition_1B.sampled_ms=4
|
Acquisition_1B.sampled_ms=4
|
||||||
;#implementation: Acquisition algorithm selection for this channel: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
|
;#implementation: Acquisition algorithm selection for this channel: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
|
||||||
Acquisition_1B.implementation=Galileo_E1_PCPS_Ambiguous_Acquisition
|
|
||||||
;#threshold: Acquisition threshold
|
;#threshold: Acquisition threshold
|
||||||
;Acquisition_1B.threshold=0
|
;Acquisition_1B.threshold=0
|
||||||
;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
|
;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
|
||||||
@ -223,118 +205,92 @@ Acquisition_1B.pfa=0.0000002
|
|||||||
Acquisition_1B.doppler_max=15000
|
Acquisition_1B.doppler_max=15000
|
||||||
;#doppler_max: Doppler step in the grid search [Hz]
|
;#doppler_max: Doppler step in the grid search [Hz]
|
||||||
Acquisition_1B.doppler_step=125
|
Acquisition_1B.doppler_step=125
|
||||||
|
;#dump: Enable or disable the acquisition internal data file logging [true] or [false]
|
||||||
|
Acquisition_1B.dump=false
|
||||||
|
;#filename: Log path and filename
|
||||||
|
Acquisition_1B.dump_filename=./acq_dump.dat
|
||||||
|
|
||||||
|
|
||||||
;######### TRACKING GPS CONFIG ############
|
;######### TRACKING GPS CONFIG ############
|
||||||
|
|
||||||
;#implementation: Selected tracking algorithm: [GPS_L1_CA_DLL_PLL_Tracking] or [GPS_L1_CA_DLL_PLL_C_Aid_Tracking] or [GPS_L1_CA_TCP_CONNECTOR_Tracking] or [Galileo_E1_DLL_PLL_VEML_Tracking]
|
|
||||||
Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_C_Aid_Tracking
|
Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_C_Aid_Tracking
|
||||||
;#item_type: Type and resolution for each of the signal samples. Use only [gr_complex] in this version.
|
;#item_type: Type and resolution for each of the signal samples.
|
||||||
Tracking_1C.item_type=gr_complex
|
Tracking_1C.item_type=gr_complex
|
||||||
|
|
||||||
;#sampling_frequency: Signal Intermediate Frequency in [Hz]
|
;#sampling_frequency: Signal Intermediate Frequency in [Hz]
|
||||||
Tracking_1C.if=0
|
Tracking_1C.if=0
|
||||||
|
|
||||||
;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false]
|
|
||||||
Tracking_1C.dump=true
|
|
||||||
|
|
||||||
;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number.
|
|
||||||
Tracking_1C.dump_filename=../data/epl_tracking_ch_
|
|
||||||
|
|
||||||
;# Extended correlation after telemetry bit synchronization
|
;# Extended correlation after telemetry bit synchronization
|
||||||
;# Valid values are: [1,2,4,5,10,20] (integer divisors of the GPS L1 CA bit period (20 ms) )
|
;# Valid values are: [1,2,4,5,10,20] (integer divisors of the GPS L1 CA bit period (20 ms) )
|
||||||
;# Longer integration period require more stable front-end LO
|
;# Longer integration period require more stable front-end LO
|
||||||
|
|
||||||
Tracking_1C.extend_correlation_ms=1
|
Tracking_1C.extend_correlation_ms=1
|
||||||
|
|
||||||
;#pll_bw_hz: PLL loop filter bandwidth [Hz]
|
;#pll_bw_hz: PLL loop filter bandwidth [Hz]
|
||||||
|
|
||||||
Tracking_1C.pll_bw_hz=40;
|
Tracking_1C.pll_bw_hz=40;
|
||||||
Tracking_1C.pll_bw_narrow_hz=20;
|
Tracking_1C.pll_bw_narrow_hz=20;
|
||||||
|
|
||||||
;#dll_bw_hz: DLL loop filter bandwidth [Hz]
|
;#dll_bw_hz: DLL loop filter bandwidth [Hz]
|
||||||
Tracking_1C.dll_bw_hz=2.0;
|
Tracking_1C.dll_bw_hz=2.0;
|
||||||
Tracking_1C.dll_bw_narrow_hz=1.0;
|
Tracking_1C.dll_bw_narrow_hz=1.0;
|
||||||
|
|
||||||
;#order: PLL/DLL loop filter order [2] or [3]
|
;#order: PLL/DLL loop filter order [2] or [3]
|
||||||
Tracking_1C.order=3;
|
Tracking_1C.order=3;
|
||||||
|
;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false]
|
||||||
|
Tracking_1C.dump=true
|
||||||
|
;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number.
|
||||||
|
Tracking_1C.dump_filename=../data/epl_tracking_ch_
|
||||||
|
|
||||||
|
|
||||||
;######### TRACKING GALILEO CONFIG ############
|
;######### TRACKING GALILEO CONFIG ############
|
||||||
|
|
||||||
;#implementation: Selected tracking algorithm: [GPS_L1_CA_DLL_PLL_Tracking] or [GPS_L1_CA_DLL_PLL_C_Aid_Tracking] or [GPS_L1_CA_TCP_CONNECTOR_Tracking] or [Galileo_E1_DLL_PLL_VEML_Tracking]
|
|
||||||
Tracking_1B.implementation=Galileo_E1_DLL_PLL_VEML_Tracking
|
Tracking_1B.implementation=Galileo_E1_DLL_PLL_VEML_Tracking
|
||||||
;#item_type: Type and resolution for each of the signal samples. Use only [gr_complex] in this version.
|
;#item_type: Type and resolution for each of the signal samples.
|
||||||
Tracking_1B.item_type=gr_complex
|
Tracking_1B.item_type=gr_complex
|
||||||
|
|
||||||
;#sampling_frequency: Signal Intermediate Frequency in [Hz]
|
;#sampling_frequency: Signal Intermediate Frequency in [Hz]
|
||||||
Tracking_1B.if=0
|
Tracking_1B.if=0
|
||||||
|
|
||||||
;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false]
|
|
||||||
Tracking_1B.dump=false
|
|
||||||
|
|
||||||
;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number.
|
|
||||||
Tracking_1B.dump_filename=../data/veml_tracking_ch_
|
|
||||||
|
|
||||||
;#pll_bw_hz: PLL loop filter bandwidth [Hz]
|
;#pll_bw_hz: PLL loop filter bandwidth [Hz]
|
||||||
Tracking_1B.pll_bw_hz=15.0;
|
Tracking_1B.pll_bw_hz=15.0;
|
||||||
|
|
||||||
;#dll_bw_hz: DLL loop filter bandwidth [Hz]
|
;#dll_bw_hz: DLL loop filter bandwidth [Hz]
|
||||||
Tracking_1B.dll_bw_hz=2.0;
|
Tracking_1B.dll_bw_hz=2.0;
|
||||||
|
|
||||||
;#order: PLL/DLL loop filter order [2] or [3]
|
;#order: PLL/DLL loop filter order [2] or [3]
|
||||||
Tracking_1B.order=3;
|
Tracking_1B.order=3;
|
||||||
|
|
||||||
;#early_late_space_chips: correlator early-late space [chips]. Use [0.5] for GPS and [0.15] for Galileo
|
;#early_late_space_chips: correlator early-late space [chips]. Use [0.5] for GPS and [0.15] for Galileo
|
||||||
Tracking_1B.early_late_space_chips=0.15;
|
Tracking_1B.early_late_space_chips=0.15;
|
||||||
|
|
||||||
;#very_early_late_space_chips: only for [Galileo_E1_DLL_PLL_VEML_Tracking], correlator very early-late space [chips]. Use [0.6]
|
;#very_early_late_space_chips: only for [Galileo_E1_DLL_PLL_VEML_Tracking], correlator very early-late space [chips]. Use [0.6]
|
||||||
Tracking_1B.very_early_late_space_chips=0.6;
|
Tracking_1B.very_early_late_space_chips=0.6;
|
||||||
|
;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false]
|
||||||
|
Tracking_1B.dump=false
|
||||||
|
;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number.
|
||||||
|
Tracking_1B.dump_filename=../data/veml_tracking_ch_
|
||||||
|
|
||||||
|
|
||||||
;######### TELEMETRY DECODER GPS CONFIG ############
|
;######### TELEMETRY DECODER GPS CONFIG ############
|
||||||
;#implementation: Use [GPS_L1_CA_Telemetry_Decoder] for GPS L1 C/A
|
;#implementation: Use [GPS_L1_CA_Telemetry_Decoder] for GPS L1 C/A
|
||||||
TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder
|
TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder
|
||||||
TelemetryDecoder_1C.dump=false
|
TelemetryDecoder_1C.dump=false
|
||||||
;#decimation factor
|
|
||||||
TelemetryDecoder_1C.decimation_factor=4;
|
|
||||||
|
|
||||||
;######### TELEMETRY DECODER GALILEO CONFIG ############
|
;######### TELEMETRY DECODER GALILEO CONFIG ############
|
||||||
;#implementation: Use [Galileo_E1B_Telemetry_Decoder] for Galileo E1B
|
;#implementation: Use [Galileo_E1B_Telemetry_Decoder] for Galileo E1B
|
||||||
TelemetryDecoder_1B.implementation=Galileo_E1B_Telemetry_Decoder
|
TelemetryDecoder_1B.implementation=Galileo_E1B_Telemetry_Decoder
|
||||||
TelemetryDecoder_1B.dump=false
|
TelemetryDecoder_1B.dump=false
|
||||||
TelemetryDecoder_1B_factor=4;
|
|
||||||
|
|
||||||
;######### OBSERVABLES CONFIG ############
|
;######### OBSERVABLES CONFIG ############
|
||||||
;#implementation:
|
;#implementation:
|
||||||
Observables.implementation=Hybrid_Observables
|
Observables.implementation=Hybrid_Observables
|
||||||
|
|
||||||
;#dump: Enable or disable the Observables internal binary data file logging [true] or [false]
|
;#dump: Enable or disable the Observables internal binary data file logging [true] or [false]
|
||||||
Observables.dump=false
|
Observables.dump=false
|
||||||
|
|
||||||
;#dump_filename: Log path and filename.
|
;#dump_filename: Log path and filename.
|
||||||
Observables.dump_filename=./observables.dat
|
Observables.dump_filename=./observables.dat
|
||||||
|
|
||||||
|
|
||||||
;######### PVT CONFIG ############
|
;######### PVT CONFIG ############
|
||||||
;#implementation: Position Velocity and Time (PVT) implementation algorithm.
|
|
||||||
PVT.implementation=RTKLIB_PVT
|
PVT.implementation=RTKLIB_PVT
|
||||||
|
|
||||||
PVT.positioning_mode=PPP_Static ; options: Single, Static, Kinematic, PPP_Static, PPP_Kinematic
|
PVT.positioning_mode=PPP_Static ; options: Single, Static, Kinematic, PPP_Static, PPP_Kinematic
|
||||||
PVT.iono_model=Broadcast ; options: OFF, Broadcast, SBAS, Iono-Free-LC, Estimate_STEC, IONEX
|
PVT.iono_model=Broadcast ; options: OFF, Broadcast, SBAS, Iono-Free-LC, Estimate_STEC, IONEX
|
||||||
PVT.trop_model=Saastamoinen ; options: OFF, Saastamoinen, SBAS, Estimate_ZTD, Estimate_ZTD_Grad
|
PVT.trop_model=Saastamoinen ; options: OFF, Saastamoinen, SBAS, Estimate_ZTD, Estimate_ZTD_Grad
|
||||||
|
|
||||||
|
|
||||||
;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms]
|
;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms]
|
||||||
PVT.output_rate_ms=10;
|
PVT.output_rate_ms=10;
|
||||||
|
|
||||||
;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms.
|
;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms.
|
||||||
PVT.display_rate_ms=500;
|
PVT.display_rate_ms=500;
|
||||||
|
|
||||||
;#dump: Enable or disable the PVT internal binary data file logging [true] or [false]
|
|
||||||
PVT.dump=false
|
|
||||||
|
|
||||||
PVT.flag_rtcm_server=false
|
PVT.flag_rtcm_server=false
|
||||||
PVT.flag_rtcm_tty_port=false
|
PVT.flag_rtcm_tty_port=false
|
||||||
PVT.rtcm_dump_devname=/dev/pts/1
|
PVT.rtcm_dump_devname=/dev/pts/1
|
||||||
|
;#dump: Enable or disable the PVT internal binary data file logging [true] or [false]
|
||||||
|
PVT.dump=false
|
||||||
;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump.
|
;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump.
|
||||||
PVT.dump_filename=./PVT
|
PVT.dump_filename=./PVT
|
||||||
|
@ -11,34 +11,18 @@ GNSS-SDR.internal_fs_sps=20000000
|
|||||||
|
|
||||||
|
|
||||||
;######### SIGNAL_SOURCE CONFIG ############
|
;######### SIGNAL_SOURCE CONFIG ############
|
||||||
;#implementation: Use [File_Signal_Source] or [UHD_Signal_Source] or [GN3S_Signal_Source] (experimental)
|
;#implementation
|
||||||
SignalSource.implementation=File_Signal_Source
|
SignalSource.implementation=File_Signal_Source
|
||||||
|
|
||||||
;#filename: path to file with the captured GNSS signal samples to be processed
|
;#filename: path to file with the captured GNSS signal samples to be processed
|
||||||
;SignalSource.filename=/home/javier/signals/L125_III1b_210s_L1_2msps.bin ; <- PUT YOUR FILE HERE
|
SignalSource.filename=/media/javier/SISTEMA/signals/fraunhofer/L125_III1b_210s_L1.bin ; <- PUT YOUR FILE HERE
|
||||||
|
;#item_type: Type and resolution for each of the signal samples.
|
||||||
SignalSource.filename=/media/javier/SISTEMA/signals/fraunhofer/L125_III1b_210s_L1.bin
|
|
||||||
|
|
||||||
;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
|
|
||||||
SignalSource.item_type=byte
|
SignalSource.item_type=byte
|
||||||
|
;#sampling_frequency: Original Signal sampling frequency in samples per second
|
||||||
;#sampling_frequency: Original Signal sampling frequency in [Hz]
|
|
||||||
SignalSource.sampling_frequency=20000000
|
SignalSource.sampling_frequency=20000000
|
||||||
|
|
||||||
;#freq: RF front-end center frequency in [Hz]
|
|
||||||
SignalSource.freq=1575420000
|
|
||||||
|
|
||||||
;#samples: Number of samples to be processed. Notice that 0 indicates the entire file.
|
;#samples: Number of samples to be processed. Notice that 0 indicates the entire file.
|
||||||
SignalSource.samples=0
|
SignalSource.samples=0
|
||||||
|
;#repeat: Repeat the processing file.
|
||||||
;#repeat: Repeat the processing file. Disable this option in this version
|
|
||||||
SignalSource.repeat=false
|
SignalSource.repeat=false
|
||||||
|
|
||||||
;#dump: Dump the Signal source data to a file. Disable this option in this version
|
|
||||||
SignalSource.dump=false
|
|
||||||
|
|
||||||
SignalSource.dump_filename=../data/signal_source.dat
|
|
||||||
|
|
||||||
;#enable_throttle_control: Enabling this option tells the signal source to keep the delay between samples in post processing.
|
;#enable_throttle_control: Enabling this option tells the signal source to keep the delay between samples in post processing.
|
||||||
; it helps to not overload the CPU, but the processing time will be longer.
|
; it helps to not overload the CPU, but the processing time will be longer.
|
||||||
SignalSource.enable_throttle_control=false
|
SignalSource.enable_throttle_control=false
|
||||||
@ -53,7 +37,7 @@ SignalSource.enable_throttle_control=false
|
|||||||
SignalConditioner.implementation=Signal_Conditioner
|
SignalConditioner.implementation=Signal_Conditioner
|
||||||
|
|
||||||
;######### DATA_TYPE_ADAPTER CONFIG ############
|
;######### DATA_TYPE_ADAPTER CONFIG ############
|
||||||
;## Changes the type of input data. Please disable it in this version.
|
;## Changes the type of input data.
|
||||||
;#implementation: [Pass_Through] disables this block
|
;#implementation: [Pass_Through] disables this block
|
||||||
DataTypeAdapter.implementation=Ibyte_To_Complex
|
DataTypeAdapter.implementation=Ibyte_To_Complex
|
||||||
|
|
||||||
@ -68,7 +52,7 @@ InputFilter.implementation=Pass_Through
|
|||||||
|
|
||||||
;#implementation: Use [Pass_Through] or [Direct_Resampler]
|
;#implementation: Use [Pass_Through] or [Direct_Resampler]
|
||||||
;#[Pass_Through] disables this block
|
;#[Pass_Through] disables this block
|
||||||
;#[Direct_Resampler] enables a resampler that implements a nearest neigbourhood interpolation
|
;#[Direct_Resampler] enables a resampler that implements a nearest neighborhood interpolation
|
||||||
;Resampler.implementation=Direct_Resampler
|
;Resampler.implementation=Direct_Resampler
|
||||||
Resampler.implementation=Pass_Through
|
Resampler.implementation=Pass_Through
|
||||||
|
|
||||||
@ -101,19 +85,13 @@ Channel15.signal=1B
|
|||||||
|
|
||||||
|
|
||||||
;######### GPS ACQUISITION CONFIG ############
|
;######### GPS ACQUISITION CONFIG ############
|
||||||
|
Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition
|
||||||
;#dump: Enable or disable the acquisition internal data file logging [true] or [false]
|
;#item_type: Type and resolution for each of the signal samples.
|
||||||
Acquisition_1C.dump=false
|
|
||||||
;#filename: Log path and filename
|
|
||||||
Acquisition_1C.dump_filename=./acq_dump.dat
|
|
||||||
;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
|
|
||||||
Acquisition_1C.item_type=gr_complex
|
Acquisition_1C.item_type=gr_complex
|
||||||
;#if: Signal intermediate frequency in [Hz]
|
;#if: Signal intermediate frequency in [Hz]
|
||||||
Acquisition_1C.if=0
|
Acquisition_1C.if=0
|
||||||
;#sampled_ms: Signal block duration for the acquisition signal detection [ms]
|
;#sampled_ms: Signal block duration for the acquisition signal detection [ms]
|
||||||
Acquisition_1C.sampled_ms=1
|
Acquisition_1C.sampled_ms=1
|
||||||
;#implementation: Acquisition algorithm selection for this channel: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
|
|
||||||
Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition
|
|
||||||
Acquisition_1C.use_CFAR_algorithm=false;
|
Acquisition_1C.use_CFAR_algorithm=false;
|
||||||
;#threshold: Acquisition threshold
|
;#threshold: Acquisition threshold
|
||||||
Acquisition_1C.threshold=18
|
Acquisition_1C.threshold=18
|
||||||
@ -121,22 +99,20 @@ Acquisition_1C.threshold=18
|
|||||||
Acquisition_1C.doppler_max=5000
|
Acquisition_1C.doppler_max=5000
|
||||||
;#doppler_max: Doppler step in the grid search [Hz]
|
;#doppler_max: Doppler step in the grid search [Hz]
|
||||||
Acquisition_1C.doppler_step=500
|
Acquisition_1C.doppler_step=500
|
||||||
|
;#dump: Enable or disable the acquisition internal data file logging [true] or [false]
|
||||||
|
Acquisition_1C.dump=false
|
||||||
|
;#filename: Log path and filename
|
||||||
|
Acquisition_1C.dump_filename=./acq_dump.dat
|
||||||
|
|
||||||
|
|
||||||
;######### GALILEO ACQUISITION CONFIG ############
|
;######### GALILEO ACQUISITION CONFIG ############
|
||||||
|
Acquisition_1B.implementation=Galileo_E1_PCPS_Ambiguous_Acquisition
|
||||||
;#dump: Enable or disable the acquisition internal data file logging [true] or [false]
|
;#item_type: Type and resolution for each of the signal samples.
|
||||||
Acquisition_1B.dump=false
|
|
||||||
;#filename: Log path and filename
|
|
||||||
Acquisition_1B.dump_filename=../data/acq_dump.dat
|
|
||||||
;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
|
|
||||||
Acquisition_1B.item_type=gr_complex
|
Acquisition_1B.item_type=gr_complex
|
||||||
;#if: Signal intermediate frequency in [Hz]
|
;#if: Signal intermediate frequency in [Hz]
|
||||||
Acquisition_1B.if=0
|
Acquisition_1B.if=0
|
||||||
;#sampled_ms: Signal block duration for the acquisition signal detection [ms]
|
;#sampled_ms: Signal block duration for the acquisition signal detection [ms]
|
||||||
Acquisition_1B.sampled_ms=4
|
Acquisition_1B.sampled_ms=4
|
||||||
;#implementation: Acquisition algorithm selection for this channel: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
|
|
||||||
Acquisition_1B.implementation=Galileo_E1_PCPS_Ambiguous_Acquisition
|
|
||||||
Acquisition_1B.acquire_pilot=true
|
Acquisition_1B.acquire_pilot=true
|
||||||
Acquisition_1B.use_CFAR_algorithm=false
|
Acquisition_1B.use_CFAR_algorithm=false
|
||||||
;#threshold: Acquisition threshold
|
;#threshold: Acquisition threshold
|
||||||
@ -146,100 +122,78 @@ Acquisition_1B.doppler_max=5000
|
|||||||
;#doppler_max: Doppler step in the grid search [Hz]
|
;#doppler_max: Doppler step in the grid search [Hz]
|
||||||
Acquisition_1B.doppler_step=125
|
Acquisition_1B.doppler_step=125
|
||||||
Acquisition_1B.bit_transition_flag=true
|
Acquisition_1B.bit_transition_flag=true
|
||||||
|
;#dump: Enable or disable the acquisition internal data file logging [true] or [false]
|
||||||
|
Acquisition_1B.dump=false
|
||||||
|
;#filename: Log path and filename
|
||||||
|
Acquisition_1B.dump_filename=../data/acq_dump.dat
|
||||||
|
|
||||||
|
|
||||||
;######### TRACKING GPS CONFIG ############
|
;######### TRACKING GPS CONFIG ############
|
||||||
|
|
||||||
;#implementation: Selected tracking algorithm: [GPS_L1_CA_DLL_PLL_Tracking] or [GPS_L1_CA_DLL_PLL_C_Aid_Tracking] or [GPS_L1_CA_TCP_CONNECTOR_Tracking] or [Galileo_E1_DLL_PLL_VEML_Tracking]
|
|
||||||
Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking
|
Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking
|
||||||
;#item_type: Type and resolution for each of the signal samples. Use only [gr_complex] in this version.
|
;#item_type: Type and resolution for each of the signal samples.
|
||||||
Tracking_1C.item_type=gr_complex
|
Tracking_1C.item_type=gr_complex
|
||||||
|
|
||||||
;#sampling_frequency: Signal Intermediate Frequency in [Hz]
|
;#sampling_frequency: Signal Intermediate Frequency in [Hz]
|
||||||
Tracking_1C.if=0
|
Tracking_1C.if=0
|
||||||
|
;#pll_bw_hz: PLL loop filter bandwidth [Hz]
|
||||||
|
Tracking_1C.pll_bw_hz=30.0;
|
||||||
|
;#dll_bw_hz: DLL loop filter bandwidth [Hz]
|
||||||
|
Tracking_1C.dll_bw_hz=2.0;
|
||||||
|
;#order: PLL/DLL loop filter order [2] or [3]
|
||||||
|
Tracking_1C.order=3;
|
||||||
;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false]
|
;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false]
|
||||||
Tracking_1C.dump=false
|
Tracking_1C.dump=false
|
||||||
|
|
||||||
;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number.
|
;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number.
|
||||||
Tracking_1C.dump_filename=../data/epl_tracking_ch_
|
Tracking_1C.dump_filename=../data/epl_tracking_ch_
|
||||||
|
|
||||||
;#pll_bw_hz: PLL loop filter bandwidth [Hz]
|
|
||||||
Tracking_1C.pll_bw_hz=30.0;
|
|
||||||
|
|
||||||
;#dll_bw_hz: DLL loop filter bandwidth [Hz]
|
|
||||||
Tracking_1C.dll_bw_hz=2.0;
|
|
||||||
|
|
||||||
;#order: PLL/DLL loop filter order [2] or [3]
|
|
||||||
Tracking_1C.order=3;
|
|
||||||
|
|
||||||
;######### TRACKING GALILEO CONFIG ############
|
;######### TRACKING GALILEO CONFIG ############
|
||||||
|
|
||||||
;#implementation: Selected tracking algorithm: [GPS_L1_CA_DLL_PLL_Tracking] or [GPS_L1_CA_DLL_PLL_C_Aid_Tracking] or [GPS_L1_CA_TCP_CONNECTOR_Tracking] or [Galileo_E1_DLL_PLL_VEML_Tracking]
|
|
||||||
Tracking_1B.implementation=Galileo_E1_DLL_PLL_VEML_Tracking
|
Tracking_1B.implementation=Galileo_E1_DLL_PLL_VEML_Tracking
|
||||||
;#item_type: Type and resolution for each of the signal samples.
|
;#item_type: Type and resolution for each of the signal samples.
|
||||||
Tracking_1B.item_type=gr_complex
|
Tracking_1B.item_type=gr_complex
|
||||||
|
|
||||||
;#sampling_frequency: Signal Intermediate Frequency in [Hz]
|
;#sampling_frequency: Signal Intermediate Frequency in [Hz]
|
||||||
Tracking_1B.if=0
|
Tracking_1B.if=0
|
||||||
|
|
||||||
;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false]
|
|
||||||
Tracking_1B.dump=true
|
|
||||||
|
|
||||||
;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number.
|
|
||||||
Tracking_1B.dump_filename=../data/veml_tracking_ch_
|
|
||||||
|
|
||||||
Tracking_1B.track_pilot=true
|
Tracking_1B.track_pilot=true
|
||||||
|
|
||||||
;#pll_bw_hz: PLL loop filter bandwidth [Hz]
|
;#pll_bw_hz: PLL loop filter bandwidth [Hz]
|
||||||
Tracking_1B.pll_bw_hz=4.0;
|
Tracking_1B.pll_bw_hz=4.0;
|
||||||
|
|
||||||
;#dll_bw_hz: DLL loop filter bandwidth [Hz]
|
;#dll_bw_hz: DLL loop filter bandwidth [Hz]
|
||||||
Tracking_1B.dll_bw_hz=0.5;
|
Tracking_1B.dll_bw_hz=0.5;
|
||||||
|
|
||||||
;#pll_bw_hz: PLL loop filter bandwidth [Hz]
|
;#pll_bw_hz: PLL loop filter bandwidth [Hz]
|
||||||
Tracking_1B.pll_bw_narrow_hz=2.0;
|
Tracking_1B.pll_bw_narrow_hz=2.0;
|
||||||
|
|
||||||
;#dll_bw_hz: DLL loop filter bandwidth [Hz]
|
;#dll_bw_hz: DLL loop filter bandwidth [Hz]
|
||||||
Tracking_1B.dll_bw_narrow_hz=0.25;
|
Tracking_1B.dll_bw_narrow_hz=0.25;
|
||||||
|
|
||||||
Tracking_1B.extend_correlation_symbols=4;
|
Tracking_1B.extend_correlation_symbols=4;
|
||||||
|
|
||||||
;#order: PLL/DLL loop filter order [2] or [3]
|
;#order: PLL/DLL loop filter order [2] or [3]
|
||||||
Tracking_1B.order=3;
|
Tracking_1B.order=3;
|
||||||
|
|
||||||
;#early_late_space_chips: correlator early-late space [chips]. Use [0.5] for GPS and [0.15] for Galileo
|
;#early_late_space_chips: correlator early-late space [chips]. Use [0.5] for GPS and [0.15] for Galileo
|
||||||
Tracking_1B.early_late_space_chips=0.15;
|
Tracking_1B.early_late_space_chips=0.15;
|
||||||
|
|
||||||
;#very_early_late_space_chips: only for [Galileo_E1_DLL_PLL_VEML_Tracking], correlator very early-late space [chips]. Use [0.6]
|
;#very_early_late_space_chips: only for [Galileo_E1_DLL_PLL_VEML_Tracking], correlator very early-late space [chips]. Use [0.6]
|
||||||
Tracking_1B.very_early_late_space_chips=0.6;
|
Tracking_1B.very_early_late_space_chips=0.6;
|
||||||
|
|
||||||
;#early_late_space_chips: correlator early-late space [chips]. Use [0.5] for GPS and [0.15] for Galileo
|
;#early_late_space_chips: correlator early-late space [chips]. Use [0.5] for GPS and [0.15] for Galileo
|
||||||
Tracking_1B.early_late_space_narrow_chips=0.06;
|
Tracking_1B.early_late_space_narrow_chips=0.06;
|
||||||
|
|
||||||
;#very_early_late_space_chips: only for [Galileo_E1_DLL_PLL_VEML_Tracking], correlator very early-late space [chips]. Use [0.6]
|
;#very_early_late_space_chips: only for [Galileo_E1_DLL_PLL_VEML_Tracking], correlator very early-late space [chips]. Use [0.6]
|
||||||
Tracking_1B.very_early_late_space_narrow_chips=0.25;
|
Tracking_1B.very_early_late_space_narrow_chips=0.25;
|
||||||
|
;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false]
|
||||||
|
Tracking_1B.dump=true
|
||||||
|
;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number.
|
||||||
|
Tracking_1B.dump_filename=../data/veml_tracking_ch_
|
||||||
|
|
||||||
|
|
||||||
;######### TELEMETRY DECODER GPS CONFIG ############
|
;######### TELEMETRY DECODER GPS CONFIG ############
|
||||||
;#implementation: Use [GPS_L1_CA_Telemetry_Decoder] for GPS L1 C/A
|
;#implementation: Use [GPS_L1_CA_Telemetry_Decoder] for GPS L1 C/A
|
||||||
TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder
|
TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder
|
||||||
TelemetryDecoder_1C.dump=false
|
TelemetryDecoder_1C.dump=false
|
||||||
;#decimation factor
|
|
||||||
TelemetryDecoder_1C.decimation_factor=4;
|
|
||||||
|
|
||||||
;######### TELEMETRY DECODER GALILEO CONFIG ############
|
;######### TELEMETRY DECODER GALILEO CONFIG ############
|
||||||
;#implementation: Use [Galileo_E1B_Telemetry_Decoder] for Galileo E1B
|
;#implementation: Use [Galileo_E1B_Telemetry_Decoder] for Galileo E1B
|
||||||
TelemetryDecoder_1B.implementation=Galileo_E1B_Telemetry_Decoder
|
TelemetryDecoder_1B.implementation=Galileo_E1B_Telemetry_Decoder
|
||||||
TelemetryDecoder_1B.dump=false
|
TelemetryDecoder_1B.dump=false
|
||||||
|
|
||||||
|
|
||||||
;######### OBSERVABLES CONFIG ############
|
;######### OBSERVABLES CONFIG ############
|
||||||
;#implementation:
|
;#implementation:
|
||||||
Observables.implementation=Hybrid_Observables
|
Observables.implementation=Hybrid_Observables
|
||||||
|
|
||||||
;#dump: Enable or disable the Observables internal binary data file logging [true] or [false]
|
;#dump: Enable or disable the Observables internal binary data file logging [true] or [false]
|
||||||
Observables.dump=false
|
Observables.dump=false
|
||||||
|
|
||||||
;#dump_filename: Log path and filename.
|
;#dump_filename: Log path and filename.
|
||||||
Observables.dump_filename=./observables.dat
|
Observables.dump_filename=./observables.dat
|
||||||
|
|
||||||
@ -247,23 +201,17 @@ Observables.dump_filename=./observables.dat
|
|||||||
;######### PVT CONFIG ############
|
;######### PVT CONFIG ############
|
||||||
;#implementation: Position Velocity and Time (PVT) implementation:
|
;#implementation: Position Velocity and Time (PVT) implementation:
|
||||||
PVT.implementation=RTKLIB_PVT
|
PVT.implementation=RTKLIB_PVT
|
||||||
|
|
||||||
PVT.positioning_mode=PPP_Static ; options: Single, Static, Kinematic, PPP_Static, PPP_Kinematic
|
PVT.positioning_mode=PPP_Static ; options: Single, Static, Kinematic, PPP_Static, PPP_Kinematic
|
||||||
PVT.iono_model=Broadcast ; options: OFF, Broadcast, SBAS, Iono-Free-LC, Estimate_STEC, IONEX
|
PVT.iono_model=Broadcast ; options: OFF, Broadcast, SBAS, Iono-Free-LC, Estimate_STEC, IONEX
|
||||||
PVT.trop_model=Saastamoinen ; options: OFF, Saastamoinen, SBAS, Estimate_ZTD, Estimate_ZTD_Grad
|
PVT.trop_model=Saastamoinen ; options: OFF, Saastamoinen, SBAS, Estimate_ZTD, Estimate_ZTD_Grad
|
||||||
|
|
||||||
;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms]
|
;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms]
|
||||||
PVT.output_rate_ms=100;
|
PVT.output_rate_ms=100;
|
||||||
|
|
||||||
;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms.
|
;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms.
|
||||||
PVT.display_rate_ms=500;
|
PVT.display_rate_ms=500;
|
||||||
|
|
||||||
;#dump: Enable or disable the PVT internal binary data file logging [true] or [false]
|
|
||||||
PVT.dump=false
|
|
||||||
|
|
||||||
PVT.flag_rtcm_server=false
|
PVT.flag_rtcm_server=false
|
||||||
PVT.flag_rtcm_tty_port=false
|
PVT.flag_rtcm_tty_port=false
|
||||||
PVT.rtcm_dump_devname=/dev/pts/1
|
PVT.rtcm_dump_devname=/dev/pts/1
|
||||||
|
;#dump: Enable or disable the PVT internal binary data file logging [true] or [false]
|
||||||
|
PVT.dump=false
|
||||||
;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump.
|
;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump.
|
||||||
PVT.dump_filename=./PVT
|
PVT.dump_filename=./PVT
|
||||||
|
@ -7,46 +7,33 @@
|
|||||||
|
|
||||||
;######### GLOBAL OPTIONS ##################
|
;######### GLOBAL OPTIONS ##################
|
||||||
;internal_fs_hz: Internal signal sampling frequency after the signal conditioning stage [Hz].
|
;internal_fs_hz: Internal signal sampling frequency after the signal conditioning stage [Hz].
|
||||||
GNSS-SDR.internal_fs_hz=5456000
|
GNSS-SDR.internal_fs_sps=5456000
|
||||||
|
|
||||||
;######### SIGNAL_SOURCE CONFIG ############
|
;######### SIGNAL_SOURCE CONFIG ############
|
||||||
;#implementation: Use [File_Signal_Source] [Nsr_File_Signal_Source] or [UHD_Signal_Source] or [GN3S_Signal_Source] (experimental)
|
;#implementation
|
||||||
SignalSource.implementation=Labsat_Signal_Source
|
SignalSource.implementation=Labsat_Signal_Source
|
||||||
|
|
||||||
SignalSource.selected_channel=1
|
SignalSource.selected_channel=1
|
||||||
|
|
||||||
;#filename: path to file with the captured GNSS signal samples to be processed
|
;#filename: path to file with the captured GNSS signal samples to be processed
|
||||||
;# Labsat sile source automatically increments the file name when the signal is splitted in several files
|
;# Labsat sile source automatically increments the file name when the signal is split in several files
|
||||||
;# the adapter adds "_0000.LS3" to this base path and filename. Next file will be "_0001.LS3" and so on
|
;# the adapter adds "_0000.LS3" to this base path and filename. Next file will be "_0001.LS3" and so on
|
||||||
;# in this example, the first file complete path will be ../signals/GPS_025_0000.LS3
|
;# in this example, the first file complete path will be ../signals/GPS_025_0000.LS3
|
||||||
|
|
||||||
SignalSource.filename=../signals/GPS_025 ; <- PUT YOUR FILE HERE
|
SignalSource.filename=../signals/GPS_025 ; <- PUT YOUR FILE HERE
|
||||||
|
|
||||||
;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
|
;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
|
||||||
SignalSource.item_type=gr_complex
|
SignalSource.item_type=gr_complex
|
||||||
|
;#sampling_frequency: Original Signal sampling frequency in samples per second
|
||||||
;#sampling_frequency: Original Signal sampling frequency in [Hz]
|
|
||||||
SignalSource.sampling_frequency=16368000
|
SignalSource.sampling_frequency=16368000
|
||||||
|
|
||||||
;#freq: RF front-end center frequency in [Hz]
|
|
||||||
SignalSource.freq=1575420000
|
|
||||||
|
|
||||||
;#samples: Number of samples to be processed. Notice that 0 indicates the entire file.
|
;#samples: Number of samples to be processed. Notice that 0 indicates the entire file.
|
||||||
SignalSource.samples=0
|
SignalSource.samples=0
|
||||||
|
;#repeat: Repeat the processing file.
|
||||||
;#repeat: Repeat the processing file. Disable this option in this version
|
|
||||||
SignalSource.repeat=false
|
SignalSource.repeat=false
|
||||||
|
;#dump: Dump the Signal source data to a file.
|
||||||
;#dump: Dump the Signal source data to a file. Disable this option in this version
|
|
||||||
SignalSource.dump=false
|
SignalSource.dump=false
|
||||||
|
|
||||||
SignalSource.dump_filename=../data/signal_source.dat
|
SignalSource.dump_filename=../data/signal_source.dat
|
||||||
|
|
||||||
|
|
||||||
;#enable_throttle_control: Enabling this option tells the signal source to keep the delay between samples in post processing.
|
;#enable_throttle_control: Enabling this option tells the signal source to keep the delay between samples in post processing.
|
||||||
; it helps to not overload the CPU, but the processing time will be longer.
|
; it helps to not overload the CPU, but the processing time will be longer.
|
||||||
SignalSource.enable_throttle_control=false
|
SignalSource.enable_throttle_control=false
|
||||||
|
|
||||||
|
|
||||||
;######### SIGNAL_CONDITIONER CONFIG ############
|
;######### SIGNAL_CONDITIONER CONFIG ############
|
||||||
;## It holds blocks to change data type, filter and resample input data.
|
;## It holds blocks to change data type, filter and resample input data.
|
||||||
|
|
||||||
@ -64,10 +51,9 @@ DataTypeAdapter.item_type=gr_complex
|
|||||||
;######### INPUT_FILTER CONFIG ############
|
;######### INPUT_FILTER CONFIG ############
|
||||||
;## Filter the input data. Can be combined with frequency translation for IF signals
|
;## Filter the input data. Can be combined with frequency translation for IF signals
|
||||||
|
|
||||||
;#implementation: Use [Pass_Through] or [Fir_Filter] or [Freq_Xlating_Fir_Filter]
|
;#implementation
|
||||||
;#[Freq_Xlating_Fir_Filter] enables FIR filter and a composite frequency translation
|
;#[Freq_Xlating_Fir_Filter] enables FIR filter and a composite frequency translation
|
||||||
;# that shifts IF down to zero Hz.
|
;# that shifts IF down to zero Hz.
|
||||||
|
|
||||||
InputFilter.implementation=Freq_Xlating_Fir_Filter
|
InputFilter.implementation=Freq_Xlating_Fir_Filter
|
||||||
|
|
||||||
;#dump: Dump the filtered data to a file.
|
;#dump: Dump the filtered data to a file.
|
||||||
@ -78,14 +64,13 @@ InputFilter.dump_filename=../data/input_filter.dat
|
|||||||
|
|
||||||
;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation.
|
;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation.
|
||||||
;#These options are based on parameters of gnuradio's function: gr_remez.
|
;#These options are based on parameters of gnuradio's function: gr_remez.
|
||||||
;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse
|
;#This function calculates the optimal (in the Chebyshev/minimax sense) FIR filter impulse response given a set of band edges,
|
||||||
;#reponse given a set of band edges, the desired reponse on those bands,
|
;#the desired response on those bands, and the weight given to the error in those bands.
|
||||||
;#and the weight given to the error in those bands.
|
|
||||||
|
|
||||||
;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version.
|
;#input_item_type: Type and resolution for input signal samples.
|
||||||
InputFilter.input_item_type=gr_complex
|
InputFilter.input_item_type=gr_complex
|
||||||
|
|
||||||
;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version.
|
;#outut_item_type: Type and resolution for output filtered signal samples.
|
||||||
InputFilter.output_item_type=gr_complex
|
InputFilter.output_item_type=gr_complex
|
||||||
|
|
||||||
;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version.
|
;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version.
|
||||||
@ -167,19 +152,13 @@ Channel15.signal=1B
|
|||||||
|
|
||||||
|
|
||||||
;######### GPS ACQUISITION CONFIG ############
|
;######### GPS ACQUISITION CONFIG ############
|
||||||
|
Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition
|
||||||
;#dump: Enable or disable the acquisition internal data file logging [true] or [false]
|
;#item_type: Type and resolution for each of the signal samples.
|
||||||
Acquisition_1C.dump=false
|
|
||||||
;#filename: Log path and filename
|
|
||||||
Acquisition_1C.dump_filename=./acq_dump.dat
|
|
||||||
;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
|
|
||||||
Acquisition_1C.item_type=gr_complex
|
Acquisition_1C.item_type=gr_complex
|
||||||
;#if: Signal intermediate frequency in [Hz]
|
;#if: Signal intermediate frequency in [Hz]
|
||||||
Acquisition_1C.if=0
|
Acquisition_1C.if=0
|
||||||
;#sampled_ms: Signal block duration for the acquisition signal detection [ms]
|
;#sampled_ms: Signal block duration for the acquisition signal detection [ms]
|
||||||
Acquisition_1C.sampled_ms=1
|
Acquisition_1C.sampled_ms=1
|
||||||
;#implementation: Acquisition algorithm selection for this channel: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
|
|
||||||
Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition
|
|
||||||
Acquisition_1C.use_CFAR_algorithm=false;
|
Acquisition_1C.use_CFAR_algorithm=false;
|
||||||
;#threshold: Acquisition threshold
|
;#threshold: Acquisition threshold
|
||||||
Acquisition_1C.threshold=22
|
Acquisition_1C.threshold=22
|
||||||
@ -187,22 +166,19 @@ Acquisition_1C.threshold=22
|
|||||||
Acquisition_1C.doppler_max=5000
|
Acquisition_1C.doppler_max=5000
|
||||||
;#doppler_max: Doppler step in the grid search [Hz]
|
;#doppler_max: Doppler step in the grid search [Hz]
|
||||||
Acquisition_1C.doppler_step=250
|
Acquisition_1C.doppler_step=250
|
||||||
|
;#dump: Enable or disable the acquisition internal data file logging [true] or [false]
|
||||||
|
Acquisition_1C.dump=false
|
||||||
|
;#filename: Log path and filename
|
||||||
|
Acquisition_1C.dump_filename=./acq_dump.dat
|
||||||
|
|
||||||
;######### GALILEO ACQUISITION CONFIG ############
|
;######### GALILEO ACQUISITION CONFIG ############
|
||||||
|
Acquisition_1B.implementation=Galileo_E1_PCPS_Ambiguous_Acquisition
|
||||||
;#dump: Enable or disable the acquisition internal data file logging [true] or [false]
|
;#item_type: Type and resolution for each of the signal samples.
|
||||||
Acquisition_1B.dump=false
|
|
||||||
;#filename: Log path and filename
|
|
||||||
Acquisition_1B.dump_filename=../data/acq_dump.dat
|
|
||||||
;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
|
|
||||||
Acquisition_1B.item_type=gr_complex
|
Acquisition_1B.item_type=gr_complex
|
||||||
;#if: Signal intermediate frequency in [Hz]
|
;#if: Signal intermediate frequency in [Hz]
|
||||||
Acquisition_1B.if=0
|
Acquisition_1B.if=0
|
||||||
;#sampled_ms: Signal block duration for the acquisition signal detection [ms]
|
;#sampled_ms: Signal block duration for the acquisition signal detection [ms]
|
||||||
Acquisition_1B.sampled_ms=4
|
Acquisition_1B.sampled_ms=4
|
||||||
;#implementation: Acquisition algorithm selection for this channel: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
|
|
||||||
Acquisition_1B.implementation=Galileo_E1_PCPS_Ambiguous_Acquisition
|
|
||||||
Acquisition_1B.acquire_pilot=true
|
Acquisition_1B.acquire_pilot=true
|
||||||
Acquisition_1B.use_CFAR_algorithm=false
|
Acquisition_1B.use_CFAR_algorithm=false
|
||||||
;#threshold: Acquisition threshold
|
;#threshold: Acquisition threshold
|
||||||
@ -212,79 +188,59 @@ Acquisition_1B.doppler_max=5000
|
|||||||
;#doppler_max: Doppler step in the grid search [Hz]
|
;#doppler_max: Doppler step in the grid search [Hz]
|
||||||
Acquisition_1B.doppler_step=125
|
Acquisition_1B.doppler_step=125
|
||||||
Acquisition_1B.bit_transition_flag=true
|
Acquisition_1B.bit_transition_flag=true
|
||||||
|
;#dump: Enable or disable the acquisition internal data file logging [true] or [false]
|
||||||
|
Acquisition_1B.dump=false
|
||||||
|
;#filename: Log path and filename
|
||||||
|
Acquisition_1B.dump_filename=../data/acq_dump.dat
|
||||||
|
|
||||||
|
|
||||||
;######### TRACKING GPS CONFIG ############
|
;######### TRACKING GPS CONFIG ############
|
||||||
|
|
||||||
;#implementation: Selected tracking algorithm: [GPS_L1_CA_DLL_PLL_Tracking] or [GPS_L1_CA_DLL_PLL_C_Aid_Tracking] or [GPS_L1_CA_TCP_CONNECTOR_Tracking] or [Galileo_E1_DLL_PLL_VEML_Tracking]
|
|
||||||
Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking
|
Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking
|
||||||
;#item_type: Type and resolution for each of the signal samples. Use only [gr_complex] in this version.
|
;#item_type: Type and resolution for each of the signal samples.
|
||||||
Tracking_1C.item_type=gr_complex
|
Tracking_1C.item_type=gr_complex
|
||||||
|
|
||||||
;#sampling_frequency: Signal Intermediate Frequency in [Hz]
|
;#sampling_frequency: Signal Intermediate Frequency in [Hz]
|
||||||
Tracking_1C.if=0
|
Tracking_1C.if=0
|
||||||
|
;#pll_bw_hz: PLL loop filter bandwidth [Hz]
|
||||||
|
Tracking_1C.pll_bw_hz=40.0;
|
||||||
|
;#dll_bw_hz: DLL loop filter bandwidth [Hz]
|
||||||
|
Tracking_1C.dll_bw_hz=2.0;
|
||||||
|
;#order: PLL/DLL loop filter order [2] or [3]
|
||||||
|
Tracking_1C.order=3;
|
||||||
;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false]
|
;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false]
|
||||||
Tracking_1C.dump=true
|
Tracking_1C.dump=true
|
||||||
|
|
||||||
;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number.
|
;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number.
|
||||||
Tracking_1C.dump_filename=../data/epl_tracking_ch_
|
Tracking_1C.dump_filename=../data/epl_tracking_ch_
|
||||||
|
|
||||||
;#pll_bw_hz: PLL loop filter bandwidth [Hz]
|
|
||||||
Tracking_1C.pll_bw_hz=40.0;
|
|
||||||
|
|
||||||
;#dll_bw_hz: DLL loop filter bandwidth [Hz]
|
|
||||||
Tracking_1C.dll_bw_hz=2.0;
|
|
||||||
|
|
||||||
;#order: PLL/DLL loop filter order [2] or [3]
|
|
||||||
Tracking_1C.order=3;
|
|
||||||
|
|
||||||
;######### TRACKING GALILEO CONFIG ############
|
;######### TRACKING GALILEO CONFIG ############
|
||||||
|
|
||||||
;#implementation: Selected tracking algorithm: [GPS_L1_CA_DLL_PLL_Tracking] or [GPS_L1_CA_DLL_PLL_C_Aid_Tracking] or [GPS_L1_CA_TCP_CONNECTOR_Tracking] or [Galileo_E1_DLL_PLL_VEML_Tracking]
|
|
||||||
Tracking_1B.implementation=Galileo_E1_DLL_PLL_VEML_Tracking
|
Tracking_1B.implementation=Galileo_E1_DLL_PLL_VEML_Tracking
|
||||||
;#item_type: Type and resolution for each of the signal samples.
|
;#item_type: Type and resolution for each of the signal samples.
|
||||||
Tracking_1B.item_type=gr_complex
|
Tracking_1B.item_type=gr_complex
|
||||||
|
|
||||||
;#sampling_frequency: Signal Intermediate Frequency in [Hz]
|
;#sampling_frequency: Signal Intermediate Frequency in [Hz]
|
||||||
Tracking_1B.if=0
|
Tracking_1B.if=0
|
||||||
|
|
||||||
;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false]
|
|
||||||
Tracking_1B.dump=true
|
|
||||||
|
|
||||||
;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number.
|
|
||||||
Tracking_1B.dump_filename=../data/veml_tracking_ch_
|
|
||||||
|
|
||||||
Tracking_1B.track_pilot=true
|
Tracking_1B.track_pilot=true
|
||||||
|
|
||||||
;#pll_bw_hz: PLL loop filter bandwidth [Hz]
|
;#pll_bw_hz: PLL loop filter bandwidth [Hz]
|
||||||
Tracking_1B.pll_bw_hz=7.5;
|
Tracking_1B.pll_bw_hz=7.5;
|
||||||
|
|
||||||
;#dll_bw_hz: DLL loop filter bandwidth [Hz]
|
;#dll_bw_hz: DLL loop filter bandwidth [Hz]
|
||||||
Tracking_1B.dll_bw_hz=0.5;
|
Tracking_1B.dll_bw_hz=0.5;
|
||||||
|
|
||||||
;#pll_bw_hz: PLL loop filter bandwidth [Hz]
|
;#pll_bw_hz: PLL loop filter bandwidth [Hz]
|
||||||
Tracking_1B.pll_bw_narrow_hz=2.5;
|
Tracking_1B.pll_bw_narrow_hz=2.5;
|
||||||
|
|
||||||
;#dll_bw_hz: DLL loop filter bandwidth [Hz]
|
;#dll_bw_hz: DLL loop filter bandwidth [Hz]
|
||||||
Tracking_1B.dll_bw_narrow_hz=0.25;
|
Tracking_1B.dll_bw_narrow_hz=0.25;
|
||||||
|
|
||||||
Tracking_1B.extend_correlation_symbols=4;
|
Tracking_1B.extend_correlation_symbols=4;
|
||||||
|
|
||||||
;#order: PLL/DLL loop filter order [2] or [3]
|
;#order: PLL/DLL loop filter order [2] or [3]
|
||||||
Tracking_1B.order=3;
|
Tracking_1B.order=3;
|
||||||
|
|
||||||
;#early_late_space_chips: correlator early-late space [chips]. Use [0.5] for GPS and [0.15] for Galileo
|
;#early_late_space_chips: correlator early-late space [chips]. Use [0.5] for GPS and [0.15] for Galileo
|
||||||
Tracking_1B.early_late_space_chips=0.15;
|
Tracking_1B.early_late_space_chips=0.15;
|
||||||
|
|
||||||
;#very_early_late_space_chips: only for [Galileo_E1_DLL_PLL_VEML_Tracking], correlator very early-late space [chips]. Use [0.6]
|
;#very_early_late_space_chips: only for [Galileo_E1_DLL_PLL_VEML_Tracking], correlator very early-late space [chips]. Use [0.6]
|
||||||
Tracking_1B.very_early_late_space_chips=0.6;
|
Tracking_1B.very_early_late_space_chips=0.6;
|
||||||
|
|
||||||
;#early_late_space_chips: correlator early-late space [chips]. Use [0.5] for GPS and [0.15] for Galileo
|
;#early_late_space_chips: correlator early-late space [chips]. Use [0.5] for GPS and [0.15] for Galileo
|
||||||
Tracking_1B.early_late_space_narrow_chips=0.15;
|
Tracking_1B.early_late_space_narrow_chips=0.15;
|
||||||
|
|
||||||
;#very_early_late_space_chips: only for [Galileo_E1_DLL_PLL_VEML_Tracking], correlator very early-late space [chips]. Use [0.6]
|
;#very_early_late_space_chips: only for [Galileo_E1_DLL_PLL_VEML_Tracking], correlator very early-late space [chips]. Use [0.6]
|
||||||
Tracking_1B.very_early_late_space_narrow_chips=0.30;
|
Tracking_1B.very_early_late_space_narrow_chips=0.30;
|
||||||
|
;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false]
|
||||||
|
Tracking_1B.dump=true
|
||||||
|
;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number.
|
||||||
|
Tracking_1B.dump_filename=../data/veml_tracking_ch_
|
||||||
|
|
||||||
|
|
||||||
;######### TELEMETRY DECODER GPS CONFIG ############
|
;######### TELEMETRY DECODER GPS CONFIG ############
|
||||||
@ -297,13 +253,12 @@ TelemetryDecoder_1C.dump=false
|
|||||||
TelemetryDecoder_1B.implementation=Galileo_E1B_Telemetry_Decoder
|
TelemetryDecoder_1B.implementation=Galileo_E1B_Telemetry_Decoder
|
||||||
TelemetryDecoder_1B.dump=false
|
TelemetryDecoder_1B.dump=false
|
||||||
|
|
||||||
|
|
||||||
;######### OBSERVABLES CONFIG ############
|
;######### OBSERVABLES CONFIG ############
|
||||||
;#implementation:
|
;#implementation:
|
||||||
Observables.implementation=Hybrid_Observables
|
Observables.implementation=Hybrid_Observables
|
||||||
|
|
||||||
;#dump: Enable or disable the Observables internal binary data file logging [true] or [false]
|
;#dump: Enable or disable the Observables internal binary data file logging [true] or [false]
|
||||||
Observables.dump=false
|
Observables.dump=false
|
||||||
|
|
||||||
;#dump_filename: Log path and filename.
|
;#dump_filename: Log path and filename.
|
||||||
Observables.dump_filename=./observables.dat
|
Observables.dump_filename=./observables.dat
|
||||||
|
|
||||||
@ -311,23 +266,17 @@ Observables.dump_filename=./observables.dat
|
|||||||
;######### PVT CONFIG ############
|
;######### PVT CONFIG ############
|
||||||
;#implementation: Position Velocity and Time (PVT) implementation:
|
;#implementation: Position Velocity and Time (PVT) implementation:
|
||||||
PVT.implementation=RTKLIB_PVT
|
PVT.implementation=RTKLIB_PVT
|
||||||
|
|
||||||
PVT.positioning_mode=Single ; options: Single, Static, Kinematic, PPP_Static, PPP_Kinematic
|
PVT.positioning_mode=Single ; options: Single, Static, Kinematic, PPP_Static, PPP_Kinematic
|
||||||
PVT.iono_model=Broadcast ; options: OFF, Broadcast, SBAS, Iono-Free-LC, Estimate_STEC, IONEX
|
PVT.iono_model=Broadcast ; options: OFF, Broadcast, SBAS, Iono-Free-LC, Estimate_STEC, IONEX
|
||||||
PVT.trop_model=Saastamoinen ; options: OFF, Saastamoinen, SBAS, Estimate_ZTD, Estimate_ZTD_Grad
|
PVT.trop_model=Saastamoinen ; options: OFF, Saastamoinen, SBAS, Estimate_ZTD, Estimate_ZTD_Grad
|
||||||
|
|
||||||
;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms]
|
;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms]
|
||||||
PVT.output_rate_ms=100;
|
PVT.output_rate_ms=100;
|
||||||
|
|
||||||
;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms.
|
;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms.
|
||||||
PVT.display_rate_ms=500;
|
PVT.display_rate_ms=500;
|
||||||
|
|
||||||
;#dump: Enable or disable the PVT internal binary data file logging [true] or [false]
|
|
||||||
PVT.dump=false
|
|
||||||
|
|
||||||
PVT.flag_rtcm_server=false
|
PVT.flag_rtcm_server=false
|
||||||
PVT.flag_rtcm_tty_port=false
|
PVT.flag_rtcm_tty_port=false
|
||||||
PVT.rtcm_dump_devname=/dev/pts/1
|
PVT.rtcm_dump_devname=/dev/pts/1
|
||||||
|
;#dump: Enable or disable the PVT internal binary data file logging [true] or [false]
|
||||||
|
PVT.dump=false
|
||||||
;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump.
|
;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump.
|
||||||
PVT.dump_filename=./PVT
|
PVT.dump_filename=./PVT
|
||||||
|
@ -24,29 +24,22 @@ GNSS-SDR.SUPL_LAC=0x59e2
|
|||||||
GNSS-SDR.SUPL_CI=0x31b0
|
GNSS-SDR.SUPL_CI=0x31b0
|
||||||
|
|
||||||
;######### SIGNAL_SOURCE CONFIG ############
|
;######### SIGNAL_SOURCE CONFIG ############
|
||||||
;#implementation: Use [File_Signal_Source] or [UHD_Signal_Source] or [GN3S_Signal_Source] (experimental)
|
;#implementation
|
||||||
SignalSource.implementation=Flexiband_Signal_Source
|
SignalSource.implementation=Flexiband_Signal_Source
|
||||||
|
|
||||||
SignalSource.flag_read_file=true
|
SignalSource.flag_read_file=true
|
||||||
SignalSource.signal_file=/datalogger/signals/Fraunhofer/L125_III1b_210s.usb ; <- PUT YOUR FILE HERE
|
SignalSource.signal_file=/datalogger/signals/Fraunhofer/L125_III1b_210s.usb ; <- PUT YOUR FILE HERE
|
||||||
|
|
||||||
;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
|
;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
|
||||||
SignalSource.item_type=gr_complex
|
SignalSource.item_type=gr_complex
|
||||||
|
|
||||||
;# FPGA firmware file
|
;# FPGA firmware file
|
||||||
SignalSource.firmware_file=flexiband_III-1b.bit
|
SignalSource.firmware_file=flexiband_III-1b.bit
|
||||||
|
|
||||||
;#RF_channels: Number of RF channels present in the frontend device, must agree the FPGA firmware file
|
;#RF_channels: Number of RF channels present in the frontend device, must agree the FPGA firmware file
|
||||||
SignalSource.RF_channels=1
|
SignalSource.RF_channels=1
|
||||||
|
|
||||||
;#frontend channels gain. Not usable yet!
|
;#frontend channels gain. Not usable yet!
|
||||||
SignalSource.gain1=0
|
SignalSource.gain1=0
|
||||||
SignalSource.gain2=0
|
SignalSource.gain2=0
|
||||||
SignalSource.gain3=0
|
SignalSource.gain3=0
|
||||||
|
|
||||||
;#frontend channels AGC
|
;#frontend channels AGC
|
||||||
SignalSource.AGC=true
|
SignalSource.AGC=true
|
||||||
|
|
||||||
;# USB 3.0 packet buffer size (number of SuperSpeed packets)
|
;# USB 3.0 packet buffer size (number of SuperSpeed packets)
|
||||||
SignalSource.usb_packet_buffer=128
|
SignalSource.usb_packet_buffer=128
|
||||||
|
|
||||||
@ -76,13 +69,13 @@ InputFilter0.dump_filename=../data/input_filter.dat
|
|||||||
|
|
||||||
;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation.
|
;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation.
|
||||||
;#These options are based on parameters of gnuradio's function: gr_remez.
|
;#These options are based on parameters of gnuradio's function: gr_remez.
|
||||||
;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges,
|
;#This function calculates the optimal (in the Chebyshev/minimax sense) FIR filter impulse response given a set of band edges,
|
||||||
;#the desired reponse on those bands, and the weight given to the error in those bands.
|
;#the desired response on those bands, and the weight given to the error in those bands.
|
||||||
|
|
||||||
;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version.
|
;#input_item_type: Type and resolution for input signal samples.
|
||||||
InputFilter0.input_item_type=gr_complex
|
InputFilter0.input_item_type=gr_complex
|
||||||
|
|
||||||
;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version.
|
;#outut_item_type: Type and resolution for output filtered signal samples.
|
||||||
InputFilter0.output_item_type=gr_complex
|
InputFilter0.output_item_type=gr_complex
|
||||||
|
|
||||||
;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version.
|
;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version.
|
||||||
@ -156,10 +149,10 @@ InputFilter1.dump=false
|
|||||||
;#dump_filename: Log path and filename.
|
;#dump_filename: Log path and filename.
|
||||||
InputFilter1.dump_filename=../data/input_filter.dat
|
InputFilter1.dump_filename=../data/input_filter.dat
|
||||||
|
|
||||||
;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version.
|
;#input_item_type: Type and resolution for input signal samples.
|
||||||
InputFilter1.input_item_type=gr_complex
|
InputFilter1.input_item_type=gr_complex
|
||||||
|
|
||||||
;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version.
|
;#outut_item_type: Type and resolution for output filtered signal samples.
|
||||||
InputFilter1.output_item_type=gr_complex
|
InputFilter1.output_item_type=gr_complex
|
||||||
|
|
||||||
;######### RESAMPLER CONFIG 1 ############
|
;######### RESAMPLER CONFIG 1 ############
|
||||||
@ -183,10 +176,10 @@ InputFilter2.dump=false
|
|||||||
;#dump_filename: Log path and filename.
|
;#dump_filename: Log path and filename.
|
||||||
InputFilter2.dump_filename=../data/input_filter.dat
|
InputFilter2.dump_filename=../data/input_filter.dat
|
||||||
|
|
||||||
;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version.
|
;#input_item_type: Type and resolution for input signal samples.
|
||||||
InputFilter2.input_item_type=gr_complex
|
InputFilter2.input_item_type=gr_complex
|
||||||
|
|
||||||
;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version.
|
;#outut_item_type: Type and resolution for output filtered signal samples.
|
||||||
InputFilter2.output_item_type=gr_complex
|
InputFilter2.output_item_type=gr_complex
|
||||||
|
|
||||||
;######### RESAMPLER CONFIG 2 ############
|
;######### RESAMPLER CONFIG 2 ############
|
||||||
@ -219,19 +212,13 @@ Channel.signal=1C
|
|||||||
|
|
||||||
|
|
||||||
;######### ACQUISITION GLOBAL CONFIG ############
|
;######### ACQUISITION GLOBAL CONFIG ############
|
||||||
|
Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition
|
||||||
;#dump: Enable or disable the acquisition internal data file logging [true] or [false]
|
;#item_type: Type and resolution for each of the signal samples.
|
||||||
Acquisition_1C.dump=false
|
|
||||||
;#filename: Log path and filename
|
|
||||||
Acquisition_1C.dump_filename=./acq_dump.dat
|
|
||||||
;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
|
|
||||||
Acquisition_1C.item_type=gr_complex
|
Acquisition_1C.item_type=gr_complex
|
||||||
;#if: Signal intermediate frequency in [Hz]
|
;#if: Signal intermediate frequency in [Hz]
|
||||||
Acquisition_1C.if=0
|
Acquisition_1C.if=0
|
||||||
;#sampled_ms: Signal block duration for the acquisition signal detection [ms]
|
;#sampled_ms: Signal block duration for the acquisition signal detection [ms]
|
||||||
Acquisition_1C.coherent_integration_time_ms=1
|
Acquisition_1C.coherent_integration_time_ms=1
|
||||||
;#implementation: Acquisition algorithm selection for this channel: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
|
|
||||||
Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition
|
|
||||||
Acquisition_1C.use_CFAR_algorithm=false;
|
Acquisition_1C.use_CFAR_algorithm=false;
|
||||||
;#threshold: Acquisition threshold. It will be ignored if pfa is defined.
|
;#threshold: Acquisition threshold. It will be ignored if pfa is defined.
|
||||||
Acquisition_1C.threshold=15
|
Acquisition_1C.threshold=15
|
||||||
@ -247,91 +234,71 @@ Acquisition_1C.doppler_step=250
|
|||||||
Acquisition_1C.bit_transition_flag=false
|
Acquisition_1C.bit_transition_flag=false
|
||||||
;#max_dwells: Maximum number of consecutive dwells to be processed. It will be ignored if bit_transition_flag=true
|
;#max_dwells: Maximum number of consecutive dwells to be processed. It will be ignored if bit_transition_flag=true
|
||||||
Acquisition_1C.max_dwells=1
|
Acquisition_1C.max_dwells=1
|
||||||
|
;#dump: Enable or disable the acquisition internal data file logging [true] or [false]
|
||||||
|
Acquisition_1C.dump=false
|
||||||
;######### ACQUISITION CHANNELS CONFIG ######
|
;#filename: Log path and filename
|
||||||
;#The following options are specific to each channel and overwrite the generic options
|
Acquisition_1C.dump_filename=./acq_dump.dat
|
||||||
|
|
||||||
|
|
||||||
;######### TRACKING GLOBAL CONFIG ############
|
;######### TRACKING GLOBAL CONFIG ############
|
||||||
|
|
||||||
;#implementation: Selected tracking algorithm: [GPS_L1_CA_DLL_PLL_Tracking] or [GPS_L1_CA_DLL_PLL_C_Aid_Tracking]
|
|
||||||
Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_C_Aid_Tracking
|
Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_C_Aid_Tracking
|
||||||
;#item_type: Type and resolution for each of the signal samples. Use only [gr_complex] in this version.
|
;#item_type: Type and resolution for each of the signal samples.
|
||||||
Tracking_1C.item_type=gr_complex
|
Tracking_1C.item_type=gr_complex
|
||||||
|
|
||||||
;#sampling_frequency: Signal Intermediate Frequency in [Hz]
|
;#sampling_frequency: Signal Intermediate Frequency in [Hz]
|
||||||
Tracking_1C.if=0
|
Tracking_1C.if=0
|
||||||
|
|
||||||
;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false]
|
|
||||||
Tracking_1C.dump=true
|
|
||||||
|
|
||||||
;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number.
|
|
||||||
Tracking_1C.dump_filename=../data/epl_tracking_ch_
|
|
||||||
|
|
||||||
Tracking_1C.extend_correlation_ms=10
|
Tracking_1C.extend_correlation_ms=10
|
||||||
|
|
||||||
;#pll_bw_hz: PLL loop filter bandwidth [Hz]
|
;#pll_bw_hz: PLL loop filter bandwidth [Hz]
|
||||||
Tracking_1C.pll_bw_hz=40.0;
|
Tracking_1C.pll_bw_hz=40.0;
|
||||||
Tracking_1C.pll_bw_narrow_hz=35;
|
Tracking_1C.pll_bw_narrow_hz=35;
|
||||||
|
|
||||||
;#dll_bw_hz: DLL loop filter bandwidth [Hz]
|
;#dll_bw_hz: DLL loop filter bandwidth [Hz]
|
||||||
Tracking_1C.dll_bw_hz=2.0;
|
Tracking_1C.dll_bw_hz=2.0;
|
||||||
Tracking_1C.dll_bw_narrow_hz=2.0;
|
Tracking_1C.dll_bw_narrow_hz=2.0;
|
||||||
|
|
||||||
;#order: PLL/DLL loop filter order [2] or [3]
|
;#order: PLL/DLL loop filter order [2] or [3]
|
||||||
Tracking_1C.order=3;
|
Tracking_1C.order=3;
|
||||||
|
|
||||||
;#early_late_space_chips: correlator early-late space [chips]. Use [0.5]
|
;#early_late_space_chips: correlator early-late space [chips]. Use [0.5]
|
||||||
Tracking_1C.early_late_space_chips=0.5;
|
Tracking_1C.early_late_space_chips=0.5;
|
||||||
|
;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false]
|
||||||
|
Tracking_1C.dump=true
|
||||||
|
;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number.
|
||||||
|
Tracking_1C.dump_filename=../data/epl_tracking_ch_
|
||||||
|
|
||||||
|
|
||||||
;######### TELEMETRY DECODER GPS CONFIG ############
|
;######### TELEMETRY DECODER GPS CONFIG ############
|
||||||
;#implementation: Use [GPS_L1_CA_Telemetry_Decoder] for GPS L1 C/A
|
;#implementation: Use [GPS_L1_CA_Telemetry_Decoder] for GPS L1 C/A
|
||||||
TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder
|
TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder
|
||||||
TelemetryDecoder_1C.dump=false
|
TelemetryDecoder_1C.dump=false
|
||||||
|
|
||||||
|
|
||||||
;######### OBSERVABLES CONFIG ############
|
;######### OBSERVABLES CONFIG ############
|
||||||
;#implementation:
|
;#implementation:
|
||||||
Observables.implementation=Hybrid_Observables
|
Observables.implementation=Hybrid_Observables
|
||||||
|
|
||||||
;#dump: Enable or disable the Observables internal binary data file logging [true] or [false]
|
;#dump: Enable or disable the Observables internal binary data file logging [true] or [false]
|
||||||
Observables.dump=false
|
Observables.dump=false
|
||||||
|
|
||||||
;#dump_filename: Log path and filename.
|
;#dump_filename: Log path and filename.
|
||||||
Observables.dump_filename=./observables.dat
|
Observables.dump_filename=./observables.dat
|
||||||
|
|
||||||
|
|
||||||
;######### PVT CONFIG ############
|
;######### PVT CONFIG ############
|
||||||
;#implementation: Position Velocity and Time (PVT) implementation:
|
|
||||||
PVT.implementation=RTKLIB_PVT
|
PVT.implementation=RTKLIB_PVT
|
||||||
|
|
||||||
PVT.positioning_mode=PPP_Static ; options: Single, Static, Kinematic, PPP_Static, PPP_Kinematic
|
PVT.positioning_mode=PPP_Static ; options: Single, Static, Kinematic, PPP_Static, PPP_Kinematic
|
||||||
PVT.iono_model=Broadcast ; options: OFF, Broadcast, SBAS, Iono-Free-LC, Estimate_STEC, IONEX
|
PVT.iono_model=Broadcast ; options: OFF, Broadcast, SBAS, Iono-Free-LC, Estimate_STEC, IONEX
|
||||||
PVT.trop_model=Saastamoinen ; options: OFF, Saastamoinen, SBAS, Estimate_ZTD, Estimate_ZTD_Grad
|
PVT.trop_model=Saastamoinen ; options: OFF, Saastamoinen, SBAS, Estimate_ZTD, Estimate_ZTD_Grad
|
||||||
|
|
||||||
;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms]
|
;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms]
|
||||||
PVT.output_rate_ms=100
|
PVT.output_rate_ms=100
|
||||||
|
|
||||||
;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms.
|
;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms.
|
||||||
PVT.display_rate_ms=500
|
PVT.display_rate_ms=500
|
||||||
|
|
||||||
;# KML, GeoJSON, NMEA and RTCM output configuration
|
;# KML, GeoJSON, NMEA and RTCM output configuration
|
||||||
|
|
||||||
;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump.
|
|
||||||
PVT.dump_filename=./PVT
|
|
||||||
|
|
||||||
;#nmea_dump_filename: NMEA log path and filename
|
;#nmea_dump_filename: NMEA log path and filename
|
||||||
PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea;
|
PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea;
|
||||||
|
|
||||||
;#flag_nmea_tty_port: Enable or disable the NMEA log to a serial TTY port (Can be used with real hardware or virtual one)
|
;#flag_nmea_tty_port: Enable or disable the NMEA log to a serial TTY port (Can be used with real hardware or virtual one)
|
||||||
PVT.flag_nmea_tty_port=false;
|
PVT.flag_nmea_tty_port=false;
|
||||||
|
|
||||||
;#nmea_dump_devname: serial device descriptor for NMEA logging
|
;#nmea_dump_devname: serial device descriptor for NMEA logging
|
||||||
PVT.nmea_dump_devname=/dev/pts/4
|
PVT.nmea_dump_devname=/dev/pts/4
|
||||||
|
|
||||||
PVT.flag_rtcm_server=true
|
PVT.flag_rtcm_server=true
|
||||||
PVT.flag_rtcm_tty_port=false
|
PVT.flag_rtcm_tty_port=false
|
||||||
PVT.rtcm_dump_devname=/dev/pts/1
|
PVT.rtcm_dump_devname=/dev/pts/1
|
||||||
|
|
||||||
;#dump: Enable or disable the PVT internal binary data file logging [true] or [false]
|
;#dump: Enable or disable the PVT internal binary data file logging [true] or [false]
|
||||||
PVT.dump=false
|
PVT.dump=false
|
||||||
|
;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump.
|
||||||
|
PVT.dump_filename=./PVT
|
||||||
|
|
||||||
|
@ -25,7 +25,7 @@ GNSS-SDR.SUPL_LAC=0x59e2
|
|||||||
GNSS-SDR.SUPL_CI=0x31b0
|
GNSS-SDR.SUPL_CI=0x31b0
|
||||||
|
|
||||||
;######### SIGNAL_SOURCE CONFIG ############
|
;######### SIGNAL_SOURCE CONFIG ############
|
||||||
;#implementation: Use [File_Signal_Source] or [UHD_Signal_Source] or [GN3S_Signal_Source] (experimental)
|
;#implementation
|
||||||
SignalSource.implementation=Flexiband_Signal_Source
|
SignalSource.implementation=Flexiband_Signal_Source
|
||||||
|
|
||||||
;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
|
;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
|
||||||
@ -74,13 +74,13 @@ InputFilter0.dump_filename=../data/input_filter.dat
|
|||||||
|
|
||||||
;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation.
|
;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation.
|
||||||
;#These options are based on parameters of gnuradio's function: gr_remez.
|
;#These options are based on parameters of gnuradio's function: gr_remez.
|
||||||
;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges,
|
;#This function calculates the optimal (in the Chebyshev/minimax sense) FIR filter impulse response given a set of band edges,
|
||||||
;#the desired reponse on those bands, and the weight given to the error in those bands.
|
;#the desired response on those bands, and the weight given to the error in those bands.
|
||||||
|
|
||||||
;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version.
|
;#input_item_type: Type and resolution for input signal samples.
|
||||||
InputFilter0.input_item_type=gr_complex
|
InputFilter0.input_item_type=gr_complex
|
||||||
|
|
||||||
;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version.
|
;#outut_item_type: Type and resolution for output filtered signal samples.
|
||||||
InputFilter0.output_item_type=gr_complex
|
InputFilter0.output_item_type=gr_complex
|
||||||
|
|
||||||
;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version.
|
;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version.
|
||||||
@ -153,10 +153,10 @@ InputFilter1.dump=false
|
|||||||
;#dump_filename: Log path and filename.
|
;#dump_filename: Log path and filename.
|
||||||
InputFilter1.dump_filename=../data/input_filter.dat
|
InputFilter1.dump_filename=../data/input_filter.dat
|
||||||
|
|
||||||
;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version.
|
;#input_item_type: Type and resolution for input signal samples.
|
||||||
InputFilter1.input_item_type=gr_complex
|
InputFilter1.input_item_type=gr_complex
|
||||||
|
|
||||||
;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version.
|
;#outut_item_type: Type and resolution for output filtered signal samples.
|
||||||
InputFilter1.output_item_type=gr_complex
|
InputFilter1.output_item_type=gr_complex
|
||||||
|
|
||||||
;######### RESAMPLER CONFIG 1 ############
|
;######### RESAMPLER CONFIG 1 ############
|
||||||
@ -180,10 +180,10 @@ InputFilter2.dump=false
|
|||||||
;#dump_filename: Log path and filename.
|
;#dump_filename: Log path and filename.
|
||||||
InputFilter2.dump_filename=../data/input_filter.dat
|
InputFilter2.dump_filename=../data/input_filter.dat
|
||||||
|
|
||||||
;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version.
|
;#input_item_type: Type and resolution for input signal samples.
|
||||||
InputFilter2.input_item_type=gr_complex
|
InputFilter2.input_item_type=gr_complex
|
||||||
|
|
||||||
;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version.
|
;#outut_item_type: Type and resolution for output filtered signal samples.
|
||||||
InputFilter2.output_item_type=gr_complex
|
InputFilter2.output_item_type=gr_complex
|
||||||
|
|
||||||
;######### RESAMPLER CONFIG 2 ############
|
;######### RESAMPLER CONFIG 2 ############
|
||||||
@ -197,12 +197,13 @@ Channels_1C.count=8
|
|||||||
;#in_acquisition: Number of channels simultaneously acquiring for the whole receiver
|
;#in_acquisition: Number of channels simultaneously acquiring for the whole receiver
|
||||||
Channels.in_acquisition=1
|
Channels.in_acquisition=1
|
||||||
|
|
||||||
|
|
||||||
;#signal:
|
;#signal:
|
||||||
;# "1C" GPS L1 C/A
|
;# "1C" GPS L1 C/A
|
||||||
;# "2S" GPS L2 L2C (M)
|
|
||||||
;# "1B" GALILEO E1 B (I/NAV OS/CS/SoL)
|
;# "1B" GALILEO E1 B (I/NAV OS/CS/SoL)
|
||||||
|
;# "1G" GLONASS L1 C/A
|
||||||
|
;# "2S" GPS L2 L2C (M)
|
||||||
;# "5X" GALILEO E5a I+Q
|
;# "5X" GALILEO E5a I+Q
|
||||||
|
;# "L5" GPS L5
|
||||||
|
|
||||||
;# CHANNEL CONNECTION
|
;# CHANNEL CONNECTION
|
||||||
Channel0.RF_channel_ID=0
|
Channel0.RF_channel_ID=0
|
||||||
@ -231,19 +232,13 @@ Channel7.signal=1C
|
|||||||
|
|
||||||
|
|
||||||
;######### ACQUISITION GLOBAL CONFIG ############
|
;######### ACQUISITION GLOBAL CONFIG ############
|
||||||
|
Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition
|
||||||
;#dump: Enable or disable the acquisition internal data file logging [true] or [false]
|
;#item_type: Type and resolution for each of the signal samples.
|
||||||
Acquisition_1C.dump=false
|
|
||||||
;#filename: Log path and filename
|
|
||||||
Acquisition_1C.dump_filename=./acq_dump.dat
|
|
||||||
;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
|
|
||||||
Acquisition_1C.item_type=gr_complex
|
Acquisition_1C.item_type=gr_complex
|
||||||
;#if: Signal intermediate frequency in [Hz]
|
;#if: Signal intermediate frequency in [Hz]
|
||||||
Acquisition_1C.if=0
|
Acquisition_1C.if=0
|
||||||
;#sampled_ms: Signal block duration for the acquisition signal detection [ms]
|
;#sampled_ms: Signal block duration for the acquisition signal detection [ms]
|
||||||
Acquisition_1C.coherent_integration_time_ms=1
|
Acquisition_1C.coherent_integration_time_ms=1
|
||||||
;#implementation: Acquisition algorithm selection for this channel: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
|
|
||||||
Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition
|
|
||||||
;#threshold: Acquisition threshold. It will be ignored if pfa is defined.
|
;#threshold: Acquisition threshold. It will be ignored if pfa is defined.
|
||||||
Acquisition_1C.threshold=0.012
|
Acquisition_1C.threshold=0.012
|
||||||
;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
|
;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
|
||||||
@ -258,89 +253,66 @@ Acquisition_1C.doppler_step=250
|
|||||||
Acquisition_1C.bit_transition_flag=false
|
Acquisition_1C.bit_transition_flag=false
|
||||||
;#max_dwells: Maximum number of consecutive dwells to be processed. It will be ignored if bit_transition_flag=true
|
;#max_dwells: Maximum number of consecutive dwells to be processed. It will be ignored if bit_transition_flag=true
|
||||||
Acquisition_1C.max_dwells=1
|
Acquisition_1C.max_dwells=1
|
||||||
|
;#dump: Enable or disable the acquisition internal data file logging [true] or [false]
|
||||||
|
Acquisition_1C.dump=false
|
||||||
;######### ACQUISITION CHANNELS CONFIG ######
|
;#filename: Log path and filename
|
||||||
;#The following options are specific to each channel and overwrite the generic options
|
Acquisition_1C.dump_filename=./acq_dump.dat
|
||||||
|
|
||||||
|
|
||||||
;######### TRACKING GLOBAL CONFIG ############
|
;######### TRACKING GLOBAL CONFIG ############
|
||||||
|
|
||||||
;#implementation: Selected tracking algorithm: [GPS_L1_CA_DLL_PLL_Tracking] or [GPS_L1_CA_DLL_PLL_C_Aid_Tracking]
|
|
||||||
Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking
|
Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking
|
||||||
;#item_type: Type and resolution for each of the signal samples.
|
;#item_type: Type and resolution for each of the signal samples.
|
||||||
Tracking_1C.item_type=gr_complex
|
Tracking_1C.item_type=gr_complex
|
||||||
|
|
||||||
;#sampling_frequency: Signal Intermediate Frequency in [Hz]
|
;#sampling_frequency: Signal Intermediate Frequency in [Hz]
|
||||||
Tracking_1C.if=0
|
Tracking_1C.if=0
|
||||||
|
;#pll_bw_hz: PLL loop filter bandwidth [Hz]
|
||||||
|
Tracking_1C.pll_bw_hz=40.0;
|
||||||
|
;#dll_bw_hz: DLL loop filter bandwidth [Hz]
|
||||||
|
Tracking_1C.dll_bw_hz=3.0;
|
||||||
|
;#order: PLL/DLL loop filter order [2] or [3]
|
||||||
|
Tracking_1C.order=3;
|
||||||
|
;#early_late_space_chips: correlator early-late space [chips]. Use [0.5]
|
||||||
|
Tracking_1C.early_late_space_chips=0.5;
|
||||||
;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false]
|
;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false]
|
||||||
Tracking_1C.dump=false
|
Tracking_1C.dump=false
|
||||||
|
|
||||||
;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number.
|
;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number.
|
||||||
Tracking_1C.dump_filename=./tracking_ch_
|
Tracking_1C.dump_filename=./tracking_ch_
|
||||||
|
|
||||||
;#pll_bw_hz: PLL loop filter bandwidth [Hz]
|
|
||||||
Tracking_1C.pll_bw_hz=40.0;
|
|
||||||
|
|
||||||
;#dll_bw_hz: DLL loop filter bandwidth [Hz]
|
|
||||||
Tracking_1C.dll_bw_hz=3.0;
|
|
||||||
|
|
||||||
;#order: PLL/DLL loop filter order [2] or [3]
|
|
||||||
Tracking_1C.order=3;
|
|
||||||
|
|
||||||
;#early_late_space_chips: correlator early-late space [chips]. Use [0.5]
|
|
||||||
Tracking_1C.early_late_space_chips=0.5;
|
|
||||||
|
|
||||||
;######### TELEMETRY DECODER GPS CONFIG ############
|
;######### TELEMETRY DECODER GPS CONFIG ############
|
||||||
;#implementation: Use [GPS_L1_CA_Telemetry_Decoder] for GPS L1 C/A
|
;#implementation: Use [GPS_L1_CA_Telemetry_Decoder] for GPS L1 C/A
|
||||||
TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder
|
TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder
|
||||||
TelemetryDecoder_1C.dump=false
|
TelemetryDecoder_1C.dump=false
|
||||||
;#decimation factor
|
|
||||||
TelemetryDecoder_1C.decimation_factor=1;
|
|
||||||
|
|
||||||
;######### OBSERVABLES CONFIG ############
|
;######### OBSERVABLES CONFIG ############
|
||||||
;#implementation:
|
|
||||||
Observables.implementation=Hybrid_Observables
|
Observables.implementation=Hybrid_Observables
|
||||||
|
|
||||||
;#dump: Enable or disable the Observables internal binary data file logging [true] or [false]
|
;#dump: Enable or disable the Observables internal binary data file logging [true] or [false]
|
||||||
Observables.dump=false
|
Observables.dump=false
|
||||||
|
|
||||||
;#dump_filename: Log path and filename.
|
;#dump_filename: Log path and filename.
|
||||||
Observables.dump_filename=./observables.dat
|
Observables.dump_filename=./observables.dat
|
||||||
|
|
||||||
|
|
||||||
;######### PVT CONFIG ############
|
;######### PVT CONFIG ############
|
||||||
;#implementation: Position Velocity and Time (PVT) implementation:
|
|
||||||
PVT.implementation=RTKLIB_PVT
|
PVT.implementation=RTKLIB_PVT
|
||||||
|
|
||||||
PVT.positioning_mode=PPP_Static ; options: Single, Static, Kinematic, PPP_Static, PPP_Kinematic
|
PVT.positioning_mode=PPP_Static ; options: Single, Static, Kinematic, PPP_Static, PPP_Kinematic
|
||||||
PVT.iono_model=Broadcast ; options: OFF, Broadcast, SBAS, Iono-Free-LC, Estimate_STEC, IONEX
|
PVT.iono_model=Broadcast ; options: OFF, Broadcast, SBAS, Iono-Free-LC, Estimate_STEC, IONEX
|
||||||
PVT.trop_model=Saastamoinen ; options: OFF, Saastamoinen, SBAS, Estimate_ZTD, Estimate_ZTD_Grad
|
PVT.trop_model=Saastamoinen ; options: OFF, Saastamoinen, SBAS, Estimate_ZTD, Estimate_ZTD_Grad
|
||||||
|
|
||||||
;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms]
|
;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms]
|
||||||
PVT.output_rate_ms=100
|
PVT.output_rate_ms=100
|
||||||
|
|
||||||
;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms.
|
;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms.
|
||||||
PVT.display_rate_ms=500
|
PVT.display_rate_ms=500
|
||||||
|
|
||||||
;# KML, GeoJSON, NMEA and RTCM output configuration
|
;# KML, GeoJSON, NMEA and RTCM output configuration
|
||||||
|
|
||||||
;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump.
|
|
||||||
PVT.dump_filename=./PVT
|
|
||||||
|
|
||||||
;#nmea_dump_filename: NMEA log path and filename
|
;#nmea_dump_filename: NMEA log path and filename
|
||||||
PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea;
|
PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea;
|
||||||
|
|
||||||
;#flag_nmea_tty_port: Enable or disable the NMEA log to a serial TTY port (Can be used with real hardware or virtual one)
|
;#flag_nmea_tty_port: Enable or disable the NMEA log to a serial TTY port (Can be used with real hardware or virtual one)
|
||||||
PVT.flag_nmea_tty_port=false;
|
PVT.flag_nmea_tty_port=false;
|
||||||
|
|
||||||
;#nmea_dump_devname: serial device descriptor for NMEA logging
|
;#nmea_dump_devname: serial device descriptor for NMEA logging
|
||||||
PVT.nmea_dump_devname=/dev/pts/4
|
PVT.nmea_dump_devname=/dev/pts/4
|
||||||
|
|
||||||
PVT.flag_rtcm_server=true
|
PVT.flag_rtcm_server=true
|
||||||
PVT.flag_rtcm_tty_port=false
|
PVT.flag_rtcm_tty_port=false
|
||||||
PVT.rtcm_dump_devname=/dev/pts/1
|
PVT.rtcm_dump_devname=/dev/pts/1
|
||||||
|
|
||||||
;#dump: Enable or disable the PVT internal binary data file logging [true] or [false]
|
;#dump: Enable or disable the PVT internal binary data file logging [true] or [false]
|
||||||
PVT.dump=false
|
PVT.dump=false
|
||||||
|
;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump.
|
||||||
|
PVT.dump_filename=./PVT
|
@ -25,26 +25,20 @@ GNSS-SDR.SUPL_LAC=0x59e2
|
|||||||
GNSS-SDR.SUPL_CI=0x31b0
|
GNSS-SDR.SUPL_CI=0x31b0
|
||||||
|
|
||||||
;######### SIGNAL_SOURCE CONFIG ############
|
;######### SIGNAL_SOURCE CONFIG ############
|
||||||
;#implementation: Use [File_Signal_Source] or [UHD_Signal_Source] or [GN3S_Signal_Source] (experimental)
|
;#implementation
|
||||||
SignalSource.implementation=Flexiband_Signal_Source
|
SignalSource.implementation=Flexiband_Signal_Source
|
||||||
|
|
||||||
;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
|
;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
|
||||||
SignalSource.item_type=gr_complex
|
SignalSource.item_type=gr_complex
|
||||||
|
|
||||||
;# FPGA firmware file
|
;# FPGA firmware file
|
||||||
SignalSource.firmware_file=flexiband_III-1b.bit
|
SignalSource.firmware_file=flexiband_III-1b.bit
|
||||||
|
|
||||||
;#RF_channels: Number of RF channels present in the frontend device, must agree the FPGA firmware file
|
;#RF_channels: Number of RF channels present in the frontend device, must agree the FPGA firmware file
|
||||||
SignalSource.RF_channels=1
|
SignalSource.RF_channels=1
|
||||||
|
|
||||||
;#frontend channels gain. Not usable yet!
|
;#frontend channels gain. Not usable yet!
|
||||||
SignalSource.gain1=0
|
SignalSource.gain1=0
|
||||||
SignalSource.gain2=0
|
SignalSource.gain2=0
|
||||||
SignalSource.gain3=0
|
SignalSource.gain3=0
|
||||||
|
|
||||||
;#frontend channels AGC
|
;#frontend channels AGC
|
||||||
SignalSource.AGC=true
|
SignalSource.AGC=true
|
||||||
|
|
||||||
;# USB 3.0 packet buffer size (number of SuperSpeed packets)
|
;# USB 3.0 packet buffer size (number of SuperSpeed packets)
|
||||||
SignalSource.usb_packet_buffer=128
|
SignalSource.usb_packet_buffer=128
|
||||||
|
|
||||||
@ -74,13 +68,13 @@ InputFilter0.dump_filename=../data/input_filter.dat
|
|||||||
|
|
||||||
;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation.
|
;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation.
|
||||||
;#These options are based on parameters of gnuradio's function: gr_remez.
|
;#These options are based on parameters of gnuradio's function: gr_remez.
|
||||||
;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges,
|
;#This function calculates the optimal (in the Chebyshev/minimax sense) FIR filter impulse response given a set of band edges,
|
||||||
;#the desired reponse on those bands, and the weight given to the error in those bands.
|
;#the desired response on those bands, and the weight given to the error in those bands.
|
||||||
|
|
||||||
;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version.
|
;#input_item_type: Type and resolution for input signal samples.
|
||||||
InputFilter0.input_item_type=gr_complex
|
InputFilter0.input_item_type=gr_complex
|
||||||
|
|
||||||
;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version.
|
;#outut_item_type: Type and resolution for output filtered signal samples.
|
||||||
InputFilter0.output_item_type=gr_complex
|
InputFilter0.output_item_type=gr_complex
|
||||||
|
|
||||||
;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version.
|
;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version.
|
||||||
@ -153,10 +147,10 @@ InputFilter1.dump=false
|
|||||||
;#dump_filename: Log path and filename.
|
;#dump_filename: Log path and filename.
|
||||||
InputFilter1.dump_filename=../data/input_filter.dat
|
InputFilter1.dump_filename=../data/input_filter.dat
|
||||||
|
|
||||||
;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version.
|
;#input_item_type: Type and resolution for input signal samples.
|
||||||
InputFilter1.input_item_type=gr_complex
|
InputFilter1.input_item_type=gr_complex
|
||||||
|
|
||||||
;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version.
|
;#outut_item_type: Type and resolution for output filtered signal samples.
|
||||||
InputFilter1.output_item_type=gr_complex
|
InputFilter1.output_item_type=gr_complex
|
||||||
|
|
||||||
;######### RESAMPLER CONFIG 1 ############
|
;######### RESAMPLER CONFIG 1 ############
|
||||||
@ -180,10 +174,10 @@ InputFilter2.dump=false
|
|||||||
;#dump_filename: Log path and filename.
|
;#dump_filename: Log path and filename.
|
||||||
InputFilter2.dump_filename=../data/input_filter.dat
|
InputFilter2.dump_filename=../data/input_filter.dat
|
||||||
|
|
||||||
;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version.
|
;#input_item_type: Type and resolution for input signal samples.
|
||||||
InputFilter2.input_item_type=gr_complex
|
InputFilter2.input_item_type=gr_complex
|
||||||
|
|
||||||
;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version.
|
;#outut_item_type: Type and resolution for output filtered signal samples.
|
||||||
InputFilter2.output_item_type=gr_complex
|
InputFilter2.output_item_type=gr_complex
|
||||||
|
|
||||||
;######### RESAMPLER CONFIG 2 ############
|
;######### RESAMPLER CONFIG 2 ############
|
||||||
@ -196,12 +190,13 @@ Channels_1C.count=8
|
|||||||
;#in_acquisition: Number of channels simultaneously acquiring for the whole receiver
|
;#in_acquisition: Number of channels simultaneously acquiring for the whole receiver
|
||||||
Channels.in_acquisition=1
|
Channels.in_acquisition=1
|
||||||
|
|
||||||
|
|
||||||
;#signal:
|
;#signal:
|
||||||
;# "1C" GPS L1 C/A
|
;# "1C" GPS L1 C/A
|
||||||
;# "2S" GPS L2 L2C (M)
|
|
||||||
;# "1B" GALILEO E1 B (I/NAV OS/CS/SoL)
|
;# "1B" GALILEO E1 B (I/NAV OS/CS/SoL)
|
||||||
|
;# "1G" GLONASS L1 C/A
|
||||||
|
;# "2S" GPS L2 L2C (M)
|
||||||
;# "5X" GALILEO E5a I+Q
|
;# "5X" GALILEO E5a I+Q
|
||||||
|
;# "L5" GPS L5
|
||||||
|
|
||||||
;# CHANNEL CONNECTION
|
;# CHANNEL CONNECTION
|
||||||
Channel0.RF_channel_ID=0
|
Channel0.RF_channel_ID=0
|
||||||
@ -224,24 +219,15 @@ Channel5.signal=1C
|
|||||||
Channel6.signal=1C
|
Channel6.signal=1C
|
||||||
Channel7.signal=1C
|
Channel7.signal=1C
|
||||||
|
|
||||||
;######### SPECIFIC CHANNELS CONFIG ######
|
|
||||||
;#The following options are specific to each channel and overwrite the generic options
|
|
||||||
|
|
||||||
|
|
||||||
;######### ACQUISITION GLOBAL CONFIG ############
|
;######### ACQUISITION GLOBAL CONFIG ############
|
||||||
|
Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition
|
||||||
;#dump: Enable or disable the acquisition internal data file logging [true] or [false]
|
;#item_type: Type and resolution for each of the signal samples.
|
||||||
Acquisition_1C.dump=false
|
|
||||||
;#filename: Log path and filename
|
|
||||||
Acquisition_1C.dump_filename=./acq_dump.dat
|
|
||||||
;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
|
|
||||||
Acquisition_1C.item_type=gr_complex
|
Acquisition_1C.item_type=gr_complex
|
||||||
;#if: Signal intermediate frequency in [Hz]
|
;#if: Signal intermediate frequency in [Hz]
|
||||||
Acquisition_1C.if=0
|
Acquisition_1C.if=0
|
||||||
;#sampled_ms: Signal block duration for the acquisition signal detection [ms]
|
;#sampled_ms: Signal block duration for the acquisition signal detection [ms]
|
||||||
Acquisition_1C.coherent_integration_time_ms=1
|
Acquisition_1C.coherent_integration_time_ms=1
|
||||||
;#implementation: Acquisition algorithm selection for this channel: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
|
|
||||||
Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition
|
|
||||||
;#threshold: Acquisition threshold. It will be ignored if pfa is defined.
|
;#threshold: Acquisition threshold. It will be ignored if pfa is defined.
|
||||||
Acquisition_1C.threshold=0.012
|
Acquisition_1C.threshold=0.012
|
||||||
;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
|
;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
|
||||||
@ -256,87 +242,66 @@ Acquisition_1C.doppler_step=250
|
|||||||
Acquisition_1C.bit_transition_flag=false
|
Acquisition_1C.bit_transition_flag=false
|
||||||
;#max_dwells: Maximum number of consecutive dwells to be processed. It will be ignored if bit_transition_flag=true
|
;#max_dwells: Maximum number of consecutive dwells to be processed. It will be ignored if bit_transition_flag=true
|
||||||
Acquisition_1C.max_dwells=1
|
Acquisition_1C.max_dwells=1
|
||||||
|
;#dump: Enable or disable the acquisition internal data file logging [true] or [false]
|
||||||
|
Acquisition_1C.dump=false
|
||||||
;######### ACQUISITION CHANNELS CONFIG ######
|
;#filename: Log path and filename
|
||||||
;#The following options are specific to each channel and overwrite the generic options
|
Acquisition_1C.dump_filename=./acq_dump.dat
|
||||||
|
|
||||||
|
|
||||||
;######### TRACKING GLOBAL CONFIG ############
|
;######### TRACKING GLOBAL CONFIG ############
|
||||||
|
|
||||||
;#implementation: Selected tracking algorithm: [GPS_L1_CA_DLL_PLL_Tracking] or [GPS_L1_CA_DLL_PLL_C_Aid_Tracking]
|
|
||||||
Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking
|
Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking
|
||||||
;#item_type: Type and resolution for each of the signal samples.
|
;#item_type: Type and resolution for each of the signal samples.
|
||||||
Tracking_1C.item_type=gr_complex
|
Tracking_1C.item_type=gr_complex
|
||||||
|
|
||||||
;#sampling_frequency: Signal Intermediate Frequency in [Hz]
|
;#sampling_frequency: Signal Intermediate Frequency in [Hz]
|
||||||
Tracking_1C.if=0
|
Tracking_1C.if=0
|
||||||
|
;#pll_bw_hz: PLL loop filter bandwidth [Hz]
|
||||||
|
Tracking_1C.pll_bw_hz=40.0;
|
||||||
|
;#dll_bw_hz: DLL loop filter bandwidth [Hz]
|
||||||
|
Tracking_1C.dll_bw_hz=3.0;
|
||||||
|
;#order: PLL/DLL loop filter order [2] or [3]
|
||||||
|
Tracking_1C.order=3;
|
||||||
|
;#early_late_space_chips: correlator early-late space [chips]. Use [0.5]
|
||||||
|
Tracking_1C.early_late_space_chips=0.5;
|
||||||
;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false]
|
;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false]
|
||||||
Tracking_1C.dump=false
|
Tracking_1C.dump=false
|
||||||
|
|
||||||
;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number.
|
;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number.
|
||||||
Tracking_1C.dump_filename=./tracking_ch_
|
Tracking_1C.dump_filename=./tracking_ch_
|
||||||
|
|
||||||
;#pll_bw_hz: PLL loop filter bandwidth [Hz]
|
|
||||||
Tracking_1C.pll_bw_hz=40.0;
|
|
||||||
|
|
||||||
;#dll_bw_hz: DLL loop filter bandwidth [Hz]
|
|
||||||
Tracking_1C.dll_bw_hz=3.0;
|
|
||||||
|
|
||||||
;#order: PLL/DLL loop filter order [2] or [3]
|
|
||||||
Tracking_1C.order=3;
|
|
||||||
|
|
||||||
;#early_late_space_chips: correlator early-late space [chips]. Use [0.5]
|
|
||||||
Tracking_1C.early_late_space_chips=0.5;
|
|
||||||
|
|
||||||
;######### TELEMETRY DECODER GPS CONFIG ############
|
;######### TELEMETRY DECODER GPS CONFIG ############
|
||||||
;#implementation: Use [GPS_L1_CA_Telemetry_Decoder] for GPS L1 C/A
|
;#implementation: Use [GPS_L1_CA_Telemetry_Decoder] for GPS L1 C/A
|
||||||
TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder
|
TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder
|
||||||
TelemetryDecoder_1C.dump=false
|
TelemetryDecoder_1C.dump=false
|
||||||
|
|
||||||
;######### OBSERVABLES CONFIG ############
|
|
||||||
;#implementation:
|
|
||||||
Observables.implementation=Hybrid_Observables
|
|
||||||
|
|
||||||
|
;######### OBSERVABLES CONFIG ############
|
||||||
|
Observables.implementation=Hybrid_Observables
|
||||||
;#dump: Enable or disable the Observables internal binary data file logging [true] or [false]
|
;#dump: Enable or disable the Observables internal binary data file logging [true] or [false]
|
||||||
Observables.dump=false
|
Observables.dump=false
|
||||||
|
|
||||||
;#dump_filename: Log path and filename.
|
;#dump_filename: Log path and filename.
|
||||||
Observables.dump_filename=./observables.dat
|
Observables.dump_filename=./observables.dat
|
||||||
|
|
||||||
|
|
||||||
;######### PVT CONFIG ############
|
;######### PVT CONFIG ############
|
||||||
;#implementation: Position Velocity and Time (PVT) implementation:
|
|
||||||
PVT.implementation=RTKLIB_PVT
|
PVT.implementation=RTKLIB_PVT
|
||||||
|
|
||||||
PVT.positioning_mode=PPP_Static ; options: Single, Static, Kinematic, PPP_Static, PPP_Kinematic
|
PVT.positioning_mode=PPP_Static ; options: Single, Static, Kinematic, PPP_Static, PPP_Kinematic
|
||||||
PVT.iono_model=Broadcast ; options: OFF, Broadcast, SBAS, Iono-Free-LC, Estimate_STEC, IONEX
|
PVT.iono_model=Broadcast ; options: OFF, Broadcast, SBAS, Iono-Free-LC, Estimate_STEC, IONEX
|
||||||
PVT.trop_model=Saastamoinen ; options: OFF, Saastamoinen, SBAS, Estimate_ZTD, Estimate_ZTD_Grad
|
PVT.trop_model=Saastamoinen ; options: OFF, Saastamoinen, SBAS, Estimate_ZTD, Estimate_ZTD_Grad
|
||||||
|
|
||||||
;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms]
|
;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms]
|
||||||
PVT.output_rate_ms=100
|
PVT.output_rate_ms=100
|
||||||
|
|
||||||
;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms.
|
;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms.
|
||||||
PVT.display_rate_ms=500
|
PVT.display_rate_ms=500
|
||||||
|
|
||||||
;# KML, GeoJSON, NMEA and RTCM output configuration
|
;# KML, GeoJSON, NMEA and RTCM output configuration
|
||||||
|
|
||||||
;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump.
|
|
||||||
PVT.dump_filename=./PVT
|
|
||||||
|
|
||||||
;#nmea_dump_filename: NMEA log path and filename
|
;#nmea_dump_filename: NMEA log path and filename
|
||||||
PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea;
|
PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea;
|
||||||
|
|
||||||
;#flag_nmea_tty_port: Enable or disable the NMEA log to a serial TTY port (Can be used with real hardware or virtual one)
|
;#flag_nmea_tty_port: Enable or disable the NMEA log to a serial TTY port (Can be used with real hardware or virtual one)
|
||||||
PVT.flag_nmea_tty_port=false;
|
PVT.flag_nmea_tty_port=false;
|
||||||
|
|
||||||
;#nmea_dump_devname: serial device descriptor for NMEA logging
|
;#nmea_dump_devname: serial device descriptor for NMEA logging
|
||||||
PVT.nmea_dump_devname=/dev/pts/4
|
PVT.nmea_dump_devname=/dev/pts/4
|
||||||
|
|
||||||
PVT.flag_rtcm_server=true
|
PVT.flag_rtcm_server=true
|
||||||
PVT.flag_rtcm_tty_port=false
|
PVT.flag_rtcm_tty_port=false
|
||||||
PVT.rtcm_dump_devname=/dev/pts/1
|
PVT.rtcm_dump_devname=/dev/pts/1
|
||||||
|
|
||||||
;#dump: Enable or disable the PVT internal binary data file logging [true] or [false]
|
;#dump: Enable or disable the PVT internal binary data file logging [true] or [false]
|
||||||
PVT.dump=false
|
PVT.dump=false
|
||||||
|
;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump.
|
||||||
|
PVT.dump_filename=./PVT
|
@ -25,26 +25,20 @@ GNSS-SDR.SUPL_LAC=0x59e2
|
|||||||
GNSS-SDR.SUPL_CI=0x31b0
|
GNSS-SDR.SUPL_CI=0x31b0
|
||||||
|
|
||||||
;######### SIGNAL_SOURCE CONFIG ############
|
;######### SIGNAL_SOURCE CONFIG ############
|
||||||
;#implementation: Use [File_Signal_Source] or [UHD_Signal_Source] or [GN3S_Signal_Source] (experimental)
|
;#implementation
|
||||||
SignalSource.implementation=Flexiband_Signal_Source
|
SignalSource.implementation=Flexiband_Signal_Source
|
||||||
|
|
||||||
;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
|
;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
|
||||||
SignalSource.item_type=gr_complex
|
SignalSource.item_type=gr_complex
|
||||||
|
|
||||||
;# FPGA firmware file
|
;# FPGA firmware file
|
||||||
SignalSource.firmware_file=flexiband_II-3b.bit
|
SignalSource.firmware_file=flexiband_II-3b.bit
|
||||||
|
|
||||||
;#RF_channels: Number of RF channels present in the frontend device, must agree the FPGA firmware file
|
;#RF_channels: Number of RF channels present in the frontend device, must agree the FPGA firmware file
|
||||||
SignalSource.RF_channels=1
|
SignalSource.RF_channels=1
|
||||||
|
|
||||||
;#frontend channels gain. Not usable yet!
|
;#frontend channels gain. Not usable yet!
|
||||||
SignalSource.gain1=0
|
SignalSource.gain1=0
|
||||||
SignalSource.gain2=0
|
SignalSource.gain2=0
|
||||||
SignalSource.gain3=0
|
SignalSource.gain3=0
|
||||||
|
|
||||||
;#frontend channels AGC
|
;#frontend channels AGC
|
||||||
SignalSource.AGC=true
|
SignalSource.AGC=true
|
||||||
|
|
||||||
;# USB 3.0 packet buffer size (number of SuperSpeed packets)
|
;# USB 3.0 packet buffer size (number of SuperSpeed packets)
|
||||||
SignalSource.usb_packet_buffer=128
|
SignalSource.usb_packet_buffer=128
|
||||||
|
|
||||||
@ -74,16 +68,16 @@ InputFilter0.dump_filename=../data/input_filter.dat
|
|||||||
|
|
||||||
;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation.
|
;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation.
|
||||||
;#These options are based on parameters of gnuradio's function: gr_remez.
|
;#These options are based on parameters of gnuradio's function: gr_remez.
|
||||||
;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges,
|
;#This function calculates the optimal (in the Chebyshev/minimax sense) FIR filter impulse response given a set of band edges,
|
||||||
;#the desired reponse on those bands, and the weight given to the error in those bands.
|
;#the desired response on those bands, and the weight given to the error in those bands.
|
||||||
|
|
||||||
;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version.
|
;#input_item_type: Type and resolution for input signal samples.
|
||||||
InputFilter0.input_item_type=gr_complex
|
InputFilter0.input_item_type=gr_complex
|
||||||
|
|
||||||
;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version.
|
;#outut_item_type: Type and resolution for output filtered signal samples.
|
||||||
InputFilter0.output_item_type=gr_complex
|
InputFilter0.output_item_type=gr_complex
|
||||||
|
|
||||||
;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version.
|
;#taps_item_type: Type and resolution for the taps of the filter.
|
||||||
InputFilter0.taps_item_type=float
|
InputFilter0.taps_item_type=float
|
||||||
|
|
||||||
;#number_of_taps: Number of taps in the filter. Increasing this parameter increases the processing time
|
;#number_of_taps: Number of taps in the filter. Increasing this parameter increases the processing time
|
||||||
@ -123,8 +117,6 @@ InputFilter0.grid_density=16
|
|||||||
|
|
||||||
;#The following options are used only in Freq_Xlating_Fir_Filter implementation.
|
;#The following options are used only in Freq_Xlating_Fir_Filter implementation.
|
||||||
;#InputFilter0.IF is the intermediate frequency (in Hz) shifted down to zero Hz
|
;#InputFilter0.IF is the intermediate frequency (in Hz) shifted down to zero Hz
|
||||||
;FOR USE GNSS-SDR WITH RTLSDR DONGLES USER MUST SET THE CALIBRATED SAMPLE RATE HERE
|
|
||||||
; i.e. using front-end-cal as reported here:http://www.cttc.es/publication/turning-a-television-into-a-gnss-receiver/
|
|
||||||
InputFilter0.sampling_frequency=40000000
|
InputFilter0.sampling_frequency=40000000
|
||||||
;# IF deviation due to front-end LO inaccuracies [HZ]
|
;# IF deviation due to front-end LO inaccuracies [HZ]
|
||||||
InputFilter0.IF=-205000
|
InputFilter0.IF=-205000
|
||||||
@ -153,10 +145,10 @@ InputFilter1.dump=false
|
|||||||
;#dump_filename: Log path and filename.
|
;#dump_filename: Log path and filename.
|
||||||
InputFilter1.dump_filename=../data/input_filter.dat
|
InputFilter1.dump_filename=../data/input_filter.dat
|
||||||
|
|
||||||
;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version.
|
;#input_item_type: Type and resolution for input signal samples.
|
||||||
InputFilter1.input_item_type=gr_complex
|
InputFilter1.input_item_type=gr_complex
|
||||||
|
|
||||||
;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version.
|
;#outut_item_type: Type and resolution for output filtered signal samples.
|
||||||
InputFilter1.output_item_type=gr_complex
|
InputFilter1.output_item_type=gr_complex
|
||||||
|
|
||||||
;######### RESAMPLER CONFIG 1 ############
|
;######### RESAMPLER CONFIG 1 ############
|
||||||
@ -180,10 +172,10 @@ InputFilter2.dump=false
|
|||||||
;#dump_filename: Log path and filename.
|
;#dump_filename: Log path and filename.
|
||||||
InputFilter2.dump_filename=../data/input_filter.dat
|
InputFilter2.dump_filename=../data/input_filter.dat
|
||||||
|
|
||||||
;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version.
|
;#input_item_type: Type and resolution for input signal samples.
|
||||||
InputFilter2.input_item_type=gr_complex
|
InputFilter2.input_item_type=gr_complex
|
||||||
|
|
||||||
;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version.
|
;#outut_item_type: Type and resolution for output filtered signal samples.
|
||||||
InputFilter2.output_item_type=gr_complex
|
InputFilter2.output_item_type=gr_complex
|
||||||
|
|
||||||
;######### RESAMPLER CONFIG 2 ############
|
;######### RESAMPLER CONFIG 2 ############
|
||||||
@ -197,11 +189,13 @@ Channels_1C.count=8
|
|||||||
;#in_acquisition: Number of channels simultaneously acquiring for the whole receiver
|
;#in_acquisition: Number of channels simultaneously acquiring for the whole receiver
|
||||||
Channels.in_acquisition=1
|
Channels.in_acquisition=1
|
||||||
|
|
||||||
;# signal:
|
;#signal:
|
||||||
;# "1C" GPS L1 C/A
|
;# "1C" GPS L1 C/A
|
||||||
;# "2S" GPS L2 L2C (M)
|
|
||||||
;# "1B" GALILEO E1 B (I/NAV OS/CS/SoL)
|
;# "1B" GALILEO E1 B (I/NAV OS/CS/SoL)
|
||||||
|
;# "1G" GLONASS L1 C/A
|
||||||
|
;# "2S" GPS L2 L2C (M)
|
||||||
;# "5X" GALILEO E5a I+Q
|
;# "5X" GALILEO E5a I+Q
|
||||||
|
;# "L5" GPS L5
|
||||||
|
|
||||||
;# CHANNEL CONNECTION
|
;# CHANNEL CONNECTION
|
||||||
Channel0.RF_channel_ID=0
|
Channel0.RF_channel_ID=0
|
||||||
@ -225,24 +219,15 @@ Channel6.signal=1C
|
|||||||
Channel7.signal=1C
|
Channel7.signal=1C
|
||||||
|
|
||||||
|
|
||||||
;######### SPECIFIC CHANNELS CONFIG ######
|
|
||||||
;#The following options are specific to each channel and overwrite the generic options
|
|
||||||
|
|
||||||
|
|
||||||
;######### ACQUISITION GLOBAL CONFIG ############
|
;######### ACQUISITION GLOBAL CONFIG ############
|
||||||
|
Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition
|
||||||
;#dump: Enable or disable the acquisition internal data file logging [true] or [false]
|
;#item_type: Type and resolution for each of the signal samples.
|
||||||
Acquisition_1C.dump=false
|
|
||||||
;#filename: Log path and filename
|
|
||||||
Acquisition_1C.dump_filename=./acq_dump.dat
|
|
||||||
;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
|
|
||||||
Acquisition_1C.item_type=gr_complex
|
Acquisition_1C.item_type=gr_complex
|
||||||
;#if: Signal intermediate frequency in [Hz]
|
;#if: Signal intermediate frequency in [Hz]
|
||||||
Acquisition_1C.if=0
|
Acquisition_1C.if=0
|
||||||
;#sampled_ms: Signal block duration for the acquisition signal detection [ms]
|
;#sampled_ms: Signal block duration for the acquisition signal detection [ms]
|
||||||
Acquisition_1C.coherent_integration_time_ms=1
|
Acquisition_1C.coherent_integration_time_ms=1
|
||||||
;#implementation: Acquisition algorithm selection for this channel: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
|
|
||||||
Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition
|
|
||||||
;#threshold: Acquisition threshold. It will be ignored if pfa is defined.
|
;#threshold: Acquisition threshold. It will be ignored if pfa is defined.
|
||||||
Acquisition_1C.threshold=0.012
|
Acquisition_1C.threshold=0.012
|
||||||
;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
|
;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
|
||||||
@ -257,54 +242,43 @@ Acquisition_1C.doppler_step=250
|
|||||||
Acquisition_1C.bit_transition_flag=false
|
Acquisition_1C.bit_transition_flag=false
|
||||||
;#max_dwells: Maximum number of consecutive dwells to be processed. It will be ignored if bit_transition_flag=true
|
;#max_dwells: Maximum number of consecutive dwells to be processed. It will be ignored if bit_transition_flag=true
|
||||||
Acquisition_1C.max_dwells=1
|
Acquisition_1C.max_dwells=1
|
||||||
|
;#dump: Enable or disable the acquisition internal data file logging [true] or [false]
|
||||||
|
Acquisition_1C.dump=false
|
||||||
;######### ACQUISITION CHANNELS CONFIG ######
|
;#filename: Log path and filename
|
||||||
;#The following options are specific to each channel and overwrite the generic options
|
Acquisition_1C.dump_filename=./acq_dump.dat
|
||||||
|
|
||||||
|
|
||||||
;######### TRACKING GLOBAL CONFIG ############
|
;######### TRACKING GLOBAL CONFIG ############
|
||||||
|
|
||||||
;#implementation: Selected tracking algorithm: [GPS_L1_CA_DLL_PLL_Tracking] or [GPS_L1_CA_DLL_PLL_C_Aid_Tracking]
|
|
||||||
Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking
|
Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking
|
||||||
;#item_type: Type and resolution for each of the signal samples.
|
;#item_type: Type and resolution for each of the signal samples.
|
||||||
Tracking_1C.item_type=gr_complex
|
Tracking_1C.item_type=gr_complex
|
||||||
|
|
||||||
;#sampling_frequency: Signal Intermediate Frequency in [Hz]
|
;#sampling_frequency: Signal Intermediate Frequency in [Hz]
|
||||||
Tracking_1C.if=0
|
Tracking_1C.if=0
|
||||||
|
;#pll_bw_hz: PLL loop filter bandwidth [Hz]
|
||||||
|
Tracking_1C.pll_bw_hz=40.0;
|
||||||
|
;#dll_bw_hz: DLL loop filter bandwidth [Hz]
|
||||||
|
Tracking_1C.dll_bw_hz=3.0;
|
||||||
|
;#order: PLL/DLL loop filter order [2] or [3]
|
||||||
|
Tracking_1C.order=3;
|
||||||
|
;#early_late_space_chips: correlator early-late space [chips]. Use [0.5]
|
||||||
|
Tracking_1C.early_late_space_chips=0.5;
|
||||||
;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false]
|
;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false]
|
||||||
Tracking_1C.dump=false
|
Tracking_1C.dump=false
|
||||||
|
|
||||||
;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number.
|
;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number.
|
||||||
Tracking_1C.dump_filename=./tracking_ch_
|
Tracking_1C.dump_filename=./tracking_ch_
|
||||||
|
|
||||||
;#pll_bw_hz: PLL loop filter bandwidth [Hz]
|
|
||||||
Tracking_1C.pll_bw_hz=40.0;
|
|
||||||
|
|
||||||
;#dll_bw_hz: DLL loop filter bandwidth [Hz]
|
|
||||||
Tracking_1C.dll_bw_hz=3.0;
|
|
||||||
|
|
||||||
;#order: PLL/DLL loop filter order [2] or [3]
|
|
||||||
Tracking_1C.order=3;
|
|
||||||
|
|
||||||
;#early_late_space_chips: correlator early-late space [chips]. Use [0.5]
|
|
||||||
Tracking_1C.early_late_space_chips=0.5;
|
|
||||||
|
|
||||||
;######### TELEMETRY DECODER GPS CONFIG ############
|
;######### TELEMETRY DECODER GPS CONFIG ############
|
||||||
;#implementation: Use [GPS_L1_CA_Telemetry_Decoder] for GPS L1 C/A
|
;#implementation: Use [GPS_L1_CA_Telemetry_Decoder] for GPS L1 C/A
|
||||||
TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder
|
TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder
|
||||||
TelemetryDecoder_1C.dump=false
|
TelemetryDecoder_1C.dump=false
|
||||||
;#decimation factor
|
|
||||||
TelemetryDecoder_1C.decimation_factor=1;
|
|
||||||
|
|
||||||
;######### OBSERVABLES CONFIG ############
|
;######### OBSERVABLES CONFIG ############
|
||||||
;#implementation:
|
;#implementation:
|
||||||
Observables.implementation=Hybrid_Observables
|
Observables.implementation=Hybrid_Observables
|
||||||
|
|
||||||
;#dump: Enable or disable the Observables internal binary data file logging [true] or [false]
|
;#dump: Enable or disable the Observables internal binary data file logging [true] or [false]
|
||||||
Observables.dump=false
|
Observables.dump=false
|
||||||
|
|
||||||
;#dump_filename: Log path and filename.
|
;#dump_filename: Log path and filename.
|
||||||
Observables.dump_filename=./observables.dat
|
Observables.dump_filename=./observables.dat
|
||||||
|
|
||||||
@ -312,34 +286,24 @@ Observables.dump_filename=./observables.dat
|
|||||||
;######### PVT CONFIG ############
|
;######### PVT CONFIG ############
|
||||||
;#implementation: Position Velocity and Time (PVT) implementation:
|
;#implementation: Position Velocity and Time (PVT) implementation:
|
||||||
PVT.implementation=RTKLIB_PVT
|
PVT.implementation=RTKLIB_PVT
|
||||||
|
|
||||||
PVT.positioning_mode=PPP_Static ; options: Single, Static, Kinematic, PPP_Static, PPP_Kinematic
|
PVT.positioning_mode=PPP_Static ; options: Single, Static, Kinematic, PPP_Static, PPP_Kinematic
|
||||||
PVT.iono_model=Broadcast ; options: OFF, Broadcast, SBAS, Iono-Free-LC, Estimate_STEC, IONEX
|
PVT.iono_model=Broadcast ; options: OFF, Broadcast, SBAS, Iono-Free-LC, Estimate_STEC, IONEX
|
||||||
PVT.trop_model=Saastamoinen ; options: OFF, Saastamoinen, SBAS, Estimate_ZTD, Estimate_ZTD_Grad
|
PVT.trop_model=Saastamoinen ; options: OFF, Saastamoinen, SBAS, Estimate_ZTD, Estimate_ZTD_Grad
|
||||||
|
|
||||||
;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms]
|
;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms]
|
||||||
PVT.output_rate_ms=100
|
PVT.output_rate_ms=100
|
||||||
|
|
||||||
;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms.
|
;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms.
|
||||||
PVT.display_rate_ms=500
|
PVT.display_rate_ms=500
|
||||||
|
|
||||||
;# KML, GeoJSON, NMEA and RTCM output configuration
|
;# KML, GeoJSON, NMEA and RTCM output configuration
|
||||||
|
|
||||||
;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump.
|
|
||||||
PVT.dump_filename=./PVT
|
|
||||||
|
|
||||||
;#nmea_dump_filename: NMEA log path and filename
|
;#nmea_dump_filename: NMEA log path and filename
|
||||||
PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea;
|
PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea;
|
||||||
|
|
||||||
;#flag_nmea_tty_port: Enable or disable the NMEA log to a serial TTY port (Can be used with real hardware or virtual one)
|
;#flag_nmea_tty_port: Enable or disable the NMEA log to a serial TTY port (Can be used with real hardware or virtual one)
|
||||||
PVT.flag_nmea_tty_port=false;
|
PVT.flag_nmea_tty_port=false;
|
||||||
|
|
||||||
;#nmea_dump_devname: serial device descriptor for NMEA logging
|
;#nmea_dump_devname: serial device descriptor for NMEA logging
|
||||||
PVT.nmea_dump_devname=/dev/pts/4
|
PVT.nmea_dump_devname=/dev/pts/4
|
||||||
|
|
||||||
PVT.flag_rtcm_server=true
|
PVT.flag_rtcm_server=true
|
||||||
PVT.flag_rtcm_tty_port=false
|
PVT.flag_rtcm_tty_port=false
|
||||||
PVT.rtcm_dump_devname=/dev/pts/1
|
PVT.rtcm_dump_devname=/dev/pts/1
|
||||||
|
|
||||||
;#dump: Enable or disable the PVT internal binary data file logging [true] or [false]
|
;#dump: Enable or disable the PVT internal binary data file logging [true] or [false]
|
||||||
PVT.dump=false
|
PVT.dump=false
|
||||||
|
;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump.
|
||||||
|
PVT.dump_filename=./PVT
|
@ -25,26 +25,20 @@ GNSS-SDR.SUPL_LAC=0x59e2
|
|||||||
GNSS-SDR.SUPL_CI=0x31b0
|
GNSS-SDR.SUPL_CI=0x31b0
|
||||||
|
|
||||||
;######### SIGNAL_SOURCE CONFIG ############
|
;######### SIGNAL_SOURCE CONFIG ############
|
||||||
;#implementation: Use [File_Signal_Source] or [UHD_Signal_Source] or [GN3S_Signal_Source] (experimental)
|
;#implementation
|
||||||
SignalSource.implementation=Flexiband_Signal_Source
|
SignalSource.implementation=Flexiband_Signal_Source
|
||||||
|
|
||||||
;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
|
;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
|
||||||
SignalSource.item_type=gr_complex
|
SignalSource.item_type=gr_complex
|
||||||
|
|
||||||
;# FPGA firmware file
|
;# FPGA firmware file
|
||||||
SignalSource.firmware_file=flexiband_I-1b.bit
|
SignalSource.firmware_file=flexiband_I-1b.bit
|
||||||
|
|
||||||
;#RF_channels: Number of RF channels present in the frontend device, must agree the FPGA firmware file
|
;#RF_channels: Number of RF channels present in the frontend device, must agree the FPGA firmware file
|
||||||
SignalSource.RF_channels=1
|
SignalSource.RF_channels=1
|
||||||
|
|
||||||
;#frontend channels gain. Not usable yet!
|
;#frontend channels gain. Not usable yet!
|
||||||
SignalSource.gain1=0
|
SignalSource.gain1=0
|
||||||
SignalSource.gain2=0
|
SignalSource.gain2=0
|
||||||
SignalSource.gain3=0
|
SignalSource.gain3=0
|
||||||
|
|
||||||
;#frontend channels AGC
|
;#frontend channels AGC
|
||||||
SignalSource.AGC=true
|
SignalSource.AGC=true
|
||||||
|
|
||||||
;# USB 3.0 packet buffer size (number of SuperSpeed packets)
|
;# USB 3.0 packet buffer size (number of SuperSpeed packets)
|
||||||
SignalSource.usb_packet_buffer=128
|
SignalSource.usb_packet_buffer=128
|
||||||
|
|
||||||
@ -74,13 +68,13 @@ InputFilter0.dump_filename=../data/input_filter.dat
|
|||||||
|
|
||||||
;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation.
|
;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation.
|
||||||
;#These options are based on parameters of gnuradio's function: gr_remez.
|
;#These options are based on parameters of gnuradio's function: gr_remez.
|
||||||
;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges,
|
;#This function calculates the optimal (in the Chebyshev/minimax sense) FIR filter impulse response given a set of band edges,
|
||||||
;#the desired reponse on those bands, and the weight given to the error in those bands.
|
;#the desired response on those bands, and the weight given to the error in those bands.
|
||||||
|
|
||||||
;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version.
|
;#input_item_type: Type and resolution for input signal samples.
|
||||||
InputFilter0.input_item_type=gr_complex
|
InputFilter0.input_item_type=gr_complex
|
||||||
|
|
||||||
;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version.
|
;#outut_item_type: Type and resolution for output filtered signal samples.
|
||||||
InputFilter0.output_item_type=gr_complex
|
InputFilter0.output_item_type=gr_complex
|
||||||
|
|
||||||
;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version.
|
;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version.
|
||||||
@ -153,10 +147,10 @@ InputFilter1.dump=false
|
|||||||
;#dump_filename: Log path and filename.
|
;#dump_filename: Log path and filename.
|
||||||
InputFilter1.dump_filename=../data/input_filter.dat
|
InputFilter1.dump_filename=../data/input_filter.dat
|
||||||
|
|
||||||
;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version.
|
;#input_item_type: Type and resolution for input signal samples.
|
||||||
InputFilter1.input_item_type=gr_complex
|
InputFilter1.input_item_type=gr_complex
|
||||||
|
|
||||||
;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version.
|
;#outut_item_type: Type and resolution for output filtered signal samples.
|
||||||
InputFilter1.output_item_type=gr_complex
|
InputFilter1.output_item_type=gr_complex
|
||||||
|
|
||||||
;######### RESAMPLER CONFIG 1 ############
|
;######### RESAMPLER CONFIG 1 ############
|
||||||
@ -180,10 +174,10 @@ InputFilter2.dump=false
|
|||||||
;#dump_filename: Log path and filename.
|
;#dump_filename: Log path and filename.
|
||||||
InputFilter2.dump_filename=../data/input_filter.dat
|
InputFilter2.dump_filename=../data/input_filter.dat
|
||||||
|
|
||||||
;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version.
|
;#input_item_type: Type and resolution for input signal samples.
|
||||||
InputFilter2.input_item_type=gr_complex
|
InputFilter2.input_item_type=gr_complex
|
||||||
|
|
||||||
;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version.
|
;#outut_item_type: Type and resolution for output filtered signal samples.
|
||||||
InputFilter2.output_item_type=gr_complex
|
InputFilter2.output_item_type=gr_complex
|
||||||
|
|
||||||
;######### RESAMPLER CONFIG 2 ############
|
;######### RESAMPLER CONFIG 2 ############
|
||||||
@ -199,9 +193,11 @@ Channels.in_acquisition=1
|
|||||||
|
|
||||||
;#signal:
|
;#signal:
|
||||||
;# "1C" GPS L1 C/A
|
;# "1C" GPS L1 C/A
|
||||||
;# "2S" GPS L2 L2C (M)
|
|
||||||
;# "1B" GALILEO E1 B (I/NAV OS/CS/SoL)
|
;# "1B" GALILEO E1 B (I/NAV OS/CS/SoL)
|
||||||
|
;# "1G" GLONASS L1 C/A
|
||||||
|
;# "2S" GPS L2 L2C (M)
|
||||||
;# "5X" GALILEO E5a I+Q
|
;# "5X" GALILEO E5a I+Q
|
||||||
|
;# "L5" GPS L5
|
||||||
|
|
||||||
;# CHANNEL CONNECTION
|
;# CHANNEL CONNECTION
|
||||||
Channel0.RF_channel_ID=0
|
Channel0.RF_channel_ID=0
|
||||||
@ -220,24 +216,15 @@ Channel1.signal=1C
|
|||||||
Channel2.signal=1C
|
Channel2.signal=1C
|
||||||
Channel3.signal=1C
|
Channel3.signal=1C
|
||||||
|
|
||||||
;######### SPECIFIC CHANNELS CONFIG ######
|
|
||||||
;#The following options are specific to each channel and overwrite the generic options
|
|
||||||
|
|
||||||
|
|
||||||
;######### ACQUISITION GLOBAL CONFIG ############
|
;######### ACQUISITION GLOBAL CONFIG ############
|
||||||
|
Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition
|
||||||
;#dump: Enable or disable the acquisition internal data file logging [true] or [false]
|
;#item_type: Type and resolution for each of the signal samples.
|
||||||
Acquisition_1C.dump=false
|
|
||||||
;#filename: Log path and filename
|
|
||||||
Acquisition_1C.dump_filename=./acq_dump.dat
|
|
||||||
;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
|
|
||||||
Acquisition_1C.item_type=gr_complex
|
Acquisition_1C.item_type=gr_complex
|
||||||
;#if: Signal intermediate frequency in [Hz]
|
;#if: Signal intermediate frequency in [Hz]
|
||||||
Acquisition_1C.if=0
|
Acquisition_1C.if=0
|
||||||
;#sampled_ms: Signal block duration for the acquisition signal detection [ms]
|
;#sampled_ms: Signal block duration for the acquisition signal detection [ms]
|
||||||
Acquisition_1C.coherent_integration_time_ms=1
|
Acquisition_1C.coherent_integration_time_ms=1
|
||||||
;#implementation: Acquisition algorithm selection for this channel: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
|
|
||||||
Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition
|
|
||||||
;#threshold: Acquisition threshold. It will be ignored if pfa is defined.
|
;#threshold: Acquisition threshold. It will be ignored if pfa is defined.
|
||||||
Acquisition_1C.threshold=0.011
|
Acquisition_1C.threshold=0.011
|
||||||
;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
|
;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
|
||||||
@ -252,89 +239,65 @@ Acquisition_1C.doppler_step=250
|
|||||||
Acquisition_1C.bit_transition_flag=false
|
Acquisition_1C.bit_transition_flag=false
|
||||||
;#max_dwells: Maximum number of consecutive dwells to be processed. It will be ignored if bit_transition_flag=true
|
;#max_dwells: Maximum number of consecutive dwells to be processed. It will be ignored if bit_transition_flag=true
|
||||||
Acquisition_1C.max_dwells=1
|
Acquisition_1C.max_dwells=1
|
||||||
|
;#dump: Enable or disable the acquisition internal data file logging [true] or [false]
|
||||||
|
Acquisition_1C.dump=false
|
||||||
;######### ACQUISITION CHANNELS CONFIG ######
|
;#filename: Log path and filename
|
||||||
;#The following options are specific to each channel and overwrite the generic options
|
Acquisition_1C.dump_filename=./acq_dump.dat
|
||||||
|
|
||||||
|
|
||||||
;######### TRACKING GLOBAL CONFIG ############
|
;######### TRACKING GLOBAL CONFIG ############
|
||||||
|
|
||||||
;#implementation: Selected tracking algorithm: [GPS_L1_CA_DLL_PLL_Tracking] or [GPS_L1_CA_DLL_PLL_C_Aid_Tracking]
|
|
||||||
Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking
|
Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking
|
||||||
;#item_type: Type and resolution for each of the signal samples.
|
;#item_type: Type and resolution for each of the signal samples.
|
||||||
Tracking_1C.item_type=gr_complex
|
Tracking_1C.item_type=gr_complex
|
||||||
|
|
||||||
;#sampling_frequency: Signal Intermediate Frequency in [Hz]
|
;#sampling_frequency: Signal Intermediate Frequency in [Hz]
|
||||||
Tracking_1C.if=0
|
Tracking_1C.if=0
|
||||||
|
;#pll_bw_hz: PLL loop filter bandwidth [Hz]
|
||||||
|
Tracking_1C.pll_bw_hz=40.0;
|
||||||
|
;#dll_bw_hz: DLL loop filter bandwidth [Hz]
|
||||||
|
Tracking_1C.dll_bw_hz=3.0;
|
||||||
|
;#order: PLL/DLL loop filter order [2] or [3]
|
||||||
|
Tracking_1C.order=3;
|
||||||
|
;#early_late_space_chips: correlator early-late space [chips]. Use [0.5]
|
||||||
|
Tracking_1C.early_late_space_chips=0.5;
|
||||||
;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false]
|
;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false]
|
||||||
Tracking_1C.dump=false
|
Tracking_1C.dump=false
|
||||||
|
|
||||||
;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number.
|
;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number.
|
||||||
Tracking_1C.dump_filename=./tracking_ch_
|
Tracking_1C.dump_filename=./tracking_ch_
|
||||||
|
|
||||||
;#pll_bw_hz: PLL loop filter bandwidth [Hz]
|
|
||||||
Tracking_1C.pll_bw_hz=40.0;
|
|
||||||
|
|
||||||
;#dll_bw_hz: DLL loop filter bandwidth [Hz]
|
|
||||||
Tracking_1C.dll_bw_hz=3.0;
|
|
||||||
|
|
||||||
;#order: PLL/DLL loop filter order [2] or [3]
|
|
||||||
Tracking_1C.order=3;
|
|
||||||
|
|
||||||
;#early_late_space_chips: correlator early-late space [chips]. Use [0.5]
|
|
||||||
Tracking_1C.early_late_space_chips=0.5;
|
|
||||||
|
|
||||||
;######### TELEMETRY DECODER GPS CONFIG ############
|
;######### TELEMETRY DECODER GPS CONFIG ############
|
||||||
;#implementation: Use [GPS_L1_CA_Telemetry_Decoder] for GPS L1 C/A
|
;#implementation: Use [GPS_L1_CA_Telemetry_Decoder] for GPS L1 C/A
|
||||||
TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder
|
TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder
|
||||||
TelemetryDecoder_1C.dump=false
|
TelemetryDecoder_1C.dump=false
|
||||||
;#decimation factor
|
|
||||||
TelemetryDecoder_1C.decimation_factor=1;
|
|
||||||
|
|
||||||
;######### OBSERVABLES CONFIG ############
|
;######### OBSERVABLES CONFIG ############
|
||||||
;#implementation:
|
|
||||||
Observables.implementation=Hybrid_Observables
|
Observables.implementation=Hybrid_Observables
|
||||||
|
|
||||||
;#dump: Enable or disable the Observables internal binary data file logging [true] or [false]
|
;#dump: Enable or disable the Observables internal binary data file logging [true] or [false]
|
||||||
Observables.dump=false
|
Observables.dump=false
|
||||||
|
|
||||||
;#dump_filename: Log path and filename.
|
;#dump_filename: Log path and filename.
|
||||||
Observables.dump_filename=./observables.dat
|
Observables.dump_filename=./observables.dat
|
||||||
|
|
||||||
|
|
||||||
;######### PVT CONFIG ############
|
;######### PVT CONFIG ############
|
||||||
;#implementation: Position Velocity and Time (PVT) implementation algorithm: Use [GPS_L1_CA_PVT] in this version.
|
|
||||||
PVT.implementation=RTKLIB_PVT
|
PVT.implementation=RTKLIB_PVT
|
||||||
|
|
||||||
PVT.positioning_mode=PPP_Static ; options: Single, Static, Kinematic, PPP_Static, PPP_Kinematic
|
PVT.positioning_mode=PPP_Static ; options: Single, Static, Kinematic, PPP_Static, PPP_Kinematic
|
||||||
PVT.iono_model=Broadcast ; options: OFF, Broadcast, SBAS, Iono-Free-LC, Estimate_STEC, IONEX
|
PVT.iono_model=Broadcast ; options: OFF, Broadcast, SBAS, Iono-Free-LC, Estimate_STEC, IONEX
|
||||||
PVT.trop_model=Saastamoinen ; options: OFF, Saastamoinen, SBAS, Estimate_ZTD, Estimate_ZTD_Grad
|
PVT.trop_model=Saastamoinen ; options: OFF, Saastamoinen, SBAS, Estimate_ZTD, Estimate_ZTD_Grad
|
||||||
|
|
||||||
;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms]
|
;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms]
|
||||||
PVT.output_rate_ms=100
|
PVT.output_rate_ms=100
|
||||||
|
|
||||||
;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms.
|
;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms.
|
||||||
PVT.display_rate_ms=500
|
PVT.display_rate_ms=500
|
||||||
|
|
||||||
;# KML, GeoJSON, NMEA and RTCM output configuration
|
;# KML, GeoJSON, NMEA and RTCM output configuration
|
||||||
|
|
||||||
;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump.
|
|
||||||
PVT.dump_filename=./PVT
|
|
||||||
|
|
||||||
;#nmea_dump_filename: NMEA log path and filename
|
;#nmea_dump_filename: NMEA log path and filename
|
||||||
PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea;
|
PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea;
|
||||||
|
|
||||||
;#flag_nmea_tty_port: Enable or disable the NMEA log to a serial TTY port (Can be used with real hardware or virtual one)
|
;#flag_nmea_tty_port: Enable or disable the NMEA log to a serial TTY port (Can be used with real hardware or virtual one)
|
||||||
PVT.flag_nmea_tty_port=false;
|
PVT.flag_nmea_tty_port=false;
|
||||||
|
|
||||||
;#nmea_dump_devname: serial device descriptor for NMEA logging
|
;#nmea_dump_devname: serial device descriptor for NMEA logging
|
||||||
PVT.nmea_dump_devname=/dev/pts/4
|
PVT.nmea_dump_devname=/dev/pts/4
|
||||||
|
|
||||||
PVT.flag_rtcm_server=true
|
PVT.flag_rtcm_server=true
|
||||||
PVT.flag_rtcm_tty_port=false
|
PVT.flag_rtcm_tty_port=false
|
||||||
PVT.rtcm_dump_devname=/dev/pts/1
|
PVT.rtcm_dump_devname=/dev/pts/1
|
||||||
|
|
||||||
;#dump: Enable or disable the PVT internal binary data file logging [true] or [false]
|
;#dump: Enable or disable the PVT internal binary data file logging [true] or [false]
|
||||||
PVT.dump=false
|
PVT.dump=false
|
||||||
|
PVT.dump_filename=./PVT
|
||||||
|
@ -25,26 +25,20 @@ GNSS-SDR.SUPL_LAC=0x59e2
|
|||||||
GNSS-SDR.SUPL_CI=0x31b0
|
GNSS-SDR.SUPL_CI=0x31b0
|
||||||
|
|
||||||
;######### SIGNAL_SOURCE CONFIG ############
|
;######### SIGNAL_SOURCE CONFIG ############
|
||||||
;#implementation: Use [File_Signal_Source] or [UHD_Signal_Source] or [GN3S_Signal_Source] (experimental)
|
;#implementation
|
||||||
SignalSource.implementation=Flexiband_Signal_Source
|
SignalSource.implementation=Flexiband_Signal_Source
|
||||||
|
|
||||||
;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
|
;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
|
||||||
SignalSource.item_type=gr_complex
|
SignalSource.item_type=gr_complex
|
||||||
|
|
||||||
;# FPGA firmware file
|
;# FPGA firmware file
|
||||||
SignalSource.firmware_file=flexiband_III-1b.bit
|
SignalSource.firmware_file=flexiband_III-1b.bit
|
||||||
|
|
||||||
;#RF_channels: Number of RF channels present in the frontend device, must agree the FPGA firmware file
|
;#RF_channels: Number of RF channels present in the frontend device, must agree the FPGA firmware file
|
||||||
SignalSource.RF_channels=2
|
SignalSource.RF_channels=2
|
||||||
|
|
||||||
;#frontend channels gain. Not usable yet!
|
;#frontend channels gain. Not usable yet!
|
||||||
SignalSource.gain1=0
|
SignalSource.gain1=0
|
||||||
SignalSource.gain2=0
|
SignalSource.gain2=0
|
||||||
SignalSource.gain3=0
|
SignalSource.gain3=0
|
||||||
|
|
||||||
;#frontend channels AGC
|
;#frontend channels AGC
|
||||||
SignalSource.AGC=true
|
SignalSource.AGC=true
|
||||||
|
|
||||||
;# USB 3.0 packet buffer size (number of SuperSpeed packets)
|
;# USB 3.0 packet buffer size (number of SuperSpeed packets)
|
||||||
SignalSource.usb_packet_buffer=128
|
SignalSource.usb_packet_buffer=128
|
||||||
|
|
||||||
@ -78,13 +72,13 @@ InputFilter0.dump_filename=../data/input_filter.dat
|
|||||||
|
|
||||||
;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation.
|
;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation.
|
||||||
;#These options are based on parameters of gnuradio's function: gr_remez.
|
;#These options are based on parameters of gnuradio's function: gr_remez.
|
||||||
;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges,
|
;#This function calculates the optimal (in the Chebyshev/minimax sense) FIR filter impulse response given a set of band edges,
|
||||||
;#the desired reponse on those bands, and the weight given to the error in those bands.
|
;#the desired response on those bands, and the weight given to the error in those bands.
|
||||||
|
|
||||||
;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version.
|
;#input_item_type: Type and resolution for input signal samples.
|
||||||
InputFilter0.input_item_type=gr_complex
|
InputFilter0.input_item_type=gr_complex
|
||||||
|
|
||||||
;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version.
|
;#outut_item_type: Type and resolution for output filtered signal samples.
|
||||||
InputFilter0.output_item_type=gr_complex
|
InputFilter0.output_item_type=gr_complex
|
||||||
|
|
||||||
;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version.
|
;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version.
|
||||||
@ -172,13 +166,13 @@ InputFilter1.dump_filename=../data/input_filter_ch1.dat
|
|||||||
|
|
||||||
;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation.
|
;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation.
|
||||||
;#These options are based on parameters of gnuradio's function: gr_remez.
|
;#These options are based on parameters of gnuradio's function: gr_remez.
|
||||||
;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges,
|
;#This function calculates the optimal (in the Chebyshev/minimax sense) FIR filter impulse response given a set of band edges,
|
||||||
;#the desired reponse on those bands, and the weight given to the error in those bands.
|
;#the desired response on those bands, and the weight given to the error in those bands.
|
||||||
|
|
||||||
;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version.
|
;#input_item_type: Type and resolution for input signal samples.
|
||||||
InputFilter1.input_item_type=gr_complex
|
InputFilter1.input_item_type=gr_complex
|
||||||
|
|
||||||
;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version.
|
;#outut_item_type: Type and resolution for output filtered signal samples.
|
||||||
InputFilter1.output_item_type=gr_complex
|
InputFilter1.output_item_type=gr_complex
|
||||||
|
|
||||||
;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version.
|
;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version.
|
||||||
@ -254,10 +248,10 @@ InputFilter2.dump=false
|
|||||||
;#dump_filename: Log path and filename.
|
;#dump_filename: Log path and filename.
|
||||||
InputFilter2.dump_filename=../data/input_filter.dat
|
InputFilter2.dump_filename=../data/input_filter.dat
|
||||||
|
|
||||||
;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version.
|
;#input_item_type: Type and resolution for input signal samples.
|
||||||
InputFilter2.input_item_type=gr_complex
|
InputFilter2.input_item_type=gr_complex
|
||||||
|
|
||||||
;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version.
|
;#outut_item_type: Type and resolution for output filtered signal samples.
|
||||||
InputFilter2.output_item_type=gr_complex
|
InputFilter2.output_item_type=gr_complex
|
||||||
|
|
||||||
;######### RESAMPLER CONFIG 2 ############
|
;######### RESAMPLER CONFIG 2 ############
|
||||||
@ -273,12 +267,13 @@ Channels_2S.count=8
|
|||||||
;#in_acquisition: Number of channels simultaneously acquiring for the whole receiver
|
;#in_acquisition: Number of channels simultaneously acquiring for the whole receiver
|
||||||
Channels.in_acquisition=1
|
Channels.in_acquisition=1
|
||||||
|
|
||||||
|
|
||||||
;#signal:
|
;#signal:
|
||||||
;# "1C" GPS L1 C/A
|
;# "1C" GPS L1 C/A
|
||||||
;# "2S" GPS L2 L2C (M)
|
|
||||||
;# "1B" GALILEO E1 B (I/NAV OS/CS/SoL)
|
;# "1B" GALILEO E1 B (I/NAV OS/CS/SoL)
|
||||||
|
;# "1G" GLONASS L1 C/A
|
||||||
|
;# "2S" GPS L2 L2C (M)
|
||||||
;# "5X" GALILEO E5a I+Q
|
;# "5X" GALILEO E5a I+Q
|
||||||
|
;# "L5" GPS L5
|
||||||
|
|
||||||
|
|
||||||
;# CHANNEL CONNECTION
|
;# CHANNEL CONNECTION
|
||||||
@ -359,19 +354,13 @@ Channel15.signal=2S
|
|||||||
;######### SPECIFIC CHANNELS CONFIG ######
|
;######### SPECIFIC CHANNELS CONFIG ######
|
||||||
;#The following options are specific to each channel and overwrite the generic options
|
;#The following options are specific to each channel and overwrite the generic options
|
||||||
;######### ACQUISITION GLOBAL CONFIG ############
|
;######### ACQUISITION GLOBAL CONFIG ############
|
||||||
|
Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition
|
||||||
;#dump: Enable or disable the acquisition internal data file logging [true] or [false]
|
;#item_type: Type and resolution for each of the signal samples.
|
||||||
Acquisition_1C.dump=false
|
|
||||||
;#filename: Log path and filename
|
|
||||||
Acquisition_1C.dump_filename=./acq_dump.dat
|
|
||||||
;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
|
|
||||||
Acquisition_1C.item_type=gr_complex
|
Acquisition_1C.item_type=gr_complex
|
||||||
;#if: Signal intermediate frequency in [Hz]
|
;#if: Signal intermediate frequency in [Hz]
|
||||||
Acquisition_1C.if=0
|
Acquisition_1C.if=0
|
||||||
;#sampled_ms: Signal block duration for the acquisition signal detection [ms]
|
;#sampled_ms: Signal block duration for the acquisition signal detection [ms]
|
||||||
Acquisition_1C.coherent_integration_time_ms=1
|
Acquisition_1C.coherent_integration_time_ms=1
|
||||||
;#implementation: Acquisition algorithm selection for this channel: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
|
|
||||||
Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition
|
|
||||||
;#threshold: Acquisition threshold. It will be ignored if pfa is defined.
|
;#threshold: Acquisition threshold. It will be ignored if pfa is defined.
|
||||||
Acquisition_1C.threshold=0.008
|
Acquisition_1C.threshold=0.008
|
||||||
;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
|
;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
|
||||||
@ -386,112 +375,92 @@ Acquisition_1C.doppler_step=250
|
|||||||
Acquisition_1C.bit_transition_flag=false
|
Acquisition_1C.bit_transition_flag=false
|
||||||
;#max_dwells: Maximum number of consecutive dwells to be processed. It will be ignored if bit_transition_flag=true
|
;#max_dwells: Maximum number of consecutive dwells to be processed. It will be ignored if bit_transition_flag=true
|
||||||
Acquisition_1C.max_dwells=1
|
Acquisition_1C.max_dwells=1
|
||||||
|
;#dump: Enable or disable the acquisition internal data file logging [true] or [false]
|
||||||
|
Acquisition_1C.dump=false
|
||||||
;######### ACQUISITION CHANNELS CONFIG ######
|
;#filename: Log path and filename
|
||||||
;#The following options are specific to each channel and overwrite the generic options
|
Acquisition_1C.dump_filename=./acq_dump.dat
|
||||||
|
|
||||||
|
|
||||||
;######### TRACKING GLOBAL CONFIG ############
|
;######### TRACKING GLOBAL CONFIG ############
|
||||||
|
|
||||||
;#implementation: Selected tracking algorithm: [GPS_L1_CA_DLL_PLL_Tracking] or [GPS_L1_CA_DLL_PLL_C_Aid_Tracking]
|
|
||||||
|
|
||||||
Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking
|
Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking
|
||||||
Tracking_1C.item_type=gr_complex
|
Tracking_1C.item_type=gr_complex
|
||||||
Tracking_1C.if=0
|
Tracking_1C.if=0
|
||||||
Tracking_1C.dump=true
|
|
||||||
Tracking_1C.dump_filename=./tracking_ch_
|
|
||||||
Tracking_1C.pll_bw_hz=40.0;
|
Tracking_1C.pll_bw_hz=40.0;
|
||||||
Tracking_1C.dll_bw_hz=3.0;
|
Tracking_1C.dll_bw_hz=3.0;
|
||||||
Tracking_1C.order=3;
|
Tracking_1C.order=3;
|
||||||
Tracking_1C.early_late_space_chips=0.5;
|
Tracking_1C.early_late_space_chips=0.5;
|
||||||
|
Tracking_1C.dump=true
|
||||||
|
Tracking_1C.dump_filename=./tracking_ch_
|
||||||
|
|
||||||
|
|
||||||
;# GPS L2C M
|
;# GPS L2C M
|
||||||
Acquisition_2S.dump=false
|
Acquisition_2S.implementation=GPS_L2_M_PCPS_Acquisition
|
||||||
Acquisition_2S.dump_filename=./acq_dump.dat
|
|
||||||
Acquisition_2S.item_type=gr_complex
|
Acquisition_2S.item_type=gr_complex
|
||||||
Acquisition_2S.if=0
|
Acquisition_2S.if=0
|
||||||
Acquisition_2S.implementation=GPS_L2_M_PCPS_Acquisition
|
|
||||||
Acquisition_2S.threshold=0.0005
|
Acquisition_2S.threshold=0.0005
|
||||||
;Acquisition_2S.pfa=0.001
|
;Acquisition_2S.pfa=0.001
|
||||||
Acquisition_2S.doppler_max=5000
|
Acquisition_2S.doppler_max=5000
|
||||||
Acquisition_2S.doppler_min=-5000
|
Acquisition_2S.doppler_min=-5000
|
||||||
Acquisition_2S.doppler_step=30
|
Acquisition_2S.doppler_step=30
|
||||||
Acquisition_2S.max_dwells=1
|
Acquisition_2S.max_dwells=1
|
||||||
|
Acquisition_2S.dump=false
|
||||||
|
Acquisition_2S.dump_filename=./acq_dump.dat
|
||||||
|
|
||||||
Tracking_2S.implementation=GPS_L2_M_DLL_PLL_Tracking
|
Tracking_2S.implementation=GPS_L2_M_DLL_PLL_Tracking
|
||||||
Tracking_2S.item_type=gr_complex
|
Tracking_2S.item_type=gr_complex
|
||||||
Tracking_2S.if=0
|
Tracking_2S.if=0
|
||||||
Tracking_2S.dump=true
|
|
||||||
Tracking_2S.dump_filename=./tracking_ch_
|
|
||||||
Tracking_2S.pll_bw_hz=1.5;
|
Tracking_2S.pll_bw_hz=1.5;
|
||||||
Tracking_2S.dll_bw_hz=0.3;
|
Tracking_2S.dll_bw_hz=0.3;
|
||||||
Tracking_2S.order=3;
|
Tracking_2S.order=3;
|
||||||
Tracking_2S.early_late_space_chips=0.5;
|
Tracking_2S.early_late_space_chips=0.5;
|
||||||
|
Tracking_2S.dump=true
|
||||||
|
Tracking_2S.dump_filename=./tracking_ch_
|
||||||
|
|
||||||
|
|
||||||
;######### TELEMETRY DECODER GPS L1 CONFIG ############
|
;######### TELEMETRY DECODER GPS L1 CONFIG ############
|
||||||
;#implementation: Use [GPS_L1_CA_Telemetry_Decoder] for GPS L1 C/A
|
;#implementation: Use [GPS_L1_CA_Telemetry_Decoder] for GPS L1 C/A
|
||||||
TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder
|
TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder
|
||||||
TelemetryDecoder_1C.dump=false
|
TelemetryDecoder_1C.dump=false
|
||||||
TelemetryDecoder_1C.decimation_factor=20;
|
|
||||||
|
|
||||||
|
|
||||||
;######### TELEMETRY DECODER GPS L2 CONFIG ############
|
;######### TELEMETRY DECODER GPS L2 CONFIG ############
|
||||||
;#implementation: Use [GPS_L1_CA_Telemetry_Decoder] for GPS L2 M
|
;#implementation: Use [GPS_L1_CA_Telemetry_Decoder] for GPS L2 M
|
||||||
TelemetryDecoder_2S.implementation=GPS_L2C_Telemetry_Decoder
|
TelemetryDecoder_2S.implementation=GPS_L2C_Telemetry_Decoder
|
||||||
TelemetryDecoder_2S.dump=false
|
TelemetryDecoder_2S.dump=false
|
||||||
TelemetryDecoder_2S.decimation_factor=1;
|
|
||||||
|
|
||||||
|
|
||||||
;######### OBSERVABLES CONFIG ############
|
;######### OBSERVABLES CONFIG ############
|
||||||
;#implementation:
|
|
||||||
Observables.implementation=Hybrid_Observables
|
Observables.implementation=Hybrid_Observables
|
||||||
|
|
||||||
;#dump: Enable or disable the Observables internal binary data file logging [true] or [false]
|
;#dump: Enable or disable the Observables internal binary data file logging [true] or [false]
|
||||||
Observables.dump=false
|
Observables.dump=false
|
||||||
|
|
||||||
;#dump_filename: Log path and filename.
|
;#dump_filename: Log path and filename.
|
||||||
Observables.dump_filename=./observables.dat
|
Observables.dump_filename=./observables.dat
|
||||||
|
|
||||||
|
|
||||||
;######### PVT CONFIG ############
|
;######### PVT CONFIG ############
|
||||||
;#implementation: Position Velocity and Time (PVT) implementation:
|
|
||||||
PVT.implementation=RTKLIB_PVT
|
PVT.implementation=RTKLIB_PVT
|
||||||
|
|
||||||
PVT.positioning_mode=PPP_Static ; options: Single, Static, Kinematic, PPP_Static, PPP_Kinematic
|
PVT.positioning_mode=PPP_Static ; options: Single, Static, Kinematic, PPP_Static, PPP_Kinematic
|
||||||
PVT.iono_model=Broadcast ; options: OFF, Broadcast, SBAS, Iono-Free-LC, Estimate_STEC, IONEX
|
PVT.iono_model=Broadcast ; options: OFF, Broadcast, SBAS, Iono-Free-LC, Estimate_STEC, IONEX
|
||||||
PVT.trop_model=Saastamoinen ; options: OFF, Saastamoinen, SBAS, Estimate_ZTD, Estimate_ZTD_Grad
|
PVT.trop_model=Saastamoinen ; options: OFF, Saastamoinen, SBAS, Estimate_ZTD, Estimate_ZTD_Grad
|
||||||
|
|
||||||
;#averaging_depth: Number of PVT observations in the moving average algorithm
|
;#averaging_depth: Number of PVT observations in the moving average algorithm
|
||||||
PVT.averaging_depth=10
|
PVT.averaging_depth=10
|
||||||
|
|
||||||
;#flag_average: Enables the PVT averaging between output intervals (arithmetic mean) [true] or [false]
|
;#flag_average: Enables the PVT averaging between output intervals (arithmetic mean) [true] or [false]
|
||||||
PVT.flag_averaging=true
|
PVT.flag_averaging=true
|
||||||
|
|
||||||
;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms]
|
;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms]
|
||||||
PVT.output_rate_ms=100
|
PVT.output_rate_ms=100
|
||||||
|
|
||||||
;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms.
|
;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms.
|
||||||
PVT.display_rate_ms=500
|
PVT.display_rate_ms=500
|
||||||
|
|
||||||
;# KML, GeoJSON, NMEA and RTCM output configuration
|
;# KML, GeoJSON, NMEA and RTCM output configuration
|
||||||
|
|
||||||
;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump.
|
|
||||||
PVT.dump_filename=./PVT
|
|
||||||
|
|
||||||
;#nmea_dump_filename: NMEA log path and filename
|
;#nmea_dump_filename: NMEA log path and filename
|
||||||
PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea;
|
PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea;
|
||||||
|
|
||||||
;#flag_nmea_tty_port: Enable or disable the NMEA log to a serial TTY port (Can be used with real hardware or virtual one)
|
;#flag_nmea_tty_port: Enable or disable the NMEA log to a serial TTY port (Can be used with real hardware or virtual one)
|
||||||
PVT.flag_nmea_tty_port=false;
|
PVT.flag_nmea_tty_port=false;
|
||||||
|
|
||||||
;#nmea_dump_devname: serial device descriptor for NMEA logging
|
;#nmea_dump_devname: serial device descriptor for NMEA logging
|
||||||
PVT.nmea_dump_devname=/dev/pts/4
|
PVT.nmea_dump_devname=/dev/pts/4
|
||||||
|
|
||||||
PVT.flag_rtcm_server=false
|
PVT.flag_rtcm_server=false
|
||||||
PVT.flag_rtcm_tty_port=false
|
PVT.flag_rtcm_tty_port=false
|
||||||
PVT.rtcm_dump_devname=/dev/pts/1
|
PVT.rtcm_dump_devname=/dev/pts/1
|
||||||
|
|
||||||
|
|
||||||
;#dump: Enable or disable the PVT internal binary data file logging [true] or [false]
|
;#dump: Enable or disable the PVT internal binary data file logging [true] or [false]
|
||||||
PVT.dump=false
|
PVT.dump=false
|
||||||
|
;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump.
|
||||||
|
PVT.dump_filename=./PVT
|
||||||
|
@ -25,7 +25,7 @@ GNSS-SDR.SUPL_LAC=0x59e2
|
|||||||
GNSS-SDR.SUPL_CI=0x31b0
|
GNSS-SDR.SUPL_CI=0x31b0
|
||||||
|
|
||||||
;######### SIGNAL_SOURCE CONFIG ############
|
;######### SIGNAL_SOURCE CONFIG ############
|
||||||
;#implementation: Use [File_Signal_Source] or [UHD_Signal_Source] or [GN3S_Signal_Source] (experimental)
|
;#implementation
|
||||||
SignalSource.implementation=Flexiband_Signal_Source
|
SignalSource.implementation=Flexiband_Signal_Source
|
||||||
|
|
||||||
SignalSource.flag_read_file=true
|
SignalSource.flag_read_file=true
|
||||||
@ -81,13 +81,13 @@ InputFilter0.dump_filename=../data/input_filter.dat
|
|||||||
|
|
||||||
;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation.
|
;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation.
|
||||||
;#These options are based on parameters of gnuradio's function: gr_remez.
|
;#These options are based on parameters of gnuradio's function: gr_remez.
|
||||||
;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges,
|
;#This function calculates the optimal (in the Chebyshev/minimax sense) FIR filter impulse response given a set of band edges,
|
||||||
;#the desired reponse on those bands, and the weight given to the error in those bands.
|
;#the desired response on those bands, and the weight given to the error in those bands.
|
||||||
|
|
||||||
;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version.
|
;#input_item_type: Type and resolution for input signal samples.
|
||||||
InputFilter0.input_item_type=gr_complex
|
InputFilter0.input_item_type=gr_complex
|
||||||
|
|
||||||
;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version.
|
;#outut_item_type: Type and resolution for output filtered signal samples.
|
||||||
InputFilter0.output_item_type=gr_complex
|
InputFilter0.output_item_type=gr_complex
|
||||||
|
|
||||||
;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version.
|
;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version.
|
||||||
@ -175,13 +175,13 @@ InputFilter1.dump_filename=../data/input_filter_ch1.dat
|
|||||||
|
|
||||||
;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation.
|
;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation.
|
||||||
;#These options are based on parameters of gnuradio's function: gr_remez.
|
;#These options are based on parameters of gnuradio's function: gr_remez.
|
||||||
;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges,
|
;#This function calculates the optimal (in the Chebyshev/minimax sense) FIR filter impulse response given a set of band edges,
|
||||||
;#the desired reponse on those bands, and the weight given to the error in those bands.
|
;#the desired response on those bands, and the weight given to the error in those bands.
|
||||||
|
|
||||||
;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version.
|
;#input_item_type: Type and resolution for input signal samples.
|
||||||
InputFilter1.input_item_type=gr_complex
|
InputFilter1.input_item_type=gr_complex
|
||||||
|
|
||||||
;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version.
|
;#outut_item_type: Type and resolution for output filtered signal samples.
|
||||||
InputFilter1.output_item_type=gr_complex
|
InputFilter1.output_item_type=gr_complex
|
||||||
|
|
||||||
;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version.
|
;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version.
|
||||||
@ -257,10 +257,10 @@ InputFilter2.dump=false
|
|||||||
;#dump_filename: Log path and filename.
|
;#dump_filename: Log path and filename.
|
||||||
InputFilter2.dump_filename=../data/input_filter.dat
|
InputFilter2.dump_filename=../data/input_filter.dat
|
||||||
|
|
||||||
;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version.
|
;#input_item_type: Type and resolution for input signal samples.
|
||||||
InputFilter2.input_item_type=gr_complex
|
InputFilter2.input_item_type=gr_complex
|
||||||
|
|
||||||
;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version.
|
;#outut_item_type: Type and resolution for output filtered signal samples.
|
||||||
InputFilter2.output_item_type=gr_complex
|
InputFilter2.output_item_type=gr_complex
|
||||||
|
|
||||||
;######### RESAMPLER CONFIG 2 ############
|
;######### RESAMPLER CONFIG 2 ############
|
||||||
@ -278,9 +278,11 @@ Channels.in_acquisition=1
|
|||||||
|
|
||||||
;#signal:
|
;#signal:
|
||||||
;# "1C" GPS L1 C/A
|
;# "1C" GPS L1 C/A
|
||||||
;# "2S" GPS L2 L2C (M)
|
|
||||||
;# "1B" GALILEO E1 B (I/NAV OS/CS/SoL)
|
;# "1B" GALILEO E1 B (I/NAV OS/CS/SoL)
|
||||||
|
;# "1G" GLONASS L1 C/A
|
||||||
|
;# "2S" GPS L2 L2C (M)
|
||||||
;# "5X" GALILEO E5a I+Q
|
;# "5X" GALILEO E5a I+Q
|
||||||
|
;# "L5" GPS L5
|
||||||
|
|
||||||
|
|
||||||
;# CHANNEL CONNECTION
|
;# CHANNEL CONNECTION
|
||||||
@ -305,19 +307,13 @@ Channel15.RF_channel_ID=1
|
|||||||
;######### SPECIFIC CHANNELS CONFIG ######
|
;######### SPECIFIC CHANNELS CONFIG ######
|
||||||
;#The following options are specific to each channel and overwrite the generic options
|
;#The following options are specific to each channel and overwrite the generic options
|
||||||
;######### ACQUISITION GLOBAL CONFIG ############
|
;######### ACQUISITION GLOBAL CONFIG ############
|
||||||
|
Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition
|
||||||
;#dump: Enable or disable the acquisition internal data file logging [true] or [false]
|
;#item_type: Type and resolution for each of the signal samples..
|
||||||
Acquisition_1C.dump=false
|
|
||||||
;#filename: Log path and filename
|
|
||||||
Acquisition_1C.dump_filename=./acq_dump.dat
|
|
||||||
;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
|
|
||||||
Acquisition_1C.item_type=gr_complex
|
Acquisition_1C.item_type=gr_complex
|
||||||
;#if: Signal intermediate frequency in [Hz]
|
;#if: Signal intermediate frequency in [Hz]
|
||||||
Acquisition_1C.if=0
|
Acquisition_1C.if=0
|
||||||
;#sampled_ms: Signal block duration for the acquisition signal detection [ms]
|
;#sampled_ms: Signal block duration for the acquisition signal detection [ms]
|
||||||
Acquisition_1C.coherent_integration_time_ms=1
|
Acquisition_1C.coherent_integration_time_ms=1
|
||||||
;#implementation: Acquisition algorithm selection for this channel: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
|
|
||||||
Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition
|
|
||||||
;#threshold: Acquisition threshold. It will be ignored if pfa is defined.
|
;#threshold: Acquisition threshold. It will be ignored if pfa is defined.
|
||||||
Acquisition_1C.threshold=0.008
|
Acquisition_1C.threshold=0.008
|
||||||
;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
|
;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
|
||||||
@ -332,16 +328,13 @@ Acquisition_1C.doppler_step=250
|
|||||||
Acquisition_1C.bit_transition_flag=false
|
Acquisition_1C.bit_transition_flag=false
|
||||||
;#max_dwells: Maximum number of consecutive dwells to be processed. It will be ignored if bit_transition_flag=true
|
;#max_dwells: Maximum number of consecutive dwells to be processed. It will be ignored if bit_transition_flag=true
|
||||||
Acquisition_1C.max_dwells=1
|
Acquisition_1C.max_dwells=1
|
||||||
|
;#dump: Enable or disable the acquisition internal data file logging [true] or [false]
|
||||||
|
Acquisition_1C.dump=false
|
||||||
;######### ACQUISITION CHANNELS CONFIG ######
|
;#filename: Log path and filename
|
||||||
;#The following options are specific to each channel and overwrite the generic options
|
Acquisition_1C.dump_filename=./acq_dump.dat
|
||||||
|
|
||||||
|
|
||||||
;######### TRACKING GLOBAL CONFIG ############
|
;######### TRACKING GLOBAL CONFIG ############
|
||||||
|
|
||||||
;#implementation: Selected tracking algorithm: [GPS_L1_CA_DLL_PLL_Tracking] or [GPS_L1_CA_DLL_PLL_C_Aid_Tracking]
|
|
||||||
|
|
||||||
Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking
|
Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking
|
||||||
Tracking_1C.item_type=gr_complex
|
Tracking_1C.item_type=gr_complex
|
||||||
Tracking_1C.if=0
|
Tracking_1C.if=0
|
||||||
@ -353,44 +346,37 @@ Tracking_1C.order=3;
|
|||||||
Tracking_1C.early_late_space_chips=0.5;
|
Tracking_1C.early_late_space_chips=0.5;
|
||||||
|
|
||||||
;# GPS L2C M
|
;# GPS L2C M
|
||||||
Acquisition_2S.dump=false
|
Acquisition_2S.implementation=GPS_L2_M_PCPS_Acquisition
|
||||||
Acquisition_2S.dump_filename=./acq_dump.dat
|
|
||||||
Acquisition_2S.item_type=gr_complex
|
Acquisition_2S.item_type=gr_complex
|
||||||
Acquisition_2S.if=0
|
Acquisition_2S.if=0
|
||||||
Acquisition_2S.implementation=GPS_L2_M_PCPS_Acquisition
|
|
||||||
Acquisition_2S.threshold=0.0005
|
Acquisition_2S.threshold=0.0005
|
||||||
;Acquisition_2S.pfa=0.001
|
;Acquisition_2S.pfa=0.001
|
||||||
Acquisition_2S.doppler_max=5000
|
Acquisition_2S.doppler_max=5000
|
||||||
Acquisition_2S.doppler_min=-5000
|
Acquisition_2S.doppler_min=-5000
|
||||||
Acquisition_2S.doppler_step=30
|
Acquisition_2S.doppler_step=30
|
||||||
Acquisition_2S.max_dwells=1
|
Acquisition_2S.max_dwells=1
|
||||||
|
Acquisition_2S.dump=false
|
||||||
|
Acquisition_2S.dump_filename=./acq_dump.dat
|
||||||
|
|
||||||
Tracking_2S.implementation=GPS_L2_M_DLL_PLL_Tracking
|
Tracking_2S.implementation=GPS_L2_M_DLL_PLL_Tracking
|
||||||
Tracking_2S.item_type=gr_complex
|
Tracking_2S.item_type=gr_complex
|
||||||
Tracking_2S.if=0
|
Tracking_2S.if=0
|
||||||
Tracking_2S.dump=true
|
|
||||||
Tracking_2S.dump_filename=../data/epl_tracking_ch_
|
|
||||||
Tracking_2S.pll_bw_hz=1.5;
|
Tracking_2S.pll_bw_hz=1.5;
|
||||||
Tracking_2S.dll_bw_hz=0.3;
|
Tracking_2S.dll_bw_hz=0.3;
|
||||||
Tracking_2S.order=3;
|
Tracking_2S.order=3;
|
||||||
Tracking_2S.early_late_space_chips=0.5;
|
Tracking_2S.early_late_space_chips=0.5;
|
||||||
|
Tracking_2S.dump=true
|
||||||
|
Tracking_2S.dump_filename=../data/epl_tracking_ch_
|
||||||
|
|
||||||
|
|
||||||
;# GALILEO E1B
|
;# GALILEO E1B
|
||||||
|
Acquisition_1B.implementation=Galileo_E1_PCPS_Ambiguous_Acquisition
|
||||||
|
;#item_type: Type and resolution for each of the signal samples.
|
||||||
;#dump: Enable or disable the acquisition internal data file logging [true] or [false]
|
|
||||||
Acquisition_1B.dump=false
|
|
||||||
;#filename: Log path and filename
|
|
||||||
Acquisition_1B.dump_filename=./acq_dump.dat
|
|
||||||
;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
|
|
||||||
Acquisition_1B.item_type=gr_complex
|
Acquisition_1B.item_type=gr_complex
|
||||||
;#if: Signal intermediate frequency in [Hz]
|
;#if: Signal intermediate frequency in [Hz]
|
||||||
Acquisition_1B.if=0
|
Acquisition_1B.if=0
|
||||||
;#sampled_ms: Signal block duration for the acquisition signal detection [ms]
|
;#sampled_ms: Signal block duration for the acquisition signal detection [ms]
|
||||||
Acquisition_1B.sampled_ms=4
|
Acquisition_1B.sampled_ms=4
|
||||||
;#implementation: Acquisition algorithm selection for this channel: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
|
|
||||||
Acquisition_1B.implementation=Galileo_E1_PCPS_Ambiguous_Acquisition
|
|
||||||
;#threshold: Acquisition threshold
|
;#threshold: Acquisition threshold
|
||||||
;Acquisition_1B.threshold=0
|
;Acquisition_1B.threshold=0
|
||||||
;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
|
;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
|
||||||
@ -399,100 +385,80 @@ Acquisition_1B.pfa=0.0000005
|
|||||||
Acquisition_1B.doppler_max=5000
|
Acquisition_1B.doppler_max=5000
|
||||||
;#doppler_max: Doppler step in the grid search [Hz]
|
;#doppler_max: Doppler step in the grid search [Hz]
|
||||||
Acquisition_1B.doppler_step=125
|
Acquisition_1B.doppler_step=125
|
||||||
|
;#dump: Enable or disable the acquisition internal data file logging [true] or [false]
|
||||||
|
Acquisition_1B.dump=false
|
||||||
|
;#filename: Log path and filename
|
||||||
|
Acquisition_1B.dump_filename=./acq_dump.dat
|
||||||
|
|
||||||
|
|
||||||
;#implementation: Selected tracking algorithm: [GPS_L1_CA_DLL_PLL_Tracking] or [GPS_L1_CA_DLL_PLL_C_Aid_Tracking] or [GPS_L1_CA_TCP_CONNECTOR_Tracking] or [Galileo_E1_DLL_PLL_VEML_Tracking]
|
|
||||||
Tracking_1B.implementation=Galileo_E1_DLL_PLL_VEML_Tracking
|
Tracking_1B.implementation=Galileo_E1_DLL_PLL_VEML_Tracking
|
||||||
;#item_type: Type and resolution for each of the signal samples. Use only [gr_complex] in this version.
|
;#item_type: Type and resolution for each of the signal samples.
|
||||||
Tracking_1B.item_type=gr_complex
|
Tracking_1B.item_type=gr_complex
|
||||||
|
|
||||||
;#sampling_frequency: Signal Intermediate Frequency in [Hz]
|
;#sampling_frequency: Signal Intermediate Frequency in [Hz]
|
||||||
Tracking_1B.if=0
|
Tracking_1B.if=0
|
||||||
|
|
||||||
;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false]
|
|
||||||
Tracking_1B.dump=false
|
|
||||||
|
|
||||||
;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number.
|
|
||||||
Tracking_1B.dump_filename=./veml_tracking_ch_
|
|
||||||
|
|
||||||
;#pll_bw_hz: PLL loop filter bandwidth [Hz]
|
;#pll_bw_hz: PLL loop filter bandwidth [Hz]
|
||||||
Tracking_1B.pll_bw_hz=15.0;
|
Tracking_1B.pll_bw_hz=15.0;
|
||||||
|
|
||||||
;#dll_bw_hz: DLL loop filter bandwidth [Hz]
|
;#dll_bw_hz: DLL loop filter bandwidth [Hz]
|
||||||
Tracking_1B.dll_bw_hz=2.0;
|
Tracking_1B.dll_bw_hz=2.0;
|
||||||
|
|
||||||
;#order: PLL/DLL loop filter order [2] or [3]
|
;#order: PLL/DLL loop filter order [2] or [3]
|
||||||
Tracking_1B.order=3;
|
Tracking_1B.order=3;
|
||||||
|
|
||||||
;#early_late_space_chips: correlator early-late space [chips]. Use [0.5] for GPS and [0.15] for Galileo
|
;#early_late_space_chips: correlator early-late space [chips]. Use [0.5] for GPS and [0.15] for Galileo
|
||||||
Tracking_1B.early_late_space_chips=0.15;
|
Tracking_1B.early_late_space_chips=0.15;
|
||||||
|
|
||||||
;#very_early_late_space_chips: only for [Galileo_E1_DLL_PLL_VEML_Tracking], correlator very early-late space [chips]. Use [0.6]
|
;#very_early_late_space_chips: only for [Galileo_E1_DLL_PLL_VEML_Tracking], correlator very early-late space [chips]. Use [0.6]
|
||||||
Tracking_1B.very_early_late_space_chips=0.6;
|
Tracking_1B.very_early_late_space_chips=0.6;
|
||||||
|
;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false]
|
||||||
|
Tracking_1B.dump=false
|
||||||
|
;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number.
|
||||||
|
Tracking_1B.dump_filename=./veml_tracking_ch_
|
||||||
|
|
||||||
|
|
||||||
;######### TELEMETRY DECODER GPS L1 CONFIG ############
|
;######### TELEMETRY DECODER GPS L1 CONFIG ############
|
||||||
;#implementation: Use [GPS_L1_CA_Telemetry_Decoder] for GPS L1 C/A
|
;#implementation: Use [GPS_L1_CA_Telemetry_Decoder] for GPS L1 C/A
|
||||||
TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder
|
TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder
|
||||||
TelemetryDecoder_1C.dump=false
|
TelemetryDecoder_1C.dump=false
|
||||||
TelemetryDecoder_1C.decimation_factor=20;
|
|
||||||
|
|
||||||
|
|
||||||
;######### TELEMETRY DECODER GPS L2 CONFIG ############
|
;######### TELEMETRY DECODER GPS L2 CONFIG ############
|
||||||
;#implementation: Use [GPS_L1_CA_Telemetry_Decoder] for GPS L2 M
|
;#implementation: Use [GPS_L1_CA_Telemetry_Decoder] for GPS L2 M
|
||||||
TelemetryDecoder_2S.implementation=GPS_L2C_Telemetry_Decoder
|
TelemetryDecoder_2S.implementation=GPS_L2C_Telemetry_Decoder
|
||||||
TelemetryDecoder_2S.dump=false
|
TelemetryDecoder_2S.dump=false
|
||||||
TelemetryDecoder_2S.decimation_factor=1;
|
|
||||||
|
|
||||||
;######### TELEMETRY DECODER GALILEO E1B CONFIG ############
|
;######### TELEMETRY DECODER GALILEO E1B CONFIG ############
|
||||||
;#implementation: Use [Galileo_E1B_Telemetry_Decoder] for Galileo E1B
|
;#implementation: Use [Galileo_E1B_Telemetry_Decoder] for Galileo E1B
|
||||||
TelemetryDecoder_1B.implementation=Galileo_E1B_Telemetry_Decoder
|
TelemetryDecoder_1B.implementation=Galileo_E1B_Telemetry_Decoder
|
||||||
TelemetryDecoder_1B.dump=false
|
TelemetryDecoder_1B.dump=false
|
||||||
TelemetryDecoder_1B.decimation_factor=5;
|
|
||||||
|
|
||||||
|
|
||||||
;######### OBSERVABLES CONFIG ############
|
;######### OBSERVABLES CONFIG ############
|
||||||
;#implementation:
|
;#implementation:
|
||||||
Observables.implementation=Hybrid_Observables
|
Observables.implementation=Hybrid_Observables
|
||||||
|
|
||||||
;#dump: Enable or disable the Observables internal binary data file logging [true] or [false]
|
;#dump: Enable or disable the Observables internal binary data file logging [true] or [false]
|
||||||
Observables.dump=false
|
Observables.dump=false
|
||||||
|
|
||||||
;#dump_filename: Log path and filename.
|
;#dump_filename: Log path and filename.
|
||||||
Observables.dump_filename=./observables.dat
|
Observables.dump_filename=./observables.dat
|
||||||
|
|
||||||
|
|
||||||
;######### PVT CONFIG ############
|
;######### PVT CONFIG ############
|
||||||
;#implementation: Position Velocity and Time (PVT) implementation algorithm: Use [GPS_L1_CA_PVT] in this version.
|
|
||||||
PVT.implementation=RTKLIB_PVT
|
PVT.implementation=RTKLIB_PVT
|
||||||
|
|
||||||
PVT.positioning_mode=PPP_Static ; options: Single, Static, Kinematic, PPP_Static, PPP_Kinematic
|
PVT.positioning_mode=PPP_Static ; options: Single, Static, Kinematic, PPP_Static, PPP_Kinematic
|
||||||
PVT.iono_model=Broadcast ; options: OFF, Broadcast, SBAS, Iono-Free-LC, Estimate_STEC, IONEX
|
PVT.iono_model=Broadcast ; options: OFF, Broadcast, SBAS, Iono-Free-LC, Estimate_STEC, IONEX
|
||||||
PVT.trop_model=Saastamoinen ; options: OFF, Saastamoinen, SBAS, Estimate_ZTD, Estimate_ZTD_Grad
|
PVT.trop_model=Saastamoinen ; options: OFF, Saastamoinen, SBAS, Estimate_ZTD, Estimate_ZTD_Grad
|
||||||
|
|
||||||
;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms]
|
;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms]
|
||||||
PVT.output_rate_ms=100
|
PVT.output_rate_ms=100
|
||||||
|
|
||||||
;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms.
|
;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms.
|
||||||
PVT.display_rate_ms=100
|
PVT.display_rate_ms=100
|
||||||
|
|
||||||
;# KML, GeoJSON, NMEA and RTCM output configuration
|
;# KML, GeoJSON, NMEA and RTCM output configuration
|
||||||
|
|
||||||
;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump.
|
|
||||||
PVT.dump_filename=./PVT
|
|
||||||
|
|
||||||
;#nmea_dump_filename: NMEA log path and filename
|
;#nmea_dump_filename: NMEA log path and filename
|
||||||
PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea;
|
PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea;
|
||||||
|
|
||||||
;#flag_nmea_tty_port: Enable or disable the NMEA log to a serial TTY port (Can be used with real hardware or virtual one)
|
;#flag_nmea_tty_port: Enable or disable the NMEA log to a serial TTY port (Can be used with real hardware or virtual one)
|
||||||
PVT.flag_nmea_tty_port=false;
|
PVT.flag_nmea_tty_port=false;
|
||||||
|
|
||||||
;#nmea_dump_devname: serial device descriptor for NMEA logging
|
;#nmea_dump_devname: serial device descriptor for NMEA logging
|
||||||
PVT.nmea_dump_devname=/dev/pts/4
|
PVT.nmea_dump_devname=/dev/pts/4
|
||||||
|
|
||||||
PVT.flag_rtcm_server=false
|
PVT.flag_rtcm_server=false
|
||||||
PVT.flag_rtcm_tty_port=false
|
PVT.flag_rtcm_tty_port=false
|
||||||
PVT.rtcm_dump_devname=/dev/pts/1
|
PVT.rtcm_dump_devname=/dev/pts/1
|
||||||
|
|
||||||
;#dump: Enable or disable the PVT internal binary data file logging [true] or [false]
|
;#dump: Enable or disable the PVT internal binary data file logging [true] or [false]
|
||||||
PVT.dump=false
|
PVT.dump=false
|
||||||
|
;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump.
|
||||||
|
PVT.dump_filename=./PVT
|
||||||
|
|
||||||
|
@ -25,21 +25,16 @@ GNSS-SDR.SUPL_LAC=0x59e2
|
|||||||
GNSS-SDR.SUPL_CI=0x31b0
|
GNSS-SDR.SUPL_CI=0x31b0
|
||||||
|
|
||||||
;######### SIGNAL_SOURCE CONFIG ############
|
;######### SIGNAL_SOURCE CONFIG ############
|
||||||
;#implementation: Use [File_Signal_Source] or [UHD_Signal_Source] or [GN3S_Signal_Source] (experimental)
|
;#implementation
|
||||||
SignalSource.implementation=UHD_Signal_Source
|
SignalSource.implementation=UHD_Signal_Source
|
||||||
|
|
||||||
;#When left empty, the device discovery routines will search all vailable transports on the system (ethernet, usb...)
|
;#When left empty, the device discovery routines will search all vailable transports on the system (ethernet, usb...)
|
||||||
SignalSource.device_address=192.168.40.2 ; <- PUT THE IP ADDRESS OF YOUR USRP HERE
|
SignalSource.device_address=192.168.40.2 ; <- PUT THE IP ADDRESS OF YOUR USRP HERE
|
||||||
|
;#item_type: Type and resolution for each of the signal samples.
|
||||||
;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
|
|
||||||
SignalSource.item_type=gr_complex
|
SignalSource.item_type=gr_complex
|
||||||
|
|
||||||
;#RF_channels: Number of RF channels present in the frontend device (i.e. USRP with two frontends)
|
;#RF_channels: Number of RF channels present in the frontend device (i.e. USRP with two frontends)
|
||||||
SignalSource.RF_channels=2
|
SignalSource.RF_channels=2
|
||||||
|
|
||||||
;#sampling_frequency: Original Signal sampling frequency in [Hz]
|
;#sampling_frequency: Original Signal sampling frequency in [Hz]
|
||||||
SignalSource.sampling_frequency=4000000
|
SignalSource.sampling_frequency=4000000
|
||||||
|
|
||||||
;#subdevice: UHD subdevice specification (for USRP dual frontend use A:0 or B:0 or A:0 B:0)
|
;#subdevice: UHD subdevice specification (for USRP dual frontend use A:0 or B:0 or A:0 B:0)
|
||||||
SignalSource.subdevice=A:0 B:0
|
SignalSource.subdevice=A:0 B:0
|
||||||
|
|
||||||
@ -55,10 +50,6 @@ SignalSource.gain0=50
|
|||||||
;#samples: Number of samples to be processed. Notice that 0 indicates no limit
|
;#samples: Number of samples to be processed. Notice that 0 indicates no limit
|
||||||
SignalSource.samples0=0
|
SignalSource.samples0=0
|
||||||
|
|
||||||
;#dump: Dump the Signal source RF channel data to a file. Disable this option in this version
|
|
||||||
SignalSource.dump0=false
|
|
||||||
|
|
||||||
SignalSource.dump_filename0=../data/signal_source0.dat
|
|
||||||
|
|
||||||
;## RF CHANNEL 1 ##
|
;## RF CHANNEL 1 ##
|
||||||
;#freq: RF front-end center frequency in [Hz]
|
;#freq: RF front-end center frequency in [Hz]
|
||||||
@ -70,11 +61,6 @@ SignalSource.gain1=50
|
|||||||
;#samples: Number of samples to be processed. Notice that 0 indicates no limit
|
;#samples: Number of samples to be processed. Notice that 0 indicates no limit
|
||||||
SignalSource.samples1=0
|
SignalSource.samples1=0
|
||||||
|
|
||||||
;#dump: Dump the Signal source RF channel data to a file. Disable this option in this version
|
|
||||||
SignalSource.dump1=false
|
|
||||||
|
|
||||||
SignalSource.dump_filename1=../data/signal_source1.dat
|
|
||||||
|
|
||||||
|
|
||||||
;######### SIGNAL_CONDITIONER 0 CONFIG ############
|
;######### SIGNAL_CONDITIONER 0 CONFIG ############
|
||||||
;## It holds blocks to change data type, filter and resample input data.
|
;## It holds blocks to change data type, filter and resample input data.
|
||||||
@ -107,14 +93,13 @@ InputFilter0.dump_filename=../data/input_filter.dat
|
|||||||
|
|
||||||
;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation.
|
;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation.
|
||||||
;#These options are based on parameters of gnuradio's function: gr_remez.
|
;#These options are based on parameters of gnuradio's function: gr_remez.
|
||||||
;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse
|
;#This function calculates the optimal (in the Chebyshev/minimax sense) FIR filter impulse response given a set of band edges,
|
||||||
;#reponse given a set of band edges, the desired reponse on those bands,
|
;#the desired response on those bands, and the weight given to the error in those bands.
|
||||||
;#and the weight given to the error in those bands.
|
|
||||||
|
|
||||||
;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version.
|
;#input_item_type: Type and resolution for input signal samples.
|
||||||
InputFilter0.input_item_type=gr_complex
|
InputFilter0.input_item_type=gr_complex
|
||||||
|
|
||||||
;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version.
|
;#outut_item_type: Type and resolution for output filtered signal samples.
|
||||||
InputFilter0.output_item_type=gr_complex
|
InputFilter0.output_item_type=gr_complex
|
||||||
|
|
||||||
;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version.
|
;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version.
|
||||||
@ -199,14 +184,13 @@ InputFilter1.dump_filename=../data/input_filter.dat
|
|||||||
|
|
||||||
;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation.
|
;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation.
|
||||||
;#These options are based on parameters of gnuradio's function: gr_remez.
|
;#These options are based on parameters of gnuradio's function: gr_remez.
|
||||||
;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse
|
;#This function calculates the optimal (in the Chebyshev/minimax sense) FIR filter impulse response given a set of band edges,
|
||||||
;#reponse given a set of band edges, the desired reponse on those bands,
|
;#the desired response on those bands, and the weight given to the error in those bands.
|
||||||
;#and the weight given to the error in those bands.
|
|
||||||
|
|
||||||
;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version.
|
;#input_item_type: Type and resolution for input signal samples.
|
||||||
InputFilter1.input_item_type=gr_complex
|
InputFilter1.input_item_type=gr_complex
|
||||||
|
|
||||||
;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version.
|
;#outut_item_type: Type and resolution for output filtered signal samples.
|
||||||
InputFilter1.output_item_type=gr_complex
|
InputFilter1.output_item_type=gr_complex
|
||||||
|
|
||||||
;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version.
|
;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version.
|
||||||
@ -276,9 +260,11 @@ Channels.in_acquisition=1
|
|||||||
|
|
||||||
;#signal:
|
;#signal:
|
||||||
;# "1C" GPS L1 C/A
|
;# "1C" GPS L1 C/A
|
||||||
;# "2S" GPS L2 L2C (M)
|
|
||||||
;# "1B" GALILEO E1 B (I/NAV OS/CS/SoL)
|
;# "1B" GALILEO E1 B (I/NAV OS/CS/SoL)
|
||||||
|
;# "1G" GLONASS L1 C/A
|
||||||
|
;# "2S" GPS L2 L2C (M)
|
||||||
;# "5X" GALILEO E5a I+Q
|
;# "5X" GALILEO E5a I+Q
|
||||||
|
;# "L5" GPS L5
|
||||||
|
|
||||||
;# CHANNEL CONNECTION
|
;# CHANNEL CONNECTION
|
||||||
Channel0.RF_channel_ID=0
|
Channel0.RF_channel_ID=0
|
||||||
@ -299,19 +285,14 @@ Channel3.signal=1C
|
|||||||
|
|
||||||
|
|
||||||
;######### ACQUISITION GLOBAL CONFIG ############
|
;######### ACQUISITION GLOBAL CONFIG ############
|
||||||
|
Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition
|
||||||
;#dump: Enable or disable the acquisition internal data file logging [true] or [false]
|
;#dump: Enable or disable the acquisition internal data file logging [true] or [false]
|
||||||
Acquisition_1C.dump=false
|
;#item_type: Type and resolution for each of the signal samples.
|
||||||
;#filename: Log path and filename
|
|
||||||
Acquisition_1C.dump_filename=./acq_dump.dat
|
|
||||||
;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
|
|
||||||
Acquisition_1C.item_type=gr_complex
|
Acquisition_1C.item_type=gr_complex
|
||||||
;#if: Signal intermediate frequency in [Hz]
|
;#if: Signal intermediate frequency in [Hz]
|
||||||
Acquisition_1C.if=0
|
Acquisition_1C.if=0
|
||||||
;#sampled_ms: Signal block duration for the acquisition signal detection [ms]
|
;#sampled_ms: Signal block duration for the acquisition signal detection [ms]
|
||||||
Acquisition_1C.coherent_integration_time_ms=1
|
Acquisition_1C.coherent_integration_time_ms=1
|
||||||
;#implementation: Acquisition algorithm selection for this channel: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
|
|
||||||
Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition
|
|
||||||
;#threshold: Acquisition threshold. It will be ignored if pfa is defined.
|
;#threshold: Acquisition threshold. It will be ignored if pfa is defined.
|
||||||
Acquisition_1C.threshold=0.01
|
Acquisition_1C.threshold=0.01
|
||||||
;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
|
;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
|
||||||
@ -326,87 +307,65 @@ Acquisition_1C.doppler_step=500
|
|||||||
Acquisition_1C.bit_transition_flag=false
|
Acquisition_1C.bit_transition_flag=false
|
||||||
;#max_dwells: Maximum number of consecutive dwells to be processed. It will be ignored if bit_transition_flag=true
|
;#max_dwells: Maximum number of consecutive dwells to be processed. It will be ignored if bit_transition_flag=true
|
||||||
Acquisition_1C.max_dwells=1
|
Acquisition_1C.max_dwells=1
|
||||||
|
Acquisition_1C.dump=false
|
||||||
|
;#filename: Log path and filename
|
||||||
;######### ACQUISITION CHANNELS CONFIG ######
|
Acquisition_1C.dump_filename=./acq_dump.dat
|
||||||
;#The following options are specific to each channel and overwrite the generic options
|
|
||||||
|
|
||||||
|
|
||||||
;######### TRACKING GLOBAL CONFIG ############
|
;######### TRACKING GLOBAL CONFIG ############
|
||||||
|
|
||||||
;#implementation: Selected tracking algorithm: [GPS_L1_CA_DLL_PLL_Tracking] or [GPS_L1_CA_DLL_PLL_C_Aid_Tracking]
|
|
||||||
Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking
|
Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking
|
||||||
;#item_type: Type and resolution for each of the signal samples.
|
;#item_type: Type and resolution for each of the signal samples.
|
||||||
Tracking_1C.item_type=gr_complex
|
Tracking_1C.item_type=gr_complex
|
||||||
|
|
||||||
;#sampling_frequency: Signal Intermediate Frequency in [Hz]
|
;#sampling_frequency: Signal Intermediate Frequency in [Hz]
|
||||||
Tracking_1C.if=0
|
Tracking_1C.if=0
|
||||||
|
;#pll_bw_hz: PLL loop filter bandwidth [Hz]
|
||||||
|
Tracking_1C.pll_bw_hz=40.0;
|
||||||
|
;#dll_bw_hz: DLL loop filter bandwidth [Hz]
|
||||||
|
Tracking_1C.dll_bw_hz=4.0;
|
||||||
|
;#order: PLL/DLL loop filter order [2] or [3]
|
||||||
|
Tracking_1C.order=3;
|
||||||
|
;#early_late_space_chips: correlator early-late space [chips]. Use [0.5]
|
||||||
|
Tracking_1C.early_late_space_chips=0.5;
|
||||||
;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false]
|
;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false]
|
||||||
Tracking_1C.dump=false
|
Tracking_1C.dump=false
|
||||||
|
|
||||||
;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number.
|
;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number.
|
||||||
Tracking_1C.dump_filename=./tracking_ch_
|
Tracking_1C.dump_filename=./tracking_ch_
|
||||||
|
|
||||||
;#pll_bw_hz: PLL loop filter bandwidth [Hz]
|
|
||||||
Tracking_1C.pll_bw_hz=40.0;
|
|
||||||
|
|
||||||
;#dll_bw_hz: DLL loop filter bandwidth [Hz]
|
|
||||||
Tracking_1C.dll_bw_hz=4.0;
|
|
||||||
|
|
||||||
;#order: PLL/DLL loop filter order [2] or [3]
|
|
||||||
Tracking_1C.order=3;
|
|
||||||
|
|
||||||
;#early_late_space_chips: correlator early-late space [chips]. Use [0.5]
|
|
||||||
Tracking_1C.early_late_space_chips=0.5;
|
|
||||||
|
|
||||||
;######### TELEMETRY DECODER GPS CONFIG ############
|
;######### TELEMETRY DECODER GPS CONFIG ############
|
||||||
;#implementation: Use [GPS_L1_CA_Telemetry_Decoder] for GPS L1 C/A
|
;#implementation: Use [GPS_L1_CA_Telemetry_Decoder] for GPS L1 C/A
|
||||||
TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder
|
TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder
|
||||||
TelemetryDecoder_1C.dump=false
|
TelemetryDecoder_1C.dump=false
|
||||||
|
|
||||||
;######### OBSERVABLES CONFIG ############
|
|
||||||
;#implementation:
|
|
||||||
Observables.implementation=Hybrid_Observables
|
|
||||||
|
|
||||||
|
;######### OBSERVABLES CONFIG ############
|
||||||
|
Observables.implementation=Hybrid_Observables
|
||||||
;#dump: Enable or disable the Observables internal binary data file logging [true] or [false]
|
;#dump: Enable or disable the Observables internal binary data file logging [true] or [false]
|
||||||
Observables.dump=false
|
Observables.dump=false
|
||||||
|
|
||||||
;#dump_filename: Log path and filename.
|
;#dump_filename: Log path and filename.
|
||||||
Observables.dump_filename=./observables.dat
|
Observables.dump_filename=./observables.dat
|
||||||
|
|
||||||
|
|
||||||
;######### PVT CONFIG ############
|
;######### PVT CONFIG ############
|
||||||
;#implementation: Position Velocity and Time (PVT) implementation:
|
|
||||||
PVT.implementation=RTKLIB_PVT
|
PVT.implementation=RTKLIB_PVT
|
||||||
|
|
||||||
PVT.positioning_mode=PPP_Static ; options: Single, Static, Kinematic, PPP_Static, PPP_Kinematic
|
PVT.positioning_mode=PPP_Static ; options: Single, Static, Kinematic, PPP_Static, PPP_Kinematic
|
||||||
PVT.iono_model=Broadcast ; options: OFF, Broadcast, SBAS, Iono-Free-LC, Estimate_STEC, IONEX
|
PVT.iono_model=Broadcast ; options: OFF, Broadcast, SBAS, Iono-Free-LC, Estimate_STEC, IONEX
|
||||||
PVT.trop_model=Saastamoinen ; options: OFF, Saastamoinen, SBAS, Estimate_ZTD, Estimate_ZTD_Grad
|
PVT.trop_model=Saastamoinen ; options: OFF, Saastamoinen, SBAS, Estimate_ZTD, Estimate_ZTD_Grad
|
||||||
|
|
||||||
;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms]
|
;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms]
|
||||||
PVT.output_rate_ms=100
|
PVT.output_rate_ms=100
|
||||||
|
|
||||||
;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms.
|
;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms.
|
||||||
PVT.display_rate_ms=500
|
PVT.display_rate_ms=500
|
||||||
|
|
||||||
;# KML, GeoJSON, NMEA and RTCM output configuration
|
;# KML, GeoJSON, NMEA and RTCM output configuration
|
||||||
|
|
||||||
;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump.
|
|
||||||
PVT.dump_filename=./PVT
|
|
||||||
|
|
||||||
;#nmea_dump_filename: NMEA log path and filename
|
;#nmea_dump_filename: NMEA log path and filename
|
||||||
PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea;
|
PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea;
|
||||||
|
|
||||||
;#flag_nmea_tty_port: Enable or disable the NMEA log to a serial TTY port (Can be used with real hardware or virtual one)
|
;#flag_nmea_tty_port: Enable or disable the NMEA log to a serial TTY port (Can be used with real hardware or virtual one)
|
||||||
PVT.flag_nmea_tty_port=false;
|
PVT.flag_nmea_tty_port=false;
|
||||||
|
|
||||||
;#nmea_dump_devname: serial device descriptor for NMEA logging
|
;#nmea_dump_devname: serial device descriptor for NMEA logging
|
||||||
PVT.nmea_dump_devname=/dev/pts/4
|
PVT.nmea_dump_devname=/dev/pts/4
|
||||||
|
|
||||||
PVT.flag_rtcm_server=true
|
PVT.flag_rtcm_server=true
|
||||||
PVT.flag_rtcm_tty_port=false
|
PVT.flag_rtcm_tty_port=false
|
||||||
PVT.rtcm_dump_devname=/dev/pts/1
|
PVT.rtcm_dump_devname=/dev/pts/1
|
||||||
|
|
||||||
;#dump: Enable or disable the PVT internal binary data file logging [true] or [false]
|
;#dump: Enable or disable the PVT internal binary data file logging [true] or [false]
|
||||||
PVT.dump=false
|
PVT.dump=false
|
||||||
|
;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump.
|
||||||
|
PVT.dump_filename=./PVT
|
||||||
|
@ -25,29 +25,22 @@ GNSS-SDR.SUPL_LAC=0x59e2
|
|||||||
GNSS-SDR.SUPL_CI=0x31b0
|
GNSS-SDR.SUPL_CI=0x31b0
|
||||||
|
|
||||||
;######### SIGNAL_SOURCE CONFIG ############
|
;######### SIGNAL_SOURCE CONFIG ############
|
||||||
;#implementation: Use [File_Signal_Source] or [UHD_Signal_Source] or [GN3S_Signal_Source] (experimental)
|
;#implementation
|
||||||
SignalSource.implementation=Flexiband_Signal_Source
|
SignalSource.implementation=Flexiband_Signal_Source
|
||||||
|
|
||||||
SignalSource.flag_read_file=true
|
SignalSource.flag_read_file=true
|
||||||
SignalSource.signal_file=/media/javier/SISTEMA/signals/fraunhofer/L125_III1b_210s.usb ; <- PUT YOUR FILE HERE
|
SignalSource.signal_file=/media/javier/SISTEMA/signals/fraunhofer/L125_III1b_210s.usb ; <- PUT YOUR FILE HERE
|
||||||
|
|
||||||
;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
|
;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
|
||||||
SignalSource.item_type=gr_complex
|
SignalSource.item_type=gr_complex
|
||||||
|
|
||||||
;# FPGA firmware file
|
;# FPGA firmware file
|
||||||
SignalSource.firmware_file=flexiband_III-1b.bit
|
SignalSource.firmware_file=flexiband_III-1b.bit
|
||||||
|
|
||||||
;#RF_channels: Number of RF channels present in the frontend device, must agree the FPGA firmware file
|
;#RF_channels: Number of RF channels present in the frontend device, must agree the FPGA firmware file
|
||||||
SignalSource.RF_channels=1
|
SignalSource.RF_channels=1
|
||||||
|
|
||||||
;#frontend channels gain. Not usable yet!
|
;#frontend channels gain. Not usable yet!
|
||||||
SignalSource.gain1=0
|
SignalSource.gain1=0
|
||||||
SignalSource.gain2=0
|
SignalSource.gain2=0
|
||||||
SignalSource.gain3=0
|
SignalSource.gain3=0
|
||||||
|
|
||||||
;#frontend channels AGC
|
;#frontend channels AGC
|
||||||
SignalSource.AGC=true
|
SignalSource.AGC=true
|
||||||
|
|
||||||
;# USB 3.0 packet buffer size (number of SuperSpeed packets)
|
;# USB 3.0 packet buffer size (number of SuperSpeed packets)
|
||||||
SignalSource.usb_packet_buffer=128
|
SignalSource.usb_packet_buffer=128
|
||||||
|
|
||||||
@ -81,13 +74,13 @@ InputFilter0.dump_filename=../data/input_filter_ch0.dat
|
|||||||
|
|
||||||
;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation.
|
;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation.
|
||||||
;#These options are based on parameters of gnuradio's function: gr_remez.
|
;#These options are based on parameters of gnuradio's function: gr_remez.
|
||||||
;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges,
|
;#This function calculates the optimal (in the Chebyshev/minimax sense) FIR filter impulse response given a set of band edges,
|
||||||
;#the desired reponse on those bands, and the weight given to the error in those bands.
|
;#the desired response on those bands, and the weight given to the error in those bands.
|
||||||
|
|
||||||
;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version.
|
;#input_item_type: Type and resolution for input signal samples.
|
||||||
InputFilter0.input_item_type=gr_complex
|
InputFilter0.input_item_type=gr_complex
|
||||||
|
|
||||||
;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version.
|
;#outut_item_type: Type and resolution for output filtered signal samples.
|
||||||
InputFilter0.output_item_type=gr_complex
|
InputFilter0.output_item_type=gr_complex
|
||||||
|
|
||||||
;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version.
|
;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version.
|
||||||
@ -130,11 +123,7 @@ InputFilter0.grid_density=16
|
|||||||
|
|
||||||
;#The following options are used only in Freq_Xlating_Fir_Filter implementation.
|
;#The following options are used only in Freq_Xlating_Fir_Filter implementation.
|
||||||
;#InputFilter0.IF is the intermediate frequency (in Hz) shifted down to zero Hz
|
;#InputFilter0.IF is the intermediate frequency (in Hz) shifted down to zero Hz
|
||||||
;FOR USE GNSS-SDR WITH RTLSDR DONGLES USER MUST SET THE CALIBRATED SAMPLE RATE HERE
|
|
||||||
; i.e. using front-end-cal as reported here:http://www.cttc.es/publication/turning-a-television-into-a-gnss-receiver/
|
|
||||||
InputFilter0.sampling_frequency=20000000
|
InputFilter0.sampling_frequency=20000000
|
||||||
;# IF deviation due to front-end LO inaccuracies [HZ]
|
|
||||||
;#InputFilter0.IF=-205000
|
|
||||||
InputFilter0.IF=0
|
InputFilter0.IF=0
|
||||||
|
|
||||||
;# Decimation factor after the frequency tranaslating block
|
;# Decimation factor after the frequency tranaslating block
|
||||||
@ -174,13 +163,13 @@ InputFilter1.dump_filename=../data/input_filter_ch1.dat
|
|||||||
|
|
||||||
;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation.
|
;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation.
|
||||||
;#These options are based on parameters of gnuradio's function: gr_remez.
|
;#These options are based on parameters of gnuradio's function: gr_remez.
|
||||||
;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges,
|
;#This function calculates the optimal (in the Chebyshev/minimax sense) FIR filter impulse response given a set of band edges,
|
||||||
;#the desired reponse on those bands, and the weight given to the error in those bands.
|
;#the desired response on those bands, and the weight given to the error in those bands.
|
||||||
|
|
||||||
;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version.
|
;#input_item_type: Type and resolution for input signal samples.
|
||||||
InputFilter1.input_item_type=gr_complex
|
InputFilter1.input_item_type=gr_complex
|
||||||
|
|
||||||
;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version.
|
;#outut_item_type: Type and resolution for output filtered signal samples.
|
||||||
InputFilter1.output_item_type=gr_complex
|
InputFilter1.output_item_type=gr_complex
|
||||||
|
|
||||||
;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version.
|
;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version.
|
||||||
@ -222,9 +211,6 @@ InputFilter1.filter_type=bandpass
|
|||||||
InputFilter1.grid_density=16
|
InputFilter1.grid_density=16
|
||||||
|
|
||||||
;#The following options are used only in Freq_Xlating_Fir_Filter implementation.
|
;#The following options are used only in Freq_Xlating_Fir_Filter implementation.
|
||||||
;#InputFilter0.IF is the intermediate frequency (in Hz) shifted down to zero Hz
|
|
||||||
;FOR USE GNSS-SDR WITH RTLSDR DONGLES USER MUST SET THE CALIBRATED SAMPLE RATE HERE
|
|
||||||
; i.e. using front-end-cal as reported here:http://www.cttc.es/publication/turning-a-television-into-a-gnss-receiver/
|
|
||||||
InputFilter1.sampling_frequency=20000000
|
InputFilter1.sampling_frequency=20000000
|
||||||
;# IF deviation due to front-end LO inaccuracies [HZ]
|
;# IF deviation due to front-end LO inaccuracies [HZ]
|
||||||
InputFilter1.IF=0
|
InputFilter1.IF=0
|
||||||
@ -261,10 +247,10 @@ InputFilter2.dump=false
|
|||||||
;#dump_filename: Log path and filename.
|
;#dump_filename: Log path and filename.
|
||||||
InputFilter2.dump_filename=../data/input_filter_ch2.dat
|
InputFilter2.dump_filename=../data/input_filter_ch2.dat
|
||||||
|
|
||||||
;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version.
|
;#input_item_type: Type and resolution for input signal samples.
|
||||||
InputFilter2.input_item_type=gr_complex
|
InputFilter2.input_item_type=gr_complex
|
||||||
|
|
||||||
;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version.
|
;#outut_item_type: Type and resolution for output filtered signal samples..
|
||||||
InputFilter2.output_item_type=gr_complex
|
InputFilter2.output_item_type=gr_complex
|
||||||
|
|
||||||
;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version.
|
;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version.
|
||||||
@ -306,9 +292,6 @@ InputFilter2.filter_type=bandpass
|
|||||||
InputFilter2.grid_density=16
|
InputFilter2.grid_density=16
|
||||||
|
|
||||||
;#The following options are used only in Freq_Xlating_Fir_Filter implementation.
|
;#The following options are used only in Freq_Xlating_Fir_Filter implementation.
|
||||||
;#InputFilter0.IF is the intermediate frequency (in Hz) shifted down to zero Hz
|
|
||||||
;FOR USE GNSS-SDR WITH RTLSDR DONGLES USER MUST SET THE CALIBRATED SAMPLE RATE HERE
|
|
||||||
; i.e. using front-end-cal as reported here:http://www.cttc.es/publication/turning-a-television-into-a-gnss-receiver/
|
|
||||||
InputFilter2.sampling_frequency=40000000
|
InputFilter2.sampling_frequency=40000000
|
||||||
;# IF deviation due to front-end LO inaccuracies [HZ]
|
;# IF deviation due to front-end LO inaccuracies [HZ]
|
||||||
InputFilter2.IF=0
|
InputFilter2.IF=0
|
||||||
@ -334,11 +317,13 @@ Channels_5X.count=0
|
|||||||
;#in_acquisition: Number of channels simultaneously acquiring for the whole receiver
|
;#in_acquisition: Number of channels simultaneously acquiring for the whole receiver
|
||||||
Channels.in_acquisition=1
|
Channels.in_acquisition=1
|
||||||
|
|
||||||
;# signal:
|
;#signal:
|
||||||
;# "1C" GPS L1 C/A
|
;# "1C" GPS L1 C/A
|
||||||
;# "2S" GPS L2 L2C (M)
|
|
||||||
;# "1B" GALILEO E1 B (I/NAV OS/CS/SoL)
|
;# "1B" GALILEO E1 B (I/NAV OS/CS/SoL)
|
||||||
|
;# "1G" GLONASS L1 C/A
|
||||||
|
;# "2S" GPS L2 L2C (M)
|
||||||
;# "5X" GALILEO E5a I+Q
|
;# "5X" GALILEO E5a I+Q
|
||||||
|
;# "L5" GPS L5
|
||||||
;# CHANNEL NUMBERING ORDER: GPS L1 C/A, GPS L2 L2C (M), GALILEO E1 B, GALILEO E5a
|
;# CHANNEL NUMBERING ORDER: GPS L1 C/A, GPS L2 L2C (M), GALILEO E1 B, GALILEO E5a
|
||||||
|
|
||||||
;# CHANNEL CONNECTION
|
;# CHANNEL CONNECTION
|
||||||
@ -388,31 +373,26 @@ Channel39.RF_channel_ID=2
|
|||||||
;#The following options are specific to each channel and overwrite the generic options
|
;#The following options are specific to each channel and overwrite the generic options
|
||||||
|
|
||||||
;# GPS L1 CA
|
;# GPS L1 CA
|
||||||
Acquisition_1C.dump=false
|
Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition
|
||||||
Acquisition_1C.dump_filename=./acq_dump.dat
|
|
||||||
Acquisition_1C.item_type=gr_complex
|
Acquisition_1C.item_type=gr_complex
|
||||||
Acquisition_1C.if=0
|
Acquisition_1C.if=0
|
||||||
Acquisition_1C.coherent_integration_time_ms=1
|
Acquisition_1C.coherent_integration_time_ms=1
|
||||||
Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition
|
|
||||||
Acquisition_1C.threshold=0.005
|
Acquisition_1C.threshold=0.005
|
||||||
Acquisition_1C.doppler_max=5000
|
Acquisition_1C.doppler_max=5000
|
||||||
Acquisition_1C.doppler_step=250
|
Acquisition_1C.doppler_step=250
|
||||||
Acquisition_1C.bit_transition_flag=false
|
Acquisition_1C.bit_transition_flag=false
|
||||||
Acquisition_1C.max_dwells=1
|
Acquisition_1C.max_dwells=1
|
||||||
|
Acquisition_1C.dump=false
|
||||||
|
Acquisition_1C.dump_filename=./acq_dump.dat
|
||||||
|
|
||||||
;# Galileo E1
|
;# Galileo E1
|
||||||
;#dump: Enable or disable the acquisition internal data file logging [true] or [false]
|
Acquisition_1B.implementation=Galileo_E1_PCPS_Ambiguous_Acquisition
|
||||||
Acquisition_1B.dump=false
|
;#item_type: Type and resolution for each of the signal samples.
|
||||||
;#filename: Log path and filename
|
|
||||||
Acquisition_1B.dump_filename=./acq_dump.dat
|
|
||||||
;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
|
|
||||||
Acquisition_1B.item_type=gr_complex
|
Acquisition_1B.item_type=gr_complex
|
||||||
;#if: Signal intermediate frequency in [Hz]
|
;#if: Signal intermediate frequency in [Hz]
|
||||||
Acquisition_1B.if=0
|
Acquisition_1B.if=0
|
||||||
;#sampled_ms: Signal block duration for the acquisition signal detection [ms]
|
;#sampled_ms: Signal block duration for the acquisition signal detection [ms]
|
||||||
Acquisition_1B.sampled_ms=4
|
Acquisition_1B.sampled_ms=4
|
||||||
;#implementation: Acquisition algorithm selection for this channel: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
|
|
||||||
Acquisition_1B.implementation=Galileo_E1_PCPS_Ambiguous_Acquisition
|
|
||||||
;#threshold: Acquisition threshold
|
;#threshold: Acquisition threshold
|
||||||
;Acquisition_1B.threshold=0
|
;Acquisition_1B.threshold=0
|
||||||
;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
|
;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
|
||||||
@ -421,29 +401,31 @@ Acquisition_1B.pfa=0.0000002
|
|||||||
Acquisition_1B.doppler_max=5000
|
Acquisition_1B.doppler_max=5000
|
||||||
;#doppler_max: Doppler step in the grid search [Hz]
|
;#doppler_max: Doppler step in the grid search [Hz]
|
||||||
Acquisition_1B.doppler_step=125
|
Acquisition_1B.doppler_step=125
|
||||||
|
;#dump: Enable or disable the acquisition internal data file logging [true] or [false]
|
||||||
|
Acquisition_1B.dump=false
|
||||||
|
;#filename: Log path and filename
|
||||||
|
Acquisition_1B.dump_filename=./acq_dump.dat
|
||||||
|
|
||||||
|
|
||||||
;# GPS L2C M
|
;# GPS L2C M
|
||||||
Acquisition_2S.dump=false
|
Acquisition_2S.implementation=GPS_L2_M_PCPS_Acquisition
|
||||||
Acquisition_2S.dump_filename=./acq_dump.dat
|
|
||||||
Acquisition_2S.item_type=gr_complex
|
Acquisition_2S.item_type=gr_complex
|
||||||
Acquisition_2S.if=0
|
Acquisition_2S.if=0
|
||||||
Acquisition_2S.implementation=GPS_L2_M_PCPS_Acquisition
|
|
||||||
Acquisition_2S.threshold=0.00074
|
Acquisition_2S.threshold=0.00074
|
||||||
;Acquisition_2S.pfa=0.001
|
;Acquisition_2S.pfa=0.001
|
||||||
Acquisition_2S.doppler_max=5000
|
Acquisition_2S.doppler_max=5000
|
||||||
Acquisition_2S.doppler_min=-5000
|
Acquisition_2S.doppler_min=-5000
|
||||||
Acquisition_2S.doppler_step=60
|
Acquisition_2S.doppler_step=60
|
||||||
Acquisition_2S.max_dwells=1
|
Acquisition_2S.max_dwells=1
|
||||||
|
Acquisition_2S.dump=false
|
||||||
|
Acquisition_2S.dump_filename=./acq_dump.dat
|
||||||
|
|
||||||
|
|
||||||
;# GALILEO E5a
|
;# GALILEO E5a
|
||||||
Acquisition_5X.dump=false
|
Acquisition_5X.implementation=Galileo_E5a_Noncoherent_IQ_Acquisition_CAF
|
||||||
Acquisition_5X.dump_filename=./acq_dump.dat
|
|
||||||
Acquisition_5X.item_type=gr_complex
|
Acquisition_5X.item_type=gr_complex
|
||||||
Acquisition_5X.if=0
|
Acquisition_5X.if=0
|
||||||
Acquisition_5X.coherent_integration_time_ms=1
|
Acquisition_5X.coherent_integration_time_ms=1
|
||||||
Acquisition_5X.implementation=Galileo_E5a_Noncoherent_IQ_Acquisition_CAF
|
|
||||||
Acquisition_5X.threshold=0.009
|
Acquisition_5X.threshold=0.009
|
||||||
Acquisition_5X.doppler_max=5000
|
Acquisition_5X.doppler_max=5000
|
||||||
Acquisition_5X.doppler_step=125
|
Acquisition_5X.doppler_step=125
|
||||||
@ -451,32 +433,29 @@ Acquisition_5X.bit_transition_flag=false
|
|||||||
Acquisition_5X.max_dwells=1
|
Acquisition_5X.max_dwells=1
|
||||||
Acquisition_5X.CAF_window_hz=0 ; **Only for E5a** Resolves doppler ambiguity averaging the specified BW in the winner code delay. If set to 0 CAF filter is desactivated. Recommended value 3000 Hz
|
Acquisition_5X.CAF_window_hz=0 ; **Only for E5a** Resolves doppler ambiguity averaging the specified BW in the winner code delay. If set to 0 CAF filter is desactivated. Recommended value 3000 Hz
|
||||||
Acquisition_5X.Zero_padding=0 ; **Only for E5a** Avoids power loss and doppler ambiguity in bit transitions by correlating one code with twice the input data length, ensuring that at least one full code is present without transitions. If set to 1 it is ON, if set to 0 it is OFF.
|
Acquisition_5X.Zero_padding=0 ; **Only for E5a** Avoids power loss and doppler ambiguity in bit transitions by correlating one code with twice the input data length, ensuring that at least one full code is present without transitions. If set to 1 it is ON, if set to 0 it is OFF.
|
||||||
|
Acquisition_5X.dump=false
|
||||||
|
Acquisition_5X.dump_filename=./acq_dump.dat
|
||||||
|
|
||||||
|
|
||||||
;######### TRACKING CONFIG ############
|
;######### TRACKING CONFIG ############
|
||||||
|
|
||||||
;######### GPS L1 C/A GENERIC TRACKING CONFIG ############
|
;######### GPS L1 C/A GENERIC TRACKING CONFIG ############
|
||||||
Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking
|
Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking
|
||||||
Tracking_1C.item_type=gr_complex
|
Tracking_1C.item_type=gr_complex
|
||||||
Tracking_1C.if=0
|
Tracking_1C.if=0
|
||||||
Tracking_1C.dump=false
|
|
||||||
Tracking_1C.dump_filename=../data/epl_tracking_ch_
|
|
||||||
Tracking_1C.pll_bw_hz=40.0;
|
Tracking_1C.pll_bw_hz=40.0;
|
||||||
Tracking_1C.dll_bw_hz=3.0;
|
Tracking_1C.dll_bw_hz=3.0;
|
||||||
Tracking_1C.order=3;
|
Tracking_1C.order=3;
|
||||||
Tracking_1C.early_late_space_chips=0.5;
|
Tracking_1C.early_late_space_chips=0.5;
|
||||||
|
Tracking_1C.dump=false
|
||||||
|
Tracking_1C.dump_filename=../data/epl_tracking_ch_
|
||||||
|
|
||||||
|
|
||||||
;######### GALILEO E1 TRK CONFIG ############
|
;######### GALILEO E1 TRK CONFIG ############
|
||||||
|
|
||||||
;#implementation: Selected tracking algorithm: [GPS_L1_CA_DLL_PLL_Tracking] or [GPS_L1_CA_DLL_PLL_C_Aid_Tracking] or [GPS_L1_CA_TCP_CONNECTOR_Tracking] or [Galileo_E1_DLL_PLL_VEML_Tracking]
|
|
||||||
Tracking_1B.implementation=Galileo_E1_DLL_PLL_VEML_Tracking
|
Tracking_1B.implementation=Galileo_E1_DLL_PLL_VEML_Tracking
|
||||||
;#item_type: Type and resolution for each of the signal samples. Use only [gr_complex] in this version.
|
;#item_type: Type and resolution for each of the signal samples.
|
||||||
Tracking_1B.item_type=gr_complex
|
Tracking_1B.item_type=gr_complex
|
||||||
;#sampling_frequency: Signal Intermediate Frequency in [Hz]
|
;#sampling_frequency: Signal Intermediate Frequency in [Hz]
|
||||||
Tracking_1B.if=0
|
Tracking_1B.if=0
|
||||||
;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false]
|
|
||||||
Tracking_1B.dump=false
|
|
||||||
;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number.
|
|
||||||
Tracking_1B.dump_filename=../data/veml_tracking_ch_
|
|
||||||
;#pll_bw_hz: PLL loop filter bandwidth [Hz]
|
;#pll_bw_hz: PLL loop filter bandwidth [Hz]
|
||||||
Tracking_1B.pll_bw_hz=15.0;
|
Tracking_1B.pll_bw_hz=15.0;
|
||||||
;#dll_bw_hz: DLL loop filter bandwidth [Hz]
|
;#dll_bw_hz: DLL loop filter bandwidth [Hz]
|
||||||
@ -487,24 +466,28 @@ Tracking_1B.order=3;
|
|||||||
Tracking_1B.early_late_space_chips=0.15;
|
Tracking_1B.early_late_space_chips=0.15;
|
||||||
;#very_early_late_space_chips: only for [Galileo_E1_DLL_PLL_VEML_Tracking], correlator very early-late space [chips]. Use [0.6]
|
;#very_early_late_space_chips: only for [Galileo_E1_DLL_PLL_VEML_Tracking], correlator very early-late space [chips]. Use [0.6]
|
||||||
Tracking_1B.very_early_late_space_chips=0.6;
|
Tracking_1B.very_early_late_space_chips=0.6;
|
||||||
|
;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false]
|
||||||
|
Tracking_1B.dump=false
|
||||||
|
;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number.
|
||||||
|
Tracking_1B.dump_filename=../data/veml_tracking_ch_
|
||||||
|
|
||||||
|
|
||||||
;######### GPS L2C GENERIC TRACKING CONFIG ############
|
;######### GPS L2C GENERIC TRACKING CONFIG ############
|
||||||
Tracking_2S.implementation=GPS_L2_M_DLL_PLL_Tracking
|
Tracking_2S.implementation=GPS_L2_M_DLL_PLL_Tracking
|
||||||
Tracking_2S.item_type=gr_complex
|
Tracking_2S.item_type=gr_complex
|
||||||
Tracking_2S.if=0
|
Tracking_2S.if=0
|
||||||
Tracking_2S.dump=false
|
|
||||||
Tracking_2S.dump_filename=./tracking_ch_
|
|
||||||
Tracking_2S.pll_bw_hz=2.0;
|
Tracking_2S.pll_bw_hz=2.0;
|
||||||
Tracking_2S.dll_bw_hz=0.25;
|
Tracking_2S.dll_bw_hz=0.25;
|
||||||
Tracking_2S.order=2;
|
Tracking_2S.order=2;
|
||||||
Tracking_2S.early_late_space_chips=0.5;
|
Tracking_2S.early_late_space_chips=0.5;
|
||||||
|
Tracking_2S.dump=false
|
||||||
|
Tracking_2S.dump_filename=./tracking_ch_
|
||||||
|
|
||||||
|
|
||||||
;######### GALILEO E5 TRK CONFIG ############
|
;######### GALILEO E5 TRK CONFIG ############
|
||||||
Tracking_5X.implementation=Galileo_E5a_DLL_PLL_Tracking
|
Tracking_5X.implementation=Galileo_E5a_DLL_PLL_Tracking
|
||||||
Tracking_5X.item_type=gr_complex
|
Tracking_5X.item_type=gr_complex
|
||||||
Tracking_5X.if=0
|
Tracking_5X.if=0
|
||||||
Tracking_5X.dump=false
|
|
||||||
Tracking_5X.dump_filename=./tracking_ch_
|
|
||||||
Tracking_5X.pll_bw_hz_init=20.0; **Only for E5a** PLL loop filter bandwidth during initialization [Hz]
|
Tracking_5X.pll_bw_hz_init=20.0; **Only for E5a** PLL loop filter bandwidth during initialization [Hz]
|
||||||
Tracking_5X.dll_bw_hz_init=20.0; **Only for E5a** DLL loop filter bandwidth during initialization [Hz]
|
Tracking_5X.dll_bw_hz_init=20.0; **Only for E5a** DLL loop filter bandwidth during initialization [Hz]
|
||||||
Tracking_5X.ti_ms=1; **Only for E5a** loop filter integration time after initialization (secondary code delay search)[ms]
|
Tracking_5X.ti_ms=1; **Only for E5a** loop filter integration time after initialization (secondary code delay search)[ms]
|
||||||
@ -512,6 +495,9 @@ Tracking_5X.pll_bw_hz=20.0;
|
|||||||
Tracking_5X.dll_bw_hz=20.0;
|
Tracking_5X.dll_bw_hz=20.0;
|
||||||
Tracking_5X.order=2;
|
Tracking_5X.order=2;
|
||||||
Tracking_5X.early_late_space_chips=0.5;
|
Tracking_5X.early_late_space_chips=0.5;
|
||||||
|
Tracking_5X.dump=false
|
||||||
|
Tracking_5X.dump_filename=./tracking_ch_
|
||||||
|
|
||||||
|
|
||||||
;######### TELEMETRY DECODER CONFIG ############
|
;######### TELEMETRY DECODER CONFIG ############
|
||||||
TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder
|
TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder
|
||||||
@ -526,8 +512,8 @@ TelemetryDecoder_2S.dump=false
|
|||||||
TelemetryDecoder_5X.implementation=Galileo_E5a_Telemetry_Decoder
|
TelemetryDecoder_5X.implementation=Galileo_E5a_Telemetry_Decoder
|
||||||
TelemetryDecoder_5X.dump=false
|
TelemetryDecoder_5X.dump=false
|
||||||
|
|
||||||
|
|
||||||
;######### OBSERVABLES CONFIG ############
|
;######### OBSERVABLES CONFIG ############
|
||||||
;#implementation:
|
|
||||||
Observables.implementation=Hybrid_Observables
|
Observables.implementation=Hybrid_Observables
|
||||||
;#dump: Enable or disable the Observables internal binary data file logging [true] or [false]
|
;#dump: Enable or disable the Observables internal binary data file logging [true] or [false]
|
||||||
Observables.dump=false
|
Observables.dump=false
|
||||||
@ -536,36 +522,25 @@ Observables.dump_filename=./observables.dat
|
|||||||
|
|
||||||
|
|
||||||
;######### PVT CONFIG ############
|
;######### PVT CONFIG ############
|
||||||
;#implementation: Position Velocity and Time (PVT) implementation:
|
|
||||||
PVT.implementation=RTKLIB_PVT
|
PVT.implementation=RTKLIB_PVT
|
||||||
|
|
||||||
PVT.positioning_mode=PPP_Static ; options: Single, Static, Kinematic, PPP_Static, PPP_Kinematic
|
PVT.positioning_mode=PPP_Static ; options: Single, Static, Kinematic, PPP_Static, PPP_Kinematic
|
||||||
PVT.iono_model=Broadcast ; options: OFF, Broadcast, SBAS, Iono-Free-LC, Estimate_STEC, IONEX
|
PVT.iono_model=Broadcast ; options: OFF, Broadcast, SBAS, Iono-Free-LC, Estimate_STEC, IONEX
|
||||||
PVT.trop_model=Saastamoinen ; options: OFF, Saastamoinen, SBAS, Estimate_ZTD, Estimate_ZTD_Grad
|
PVT.trop_model=Saastamoinen ; options: OFF, Saastamoinen, SBAS, Estimate_ZTD, Estimate_ZTD_Grad
|
||||||
|
|
||||||
;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms]
|
;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms]
|
||||||
PVT.output_rate_ms=100
|
PVT.output_rate_ms=100
|
||||||
|
|
||||||
;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms.
|
;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms.
|
||||||
PVT.display_rate_ms=100
|
PVT.display_rate_ms=100
|
||||||
|
|
||||||
;# KML, GeoJSON, NMEA and RTCM output configuration
|
;# KML, GeoJSON, NMEA and RTCM output configuration
|
||||||
|
|
||||||
;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump.
|
|
||||||
PVT.dump_filename=./PVT
|
|
||||||
|
|
||||||
;#nmea_dump_filename: NMEA log path and filename
|
;#nmea_dump_filename: NMEA log path and filename
|
||||||
PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea;
|
PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea;
|
||||||
|
|
||||||
;#flag_nmea_tty_port: Enable or disable the NMEA log to a serial TTY port (Can be used with real hardware or virtual one)
|
;#flag_nmea_tty_port: Enable or disable the NMEA log to a serial TTY port (Can be used with real hardware or virtual one)
|
||||||
PVT.flag_nmea_tty_port=false;
|
PVT.flag_nmea_tty_port=false;
|
||||||
|
|
||||||
;#nmea_dump_devname: serial device descriptor for NMEA logging
|
;#nmea_dump_devname: serial device descriptor for NMEA logging
|
||||||
PVT.nmea_dump_devname=/dev/pts/4
|
PVT.nmea_dump_devname=/dev/pts/4
|
||||||
|
|
||||||
PVT.flag_rtcm_server=false
|
PVT.flag_rtcm_server=false
|
||||||
PVT.flag_rtcm_tty_port=false
|
PVT.flag_rtcm_tty_port=false
|
||||||
PVT.rtcm_dump_devname=/dev/pts/1
|
PVT.rtcm_dump_devname=/dev/pts/1
|
||||||
|
|
||||||
;#dump: Enable or disable the PVT internal binary data file logging [true] or [false]
|
;#dump: Enable or disable the PVT internal binary data file logging [true] or [false]
|
||||||
PVT.dump=false
|
PVT.dump=false
|
||||||
|
;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump.
|
||||||
|
PVT.dump_filename=./PVT
|
||||||
|
@ -25,29 +25,22 @@ GNSS-SDR.SUPL_LAC=0x59e2
|
|||||||
GNSS-SDR.SUPL_CI=0x31b0
|
GNSS-SDR.SUPL_CI=0x31b0
|
||||||
|
|
||||||
;######### SIGNAL_SOURCE CONFIG ############
|
;######### SIGNAL_SOURCE CONFIG ############
|
||||||
;#implementation: Use [File_Signal_Source] or [UHD_Signal_Source] or [GN3S_Signal_Source] (experimental)
|
;#implementation
|
||||||
SignalSource.implementation=Flexiband_Signal_Source
|
SignalSource.implementation=Flexiband_Signal_Source
|
||||||
|
|
||||||
SignalSource.flag_read_file=true
|
SignalSource.flag_read_file=true
|
||||||
SignalSource.signal_file=/home/javier/signals/20140923_20-24-17_L125_roof_210s.usb ; <- PUT YOUR FILE HERE
|
SignalSource.signal_file=/home/javier/signals/20140923_20-24-17_L125_roof_210s.usb ; <- PUT YOUR FILE HERE
|
||||||
|
|
||||||
;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
|
;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
|
||||||
SignalSource.item_type=gr_complex
|
SignalSource.item_type=gr_complex
|
||||||
|
|
||||||
;# FPGA firmware file
|
;# FPGA firmware file
|
||||||
SignalSource.firmware_file=flexiband_III-1b.bit
|
SignalSource.firmware_file=flexiband_III-1b.bit
|
||||||
|
|
||||||
;#RF_channels: Number of RF channels present in the frontend device, must agree the FPGA firmware file
|
;#RF_channels: Number of RF channels present in the frontend device, must agree the FPGA firmware file
|
||||||
SignalSource.RF_channels=2
|
SignalSource.RF_channels=2
|
||||||
|
|
||||||
;#frontend channels gain. Not usable yet!
|
;#frontend channels gain. Not usable yet!
|
||||||
SignalSource.gain1=0
|
SignalSource.gain1=0
|
||||||
SignalSource.gain2=0
|
SignalSource.gain2=0
|
||||||
SignalSource.gain3=0
|
SignalSource.gain3=0
|
||||||
|
|
||||||
;#frontend channels AGC
|
;#frontend channels AGC
|
||||||
SignalSource.AGC=true
|
SignalSource.AGC=true
|
||||||
|
|
||||||
;# USB 3.0 packet buffer size (number of SuperSpeed packets)
|
;# USB 3.0 packet buffer size (number of SuperSpeed packets)
|
||||||
SignalSource.usb_packet_buffer=128
|
SignalSource.usb_packet_buffer=128
|
||||||
|
|
||||||
@ -81,13 +74,13 @@ InputFilter0.dump_filename=../data/input_filter_ch0.dat
|
|||||||
|
|
||||||
;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation.
|
;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation.
|
||||||
;#These options are based on parameters of gnuradio's function: gr_remez.
|
;#These options are based on parameters of gnuradio's function: gr_remez.
|
||||||
;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges,
|
;#This function calculates the optimal (in the Chebyshev/minimax sense) FIR filter impulse response given a set of band edges,
|
||||||
;#the desired reponse on those bands, and the weight given to the error in those bands.
|
;#the desired response on those bands, and the weight given to the error in those bands.
|
||||||
|
|
||||||
;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version.
|
;#input_item_type: Type and resolution for input signal samples.
|
||||||
InputFilter0.input_item_type=gr_complex
|
InputFilter0.input_item_type=gr_complex
|
||||||
|
|
||||||
;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version.
|
;#outut_item_type: Type and resolution for output filtered signal samples.
|
||||||
InputFilter0.output_item_type=gr_complex
|
InputFilter0.output_item_type=gr_complex
|
||||||
|
|
||||||
;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version.
|
;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version.
|
||||||
@ -173,13 +166,13 @@ InputFilter1.dump_filename=../data/input_filter_ch1.dat
|
|||||||
|
|
||||||
;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation.
|
;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation.
|
||||||
;#These options are based on parameters of gnuradio's function: gr_remez.
|
;#These options are based on parameters of gnuradio's function: gr_remez.
|
||||||
;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges,
|
;#This function calculates the optimal (in the Chebyshev/minimax sense) FIR filter impulse response given a set of band edges,
|
||||||
;#the desired reponse on those bands, and the weight given to the error in those bands.
|
;#the desired response on those bands, and the weight given to the error in those bands.
|
||||||
|
|
||||||
;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version.
|
;#input_item_type: Type and resolution for input signal samples.
|
||||||
InputFilter1.input_item_type=gr_complex
|
InputFilter1.input_item_type=gr_complex
|
||||||
|
|
||||||
;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version.
|
;#outut_item_type: Type and resolution for output filtered signal samples.
|
||||||
InputFilter1.output_item_type=gr_complex
|
InputFilter1.output_item_type=gr_complex
|
||||||
|
|
||||||
;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version.
|
;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version.
|
||||||
@ -253,10 +246,10 @@ InputFilter2.dump=false
|
|||||||
;#dump_filename: Log path and filename.
|
;#dump_filename: Log path and filename.
|
||||||
InputFilter2.dump_filename=../data/input_filter.dat
|
InputFilter2.dump_filename=../data/input_filter.dat
|
||||||
|
|
||||||
;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version.
|
;#input_item_type: Type and resolution for input signal samples.
|
||||||
InputFilter2.input_item_type=gr_complex
|
InputFilter2.input_item_type=gr_complex
|
||||||
|
|
||||||
;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version.
|
;#outut_item_type: Type and resolution for output filtered signal samples.
|
||||||
InputFilter2.output_item_type=gr_complex
|
InputFilter2.output_item_type=gr_complex
|
||||||
|
|
||||||
;######### RESAMPLER CONFIG 2 ############
|
;######### RESAMPLER CONFIG 2 ############
|
||||||
@ -274,11 +267,13 @@ Channels_2S.count=4
|
|||||||
;#in_acquisition: Number of channels simultaneously acquiring for the whole receiver
|
;#in_acquisition: Number of channels simultaneously acquiring for the whole receiver
|
||||||
Channels.in_acquisition=1
|
Channels.in_acquisition=1
|
||||||
|
|
||||||
;# signal:
|
;#signal:
|
||||||
;# "1C" GPS L1 C/A
|
;# "1C" GPS L1 C/A
|
||||||
;# "2S" GPS L2 L2C (M)
|
|
||||||
;# "1B" GALILEO E1 B (I/NAV OS/CS/SoL)
|
;# "1B" GALILEO E1 B (I/NAV OS/CS/SoL)
|
||||||
|
;# "1G" GLONASS L1 C/A
|
||||||
|
;# "2S" GPS L2 L2C (M)
|
||||||
;# "5X" GALILEO E5a I+Q
|
;# "5X" GALILEO E5a I+Q
|
||||||
|
;# "L5" GPS L5
|
||||||
;# CHANNEL NUMBERING ORDER: GPS L1 C/A, GPS L2 L2C (M), GALILEO E1 B, GALILEO E5a
|
;# CHANNEL NUMBERING ORDER: GPS L1 C/A, GPS L2 L2C (M), GALILEO E1 B, GALILEO E5a
|
||||||
|
|
||||||
;# CHANNEL CONNECTION
|
;# CHANNEL CONNECTION
|
||||||
@ -304,108 +299,92 @@ Channel18.RF_channel_ID=1
|
|||||||
Channel19.RF_channel_ID=1
|
Channel19.RF_channel_ID=1
|
||||||
|
|
||||||
|
|
||||||
;######### ACQUISITION GENERIC CONFIG ######
|
Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition
|
||||||
;#The following options are specific to each channel and overwrite the generic options
|
|
||||||
|
|
||||||
Acquisition_1C.dump=false
|
|
||||||
Acquisition_1C.dump_filename=./acq_dump.dat
|
|
||||||
Acquisition_1C.item_type=gr_complex
|
Acquisition_1C.item_type=gr_complex
|
||||||
Acquisition_1C.if=0
|
Acquisition_1C.if=0
|
||||||
Acquisition_1C.coherent_integration_time_ms=1
|
Acquisition_1C.coherent_integration_time_ms=1
|
||||||
Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition
|
|
||||||
Acquisition_1C.threshold=0.005
|
Acquisition_1C.threshold=0.005
|
||||||
Acquisition_1C.doppler_max=5000
|
Acquisition_1C.doppler_max=5000
|
||||||
Acquisition_1C.doppler_step=250
|
Acquisition_1C.doppler_step=250
|
||||||
Acquisition_1C.bit_transition_flag=false
|
Acquisition_1C.bit_transition_flag=false
|
||||||
Acquisition_1C.max_dwells=1
|
Acquisition_1C.max_dwells=1
|
||||||
|
Acquisition_1C.dump=false
|
||||||
|
Acquisition_1C.dump_filename=./acq_dump.dat
|
||||||
|
|
||||||
|
|
||||||
;# GPS L2C M
|
;# GPS L2C M
|
||||||
Acquisition_2S.dump=false
|
Acquisition_2S.implementation=GPS_L2_M_PCPS_Acquisition
|
||||||
Acquisition_2S.dump_filename=./acq_dump.dat
|
|
||||||
Acquisition_2S.item_type=gr_complex
|
Acquisition_2S.item_type=gr_complex
|
||||||
Acquisition_2S.if=0
|
Acquisition_2S.if=0
|
||||||
Acquisition_2S.implementation=GPS_L2_M_PCPS_Acquisition
|
|
||||||
Acquisition_2S.threshold=0.00074
|
Acquisition_2S.threshold=0.00074
|
||||||
;Acquisition_2S.pfa=0.001
|
;Acquisition_2S.pfa=0.001
|
||||||
Acquisition_2S.doppler_max=5000
|
Acquisition_2S.doppler_max=5000
|
||||||
Acquisition_2S.doppler_min=-5000
|
Acquisition_2S.doppler_min=-5000
|
||||||
Acquisition_2S.doppler_step=60
|
Acquisition_2S.doppler_step=60
|
||||||
Acquisition_2S.max_dwells=1
|
Acquisition_2S.max_dwells=1
|
||||||
|
Acquisition_2S.dump=false
|
||||||
|
Acquisition_2S.dump_filename=./acq_dump.dat
|
||||||
|
|
||||||
|
|
||||||
;######### TRACKING CONFIG ############
|
;######### TRACKING CONFIG ############
|
||||||
|
|
||||||
;######### GPS L1 C/A GENERIC TRACKING CONFIG ############
|
;######### GPS L1 C/A GENERIC TRACKING CONFIG ############
|
||||||
Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking
|
Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking
|
||||||
Tracking_1C.item_type=gr_complex
|
Tracking_1C.item_type=gr_complex
|
||||||
Tracking_1C.if=0
|
Tracking_1C.if=0
|
||||||
Tracking_1C.dump=false
|
|
||||||
Tracking_1C.dump_filename=../data/epl_tracking_ch_
|
|
||||||
Tracking_1C.pll_bw_hz=40.0;
|
Tracking_1C.pll_bw_hz=40.0;
|
||||||
Tracking_1C.dll_bw_hz=3.0;
|
Tracking_1C.dll_bw_hz=3.0;
|
||||||
Tracking_1C.order=3;
|
Tracking_1C.order=3;
|
||||||
Tracking_1C.early_late_space_chips=0.5;
|
Tracking_1C.early_late_space_chips=0.5;
|
||||||
|
Tracking_1C.dump=false
|
||||||
|
Tracking_1C.dump_filename=../data/epl_tracking_ch_
|
||||||
|
|
||||||
|
|
||||||
;######### GPS L2C GENERIC TRACKING CONFIG ############
|
;######### GPS L2C GENERIC TRACKING CONFIG ############
|
||||||
Tracking_2S.implementation=GPS_L2_M_DLL_PLL_Tracking
|
Tracking_2S.implementation=GPS_L2_M_DLL_PLL_Tracking
|
||||||
Tracking_2S.item_type=gr_complex
|
Tracking_2S.item_type=gr_complex
|
||||||
Tracking_2S.if=0
|
Tracking_2S.if=0
|
||||||
Tracking_2S.dump=false
|
|
||||||
Tracking_2S.dump_filename=./tracking_ch_
|
|
||||||
Tracking_2S.pll_bw_hz=2.0;
|
Tracking_2S.pll_bw_hz=2.0;
|
||||||
Tracking_2S.dll_bw_hz=0.25;
|
Tracking_2S.dll_bw_hz=0.25;
|
||||||
Tracking_2S.order=2;
|
Tracking_2S.order=2;
|
||||||
Tracking_2S.early_late_space_chips=0.5;
|
Tracking_2S.early_late_space_chips=0.5;
|
||||||
|
Tracking_2S.dump=false
|
||||||
|
Tracking_2S.dump_filename=./tracking_ch_
|
||||||
|
|
||||||
|
|
||||||
;######### TELEMETRY DECODER CONFIG ############
|
;######### TELEMETRY DECODER CONFIG ############
|
||||||
TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder
|
TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder
|
||||||
TelemetryDecoder_1C.dump=false
|
TelemetryDecoder_1C.dump=false
|
||||||
TelemetryDecoder_1C.decimation_factor=20;
|
|
||||||
|
|
||||||
TelemetryDecoder_2S.implementation=GPS_L2C_Telemetry_Decoder
|
TelemetryDecoder_2S.implementation=GPS_L2C_Telemetry_Decoder
|
||||||
TelemetryDecoder_2S.dump=false
|
TelemetryDecoder_2S.dump=false
|
||||||
TelemetryDecoder_2S.decimation_factor=1;
|
|
||||||
|
|
||||||
|
|
||||||
;######### OBSERVABLES CONFIG ############
|
;######### OBSERVABLES CONFIG ############
|
||||||
;#implementation:
|
|
||||||
Observables.implementation=Hybrid_Observables
|
Observables.implementation=Hybrid_Observables
|
||||||
;#dump: Enable or disable the Observables internal binary data file logging [true] or [false]
|
;#dump: Enable or disable the Observables internal binary data file logging [true] or [false]
|
||||||
Observables.dump=true
|
Observables.dump=true
|
||||||
|
|
||||||
;#dump_filename: Log path and filename.
|
;#dump_filename: Log path and filename.
|
||||||
Observables.dump_filename=./observables.dat
|
Observables.dump_filename=./observables.dat
|
||||||
|
|
||||||
|
|
||||||
;######### PVT CONFIG ############
|
;######### PVT CONFIG ############
|
||||||
;#implementation: Position Velocity and Time (PVT) implementation:
|
|
||||||
PVT.implementation=RTKLIB_PVT
|
PVT.implementation=RTKLIB_PVT
|
||||||
|
|
||||||
;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms]
|
;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms]
|
||||||
PVT.output_rate_ms=100
|
PVT.output_rate_ms=100
|
||||||
|
|
||||||
;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms.
|
;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms.
|
||||||
PVT.display_rate_ms=100
|
PVT.display_rate_ms=100
|
||||||
|
|
||||||
;# KML, GeoJSON, NMEA and RTCM output configuration
|
;# KML, GeoJSON, NMEA and RTCM output configuration
|
||||||
|
|
||||||
;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump.
|
|
||||||
PVT.dump_filename=./PVT
|
|
||||||
|
|
||||||
;#nmea_dump_filename: NMEA log path and filename
|
;#nmea_dump_filename: NMEA log path and filename
|
||||||
PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea;
|
PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea;
|
||||||
|
|
||||||
;#flag_nmea_tty_port: Enable or disable the NMEA log to a serial TTY port (Can be used with real hardware or virtual one)
|
;#flag_nmea_tty_port: Enable or disable the NMEA log to a serial TTY port (Can be used with real hardware or virtual one)
|
||||||
PVT.flag_nmea_tty_port=false;
|
PVT.flag_nmea_tty_port=false;
|
||||||
|
|
||||||
;#nmea_dump_devname: serial device descriptor for NMEA logging
|
;#nmea_dump_devname: serial device descriptor for NMEA logging
|
||||||
PVT.nmea_dump_devname=/dev/pts/4
|
PVT.nmea_dump_devname=/dev/pts/4
|
||||||
|
|
||||||
PVT.flag_rtcm_server=false
|
PVT.flag_rtcm_server=false
|
||||||
PVT.flag_rtcm_tty_port=false
|
PVT.flag_rtcm_tty_port=false
|
||||||
PVT.rtcm_dump_devname=/dev/pts/1
|
PVT.rtcm_dump_devname=/dev/pts/1
|
||||||
|
|
||||||
;#dump: Enable or disable the PVT internal binary data file logging [true] or [false]
|
;#dump: Enable or disable the PVT internal binary data file logging [true] or [false]
|
||||||
PVT.dump=false
|
PVT.dump=false
|
||||||
|
;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump.
|
||||||
|
PVT.dump_filename=./PVT
|
@ -25,29 +25,22 @@ GNSS-SDR.SUPL_LAC=0x59e2
|
|||||||
GNSS-SDR.SUPL_CI=0x31b0
|
GNSS-SDR.SUPL_CI=0x31b0
|
||||||
|
|
||||||
;######### SIGNAL_SOURCE CONFIG ############
|
;######### SIGNAL_SOURCE CONFIG ############
|
||||||
;#implementation: Use [File_Signal_Source] or [UHD_Signal_Source] or [GN3S_Signal_Source] (experimental)
|
;#implementation
|
||||||
SignalSource.implementation=Flexiband_Signal_Source
|
SignalSource.implementation=Flexiband_Signal_Source
|
||||||
|
|
||||||
SignalSource.flag_read_file=true
|
SignalSource.flag_read_file=true
|
||||||
SignalSource.signal_file=/media/javier/SISTEMA/signals/fraunhofer/L125_III1b_210s.usb ; <- PUT YOUR FILE HERE
|
SignalSource.signal_file=/media/javier/SISTEMA/signals/fraunhofer/L125_III1b_210s.usb ; <- PUT YOUR FILE HERE
|
||||||
|
|
||||||
;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
|
;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
|
||||||
SignalSource.item_type=gr_complex
|
SignalSource.item_type=gr_complex
|
||||||
|
|
||||||
;# FPGA firmware file
|
;# FPGA firmware file
|
||||||
SignalSource.firmware_file=flexiband_III-1b.bit
|
SignalSource.firmware_file=flexiband_III-1b.bit
|
||||||
|
|
||||||
;#RF_channels: Number of RF channels present in the frontend device, must agree the FPGA firmware file
|
;#RF_channels: Number of RF channels present in the frontend device, must agree the FPGA firmware file
|
||||||
SignalSource.RF_channels=3
|
SignalSource.RF_channels=3
|
||||||
|
|
||||||
;#frontend channels gain. Not usable yet!
|
;#frontend channels gain. Not usable yet!
|
||||||
SignalSource.gain1=0
|
SignalSource.gain1=0
|
||||||
SignalSource.gain2=0
|
SignalSource.gain2=0
|
||||||
SignalSource.gain3=0
|
SignalSource.gain3=0
|
||||||
|
|
||||||
;#frontend channels AGC
|
;#frontend channels AGC
|
||||||
SignalSource.AGC=true
|
SignalSource.AGC=true
|
||||||
|
|
||||||
;# USB 3.0 packet buffer size (number of SuperSpeed packets)
|
;# USB 3.0 packet buffer size (number of SuperSpeed packets)
|
||||||
SignalSource.usb_packet_buffer=128
|
SignalSource.usb_packet_buffer=128
|
||||||
|
|
||||||
@ -81,13 +74,13 @@ InputFilter0.dump_filename=../data/input_filter_ch0.dat
|
|||||||
|
|
||||||
;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation.
|
;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation.
|
||||||
;#These options are based on parameters of gnuradio's function: gr_remez.
|
;#These options are based on parameters of gnuradio's function: gr_remez.
|
||||||
;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges,
|
;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter impulse reaponse given a set of band edges,
|
||||||
;#the desired reponse on those bands, and the weight given to the error in those bands.
|
;#the desired reaponse on those bands, and the weight given to the error in those bands.
|
||||||
|
|
||||||
;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version.
|
;#input_item_type: Type and resolution for input signal samples.
|
||||||
InputFilter0.input_item_type=gr_complex
|
InputFilter0.input_item_type=gr_complex
|
||||||
|
|
||||||
;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version.
|
;#outut_item_type: Type and resolution for output filtered signal samples.
|
||||||
InputFilter0.output_item_type=gr_complex
|
InputFilter0.output_item_type=gr_complex
|
||||||
|
|
||||||
;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version.
|
;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version.
|
||||||
@ -174,16 +167,16 @@ InputFilter1.dump_filename=../data/input_filter_ch1.dat
|
|||||||
|
|
||||||
;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation.
|
;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation.
|
||||||
;#These options are based on parameters of gnuradio's function: gr_remez.
|
;#These options are based on parameters of gnuradio's function: gr_remez.
|
||||||
;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse reponse given a set of band edges,
|
;#This function calculates the optimal (in the Chebyshev/minimax sense) FIR filter impulse response given a set of band edges,
|
||||||
;#the desired reponse on those bands, and the weight given to the error in those bands.
|
;#the desired response on those bands, and the weight given to the error in those bands.
|
||||||
|
|
||||||
;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version.
|
;#input_item_type: Type and resolution for input signal samples.
|
||||||
InputFilter1.input_item_type=gr_complex
|
InputFilter1.input_item_type=gr_complex
|
||||||
|
|
||||||
;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version.
|
;#outut_item_type: Type and resolution for output filtered signal samples.
|
||||||
InputFilter1.output_item_type=gr_complex
|
InputFilter1.output_item_type=gr_complex
|
||||||
|
|
||||||
;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version.
|
;#taps_item_type: Type and resolution for the taps of the filter.
|
||||||
InputFilter1.taps_item_type=float
|
InputFilter1.taps_item_type=float
|
||||||
|
|
||||||
;#number_of_taps: Number of taps in the filter. Increasing this parameter increases the processing time
|
;#number_of_taps: Number of taps in the filter. Increasing this parameter increases the processing time
|
||||||
@ -261,10 +254,10 @@ InputFilter2.dump=false
|
|||||||
;#dump_filename: Log path and filename.
|
;#dump_filename: Log path and filename.
|
||||||
InputFilter2.dump_filename=../data/input_filter_ch2.dat
|
InputFilter2.dump_filename=../data/input_filter_ch2.dat
|
||||||
|
|
||||||
;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version.
|
;#input_item_type: Type and resolution for input signal samples.
|
||||||
InputFilter2.input_item_type=gr_complex
|
InputFilter2.input_item_type=gr_complex
|
||||||
|
|
||||||
;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version.
|
;#outut_item_type: Type and resolution for output filtered signal samples.
|
||||||
InputFilter2.output_item_type=gr_complex
|
InputFilter2.output_item_type=gr_complex
|
||||||
|
|
||||||
;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version.
|
;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version.
|
||||||
@ -334,12 +327,13 @@ Channels_5X.count=10
|
|||||||
;#in_acquisition: Number of channels simultaneously acquiring for the whole receiver
|
;#in_acquisition: Number of channels simultaneously acquiring for the whole receiver
|
||||||
Channels.in_acquisition=1
|
Channels.in_acquisition=1
|
||||||
|
|
||||||
;# signal:
|
;#signal:
|
||||||
;# "1C" GPS L1 C/A
|
;# "1C" GPS L1 C/A
|
||||||
;# "2S" GPS L2 L2C (M)
|
|
||||||
;# "1B" GALILEO E1 B (I/NAV OS/CS/SoL)
|
;# "1B" GALILEO E1 B (I/NAV OS/CS/SoL)
|
||||||
|
;# "1G" GLONASS L1 C/A
|
||||||
|
;# "2S" GPS L2 L2C (M)
|
||||||
;# "5X" GALILEO E5a I+Q
|
;# "5X" GALILEO E5a I+Q
|
||||||
;# CHANNEL NUMBERING ORDER: GPS L1 C/A, GPS L2 L2C (M), GALILEO E1 B, GALILEO E5a
|
;# "L5" GPS L5
|
||||||
|
|
||||||
;# CHANNEL CONNECTION
|
;# CHANNEL CONNECTION
|
||||||
|
|
||||||
@ -388,31 +382,27 @@ Channel39.RF_channel_ID=2
|
|||||||
;#The following options are specific to each channel and overwrite the generic options
|
;#The following options are specific to each channel and overwrite the generic options
|
||||||
|
|
||||||
;# GPS L1 CA
|
;# GPS L1 CA
|
||||||
Acquisition_1C.dump=false
|
Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition
|
||||||
Acquisition_1C.dump_filename=./acq_dump.dat
|
|
||||||
Acquisition_1C.item_type=gr_complex
|
Acquisition_1C.item_type=gr_complex
|
||||||
Acquisition_1C.if=0
|
Acquisition_1C.if=0
|
||||||
Acquisition_1C.coherent_integration_time_ms=1
|
Acquisition_1C.coherent_integration_time_ms=1
|
||||||
Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition
|
|
||||||
Acquisition_1C.threshold=0.005
|
Acquisition_1C.threshold=0.005
|
||||||
Acquisition_1C.doppler_max=5000
|
Acquisition_1C.doppler_max=5000
|
||||||
Acquisition_1C.doppler_step=250
|
Acquisition_1C.doppler_step=250
|
||||||
Acquisition_1C.bit_transition_flag=false
|
Acquisition_1C.bit_transition_flag=false
|
||||||
Acquisition_1C.max_dwells=1
|
Acquisition_1C.max_dwells=1
|
||||||
|
Acquisition_1C.dump=false
|
||||||
|
Acquisition_1C.dump_filename=./acq_dump.dat
|
||||||
|
|
||||||
|
|
||||||
;# Galileo E1
|
;# Galileo E1
|
||||||
;#dump: Enable or disable the acquisition internal data file logging [true] or [false]
|
Acquisition_1B.implementation=Galileo_E1_PCPS_Ambiguous_Acquisition
|
||||||
Acquisition_1B.dump=false
|
;#item_type: Type and resolution for each of the signal samples.
|
||||||
;#filename: Log path and filename
|
|
||||||
Acquisition_1B.dump_filename=./acq_dump.dat
|
|
||||||
;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
|
|
||||||
Acquisition_1B.item_type=gr_complex
|
Acquisition_1B.item_type=gr_complex
|
||||||
;#if: Signal intermediate frequency in [Hz]
|
;#if: Signal intermediate frequency in [Hz]
|
||||||
Acquisition_1B.if=0
|
Acquisition_1B.if=0
|
||||||
;#sampled_ms: Signal block duration for the acquisition signal detection [ms]
|
;#sampled_ms: Signal block duration for the acquisition signal detection [ms]
|
||||||
Acquisition_1B.sampled_ms=4
|
Acquisition_1B.sampled_ms=4
|
||||||
;#implementation: Acquisition algorithm selection for this channel: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
|
|
||||||
Acquisition_1B.implementation=Galileo_E1_PCPS_Ambiguous_Acquisition
|
|
||||||
;#threshold: Acquisition threshold
|
;#threshold: Acquisition threshold
|
||||||
;Acquisition_1B.threshold=0
|
;Acquisition_1B.threshold=0
|
||||||
;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
|
;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
|
||||||
@ -421,29 +411,31 @@ Acquisition_1B.pfa=0.0000002
|
|||||||
Acquisition_1B.doppler_max=5000
|
Acquisition_1B.doppler_max=5000
|
||||||
;#doppler_max: Doppler step in the grid search [Hz]
|
;#doppler_max: Doppler step in the grid search [Hz]
|
||||||
Acquisition_1B.doppler_step=125
|
Acquisition_1B.doppler_step=125
|
||||||
|
;#dump: Enable or disable the acquisition internal data file logging [true] or [false]
|
||||||
|
Acquisition_1B.dump=false
|
||||||
|
;#filename: Log path and filename
|
||||||
|
Acquisition_1B.dump_filename=./acq_dump.dat
|
||||||
|
|
||||||
|
|
||||||
;# GPS L2C M
|
;# GPS L2C M
|
||||||
Acquisition_2S.dump=false
|
Acquisition_2S.implementation=GPS_L2_M_PCPS_Acquisition
|
||||||
Acquisition_2S.dump_filename=./acq_dump.dat
|
|
||||||
Acquisition_2S.item_type=gr_complex
|
Acquisition_2S.item_type=gr_complex
|
||||||
Acquisition_2S.if=0
|
Acquisition_2S.if=0
|
||||||
Acquisition_2S.implementation=GPS_L2_M_PCPS_Acquisition
|
|
||||||
Acquisition_2S.threshold=0.00074
|
Acquisition_2S.threshold=0.00074
|
||||||
;Acquisition_2S.pfa=0.001
|
;Acquisition_2S.pfa=0.001
|
||||||
Acquisition_2S.doppler_max=5000
|
Acquisition_2S.doppler_max=5000
|
||||||
Acquisition_2S.doppler_min=-5000
|
Acquisition_2S.doppler_min=-5000
|
||||||
Acquisition_2S.doppler_step=60
|
Acquisition_2S.doppler_step=60
|
||||||
Acquisition_2S.max_dwells=1
|
Acquisition_2S.max_dwells=1
|
||||||
|
Acquisition_2S.dump=false
|
||||||
|
Acquisition_2S.dump_filename=./acq_dump.dat
|
||||||
|
|
||||||
|
|
||||||
;# GALILEO E5a
|
;# GALILEO E5a
|
||||||
Acquisition_5X.dump=false
|
Acquisition_5X.implementation=Galileo_E5a_Noncoherent_IQ_Acquisition_CAF
|
||||||
Acquisition_5X.dump_filename=./acq_dump.dat
|
|
||||||
Acquisition_5X.item_type=gr_complex
|
Acquisition_5X.item_type=gr_complex
|
||||||
Acquisition_5X.if=0
|
Acquisition_5X.if=0
|
||||||
Acquisition_5X.coherent_integration_time_ms=1
|
Acquisition_5X.coherent_integration_time_ms=1
|
||||||
Acquisition_5X.implementation=Galileo_E5a_Noncoherent_IQ_Acquisition_CAF
|
|
||||||
Acquisition_5X.threshold=0.009
|
Acquisition_5X.threshold=0.009
|
||||||
Acquisition_5X.doppler_max=5000
|
Acquisition_5X.doppler_max=5000
|
||||||
Acquisition_5X.doppler_step=125
|
Acquisition_5X.doppler_step=125
|
||||||
@ -451,32 +443,28 @@ Acquisition_5X.bit_transition_flag=false
|
|||||||
Acquisition_5X.max_dwells=1
|
Acquisition_5X.max_dwells=1
|
||||||
Acquisition_5X.CAF_window_hz=0 ; **Only for E5a** Resolves doppler ambiguity averaging the specified BW in the winner code delay. If set to 0 CAF filter is desactivated. Recommended value 3000 Hz
|
Acquisition_5X.CAF_window_hz=0 ; **Only for E5a** Resolves doppler ambiguity averaging the specified BW in the winner code delay. If set to 0 CAF filter is desactivated. Recommended value 3000 Hz
|
||||||
Acquisition_5X.Zero_padding=0 ; **Only for E5a** Avoids power loss and doppler ambiguity in bit transitions by correlating one code with twice the input data length, ensuring that at least one full code is present without transitions. If set to 1 it is ON, if set to 0 it is OFF.
|
Acquisition_5X.Zero_padding=0 ; **Only for E5a** Avoids power loss and doppler ambiguity in bit transitions by correlating one code with twice the input data length, ensuring that at least one full code is present without transitions. If set to 1 it is ON, if set to 0 it is OFF.
|
||||||
|
Acquisition_5X.dump=false
|
||||||
|
Acquisition_5X.dump_filename=./acq_dump.dat
|
||||||
|
|
||||||
|
|
||||||
;######### TRACKING CONFIG ############
|
;######### TRACKING CONFIG ############
|
||||||
|
|
||||||
;######### GPS L1 C/A GENERIC TRACKING CONFIG ############
|
;######### GPS L1 C/A GENERIC TRACKING CONFIG ############
|
||||||
Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking
|
Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking
|
||||||
Tracking_1C.item_type=gr_complex
|
Tracking_1C.item_type=gr_complex
|
||||||
Tracking_1C.if=0
|
Tracking_1C.if=0
|
||||||
Tracking_1C.dump=false
|
|
||||||
Tracking_1C.dump_filename=../data/epl_tracking_ch_
|
|
||||||
Tracking_1C.pll_bw_hz=35.0;
|
Tracking_1C.pll_bw_hz=35.0;
|
||||||
Tracking_1C.dll_bw_hz=2.0;
|
Tracking_1C.dll_bw_hz=2.0;
|
||||||
Tracking_1C.order=3;
|
Tracking_1C.order=3;
|
||||||
Tracking_1C.early_late_space_chips=0.5;
|
Tracking_1C.early_late_space_chips=0.5;
|
||||||
|
Tracking_1C.dump=false
|
||||||
|
Tracking_1C.dump_filename=../data/epl_tracking_ch_
|
||||||
|
|
||||||
;######### GALILEO E1 TRK CONFIG ############
|
;######### GALILEO E1 TRK CONFIG ############
|
||||||
|
|
||||||
;#implementation: Selected tracking algorithm: [GPS_L1_CA_DLL_PLL_Tracking] or [GPS_L1_CA_DLL_PLL_C_Aid_Tracking] or [GPS_L1_CA_TCP_CONNECTOR_Tracking] or [Galileo_E1_DLL_PLL_VEML_Tracking]
|
|
||||||
Tracking_1B.implementation=Galileo_E1_DLL_PLL_VEML_Tracking
|
Tracking_1B.implementation=Galileo_E1_DLL_PLL_VEML_Tracking
|
||||||
;#item_type: Type and resolution for each of the signal samples. Use only [gr_complex] in this version.
|
;#item_type: Type and resolution for each of the signal samples.
|
||||||
Tracking_1B.item_type=gr_complex
|
Tracking_1B.item_type=gr_complex
|
||||||
;#sampling_frequency: Signal Intermediate Frequency in [Hz]
|
;#sampling_frequency: Signal Intermediate Frequency in [Hz]
|
||||||
Tracking_1B.if=0
|
Tracking_1B.if=0
|
||||||
;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false]
|
|
||||||
Tracking_1B.dump=false
|
|
||||||
;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number.
|
|
||||||
Tracking_1B.dump_filename=../data/veml_tracking_ch_
|
|
||||||
;#pll_bw_hz: PLL loop filter bandwidth [Hz]
|
;#pll_bw_hz: PLL loop filter bandwidth [Hz]
|
||||||
Tracking_1B.pll_bw_hz=15.0;
|
Tracking_1B.pll_bw_hz=15.0;
|
||||||
;#dll_bw_hz: DLL loop filter bandwidth [Hz]
|
;#dll_bw_hz: DLL loop filter bandwidth [Hz]
|
||||||
@ -487,24 +475,28 @@ Tracking_1B.order=3;
|
|||||||
Tracking_1B.early_late_space_chips=0.15;
|
Tracking_1B.early_late_space_chips=0.15;
|
||||||
;#very_early_late_space_chips: only for [Galileo_E1_DLL_PLL_VEML_Tracking], correlator very early-late space [chips]. Use [0.6]
|
;#very_early_late_space_chips: only for [Galileo_E1_DLL_PLL_VEML_Tracking], correlator very early-late space [chips]. Use [0.6]
|
||||||
Tracking_1B.very_early_late_space_chips=0.6;
|
Tracking_1B.very_early_late_space_chips=0.6;
|
||||||
|
;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false]
|
||||||
|
Tracking_1B.dump=false
|
||||||
|
;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number.
|
||||||
|
Tracking_1B.dump_filename=../data/veml_tracking_ch_
|
||||||
|
|
||||||
|
|
||||||
;######### GPS L2C GENERIC TRACKING CONFIG ############
|
;######### GPS L2C GENERIC TRACKING CONFIG ############
|
||||||
Tracking_2S.implementation=GPS_L2_M_DLL_PLL_Tracking
|
Tracking_2S.implementation=GPS_L2_M_DLL_PLL_Tracking
|
||||||
Tracking_2S.item_type=gr_complex
|
Tracking_2S.item_type=gr_complex
|
||||||
Tracking_2S.if=0
|
Tracking_2S.if=0
|
||||||
Tracking_2S.dump=false
|
|
||||||
Tracking_2S.dump_filename=./tracking_ch_
|
|
||||||
Tracking_2S.pll_bw_hz=2.0;
|
Tracking_2S.pll_bw_hz=2.0;
|
||||||
Tracking_2S.dll_bw_hz=0.25;
|
Tracking_2S.dll_bw_hz=0.25;
|
||||||
Tracking_2S.order=2;
|
Tracking_2S.order=2;
|
||||||
Tracking_2S.early_late_space_chips=0.5;
|
Tracking_2S.early_late_space_chips=0.5;
|
||||||
|
Tracking_2S.dump=false
|
||||||
|
Tracking_2S.dump_filename=./tracking_ch_
|
||||||
|
|
||||||
|
|
||||||
;######### GALILEO E5 TRK CONFIG ############
|
;######### GALILEO E5 TRK CONFIG ############
|
||||||
Tracking_5X.implementation=Galileo_E5a_DLL_PLL_Tracking
|
Tracking_5X.implementation=Galileo_E5a_DLL_PLL_Tracking
|
||||||
Tracking_5X.item_type=gr_complex
|
Tracking_5X.item_type=gr_complex
|
||||||
Tracking_5X.if=0
|
Tracking_5X.if=0
|
||||||
Tracking_5X.dump=false
|
|
||||||
Tracking_5X.dump_filename=./tracking_ch_
|
|
||||||
Tracking_5X.pll_bw_hz_init=20.0; **Only for E5a** PLL loop filter bandwidth during initialization [Hz]
|
Tracking_5X.pll_bw_hz_init=20.0; **Only for E5a** PLL loop filter bandwidth during initialization [Hz]
|
||||||
Tracking_5X.dll_bw_hz_init=20.0; **Only for E5a** DLL loop filter bandwidth during initialization [Hz]
|
Tracking_5X.dll_bw_hz_init=20.0; **Only for E5a** DLL loop filter bandwidth during initialization [Hz]
|
||||||
Tracking_5X.ti_ms=1; **Only for E5a** loop filter integration time after initialization (secondary code delay search)[ms]
|
Tracking_5X.ti_ms=1; **Only for E5a** loop filter integration time after initialization (secondary code delay search)[ms]
|
||||||
@ -512,6 +504,9 @@ Tracking_5X.pll_bw_hz=20.0;
|
|||||||
Tracking_5X.dll_bw_hz=20.0;
|
Tracking_5X.dll_bw_hz=20.0;
|
||||||
Tracking_5X.order=2;
|
Tracking_5X.order=2;
|
||||||
Tracking_5X.early_late_space_chips=0.5;
|
Tracking_5X.early_late_space_chips=0.5;
|
||||||
|
Tracking_5X.dump=false
|
||||||
|
Tracking_5X.dump_filename=./tracking_ch_
|
||||||
|
|
||||||
|
|
||||||
;######### TELEMETRY DECODER CONFIG ############
|
;######### TELEMETRY DECODER CONFIG ############
|
||||||
TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder
|
TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder
|
||||||
@ -526,6 +521,7 @@ TelemetryDecoder_2S.dump=false
|
|||||||
TelemetryDecoder_5X.implementation=Galileo_E5a_Telemetry_Decoder
|
TelemetryDecoder_5X.implementation=Galileo_E5a_Telemetry_Decoder
|
||||||
TelemetryDecoder_5X.dump=false
|
TelemetryDecoder_5X.dump=false
|
||||||
|
|
||||||
|
|
||||||
;######### OBSERVABLES CONFIG ############
|
;######### OBSERVABLES CONFIG ############
|
||||||
;#implementation:
|
;#implementation:
|
||||||
Observables.implementation=Hybrid_Observables
|
Observables.implementation=Hybrid_Observables
|
||||||
@ -538,34 +534,24 @@ Observables.dump_filename=./observables.dat
|
|||||||
;######### PVT CONFIG ############
|
;######### PVT CONFIG ############
|
||||||
;#implementation: Position Velocity and Time (PVT) implementation:
|
;#implementation: Position Velocity and Time (PVT) implementation:
|
||||||
PVT.implementation=RTKLIB_PVT
|
PVT.implementation=RTKLIB_PVT
|
||||||
|
|
||||||
PVT.positioning_mode=PPP_Static ; options: Single, Static, Kinematic, PPP_Static, PPP_Kinematic
|
PVT.positioning_mode=PPP_Static ; options: Single, Static, Kinematic, PPP_Static, PPP_Kinematic
|
||||||
PVT.iono_model=Broadcast ; options: OFF, Broadcast, SBAS, Iono-Free-LC, Estimate_STEC, IONEX
|
PVT.iono_model=Broadcast ; options: OFF, Broadcast, SBAS, Iono-Free-LC, Estimate_STEC, IONEX
|
||||||
PVT.trop_model=Saastamoinen ; options: OFF, Saastamoinen, SBAS, Estimate_ZTD, Estimate_ZTD_Grad
|
PVT.trop_model=Saastamoinen ; options: OFF, Saastamoinen, SBAS, Estimate_ZTD, Estimate_ZTD_Grad
|
||||||
|
|
||||||
;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms]
|
;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms]
|
||||||
PVT.output_rate_ms=10
|
PVT.output_rate_ms=10
|
||||||
|
|
||||||
;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms.
|
;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms.
|
||||||
PVT.display_rate_ms=100
|
PVT.display_rate_ms=100
|
||||||
|
|
||||||
;# KML, GeoJSON, NMEA and RTCM output configuration
|
;# KML, GeoJSON, NMEA and RTCM output configuration
|
||||||
|
|
||||||
;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump.
|
|
||||||
PVT.dump_filename=./PVT
|
|
||||||
|
|
||||||
;#nmea_dump_filename: NMEA log path and filename
|
;#nmea_dump_filename: NMEA log path and filename
|
||||||
PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea;
|
PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea;
|
||||||
|
|
||||||
;#flag_nmea_tty_port: Enable or disable the NMEA log to a serial TTY port (Can be used with real hardware or virtual one)
|
;#flag_nmea_tty_port: Enable or disable the NMEA log to a serial TTY port (Can be used with real hardware or virtual one)
|
||||||
PVT.flag_nmea_tty_port=false;
|
PVT.flag_nmea_tty_port=false;
|
||||||
|
|
||||||
;#nmea_dump_devname: serial device descriptor for NMEA logging
|
;#nmea_dump_devname: serial device descriptor for NMEA logging
|
||||||
PVT.nmea_dump_devname=/dev/pts/4
|
PVT.nmea_dump_devname=/dev/pts/4
|
||||||
|
|
||||||
PVT.flag_rtcm_server=false
|
PVT.flag_rtcm_server=false
|
||||||
PVT.flag_rtcm_tty_port=false
|
PVT.flag_rtcm_tty_port=false
|
||||||
PVT.rtcm_dump_devname=/dev/pts/1
|
PVT.rtcm_dump_devname=/dev/pts/1
|
||||||
|
|
||||||
;#dump: Enable or disable the PVT internal binary data file logging [true] or [false]
|
;#dump: Enable or disable the PVT internal binary data file logging [true] or [false]
|
||||||
PVT.dump=false
|
PVT.dump=false
|
||||||
|
;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump.
|
||||||
|
PVT.dump_filename=./PVT
|
||||||
|
@ -14,61 +14,35 @@ Receiver.sources_count=2
|
|||||||
;#enable_throttle_control: Enabling this option tells the signal source to keep the delay between samples in post processing.
|
;#enable_throttle_control: Enabling this option tells the signal source to keep the delay between samples in post processing.
|
||||||
; it helps to not overload the CPU, but the processing time will be longer.
|
; it helps to not overload the CPU, but the processing time will be longer.
|
||||||
SignalSource.enable_throttle_control=false
|
SignalSource.enable_throttle_control=false
|
||||||
|
;#repeat: Repeat the processing file.
|
||||||
;#repeat: Repeat the processing file. Disable this option in this version
|
|
||||||
SignalSource.repeat=false
|
SignalSource.repeat=false
|
||||||
|
|
||||||
|
|
||||||
;######### SIGNAL_SOURCE 0 CONFIG ############
|
;######### SIGNAL_SOURCE 0 CONFIG ############
|
||||||
|
|
||||||
;#implementation: Use [File_Signal_Source] or [UHD_Signal_Source] or [GN3S_Signal_Source] (experimental)
|
|
||||||
SignalSource0.implementation=File_Signal_Source
|
SignalSource0.implementation=File_Signal_Source
|
||||||
|
|
||||||
;#filename: path to file with the captured GNSS signal samples to be processed
|
;#filename: path to file with the captured GNSS signal samples to be processed
|
||||||
SignalSource0.filename=/datalogger/signals/CTTC/2013_04_04_GNSS_SIGNAL_at_CTTC_SPAIN/2013_04_04_GNSS_SIGNAL_at_CTTC_SPAIN.dat ; <- PUT YOUR FILE HERE
|
SignalSource0.filename=/datalogger/signals/CTTC/2013_04_04_GNSS_SIGNAL_at_CTTC_SPAIN/2013_04_04_GNSS_SIGNAL_at_CTTC_SPAIN.dat ; <- PUT YOUR FILE HERE
|
||||||
|
|
||||||
;#item_type: Type and resolution for each of the signal samples.
|
;#item_type: Type and resolution for each of the signal samples.
|
||||||
SignalSource0.item_type=ishort
|
SignalSource0.item_type=ishort
|
||||||
|
;#sampling_frequency: Original Signal sampling frequency in samples per second
|
||||||
;#sampling_frequency: Original Signal sampling frequency in [Hz]
|
|
||||||
SignalSource0.sampling_frequency=4000000
|
SignalSource0.sampling_frequency=4000000
|
||||||
|
|
||||||
;#freq: RF front-end center frequency in [Hz]
|
|
||||||
SignalSource0.freq=1575420000
|
|
||||||
|
|
||||||
;#samples: Number of samples to be processed. Notice that 0 indicates the entire file.
|
;#samples: Number of samples to be processed. Notice that 0 indicates the entire file.
|
||||||
SignalSource0.samples=0
|
SignalSource0.samples=0
|
||||||
|
|
||||||
;#dump: Dump the Signal source data to a file. Disable this option in this version
|
|
||||||
SignalSource0.dump=false
|
|
||||||
|
|
||||||
SignalSource0.dump_filename=../data/signal_source.dat
|
|
||||||
|
|
||||||
;######### SIGNAL_SOURCE 1 CONFIG ############
|
;######### SIGNAL_SOURCE 1 CONFIG ############
|
||||||
|
|
||||||
;#implementation: Use [File_Signal_Source] or [UHD_Signal_Source] or [GN3S_Signal_Source] (experimental)
|
|
||||||
SignalSource1.implementation=File_Signal_Source
|
SignalSource1.implementation=File_Signal_Source
|
||||||
|
|
||||||
;#filename: path to file with the captured GNSS signal samples to be processed
|
;#filename: path to file with the captured GNSS signal samples to be processed
|
||||||
SignalSource1.filename=/datalogger/signals/CTTC/2013_04_04_GNSS_SIGNAL_at_CTTC_SPAIN/2013_04_04_GNSS_SIGNAL_at_CTTC_SPAIN.dat ; <- PUT YOUR FILE HERE
|
SignalSource1.filename=/datalogger/signals/CTTC/2013_04_04_GNSS_SIGNAL_at_CTTC_SPAIN/2013_04_04_GNSS_SIGNAL_at_CTTC_SPAIN.dat ; <- PUT YOUR FILE HERE
|
||||||
|
|
||||||
;#item_type: Type and resolution for each of the signal samples.
|
;#item_type: Type and resolution for each of the signal samples.
|
||||||
SignalSource1.item_type=ishort
|
SignalSource1.item_type=ishort
|
||||||
|
|
||||||
;#sampling_frequency: Original Signal sampling frequency in [Hz]
|
;#sampling_frequency: Original Signal sampling frequency in [Hz]
|
||||||
SignalSource1.sampling_frequency=4000000
|
SignalSource1.sampling_frequency=4000000
|
||||||
|
|
||||||
;#freq: RF front-end center frequency in [Hz]
|
;#freq: RF front-end center frequency in [Hz]
|
||||||
SignalSource1.freq=1575420000
|
SignalSource1.freq=1575420000
|
||||||
|
|
||||||
;#samples: Number of samples to be processed. Notice that 0 indicates the entire file.
|
;#samples: Number of samples to be processed. Notice that 0 indicates the entire file.
|
||||||
SignalSource1.samples=0
|
SignalSource1.samples=0
|
||||||
|
|
||||||
;#dump: Dump the Signal source data to a file. Disable this option in this version
|
|
||||||
SignalSource1.dump=false
|
|
||||||
|
|
||||||
SignalSource1.dump_filename=../data/signal_source.dat
|
|
||||||
|
|
||||||
|
|
||||||
;######### SIGNAL_CONDITIONER 0 CONFIG ############
|
;######### SIGNAL_CONDITIONER 0 CONFIG ############
|
||||||
;## It holds blocks to change data type, filter and resample input data.
|
;## It holds blocks to change data type, filter and resample input data.
|
||||||
@ -101,12 +75,13 @@ InputFilter0.dump_filename=../data/input_filter.dat
|
|||||||
|
|
||||||
;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation.
|
;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation.
|
||||||
;#These options are based on parameters of GNU Radio's function: gr_remez.
|
;#These options are based on parameters of GNU Radio's function: gr_remez.
|
||||||
;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter impulse response given a set of band edges, the desired response on those bands, and the weight given to the error in those bands.
|
;;#This function calculates the optimal (in the Chebyshev/minimax sense) FIR filter impulse response given a set of band edges,
|
||||||
|
;#the desired response on those bands, and the weight given to the error in those bands.
|
||||||
|
|
||||||
;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version.
|
;#input_item_type: Type and resolution for input signal samples.
|
||||||
InputFilter0.input_item_type=gr_complex
|
InputFilter0.input_item_type=gr_complex
|
||||||
|
|
||||||
;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version.
|
;#outut_item_type: Type and resolution for output filtered signal samples.
|
||||||
InputFilter0.output_item_type=gr_complex
|
InputFilter0.output_item_type=gr_complex
|
||||||
|
|
||||||
;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version.
|
;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version.
|
||||||
@ -167,7 +142,7 @@ Resampler1.dump=false
|
|||||||
;#dump_filename: Log path and filename.
|
;#dump_filename: Log path and filename.
|
||||||
Resampler1.dump_filename=../data/resampler.dat
|
Resampler1.dump_filename=../data/resampler.dat
|
||||||
|
|
||||||
;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
|
;#item_type: Type and resolution for each of the signal samples.
|
||||||
Resampler1.item_type=gr_complex
|
Resampler1.item_type=gr_complex
|
||||||
|
|
||||||
;#sample_freq_in: the sample frequency of the input signal
|
;#sample_freq_in: the sample frequency of the input signal
|
||||||
@ -185,7 +160,7 @@ Resampler1.sample_freq_out=4000000
|
|||||||
SignalConditioner1.implementation=Signal_Conditioner
|
SignalConditioner1.implementation=Signal_Conditioner
|
||||||
|
|
||||||
;######### DATA_TYPE_ADAPTER 1 CONFIG ############
|
;######### DATA_TYPE_ADAPTER 1 CONFIG ############
|
||||||
;## Changes the type of input data. Please disable it in this version.
|
;## Changes the type of input data.
|
||||||
;#implementation: [Pass_Through] disables this block
|
;#implementation: [Pass_Through] disables this block
|
||||||
DataTypeAdapter1.implementation=Ishort_To_Complex
|
DataTypeAdapter1.implementation=Ishort_To_Complex
|
||||||
|
|
||||||
@ -207,12 +182,13 @@ InputFilter1.dump_filename=../data/input_filter.dat
|
|||||||
|
|
||||||
;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation.
|
;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation.
|
||||||
;#These options are based on parameters of GNU Radio's function: gr_remez.
|
;#These options are based on parameters of GNU Radio's function: gr_remez.
|
||||||
;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter impulse response given a set of band edges, the desired response on those bands, and the weight given to the error in those bands.
|
;#This function calculates the optimal (in the Chebyshev/minimax sense) FIR filter impulse response given a set of band edges,
|
||||||
|
;#the desired response on those bands, and the weight given to the error in those bands.
|
||||||
|
|
||||||
;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version.
|
;#input_item_type: Type and resolution for input signal samples.
|
||||||
InputFilter1.input_item_type=gr_complex
|
InputFilter1.input_item_type=gr_complex
|
||||||
|
|
||||||
;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version.
|
;#outut_item_type: Type and resolution for output filtered signal samples.
|
||||||
InputFilter1.output_item_type=gr_complex
|
InputFilter1.output_item_type=gr_complex
|
||||||
|
|
||||||
;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version.
|
;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version.
|
||||||
@ -273,7 +249,7 @@ Resampler1.dump=false
|
|||||||
;#dump_filename: Log path and filename.
|
;#dump_filename: Log path and filename.
|
||||||
Resampler1.dump_filename=../data/resampler.dat
|
Resampler1.dump_filename=../data/resampler.dat
|
||||||
|
|
||||||
;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
|
;#item_type: Type and resolution for each of the signal samples.
|
||||||
Resampler1.item_type=gr_complex
|
Resampler1.item_type=gr_complex
|
||||||
|
|
||||||
;#sample_freq_in: the sample frequency of the input signal
|
;#sample_freq_in: the sample frequency of the input signal
|
||||||
@ -303,19 +279,13 @@ Channel.signal=1B
|
|||||||
|
|
||||||
|
|
||||||
;######### GPS ACQUISITION CONFIG ############
|
;######### GPS ACQUISITION CONFIG ############
|
||||||
|
Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition
|
||||||
;#dump: Enable or disable the acquisition internal data file logging [true] or [false]
|
;#item_type: Type and resolution for each of the signal samples.
|
||||||
Acquisition_1C.dump=false
|
|
||||||
;#filename: Log path and filename
|
|
||||||
Acquisition_1C.dump_filename=./acq_dump.dat
|
|
||||||
;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
|
|
||||||
Acquisition_1C.item_type=gr_complex
|
Acquisition_1C.item_type=gr_complex
|
||||||
;#if: Signal intermediate frequency in [Hz]
|
;#if: Signal intermediate frequency in [Hz]
|
||||||
Acquisition_1C.if=0
|
Acquisition_1C.if=0
|
||||||
;#sampled_ms: Signal block duration for the acquisition signal detection [ms]
|
;#sampled_ms: Signal block duration for the acquisition signal detection [ms]
|
||||||
Acquisition_1C.sampled_ms=1
|
Acquisition_1C.sampled_ms=1
|
||||||
;#implementation: Acquisition algorithm selection for this channel: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
|
|
||||||
Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition
|
|
||||||
;#threshold: Acquisition threshold
|
;#threshold: Acquisition threshold
|
||||||
Acquisition_1C.threshold=0.0075
|
Acquisition_1C.threshold=0.0075
|
||||||
;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
|
;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
|
||||||
@ -324,22 +294,20 @@ Acquisition_1C.threshold=0.0075
|
|||||||
Acquisition_1C.doppler_max=10000
|
Acquisition_1C.doppler_max=10000
|
||||||
;#doppler_max: Doppler step in the grid search [Hz]
|
;#doppler_max: Doppler step in the grid search [Hz]
|
||||||
Acquisition_1C.doppler_step=500
|
Acquisition_1C.doppler_step=500
|
||||||
|
;#dump: Enable or disable the acquisition internal data file logging [true] or [false]
|
||||||
|
Acquisition_1C.dump=false
|
||||||
|
;#filename: Log path and filename
|
||||||
|
Acquisition_1C.dump_filename=./acq_dump.dat
|
||||||
|
|
||||||
|
|
||||||
;######### GALILEO ACQUISITION CONFIG ############
|
;######### GALILEO ACQUISITION CONFIG ############
|
||||||
|
Acquisition_1B.implementation=Galileo_E1_PCPS_Ambiguous_Acquisition
|
||||||
;#dump: Enable or disable the acquisition internal data file logging [true] or [false]
|
;#item_type: Type and resolution for each of the signal samples.
|
||||||
Acquisition_1B.dump=false
|
|
||||||
;#filename: Log path and filename
|
|
||||||
Acquisition_1B.dump_filename=./acq_dump.dat
|
|
||||||
;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
|
|
||||||
Acquisition_1B.item_type=gr_complex
|
Acquisition_1B.item_type=gr_complex
|
||||||
;#if: Signal intermediate frequency in [Hz]
|
;#if: Signal intermediate frequency in [Hz]
|
||||||
Acquisition_1B.if=0
|
Acquisition_1B.if=0
|
||||||
;#sampled_ms: Signal block duration for the acquisition signal detection [ms]
|
;#sampled_ms: Signal block duration for the acquisition signal detection [ms]
|
||||||
Acquisition_1B.sampled_ms=4
|
Acquisition_1B.sampled_ms=4
|
||||||
;#implementation: Acquisition algorithm selection for this channel: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
|
|
||||||
Acquisition_1B.implementation=Galileo_E1_PCPS_Ambiguous_Acquisition
|
|
||||||
;#threshold: Acquisition threshold
|
;#threshold: Acquisition threshold
|
||||||
;Acquisition_1B.threshold=0
|
;Acquisition_1B.threshold=0
|
||||||
;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
|
;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
|
||||||
@ -348,70 +316,57 @@ Acquisition_1B.pfa=0.0000008
|
|||||||
Acquisition_1B.doppler_max=15000
|
Acquisition_1B.doppler_max=15000
|
||||||
;#doppler_max: Doppler step in the grid search [Hz]
|
;#doppler_max: Doppler step in the grid search [Hz]
|
||||||
Acquisition_1B.doppler_step=125
|
Acquisition_1B.doppler_step=125
|
||||||
|
;#dump: Enable or disable the acquisition internal data file logging [true] or [false]
|
||||||
|
Acquisition_1B.dump=false
|
||||||
|
;#filename: Log path and filename
|
||||||
|
Acquisition_1B.dump_filename=./acq_dump.dat
|
||||||
|
|
||||||
|
|
||||||
;######### TRACKING GPS CONFIG ############
|
;######### TRACKING GPS CONFIG ############
|
||||||
|
|
||||||
;#implementation: Selected tracking algorithm: [GPS_L1_CA_DLL_PLL_Tracking] or [GPS_L1_CA_DLL_PLL_C_Aid_Tracking] or [GPS_L1_CA_TCP_CONNECTOR_Tracking] or [Galileo_E1_DLL_PLL_VEML_Tracking]
|
|
||||||
Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking
|
Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking
|
||||||
;#item_type: Type and resolution for each of the signal samples. Use only [gr_complex] in this version.
|
;#item_type: Type and resolution for each of the signal samples.
|
||||||
Tracking_1C.item_type=gr_complex
|
Tracking_1C.item_type=gr_complex
|
||||||
|
|
||||||
;#sampling_frequency: Signal Intermediate Frequency in [Hz]
|
;#sampling_frequency: Signal Intermediate Frequency in [Hz]
|
||||||
Tracking_1C.if=0
|
Tracking_1C.if=0
|
||||||
|
;#pll_bw_hz: PLL loop filter bandwidth [Hz]
|
||||||
|
Tracking_1C.pll_bw_hz=45.0;
|
||||||
|
;#dll_bw_hz: DLL loop filter bandwidth [Hz]
|
||||||
|
Tracking_1C.dll_bw_hz=4.0;
|
||||||
|
;#order: PLL/DLL loop filter order [2] or [3]
|
||||||
|
Tracking_1C.order=3;
|
||||||
;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false]
|
;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false]
|
||||||
Tracking_1C.dump=false
|
Tracking_1C.dump=false
|
||||||
|
|
||||||
;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number.
|
;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number.
|
||||||
Tracking_1C.dump_filename=../data/epl_tracking_ch_
|
Tracking_1C.dump_filename=../data/epl_tracking_ch_
|
||||||
|
|
||||||
;#pll_bw_hz: PLL loop filter bandwidth [Hz]
|
|
||||||
Tracking_1C.pll_bw_hz=45.0;
|
|
||||||
|
|
||||||
;#dll_bw_hz: DLL loop filter bandwidth [Hz]
|
|
||||||
Tracking_1C.dll_bw_hz=4.0;
|
|
||||||
|
|
||||||
;#order: PLL/DLL loop filter order [2] or [3]
|
|
||||||
Tracking_1C.order=3;
|
|
||||||
|
|
||||||
;######### TRACKING GALILEO CONFIG ############
|
;######### TRACKING GALILEO CONFIG ############
|
||||||
|
|
||||||
;#implementation: Selected tracking algorithm: [Galileo_E1_DLL_PLL_VEML_Tracking]
|
|
||||||
Tracking_1B.implementation=Galileo_E1_DLL_PLL_VEML_Tracking
|
Tracking_1B.implementation=Galileo_E1_DLL_PLL_VEML_Tracking
|
||||||
;#item_type: Type and resolution for each of the signal samples. Use only [gr_complex] in this version.
|
;#item_type: Type and resolution for each of the signal samples.
|
||||||
Tracking_1B.item_type=gr_complex
|
Tracking_1B.item_type=gr_complex
|
||||||
|
|
||||||
;#sampling_frequency: Signal Intermediate Frequency in [Hz]
|
;#sampling_frequency: Signal Intermediate Frequency in [Hz]
|
||||||
Tracking_1B.if=0
|
Tracking_1B.if=0
|
||||||
|
|
||||||
;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false]
|
|
||||||
Tracking_1B.dump=false
|
|
||||||
|
|
||||||
;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number.
|
|
||||||
Tracking_1B.dump_filename=../data/veml_tracking_ch_
|
|
||||||
|
|
||||||
;#pll_bw_hz: PLL loop filter bandwidth [Hz]
|
;#pll_bw_hz: PLL loop filter bandwidth [Hz]
|
||||||
Tracking_1B.pll_bw_hz=15.0;
|
Tracking_1B.pll_bw_hz=15.0;
|
||||||
|
|
||||||
;#dll_bw_hz: DLL loop filter bandwidth [Hz]
|
;#dll_bw_hz: DLL loop filter bandwidth [Hz]
|
||||||
Tracking_1B.dll_bw_hz=2.0;
|
Tracking_1B.dll_bw_hz=2.0;
|
||||||
|
|
||||||
;#order: PLL/DLL loop filter order [2] or [3]
|
;#order: PLL/DLL loop filter order [2] or [3]
|
||||||
Tracking_1B.order=3;
|
Tracking_1B.order=3;
|
||||||
|
|
||||||
;#early_late_space_chips: correlator early-late space [chips]. Use [0.5] for GPS and [0.15] for Galileo
|
;#early_late_space_chips: correlator early-late space [chips]. Use [0.5] for GPS and [0.15] for Galileo
|
||||||
Tracking_1B.early_late_space_chips=0.15;
|
Tracking_1B.early_late_space_chips=0.15;
|
||||||
|
|
||||||
;#very_early_late_space_chips: only for [Galileo_E1_DLL_PLL_VEML_Tracking], correlator very early-late space [chips]. Use [0.6]
|
;#very_early_late_space_chips: only for [Galileo_E1_DLL_PLL_VEML_Tracking], correlator very early-late space [chips]. Use [0.6]
|
||||||
Tracking_1B.very_early_late_space_chips=0.6;
|
Tracking_1B.very_early_late_space_chips=0.6;
|
||||||
|
;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false]
|
||||||
|
Tracking_1B.dump=false
|
||||||
|
;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number.
|
||||||
|
Tracking_1B.dump_filename=../data/veml_tracking_ch_
|
||||||
|
|
||||||
|
|
||||||
;######### TELEMETRY DECODER GPS CONFIG ############
|
;######### TELEMETRY DECODER GPS CONFIG ############
|
||||||
;#implementation: Use [GPS_L1_CA_Telemetry_Decoder] for GPS L1 C/A
|
;#implementation: Use [GPS_L1_CA_Telemetry_Decoder] for GPS L1 C/A
|
||||||
TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder
|
TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder
|
||||||
TelemetryDecoder_1C.dump=false
|
TelemetryDecoder_1C.dump=false
|
||||||
;#decimation factor
|
|
||||||
TelemetryDecoder_1C.decimation_factor=4;
|
|
||||||
|
|
||||||
;######### TELEMETRY DECODER GALILEO CONFIG ############
|
;######### TELEMETRY DECODER GALILEO CONFIG ############
|
||||||
;#implementation: Use [Galileo_E1B_Telemetry_Decoder] for Galileo E1B
|
;#implementation: Use [Galileo_E1B_Telemetry_Decoder] for Galileo E1B
|
||||||
@ -422,10 +377,8 @@ TelemetryDecoder_1B.dump=false
|
|||||||
;######### OBSERVABLES CONFIG ############
|
;######### OBSERVABLES CONFIG ############
|
||||||
;#implementation:
|
;#implementation:
|
||||||
Observables.implementation=Hybrid_Observables
|
Observables.implementation=Hybrid_Observables
|
||||||
|
|
||||||
;#dump: Enable or disable the Observables internal binary data file logging [true] or [false]
|
;#dump: Enable or disable the Observables internal binary data file logging [true] or [false]
|
||||||
Observables.dump=false
|
Observables.dump=false
|
||||||
|
|
||||||
;#dump_filename: Log path and filename.
|
;#dump_filename: Log path and filename.
|
||||||
Observables.dump_filename=./observables.dat
|
Observables.dump_filename=./observables.dat
|
||||||
|
|
||||||
@ -433,19 +386,14 @@ Observables.dump_filename=./observables.dat
|
|||||||
;######### PVT CONFIG ############
|
;######### PVT CONFIG ############
|
||||||
;#implementation: Position Velocity and Time (PVT) implementation:
|
;#implementation: Position Velocity and Time (PVT) implementation:
|
||||||
PVT.implementation=RTKLIB_PVT
|
PVT.implementation=RTKLIB_PVT
|
||||||
|
|
||||||
;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms]
|
;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms]
|
||||||
PVT.output_rate_ms=100;
|
PVT.output_rate_ms=100;
|
||||||
|
|
||||||
;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms.
|
;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms.
|
||||||
PVT.display_rate_ms=500;
|
PVT.display_rate_ms=500;
|
||||||
|
|
||||||
;#dump: Enable or disable the PVT internal binary data file logging [true] or [false]
|
|
||||||
PVT.dump=false
|
|
||||||
|
|
||||||
PVT.flag_rtcm_server=false
|
PVT.flag_rtcm_server=false
|
||||||
PVT.flag_rtcm_tty_port=false
|
PVT.flag_rtcm_tty_port=false
|
||||||
PVT.rtcm_dump_devname=/dev/pts/1
|
PVT.rtcm_dump_devname=/dev/pts/1
|
||||||
|
|
||||||
;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump.
|
;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump.
|
||||||
PVT.dump_filename=./PVT
|
PVT.dump_filename=./PVT
|
||||||
|
;#dump: Enable or disable the PVT internal binary data file logging [true] or [false]
|
||||||
|
PVT.dump=false
|
||||||
|
@ -17,65 +17,35 @@ GNSS-SDR.internal_fs_sps=2560000
|
|||||||
;#enable_throttle_control: Enabling this option tells the signal source to keep the delay between samples in post processing.
|
;#enable_throttle_control: Enabling this option tells the signal source to keep the delay between samples in post processing.
|
||||||
; it helps to not overload the CPU, but the processing time will be longer.
|
; it helps to not overload the CPU, but the processing time will be longer.
|
||||||
SignalSource.enable_throttle_control=false
|
SignalSource.enable_throttle_control=false
|
||||||
|
;#repeat: Repeat the processing file.
|
||||||
;#repeat: Repeat the processing file. Disable this option in this version
|
|
||||||
SignalSource.repeat=false
|
SignalSource.repeat=false
|
||||||
|
|
||||||
|
|
||||||
;######### SIGNAL_SOURCE 0 CONFIG ############
|
;######### SIGNAL_SOURCE 0 CONFIG ############
|
||||||
;#implementation: Use [File_Signal_Source] [Nsr_File_Signal_Source] or [UHD_Signal_Source] or [GN3S_Signal_Source] (experimental)
|
;#implementation
|
||||||
SignalSource0.implementation=Nsr_File_Signal_Source
|
SignalSource0.implementation=Nsr_File_Signal_Source
|
||||||
|
|
||||||
;#filename: path to file with the captured GNSS signal samples to be processed
|
;#filename: path to file with the captured GNSS signal samples to be processed
|
||||||
SignalSource0.filename=/datalogger/signals/ifen/E1L1_FE0_Band0.stream ; <- PUT YOUR FILE HERE
|
SignalSource0.filename=/datalogger/signals/ifen/E1L1_FE0_Band0.stream ; <- PUT YOUR FILE HERE
|
||||||
|
|
||||||
;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
|
;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
|
||||||
SignalSource0.item_type=byte
|
SignalSource0.item_type=byte
|
||||||
|
;#sampling_frequency: Original Signal sampling frequency in samples per second
|
||||||
;#sampling_frequency: Original Signal sampling frequency in [Hz]
|
|
||||||
SignalSource0.sampling_frequency=20480000
|
SignalSource0.sampling_frequency=20480000
|
||||||
|
|
||||||
;#freq: RF front-end center frequency in [Hz]
|
|
||||||
SignalSource0.freq=1575420000
|
|
||||||
|
|
||||||
;#subdevice: UHD subdevice specification (for USRP1 use A:0 or B:0)
|
|
||||||
SignalSource0.subdevice=B:0
|
|
||||||
|
|
||||||
;#samples: Number of samples to be processed. Notice that 0 indicates the entire file.
|
;#samples: Number of samples to be processed. Notice that 0 indicates the entire file.
|
||||||
SignalSource0.samples=0
|
SignalSource0.samples=0
|
||||||
|
|
||||||
;#dump: Dump the Signal source data to a file. Disable this option in this version
|
|
||||||
SignalSource0.dump=false
|
|
||||||
|
|
||||||
SignalSource0.dump_filename=../data/signal_source.dat
|
|
||||||
|
|
||||||
;######### SIGNAL_SOURCE 1 CONFIG ############
|
;######### SIGNAL_SOURCE 1 CONFIG ############
|
||||||
;#implementation: Use [File_Signal_Source] [Nsr_File_Signal_Source] or [UHD_Signal_Source] or [GN3S_Signal_Source] (experimental)
|
;#implementation: Use [File_Signal_Source] [Nsr_File_Signal_Source] or [UHD_Signal_Source] or [GN3S_Signal_Source] (experimental)
|
||||||
SignalSource1.implementation=Nsr_File_Signal_Source
|
SignalSource1.implementation=Nsr_File_Signal_Source
|
||||||
|
|
||||||
;#filename: path to file with the captured GNSS signal samples to be processed
|
;#filename: path to file with the captured GNSS signal samples to be processed
|
||||||
SignalSource1.filename=/datalogger/signals/ifen/E1L1_FE0_Band0.stream
|
SignalSource1.filename=/datalogger/signals/ifen/E1L1_FE0_Band0.stream
|
||||||
|
|
||||||
;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
|
;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
|
||||||
SignalSource1.item_type=byte
|
SignalSource1.item_type=byte
|
||||||
|
;#sampling_frequency: Original Signal sampling frequency in samples per second
|
||||||
;#sampling_frequency: Original Signal sampling frequency in [Hz]
|
|
||||||
SignalSource1.sampling_frequency=20480000
|
SignalSource1.sampling_frequency=20480000
|
||||||
|
|
||||||
;#freq: RF front-end center frequency in [Hz]
|
|
||||||
SignalSource1.freq=1575420000
|
|
||||||
|
|
||||||
;#subdevice: UHD subdevice specification (for USRP1 use A:0 or B:0)
|
|
||||||
SignalSource1.subdevice=B:0
|
|
||||||
|
|
||||||
;#samples: Number of samples to be processed. Notice that 0 indicates the entire file.
|
;#samples: Number of samples to be processed. Notice that 0 indicates the entire file.
|
||||||
SignalSource1.samples=0
|
SignalSource1.samples=0
|
||||||
|
|
||||||
;#dump: Dump the Signal source data to a file. Disable this option in this version
|
|
||||||
SignalSource1.dump=false
|
|
||||||
|
|
||||||
SignalSource1.dump_filename=../data/signal_source.dat
|
|
||||||
|
|
||||||
|
|
||||||
;######### SIGNAL_CONDITIONER 0 CONFIG ############
|
;######### SIGNAL_CONDITIONER 0 CONFIG ############
|
||||||
;## It holds blocks to change data type, filter and resample input data.
|
;## It holds blocks to change data type, filter and resample input data.
|
||||||
@ -108,14 +78,13 @@ InputFilter0.dump_filename=../data/input_filter.dat
|
|||||||
|
|
||||||
;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation.
|
;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation.
|
||||||
;#These options are based on parameters of gnuradio's function: gr_remez.
|
;#These options are based on parameters of gnuradio's function: gr_remez.
|
||||||
;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse
|
;#This function calculates the optimal (in the Chebyshev/minimax sense) FIR filter impulse response given a set of band edges,
|
||||||
;#reponse given a set of band edges, the desired reponse on those bands,
|
;#the desired response on those bands, and the weight given to the error in those bands.
|
||||||
;#and the weight given to the error in those bands.
|
|
||||||
|
|
||||||
;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version.
|
;#input_item_type: Type and resolution for input signal samples.
|
||||||
InputFilter0.input_item_type=float
|
InputFilter0.input_item_type=float
|
||||||
|
|
||||||
;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version.
|
;#outut_item_type: Type and resolution for output filtered signal samples.
|
||||||
InputFilter0.output_item_type=gr_complex
|
InputFilter0.output_item_type=gr_complex
|
||||||
|
|
||||||
;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version.
|
;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version.
|
||||||
@ -206,14 +175,13 @@ InputFilter1.dump_filename=../data/input_filter.dat
|
|||||||
|
|
||||||
;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation.
|
;#The following options are used in the filter design of Fir_Filter and Freq_Xlating_Fir_Filter implementation.
|
||||||
;#These options are based on parameters of gnuradio's function: gr_remez.
|
;#These options are based on parameters of gnuradio's function: gr_remez.
|
||||||
;#These function calculates the optimal (in the Chebyshev/minimax sense) FIR filter inpulse
|
;#This function calculates the optimal (in the Chebyshev/minimax sense) FIR filter impulse response given a set of band edges,
|
||||||
;#reponse given a set of band edges, the desired reponse on those bands,
|
;#the desired response on those bands, and the weight given to the error in those bands.
|
||||||
;#and the weight given to the error in those bands.
|
|
||||||
|
|
||||||
;#input_item_type: Type and resolution for input signal samples. Use only gr_complex in this version.
|
;#input_item_type: Type and resolution for input signal samples.
|
||||||
InputFilter1.input_item_type=float
|
InputFilter1.input_item_type=float
|
||||||
|
|
||||||
;#outut_item_type: Type and resolution for output filtered signal samples. Use only gr_complex in this version.
|
;#outut_item_type: Type and resolution for output filtered signal samples.
|
||||||
InputFilter1.output_item_type=gr_complex
|
InputFilter1.output_item_type=gr_complex
|
||||||
|
|
||||||
;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version.
|
;#taps_item_type: Type and resolution for the taps of the filter. Use only float in this version.
|
||||||
@ -284,9 +252,11 @@ Channels.in_acquisition=1
|
|||||||
|
|
||||||
;#signal:
|
;#signal:
|
||||||
;# "1C" GPS L1 C/A
|
;# "1C" GPS L1 C/A
|
||||||
;# "2S" GPS L2 L2C (M)
|
|
||||||
;# "1B" GALILEO E1 B (I/NAV OS/CS/SoL)
|
;# "1B" GALILEO E1 B (I/NAV OS/CS/SoL)
|
||||||
|
;# "1G" GLONASS L1 C/A
|
||||||
|
;# "2S" GPS L2 L2C (M)
|
||||||
;# "5X" GALILEO E5a I+Q
|
;# "5X" GALILEO E5a I+Q
|
||||||
|
;# "L5" GPS L5
|
||||||
|
|
||||||
;# SOURCE CONNECTION
|
;# SOURCE CONNECTION
|
||||||
Channel0.RF_channel_ID=0
|
Channel0.RF_channel_ID=0
|
||||||
@ -328,19 +298,13 @@ Channel15.signal=1B
|
|||||||
|
|
||||||
|
|
||||||
;######### GPS ACQUISITION CONFIG ############
|
;######### GPS ACQUISITION CONFIG ############
|
||||||
|
Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition
|
||||||
;#dump: Enable or disable the acquisition internal data file logging [true] or [false]
|
;#item_type: Type and resolution for each of the signal samples.
|
||||||
Acquisition_1C.dump=false
|
|
||||||
;#filename: Log path and filename
|
|
||||||
Acquisition_1C.dump_filename=./acq_dump.dat
|
|
||||||
;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
|
|
||||||
Acquisition_1C.item_type=gr_complex
|
Acquisition_1C.item_type=gr_complex
|
||||||
;#if: Signal intermediate frequency in [Hz]
|
;#if: Signal intermediate frequency in [Hz]
|
||||||
Acquisition_1C.if=0
|
Acquisition_1C.if=0
|
||||||
;#sampled_ms: Signal block duration for the acquisition signal detection [ms]
|
;#sampled_ms: Signal block duration for the acquisition signal detection [ms]
|
||||||
Acquisition_1C.sampled_ms=1
|
Acquisition_1C.sampled_ms=1
|
||||||
;#implementation: Acquisition algorithm selection for this channel: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
|
|
||||||
Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition
|
|
||||||
;#threshold: Acquisition threshold
|
;#threshold: Acquisition threshold
|
||||||
Acquisition_1C.threshold=0.0075
|
Acquisition_1C.threshold=0.0075
|
||||||
;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
|
;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
|
||||||
@ -349,22 +313,20 @@ Acquisition_1C.threshold=0.0075
|
|||||||
Acquisition_1C.doppler_max=10000
|
Acquisition_1C.doppler_max=10000
|
||||||
;#doppler_max: Doppler step in the grid search [Hz]
|
;#doppler_max: Doppler step in the grid search [Hz]
|
||||||
Acquisition_1C.doppler_step=500
|
Acquisition_1C.doppler_step=500
|
||||||
|
;#dump: Enable or disable the acquisition internal data file logging [true] or [false]
|
||||||
|
Acquisition_1C.dump=false
|
||||||
|
;#filename: Log path and filename
|
||||||
|
Acquisition_1C.dump_filename=./acq_dump.dat
|
||||||
|
|
||||||
|
|
||||||
;######### GALILEO ACQUISITION CONFIG ############
|
;######### GALILEO ACQUISITION CONFIG ############
|
||||||
|
Acquisition_1B.implementation=Galileo_E1_PCPS_Ambiguous_Acquisition
|
||||||
;#dump: Enable or disable the acquisition internal data file logging [true] or [false]
|
;#item_type: Type and resolution for each of the signal samples.
|
||||||
Acquisition_1B.dump=false
|
|
||||||
;#filename: Log path and filename
|
|
||||||
Acquisition_1B.dump_filename=./acq_dump.dat
|
|
||||||
;#item_type: Type and resolution for each of the signal samples. Use only gr_complex in this version.
|
|
||||||
Acquisition_1B.item_type=gr_complex
|
Acquisition_1B.item_type=gr_complex
|
||||||
;#if: Signal intermediate frequency in [Hz]
|
;#if: Signal intermediate frequency in [Hz]
|
||||||
Acquisition_1B.if=0
|
Acquisition_1B.if=0
|
||||||
;#sampled_ms: Signal block duration for the acquisition signal detection [ms]
|
;#sampled_ms: Signal block duration for the acquisition signal detection [ms]
|
||||||
Acquisition_1B.sampled_ms=4
|
Acquisition_1B.sampled_ms=4
|
||||||
;#implementation: Acquisition algorithm selection for this channel: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
|
|
||||||
Acquisition_1B.implementation=Galileo_E1_PCPS_Ambiguous_Acquisition
|
|
||||||
;#threshold: Acquisition threshold
|
;#threshold: Acquisition threshold
|
||||||
;Acquisition_1B.threshold=0
|
;Acquisition_1B.threshold=0
|
||||||
;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
|
;#pfa: Acquisition false alarm probability. This option overrides the threshold option. Only use with implementations: [GPS_L1_CA_PCPS_Acquisition] or [Galileo_E1_PCPS_Ambiguous_Acquisition]
|
||||||
@ -373,105 +335,81 @@ Acquisition_1B.pfa=0.0000002
|
|||||||
Acquisition_1B.doppler_max=15000
|
Acquisition_1B.doppler_max=15000
|
||||||
;#doppler_max: Doppler step in the grid search [Hz]
|
;#doppler_max: Doppler step in the grid search [Hz]
|
||||||
Acquisition_1B.doppler_step=125
|
Acquisition_1B.doppler_step=125
|
||||||
|
;#dump: Enable or disable the acquisition internal data file logging [true] or [false]
|
||||||
|
Acquisition_1B.dump=false
|
||||||
|
;#filename: Log path and filename
|
||||||
|
Acquisition_1B.dump_filename=./acq_dump.dat
|
||||||
|
|
||||||
|
|
||||||
;######### TRACKING GPS CONFIG ############
|
;######### TRACKING GPS CONFIG ############
|
||||||
|
|
||||||
;#implementation: Selected tracking algorithm: [GPS_L1_CA_DLL_PLL_Tracking] or [GPS_L1_CA_DLL_PLL_C_Aid_Tracking] or [GPS_L1_CA_TCP_CONNECTOR_Tracking] or [Galileo_E1_DLL_PLL_VEML_Tracking]
|
|
||||||
Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking
|
Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking
|
||||||
;#item_type: Type and resolution for each of the signal samples.
|
;#item_type: Type and resolution for each of the signal samples.
|
||||||
Tracking_1C.item_type=gr_complex
|
Tracking_1C.item_type=gr_complex
|
||||||
|
|
||||||
;#sampling_frequency: Signal Intermediate Frequency in [Hz]
|
;#sampling_frequency: Signal Intermediate Frequency in [Hz]
|
||||||
Tracking_1C.if=0
|
Tracking_1C.if=0
|
||||||
|
;#pll_bw_hz: PLL loop filter bandwidth [Hz]
|
||||||
|
Tracking_1C.pll_bw_hz=45.0;
|
||||||
|
;#dll_bw_hz: DLL loop filter bandwidth [Hz]
|
||||||
|
Tracking_1C.dll_bw_hz=2.0;
|
||||||
|
;#order: PLL/DLL loop filter order [2] or [3]
|
||||||
|
Tracking_1C.order=3;
|
||||||
;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false]
|
;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false]
|
||||||
Tracking_1C.dump=false
|
Tracking_1C.dump=false
|
||||||
|
|
||||||
;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number.
|
;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number.
|
||||||
Tracking_1C.dump_filename=../data/epl_tracking_ch_
|
Tracking_1C.dump_filename=../data/epl_tracking_ch_
|
||||||
|
|
||||||
;#pll_bw_hz: PLL loop filter bandwidth [Hz]
|
|
||||||
Tracking_1C.pll_bw_hz=45.0;
|
|
||||||
|
|
||||||
;#dll_bw_hz: DLL loop filter bandwidth [Hz]
|
|
||||||
Tracking_1C.dll_bw_hz=2.0;
|
|
||||||
|
|
||||||
;#order: PLL/DLL loop filter order [2] or [3]
|
|
||||||
Tracking_1C.order=3;
|
|
||||||
|
|
||||||
;######### TRACKING GALILEO CONFIG ############
|
;######### TRACKING GALILEO CONFIG ############
|
||||||
|
|
||||||
;#implementation: Selected tracking algorithm: [Galileo_E1_DLL_PLL_VEML_Tracking]
|
|
||||||
Tracking_1B.implementation=Galileo_E1_DLL_PLL_VEML_Tracking
|
Tracking_1B.implementation=Galileo_E1_DLL_PLL_VEML_Tracking
|
||||||
;#item_type: Type and resolution for each of the signal samples. Use only [gr_complex] in this version.
|
;#item_type: Type and resolution for each of the signal samples.
|
||||||
Tracking_1B.item_type=gr_complex
|
Tracking_1B.item_type=gr_complex
|
||||||
|
|
||||||
;#sampling_frequency: Signal Intermediate Frequency in [Hz]
|
;#sampling_frequency: Signal Intermediate Frequency in [Hz]
|
||||||
Tracking_1B.if=0
|
Tracking_1B.if=0
|
||||||
|
|
||||||
;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false]
|
|
||||||
Tracking_1B.dump=false
|
|
||||||
|
|
||||||
;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number.
|
|
||||||
Tracking_1B.dump_filename=../data/veml_tracking_ch_
|
|
||||||
|
|
||||||
;#pll_bw_hz: PLL loop filter bandwidth [Hz]
|
;#pll_bw_hz: PLL loop filter bandwidth [Hz]
|
||||||
Tracking_1B.pll_bw_hz=15.0;
|
Tracking_1B.pll_bw_hz=15.0;
|
||||||
|
|
||||||
;#dll_bw_hz: DLL loop filter bandwidth [Hz]
|
;#dll_bw_hz: DLL loop filter bandwidth [Hz]
|
||||||
Tracking_1B.dll_bw_hz=2.0;
|
Tracking_1B.dll_bw_hz=2.0;
|
||||||
|
|
||||||
;#order: PLL/DLL loop filter order [2] or [3]
|
;#order: PLL/DLL loop filter order [2] or [3]
|
||||||
Tracking_1B.order=3;
|
Tracking_1B.order=3;
|
||||||
|
|
||||||
;#early_late_space_chips: correlator early-late space [chips]. Use [0.5] for GPS and [0.15] for Galileo
|
;#early_late_space_chips: correlator early-late space [chips]. Use [0.5] for GPS and [0.15] for Galileo
|
||||||
Tracking_1B.early_late_space_chips=0.15;
|
Tracking_1B.early_late_space_chips=0.15;
|
||||||
|
|
||||||
;#very_early_late_space_chips: only for [Galileo_E1_DLL_PLL_VEML_Tracking], correlator very early-late space [chips]. Use [0.6]
|
;#very_early_late_space_chips: only for [Galileo_E1_DLL_PLL_VEML_Tracking], correlator very early-late space [chips]. Use [0.6]
|
||||||
Tracking_1B.very_early_late_space_chips=0.6;
|
Tracking_1B.very_early_late_space_chips=0.6;
|
||||||
|
;#dump: Enable or disable the Tracking internal binary data file logging [true] or [false]
|
||||||
|
Tracking_1B.dump=false
|
||||||
|
;#dump_filename: Log path and filename. Notice that the tracking channel will add "x.dat" where x is the channel number.
|
||||||
|
Tracking_1B.dump_filename=../data/veml_tracking_ch_
|
||||||
|
|
||||||
|
|
||||||
;######### TELEMETRY DECODER GPS CONFIG ############
|
;######### TELEMETRY DECODER GPS CONFIG ############
|
||||||
;#implementation: Use [GPS_L1_CA_Telemetry_Decoder] for GPS L1 C/A
|
;#implementation: Use [GPS_L1_CA_Telemetry_Decoder] for GPS L1 C/A
|
||||||
TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder
|
TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder
|
||||||
TelemetryDecoder_1C.dump=false
|
TelemetryDecoder_1C.dump=false
|
||||||
;#decimation factor
|
|
||||||
TelemetryDecoder_1C.decimation_factor=1;
|
|
||||||
|
|
||||||
;######### TELEMETRY DECODER GALILEO CONFIG ############
|
;######### TELEMETRY DECODER GALILEO CONFIG ############
|
||||||
;#implementation: Use [Galileo_E1B_Telemetry_Decoder] for Galileo E1B
|
;#implementation: Use [Galileo_E1B_Telemetry_Decoder] for Galileo E1B
|
||||||
TelemetryDecoder_1B.implementation=Galileo_E1B_Telemetry_Decoder
|
TelemetryDecoder_1B.implementation=Galileo_E1B_Telemetry_Decoder
|
||||||
TelemetryDecoder_1B.dump=false
|
|
||||||
TelemetryDecoder_1B.decimation_factor=4;
|
|
||||||
|
|
||||||
|
|
||||||
;######### OBSERVABLES CONFIG ############
|
;######### OBSERVABLES CONFIG ############
|
||||||
;#implementation:
|
|
||||||
Observables.implementation=Hybrid_Observables
|
Observables.implementation=Hybrid_Observables
|
||||||
|
|
||||||
;#dump: Enable or disable the Observables internal binary data file logging [true] or [false]
|
;#dump: Enable or disable the Observables internal binary data file logging [true] or [false]
|
||||||
Observables.dump=false
|
Observables.dump=false
|
||||||
|
|
||||||
;#dump_filename: Log path and filename.
|
;#dump_filename: Log path and filename.
|
||||||
Observables.dump_filename=./observables.dat
|
Observables.dump_filename=./observables.dat
|
||||||
|
|
||||||
|
|
||||||
;######### PVT CONFIG ############
|
;######### PVT CONFIG ############
|
||||||
;#implementation: Position Velocity and Time (PVT) implementation:
|
|
||||||
PVT.implementation=RTKLIB_PVT
|
PVT.implementation=RTKLIB_PVT
|
||||||
|
|
||||||
;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms]
|
;#output_rate_ms: Period between two PVT outputs. Notice that the minimum period is equal to the tracking integration time (for GPS CA L1 is 1ms) [ms]
|
||||||
PVT.output_rate_ms=10;
|
PVT.output_rate_ms=10;
|
||||||
|
|
||||||
;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms.
|
;#display_rate_ms: Position console print (std::out) interval [ms]. Notice that output_rate_ms<=display_rate_ms.
|
||||||
PVT.display_rate_ms=500;
|
PVT.display_rate_ms=500;
|
||||||
|
|
||||||
;#dump: Enable or disable the PVT internal binary data file logging [true] or [false]
|
|
||||||
PVT.dump=false
|
|
||||||
|
|
||||||
PVT.flag_rtcm_server=false
|
PVT.flag_rtcm_server=false
|
||||||
PVT.flag_rtcm_tty_port=false
|
PVT.flag_rtcm_tty_port=false
|
||||||
PVT.rtcm_dump_devname=/dev/pts/1
|
PVT.rtcm_dump_devname=/dev/pts/1
|
||||||
|
|
||||||
;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump.
|
;#dump_filename: Log path and filename without extension. Notice that PVT will add ".dat" to the binary dump and ".kml" to GoogleEarth dump.
|
||||||
PVT.dump_filename=./PVT
|
PVT.dump_filename=./PVT
|
||||||
|
;#dump: Enable or disable the PVT internal binary data file logging [true] or [false]
|
||||||
|
PVT.dump=false
|
||||||
|
@ -84,17 +84,24 @@ RtklibPvt::RtklibPvt(ConfigurationInterface* configuration,
|
|||||||
unsigned short rtcm_station_id = configuration->property(role + ".rtcm_station_id", 1234);
|
unsigned short rtcm_station_id = configuration->property(role + ".rtcm_station_id", 1234);
|
||||||
// RTCM message rates: least common multiple with output_rate_ms
|
// RTCM message rates: least common multiple with output_rate_ms
|
||||||
int rtcm_MT1019_rate_ms = boost::math::lcm(configuration->property(role + ".rtcm_MT1019_rate_ms", 5000), output_rate_ms);
|
int rtcm_MT1019_rate_ms = boost::math::lcm(configuration->property(role + ".rtcm_MT1019_rate_ms", 5000), output_rate_ms);
|
||||||
|
int rtcm_MT1020_rate_ms = boost::math::lcm(configuration->property(role + ".rtcm_MT1020_rate_ms", 5000), output_rate_ms);
|
||||||
int rtcm_MT1045_rate_ms = boost::math::lcm(configuration->property(role + ".rtcm_MT1045_rate_ms", 5000), output_rate_ms);
|
int rtcm_MT1045_rate_ms = boost::math::lcm(configuration->property(role + ".rtcm_MT1045_rate_ms", 5000), output_rate_ms);
|
||||||
int rtcm_MSM_rate_ms = boost::math::lcm(configuration->property(role + ".rtcm_MSM_rate_ms", 1000), output_rate_ms);
|
int rtcm_MSM_rate_ms = boost::math::lcm(configuration->property(role + ".rtcm_MSM_rate_ms", 1000), output_rate_ms);
|
||||||
int rtcm_MT1077_rate_ms = boost::math::lcm(configuration->property(role + ".rtcm_MT1077_rate_ms", rtcm_MSM_rate_ms), output_rate_ms);
|
int rtcm_MT1077_rate_ms = boost::math::lcm(configuration->property(role + ".rtcm_MT1077_rate_ms", rtcm_MSM_rate_ms), output_rate_ms);
|
||||||
|
int rtcm_MT1087_rate_ms = boost::math::lcm(configuration->property(role + ".rtcm_MT1087_rate_ms", rtcm_MSM_rate_ms), output_rate_ms);
|
||||||
int rtcm_MT1097_rate_ms = boost::math::lcm(configuration->property(role + ".rtcm_MT1097_rate_ms", rtcm_MSM_rate_ms), output_rate_ms);
|
int rtcm_MT1097_rate_ms = boost::math::lcm(configuration->property(role + ".rtcm_MT1097_rate_ms", rtcm_MSM_rate_ms), output_rate_ms);
|
||||||
std::map<int,int> rtcm_msg_rate_ms;
|
std::map<int,int> rtcm_msg_rate_ms;
|
||||||
rtcm_msg_rate_ms[1019] = rtcm_MT1019_rate_ms;
|
rtcm_msg_rate_ms[1019] = rtcm_MT1019_rate_ms;
|
||||||
|
rtcm_msg_rate_ms[1020] = rtcm_MT1020_rate_ms;
|
||||||
rtcm_msg_rate_ms[1045] = rtcm_MT1045_rate_ms;
|
rtcm_msg_rate_ms[1045] = rtcm_MT1045_rate_ms;
|
||||||
for (int k = 1071; k < 1078; k++) // All GPS MSM
|
for (int k = 1071; k < 1078; k++) // All GPS MSM
|
||||||
{
|
{
|
||||||
rtcm_msg_rate_ms[k] = rtcm_MT1077_rate_ms;
|
rtcm_msg_rate_ms[k] = rtcm_MT1077_rate_ms;
|
||||||
}
|
}
|
||||||
|
for (int k = 1081; k < 1088; k++) // All GLONASS MSM
|
||||||
|
{
|
||||||
|
rtcm_msg_rate_ms[k] = rtcm_MT1087_rate_ms;
|
||||||
|
}
|
||||||
for (int k = 1091; k < 1098; k++) // All Galileo MSM
|
for (int k = 1091; k < 1098; k++) // All Galileo MSM
|
||||||
{
|
{
|
||||||
rtcm_msg_rate_ms[k] = rtcm_MT1097_rate_ms;
|
rtcm_msg_rate_ms[k] = rtcm_MT1097_rate_ms;
|
||||||
@ -138,41 +145,54 @@ RtklibPvt::RtklibPvt(ConfigurationInterface* configuration,
|
|||||||
* 20 | GPS L5 + Galileo E5b
|
* 20 | GPS L5 + Galileo E5b
|
||||||
* 21 | GPS L1 C/A + Galileo E1B + GPS L2C
|
* 21 | GPS L1 C/A + Galileo E1B + GPS L2C
|
||||||
* 22 | GPS L1 C/A + Galileo E1B + GPS L5
|
* 22 | GPS L1 C/A + Galileo E1B + GPS L5
|
||||||
|
* 23 | GLONASS L1 C/A
|
||||||
|
* 24 | GLONASS L2 C/A
|
||||||
|
* 25 | GLONASS L1 C/A + GLONASS L2 C/A
|
||||||
|
* 26 | GPS L1 C/A + GLONASS L1 C/A
|
||||||
|
* 27 | Galileo E1B + GLONASS L1 C/A
|
||||||
|
* 28 | GPS L2C + GLONASS L1 C/A
|
||||||
*/
|
*/
|
||||||
int gps_1C_count = configuration->property("Channels_1C.count", 0);
|
int gps_1C_count = configuration->property("Channels_1C.count", 0);
|
||||||
int gps_2S_count = configuration->property("Channels_2S.count", 0);
|
int gps_2S_count = configuration->property("Channels_2S.count", 0);
|
||||||
int gps_L5_count = configuration->property("Channels_L5.count", 0);
|
int gps_L5_count = configuration->property("Channels_L5.count", 0);
|
||||||
int gal_1B_count = configuration->property("Channels_1B.count", 0);
|
int gal_1B_count = configuration->property("Channels_1B.count", 0);
|
||||||
int gal_E5a_count = configuration->property("Channels_5X.count", 0); // GPS L5 or Galileo E5a ?
|
int gal_E5a_count = configuration->property("Channels_5X.count", 0);
|
||||||
int gal_E5b_count = configuration->property("Channels_7X.count", 0);
|
int gal_E5b_count = configuration->property("Channels_7X.count", 0);
|
||||||
|
int glo_1G_count = configuration->property("Channels_1G.count", 0);
|
||||||
|
|
||||||
unsigned int type_of_receiver = 0;
|
unsigned int type_of_receiver = 0;
|
||||||
|
|
||||||
// *******************WARNING!!!!!!!***********
|
// *******************WARNING!!!!!!!***********
|
||||||
// GPS L5 only configurable for single frequency, single system at the moment!!!!!!
|
// GPS L5 only configurable for single frequency, single system at the moment!!!!!!
|
||||||
if( (gps_1C_count != 0) && (gps_2S_count == 0) && (gal_1B_count == 0) && (gal_E5a_count == 0) && (gal_E5b_count == 0)) type_of_receiver = 1;
|
if( (gps_1C_count != 0) && (gps_2S_count == 0) && (gps_L5_count == 0) && (gal_1B_count == 0) && (gal_E5a_count == 0) && (gal_E5b_count == 0) && (glo_1G_count == 0)) type_of_receiver = 1;
|
||||||
if( (gps_1C_count == 0) && (gps_2S_count != 0) && (gal_1B_count == 0) && (gal_E5a_count == 0) && (gal_E5b_count == 0)) type_of_receiver = 2;
|
if( (gps_1C_count == 0) && (gps_2S_count != 0) && (gps_L5_count == 0) && (gal_1B_count == 0) && (gal_E5a_count == 0) && (gal_E5b_count == 0) && (glo_1G_count == 0)) type_of_receiver = 2;
|
||||||
if( (gps_1C_count == 0) && (gps_2S_count == 0) && (gps_L5_count != 0) && (gal_1B_count == 0) && (gal_E5a_count == 0) && (gal_E5b_count == 0)) type_of_receiver = 3;
|
if( (gps_1C_count == 0) && (gps_2S_count == 0) && (gps_L5_count != 0) && (gal_1B_count == 0) && (gal_E5a_count == 0) && (gal_E5b_count == 0) && (glo_1G_count == 0)) type_of_receiver = 3;
|
||||||
if( (gps_1C_count == 0) && (gps_2S_count == 0) && (gal_1B_count != 0) && (gal_E5a_count == 0) && (gal_E5b_count == 0)) type_of_receiver = 4;
|
if( (gps_1C_count == 0) && (gps_2S_count == 0) && (gps_L5_count == 0) && (gal_1B_count != 0) && (gal_E5a_count == 0) && (gal_E5b_count == 0) && (glo_1G_count == 0)) type_of_receiver = 4;
|
||||||
if( (gps_1C_count == 0) && (gps_2S_count == 0) && (gal_1B_count == 0) && (gal_E5a_count != 0) && (gal_E5b_count == 0)) type_of_receiver = 5;
|
if( (gps_1C_count == 0) && (gps_2S_count == 0) && (gps_L5_count == 0) && (gal_1B_count == 0) && (gal_E5a_count != 0) && (gal_E5b_count == 0) && (glo_1G_count == 0)) type_of_receiver = 5;
|
||||||
if( (gps_1C_count == 0) && (gps_2S_count == 0) && (gal_1B_count == 0) && (gal_E5a_count == 0) && (gal_E5b_count != 0)) type_of_receiver = 6;
|
if( (gps_1C_count == 0) && (gps_2S_count == 0) && (gps_L5_count == 0) && (gal_1B_count == 0) && (gal_E5a_count == 0) && (gal_E5b_count != 0) && (glo_1G_count == 0)) type_of_receiver = 6;
|
||||||
|
|
||||||
if( (gps_1C_count != 0) && (gps_2S_count != 0) && (gal_1B_count == 0) && (gal_E5a_count == 0) && (gal_E5b_count == 0)) type_of_receiver = 7;
|
if( (gps_1C_count != 0) && (gps_2S_count != 0) && (gps_L5_count == 0) && (gal_1B_count == 0) && (gal_E5a_count == 0) && (gal_E5b_count == 0) && (glo_1G_count == 0)) type_of_receiver = 7;
|
||||||
//if( (gps_1C_count != 0) && (gps_2S_count == 0) && (gal_1B_count == 0) && (gal_E5a_count == 0) && (gal_E5b_count == 0)) type_of_receiver = 8;
|
//if( (gps_1C_count != 0) && (gps_2S_count == 0) && (gps_L5_count == 0) && (gal_1B_count == 0) && (gal_E5a_count == 0) && (gal_E5b_count == 0)) type_of_receiver = 8;
|
||||||
if( (gps_1C_count != 0) && (gps_2S_count == 0) && (gal_1B_count != 0) && (gal_E5a_count == 0) && (gal_E5b_count == 0)) type_of_receiver = 9;
|
if( (gps_1C_count != 0) && (gps_2S_count == 0) && (gps_L5_count == 0) && (gal_1B_count != 0) && (gal_E5a_count == 0) && (gal_E5b_count == 0) && (glo_1G_count == 0)) type_of_receiver = 9;
|
||||||
if( (gps_1C_count != 0) && (gps_2S_count == 0) && (gal_1B_count == 0) && (gal_E5a_count != 0) && (gal_E5b_count == 0)) type_of_receiver = 10;
|
if( (gps_1C_count != 0) && (gps_2S_count == 0) && (gps_L5_count == 0) && (gal_1B_count == 0) && (gal_E5a_count != 0) && (gal_E5b_count == 0) && (glo_1G_count == 0)) type_of_receiver = 10;
|
||||||
if( (gps_1C_count != 0) && (gps_2S_count == 0) && (gal_1B_count == 0) && (gal_E5a_count == 0) && (gal_E5b_count != 0)) type_of_receiver = 11;
|
if( (gps_1C_count != 0) && (gps_2S_count == 0) && (gps_L5_count == 0) && (gal_1B_count == 0) && (gal_E5a_count == 0) && (gal_E5b_count != 0) && (glo_1G_count == 0)) type_of_receiver = 11;
|
||||||
if( (gps_1C_count == 0) && (gps_2S_count != 0) && (gal_1B_count != 0) && (gal_E5a_count == 0) && (gal_E5b_count == 0)) type_of_receiver = 12;
|
if( (gps_1C_count == 0) && (gps_2S_count != 0) && (gps_L5_count == 0) && (gal_1B_count != 0) && (gal_E5a_count == 0) && (gal_E5b_count == 0) && (glo_1G_count == 0)) type_of_receiver = 12;
|
||||||
//if( (gps_1C_count == 0) && (gps_2S_count == 0) && (gal_1B_count != 0) && (gal_E5a_count == 0) && (gal_E5b_count == 0)) type_of_receiver = 13;
|
//if( (gps_1C_count == 0) && (gps_2S_count == 0) && (gal_1B_count != 0) && (gal_E5a_count == 0) && (gal_E5b_count == 0)) type_of_receiver = 13;
|
||||||
if( (gps_1C_count == 0) && (gps_2S_count == 0) && (gal_1B_count != 0) && (gal_E5a_count != 0) && (gal_E5b_count == 0)) type_of_receiver = 14;
|
if( (gps_1C_count == 0) && (gps_2S_count == 0) && (gps_L5_count == 0) && (gal_1B_count != 0) && (gal_E5a_count != 0) && (gal_E5b_count == 0) && (glo_1G_count == 0)) type_of_receiver = 14;
|
||||||
if( (gps_1C_count == 0) && (gps_2S_count == 0) && (gal_1B_count != 0) && (gal_E5a_count == 0) && (gal_E5b_count != 0)) type_of_receiver = 15;
|
if( (gps_1C_count == 0) && (gps_2S_count == 0) && (gps_L5_count == 0) && (gal_1B_count != 0) && (gal_E5a_count == 0) && (gal_E5b_count != 0) && (glo_1G_count == 0)) type_of_receiver = 15;
|
||||||
//if( (gps_1C_count == 0) && (gps_2S_count == 0) && (gal_1B_count == 0) && (gal_E5a_count == 0) && (gal_E5b_count == 0)) type_of_receiver = 16;
|
//if( (gps_1C_count == 0) && (gps_2S_count == 0) && (gps_L5_count == 0) && (gal_1B_count == 0) && (gal_E5a_count == 0) && (gal_E5b_count == 0)) type_of_receiver = 16;
|
||||||
if( (gps_1C_count == 0) && (gps_2S_count != 0) && (gal_1B_count == 0) && (gal_E5a_count != 0) && (gal_E5b_count == 0)) type_of_receiver = 17;
|
if( (gps_1C_count == 0) && (gps_2S_count != 0) && (gps_L5_count == 0) && (gal_1B_count == 0) && (gal_E5a_count != 0) && (gal_E5b_count == 0) && (glo_1G_count == 0)) type_of_receiver = 17;
|
||||||
if( (gps_1C_count == 0) && (gps_2S_count != 0) && (gal_1B_count == 0) && (gal_E5a_count == 0) && (gal_E5b_count != 0)) type_of_receiver = 18;
|
if( (gps_1C_count == 0) && (gps_2S_count != 0) && (gps_L5_count == 0) && (gal_1B_count == 0) && (gal_E5a_count == 0) && (gal_E5b_count != 0) && (glo_1G_count == 0)) type_of_receiver = 18;
|
||||||
//if( (gps_1C_count == 0) && (gps_2S_count == 0) && (gal_1B_count == 0) && (gal_E5a_count == 0) && (gal_E5b_count == 0)) type_of_receiver = 19;
|
//if( (gps_1C_count == 0) && (gps_2S_count == 0) && (gps_L5_count == 0) && (gal_1B_count == 0) && (gal_E5a_count == 0) && (gal_E5b_count == 0)) type_of_receiver = 19;
|
||||||
//if( (gps_1C_count == 0) && (gps_2S_count == 0) && (gal_1B_count == 0) && (gal_E5a_count == 0) && (gal_E5b_count == 0)) type_of_receiver = 20;
|
//if( (gps_1C_count == 0) && (gps_2S_count == 0) && (gps_L5_count == 0) && (gal_1B_count == 0) && (gal_E5a_count == 0) && (gal_E5b_count == 0)) type_of_receiver = 20;
|
||||||
if( (gps_1C_count != 0) && (gps_2S_count != 0) && (gal_1B_count != 0) && (gal_E5a_count == 0) && (gal_E5b_count == 0)) type_of_receiver = 21;
|
if( (gps_1C_count != 0) && (gps_2S_count != 0) && (gps_L5_count == 0) && (gal_1B_count != 0) && (gal_E5a_count == 0) && (gal_E5b_count == 0) && (glo_1G_count == 0)) type_of_receiver = 21;
|
||||||
//if( (gps_1C_count == 0) && (gps_2S_count == 0) && (gal_1B_count == 0) && (gal_E5a_count == 0) && (gal_E5b_count = 0)) type_of_receiver = 22;
|
//if( (gps_1C_count == 0) && (gps_2S_count == 0) && (gps_L5_count == 0) && (gal_1B_count == 0) && (gal_E5a_count == 0) && (gal_E5b_count = 0)) type_of_receiver = 22;
|
||||||
|
if( (gps_1C_count == 0) && (gps_2S_count == 0) && (gps_L5_count == 0) && (gal_1B_count == 0) && (gal_E5a_count == 0) && (gal_E5b_count == 0) && (glo_1G_count != 0)) type_of_receiver = 23;
|
||||||
|
//if( (gps_1C_count == 0) && (gps_2S_count == 0) && (gps_L5_count == 0) && (gal_1B_count == 0) && (gal_E5a_count == 0) && (gal_E5b_count == 0) && (glo_1G_count == 0) && (glo_2R_count != 0)) type_of_receiver = 24;
|
||||||
|
//if( (gps_1C_count == 0) && (gps_2S_count == 0) && (gps_L5_count == 0) && (gal_1B_count == 0) && (gal_E5a_count == 0) && (gal_E5b_count == 0) && (glo_1G_count != 0) && (glo_1G_count != 0)) type_of_receiver = 25;
|
||||||
|
if( (gps_1C_count != 0) && (gps_2S_count == 0) && (gps_L5_count == 0) && (gal_1B_count == 0) && (gal_E5a_count == 0) && (gal_E5b_count == 0) && (glo_1G_count != 0)) type_of_receiver = 26;
|
||||||
|
if( (gps_1C_count == 0) && (gps_2S_count == 0) && (gps_L5_count == 0) && (gal_1B_count != 0) && (gal_E5a_count == 0) && (gal_E5b_count == 0) && (glo_1G_count != 0)) type_of_receiver = 27;
|
||||||
|
if( (gps_1C_count == 0) && (gps_2S_count != 0) && (gps_L5_count == 0) && (gal_1B_count == 0) && (gal_E5a_count == 0) && (gal_E5b_count == 0) && (glo_1G_count != 0)) type_of_receiver = 28;
|
||||||
//RTKLIB PVT solver options
|
//RTKLIB PVT solver options
|
||||||
// Settings 1
|
// Settings 1
|
||||||
int positioning_mode = -1;
|
int positioning_mode = -1;
|
||||||
@ -195,9 +215,12 @@ RtklibPvt::RtklibPvt(ConfigurationInterface* configuration,
|
|||||||
}
|
}
|
||||||
|
|
||||||
int num_bands = 0;
|
int num_bands = 0;
|
||||||
if ((gps_1C_count > 0) || (gal_1B_count > 0)) num_bands = 1;
|
|
||||||
if (gps_2S_count > 0) num_bands = 2;
|
if ((gps_1C_count > 0) || (gal_1B_count > 0) || (glo_1G_count > 0)) num_bands = 1;
|
||||||
if ((gal_E5a_count > 0) || (gal_E5b_count > 0) || (gps_L5_count > 0)) num_bands = 3;
|
if (((gps_1C_count > 0) || (gal_1B_count > 0) || (glo_1G_count > 0)) && (gps_2S_count > 0) ) num_bands = 2;
|
||||||
|
if (((gps_1C_count > 0) || (gal_1B_count > 0) || (glo_1G_count > 0)) && ((gal_E5a_count > 0) || (gal_E5b_count > 0) || (gps_L5_count > 0))) num_bands = 2;
|
||||||
|
if (((gps_1C_count > 0) || (gal_1B_count > 0) || (glo_1G_count > 0)) && (gps_2S_count > 0) && ((gal_E5a_count > 0) || (gal_E5b_count > 0) || (gps_L5_count > 0))) num_bands = 3;
|
||||||
|
|
||||||
int number_of_frequencies = configuration->property(role + ".num_bands", num_bands); /* (1:L1, 2:L1+L2, 3:L1+L2+L5) */
|
int number_of_frequencies = configuration->property(role + ".num_bands", num_bands); /* (1:L1, 2:L1+L2, 3:L1+L2+L5) */
|
||||||
if( (number_of_frequencies < 1) || (number_of_frequencies > 3) )
|
if( (number_of_frequencies < 1) || (number_of_frequencies > 3) )
|
||||||
{
|
{
|
||||||
@ -209,6 +232,7 @@ RtklibPvt::RtklibPvt(ConfigurationInterface* configuration,
|
|||||||
if( (elevation_mask < 0.0) || (elevation_mask > 90.0) )
|
if( (elevation_mask < 0.0) || (elevation_mask > 90.0) )
|
||||||
{
|
{
|
||||||
//warn user and set the default
|
//warn user and set the default
|
||||||
|
LOG(WARNING) << "Erroneous Elevation Mask. Setting to default value of 15.0 degrees";
|
||||||
elevation_mask = 15.0;
|
elevation_mask = 15.0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -216,6 +240,7 @@ RtklibPvt::RtklibPvt(ConfigurationInterface* configuration,
|
|||||||
if( (dynamics_model < 0) || (dynamics_model > 2) )
|
if( (dynamics_model < 0) || (dynamics_model > 2) )
|
||||||
{
|
{
|
||||||
//warn user and set the default
|
//warn user and set the default
|
||||||
|
LOG(WARNING) << "Erroneous Dynamics Model configuration. Setting to default value of (0:none)";
|
||||||
dynamics_model = 0;
|
dynamics_model = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -277,10 +302,12 @@ RtklibPvt::RtklibPvt(ConfigurationInterface* configuration,
|
|||||||
int nsys = 0;
|
int nsys = 0;
|
||||||
if ((gps_1C_count > 0) || (gps_2S_count > 0) || (gps_L5_count > 0)) nsys += SYS_GPS;
|
if ((gps_1C_count > 0) || (gps_2S_count > 0) || (gps_L5_count > 0)) nsys += SYS_GPS;
|
||||||
if ((gal_1B_count > 0) || (gal_E5a_count > 0) || (gal_E5b_count > 0)) nsys += SYS_GAL;
|
if ((gal_1B_count > 0) || (gal_E5a_count > 0) || (gal_E5b_count > 0)) nsys += SYS_GAL;
|
||||||
|
if ((glo_1G_count > 0)) nsys += SYS_GLO;
|
||||||
int navigation_system = configuration->property(role + ".navigation_system", nsys); /* (SYS_XXX) see src/algorithms/libs/rtklib/rtklib.h */
|
int navigation_system = configuration->property(role + ".navigation_system", nsys); /* (SYS_XXX) see src/algorithms/libs/rtklib/rtklib.h */
|
||||||
if( (navigation_system < 1) || (navigation_system > 255) ) /* GPS: 1 SBAS: 2 GPS+SBAS: 3 Galileo: 8 Galileo+GPS: 9 GPS+SBAS+Galileo: 11 All: 255 */
|
if( (navigation_system < 1) || (navigation_system > 255) ) /* GPS: 1 SBAS: 2 GPS+SBAS: 3 Galileo: 8 Galileo+GPS: 9 GPS+SBAS+Galileo: 11 All: 255 */
|
||||||
{
|
{
|
||||||
//warn user and set the default
|
//warn user and set the default
|
||||||
|
LOG(WARNING) << "Erroneous Navigation System. Setting to default value of (0:none)";
|
||||||
navigation_system = nsys;
|
navigation_system = nsys;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -307,6 +334,7 @@ RtklibPvt::RtklibPvt(ConfigurationInterface* configuration,
|
|||||||
if( (integer_ambiguity_resolution_glo < 0) || (integer_ambiguity_resolution_glo > 3) )
|
if( (integer_ambiguity_resolution_glo < 0) || (integer_ambiguity_resolution_glo > 3) )
|
||||||
{
|
{
|
||||||
//warn user and set the default
|
//warn user and set the default
|
||||||
|
LOG(WARNING) << "Erroneous Integer Ambiguity Resolution for GLONASS . Setting to default value of (1:on)";
|
||||||
integer_ambiguity_resolution_glo = 1;
|
integer_ambiguity_resolution_glo = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -314,6 +342,7 @@ RtklibPvt::RtklibPvt(ConfigurationInterface* configuration,
|
|||||||
if( (integer_ambiguity_resolution_bds < 0) || (integer_ambiguity_resolution_bds > 1) )
|
if( (integer_ambiguity_resolution_bds < 0) || (integer_ambiguity_resolution_bds > 1) )
|
||||||
{
|
{
|
||||||
//warn user and set the default
|
//warn user and set the default
|
||||||
|
LOG(WARNING) << "Erroneous Integer Ambiguity Resolution for BEIDOU . Setting to default value of (1:on)";
|
||||||
integer_ambiguity_resolution_bds = 1;
|
integer_ambiguity_resolution_bds = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -181,6 +181,38 @@ void rtklib_pvt_cc::msg_handler_telemetry(pmt::pmt_t msg)
|
|||||||
DLOG(INFO) << "New Galileo Almanac has arrived ";
|
DLOG(INFO) << "New Galileo Almanac has arrived ";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//**************** GLONASS GNAV Telemetry **************************
|
||||||
|
else if(pmt::any_ref(msg).type() == typeid(std::shared_ptr<Glonass_Gnav_Ephemeris>) )
|
||||||
|
{
|
||||||
|
// ### GLONASS GNAV EPHEMERIS ###
|
||||||
|
std::shared_ptr<Glonass_Gnav_Ephemeris> glonass_gnav_eph;
|
||||||
|
glonass_gnav_eph = boost::any_cast<std::shared_ptr<Glonass_Gnav_Ephemeris>>(pmt::any_ref(msg));
|
||||||
|
// TODO Add GLONASS with gps week number and tow,
|
||||||
|
// insert new ephemeris record
|
||||||
|
DLOG(INFO) << "GLONASS GNAV New Ephemeris record inserted in global map with TOW =" << glonass_gnav_eph->d_TOW
|
||||||
|
<< ", Week Number =" << glonass_gnav_eph->d_WN
|
||||||
|
<< " and Ephemeris IOD in UTC = " << glonass_gnav_eph->compute_GLONASS_time(glonass_gnav_eph->d_t_b)
|
||||||
|
<< " from SV = " << glonass_gnav_eph->i_satellite_slot_number;
|
||||||
|
// update/insert new ephemeris record to the global ephemeris map
|
||||||
|
d_ls_pvt->glonass_gnav_ephemeris_map[glonass_gnav_eph->i_satellite_PRN] = *glonass_gnav_eph;
|
||||||
|
}
|
||||||
|
else if(pmt::any_ref(msg).type() == typeid(std::shared_ptr<Glonass_Gnav_Utc_Model>) )
|
||||||
|
{
|
||||||
|
// ### GLONASS GNAV UTC MODEL ###
|
||||||
|
std::shared_ptr<Glonass_Gnav_Utc_Model> glonass_gnav_utc_model;
|
||||||
|
glonass_gnav_utc_model = boost::any_cast<std::shared_ptr<Glonass_Gnav_Utc_Model>>(pmt::any_ref(msg));
|
||||||
|
d_ls_pvt->glonass_gnav_utc_model = *glonass_gnav_utc_model;
|
||||||
|
DLOG(INFO) << "New GLONASS GNAV UTC record has arrived ";
|
||||||
|
}
|
||||||
|
else if(pmt::any_ref(msg).type() == typeid(std::shared_ptr<Glonass_Gnav_Almanac>) )
|
||||||
|
{
|
||||||
|
// ### GLONASS GNAV Almanac ###
|
||||||
|
std::shared_ptr<Glonass_Gnav_Almanac> glonass_gnav_almanac;
|
||||||
|
glonass_gnav_almanac = boost::any_cast<std::shared_ptr<Glonass_Gnav_Almanac>>(pmt::any_ref(msg));
|
||||||
|
d_ls_pvt->glonass_gnav_almanac = *glonass_gnav_almanac;
|
||||||
|
DLOG(INFO) << "New GLONASS GNAV Almanac has arrived "
|
||||||
|
<< ", GLONASS GNAV Slot Number =" << glonass_gnav_almanac->d_n_A;
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
LOG(WARNING) << "msg_handler_telemetry unknown object type!";
|
LOG(WARNING) << "msg_handler_telemetry unknown object type!";
|
||||||
@ -249,6 +281,14 @@ rtklib_pvt_cc::rtklib_pvt_cc(unsigned int nchannels, bool dump, std::string dump
|
|||||||
{
|
{
|
||||||
d_rtcm_MT1019_rate_ms = boost::math::lcm(5000, d_output_rate_ms); // default value if not set
|
d_rtcm_MT1019_rate_ms = boost::math::lcm(5000, d_output_rate_ms); // default value if not set
|
||||||
}
|
}
|
||||||
|
if(rtcm_msg_rate_ms.find(1020) != rtcm_msg_rate_ms.end())
|
||||||
|
{
|
||||||
|
d_rtcm_MT1020_rate_ms = rtcm_msg_rate_ms[1020];
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
d_rtcm_MT1020_rate_ms = boost::math::lcm(5000, d_output_rate_ms); // default value if not set
|
||||||
|
}
|
||||||
if(rtcm_msg_rate_ms.find(1045) != rtcm_msg_rate_ms.end())
|
if(rtcm_msg_rate_ms.find(1045) != rtcm_msg_rate_ms.end())
|
||||||
{
|
{
|
||||||
d_rtcm_MT1045_rate_ms = rtcm_msg_rate_ms[1045];
|
d_rtcm_MT1045_rate_ms = rtcm_msg_rate_ms[1045];
|
||||||
@ -265,6 +305,14 @@ rtklib_pvt_cc::rtklib_pvt_cc(unsigned int nchannels, bool dump, std::string dump
|
|||||||
{
|
{
|
||||||
d_rtcm_MT1077_rate_ms = boost::math::lcm(1000, d_output_rate_ms); // default value if not set
|
d_rtcm_MT1077_rate_ms = boost::math::lcm(1000, d_output_rate_ms); // default value if not set
|
||||||
}
|
}
|
||||||
|
if(rtcm_msg_rate_ms.find(1087) != rtcm_msg_rate_ms.end()) // whatever between 1081 and 1087
|
||||||
|
{
|
||||||
|
d_rtcm_MT1087_rate_ms = rtcm_msg_rate_ms[1087];
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
d_rtcm_MT1087_rate_ms = boost::math::lcm(1000, d_output_rate_ms); // default value if not set
|
||||||
|
}
|
||||||
if(rtcm_msg_rate_ms.find(1097) != rtcm_msg_rate_ms.end()) // whatever between 1091 and 1097
|
if(rtcm_msg_rate_ms.find(1097) != rtcm_msg_rate_ms.end()) // whatever between 1091 and 1097
|
||||||
{
|
{
|
||||||
d_rtcm_MT1097_rate_ms = rtcm_msg_rate_ms[1097];
|
d_rtcm_MT1097_rate_ms = rtcm_msg_rate_ms[1097];
|
||||||
@ -286,8 +334,10 @@ rtklib_pvt_cc::rtklib_pvt_cc(unsigned int nchannels, bool dump, std::string dump
|
|||||||
d_rx_time = 0.0;
|
d_rx_time = 0.0;
|
||||||
last_pvt_display_T_rx_s = 0.0;
|
last_pvt_display_T_rx_s = 0.0;
|
||||||
last_RTCM_1019_output_time = 0.0;
|
last_RTCM_1019_output_time = 0.0;
|
||||||
|
last_RTCM_1020_output_time = 0.0;
|
||||||
last_RTCM_1045_output_time = 0.0;
|
last_RTCM_1045_output_time = 0.0;
|
||||||
last_RTCM_1077_output_time = 0.0;
|
last_RTCM_1077_output_time = 0.0;
|
||||||
|
last_RTCM_1087_output_time = 0.0;
|
||||||
last_RTCM_1097_output_time = 0.0;
|
last_RTCM_1097_output_time = 0.0;
|
||||||
last_RTCM_MSM_output_time = 0.0;
|
last_RTCM_MSM_output_time = 0.0;
|
||||||
last_RINEX_obs_output_time = 0.0;
|
last_RINEX_obs_output_time = 0.0;
|
||||||
@ -295,7 +345,8 @@ rtklib_pvt_cc::rtklib_pvt_cc(unsigned int nchannels, bool dump, std::string dump
|
|||||||
|
|
||||||
b_rinex_header_written = false;
|
b_rinex_header_written = false;
|
||||||
b_rinex_header_updated = false;
|
b_rinex_header_updated = false;
|
||||||
rp = std::make_shared<Rinex_Printer>(rinex_version);
|
d_rinex_version = rinex_version;
|
||||||
|
rp = std::make_shared<Rinex_Printer>(d_rinex_version);
|
||||||
|
|
||||||
d_last_status_print_seg = 0;
|
d_last_status_print_seg = 0;
|
||||||
|
|
||||||
@ -347,7 +398,7 @@ rtklib_pvt_cc::~rtklib_pvt_cc()
|
|||||||
ofs.close();
|
ofs.close();
|
||||||
LOG(INFO) << "Saved GPS L2CM or L5 Ephemeris map data";
|
LOG(INFO) << "Saved GPS L2CM or L5 Ephemeris map data";
|
||||||
}
|
}
|
||||||
catch (const std::exception & e)
|
catch (std::exception& e)
|
||||||
{
|
{
|
||||||
LOG(WARNING) << e.what();
|
LOG(WARNING) << e.what();
|
||||||
}
|
}
|
||||||
@ -403,6 +454,28 @@ rtklib_pvt_cc::~rtklib_pvt_cc()
|
|||||||
LOG(WARNING) << "Failed to save Galileo E1 Ephemeris, map is empty";
|
LOG(WARNING) << "Failed to save Galileo E1 Ephemeris, map is empty";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//save GLONASS GNAV ephemeris to XML file
|
||||||
|
file_name = "eph_GLONASS_GNAV.xml";
|
||||||
|
|
||||||
|
if (d_ls_pvt->glonass_gnav_ephemeris_map.size() > 0)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
std::ofstream ofs(file_name.c_str(), std::ofstream::trunc | std::ofstream::out);
|
||||||
|
boost::archive::xml_oarchive xml(ofs);
|
||||||
|
xml << boost::serialization::make_nvp("GNSS-SDR_ephemeris_map", d_ls_pvt->glonass_gnav_ephemeris_map);
|
||||||
|
ofs.close();
|
||||||
|
LOG(INFO) << "Saved GLONASS GNAV Ephemeris map data";
|
||||||
|
}
|
||||||
|
catch (std::exception& e)
|
||||||
|
{
|
||||||
|
LOG(WARNING) << e.what();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
LOG(WARNING) << "Failed to save GLONASS GNAV Ephemeris, map is empty";
|
||||||
|
}
|
||||||
if (d_dump_file.is_open() == true)
|
if (d_dump_file.is_open() == true)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
@ -447,12 +520,14 @@ int rtklib_pvt_cc::work (int noutput_items, gr_vector_const_void_star &input_ite
|
|||||||
bool flag_display_pvt = false;
|
bool flag_display_pvt = false;
|
||||||
bool flag_compute_pvt_output = false;
|
bool flag_compute_pvt_output = false;
|
||||||
bool flag_write_RTCM_1019_output = false;
|
bool flag_write_RTCM_1019_output = false;
|
||||||
|
bool flag_write_RTCM_1020_output = false;
|
||||||
bool flag_write_RTCM_1045_output = false;
|
bool flag_write_RTCM_1045_output = false;
|
||||||
bool flag_write_RTCM_MSM_output = false;
|
bool flag_write_RTCM_MSM_output = false;
|
||||||
bool flag_write_RINEX_obs_output = false;
|
bool flag_write_RINEX_obs_output = false;
|
||||||
bool flag_write_RINEX_nav_output = false;
|
bool flag_write_RINEX_nav_output = false;
|
||||||
unsigned int gps_channel = 0;
|
unsigned int gps_channel = 0;
|
||||||
unsigned int gal_channel = 0;
|
unsigned int gal_channel = 0;
|
||||||
|
unsigned int glo_channel = 0;
|
||||||
|
|
||||||
gnss_observables_map.clear();
|
gnss_observables_map.clear();
|
||||||
const Gnss_Synchro **in = reinterpret_cast<const Gnss_Synchro **>(&input_items[0]); // Get the input buffer pointer
|
const Gnss_Synchro **in = reinterpret_cast<const Gnss_Synchro **>(&input_items[0]); // Get the input buffer pointer
|
||||||
@ -465,10 +540,13 @@ int rtklib_pvt_cc::work (int noutput_items, gr_vector_const_void_star &input_ite
|
|||||||
std::map<int,Gps_Ephemeris>::const_iterator tmp_eph_iter_gps = d_ls_pvt->gps_ephemeris_map.find(in[i][epoch].PRN);
|
std::map<int,Gps_Ephemeris>::const_iterator tmp_eph_iter_gps = d_ls_pvt->gps_ephemeris_map.find(in[i][epoch].PRN);
|
||||||
std::map<int,Galileo_Ephemeris>::const_iterator tmp_eph_iter_gal = d_ls_pvt->galileo_ephemeris_map.find(in[i][epoch].PRN);
|
std::map<int,Galileo_Ephemeris>::const_iterator tmp_eph_iter_gal = d_ls_pvt->galileo_ephemeris_map.find(in[i][epoch].PRN);
|
||||||
std::map<int,Gps_CNAV_Ephemeris>::const_iterator tmp_eph_iter_cnav = d_ls_pvt->gps_cnav_ephemeris_map.find(in[i][epoch].PRN);
|
std::map<int,Gps_CNAV_Ephemeris>::const_iterator tmp_eph_iter_cnav = d_ls_pvt->gps_cnav_ephemeris_map.find(in[i][epoch].PRN);
|
||||||
|
std::map<int,Glonass_Gnav_Ephemeris>::const_iterator tmp_eph_iter_glo_gnav = d_ls_pvt->glonass_gnav_ephemeris_map.find(in[i][epoch].PRN);
|
||||||
if(((tmp_eph_iter_gps->second.i_satellite_PRN == in[i][epoch].PRN) && (std::string(in[i][epoch].Signal).compare("1C") == 0))
|
if(((tmp_eph_iter_gps->second.i_satellite_PRN == in[i][epoch].PRN) && (std::string(in[i][epoch].Signal).compare("1C") == 0))
|
||||||
|| ((tmp_eph_iter_cnav->second.i_satellite_PRN == in[i][epoch].PRN) && (std::string(in[i][epoch].Signal).compare("2S") == 0))
|
|| ((tmp_eph_iter_cnav->second.i_satellite_PRN == in[i][epoch].PRN) && (std::string(in[i][epoch].Signal).compare("2S") == 0))
|
||||||
|| ((tmp_eph_iter_gal->second.i_satellite_PRN == in[i][epoch].PRN) && (std::string(in[i][epoch].Signal).compare("1B") == 0))
|
|| ((tmp_eph_iter_gal->second.i_satellite_PRN == in[i][epoch].PRN) && (std::string(in[i][epoch].Signal).compare("1B") == 0))
|
||||||
|| ((tmp_eph_iter_gal->second.i_satellite_PRN == in[i][epoch].PRN) && (std::string(in[i][epoch].Signal).compare("5X") == 0))
|
|| ((tmp_eph_iter_gal->second.i_satellite_PRN == in[i][epoch].PRN) && (std::string(in[i][epoch].Signal).compare("5X") == 0))
|
||||||
|
|| ((tmp_eph_iter_glo_gnav->second.i_satellite_PRN == in[i][epoch].PRN) && (std::string(in[i][epoch].Signal).compare("1G") == 0))
|
||||||
|
|| ((tmp_eph_iter_glo_gnav->second.i_satellite_PRN == in[i][epoch].PRN) && (std::string(in[i][epoch].Signal).compare("2G") == 0))
|
||||||
|| ((tmp_eph_iter_cnav->second.i_satellite_PRN == in[i][epoch].PRN) && (std::string(in[i][epoch].Signal).compare("L5") == 0)))
|
|| ((tmp_eph_iter_cnav->second.i_satellite_PRN == in[i][epoch].PRN) && (std::string(in[i][epoch].Signal).compare("L5") == 0)))
|
||||||
{
|
{
|
||||||
// store valid observables in a map.
|
// store valid observables in a map.
|
||||||
@ -496,6 +574,14 @@ int rtklib_pvt_cc::work (int noutput_items, gr_vector_const_void_star &input_ite
|
|||||||
d_rtcm_printer->lock_time(d_ls_pvt->gps_cnav_ephemeris_map.find(in[i][epoch].PRN)->second, in[i][epoch].RX_time, in[i][epoch]); // keep track of locking time
|
d_rtcm_printer->lock_time(d_ls_pvt->gps_cnav_ephemeris_map.find(in[i][epoch].PRN)->second, in[i][epoch].RX_time, in[i][epoch]); // keep track of locking time
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if(d_ls_pvt->glonass_gnav_ephemeris_map.size() > 0)
|
||||||
|
{
|
||||||
|
if(tmp_eph_iter_glo_gnav != d_ls_pvt->glonass_gnav_ephemeris_map.end())
|
||||||
|
{
|
||||||
|
d_rtcm_printer->lock_time(d_ls_pvt->glonass_gnav_ephemeris_map.find(in[i][epoch].PRN)->second, in[i][epoch].RX_time, in[i][epoch]); // keep track of locking time
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -528,7 +614,11 @@ int rtklib_pvt_cc::work (int noutput_items, gr_vector_const_void_star &input_ite
|
|||||||
flag_write_RTCM_1019_output = true;
|
flag_write_RTCM_1019_output = true;
|
||||||
last_RTCM_1019_output_time = current_RX_time;
|
last_RTCM_1019_output_time = current_RX_time;
|
||||||
}
|
}
|
||||||
|
if ((std::fabs(current_RX_time - last_RTCM_1020_output_time) * 1000.0 >= static_cast<double>(d_rtcm_MT1020_rate_ms)) && (d_rtcm_MT1020_rate_ms != 0) ) // allows deactivating messages by setting rate = 0
|
||||||
|
{
|
||||||
|
flag_write_RTCM_1020_output = true;
|
||||||
|
last_RTCM_1020_output_time = current_RX_time;
|
||||||
|
}
|
||||||
if ((std::fabs(current_RX_time - last_RTCM_1045_output_time) * 1000.0 >= static_cast<double>(d_rtcm_MT1045_rate_ms)) && (d_rtcm_MT1045_rate_ms != 0) )
|
if ((std::fabs(current_RX_time - last_RTCM_1045_output_time) * 1000.0 >= static_cast<double>(d_rtcm_MT1045_rate_ms)) && (d_rtcm_MT1045_rate_ms != 0) )
|
||||||
{
|
{
|
||||||
flag_write_RTCM_1045_output = true;
|
flag_write_RTCM_1045_output = true;
|
||||||
@ -539,7 +629,10 @@ int rtklib_pvt_cc::work (int noutput_items, gr_vector_const_void_star &input_ite
|
|||||||
{
|
{
|
||||||
last_RTCM_1077_output_time = current_RX_time;
|
last_RTCM_1077_output_time = current_RX_time;
|
||||||
}
|
}
|
||||||
|
if ((std::fabs(current_RX_time - last_RTCM_1087_output_time) * 1000.0 >= static_cast<double>(d_rtcm_MT1087_rate_ms)) && (d_rtcm_MT1087_rate_ms != 0) )
|
||||||
|
{
|
||||||
|
last_RTCM_1087_output_time = current_RX_time;
|
||||||
|
}
|
||||||
if ((std::fabs(current_RX_time - last_RTCM_1097_output_time) * 1000.0 >= static_cast<double>(d_rtcm_MT1097_rate_ms)) && (d_rtcm_MT1097_rate_ms != 0) )
|
if ((std::fabs(current_RX_time - last_RTCM_1097_output_time) * 1000.0 >= static_cast<double>(d_rtcm_MT1097_rate_ms)) && (d_rtcm_MT1097_rate_ms != 0) )
|
||||||
{
|
{
|
||||||
last_RTCM_1097_output_time = current_RX_time;
|
last_RTCM_1097_output_time = current_RX_time;
|
||||||
@ -571,8 +664,8 @@ int rtklib_pvt_cc::work (int noutput_items, gr_vector_const_void_star &input_ite
|
|||||||
if(first_fix == true)
|
if(first_fix == true)
|
||||||
{
|
{
|
||||||
std::cout << "First position fix at " << boost::posix_time::to_simple_string(d_ls_pvt->get_position_UTC_time())
|
std::cout << "First position fix at " << boost::posix_time::to_simple_string(d_ls_pvt->get_position_UTC_time())
|
||||||
<< " UTC is Lat = " << d_ls_pvt->get_latitude() << " [deg], Long = " << d_ls_pvt->get_longitude()
|
<< " UTC is Lat = " << d_ls_pvt->get_latitude() << " [deg], Long = " << d_ls_pvt->get_longitude()
|
||||||
<< " [deg], Height= " << d_ls_pvt->get_height() << " [m]" << std::endl;
|
<< " [deg], Height= " << d_ls_pvt->get_height() << " [m]" << std::endl;
|
||||||
ttff_msgbuf ttff;
|
ttff_msgbuf ttff;
|
||||||
ttff.mtype = 1;
|
ttff.mtype = 1;
|
||||||
end = std::chrono::system_clock::now();
|
end = std::chrono::system_clock::now();
|
||||||
@ -610,6 +703,12 @@ int rtklib_pvt_cc::work (int noutput_items, gr_vector_const_void_star &input_ite
|
|||||||
* 20 | GPS L5 + Galileo E5b
|
* 20 | GPS L5 + Galileo E5b
|
||||||
* 21 | GPS L1 C/A + Galileo E1B + GPS L2C
|
* 21 | GPS L1 C/A + Galileo E1B + GPS L2C
|
||||||
* 22 | GPS L1 C/A + Galileo E1B + GPS L5
|
* 22 | GPS L1 C/A + Galileo E1B + GPS L5
|
||||||
|
* 23 | GLONASS L1 C/A
|
||||||
|
* 24 | GLONASS L2 C/A
|
||||||
|
* 25 | GLONASS L1 C/A + GLONASS L2 C/A
|
||||||
|
* 26 | GPS L1 C/A + GLONASS L1 C/A
|
||||||
|
* 27 | Galileo E1B + GLONASS L1 C/A
|
||||||
|
* 28 | GPS L2C + GLONASS L1 C/A
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// ####################### RINEX FILES #################
|
// ####################### RINEX FILES #################
|
||||||
@ -617,6 +716,7 @@ int rtklib_pvt_cc::work (int noutput_items, gr_vector_const_void_star &input_ite
|
|||||||
std::map<int, Galileo_Ephemeris>::const_iterator galileo_ephemeris_iter;
|
std::map<int, Galileo_Ephemeris>::const_iterator galileo_ephemeris_iter;
|
||||||
std::map<int, Gps_Ephemeris>::const_iterator gps_ephemeris_iter;
|
std::map<int, Gps_Ephemeris>::const_iterator gps_ephemeris_iter;
|
||||||
std::map<int, Gps_CNAV_Ephemeris>::const_iterator gps_cnav_ephemeris_iter;
|
std::map<int, Gps_CNAV_Ephemeris>::const_iterator gps_cnav_ephemeris_iter;
|
||||||
|
std::map<int, Glonass_Gnav_Ephemeris>::const_iterator glonass_gnav_ephemeris_iter;
|
||||||
std::map<int, Gnss_Synchro>::const_iterator gnss_observables_iter;
|
std::map<int, Gnss_Synchro>::const_iterator gnss_observables_iter;
|
||||||
|
|
||||||
if (!b_rinex_header_written) // & we have utc data in nav message!
|
if (!b_rinex_header_written) // & we have utc data in nav message!
|
||||||
@ -624,6 +724,7 @@ int rtklib_pvt_cc::work (int noutput_items, gr_vector_const_void_star &input_ite
|
|||||||
galileo_ephemeris_iter = d_ls_pvt->galileo_ephemeris_map.cbegin();
|
galileo_ephemeris_iter = d_ls_pvt->galileo_ephemeris_map.cbegin();
|
||||||
gps_ephemeris_iter = d_ls_pvt->gps_ephemeris_map.cbegin();
|
gps_ephemeris_iter = d_ls_pvt->gps_ephemeris_map.cbegin();
|
||||||
gps_cnav_ephemeris_iter = d_ls_pvt->gps_cnav_ephemeris_map.cbegin();
|
gps_cnav_ephemeris_iter = d_ls_pvt->gps_cnav_ephemeris_map.cbegin();
|
||||||
|
glonass_gnav_ephemeris_iter = d_ls_pvt->glonass_gnav_ephemeris_map.cbegin();
|
||||||
|
|
||||||
if(type_of_rx == 1) // GPS L1 C/A only
|
if(type_of_rx == 1) // GPS L1 C/A only
|
||||||
{
|
{
|
||||||
@ -742,6 +843,74 @@ int rtklib_pvt_cc::work (int noutput_items, gr_vector_const_void_star &input_ite
|
|||||||
b_rinex_header_written = true; // do not write header anymore
|
b_rinex_header_written = true; // do not write header anymore
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if(type_of_rx == 23) // GLONASS L1 C/A only
|
||||||
|
{
|
||||||
|
std::string signal("1G");
|
||||||
|
if (glonass_gnav_ephemeris_iter != d_ls_pvt->glonass_gnav_ephemeris_map.cend())
|
||||||
|
{
|
||||||
|
rp->rinex_obs_header(rp->obsFile, glonass_gnav_ephemeris_iter->second, d_rx_time, signal);
|
||||||
|
rp->rinex_nav_header(rp->navGloFile, d_ls_pvt->glonass_gnav_utc_model, glonass_gnav_ephemeris_iter->second);
|
||||||
|
b_rinex_header_written = true; // do not write header anymore
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(type_of_rx == 24) // GLONASS L2 C/A only
|
||||||
|
{
|
||||||
|
std::string signal("2G");
|
||||||
|
if (glonass_gnav_ephemeris_iter != d_ls_pvt->glonass_gnav_ephemeris_map.cend())
|
||||||
|
{
|
||||||
|
rp->rinex_obs_header(rp->obsFile, glonass_gnav_ephemeris_iter->second, d_rx_time, signal);
|
||||||
|
rp->rinex_nav_header(rp->navGloFile, d_ls_pvt->glonass_gnav_utc_model, glonass_gnav_ephemeris_iter->second);
|
||||||
|
b_rinex_header_written = true; // do not write header anymore
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(type_of_rx == 25) // GLONASS L1 C/A + GLONASS L2 C/A
|
||||||
|
{
|
||||||
|
std::string signal("1G 2G");
|
||||||
|
if (glonass_gnav_ephemeris_iter != d_ls_pvt->glonass_gnav_ephemeris_map.cend())
|
||||||
|
{
|
||||||
|
rp->rinex_obs_header(rp->obsFile, glonass_gnav_ephemeris_iter->second, d_rx_time, signal);
|
||||||
|
rp->rinex_nav_header(rp->navGloFile, d_ls_pvt->glonass_gnav_utc_model, glonass_gnav_ephemeris_iter->second);
|
||||||
|
b_rinex_header_written = true; // do not write header anymore
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(type_of_rx == 26) // GPS L1 C/A + GLONASS L1 C/A
|
||||||
|
{
|
||||||
|
if ((glonass_gnav_ephemeris_iter != d_ls_pvt->glonass_gnav_ephemeris_map.cend()) && (gps_ephemeris_iter != d_ls_pvt->gps_ephemeris_map.cend()) )
|
||||||
|
{
|
||||||
|
std::string glo_signal("1G");
|
||||||
|
rp->rinex_obs_header(rp->obsFile, gps_ephemeris_iter->second, glonass_gnav_ephemeris_iter->second, d_rx_time, glo_signal);
|
||||||
|
if(d_rinex_version == 3)
|
||||||
|
rp->rinex_nav_header(rp->navMixFile, d_ls_pvt->gps_iono, d_ls_pvt->gps_utc_model, d_ls_pvt->glonass_gnav_utc_model, d_ls_pvt->glonass_gnav_almanac);
|
||||||
|
if(d_rinex_version == 2)
|
||||||
|
{
|
||||||
|
rp->rinex_nav_header(rp->navFile, d_ls_pvt->gps_iono, d_ls_pvt->gps_utc_model);
|
||||||
|
rp->rinex_nav_header(rp->navGloFile, d_ls_pvt->glonass_gnav_utc_model, glonass_gnav_ephemeris_iter->second);
|
||||||
|
}
|
||||||
|
b_rinex_header_written = true; // do not write header anymore
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(type_of_rx == 27) // Galileo E1B + GLONASS L1 C/A
|
||||||
|
{
|
||||||
|
if ((glonass_gnav_ephemeris_iter != d_ls_pvt->glonass_gnav_ephemeris_map.cend()) && (galileo_ephemeris_iter != d_ls_pvt->galileo_ephemeris_map.cend()) )
|
||||||
|
{
|
||||||
|
std::string glo_signal("1G");
|
||||||
|
std::string gal_signal("1B");
|
||||||
|
rp->rinex_obs_header(rp->obsFile, galileo_ephemeris_iter->second, glonass_gnav_ephemeris_iter->second, d_rx_time, glo_signal, gal_signal);
|
||||||
|
rp->rinex_nav_header(rp->navMixFile, d_ls_pvt->galileo_iono, d_ls_pvt->galileo_utc_model, d_ls_pvt->galileo_almanac, d_ls_pvt->glonass_gnav_utc_model, d_ls_pvt->glonass_gnav_almanac);
|
||||||
|
b_rinex_header_written = true; // do not write header anymore
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(type_of_rx == 28) // GPS L2C + GLONASS L1 C/A
|
||||||
|
{
|
||||||
|
if ((glonass_gnav_ephemeris_iter != d_ls_pvt->glonass_gnav_ephemeris_map.cend()) && (gps_cnav_ephemeris_iter != d_ls_pvt->gps_cnav_ephemeris_map.cend()) )
|
||||||
|
{
|
||||||
|
std::string glo_signal("1G");
|
||||||
|
rp->rinex_obs_header(rp->obsFile, gps_cnav_ephemeris_iter->second, glonass_gnav_ephemeris_iter->second, d_rx_time, glo_signal);
|
||||||
|
rp->rinex_nav_header(rp->navMixFile, d_ls_pvt->gps_cnav_iono, d_ls_pvt->gps_cnav_utc_model, d_ls_pvt->glonass_gnav_utc_model, d_ls_pvt->glonass_gnav_almanac);
|
||||||
|
b_rinex_header_written = true; // do not write header anymore
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if(b_rinex_header_written) // The header is already written, we can now log the navigation message data
|
if(b_rinex_header_written) // The header is already written, we can now log the navigation message data
|
||||||
{
|
{
|
||||||
@ -775,10 +944,34 @@ int rtklib_pvt_cc::work (int noutput_items, gr_vector_const_void_star &input_ite
|
|||||||
{
|
{
|
||||||
rp->log_rinex_nav(rp->navGalFile, d_ls_pvt->galileo_ephemeris_map);
|
rp->log_rinex_nav(rp->navGalFile, d_ls_pvt->galileo_ephemeris_map);
|
||||||
}
|
}
|
||||||
|
if((type_of_rx == 23) || (type_of_rx == 24) || (type_of_rx == 25)) // GLONASS L1 C/A, GLONASS L2 C/A
|
||||||
|
{
|
||||||
|
rp->log_rinex_nav(rp->navGloFile, d_ls_pvt->glonass_gnav_ephemeris_map);
|
||||||
|
}
|
||||||
|
if(type_of_rx == 26) // GPS L1 C/A + GLONASS L1 C/A
|
||||||
|
{
|
||||||
|
if(d_rinex_version == 3)
|
||||||
|
rp->log_rinex_nav(rp->navMixFile, d_ls_pvt->gps_ephemeris_map, d_ls_pvt->glonass_gnav_ephemeris_map);
|
||||||
|
if(d_rinex_version == 2)
|
||||||
|
{
|
||||||
|
rp->log_rinex_nav(rp->navFile, d_ls_pvt->gps_ephemeris_map);
|
||||||
|
rp->log_rinex_nav(rp->navGloFile, d_ls_pvt->glonass_gnav_ephemeris_map);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
if(type_of_rx == 27) // Galileo E1B + GLONASS L1 C/A
|
||||||
|
{
|
||||||
|
rp->log_rinex_nav(rp->navMixFile, d_ls_pvt->galileo_ephemeris_map, d_ls_pvt->glonass_gnav_ephemeris_map);
|
||||||
|
}
|
||||||
|
if(type_of_rx == 28) // GPS L2C + GLONASS L1 C/A
|
||||||
|
{
|
||||||
|
rp->log_rinex_nav(rp->navMixFile, d_ls_pvt->gps_cnav_ephemeris_map, d_ls_pvt->glonass_gnav_ephemeris_map);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
galileo_ephemeris_iter = d_ls_pvt->galileo_ephemeris_map.cbegin();
|
galileo_ephemeris_iter = d_ls_pvt->galileo_ephemeris_map.cbegin();
|
||||||
gps_ephemeris_iter = d_ls_pvt->gps_ephemeris_map.cbegin();
|
gps_ephemeris_iter = d_ls_pvt->gps_ephemeris_map.cbegin();
|
||||||
gps_cnav_ephemeris_iter = d_ls_pvt->gps_cnav_ephemeris_map.cbegin();
|
gps_cnav_ephemeris_iter = d_ls_pvt->gps_cnav_ephemeris_map.cbegin();
|
||||||
|
glonass_gnav_ephemeris_iter = d_ls_pvt->glonass_gnav_ephemeris_map.cbegin();
|
||||||
|
|
||||||
// Log observables into the RINEX file
|
// Log observables into the RINEX file
|
||||||
if(flag_write_RINEX_obs_output)
|
if(flag_write_RINEX_obs_output)
|
||||||
@ -913,6 +1106,85 @@ int rtklib_pvt_cc::work (int noutput_items, gr_vector_const_void_star &input_ite
|
|||||||
b_rinex_header_updated = true;
|
b_rinex_header_updated = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if(type_of_rx == 23) // GLONASS L1 C/A only
|
||||||
|
{
|
||||||
|
if (glonass_gnav_ephemeris_iter != d_ls_pvt->glonass_gnav_ephemeris_map.end())
|
||||||
|
{
|
||||||
|
rp->log_rinex_obs(rp->obsFile, glonass_gnav_ephemeris_iter->second, d_rx_time, gnss_observables_map, "1C");
|
||||||
|
}
|
||||||
|
if (!b_rinex_header_updated && (d_ls_pvt->glonass_gnav_utc_model.d_tau_c != 0))
|
||||||
|
{
|
||||||
|
rp->update_nav_header(rp->navGloFile, d_ls_pvt->glonass_gnav_utc_model, d_ls_pvt->glonass_gnav_almanac);
|
||||||
|
rp->update_obs_header(rp->obsFile, d_ls_pvt->glonass_gnav_utc_model);
|
||||||
|
b_rinex_header_updated = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(type_of_rx == 24) // GLONASS L2 C/A only
|
||||||
|
{
|
||||||
|
if (glonass_gnav_ephemeris_iter != d_ls_pvt->glonass_gnav_ephemeris_map.end())
|
||||||
|
{
|
||||||
|
rp->log_rinex_obs(rp->obsFile, glonass_gnav_ephemeris_iter->second, d_rx_time, gnss_observables_map, "2C");
|
||||||
|
}
|
||||||
|
if (!b_rinex_header_updated && (d_ls_pvt->glonass_gnav_utc_model.d_tau_c != 0))
|
||||||
|
{
|
||||||
|
rp->update_nav_header(rp->navGloFile, d_ls_pvt->glonass_gnav_utc_model, d_ls_pvt->glonass_gnav_almanac);
|
||||||
|
rp->update_obs_header(rp->obsFile, d_ls_pvt->glonass_gnav_utc_model);
|
||||||
|
b_rinex_header_updated = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(type_of_rx == 25) // GLONASS L1 C/A + GLONASS L2 C/A
|
||||||
|
{
|
||||||
|
if (glonass_gnav_ephemeris_iter != d_ls_pvt->glonass_gnav_ephemeris_map.end())
|
||||||
|
{
|
||||||
|
rp->log_rinex_obs(rp->obsFile, glonass_gnav_ephemeris_iter->second, d_rx_time, gnss_observables_map, "1C 2C");
|
||||||
|
}
|
||||||
|
if (!b_rinex_header_updated && (d_ls_pvt->glonass_gnav_utc_model.d_tau_c != 0))
|
||||||
|
{
|
||||||
|
rp->update_nav_header(rp->navMixFile, d_ls_pvt->glonass_gnav_utc_model, d_ls_pvt->glonass_gnav_almanac);
|
||||||
|
rp->update_obs_header(rp->obsFile, d_ls_pvt->glonass_gnav_utc_model);
|
||||||
|
b_rinex_header_updated = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(type_of_rx == 26) // GPS L1 C/A + GLONASS L1 C/A
|
||||||
|
{
|
||||||
|
if ((glonass_gnav_ephemeris_iter != d_ls_pvt->glonass_gnav_ephemeris_map.end()) && (gps_ephemeris_iter != d_ls_pvt->gps_ephemeris_map.end()) )
|
||||||
|
{
|
||||||
|
rp->log_rinex_obs(rp->obsFile, gps_ephemeris_iter->second, glonass_gnav_ephemeris_iter->second, d_rx_time, gnss_observables_map);
|
||||||
|
}
|
||||||
|
if (!b_rinex_header_updated && (d_ls_pvt->gps_utc_model.d_A0 != 0))
|
||||||
|
{
|
||||||
|
rp->update_obs_header(rp->obsFile, d_ls_pvt->gps_utc_model);
|
||||||
|
rp->update_nav_header(rp->navMixFile, d_ls_pvt->gps_iono, d_ls_pvt->gps_utc_model, d_ls_pvt->glonass_gnav_utc_model, d_ls_pvt->glonass_gnav_almanac);
|
||||||
|
b_rinex_header_updated = true; // do not write header anymore
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(type_of_rx == 27) // Galileo E1B + GLONASS L1 C/A
|
||||||
|
{
|
||||||
|
if ((glonass_gnav_ephemeris_iter != d_ls_pvt->glonass_gnav_ephemeris_map.end()) && (galileo_ephemeris_iter != d_ls_pvt->galileo_ephemeris_map.end()) )
|
||||||
|
{
|
||||||
|
rp->log_rinex_obs(rp->obsFile, galileo_ephemeris_iter->second, glonass_gnav_ephemeris_iter->second, d_rx_time, gnss_observables_map);
|
||||||
|
|
||||||
|
}
|
||||||
|
if (!b_rinex_header_updated && (d_ls_pvt->galileo_utc_model.A0_6 != 0))
|
||||||
|
{
|
||||||
|
rp->update_obs_header(rp->obsFile, d_ls_pvt->galileo_utc_model);
|
||||||
|
rp->update_nav_header(rp->navMixFile, d_ls_pvt->galileo_iono, d_ls_pvt->galileo_utc_model, d_ls_pvt->galileo_almanac, d_ls_pvt->glonass_gnav_utc_model, d_ls_pvt->glonass_gnav_almanac);
|
||||||
|
b_rinex_header_updated = true; // do not write header anymore
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(type_of_rx == 28) // GPS L2C + GLONASS L1 C/A
|
||||||
|
{
|
||||||
|
if ((glonass_gnav_ephemeris_iter != d_ls_pvt->glonass_gnav_ephemeris_map.end()) && (gps_cnav_ephemeris_iter != d_ls_pvt->gps_cnav_ephemeris_map.end()) )
|
||||||
|
{
|
||||||
|
rp->log_rinex_obs(rp->obsFile, gps_cnav_ephemeris_iter->second, glonass_gnav_ephemeris_iter->second, d_rx_time, gnss_observables_map);
|
||||||
|
}
|
||||||
|
if (!b_rinex_header_updated && (d_ls_pvt->gps_cnav_utc_model.d_A0 != 0))
|
||||||
|
{
|
||||||
|
rp->update_obs_header(rp->obsFile, d_ls_pvt->gps_cnav_utc_model);
|
||||||
|
rp->update_nav_header(rp->navMixFile, d_ls_pvt->gps_cnav_iono, d_ls_pvt->gps_cnav_utc_model, d_ls_pvt->glonass_gnav_utc_model, d_ls_pvt->glonass_gnav_almanac);
|
||||||
|
b_rinex_header_updated = true; // do not write header anymore
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -935,7 +1207,7 @@ int rtklib_pvt_cc::work (int noutput_items, gr_vector_const_void_star &input_ite
|
|||||||
|
|
||||||
if (gps_ephemeris_iter != d_ls_pvt->gps_ephemeris_map.cend())
|
if (gps_ephemeris_iter != d_ls_pvt->gps_ephemeris_map.cend())
|
||||||
{
|
{
|
||||||
d_rtcm_printer->Print_Rtcm_MSM(7, gps_ephemeris_iter->second, {}, {}, d_rx_time, gnss_observables_map, 0, 0, 0, 0, 0);
|
d_rtcm_printer->Print_Rtcm_MSM(7, gps_ephemeris_iter->second, {}, {}, {}, d_rx_time, gnss_observables_map, 0, 0, 0, 0, 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -954,7 +1226,7 @@ int rtklib_pvt_cc::work (int noutput_items, gr_vector_const_void_star &input_ite
|
|||||||
gal_ephemeris_iter = d_ls_pvt->galileo_ephemeris_map.cbegin();
|
gal_ephemeris_iter = d_ls_pvt->galileo_ephemeris_map.cbegin();
|
||||||
if (gal_ephemeris_iter != d_ls_pvt->galileo_ephemeris_map.cend())
|
if (gal_ephemeris_iter != d_ls_pvt->galileo_ephemeris_map.cend())
|
||||||
{
|
{
|
||||||
d_rtcm_printer->Print_Rtcm_MSM(7, {}, {}, gal_ephemeris_iter->second, d_rx_time, gnss_observables_map, 0, 0, 0, 0, 0);
|
d_rtcm_printer->Print_Rtcm_MSM(7, {}, {}, gal_ephemeris_iter->second, {}, d_rx_time, gnss_observables_map, 0, 0, 0, 0, 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -975,7 +1247,7 @@ int rtklib_pvt_cc::work (int noutput_items, gr_vector_const_void_star &input_ite
|
|||||||
gps_cnav_ephemeris_iter = d_ls_pvt->gps_cnav_ephemeris_map.cbegin();
|
gps_cnav_ephemeris_iter = d_ls_pvt->gps_cnav_ephemeris_map.cbegin();
|
||||||
if ((gps_ephemeris_iter != d_ls_pvt->gps_ephemeris_map.cend()) && (gps_cnav_ephemeris_iter != d_ls_pvt->gps_cnav_ephemeris_map.cend()) )
|
if ((gps_ephemeris_iter != d_ls_pvt->gps_ephemeris_map.cend()) && (gps_cnav_ephemeris_iter != d_ls_pvt->gps_cnav_ephemeris_map.cend()) )
|
||||||
{
|
{
|
||||||
d_rtcm_printer->Print_Rtcm_MSM(7, gps_ephemeris_iter->second, gps_cnav_ephemeris_iter->second, {}, d_rx_time, gnss_observables_map, 0, 0, 0, 0, 0);
|
d_rtcm_printer->Print_Rtcm_MSM(7, gps_ephemeris_iter->second, gps_cnav_ephemeris_iter->second, {}, {}, d_rx_time, gnss_observables_map, 0, 0, 0, 0, 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1033,14 +1305,165 @@ int rtklib_pvt_cc::work (int noutput_items, gr_vector_const_void_star &input_ite
|
|||||||
|
|
||||||
if (galileo_ephemeris_iter != d_ls_pvt->galileo_ephemeris_map.cend())
|
if (galileo_ephemeris_iter != d_ls_pvt->galileo_ephemeris_map.cend())
|
||||||
{
|
{
|
||||||
d_rtcm_printer->Print_Rtcm_MSM(7, {}, {}, galileo_ephemeris_iter->second, d_rx_time, gnss_observables_map, 0, 0, 0, 0, 0);
|
d_rtcm_printer->Print_Rtcm_MSM(7, {}, {}, galileo_ephemeris_iter->second, {}, d_rx_time, gnss_observables_map, 0, 0, 0, 0, 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(flag_write_RTCM_MSM_output == true)
|
if(flag_write_RTCM_MSM_output == true)
|
||||||
{
|
{
|
||||||
if (gps_ephemeris_iter != d_ls_pvt->gps_ephemeris_map.cend())
|
if (gps_ephemeris_iter != d_ls_pvt->gps_ephemeris_map.cend())
|
||||||
{
|
{
|
||||||
d_rtcm_printer->Print_Rtcm_MSM(7, gps_ephemeris_iter->second, {}, {}, d_rx_time, gnss_observables_map, 0, 0, 0, 0, 0);
|
d_rtcm_printer->Print_Rtcm_MSM(7, gps_ephemeris_iter->second, {}, {}, {}, d_rx_time, gnss_observables_map, 0, 0, 0, 0, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if((type_of_rx == 23) || (type_of_rx == 24) || (type_of_rx == 25)) // GLONASS
|
||||||
|
{
|
||||||
|
if(flag_write_RTCM_1020_output == true)
|
||||||
|
{
|
||||||
|
for(std::map<int,Glonass_Gnav_Ephemeris>::const_iterator glonass_gnav_ephemeris_iter = d_ls_pvt->glonass_gnav_ephemeris_map.cbegin(); glonass_gnav_ephemeris_iter != d_ls_pvt->glonass_gnav_ephemeris_map.cend(); glonass_gnav_ephemeris_iter++ )
|
||||||
|
{
|
||||||
|
d_rtcm_printer->Print_Rtcm_MT1020(glonass_gnav_ephemeris_iter->second, d_ls_pvt->glonass_gnav_utc_model);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
std::map<int,Glonass_Gnav_Ephemeris>::const_iterator glo_gnav_ephemeris_iter = d_ls_pvt->glonass_gnav_ephemeris_map.cbegin();
|
||||||
|
|
||||||
|
if (glo_gnav_ephemeris_iter != d_ls_pvt->glonass_gnav_ephemeris_map.cend())
|
||||||
|
{
|
||||||
|
d_rtcm_printer->Print_Rtcm_MSM(7, {}, {}, {}, glo_gnav_ephemeris_iter->second, d_rx_time, gnss_observables_map, 0, 0, 0, 0, 0);
|
||||||
|
}
|
||||||
|
b_rtcm_writing_started = true;
|
||||||
|
}
|
||||||
|
if(type_of_rx == 26) // GPS L1 C/A + GLONASS L1 C/A
|
||||||
|
{
|
||||||
|
if(flag_write_RTCM_1019_output == true)
|
||||||
|
{
|
||||||
|
for(gps_ephemeris_iter = d_ls_pvt->gps_ephemeris_map.cbegin(); gps_ephemeris_iter != d_ls_pvt->gps_ephemeris_map.cend(); gps_ephemeris_iter++ )
|
||||||
|
{
|
||||||
|
d_rtcm_printer->Print_Rtcm_MT1019(gps_ephemeris_iter->second);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(flag_write_RTCM_1020_output == true)
|
||||||
|
{
|
||||||
|
for(std::map<int,Glonass_Gnav_Ephemeris>::const_iterator glonass_gnav_ephemeris_iter = d_ls_pvt->glonass_gnav_ephemeris_map.cbegin(); glonass_gnav_ephemeris_iter != d_ls_pvt->glonass_gnav_ephemeris_map.cend(); glonass_gnav_ephemeris_iter++ )
|
||||||
|
{
|
||||||
|
d_rtcm_printer->Print_Rtcm_MT1020(glonass_gnav_ephemeris_iter->second, d_ls_pvt->glonass_gnav_utc_model);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(flag_write_RTCM_MSM_output == true)
|
||||||
|
{
|
||||||
|
//gps_ephemeris_iter = d_ls_pvt->gps_ephemeris_map.end();
|
||||||
|
//galileo_ephemeris_iter = d_ls_pvt->galileo_ephemeris_map.end();
|
||||||
|
unsigned int i = 0;
|
||||||
|
for (gnss_observables_iter = gnss_observables_map.begin(); gnss_observables_iter != gnss_observables_map.end(); gnss_observables_iter++)
|
||||||
|
{
|
||||||
|
std::string system(&gnss_observables_iter->second.System, 1);
|
||||||
|
if(gps_channel == 0)
|
||||||
|
{
|
||||||
|
if(system.compare("G") == 0)
|
||||||
|
{
|
||||||
|
// This is a channel with valid GPS signal
|
||||||
|
gps_ephemeris_iter = d_ls_pvt->gps_ephemeris_map.find(gnss_observables_iter->second.PRN);
|
||||||
|
if (gps_ephemeris_iter != d_ls_pvt->gps_ephemeris_map.cend())
|
||||||
|
{
|
||||||
|
gps_channel = i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(glo_channel == 0)
|
||||||
|
{
|
||||||
|
if(system.compare("R") == 0)
|
||||||
|
{
|
||||||
|
glonass_gnav_ephemeris_iter = d_ls_pvt->glonass_gnav_ephemeris_map.find(gnss_observables_iter->second.PRN);
|
||||||
|
if (glonass_gnav_ephemeris_iter != d_ls_pvt->glonass_gnav_ephemeris_map.cend())
|
||||||
|
{
|
||||||
|
glo_channel = i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
if(flag_write_RTCM_MSM_output == true)
|
||||||
|
{
|
||||||
|
|
||||||
|
if (glonass_gnav_ephemeris_iter != d_ls_pvt->glonass_gnav_ephemeris_map.cend())
|
||||||
|
{
|
||||||
|
d_rtcm_printer->Print_Rtcm_MSM(7, {}, {}, {}, glonass_gnav_ephemeris_iter->second, d_rx_time, gnss_observables_map, 0, 0, 0, 0, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(flag_write_RTCM_MSM_output == true)
|
||||||
|
{
|
||||||
|
if (gps_ephemeris_iter != d_ls_pvt->gps_ephemeris_map.cend())
|
||||||
|
{
|
||||||
|
d_rtcm_printer->Print_Rtcm_MSM(7, gps_ephemeris_iter->second, {}, {}, {}, d_rx_time, gnss_observables_map, 0, 0, 0, 0, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(type_of_rx == 27) // GLONASS L1 C/A + Galileo E1B
|
||||||
|
{
|
||||||
|
if(flag_write_RTCM_1020_output == true)
|
||||||
|
{
|
||||||
|
for(std::map<int,Glonass_Gnav_Ephemeris>::const_iterator glonass_gnav_ephemeris_iter = d_ls_pvt->glonass_gnav_ephemeris_map.cbegin(); glonass_gnav_ephemeris_iter != d_ls_pvt->glonass_gnav_ephemeris_map.cend(); glonass_gnav_ephemeris_iter++ )
|
||||||
|
{
|
||||||
|
d_rtcm_printer->Print_Rtcm_MT1020(glonass_gnav_ephemeris_iter->second, d_ls_pvt->glonass_gnav_utc_model);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(flag_write_RTCM_1045_output == true)
|
||||||
|
{
|
||||||
|
for(galileo_ephemeris_iter = d_ls_pvt->galileo_ephemeris_map.cbegin(); galileo_ephemeris_iter != d_ls_pvt->galileo_ephemeris_map.cend(); galileo_ephemeris_iter++ )
|
||||||
|
{
|
||||||
|
d_rtcm_printer->Print_Rtcm_MT1045(galileo_ephemeris_iter->second);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(flag_write_RTCM_MSM_output == true)
|
||||||
|
{
|
||||||
|
//gps_ephemeris_iter = d_ls_pvt->gps_ephemeris_map.end();
|
||||||
|
//galileo_ephemeris_iter = d_ls_pvt->galileo_ephemeris_map.end();
|
||||||
|
unsigned int i = 0;
|
||||||
|
for (gnss_observables_iter = gnss_observables_map.cbegin(); gnss_observables_iter != gnss_observables_map.cend(); gnss_observables_iter++)
|
||||||
|
{
|
||||||
|
std::string system(&gnss_observables_iter->second.System, 1);
|
||||||
|
if(gal_channel == 0)
|
||||||
|
{
|
||||||
|
if(system.compare("E") == 0)
|
||||||
|
{
|
||||||
|
// This is a channel with valid GPS signal
|
||||||
|
galileo_ephemeris_iter = d_ls_pvt->galileo_ephemeris_map.find(gnss_observables_iter->second.PRN);
|
||||||
|
if (galileo_ephemeris_iter != d_ls_pvt->galileo_ephemeris_map.cend())
|
||||||
|
{
|
||||||
|
gal_channel = i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(glo_channel == 0)
|
||||||
|
{
|
||||||
|
if(system.compare("R") == 0)
|
||||||
|
{
|
||||||
|
glonass_gnav_ephemeris_iter = d_ls_pvt->glonass_gnav_ephemeris_map.find(gnss_observables_iter->second.PRN);
|
||||||
|
if (glonass_gnav_ephemeris_iter != d_ls_pvt->glonass_gnav_ephemeris_map.end())
|
||||||
|
{
|
||||||
|
glo_channel = i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
if(flag_write_RTCM_MSM_output == true)
|
||||||
|
{
|
||||||
|
|
||||||
|
if (galileo_ephemeris_iter != d_ls_pvt->galileo_ephemeris_map.end())
|
||||||
|
{
|
||||||
|
d_rtcm_printer->Print_Rtcm_MSM(7, {}, {}, galileo_ephemeris_iter->second, {}, d_rx_time, gnss_observables_map, 0, 0, 0, 0, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(flag_write_RTCM_MSM_output == true)
|
||||||
|
{
|
||||||
|
|
||||||
|
if (glonass_gnav_ephemeris_iter != d_ls_pvt->glonass_gnav_ephemeris_map.end())
|
||||||
|
{
|
||||||
|
d_rtcm_printer->Print_Rtcm_MSM(7, {}, {}, {}, glonass_gnav_ephemeris_iter->second, d_rx_time, gnss_observables_map, 0, 0, 0, 0, 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1060,11 +1483,10 @@ int rtklib_pvt_cc::work (int noutput_items, gr_vector_const_void_star &input_ite
|
|||||||
|
|
||||||
if (gps_ephemeris_iter != d_ls_pvt->gps_ephemeris_map.cend())
|
if (gps_ephemeris_iter != d_ls_pvt->gps_ephemeris_map.cend())
|
||||||
{
|
{
|
||||||
d_rtcm_printer->Print_Rtcm_MSM(7, gps_ephemeris_iter->second, {}, {}, d_rx_time, gnss_observables_map, 0, 0, 0, 0, 0);
|
d_rtcm_printer->Print_Rtcm_MSM(7, gps_ephemeris_iter->second, {}, {}, {}, d_rx_time, gnss_observables_map, 0, 0, 0, 0, 0);
|
||||||
}
|
}
|
||||||
b_rtcm_writing_started = true;
|
b_rtcm_writing_started = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if((type_of_rx == 4) || (type_of_rx == 5) || (type_of_rx == 6) || (type_of_rx == 14) || (type_of_rx == 15)) // Galileo
|
if((type_of_rx == 4) || (type_of_rx == 5) || (type_of_rx == 6) || (type_of_rx == 14) || (type_of_rx == 15)) // Galileo
|
||||||
{
|
{
|
||||||
for(std::map<int,Galileo_Ephemeris>::const_iterator gal_ephemeris_iter = d_ls_pvt->galileo_ephemeris_map.cbegin(); gal_ephemeris_iter != d_ls_pvt->galileo_ephemeris_map.cend(); gal_ephemeris_iter++ )
|
for(std::map<int,Galileo_Ephemeris>::const_iterator gal_ephemeris_iter = d_ls_pvt->galileo_ephemeris_map.cbegin(); gal_ephemeris_iter != d_ls_pvt->galileo_ephemeris_map.cend(); gal_ephemeris_iter++ )
|
||||||
@ -1076,7 +1498,7 @@ int rtklib_pvt_cc::work (int noutput_items, gr_vector_const_void_star &input_ite
|
|||||||
|
|
||||||
if (gal_ephemeris_iter != d_ls_pvt->galileo_ephemeris_map.cend())
|
if (gal_ephemeris_iter != d_ls_pvt->galileo_ephemeris_map.cend())
|
||||||
{
|
{
|
||||||
d_rtcm_printer->Print_Rtcm_MSM(7, {}, {}, gal_ephemeris_iter->second, d_rx_time, gnss_observables_map, 0, 0, 0, 0, 0);
|
d_rtcm_printer->Print_Rtcm_MSM(7, {}, {}, gal_ephemeris_iter->second, {}, d_rx_time, gnss_observables_map, 0, 0, 0, 0, 0);
|
||||||
}
|
}
|
||||||
b_rtcm_writing_started = true;
|
b_rtcm_writing_started = true;
|
||||||
}
|
}
|
||||||
@ -1092,7 +1514,7 @@ int rtklib_pvt_cc::work (int noutput_items, gr_vector_const_void_star &input_ite
|
|||||||
|
|
||||||
if ((gps_ephemeris_iter != d_ls_pvt->gps_ephemeris_map.cend()) && (gps_cnav_ephemeris_iter != d_ls_pvt->gps_cnav_ephemeris_map.cend()))
|
if ((gps_ephemeris_iter != d_ls_pvt->gps_ephemeris_map.cend()) && (gps_cnav_ephemeris_iter != d_ls_pvt->gps_cnav_ephemeris_map.cend()))
|
||||||
{
|
{
|
||||||
d_rtcm_printer->Print_Rtcm_MSM(7, gps_ephemeris_iter->second, gps_cnav_ephemeris_iter->second, {}, d_rx_time, gnss_observables_map, 0, 0, 0, 0, 0);
|
d_rtcm_printer->Print_Rtcm_MSM(7, gps_ephemeris_iter->second, gps_cnav_ephemeris_iter->second, {}, {}, d_rx_time, gnss_observables_map, 0, 0, 0, 0, 0);
|
||||||
}
|
}
|
||||||
b_rtcm_writing_started = true;
|
b_rtcm_writing_started = true;
|
||||||
}
|
}
|
||||||
@ -1145,15 +1567,145 @@ int rtklib_pvt_cc::work (int noutput_items, gr_vector_const_void_star &input_ite
|
|||||||
|
|
||||||
if (gps_ephemeris_iter != d_ls_pvt->gps_ephemeris_map.end() && (d_rtcm_MT1077_rate_ms != 0))
|
if (gps_ephemeris_iter != d_ls_pvt->gps_ephemeris_map.end() && (d_rtcm_MT1077_rate_ms != 0))
|
||||||
{
|
{
|
||||||
d_rtcm_printer->Print_Rtcm_MSM(7, gps_ephemeris_iter->second, {}, {}, d_rx_time, gnss_observables_map, 0, 0, 0, 0, 0);
|
d_rtcm_printer->Print_Rtcm_MSM(7, gps_ephemeris_iter->second, {}, {}, {}, d_rx_time, gnss_observables_map, 0, 0, 0, 0, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (galileo_ephemeris_iter != d_ls_pvt->galileo_ephemeris_map.end() && (d_rtcm_MT1097_rate_ms != 0) )
|
if (galileo_ephemeris_iter != d_ls_pvt->galileo_ephemeris_map.end() && (d_rtcm_MT1097_rate_ms != 0) )
|
||||||
{
|
{
|
||||||
d_rtcm_printer->Print_Rtcm_MSM(7, {}, {}, galileo_ephemeris_iter->second, d_rx_time, gnss_observables_map, 0, 0, 0, 0, 0);
|
d_rtcm_printer->Print_Rtcm_MSM(7, {}, {}, galileo_ephemeris_iter->second, {}, d_rx_time, gnss_observables_map, 0, 0, 0, 0, 0);
|
||||||
}
|
}
|
||||||
b_rtcm_writing_started = true;
|
b_rtcm_writing_started = true;
|
||||||
}
|
}
|
||||||
|
if((type_of_rx == 23) || (type_of_rx == 24) || (type_of_rx == 25)) // GLONASS
|
||||||
|
{
|
||||||
|
for(std::map<int,Glonass_Gnav_Ephemeris>::const_iterator glonass_gnav_ephemeris_iter = d_ls_pvt->glonass_gnav_ephemeris_map.cbegin(); glonass_gnav_ephemeris_iter != d_ls_pvt->glonass_gnav_ephemeris_map.cend(); glonass_gnav_ephemeris_iter++ )
|
||||||
|
{
|
||||||
|
d_rtcm_printer->Print_Rtcm_MT1020(glonass_gnav_ephemeris_iter->second, d_ls_pvt->glonass_gnav_utc_model);
|
||||||
|
}
|
||||||
|
|
||||||
|
std::map<int,Glonass_Gnav_Ephemeris>::const_iterator glo_gnav_ephemeris_iter = d_ls_pvt->glonass_gnav_ephemeris_map.cbegin();
|
||||||
|
|
||||||
|
if (glo_gnav_ephemeris_iter != d_ls_pvt->glonass_gnav_ephemeris_map.cend())
|
||||||
|
{
|
||||||
|
d_rtcm_printer->Print_Rtcm_MSM(7, {}, {}, {}, glo_gnav_ephemeris_iter->second, d_rx_time, gnss_observables_map, 0, 0, 0, 0, 0);
|
||||||
|
}
|
||||||
|
b_rtcm_writing_started = true;
|
||||||
|
}
|
||||||
|
if(type_of_rx == 26) // GPS L1 C/A + GLONASS L1 C/A
|
||||||
|
{
|
||||||
|
if(d_rtcm_MT1019_rate_ms != 0) // allows deactivating messages by setting rate = 0
|
||||||
|
{
|
||||||
|
for(gps_ephemeris_iter = d_ls_pvt->gps_ephemeris_map.cbegin(); gps_ephemeris_iter != d_ls_pvt->gps_ephemeris_map.cend(); gps_ephemeris_iter++ )
|
||||||
|
{
|
||||||
|
d_rtcm_printer->Print_Rtcm_MT1019(gps_ephemeris_iter->second);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(d_rtcm_MT1020_rate_ms != 0) // allows deactivating messages by setting rate = 0
|
||||||
|
{
|
||||||
|
for(std::map<int,Glonass_Gnav_Ephemeris>::const_iterator glonass_gnav_ephemeris_iter = d_ls_pvt->glonass_gnav_ephemeris_map.cbegin(); glonass_gnav_ephemeris_iter != d_ls_pvt->glonass_gnav_ephemeris_map.cend(); glonass_gnav_ephemeris_iter++ )
|
||||||
|
{
|
||||||
|
d_rtcm_printer->Print_Rtcm_MT1020(glonass_gnav_ephemeris_iter->second, d_ls_pvt->glonass_gnav_utc_model);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//gps_ephemeris_iter = d_ls_pvt->gps_ephemeris_map.end();
|
||||||
|
//galileo_ephemeris_iter = d_ls_pvt->galileo_ephemeris_map.end();
|
||||||
|
unsigned int i = 0;
|
||||||
|
for (gnss_observables_iter = gnss_observables_map.cbegin(); gnss_observables_iter != gnss_observables_map.cend(); gnss_observables_iter++)
|
||||||
|
{
|
||||||
|
std::string system(&gnss_observables_iter->second.System, 1);
|
||||||
|
if(gps_channel == 0)
|
||||||
|
{
|
||||||
|
if(system.compare("G") == 0)
|
||||||
|
{
|
||||||
|
// This is a channel with valid GPS signal
|
||||||
|
gps_ephemeris_iter = d_ls_pvt->gps_ephemeris_map.find(gnss_observables_iter->second.PRN);
|
||||||
|
if (gps_ephemeris_iter != d_ls_pvt->gps_ephemeris_map.cend())
|
||||||
|
{
|
||||||
|
gps_channel = i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(glo_channel == 0)
|
||||||
|
{
|
||||||
|
if(system.compare("R") == 0)
|
||||||
|
{
|
||||||
|
glonass_gnav_ephemeris_iter = d_ls_pvt->glonass_gnav_ephemeris_map.find(gnss_observables_iter->second.PRN);
|
||||||
|
if (glonass_gnav_ephemeris_iter != d_ls_pvt->glonass_gnav_ephemeris_map.cend())
|
||||||
|
{
|
||||||
|
glo_channel = i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
if (glonass_gnav_ephemeris_iter != d_ls_pvt->glonass_gnav_ephemeris_map.cend())
|
||||||
|
{
|
||||||
|
d_rtcm_printer->Print_Rtcm_MSM(7, {}, {}, {}, glonass_gnav_ephemeris_iter->second, d_rx_time, gnss_observables_map, 0, 0, 0, 0, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (gps_ephemeris_iter != d_ls_pvt->gps_ephemeris_map.cend())
|
||||||
|
{
|
||||||
|
d_rtcm_printer->Print_Rtcm_MSM(7, gps_ephemeris_iter->second, {}, {}, {}, d_rx_time, gnss_observables_map, 0, 0, 0, 0, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
b_rtcm_writing_started = true;
|
||||||
|
}
|
||||||
|
if(type_of_rx == 27) // GLONASS L1 C/A + Galileo E1B
|
||||||
|
{
|
||||||
|
if(d_rtcm_MT1020_rate_ms != 0) // allows deactivating messages by setting rate = 0
|
||||||
|
{
|
||||||
|
for(std::map<int,Glonass_Gnav_Ephemeris>::const_iterator glonass_gnav_ephemeris_iter = d_ls_pvt->glonass_gnav_ephemeris_map.cbegin(); glonass_gnav_ephemeris_iter != d_ls_pvt->glonass_gnav_ephemeris_map.cend(); glonass_gnav_ephemeris_iter++ )
|
||||||
|
{
|
||||||
|
d_rtcm_printer->Print_Rtcm_MT1020(glonass_gnav_ephemeris_iter->second, d_ls_pvt->glonass_gnav_utc_model);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(d_rtcm_MT1045_rate_ms != 0) // allows deactivating messages by setting rate = 0
|
||||||
|
{
|
||||||
|
for(galileo_ephemeris_iter = d_ls_pvt->galileo_ephemeris_map.cbegin(); galileo_ephemeris_iter != d_ls_pvt->galileo_ephemeris_map.cend(); galileo_ephemeris_iter++ )
|
||||||
|
{
|
||||||
|
d_rtcm_printer->Print_Rtcm_MT1045(galileo_ephemeris_iter->second);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned int i = 0;
|
||||||
|
for (gnss_observables_iter = gnss_observables_map.cbegin(); gnss_observables_iter != gnss_observables_map.cend(); gnss_observables_iter++)
|
||||||
|
{
|
||||||
|
std::string system(&gnss_observables_iter->second.System, 1);
|
||||||
|
if(gal_channel == 0)
|
||||||
|
{
|
||||||
|
if(system.compare("E") == 0)
|
||||||
|
{
|
||||||
|
// This is a channel with valid GPS signal
|
||||||
|
galileo_ephemeris_iter = d_ls_pvt->galileo_ephemeris_map.find(gnss_observables_iter->second.PRN);
|
||||||
|
if (galileo_ephemeris_iter != d_ls_pvt->galileo_ephemeris_map.cend())
|
||||||
|
{
|
||||||
|
gal_channel = i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(glo_channel == 0)
|
||||||
|
{
|
||||||
|
if(system.compare("R") == 0)
|
||||||
|
{
|
||||||
|
glonass_gnav_ephemeris_iter = d_ls_pvt->glonass_gnav_ephemeris_map.find(gnss_observables_iter->second.PRN);
|
||||||
|
if (glonass_gnav_ephemeris_iter != d_ls_pvt->glonass_gnav_ephemeris_map.end())
|
||||||
|
{
|
||||||
|
glo_channel = i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
if (galileo_ephemeris_iter != d_ls_pvt->galileo_ephemeris_map.end())
|
||||||
|
{
|
||||||
|
d_rtcm_printer->Print_Rtcm_MSM(7, {}, {}, galileo_ephemeris_iter->second, {}, d_rx_time, gnss_observables_map, 0, 0, 0, 0, 0);
|
||||||
|
}
|
||||||
|
if (glonass_gnav_ephemeris_iter != d_ls_pvt->glonass_gnav_ephemeris_map.end())
|
||||||
|
{
|
||||||
|
d_rtcm_printer->Print_Rtcm_MSM(7, {}, {}, {}, glonass_gnav_ephemeris_iter->second, d_rx_time, gnss_observables_map, 0, 0, 0, 0, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -98,11 +98,14 @@ private:
|
|||||||
bool d_dump;
|
bool d_dump;
|
||||||
bool b_rinex_header_written;
|
bool b_rinex_header_written;
|
||||||
bool b_rinex_header_updated;
|
bool b_rinex_header_updated;
|
||||||
|
double d_rinex_version;
|
||||||
bool b_rtcm_writing_started;
|
bool b_rtcm_writing_started;
|
||||||
int d_rtcm_MT1045_rate_ms;
|
int d_rtcm_MT1045_rate_ms; //!< Galileo Broadcast Ephemeris
|
||||||
int d_rtcm_MT1019_rate_ms;
|
int d_rtcm_MT1019_rate_ms; //!< GPS Broadcast Ephemeris (orbits)
|
||||||
int d_rtcm_MT1077_rate_ms;
|
int d_rtcm_MT1020_rate_ms; //!< GLONASS Broadcast Ephemeris (orbits)
|
||||||
int d_rtcm_MT1097_rate_ms;
|
int d_rtcm_MT1077_rate_ms; //!< The type 7 Multiple Signal Message format for the USA’s GPS system, popular
|
||||||
|
int d_rtcm_MT1087_rate_ms; //!< GLONASS MSM7. The type 7 Multiple Signal Message format for the Russian GLONASS system
|
||||||
|
int d_rtcm_MT1097_rate_ms; //!< Galileo MSM7. The type 7 Multiple Signal Message format for Europe’s Galileo system
|
||||||
int d_rtcm_MSM_rate_ms;
|
int d_rtcm_MSM_rate_ms;
|
||||||
|
|
||||||
int d_last_status_print_seg; //for status printer
|
int d_last_status_print_seg; //for status printer
|
||||||
@ -122,8 +125,10 @@ private:
|
|||||||
double d_rx_time;
|
double d_rx_time;
|
||||||
double last_pvt_display_T_rx_s;
|
double last_pvt_display_T_rx_s;
|
||||||
double last_RTCM_1019_output_time;
|
double last_RTCM_1019_output_time;
|
||||||
|
double last_RTCM_1020_output_time;
|
||||||
double last_RTCM_1045_output_time;
|
double last_RTCM_1045_output_time;
|
||||||
double last_RTCM_1077_output_time;
|
double last_RTCM_1077_output_time;
|
||||||
|
double last_RTCM_1087_output_time;
|
||||||
double last_RTCM_1097_output_time;
|
double last_RTCM_1097_output_time;
|
||||||
double last_RTCM_MSM_output_time;
|
double last_RTCM_MSM_output_time;
|
||||||
double last_RINEX_obs_output_time;
|
double last_RINEX_obs_output_time;
|
||||||
|
@ -727,6 +727,3 @@ std::string Nmea_Printer::get_GPGGA()
|
|||||||
return sentence_str.str();
|
return sentence_str.str();
|
||||||
//$GPGGA,104427.591,5920.7009,N,01803.2938,E,1,05,3.3,78.2,M,23.2,M,0.0,0000*4A
|
//$GPGGA,104427.591,5920.7009,N,01803.2938,E,1,05,3.3,78.2,M,23.2,M,0.0,0000*4A
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -61,8 +61,10 @@
|
|||||||
#include "gps_navigation_message.h"
|
#include "gps_navigation_message.h"
|
||||||
#include "gps_cnav_navigation_message.h"
|
#include "gps_cnav_navigation_message.h"
|
||||||
#include "galileo_navigation_message.h"
|
#include "galileo_navigation_message.h"
|
||||||
|
#include "glonass_gnav_navigation_message.h"
|
||||||
#include "GPS_L1_CA.h"
|
#include "GPS_L1_CA.h"
|
||||||
#include "Galileo_E1.h"
|
#include "Galileo_E1.h"
|
||||||
|
#include "GLONASS_L1_CA.h"
|
||||||
#include "gnss_synchro.h"
|
#include "gnss_synchro.h"
|
||||||
|
|
||||||
class Sbas_Raw_Msg;
|
class Sbas_Raw_Msg;
|
||||||
@ -88,6 +90,7 @@ public:
|
|||||||
std::fstream navFile ; //<! Output file stream for RINEX navigation data file
|
std::fstream navFile ; //<! Output file stream for RINEX navigation data file
|
||||||
std::fstream sbsFile ; //<! Output file stream for RINEX SBAS raw data file
|
std::fstream sbsFile ; //<! Output file stream for RINEX SBAS raw data file
|
||||||
std::fstream navGalFile ; //<! Output file stream for RINEX Galileo navigation data file
|
std::fstream navGalFile ; //<! Output file stream for RINEX Galileo navigation data file
|
||||||
|
std::fstream navGloFile ; //<! Output file stream for RINEX GLONASS navigation data file
|
||||||
std::fstream navMixFile ; //<! Output file stream for RINEX Mixed navigation data file
|
std::fstream navMixFile ; //<! Output file stream for RINEX Mixed navigation data file
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
@ -110,6 +113,26 @@ public:
|
|||||||
*/
|
*/
|
||||||
void rinex_nav_header(std::fstream & out, const Gps_Iono & gps_iono, const Gps_Utc_Model & gps_utc_model, const Galileo_Iono & galileo_iono, const Galileo_Utc_Model & galileo_utc_model, const Galileo_Almanac & galileo_almanac);
|
void rinex_nav_header(std::fstream & out, const Gps_Iono & gps_iono, const Gps_Utc_Model & gps_utc_model, const Galileo_Iono & galileo_iono, const Galileo_Utc_Model & galileo_utc_model, const Galileo_Almanac & galileo_almanac);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Generates the GLONASS L1, L2 C/A Navigation Data header
|
||||||
|
*/
|
||||||
|
void rinex_nav_header(std::fstream & out, const Glonass_Gnav_Utc_Model & utc_model, const Glonass_Gnav_Ephemeris & glonass_gnav_eph);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Generates the Mixed (Galileo/GLONASS) Navigation Data header
|
||||||
|
*/
|
||||||
|
void rinex_nav_header(std::fstream & out, const Galileo_Iono & galileo_iono, const Galileo_Utc_Model & galileo_utc_model, const Galileo_Almanac & galileo_almanac, const Glonass_Gnav_Utc_Model & glonass_gnav_utc_model, const Glonass_Gnav_Almanac & glonass_gnav_almanac);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Generates the Mixed (GPS L1 C/A/GLONASS L1, L2) Navigation Data header
|
||||||
|
*/
|
||||||
|
void rinex_nav_header(std::fstream & out, const Gps_Iono & gps_iono, const Gps_Utc_Model & gps_utc_model, const Glonass_Gnav_Utc_Model & glonass_gnav_utc_model, const Glonass_Gnav_Almanac & glonass_gnav_almanac);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Generates the Mixed (GPS L2C C/A/GLONASS L1, L2) Navigation Data header
|
||||||
|
*/
|
||||||
|
void rinex_nav_header(std::fstream & out, const Gps_CNAV_Iono & gps_iono, const Gps_CNAV_Utc_Model & gps_utc_model, const Glonass_Gnav_Utc_Model & glonass_gnav_utc_model, const Glonass_Gnav_Almanac & glonass_gnav_almanac);
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* \brief Generates the GPS Observation data header
|
* \brief Generates the GPS Observation data header
|
||||||
*/
|
*/
|
||||||
@ -135,6 +158,26 @@ public:
|
|||||||
*/
|
*/
|
||||||
void rinex_obs_header(std::fstream & out, const Gps_Ephemeris & gps_eph, const Galileo_Ephemeris & galileo_eph, const double d_TOW_first_observation, const std::string galileo_bands = "1B");
|
void rinex_obs_header(std::fstream & out, const Gps_Ephemeris & gps_eph, const Galileo_Ephemeris & galileo_eph, const double d_TOW_first_observation, const std::string galileo_bands = "1B");
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Generates the GLONASS GNAV Observation data header. Example: bands("1C"), bands("1C 2C"), bands("2C"), ... Default: "1C".
|
||||||
|
*/
|
||||||
|
void rinex_obs_header(std::fstream & out, const Glonass_Gnav_Ephemeris & eph, const double d_TOW_first_observation, const std::string bands = "1G");
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Generates the Mixed (GPS L1 C/A /GLONASS) Observation data header. Example: galileo_bands("1C"), galileo_bands("1B 5X"), galileo_bands("5X"), ... Default: "1B".
|
||||||
|
*/
|
||||||
|
void rinex_obs_header(std::fstream & out, const Gps_Ephemeris & gps_eph, const Glonass_Gnav_Ephemeris & glonass_gnav_eph, const double d_TOW_first_observation, const std::string glo_bands = "1C");
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Generates the Mixed (Galileo/GLONASS) Observation data header. Example: galileo_bands("1C"), galileo_bands("1B 5X"), galileo_bands("5X"), ... Default: "1B".
|
||||||
|
*/
|
||||||
|
void rinex_obs_header(std::fstream & out, const Galileo_Ephemeris & galileo_eph, const Glonass_Gnav_Ephemeris & glonass_gnav_eph, const double d_TOW_first_observation, const std::string galileo_bands = "1B", const std::string glo_bands = "1C");
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Generates the Mixed (GPS L2C/GLONASS) Observation data header. Example: galileo_bands("1G")... Default: "1G".
|
||||||
|
*/
|
||||||
|
void rinex_obs_header(std::fstream & out, const Gps_CNAV_Ephemeris & gps_cnav_eph, const Glonass_Gnav_Ephemeris & glonass_gnav_eph, const double d_TOW_first_observation, const std::string glo_bands = "1G");
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* \brief Generates the SBAS raw data header
|
* \brief Generates the SBAS raw data header
|
||||||
*/
|
*/
|
||||||
@ -160,6 +203,22 @@ public:
|
|||||||
*/
|
*/
|
||||||
boost::posix_time::ptime compute_Galileo_time(const Galileo_Ephemeris & eph, const double obs_time);
|
boost::posix_time::ptime compute_Galileo_time(const Galileo_Ephemeris & eph, const double obs_time);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Computes the UTC Time and returns a boost::posix_time::ptime object
|
||||||
|
* \details Function used as a method to convert the observation time into UTC time which is used
|
||||||
|
* as the default time for RINEX files
|
||||||
|
* \param eph GLONASS GNAV Ephemeris object
|
||||||
|
* \param obs_time Observation time in GPS seconds of week
|
||||||
|
*/
|
||||||
|
boost::posix_time::ptime compute_UTC_time(const Glonass_Gnav_Ephemeris & eph, const double obs_time);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Computes number of leap seconds of GPS relative to UTC
|
||||||
|
* \param eph GLONASS GNAV Ephemeris object
|
||||||
|
* \param gps_obs_time Observation time in GPS seconds of week
|
||||||
|
*/
|
||||||
|
double get_leap_second(const Glonass_Gnav_Ephemeris& eph, const double gps_obs_time);
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* \brief Writes data from the GPS L1 C/A navigation message into the RINEX file
|
* \brief Writes data from the GPS L1 C/A navigation message into the RINEX file
|
||||||
*/
|
*/
|
||||||
@ -180,6 +239,26 @@ public:
|
|||||||
*/
|
*/
|
||||||
void log_rinex_nav(std::fstream & out, const std::map<int, Gps_Ephemeris> & gps_eph_map, const std::map<int, Galileo_Ephemeris> & galileo_eph_map);
|
void log_rinex_nav(std::fstream & out, const std::map<int, Gps_Ephemeris> & gps_eph_map, const std::map<int, Galileo_Ephemeris> & galileo_eph_map);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Writes data from the GLONASS GNAV navigation message into the RINEX file
|
||||||
|
*/
|
||||||
|
void log_rinex_nav(std::fstream & out, const std::map<int, Glonass_Gnav_Ephemeris> & eph_map);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Writes data from the Mixed (GPS/GLONASS GNAV) navigation message into the RINEX file
|
||||||
|
*/
|
||||||
|
void log_rinex_nav(std::fstream & out, const std::map<int, Gps_Ephemeris> & gps_eph_map, const std::map<int, Glonass_Gnav_Ephemeris> & glonass_gnav_eph_map);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Writes data from the Mixed (GPS/GLONASS GNAV) navigation message into the RINEX file
|
||||||
|
*/
|
||||||
|
void log_rinex_nav(std::fstream & out, const std::map<int, Gps_CNAV_Ephemeris> & gps_cnav_eph_map, const std::map<int, Glonass_Gnav_Ephemeris> & glonass_gnav_eph_map);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Writes data from the Mixed (Galileo/ GLONASS GNAV) navigation message into the RINEX file
|
||||||
|
*/
|
||||||
|
void log_rinex_nav(std::fstream & out, const std::map<int, Galileo_Ephemeris> & galileo_eph_map, const std::map<int, Glonass_Gnav_Ephemeris> & glonass_gnav_eph_map);
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* \brief Writes GPS L1 observables into the RINEX file
|
* \brief Writes GPS L1 observables into the RINEX file
|
||||||
*/
|
*/
|
||||||
@ -205,6 +284,26 @@ public:
|
|||||||
*/
|
*/
|
||||||
void log_rinex_obs(std::fstream & out, const Gps_Ephemeris & gps_eph, const Galileo_Ephemeris & galileo_eph, const double gps_obs_time, const std::map<int, Gnss_Synchro> & observables);
|
void log_rinex_obs(std::fstream & out, const Gps_Ephemeris & gps_eph, const Galileo_Ephemeris & galileo_eph, const double gps_obs_time, const std::map<int, Gnss_Synchro> & observables);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Writes GLONASS GNAV observables into the RINEX file. Example: glonass_bands("1C"), galileo_bands("1B 5X"), galileo_bands("5X"), ... Default: "1B".
|
||||||
|
*/
|
||||||
|
void log_rinex_obs(std::fstream & out, const Glonass_Gnav_Ephemeris & eph, double obs_time, const std::map<int, Gnss_Synchro> & observables, const std::string glonass_bands = "1C");
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Writes Mixed GPS L1 C/A - GLONASS observables into the RINEX file
|
||||||
|
*/
|
||||||
|
void log_rinex_obs(std::fstream & out, const Gps_Ephemeris & gps_eph, const Glonass_Gnav_Ephemeris & glonass_gnav_eph, const double gps_obs_time, const std::map<int, Gnss_Synchro> & observables);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Writes Mixed GPS L2C - GLONASS observables into the RINEX file
|
||||||
|
*/
|
||||||
|
void log_rinex_obs(std::fstream & out, const Gps_CNAV_Ephemeris & gps_cnav_eph, const Glonass_Gnav_Ephemeris & glonass_gnav_eph, const double gps_obs_time, const std::map<int, Gnss_Synchro> & observables);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Writes Mixed Galileo/GLONASS observables into the RINEX file
|
||||||
|
*/
|
||||||
|
void log_rinex_obs(std::fstream & out, const Galileo_Ephemeris & galileo_eph, const Glonass_Gnav_Ephemeris & glonass_gnav_eph, const double gps_obs_time, const std::map<int, Gnss_Synchro> & observables);
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* \brief Represents GPS time in the date time format. Leap years are considered, but leap seconds are not.
|
* \brief Represents GPS time in the date time format. Leap years are considered, but leap seconds are not.
|
||||||
*/
|
*/
|
||||||
@ -223,12 +322,22 @@ public:
|
|||||||
|
|
||||||
void update_nav_header(std::fstream & out, const Galileo_Iono & galileo_iono, const Galileo_Utc_Model & utc_model, const Galileo_Almanac & galileo_almanac);
|
void update_nav_header(std::fstream & out, const Galileo_Iono & galileo_iono, const Galileo_Utc_Model & utc_model, const Galileo_Almanac & galileo_almanac);
|
||||||
|
|
||||||
|
void update_nav_header(std::fstream & out, const Glonass_Gnav_Utc_Model & glonass_gnav_utc_model, const Glonass_Gnav_Almanac & glonass_gnav_almanac);
|
||||||
|
|
||||||
|
void update_nav_header(std::fstream & out, const Gps_Iono & gps_iono, const Gps_Utc_Model & gps_utc, const Glonass_Gnav_Utc_Model & glonass_gnav_utc_model, const Glonass_Gnav_Almanac & glonass_gnav_almanac);
|
||||||
|
|
||||||
|
void update_nav_header(std::fstream & out, const Gps_CNAV_Iono & gps_cnav_iono, const Gps_CNAV_Utc_Model & gps_cnav_utc, const Glonass_Gnav_Utc_Model & glonass_gnav_utc_model, const Glonass_Gnav_Almanac & glonass_gnav_almanac);
|
||||||
|
|
||||||
|
void update_nav_header(std::fstream & out, const Galileo_Iono & galileo_iono, const Galileo_Utc_Model & galileo_utc_model, const Galileo_Almanac& galileo_almanac, const Glonass_Gnav_Utc_Model & glonass_gnav_utc_model, const Glonass_Gnav_Almanac & glonass_gnav_almanac);
|
||||||
|
|
||||||
void update_obs_header(std::fstream & out, const Gps_Utc_Model & utc_model);
|
void update_obs_header(std::fstream & out, const Gps_Utc_Model & utc_model);
|
||||||
|
|
||||||
void update_obs_header(std::fstream & out, const Gps_CNAV_Utc_Model & utc_model);
|
void update_obs_header(std::fstream & out, const Gps_CNAV_Utc_Model & utc_model);
|
||||||
|
|
||||||
void update_obs_header(std::fstream & out, const Galileo_Utc_Model & galileo_utc_model);
|
void update_obs_header(std::fstream & out, const Galileo_Utc_Model & galileo_utc_model);
|
||||||
|
|
||||||
|
void update_obs_header(std::fstream & out, const Glonass_Gnav_Utc_Model & glonass_gnav_utc_model);
|
||||||
|
|
||||||
std::map<std::string,std::string> satelliteSystem; //<! GPS, GLONASS, SBAS payload, Galileo or Compass
|
std::map<std::string,std::string> satelliteSystem; //<! GPS, GLONASS, SBAS payload, Galileo or Compass
|
||||||
std::map<std::string,std::string> observationType; //<! PSEUDORANGE, CARRIER_PHASE, DOPPLER, SIGNAL_STRENGTH
|
std::map<std::string,std::string> observationType; //<! PSEUDORANGE, CARRIER_PHASE, DOPPLER, SIGNAL_STRENGTH
|
||||||
std::map<std::string,std::string> observationCode; //<! GNSS observation descriptors
|
std::map<std::string,std::string> observationCode; //<! GNSS observation descriptors
|
||||||
@ -238,6 +347,7 @@ public:
|
|||||||
std::string obsfilename;
|
std::string obsfilename;
|
||||||
std::string sbsfilename;
|
std::string sbsfilename;
|
||||||
std::string navGalfilename;
|
std::string navGalfilename;
|
||||||
|
std::string navGlofilename;
|
||||||
std::string navMixfilename;
|
std::string navMixfilename;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
@ -186,6 +186,38 @@ bool Rtcm_Printer::Print_Rtcm_MT1004(const Gps_Ephemeris& gps_eph, const Gps_CNA
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool Rtcm_Printer::Print_Rtcm_MT1009(const Glonass_Gnav_Ephemeris& glonass_gnav_eph, double obs_time, const std::map<int, Gnss_Synchro> & observables)
|
||||||
|
{
|
||||||
|
std::string m1009 = rtcm->print_MT1009(glonass_gnav_eph, obs_time, observables, station_id);
|
||||||
|
Rtcm_Printer::Print_Message(m1009);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool Rtcm_Printer::Print_Rtcm_MT1010(const Glonass_Gnav_Ephemeris& glonass_gnav_eph, double obs_time, const std::map<int, Gnss_Synchro> & observables)
|
||||||
|
{
|
||||||
|
std::string m1010 = rtcm->print_MT1010(glonass_gnav_eph, obs_time, observables, station_id);
|
||||||
|
Rtcm_Printer::Print_Message(m1010);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool Rtcm_Printer::Print_Rtcm_MT1011(const Glonass_Gnav_Ephemeris& glonass_gnav_ephL1, const Glonass_Gnav_Ephemeris& glonass_gnav_ephL2, double obs_time, const std::map<int, Gnss_Synchro> & observables)
|
||||||
|
{
|
||||||
|
std::string m1011 = rtcm->print_MT1011(glonass_gnav_ephL1, glonass_gnav_ephL2, obs_time, observables, station_id);
|
||||||
|
Rtcm_Printer::Print_Message(m1011);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool Rtcm_Printer::Print_Rtcm_MT1012(const Glonass_Gnav_Ephemeris& glonass_gnav_ephL1, const Glonass_Gnav_Ephemeris& glonass_gnav_ephL2, double obs_time, const std::map<int, Gnss_Synchro> & observables)
|
||||||
|
{
|
||||||
|
std::string m1012 = rtcm->print_MT1012(glonass_gnav_ephL1, glonass_gnav_ephL2, obs_time, observables, station_id);
|
||||||
|
Rtcm_Printer::Print_Message(m1012);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
bool Rtcm_Printer::Print_Rtcm_MT1019(const Gps_Ephemeris & gps_eph)
|
bool Rtcm_Printer::Print_Rtcm_MT1019(const Gps_Ephemeris & gps_eph)
|
||||||
{
|
{
|
||||||
std::string m1019 = rtcm->print_MT1019(gps_eph);
|
std::string m1019 = rtcm->print_MT1019(gps_eph);
|
||||||
@ -194,6 +226,14 @@ bool Rtcm_Printer::Print_Rtcm_MT1019(const Gps_Ephemeris & gps_eph)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool Rtcm_Printer::Print_Rtcm_MT1020(const Glonass_Gnav_Ephemeris & glonass_gnav_eph, const Glonass_Gnav_Utc_Model & glonass_gnav_utc_model)
|
||||||
|
{
|
||||||
|
std::string m1020 = rtcm->print_MT1020(glonass_gnav_eph, glonass_gnav_utc_model);
|
||||||
|
Rtcm_Printer::Print_Message(m1020);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
bool Rtcm_Printer::Print_Rtcm_MT1045(const Galileo_Ephemeris & gal_eph)
|
bool Rtcm_Printer::Print_Rtcm_MT1045(const Galileo_Ephemeris & gal_eph)
|
||||||
{
|
{
|
||||||
std::string m1045 = rtcm->print_MT1045(gal_eph);
|
std::string m1045 = rtcm->print_MT1045(gal_eph);
|
||||||
@ -205,6 +245,7 @@ bool Rtcm_Printer::Print_Rtcm_MT1045(const Galileo_Ephemeris & gal_eph)
|
|||||||
bool Rtcm_Printer::Print_Rtcm_MSM(unsigned int msm_number, const Gps_Ephemeris & gps_eph,
|
bool Rtcm_Printer::Print_Rtcm_MSM(unsigned int msm_number, const Gps_Ephemeris & gps_eph,
|
||||||
const Gps_CNAV_Ephemeris & gps_cnav_eph,
|
const Gps_CNAV_Ephemeris & gps_cnav_eph,
|
||||||
const Galileo_Ephemeris & gal_eph,
|
const Galileo_Ephemeris & gal_eph,
|
||||||
|
const Glonass_Gnav_Ephemeris & glo_gnav_eph,
|
||||||
double obs_time,
|
double obs_time,
|
||||||
const std::map<int, Gnss_Synchro> & observables,
|
const std::map<int, Gnss_Synchro> & observables,
|
||||||
unsigned int clock_steering_indicator,
|
unsigned int clock_steering_indicator,
|
||||||
@ -216,31 +257,31 @@ bool Rtcm_Printer::Print_Rtcm_MSM(unsigned int msm_number, const Gps_Ephemeris &
|
|||||||
std::string msm;
|
std::string msm;
|
||||||
if(msm_number == 1)
|
if(msm_number == 1)
|
||||||
{
|
{
|
||||||
msm = rtcm->print_MSM_1(gps_eph, gps_cnav_eph, gal_eph, obs_time, observables, station_id, clock_steering_indicator, external_clock_indicator, smooth_int, divergence_free, more_messages);
|
msm = rtcm->print_MSM_1(gps_eph, gps_cnav_eph, gal_eph, glo_gnav_eph, obs_time, observables, station_id, clock_steering_indicator, external_clock_indicator, smooth_int, divergence_free, more_messages);
|
||||||
}
|
}
|
||||||
else if(msm_number == 2)
|
else if(msm_number == 2)
|
||||||
{
|
{
|
||||||
msm = rtcm->print_MSM_2(gps_eph, gps_cnav_eph, gal_eph, obs_time, observables, station_id, clock_steering_indicator, external_clock_indicator, smooth_int, divergence_free, more_messages);
|
msm = rtcm->print_MSM_2(gps_eph, gps_cnav_eph, gal_eph, glo_gnav_eph, obs_time, observables, station_id, clock_steering_indicator, external_clock_indicator, smooth_int, divergence_free, more_messages);
|
||||||
}
|
}
|
||||||
else if(msm_number == 3)
|
else if(msm_number == 3)
|
||||||
{
|
{
|
||||||
msm = rtcm->print_MSM_3(gps_eph, gps_cnav_eph, gal_eph, obs_time, observables, station_id, clock_steering_indicator, external_clock_indicator, smooth_int, divergence_free, more_messages);
|
msm = rtcm->print_MSM_3(gps_eph, gps_cnav_eph, gal_eph, glo_gnav_eph, obs_time, observables, station_id, clock_steering_indicator, external_clock_indicator, smooth_int, divergence_free, more_messages);
|
||||||
}
|
}
|
||||||
else if(msm_number == 4)
|
else if(msm_number == 4)
|
||||||
{
|
{
|
||||||
msm = rtcm->print_MSM_4(gps_eph, gps_cnav_eph, gal_eph, obs_time, observables, station_id, clock_steering_indicator, external_clock_indicator, smooth_int, divergence_free, more_messages);
|
msm = rtcm->print_MSM_4(gps_eph, gps_cnav_eph, gal_eph, glo_gnav_eph, obs_time, observables, station_id, clock_steering_indicator, external_clock_indicator, smooth_int, divergence_free, more_messages);
|
||||||
}
|
}
|
||||||
else if(msm_number == 5)
|
else if(msm_number == 5)
|
||||||
{
|
{
|
||||||
msm = rtcm->print_MSM_5(gps_eph, gps_cnav_eph, gal_eph, obs_time, observables, station_id, clock_steering_indicator, external_clock_indicator, smooth_int, divergence_free, more_messages);
|
msm = rtcm->print_MSM_5(gps_eph, gps_cnav_eph, gal_eph, glo_gnav_eph, obs_time, observables, station_id, clock_steering_indicator, external_clock_indicator, smooth_int, divergence_free, more_messages);
|
||||||
}
|
}
|
||||||
else if(msm_number == 6)
|
else if(msm_number == 6)
|
||||||
{
|
{
|
||||||
msm = rtcm->print_MSM_6(gps_eph, gps_cnav_eph, gal_eph, obs_time, observables, station_id, clock_steering_indicator, external_clock_indicator, smooth_int, divergence_free, more_messages);
|
msm = rtcm->print_MSM_6(gps_eph, gps_cnav_eph, gal_eph, glo_gnav_eph, obs_time, observables, station_id, clock_steering_indicator, external_clock_indicator, smooth_int, divergence_free, more_messages);
|
||||||
}
|
}
|
||||||
else if(msm_number == 7)
|
else if(msm_number == 7)
|
||||||
{
|
{
|
||||||
msm = rtcm->print_MSM_7(gps_eph, gps_cnav_eph, gal_eph, obs_time, observables, station_id, clock_steering_indicator, external_clock_indicator, smooth_int, divergence_free, more_messages);
|
msm = rtcm->print_MSM_7(gps_eph, gps_cnav_eph, gal_eph, glo_gnav_eph, obs_time, observables, station_id, clock_steering_indicator, external_clock_indicator, smooth_int, divergence_free, more_messages);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -348,3 +389,9 @@ unsigned int Rtcm_Printer::lock_time(const Galileo_Ephemeris& eph, double obs_ti
|
|||||||
{
|
{
|
||||||
return rtcm->lock_time(eph, obs_time, gnss_synchro);
|
return rtcm->lock_time(eph, obs_time, gnss_synchro);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
unsigned int Rtcm_Printer::lock_time(const Glonass_Gnav_Ephemeris& eph, double obs_time, const Gnss_Synchro & gnss_synchro)
|
||||||
|
{
|
||||||
|
return rtcm->lock_time(eph, obs_time, gnss_synchro);
|
||||||
|
}
|
||||||
|
@ -59,12 +59,66 @@ public:
|
|||||||
bool Print_Rtcm_MT1002(const Gps_Ephemeris& gps_eph, double obs_time, const std::map<int, Gnss_Synchro> & observables);
|
bool Print_Rtcm_MT1002(const Gps_Ephemeris& gps_eph, double obs_time, const std::map<int, Gnss_Synchro> & observables);
|
||||||
bool Print_Rtcm_MT1003(const Gps_Ephemeris& gps_eph, const Gps_CNAV_Ephemeris& cnav_eph, double obs_time, const std::map<int, Gnss_Synchro> & observables);
|
bool Print_Rtcm_MT1003(const Gps_Ephemeris& gps_eph, const Gps_CNAV_Ephemeris& cnav_eph, double obs_time, const std::map<int, Gnss_Synchro> & observables);
|
||||||
bool Print_Rtcm_MT1004(const Gps_Ephemeris& gps_eph, const Gps_CNAV_Ephemeris& cnav_eph, double obs_time, const std::map<int, Gnss_Synchro> & observables);
|
bool Print_Rtcm_MT1004(const Gps_Ephemeris& gps_eph, const Gps_CNAV_Ephemeris& cnav_eph, double obs_time, const std::map<int, Gnss_Synchro> & observables);
|
||||||
|
/*!
|
||||||
|
* \brief Prints L1-Only GLONASS RTK Observables
|
||||||
|
* \details This GLONASS message type is not generally used or supported; type 1012 is to be preferred.
|
||||||
|
* \note Code added as part of GSoC 2017 program
|
||||||
|
* \param glonass_gnav_eph GLONASS GNAV Broadcast Ephemeris
|
||||||
|
* \param obs_time Time of observation at the moment of printing
|
||||||
|
* \param observables Set of observables as defined by the platform
|
||||||
|
* \return true or false upon operation success
|
||||||
|
*/
|
||||||
|
bool Print_Rtcm_MT1009(const Glonass_Gnav_Ephemeris& glonass_gnav_eph, double obs_time, const std::map<int, Gnss_Synchro> & observables);
|
||||||
|
/*!
|
||||||
|
* \brief Prints Extended L1-Only GLONASS RTK Observables
|
||||||
|
* \details This GLONASS message type is used when only L1 data is present and bandwidth is very tight, often 1012 is used in such cases.
|
||||||
|
* \note Code added as part of GSoC 2017 program
|
||||||
|
* \param glonass_gnav_eph GLONASS GNAV Broadcast Ephemeris
|
||||||
|
* \param obs_time Time of observation at the moment of printing
|
||||||
|
* \param observables Set of observables as defined by the platform
|
||||||
|
* \return true or false upon operation success
|
||||||
|
*/
|
||||||
|
bool Print_Rtcm_MT1010(const Glonass_Gnav_Ephemeris& glonass_gnav_eph, double obs_time, const std::map<int, Gnss_Synchro> & observables);
|
||||||
|
/*!
|
||||||
|
* \brief Prints L1&L2 GLONASS RTK Observables
|
||||||
|
* \details This GLONASS message type is not generally used or supported; type 1012 is to be preferred
|
||||||
|
* \note Code added as part of GSoC 2017 program
|
||||||
|
* \param glonass_gnav_ephL1 GLONASS L1 GNAV Broadcast Ephemeris for satellite
|
||||||
|
* \param glonass_gnav_ephL2 GLONASS L2 GNAV Broadcast Ephemeris for satellite
|
||||||
|
* \param obs_time Time of observation at the moment of printing
|
||||||
|
* \param observables Set of observables as defined by the platform
|
||||||
|
* \return true or false upon operation success
|
||||||
|
*/
|
||||||
|
bool Print_Rtcm_MT1011(const Glonass_Gnav_Ephemeris& glonass_gnav_ephL1, const Glonass_Gnav_Ephemeris& glonass_gnav_ephL2, double obs_time, const std::map<int, Gnss_Synchro> & observables);
|
||||||
|
/*!
|
||||||
|
* \brief Prints Extended L1&L2 GLONASS RTK Observables
|
||||||
|
* \details This GLONASS message type is the most common observational message type, with L1/L2/SNR content. This is one of the most common messages found.
|
||||||
|
* \note Code added as part of GSoC 2017 program
|
||||||
|
* \param glonass_gnav_ephL1 GLONASS L1 GNAV Broadcast Ephemeris for satellite
|
||||||
|
* \param glonass_gnav_ephL2 GLONASS L2 GNAV Broadcast Ephemeris for satellite
|
||||||
|
* \param obs_time Time of observation at the moment of printing
|
||||||
|
* \param observables Set of observables as defined by the platform
|
||||||
|
* \return true or false upon operation success
|
||||||
|
*/
|
||||||
|
bool Print_Rtcm_MT1012(const Glonass_Gnav_Ephemeris& glonass_gnav_ephL1, const Glonass_Gnav_Ephemeris& glonass_gnav_ephL2, double obs_time, const std::map<int, Gnss_Synchro> & observables);
|
||||||
|
|
||||||
bool Print_Rtcm_MT1019(const Gps_Ephemeris & gps_eph); //<! GPS Ephemeris, should be broadcast in the event that the IODC does not match the IODE, and every 2 minutes.
|
bool Print_Rtcm_MT1019(const Gps_Ephemeris & gps_eph); //<! GPS Ephemeris, should be broadcast in the event that the IODC does not match the IODE, and every 2 minutes.
|
||||||
bool Print_Rtcm_MT1045(const Galileo_Ephemeris & gal_eph); //<! Galileo Ephemeris, should be broadcast every 2 minutes
|
bool Print_Rtcm_MT1045(const Galileo_Ephemeris & gal_eph); //<! Galileo Ephemeris, should be broadcast every 2 minutes
|
||||||
|
/*!
|
||||||
|
* \brief Prints GLONASS GNAV Ephemeris
|
||||||
|
* \details This GLONASS message should be broadcast every 2 minutes
|
||||||
|
* \note Code added as part of GSoC 2017 program
|
||||||
|
* \param glonass_gnav_eph GLONASS GNAV Broadcast Ephemeris
|
||||||
|
* \param utc_model GLONASS GNAV Clock Information broadcast in string 5
|
||||||
|
* \return true or false upon operation success
|
||||||
|
*/
|
||||||
|
bool Print_Rtcm_MT1020(const Glonass_Gnav_Ephemeris & glo_gnav_eph, const Glonass_Gnav_Utc_Model & utc_model);
|
||||||
|
|
||||||
bool Print_Rtcm_MSM(unsigned int msm_number, const Gps_Ephemeris & gps_eph,
|
bool Print_Rtcm_MSM(unsigned int msm_number,
|
||||||
|
const Gps_Ephemeris & gps_eph,
|
||||||
const Gps_CNAV_Ephemeris & gps_cnav_eph,
|
const Gps_CNAV_Ephemeris & gps_cnav_eph,
|
||||||
const Galileo_Ephemeris & gal_eph,
|
const Galileo_Ephemeris & gal_eph,
|
||||||
|
const Glonass_Gnav_Ephemeris & glo_gnav_eph,
|
||||||
double obs_time,
|
double obs_time,
|
||||||
const std::map<int, Gnss_Synchro> & observables,
|
const std::map<int, Gnss_Synchro> & observables,
|
||||||
unsigned int clock_steering_indicator,
|
unsigned int clock_steering_indicator,
|
||||||
@ -77,6 +131,15 @@ public:
|
|||||||
unsigned int lock_time(const Gps_Ephemeris& eph, double obs_time, const Gnss_Synchro & gnss_synchro);
|
unsigned int lock_time(const Gps_Ephemeris& eph, double obs_time, const Gnss_Synchro & gnss_synchro);
|
||||||
unsigned int lock_time(const Gps_CNAV_Ephemeris& eph, double obs_time, const Gnss_Synchro & gnss_synchro);
|
unsigned int lock_time(const Gps_CNAV_Ephemeris& eph, double obs_time, const Gnss_Synchro & gnss_synchro);
|
||||||
unsigned int lock_time(const Galileo_Ephemeris& eph, double obs_time, const Gnss_Synchro & gnss_synchro);
|
unsigned int lock_time(const Galileo_Ephemeris& eph, double obs_time, const Gnss_Synchro & gnss_synchro);
|
||||||
|
/*!
|
||||||
|
* \brief Locks time for logging given GLONASS GNAV Broadcast Ephemeris
|
||||||
|
* \note Code added as part of GSoC 2017 program
|
||||||
|
* \params glonass_gnav_eph GLONASS GNAV Broadcast Ephemeris
|
||||||
|
* \params obs_time Time of observation at the moment of printing
|
||||||
|
* \params observables Set of observables as defined by the platform
|
||||||
|
* \return locked time during logging process
|
||||||
|
*/
|
||||||
|
unsigned int lock_time(const Glonass_Gnav_Ephemeris& eph, double obs_time, const Gnss_Synchro & gnss_synchro);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::string rtcm_filename; // String with the RTCM log filename
|
std::string rtcm_filename; // String with the RTCM log filename
|
||||||
|
@ -56,6 +56,7 @@
|
|||||||
#include "rtklib_conversions.h"
|
#include "rtklib_conversions.h"
|
||||||
#include "GPS_L1_CA.h"
|
#include "GPS_L1_CA.h"
|
||||||
#include "Galileo_E1.h"
|
#include "Galileo_E1.h"
|
||||||
|
#include "GLONASS_L1_CA.h"
|
||||||
|
|
||||||
|
|
||||||
using google::LogMessage;
|
using google::LogMessage;
|
||||||
@ -114,6 +115,8 @@ bool rtklib_solver::get_PVT(const std::map<int,Gnss_Synchro> & gnss_observables_
|
|||||||
std::map<int,Galileo_Ephemeris>::const_iterator galileo_ephemeris_iter;
|
std::map<int,Galileo_Ephemeris>::const_iterator galileo_ephemeris_iter;
|
||||||
std::map<int,Gps_Ephemeris>::const_iterator gps_ephemeris_iter;
|
std::map<int,Gps_Ephemeris>::const_iterator gps_ephemeris_iter;
|
||||||
std::map<int,Gps_CNAV_Ephemeris>::const_iterator gps_cnav_ephemeris_iter;
|
std::map<int,Gps_CNAV_Ephemeris>::const_iterator gps_cnav_ephemeris_iter;
|
||||||
|
std::map<int,Glonass_Gnav_Ephemeris>::const_iterator glonass_gnav_ephemeris_iter;
|
||||||
|
const Glonass_Gnav_Utc_Model gnav_utc = this->glonass_gnav_utc_model;
|
||||||
|
|
||||||
this->set_averaging_flag(flag_averaging);
|
this->set_averaging_flag(flag_averaging);
|
||||||
|
|
||||||
@ -121,9 +124,11 @@ bool rtklib_solver::get_PVT(const std::map<int,Gnss_Synchro> & gnss_observables_
|
|||||||
// ****** PREPARE THE DATA (SV EPHEMERIS AND OBSERVATIONS) ************************
|
// ****** PREPARE THE DATA (SV EPHEMERIS AND OBSERVATIONS) ************************
|
||||||
// ********************************************************************************
|
// ********************************************************************************
|
||||||
int valid_obs = 0; //valid observations counter
|
int valid_obs = 0; //valid observations counter
|
||||||
|
int glo_valid_obs = 0; //GLONASS L1/L2 valid observations counter
|
||||||
|
|
||||||
obsd_t obs_data[MAXOBS];
|
obsd_t obs_data[MAXOBS];
|
||||||
eph_t eph_data[MAXOBS];
|
eph_t eph_data[MAXOBS];
|
||||||
|
geph_t geph_data[MAXOBS];
|
||||||
|
|
||||||
for(gnss_observables_iter = gnss_observables_map.cbegin();
|
for(gnss_observables_iter = gnss_observables_map.cbegin();
|
||||||
gnss_observables_iter != gnss_observables_map.cend();
|
gnss_observables_iter != gnss_observables_map.cend();
|
||||||
@ -145,7 +150,7 @@ bool rtklib_solver::get_PVT(const std::map<int,Gnss_Synchro> & gnss_observables_
|
|||||||
eph_data[valid_obs] = eph_to_rtklib(galileo_ephemeris_iter->second);
|
eph_data[valid_obs] = eph_to_rtklib(galileo_ephemeris_iter->second);
|
||||||
//convert observation from GNSS-SDR class to RTKLIB structure
|
//convert observation from GNSS-SDR class to RTKLIB structure
|
||||||
obsd_t newobs = {{0,0}, '0', '0', {}, {}, {}, {}, {}, {}};
|
obsd_t newobs = {{0,0}, '0', '0', {}, {}, {}, {}, {}, {}};
|
||||||
obs_data[valid_obs] = insert_obs_to_rtklib(newobs,
|
obs_data[valid_obs+glo_valid_obs] = insert_obs_to_rtklib(newobs,
|
||||||
gnss_observables_iter->second,
|
gnss_observables_iter->second,
|
||||||
galileo_ephemeris_iter->second.WN_5,
|
galileo_ephemeris_iter->second.WN_5,
|
||||||
0);
|
0);
|
||||||
@ -155,26 +160,25 @@ bool rtklib_solver::get_PVT(const std::map<int,Gnss_Synchro> & gnss_observables_
|
|||||||
{
|
{
|
||||||
DLOG(INFO) << "No ephemeris data for SV " << gnss_observables_iter->second.PRN;
|
DLOG(INFO) << "No ephemeris data for SV " << gnss_observables_iter->second.PRN;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
// Galileo E5
|
|
||||||
if(sig_.compare("5X") == 0)
|
|
||||||
{
|
|
||||||
|
|
||||||
|
// Galileo E5
|
||||||
|
if(sig_.compare("5X") == 0)
|
||||||
|
{
|
||||||
// 1 Gal - find the ephemeris for the current GALILEO SV observation. The SV PRN ID is the map key
|
// 1 Gal - find the ephemeris for the current GALILEO SV observation. The SV PRN ID is the map key
|
||||||
galileo_ephemeris_iter = galileo_ephemeris_map.find(gnss_observables_iter->second.PRN);
|
galileo_ephemeris_iter = galileo_ephemeris_map.find(gnss_observables_iter->second.PRN);
|
||||||
if (galileo_ephemeris_iter != galileo_ephemeris_map.cend())
|
if (galileo_ephemeris_iter != galileo_ephemeris_map.cend())
|
||||||
{
|
{
|
||||||
bool found_E1_obs=false;
|
bool found_E1_obs = false;
|
||||||
for (int i = 0; i < valid_obs; i++)
|
for (int i = 0; i < valid_obs; i++)
|
||||||
{
|
{
|
||||||
if (eph_data[i].sat == (static_cast<int>(gnss_observables_iter->second.PRN + NSATGPS + NSATGLO)))
|
if (eph_data[i].sat == (static_cast<int>(gnss_observables_iter->second.PRN + NSATGPS + NSATGLO)))
|
||||||
{
|
{
|
||||||
obs_data[i] = insert_obs_to_rtklib(obs_data[i],
|
obs_data[i + glo_valid_obs] = insert_obs_to_rtklib(obs_data[i + glo_valid_obs],
|
||||||
gnss_observables_iter->second,
|
gnss_observables_iter->second,
|
||||||
galileo_ephemeris_iter->second.WN_5,
|
galileo_ephemeris_iter->second.WN_5,
|
||||||
2);//Band 3 (L5/E5)
|
2);//Band 3 (L5/E5)
|
||||||
found_E1_obs=true;
|
found_E1_obs = true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -188,7 +192,7 @@ bool rtklib_solver::get_PVT(const std::map<int,Gnss_Synchro> & gnss_observables_
|
|||||||
obsd_t newobs = {{0,0}, '0', '0', {}, {},
|
obsd_t newobs = {{0,0}, '0', '0', {}, {},
|
||||||
{default_code_, default_code_, default_code_},
|
{default_code_, default_code_, default_code_},
|
||||||
{}, {0.0, 0.0, 0.0}, {}};
|
{}, {0.0, 0.0, 0.0}, {}};
|
||||||
obs_data[valid_obs] = insert_obs_to_rtklib(newobs,
|
obs_data[valid_obs+glo_valid_obs] = insert_obs_to_rtklib(newobs,
|
||||||
gnss_observables_iter->second,
|
gnss_observables_iter->second,
|
||||||
galileo_ephemeris_iter->second.WN_5,
|
galileo_ephemeris_iter->second.WN_5,
|
||||||
2); //Band 3 (L5/E5)
|
2); //Band 3 (L5/E5)
|
||||||
@ -216,7 +220,7 @@ bool rtklib_solver::get_PVT(const std::map<int,Gnss_Synchro> & gnss_observables_
|
|||||||
eph_data[valid_obs] = eph_to_rtklib(gps_ephemeris_iter->second);
|
eph_data[valid_obs] = eph_to_rtklib(gps_ephemeris_iter->second);
|
||||||
//convert observation from GNSS-SDR class to RTKLIB structure
|
//convert observation from GNSS-SDR class to RTKLIB structure
|
||||||
obsd_t newobs = {{0,0}, '0', '0', {}, {}, {}, {}, {}, {}};
|
obsd_t newobs = {{0,0}, '0', '0', {}, {}, {}, {}, {}, {}};
|
||||||
obs_data[valid_obs] = insert_obs_to_rtklib(newobs,
|
obs_data[valid_obs+glo_valid_obs] = insert_obs_to_rtklib(newobs,
|
||||||
gnss_observables_iter->second,
|
gnss_observables_iter->second,
|
||||||
gps_ephemeris_iter->second.i_GPS_week,
|
gps_ephemeris_iter->second.i_GPS_week,
|
||||||
0);
|
0);
|
||||||
@ -244,7 +248,7 @@ bool rtklib_solver::get_PVT(const std::map<int,Gnss_Synchro> & gnss_observables_
|
|||||||
if (eph_data[i].sat == static_cast<int>(gnss_observables_iter->second.PRN))
|
if (eph_data[i].sat == static_cast<int>(gnss_observables_iter->second.PRN))
|
||||||
{
|
{
|
||||||
eph_data[i] = eph_to_rtklib(gps_cnav_ephemeris_iter->second);
|
eph_data[i] = eph_to_rtklib(gps_cnav_ephemeris_iter->second);
|
||||||
obs_data[i] = insert_obs_to_rtklib(obs_data[i],
|
obs_data[i+glo_valid_obs] = insert_obs_to_rtklib(obs_data[i+glo_valid_obs],
|
||||||
gnss_observables_iter->second,
|
gnss_observables_iter->second,
|
||||||
gps_cnav_ephemeris_iter->second.i_GPS_week,
|
gps_cnav_ephemeris_iter->second.i_GPS_week,
|
||||||
1);//Band 2 (L2)
|
1);//Band 2 (L2)
|
||||||
@ -262,7 +266,7 @@ bool rtklib_solver::get_PVT(const std::map<int,Gnss_Synchro> & gnss_observables_
|
|||||||
obsd_t newobs = {{0,0}, '0', '0', {}, {},
|
obsd_t newobs = {{0,0}, '0', '0', {}, {},
|
||||||
{default_code_, default_code_, default_code_},
|
{default_code_, default_code_, default_code_},
|
||||||
{}, {0.0, 0.0, 0.0}, {}};
|
{}, {0.0, 0.0, 0.0}, {}};
|
||||||
obs_data[valid_obs] = insert_obs_to_rtklib(newobs,
|
obs_data[valid_obs + glo_valid_obs] = insert_obs_to_rtklib(newobs,
|
||||||
gnss_observables_iter->second,
|
gnss_observables_iter->second,
|
||||||
gps_cnav_ephemeris_iter->second.i_GPS_week,
|
gps_cnav_ephemeris_iter->second.i_GPS_week,
|
||||||
1);//Band 2 (L2)
|
1);//Band 2 (L2)
|
||||||
@ -291,7 +295,7 @@ bool rtklib_solver::get_PVT(const std::map<int,Gnss_Synchro> & gnss_observables_
|
|||||||
if (eph_data[i].sat == static_cast<int>(gnss_observables_iter->second.PRN))
|
if (eph_data[i].sat == static_cast<int>(gnss_observables_iter->second.PRN))
|
||||||
{
|
{
|
||||||
eph_data[i] = eph_to_rtklib(gps_cnav_ephemeris_iter->second);
|
eph_data[i] = eph_to_rtklib(gps_cnav_ephemeris_iter->second);
|
||||||
obs_data[i] = insert_obs_to_rtklib(obs_data[i],
|
obs_data[i+glo_valid_obs] = insert_obs_to_rtklib(obs_data[i],
|
||||||
gnss_observables_iter->second,
|
gnss_observables_iter->second,
|
||||||
gps_cnav_ephemeris_iter->second.i_GPS_week,
|
gps_cnav_ephemeris_iter->second.i_GPS_week,
|
||||||
2);//Band 3 (L5)
|
2);//Band 3 (L5)
|
||||||
@ -309,7 +313,7 @@ bool rtklib_solver::get_PVT(const std::map<int,Gnss_Synchro> & gnss_observables_
|
|||||||
obsd_t newobs = {{0,0}, '0', '0', {}, {},
|
obsd_t newobs = {{0,0}, '0', '0', {}, {},
|
||||||
{default_code_, default_code_, default_code_},
|
{default_code_, default_code_, default_code_},
|
||||||
{}, {0.0, 0.0, 0.0}, {}};
|
{}, {0.0, 0.0, 0.0}, {}};
|
||||||
obs_data[valid_obs] = insert_obs_to_rtklib(newobs,
|
obs_data[valid_obs+glo_valid_obs] = insert_obs_to_rtklib(newobs,
|
||||||
gnss_observables_iter->second,
|
gnss_observables_iter->second,
|
||||||
gps_cnav_ephemeris_iter->second.i_GPS_week,
|
gps_cnav_ephemeris_iter->second.i_GPS_week,
|
||||||
2);//Band 3 (L5)
|
2);//Band 3 (L5)
|
||||||
@ -320,6 +324,75 @@ bool rtklib_solver::get_PVT(const std::map<int,Gnss_Synchro> & gnss_observables_
|
|||||||
{
|
{
|
||||||
DLOG(INFO) << "No ephemeris data for SV " << gnss_observables_iter->second.PRN;
|
DLOG(INFO) << "No ephemeris data for SV " << gnss_observables_iter->second.PRN;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 'R': //TODO This should be using rtk lib nomenclature
|
||||||
|
{
|
||||||
|
std::string sig_(gnss_observables_iter->second.Signal);
|
||||||
|
// GLONASS GNAV L1
|
||||||
|
if(sig_.compare("1G") == 0)
|
||||||
|
{
|
||||||
|
// 1 Glo - find the ephemeris for the current GLONASS SV observation. The SV Slot Number (PRN ID) is the map key
|
||||||
|
glonass_gnav_ephemeris_iter = glonass_gnav_ephemeris_map.find(gnss_observables_iter->second.PRN);
|
||||||
|
if (glonass_gnav_ephemeris_iter != glonass_gnav_ephemeris_map.cend())
|
||||||
|
{
|
||||||
|
//convert ephemeris from GNSS-SDR class to RTKLIB structure
|
||||||
|
geph_data[glo_valid_obs] = eph_to_rtklib(glonass_gnav_ephemeris_iter->second, gnav_utc);
|
||||||
|
//convert observation from GNSS-SDR class to RTKLIB structure
|
||||||
|
obsd_t newobs = {{0,0}, '0', '0', {}, {}, {}, {}, {}, {}};
|
||||||
|
obs_data[valid_obs+glo_valid_obs] = insert_obs_to_rtklib(newobs,
|
||||||
|
gnss_observables_iter->second,
|
||||||
|
glonass_gnav_ephemeris_iter->second.d_WN,
|
||||||
|
0);//Band 0 (L1)
|
||||||
|
glo_valid_obs++;
|
||||||
|
}
|
||||||
|
else // the ephemeris are not available for this SV
|
||||||
|
{
|
||||||
|
DLOG(INFO) << "No ephemeris data for SV " << gnss_observables_iter->second.PRN;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
// GLONASS GNAV L2
|
||||||
|
if(sig_.compare("2G") == 0)
|
||||||
|
{
|
||||||
|
// 1 GLONASS - find the ephemeris for the current GLONASS SV observation. The SV PRN ID is the map key
|
||||||
|
glonass_gnav_ephemeris_iter = glonass_gnav_ephemeris_map.find(gnss_observables_iter->second.PRN);
|
||||||
|
if (glonass_gnav_ephemeris_iter != glonass_gnav_ephemeris_map.cend())
|
||||||
|
{
|
||||||
|
bool found_L1_obs = false;
|
||||||
|
for (int i = 0; i < glo_valid_obs; i++)
|
||||||
|
{
|
||||||
|
if (geph_data[i].sat == (static_cast<int>(gnss_observables_iter->second.PRN+NSATGPS)))
|
||||||
|
{
|
||||||
|
obs_data[i+valid_obs] = insert_obs_to_rtklib(obs_data[i+valid_obs],
|
||||||
|
gnss_observables_iter->second,
|
||||||
|
glonass_gnav_ephemeris_iter->second.d_WN,
|
||||||
|
1);//Band 1 (L2)
|
||||||
|
found_L1_obs = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!found_L1_obs)
|
||||||
|
{
|
||||||
|
//insert GLONASS GNAV L2 obs as new obs and also insert its ephemeris
|
||||||
|
//convert ephemeris from GNSS-SDR class to RTKLIB structure
|
||||||
|
geph_data[glo_valid_obs] = eph_to_rtklib(glonass_gnav_ephemeris_iter->second, gnav_utc);
|
||||||
|
//convert observation from GNSS-SDR class to RTKLIB structure
|
||||||
|
obsd_t newobs = {{0,0}, '0', '0', {}, {}, {}, {}, {}, {}};
|
||||||
|
obs_data[valid_obs+glo_valid_obs] = insert_obs_to_rtklib(newobs,
|
||||||
|
gnss_observables_iter->second,
|
||||||
|
glonass_gnav_ephemeris_iter->second.d_WN,
|
||||||
|
1); //Band 1 (L2)
|
||||||
|
glo_valid_obs++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else // the ephemeris are not available for this SV
|
||||||
|
{
|
||||||
|
DLOG(INFO) << "No ephemeris data for SV " << gnss_observables_iter->second.PRN;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -334,19 +407,24 @@ bool rtklib_solver::get_PVT(const std::map<int,Gnss_Synchro> & gnss_observables_
|
|||||||
// **********************************************************************
|
// **********************************************************************
|
||||||
|
|
||||||
this->set_valid_position(false);
|
this->set_valid_position(false);
|
||||||
if (valid_obs > 0)
|
if (valid_obs > 0 || glo_valid_obs > 0)
|
||||||
{
|
{
|
||||||
int result = 0;
|
int result = 0;
|
||||||
nav_t nav_data;
|
nav_t nav_data;
|
||||||
nav_data.eph = eph_data;
|
nav_data.eph = eph_data;
|
||||||
|
nav_data.geph = geph_data;
|
||||||
nav_data.n = valid_obs;
|
nav_data.n = valid_obs;
|
||||||
|
nav_data.ng = glo_valid_obs;
|
||||||
|
|
||||||
for (int i = 0; i < MAXSAT; i++)
|
for (int i = 0; i < MAXSAT; i++)
|
||||||
{
|
{
|
||||||
nav_data.lam[i][0] = SPEED_OF_LIGHT / FREQ1; /* L1/E1 */
|
nav_data.lam[i][0] = SPEED_OF_LIGHT / FREQ1; /* L1/E1 */
|
||||||
nav_data.lam[i][1] = SPEED_OF_LIGHT / FREQ2; /* L2 */
|
nav_data.lam[i][1] = SPEED_OF_LIGHT / FREQ2; /* L2 */
|
||||||
nav_data.lam[i][2] = SPEED_OF_LIGHT / FREQ5; /* L5/E5 */
|
nav_data.lam[i][2] = SPEED_OF_LIGHT / FREQ5; /* L5/E5 */
|
||||||
}
|
}
|
||||||
result = rtkpos(&rtk_, obs_data, valid_obs, &nav_data);
|
|
||||||
|
result = rtkpos(&rtk_, obs_data, valid_obs + glo_valid_obs, &nav_data);
|
||||||
|
|
||||||
if(result == 0)
|
if(result == 0)
|
||||||
{
|
{
|
||||||
DLOG(INFO) << "RTKLIB rtkpos error message: " << rtk_.errbuf;
|
DLOG(INFO) << "RTKLIB rtkpos error message: " << rtk_.errbuf;
|
||||||
@ -416,7 +494,7 @@ bool rtklib_solver::get_PVT(const std::map<int,Gnss_Synchro> & gnss_observables_
|
|||||||
LOG(WARNING) << "Exception writing PVT LS dump file " << e.what();
|
LOG(WARNING) << "Exception writing PVT LS dump file " << e.what();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return this->is_valid_position();
|
return this->is_valid_position();
|
||||||
}
|
}
|
||||||
|
@ -62,6 +62,7 @@
|
|||||||
#include "galileo_navigation_message.h"
|
#include "galileo_navigation_message.h"
|
||||||
#include "gps_navigation_message.h"
|
#include "gps_navigation_message.h"
|
||||||
#include "gps_cnav_navigation_message.h"
|
#include "gps_cnav_navigation_message.h"
|
||||||
|
#include "glonass_gnav_navigation_message.h"
|
||||||
#include "gnss_synchro.h"
|
#include "gnss_synchro.h"
|
||||||
#include "pvt_solution.h"
|
#include "pvt_solution.h"
|
||||||
|
|
||||||
@ -86,6 +87,7 @@ public:
|
|||||||
std::map<int,Galileo_Ephemeris> galileo_ephemeris_map; //!< Map storing new Galileo_Ephemeris
|
std::map<int,Galileo_Ephemeris> galileo_ephemeris_map; //!< Map storing new Galileo_Ephemeris
|
||||||
std::map<int,Gps_Ephemeris> gps_ephemeris_map; //!< Map storing new GPS_Ephemeris
|
std::map<int,Gps_Ephemeris> gps_ephemeris_map; //!< Map storing new GPS_Ephemeris
|
||||||
std::map<int,Gps_CNAV_Ephemeris> gps_cnav_ephemeris_map; //!< Map storing new GPS_CNAV_Ephemeris
|
std::map<int,Gps_CNAV_Ephemeris> gps_cnav_ephemeris_map; //!< Map storing new GPS_CNAV_Ephemeris
|
||||||
|
std::map<int,Glonass_Gnav_Ephemeris> glonass_gnav_ephemeris_map; //!< Map storing new GLONASS GNAV Ephmeris
|
||||||
|
|
||||||
Galileo_Utc_Model galileo_utc_model;
|
Galileo_Utc_Model galileo_utc_model;
|
||||||
Galileo_Iono galileo_iono;
|
Galileo_Iono galileo_iono;
|
||||||
@ -97,6 +99,9 @@ public:
|
|||||||
Gps_CNAV_Iono gps_cnav_iono;
|
Gps_CNAV_Iono gps_cnav_iono;
|
||||||
Gps_CNAV_Utc_Model gps_cnav_utc_model;
|
Gps_CNAV_Utc_Model gps_cnav_utc_model;
|
||||||
|
|
||||||
|
Glonass_Gnav_Utc_Model glonass_gnav_utc_model; //!< Map storing GLONASS GNAV UTC Model
|
||||||
|
Glonass_Gnav_Almanac glonass_gnav_almanac; //!< Map storing GLONASS GNAV Almanac Model
|
||||||
|
|
||||||
int count_valid_position;
|
int count_valid_position;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -31,6 +31,7 @@ set(ACQ_ADAPTER_SOURCES
|
|||||||
galileo_e1_pcps_tong_ambiguous_acquisition.cc
|
galileo_e1_pcps_tong_ambiguous_acquisition.cc
|
||||||
galileo_e1_pcps_8ms_ambiguous_acquisition.cc
|
galileo_e1_pcps_8ms_ambiguous_acquisition.cc
|
||||||
galileo_e5a_noncoherent_iq_acquisition_caf.cc
|
galileo_e5a_noncoherent_iq_acquisition_caf.cc
|
||||||
|
glonass_l1_ca_pcps_acquisition.cc
|
||||||
)
|
)
|
||||||
|
|
||||||
if(ENABLE_FPGA)
|
if(ENABLE_FPGA)
|
||||||
|
@ -0,0 +1,395 @@
|
|||||||
|
/*!
|
||||||
|
* \file glonass_l1_ca_pcps_acquisition.cc
|
||||||
|
* \brief Adapts a PCPS acquisition block to an AcquisitionInterface for
|
||||||
|
* Glonass L1 C/A signals
|
||||||
|
* \author Gabriel Araujo, 2017. gabriel.araujo.5000(at)gmail.com
|
||||||
|
* \author Luis Esteve, 2017. luis(at)epsilon-formacion.com
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* -------------------------------------------------------------------------
|
||||||
|
*
|
||||||
|
* Copyright (C) 2010-2017 (see AUTHORS file for a list of contributors)
|
||||||
|
*
|
||||||
|
* GNSS-SDR is a software defined Global Navigation
|
||||||
|
* Satellite Systems receiver
|
||||||
|
*
|
||||||
|
* This file is part of GNSS-SDR.
|
||||||
|
*
|
||||||
|
* GNSS-SDR is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* GNSS-SDR is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with GNSS-SDR. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*
|
||||||
|
* -------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "glonass_l1_ca_pcps_acquisition.h"
|
||||||
|
#include <boost/math/distributions/exponential.hpp>
|
||||||
|
#include <glog/logging.h>
|
||||||
|
#include "glonass_l1_signal_processing.h"
|
||||||
|
#include "GLONASS_L1_CA.h"
|
||||||
|
#include "configuration_interface.h"
|
||||||
|
|
||||||
|
|
||||||
|
using google::LogMessage;
|
||||||
|
|
||||||
|
GlonassL1CaPcpsAcquisition::GlonassL1CaPcpsAcquisition(
|
||||||
|
ConfigurationInterface* configuration, std::string role,
|
||||||
|
unsigned int in_streams, unsigned int out_streams) :
|
||||||
|
role_(role), in_streams_(in_streams), out_streams_(out_streams)
|
||||||
|
{
|
||||||
|
configuration_ = configuration;
|
||||||
|
std::string default_item_type = "gr_complex";
|
||||||
|
std::string default_dump_filename = "./data/acquisition.dat";
|
||||||
|
|
||||||
|
DLOG(INFO) << "role " << role;
|
||||||
|
|
||||||
|
item_type_ = configuration_->property(role + ".item_type", default_item_type);
|
||||||
|
|
||||||
|
long fs_in_deprecated = configuration_->property("GNSS-SDR.internal_fs_hz", 2048000);
|
||||||
|
fs_in_ = configuration_->property("GNSS-SDR.internal_fs_sps", fs_in_deprecated);
|
||||||
|
if_ = configuration_->property(role + ".if", 0);
|
||||||
|
dump_ = configuration_->property(role + ".dump", false);
|
||||||
|
blocking_ = configuration_->property(role + ".blocking", true);
|
||||||
|
doppler_max_ = configuration_->property(role + ".doppler_max", 5000);
|
||||||
|
sampled_ms_ = configuration_->property(role + ".coherent_integration_time_ms", 1);
|
||||||
|
|
||||||
|
bit_transition_flag_ = configuration_->property(role + ".bit_transition_flag", false);
|
||||||
|
use_CFAR_algorithm_flag_=configuration_->property(role + ".use_CFAR_algorithm", true); //will be false in future versions
|
||||||
|
|
||||||
|
max_dwells_ = configuration_->property(role + ".max_dwells", 1);
|
||||||
|
|
||||||
|
dump_filename_ = configuration_->property(role + ".dump_filename", default_dump_filename);
|
||||||
|
|
||||||
|
//--- Find number of samples per spreading code -------------------------
|
||||||
|
code_length_ = round(fs_in_ / (GLONASS_L1_CA_CODE_RATE_HZ / GLONASS_L1_CA_CODE_LENGTH_CHIPS));
|
||||||
|
|
||||||
|
vector_length_ = code_length_ * sampled_ms_;
|
||||||
|
|
||||||
|
if( bit_transition_flag_ )
|
||||||
|
{
|
||||||
|
vector_length_ *= 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
code_ = new gr_complex[vector_length_];
|
||||||
|
|
||||||
|
if (item_type_.compare("cshort") == 0 )
|
||||||
|
{
|
||||||
|
item_size_ = sizeof(lv_16sc_t);
|
||||||
|
acquisition_sc_ = pcps_make_acquisition_sc(sampled_ms_, max_dwells_,
|
||||||
|
doppler_max_, if_, fs_in_, code_length_, code_length_,
|
||||||
|
bit_transition_flag_, use_CFAR_algorithm_flag_, dump_, blocking_, dump_filename_);
|
||||||
|
DLOG(INFO) << "acquisition(" << acquisition_sc_->unique_id() << ")";
|
||||||
|
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
item_size_ = sizeof(gr_complex);
|
||||||
|
acquisition_cc_ = pcps_make_acquisition_cc(sampled_ms_, max_dwells_,
|
||||||
|
doppler_max_, if_, fs_in_, code_length_, code_length_,
|
||||||
|
bit_transition_flag_, use_CFAR_algorithm_flag_, dump_, blocking_, dump_filename_);
|
||||||
|
DLOG(INFO) << "acquisition(" << acquisition_cc_->unique_id() << ")";
|
||||||
|
}
|
||||||
|
|
||||||
|
stream_to_vector_ = gr::blocks::stream_to_vector::make(item_size_, vector_length_);
|
||||||
|
DLOG(INFO) << "stream_to_vector(" << stream_to_vector_->unique_id() << ")";
|
||||||
|
|
||||||
|
if (item_type_.compare("cbyte") == 0)
|
||||||
|
{
|
||||||
|
cbyte_to_float_x2_ = make_complex_byte_to_float_x2();
|
||||||
|
float_to_complex_ = gr::blocks::float_to_complex::make();
|
||||||
|
}
|
||||||
|
|
||||||
|
channel_ = 0;
|
||||||
|
threshold_ = 0.0;
|
||||||
|
doppler_step_ = 0;
|
||||||
|
gnss_synchro_ = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
GlonassL1CaPcpsAcquisition::~GlonassL1CaPcpsAcquisition()
|
||||||
|
{
|
||||||
|
delete[] code_;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void GlonassL1CaPcpsAcquisition::set_channel(unsigned int channel)
|
||||||
|
{
|
||||||
|
channel_ = channel;
|
||||||
|
if (item_type_.compare("cshort") == 0)
|
||||||
|
{
|
||||||
|
acquisition_sc_->set_channel(channel_);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
acquisition_cc_->set_channel(channel_);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void GlonassL1CaPcpsAcquisition::set_threshold(float threshold)
|
||||||
|
{
|
||||||
|
float pfa = configuration_->property(role_ + ".pfa", 0.0);
|
||||||
|
|
||||||
|
if(pfa == 0.0)
|
||||||
|
{
|
||||||
|
threshold_ = threshold;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
threshold_ = calculate_threshold(pfa);
|
||||||
|
}
|
||||||
|
|
||||||
|
DLOG(INFO) << "Channel " << channel_ << " Threshold = " << threshold_;
|
||||||
|
|
||||||
|
if (item_type_.compare("cshort") == 0)
|
||||||
|
{
|
||||||
|
acquisition_sc_->set_threshold(threshold_);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
acquisition_cc_->set_threshold(threshold_);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void GlonassL1CaPcpsAcquisition::set_doppler_max(unsigned int doppler_max)
|
||||||
|
{
|
||||||
|
doppler_max_ = doppler_max;
|
||||||
|
|
||||||
|
if (item_type_.compare("cshort") == 0)
|
||||||
|
{
|
||||||
|
acquisition_sc_->set_doppler_max(doppler_max_);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
acquisition_cc_->set_doppler_max(doppler_max_);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void GlonassL1CaPcpsAcquisition::set_doppler_step(unsigned int doppler_step)
|
||||||
|
{
|
||||||
|
doppler_step_ = doppler_step;
|
||||||
|
|
||||||
|
if (item_type_.compare("cshort") == 0)
|
||||||
|
{
|
||||||
|
acquisition_sc_->set_doppler_step(doppler_step_);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
acquisition_cc_->set_doppler_step(doppler_step_);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void GlonassL1CaPcpsAcquisition::set_gnss_synchro(Gnss_Synchro* gnss_synchro)
|
||||||
|
{
|
||||||
|
gnss_synchro_ = gnss_synchro;
|
||||||
|
|
||||||
|
if (item_type_.compare("cshort") == 0)
|
||||||
|
{
|
||||||
|
acquisition_sc_->set_gnss_synchro(gnss_synchro_);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
acquisition_cc_->set_gnss_synchro(gnss_synchro_);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
signed int GlonassL1CaPcpsAcquisition::mag()
|
||||||
|
{
|
||||||
|
if (item_type_.compare("cshort") == 0)
|
||||||
|
{
|
||||||
|
return acquisition_sc_->mag();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return acquisition_cc_->mag();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void GlonassL1CaPcpsAcquisition::init()
|
||||||
|
{
|
||||||
|
if (item_type_.compare("cshort") == 0)
|
||||||
|
{
|
||||||
|
acquisition_sc_->init();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
acquisition_cc_->init();
|
||||||
|
}
|
||||||
|
|
||||||
|
set_local_code();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void GlonassL1CaPcpsAcquisition::set_local_code()
|
||||||
|
{
|
||||||
|
std::complex<float>* code = new std::complex<float>[code_length_];
|
||||||
|
|
||||||
|
glonass_l1_ca_code_gen_complex_sampled(code,/* gnss_synchro_->PRN,*/ fs_in_, 0);
|
||||||
|
|
||||||
|
for (unsigned int i = 0; i < sampled_ms_; i++)
|
||||||
|
{
|
||||||
|
memcpy(&(code_[i*code_length_]), code,
|
||||||
|
sizeof(gr_complex)*code_length_);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (item_type_.compare("cshort") == 0)
|
||||||
|
{
|
||||||
|
acquisition_sc_->set_local_code(code_);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
acquisition_cc_->set_local_code(code_);
|
||||||
|
}
|
||||||
|
|
||||||
|
delete[] code;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void GlonassL1CaPcpsAcquisition::reset()
|
||||||
|
{
|
||||||
|
if (item_type_.compare("cshort") == 0)
|
||||||
|
{
|
||||||
|
acquisition_sc_->set_active(true);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
acquisition_cc_->set_active(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void GlonassL1CaPcpsAcquisition::set_state(int state)
|
||||||
|
{
|
||||||
|
if (item_type_.compare("cshort") == 0)
|
||||||
|
{
|
||||||
|
acquisition_sc_->set_state(state);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
acquisition_cc_->set_state(state);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
float GlonassL1CaPcpsAcquisition::calculate_threshold(float pfa)
|
||||||
|
{
|
||||||
|
//Calculate the threshold
|
||||||
|
unsigned int frequency_bins = 0;
|
||||||
|
/*
|
||||||
|
for (int doppler = (int)(-doppler_max_); doppler <= (int)doppler_max_; doppler += doppler_step_)
|
||||||
|
{
|
||||||
|
frequency_bins++;
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
frequency_bins = (2*doppler_max_ + doppler_step_)/doppler_step_;
|
||||||
|
|
||||||
|
DLOG(INFO) << "Channel " << channel_ << " Pfa = " << pfa;
|
||||||
|
unsigned int ncells = vector_length_ * frequency_bins;
|
||||||
|
double exponent = 1 / static_cast<double>(ncells);
|
||||||
|
double val = pow(1.0 - pfa, exponent);
|
||||||
|
double lambda = static_cast<double>(vector_length_);
|
||||||
|
boost::math::exponential_distribution<double> mydist (lambda);
|
||||||
|
float threshold = static_cast<float>(quantile(mydist,val));
|
||||||
|
|
||||||
|
return threshold;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void GlonassL1CaPcpsAcquisition::connect(gr::top_block_sptr top_block)
|
||||||
|
{
|
||||||
|
if (item_type_.compare("gr_complex") == 0)
|
||||||
|
{
|
||||||
|
top_block->connect(stream_to_vector_, 0, acquisition_cc_, 0);
|
||||||
|
}
|
||||||
|
else if (item_type_.compare("cshort") == 0)
|
||||||
|
{
|
||||||
|
top_block->connect(stream_to_vector_, 0, acquisition_sc_, 0);
|
||||||
|
}
|
||||||
|
else if (item_type_.compare("cbyte") == 0)
|
||||||
|
{
|
||||||
|
top_block->connect(cbyte_to_float_x2_, 0, float_to_complex_, 0);
|
||||||
|
top_block->connect(cbyte_to_float_x2_, 1, float_to_complex_, 1);
|
||||||
|
top_block->connect(float_to_complex_, 0, stream_to_vector_, 0);
|
||||||
|
top_block->connect(stream_to_vector_, 0, acquisition_cc_, 0);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
LOG(WARNING) << item_type_ << " unknown acquisition item type";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void GlonassL1CaPcpsAcquisition::disconnect(gr::top_block_sptr top_block)
|
||||||
|
{
|
||||||
|
if (item_type_.compare("gr_complex") == 0)
|
||||||
|
{
|
||||||
|
top_block->disconnect(stream_to_vector_, 0, acquisition_cc_, 0);
|
||||||
|
}
|
||||||
|
else if (item_type_.compare("cshort") == 0)
|
||||||
|
{
|
||||||
|
top_block->disconnect(stream_to_vector_, 0, acquisition_sc_, 0);
|
||||||
|
}
|
||||||
|
else if (item_type_.compare("cbyte") == 0)
|
||||||
|
{
|
||||||
|
// Since a byte-based acq implementation is not available,
|
||||||
|
// we just convert cshorts to gr_complex
|
||||||
|
top_block->disconnect(cbyte_to_float_x2_, 0, float_to_complex_, 0);
|
||||||
|
top_block->disconnect(cbyte_to_float_x2_, 1, float_to_complex_, 1);
|
||||||
|
top_block->disconnect(float_to_complex_, 0, stream_to_vector_, 0);
|
||||||
|
top_block->disconnect(stream_to_vector_, 0, acquisition_cc_, 0);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
LOG(WARNING) << item_type_ << " unknown acquisition item type";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
gr::basic_block_sptr GlonassL1CaPcpsAcquisition::get_left_block()
|
||||||
|
{
|
||||||
|
if (item_type_.compare("gr_complex") == 0)
|
||||||
|
{
|
||||||
|
return stream_to_vector_;
|
||||||
|
}
|
||||||
|
else if (item_type_.compare("cshort") == 0)
|
||||||
|
{
|
||||||
|
return stream_to_vector_;
|
||||||
|
}
|
||||||
|
else if (item_type_.compare("cbyte") == 0)
|
||||||
|
{
|
||||||
|
return cbyte_to_float_x2_;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
LOG(WARNING) << item_type_ << " unknown acquisition item type";
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
gr::basic_block_sptr GlonassL1CaPcpsAcquisition::get_right_block()
|
||||||
|
{
|
||||||
|
if (item_type_.compare("cshort") == 0)
|
||||||
|
{
|
||||||
|
return acquisition_sc_;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return acquisition_cc_;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,170 @@
|
|||||||
|
/*!
|
||||||
|
* \file glonass_l1_ca_pcps_acquisition.h
|
||||||
|
* \brief Adapts a PCPS acquisition block to an AcquisitionInterface for
|
||||||
|
* Glonass L1 C/A signals
|
||||||
|
* \author Gabriel Araujo, 2017. gabriel.araujo.5000(at)gmail.com
|
||||||
|
* \author Luis Esteve, 2017. luis(at)epsilon-formacion.com
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* -------------------------------------------------------------------------
|
||||||
|
*
|
||||||
|
* Copyright (C) 2010-2017 (see AUTHORS file for a list of contributors)
|
||||||
|
*
|
||||||
|
* GNSS-SDR is a software defined Global Navigation
|
||||||
|
* Satellite Systems receiver
|
||||||
|
*
|
||||||
|
* This file is part of GNSS-SDR.
|
||||||
|
*
|
||||||
|
* GNSS-SDR is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* GNSS-SDR is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with GNSS-SDR. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*
|
||||||
|
* -------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef GNSS_SDR_GLONASS_L1_CA_PCPS_ACQUISITION_H_
|
||||||
|
#define GNSS_SDR_GLONASS_L1_CA_PCPS_ACQUISITION_H_
|
||||||
|
|
||||||
|
#include <string>
|
||||||
|
#include <gnuradio/blocks/stream_to_vector.h>
|
||||||
|
#include <gnuradio/blocks/float_to_complex.h>
|
||||||
|
#include "gnss_synchro.h"
|
||||||
|
#include "acquisition_interface.h"
|
||||||
|
#include "pcps_acquisition_cc.h"
|
||||||
|
#include "pcps_acquisition_sc.h"
|
||||||
|
#include "complex_byte_to_float_x2.h"
|
||||||
|
|
||||||
|
|
||||||
|
class ConfigurationInterface;
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief This class adapts a PCPS acquisition block to an AcquisitionInterface
|
||||||
|
* for GPS L1 C/A signals
|
||||||
|
*/
|
||||||
|
class GlonassL1CaPcpsAcquisition: public AcquisitionInterface
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
GlonassL1CaPcpsAcquisition(ConfigurationInterface* configuration,
|
||||||
|
std::string role, unsigned int in_streams,
|
||||||
|
unsigned int out_streams);
|
||||||
|
|
||||||
|
virtual ~GlonassL1CaPcpsAcquisition();
|
||||||
|
|
||||||
|
inline std::string role() override
|
||||||
|
{
|
||||||
|
return role_;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Returns "GLONASS_L1_CA_PCPS_Acquisition"
|
||||||
|
*/
|
||||||
|
inline std::string implementation() override
|
||||||
|
{
|
||||||
|
return "GLONASS_L1_CA_PCPS_Acquisition";
|
||||||
|
}
|
||||||
|
|
||||||
|
inline size_t item_size() override
|
||||||
|
{
|
||||||
|
return item_size_;
|
||||||
|
}
|
||||||
|
|
||||||
|
void connect(gr::top_block_sptr top_block) override;
|
||||||
|
void disconnect(gr::top_block_sptr top_block) override;
|
||||||
|
gr::basic_block_sptr get_left_block() override;
|
||||||
|
gr::basic_block_sptr get_right_block() override;
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Set acquisition/tracking common Gnss_Synchro object pointer
|
||||||
|
* to efficiently exchange synchronization data between acquisition and
|
||||||
|
* tracking blocks
|
||||||
|
*/
|
||||||
|
void set_gnss_synchro(Gnss_Synchro* p_gnss_synchro) override;
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Set acquisition channel unique ID
|
||||||
|
*/
|
||||||
|
void set_channel(unsigned int channel) override;
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Set statistics threshold of PCPS algorithm
|
||||||
|
*/
|
||||||
|
void set_threshold(float threshold) override;
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Set maximum Doppler off grid search
|
||||||
|
*/
|
||||||
|
void set_doppler_max(unsigned int doppler_max) override;
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Set Doppler steps for the grid search
|
||||||
|
*/
|
||||||
|
void set_doppler_step(unsigned int doppler_step) override;
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Initializes acquisition algorithm.
|
||||||
|
*/
|
||||||
|
void init() override;
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Sets local code for GPS L1/CA PCPS acquisition algorithm.
|
||||||
|
*/
|
||||||
|
void set_local_code() override;
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Returns the maximum peak of grid search
|
||||||
|
*/
|
||||||
|
signed int mag() override;
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Restart acquisition algorithm
|
||||||
|
*/
|
||||||
|
void reset() override;
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief If state = 1, it forces the block to start acquiring from the first sample
|
||||||
|
*/
|
||||||
|
void set_state(int state);
|
||||||
|
|
||||||
|
private:
|
||||||
|
ConfigurationInterface* configuration_;
|
||||||
|
pcps_acquisition_cc_sptr acquisition_cc_;
|
||||||
|
pcps_acquisition_sc_sptr acquisition_sc_;
|
||||||
|
gr::blocks::stream_to_vector::sptr stream_to_vector_;
|
||||||
|
gr::blocks::float_to_complex::sptr float_to_complex_;
|
||||||
|
complex_byte_to_float_x2_sptr cbyte_to_float_x2_;
|
||||||
|
size_t item_size_;
|
||||||
|
std::string item_type_;
|
||||||
|
unsigned int vector_length_;
|
||||||
|
unsigned int code_length_;
|
||||||
|
bool bit_transition_flag_;
|
||||||
|
bool use_CFAR_algorithm_flag_;
|
||||||
|
unsigned int channel_;
|
||||||
|
float threshold_;
|
||||||
|
unsigned int doppler_max_;
|
||||||
|
unsigned int doppler_step_;
|
||||||
|
unsigned int sampled_ms_;
|
||||||
|
unsigned int max_dwells_;
|
||||||
|
long fs_in_;
|
||||||
|
long if_;
|
||||||
|
bool dump_;
|
||||||
|
bool blocking_;
|
||||||
|
std::string dump_filename_;
|
||||||
|
std::complex<float> * code_;
|
||||||
|
Gnss_Synchro * gnss_synchro_;
|
||||||
|
std::string role_;
|
||||||
|
unsigned int in_streams_;
|
||||||
|
unsigned int out_streams_;
|
||||||
|
|
||||||
|
float calculate_threshold(float pfa);
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif /* GNSS_SDR_GLONASS_L1_CA_PCPS_ACQUISITION_H_ */
|
@ -35,6 +35,7 @@
|
|||||||
|
|
||||||
#include "pcps_acquisition_cc.h"
|
#include "pcps_acquisition_cc.h"
|
||||||
#include <sstream>
|
#include <sstream>
|
||||||
|
#include <cstring>
|
||||||
#include <boost/filesystem.hpp>
|
#include <boost/filesystem.hpp>
|
||||||
#include <gnuradio/io_signature.h>
|
#include <gnuradio/io_signature.h>
|
||||||
#include <glog/logging.h>
|
#include <glog/logging.h>
|
||||||
@ -42,6 +43,7 @@
|
|||||||
#include <volk_gnsssdr/volk_gnsssdr.h>
|
#include <volk_gnsssdr/volk_gnsssdr.h>
|
||||||
#include "control_message_factory.h"
|
#include "control_message_factory.h"
|
||||||
#include "GPS_L1_CA.h" //GPS_TWO_PI
|
#include "GPS_L1_CA.h" //GPS_TWO_PI
|
||||||
|
#include "GLONASS_L1_CA.h" //GLONASS_TWO_PI
|
||||||
|
|
||||||
|
|
||||||
using google::LogMessage;
|
using google::LogMessage;
|
||||||
@ -77,6 +79,7 @@ pcps_acquisition_cc::pcps_acquisition_cc(
|
|||||||
d_active = false;
|
d_active = false;
|
||||||
d_state = 0;
|
d_state = 0;
|
||||||
d_freq = freq;
|
d_freq = freq;
|
||||||
|
d_old_freq = freq;
|
||||||
d_fs_in = fs_in;
|
d_fs_in = fs_in;
|
||||||
d_samples_per_ms = samples_per_ms;
|
d_samples_per_ms = samples_per_ms;
|
||||||
d_samples_per_code = samples_per_code;
|
d_samples_per_code = samples_per_code;
|
||||||
@ -162,6 +165,13 @@ pcps_acquisition_cc::~pcps_acquisition_cc()
|
|||||||
|
|
||||||
void pcps_acquisition_cc::set_local_code(std::complex<float> * code)
|
void pcps_acquisition_cc::set_local_code(std::complex<float> * code)
|
||||||
{
|
{
|
||||||
|
// reset the intermediate frequency
|
||||||
|
d_freq = d_old_freq;
|
||||||
|
// This will check if it's fdma, if yes will update the intermediate frequency and the doppler grid
|
||||||
|
if( is_fdma() )
|
||||||
|
{
|
||||||
|
update_grid_doppler_wipeoffs();
|
||||||
|
}
|
||||||
// COD
|
// COD
|
||||||
// Here we want to create a buffer that looks like this:
|
// Here we want to create a buffer that looks like this:
|
||||||
// [ 0 0 0 ... 0 c_0 c_1 ... c_L]
|
// [ 0 0 0 ... 0 c_0 c_1 ... c_L]
|
||||||
@ -183,6 +193,22 @@ void pcps_acquisition_cc::set_local_code(std::complex<float> * code)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool pcps_acquisition_cc::is_fdma()
|
||||||
|
{
|
||||||
|
// Dealing with FDMA system
|
||||||
|
if( strcmp(d_gnss_synchro->Signal,"1G") == 0 )
|
||||||
|
{
|
||||||
|
d_freq += DFRQ1_GLO * GLONASS_PRN.at(d_gnss_synchro->PRN);
|
||||||
|
LOG(INFO) << "Trying to acquire SV PRN " << d_gnss_synchro->PRN << " with freq " << d_freq << " in Glonass Channel " << GLONASS_PRN.at(d_gnss_synchro->PRN) << std::endl;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void pcps_acquisition_cc::update_local_carrier(gr_complex* carrier_vector, int correlator_length_samples, float freq)
|
void pcps_acquisition_cc::update_local_carrier(gr_complex* carrier_vector, int correlator_length_samples, float freq)
|
||||||
{
|
{
|
||||||
float phase_step_rad = GPS_TWO_PI * freq / static_cast<float>(d_fs_in);
|
float phase_step_rad = GPS_TWO_PI * freq / static_cast<float>(d_fs_in);
|
||||||
@ -220,6 +246,20 @@ void pcps_acquisition_cc::init()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void pcps_acquisition_cc::update_grid_doppler_wipeoffs()
|
||||||
|
{
|
||||||
|
// Create the carrier Doppler wipeoff signals
|
||||||
|
d_grid_doppler_wipeoffs = new gr_complex*[d_num_doppler_bins];
|
||||||
|
|
||||||
|
for (unsigned int doppler_index = 0; doppler_index < d_num_doppler_bins; doppler_index++)
|
||||||
|
{
|
||||||
|
d_grid_doppler_wipeoffs[doppler_index] = static_cast<gr_complex*>(volk_gnsssdr_malloc(d_fft_size * sizeof(gr_complex), volk_gnsssdr_get_alignment()));
|
||||||
|
int doppler = -static_cast<int>(d_doppler_max) + d_doppler_step * doppler_index;
|
||||||
|
update_local_carrier(d_grid_doppler_wipeoffs[doppler_index], d_fft_size, d_freq + doppler);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void pcps_acquisition_cc::set_state(int state)
|
void pcps_acquisition_cc::set_state(int state)
|
||||||
{
|
{
|
||||||
gr::thread::scoped_lock lock(d_setlock); // require mutex with work function called by the scheduler
|
gr::thread::scoped_lock lock(d_setlock); // require mutex with work function called by the scheduler
|
||||||
|
@ -58,7 +58,6 @@
|
|||||||
#include <gnuradio/gr_complex.h>
|
#include <gnuradio/gr_complex.h>
|
||||||
#include <gnuradio/fft/fft.h>
|
#include <gnuradio/fft/fft.h>
|
||||||
#include "gnss_synchro.h"
|
#include "gnss_synchro.h"
|
||||||
#include <glog/logging.h>
|
|
||||||
|
|
||||||
class pcps_acquisition_cc;
|
class pcps_acquisition_cc;
|
||||||
|
|
||||||
@ -97,6 +96,8 @@ private:
|
|||||||
std::string dump_filename);
|
std::string dump_filename);
|
||||||
|
|
||||||
void update_local_carrier(gr_complex* carrier_vector, int correlator_length_samples, float freq);
|
void update_local_carrier(gr_complex* carrier_vector, int correlator_length_samples, float freq);
|
||||||
|
void update_grid_doppler_wipeoffs();
|
||||||
|
bool is_fdma();
|
||||||
|
|
||||||
void acquisition_core( unsigned long int samp_count );
|
void acquisition_core( unsigned long int samp_count );
|
||||||
|
|
||||||
@ -104,6 +105,7 @@ private:
|
|||||||
void send_positive_acquisition();
|
void send_positive_acquisition();
|
||||||
long d_fs_in;
|
long d_fs_in;
|
||||||
long d_freq;
|
long d_freq;
|
||||||
|
long d_old_freq;
|
||||||
int d_samples_per_ms;
|
int d_samples_per_ms;
|
||||||
int d_samples_per_code;
|
int d_samples_per_code;
|
||||||
//unsigned int d_doppler_resolution;
|
//unsigned int d_doppler_resolution;
|
||||||
|
@ -42,6 +42,8 @@
|
|||||||
#include <volk/volk.h>
|
#include <volk/volk.h>
|
||||||
#include "control_message_factory.h"
|
#include "control_message_factory.h"
|
||||||
#include "GPS_L1_CA.h" //GPS_TWO_PI
|
#include "GPS_L1_CA.h" //GPS_TWO_PI
|
||||||
|
#include "GLONASS_L1_CA.h" //GLONASS_TWO_PI
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
using google::LogMessage;
|
using google::LogMessage;
|
||||||
@ -77,6 +79,7 @@ pcps_acquisition_sc::pcps_acquisition_sc(
|
|||||||
d_active = false;
|
d_active = false;
|
||||||
d_state = 0;
|
d_state = 0;
|
||||||
d_freq = freq;
|
d_freq = freq;
|
||||||
|
d_old_freq = freq;
|
||||||
d_fs_in = fs_in;
|
d_fs_in = fs_in;
|
||||||
d_samples_per_ms = samples_per_ms;
|
d_samples_per_ms = samples_per_ms;
|
||||||
d_samples_per_code = samples_per_code;
|
d_samples_per_code = samples_per_code;
|
||||||
@ -183,6 +186,13 @@ pcps_acquisition_sc::~pcps_acquisition_sc()
|
|||||||
|
|
||||||
void pcps_acquisition_sc::set_local_code(std::complex<float> * code)
|
void pcps_acquisition_sc::set_local_code(std::complex<float> * code)
|
||||||
{
|
{
|
||||||
|
// reset the intermediate frequency
|
||||||
|
d_freq = d_old_freq;
|
||||||
|
// This will check if it's fdma, if yes will update the intermediate frequency and the doppler grid
|
||||||
|
if( is_fdma() )
|
||||||
|
{
|
||||||
|
update_grid_doppler_wipeoffs();
|
||||||
|
}
|
||||||
// COD
|
// COD
|
||||||
// Here we want to create a buffer that looks like this:
|
// Here we want to create a buffer that looks like this:
|
||||||
// [ 0 0 0 ... 0 c_0 c_1 ... c_L]
|
// [ 0 0 0 ... 0 c_0 c_1 ... c_L]
|
||||||
@ -204,6 +214,22 @@ void pcps_acquisition_sc::set_local_code(std::complex<float> * code)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool pcps_acquisition_sc::is_fdma()
|
||||||
|
{
|
||||||
|
// Dealing with FDMA system
|
||||||
|
if( strcmp(d_gnss_synchro->Signal,"1G") == 0 )
|
||||||
|
{
|
||||||
|
d_freq += DFRQ1_GLO * GLONASS_PRN.at(d_gnss_synchro->PRN);
|
||||||
|
LOG(INFO) << "Trying to acquire SV PRN " << d_gnss_synchro->PRN << " with freq " << DFRQ1_GLO * GLONASS_PRN.at(d_gnss_synchro->PRN) << " in Channel " << GLONASS_PRN.at(d_gnss_synchro->PRN) << std::endl;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void pcps_acquisition_sc::update_local_carrier(gr_complex* carrier_vector, int correlator_length_samples, float freq)
|
void pcps_acquisition_sc::update_local_carrier(gr_complex* carrier_vector, int correlator_length_samples, float freq)
|
||||||
{
|
{
|
||||||
float phase_step_rad = GPS_TWO_PI * freq / static_cast<float>(d_fs_in);
|
float phase_step_rad = GPS_TWO_PI * freq / static_cast<float>(d_fs_in);
|
||||||
@ -243,6 +269,19 @@ void pcps_acquisition_sc::init()
|
|||||||
d_worker_active = false;
|
d_worker_active = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void pcps_acquisition_sc::update_grid_doppler_wipeoffs()
|
||||||
|
{
|
||||||
|
// Create the carrier Doppler wipeoff signals
|
||||||
|
d_grid_doppler_wipeoffs = new gr_complex*[d_num_doppler_bins];
|
||||||
|
|
||||||
|
for (unsigned int doppler_index = 0; doppler_index < d_num_doppler_bins; doppler_index++)
|
||||||
|
{
|
||||||
|
d_grid_doppler_wipeoffs[doppler_index] = static_cast<gr_complex*>(volk_gnsssdr_malloc(d_fft_size * sizeof(gr_complex), volk_gnsssdr_get_alignment()));
|
||||||
|
int doppler = -static_cast<int>(d_doppler_max) + d_doppler_step * doppler_index;
|
||||||
|
update_local_carrier(d_grid_doppler_wipeoffs[doppler_index], d_fft_size, d_freq + doppler);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void pcps_acquisition_sc::set_state(int state)
|
void pcps_acquisition_sc::set_state(int state)
|
||||||
{
|
{
|
||||||
|
@ -103,10 +103,15 @@ private:
|
|||||||
|
|
||||||
void acquisition_core( void );
|
void acquisition_core( void );
|
||||||
|
|
||||||
|
void update_grid_doppler_wipeoffs();
|
||||||
|
bool is_fdma();
|
||||||
|
|
||||||
void send_negative_acquisition();
|
void send_negative_acquisition();
|
||||||
void send_positive_acquisition();
|
void send_positive_acquisition();
|
||||||
|
|
||||||
long d_fs_in;
|
long d_fs_in;
|
||||||
long d_freq;
|
long d_freq;
|
||||||
|
long d_old_freq;
|
||||||
int d_samples_per_ms;
|
int d_samples_per_ms;
|
||||||
int d_samples_per_code;
|
int d_samples_per_code;
|
||||||
//unsigned int d_doppler_resolution;
|
//unsigned int d_doppler_resolution;
|
||||||
|
@ -26,6 +26,7 @@ set(GNSS_SPLIBS_SOURCES
|
|||||||
gnss_sdr_sample_counter.cc
|
gnss_sdr_sample_counter.cc
|
||||||
gnss_signal_processing.cc
|
gnss_signal_processing.cc
|
||||||
gps_sdr_signal_processing.cc
|
gps_sdr_signal_processing.cc
|
||||||
|
glonass_l1_signal_processing.cc
|
||||||
pass_through.cc
|
pass_through.cc
|
||||||
galileo_e5_signal_processing.cc
|
galileo_e5_signal_processing.cc
|
||||||
complex_byte_to_float_x2.cc
|
complex_byte_to_float_x2.cc
|
||||||
|
153
src/algorithms/libs/glonass_l1_signal_processing.cc
Normal file
153
src/algorithms/libs/glonass_l1_signal_processing.cc
Normal file
@ -0,0 +1,153 @@
|
|||||||
|
/*!
|
||||||
|
* \file glonass_l1_signal_processing.cc
|
||||||
|
* \brief This class implements various functions for GLONASS L1 CA signals
|
||||||
|
* \author Javier Arribas, 2011. jarribas(at)cttc.es
|
||||||
|
*
|
||||||
|
* Detailed description of the file here if needed.
|
||||||
|
*
|
||||||
|
* -------------------------------------------------------------------------
|
||||||
|
*
|
||||||
|
* Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors)
|
||||||
|
*
|
||||||
|
* GNSS-SDR is a software defined Global Navigation
|
||||||
|
* Satellite Systems receiver
|
||||||
|
*
|
||||||
|
* This file is part of GNSS-SDR.
|
||||||
|
*
|
||||||
|
* GNSS-SDR is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* GNSS-SDR is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with GNSS-SDR. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*
|
||||||
|
* -------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "glonass_l1_signal_processing.h"
|
||||||
|
|
||||||
|
auto auxCeil = [](float x){ return static_cast<int>(static_cast<long>((x)+1)); };
|
||||||
|
|
||||||
|
void glonass_l1_ca_code_gen_complex(std::complex<float>* _dest,/* signed int _prn,*/ unsigned int _chip_shift)
|
||||||
|
{
|
||||||
|
const unsigned int _code_length = 511;
|
||||||
|
bool G1[_code_length];
|
||||||
|
bool G1_register[9];
|
||||||
|
bool feedback1;
|
||||||
|
bool aux;
|
||||||
|
unsigned int delay;
|
||||||
|
unsigned int lcv, lcv2;
|
||||||
|
|
||||||
|
for(lcv = 0; lcv < 9; lcv++)
|
||||||
|
{
|
||||||
|
G1_register[lcv] = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Generate G1 Register */
|
||||||
|
for(lcv = 0; lcv < _code_length; lcv++)
|
||||||
|
{
|
||||||
|
G1[lcv] = G1_register[2];
|
||||||
|
|
||||||
|
feedback1 = G1_register[4]^G1_register[0];
|
||||||
|
|
||||||
|
for(lcv2 = 0; lcv2 < 8; lcv2++)
|
||||||
|
{
|
||||||
|
G1_register[lcv2] = G1_register[lcv2 + 1];
|
||||||
|
}
|
||||||
|
|
||||||
|
G1_register[8] = feedback1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Generate PRN from G1 Register */
|
||||||
|
for(lcv = 0; lcv < _code_length; lcv++)
|
||||||
|
{
|
||||||
|
aux = G1[lcv];
|
||||||
|
if(aux == true)
|
||||||
|
{
|
||||||
|
_dest[lcv] = std::complex<float>(1, 0);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
_dest[lcv] = std::complex<float>(-1, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Set the delay */
|
||||||
|
delay = _code_length;
|
||||||
|
delay += _chip_shift;
|
||||||
|
delay %= _code_length;
|
||||||
|
|
||||||
|
/* Generate PRN from G1 and G2 Registers */
|
||||||
|
for(lcv = 0; lcv < _code_length; lcv++)
|
||||||
|
{
|
||||||
|
aux = G1[(lcv + _chip_shift) % _code_length];
|
||||||
|
if(aux == true)
|
||||||
|
{
|
||||||
|
_dest[lcv] = std::complex<float>(1, 0);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
_dest[lcv] = std::complex<float>(-1, 0);
|
||||||
|
}
|
||||||
|
delay++;
|
||||||
|
delay %= _code_length;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Generates complex GLONASS L1 C/A code for the desired SV ID and sampled to specific sampling frequency
|
||||||
|
*/
|
||||||
|
void glonass_l1_ca_code_gen_complex_sampled(std::complex<float>* _dest,/* unsigned int _prn,*/ signed int _fs, unsigned int _chip_shift)
|
||||||
|
{
|
||||||
|
// This function is based on the GNU software GPS for MATLAB in the Kay Borre book
|
||||||
|
std::complex<float> _code[511];
|
||||||
|
signed int _samplesPerCode, _codeValueIndex;
|
||||||
|
float _ts;
|
||||||
|
float _tc;
|
||||||
|
float aux;
|
||||||
|
const signed int _codeFreqBasis = 511000; //Hz
|
||||||
|
const signed int _codeLength = 511;
|
||||||
|
|
||||||
|
//--- Find number of samples per spreading code ----------------------------
|
||||||
|
_samplesPerCode = static_cast<signed int>(static_cast<double>(_fs) / static_cast<double>(_codeFreqBasis / _codeLength));
|
||||||
|
|
||||||
|
//--- Find time constants --------------------------------------------------
|
||||||
|
_ts = 1.0 / static_cast<float>(_fs); // Sampling period in sec
|
||||||
|
_tc = 1.0 / static_cast<float>(_codeFreqBasis); // C/A chip period in sec
|
||||||
|
glonass_l1_ca_code_gen_complex(_code, _chip_shift); //generate C/A code 1 sample per chip
|
||||||
|
|
||||||
|
for (signed int i = 0; i < _samplesPerCode; i++)
|
||||||
|
{
|
||||||
|
//=== Digitizing =======================================================
|
||||||
|
|
||||||
|
//--- Make index array to read C/A code values -------------------------
|
||||||
|
// The length of the index array depends on the sampling frequency -
|
||||||
|
// number of samples per millisecond (because one C/A code period is one
|
||||||
|
// millisecond).
|
||||||
|
|
||||||
|
// _codeValueIndex = ceil((_ts * ((float)i + 1)) / _tc) - 1;
|
||||||
|
aux = (_ts * (i + 1)) / _tc;
|
||||||
|
_codeValueIndex = auxCeil( aux ) - 1;
|
||||||
|
|
||||||
|
//--- Make the digitized version of the C/A code -----------------------
|
||||||
|
// The "upsampled" code is made by selecting values form the CA code
|
||||||
|
// chip array (caCode) for the time instances of each sample.
|
||||||
|
if (i == _samplesPerCode - 1)
|
||||||
|
{
|
||||||
|
//--- Correct the last index (due to number rounding issues) -----------
|
||||||
|
_dest[i] = _code[_codeLength - 1];
|
||||||
|
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
_dest[i] = _code[_codeValueIndex]; //repeat the chip -> upsample
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
47
src/algorithms/libs/glonass_l1_signal_processing.h
Normal file
47
src/algorithms/libs/glonass_l1_signal_processing.h
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
/*!
|
||||||
|
* \file glonass_l1_signal_processing.h
|
||||||
|
* \brief This class implements various functions for GLONASS L1 CA signals
|
||||||
|
* \author Gabriel Araujo, 2017. gabriel.araujo(at)ieee.org
|
||||||
|
*
|
||||||
|
* Detailed description of the file here if needed.
|
||||||
|
*
|
||||||
|
* -------------------------------------------------------------------------
|
||||||
|
*
|
||||||
|
* Copyright (C) 2010-2017 (see AUTHORS file for a list of contributors)
|
||||||
|
*
|
||||||
|
* GNSS-SDR is a software defined Global Navigation
|
||||||
|
* Satellite Systems receiver
|
||||||
|
*
|
||||||
|
* This file is part of GNSS-SDR.
|
||||||
|
*
|
||||||
|
* GNSS-SDR is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* GNSS-SDR is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with GNSS-SDR. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*
|
||||||
|
* -------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef GNSS_SDR_GLONASS_SDR_SIGNAL_PROCESSING_H_
|
||||||
|
#define GNSS_SDR_GLONASS_SDR_SIGNAL_PROCESSING_H_
|
||||||
|
|
||||||
|
#include <complex>
|
||||||
|
|
||||||
|
//!Generates complex GLONASS L1 C/A code for the desired SV ID and code shift, and sampled to specific sampling frequency
|
||||||
|
void glonass_l1_ca_code_gen_complex(std::complex<float>* _dest, /*signed int _prn,*/ unsigned int _chip_shift);
|
||||||
|
|
||||||
|
//! Generates N complex GLONASS L1 C/A codes for the desired SV ID and code shift
|
||||||
|
void glonass_l1_ca_code_gen_complex_sampled(std::complex<float>* _dest,/* unsigned int _prn,*/ signed int _fs, unsigned int _chip_shift, unsigned int _ncodes);
|
||||||
|
|
||||||
|
//! Generates complex GLONASS L1 C/A code for the desired SV ID and code shift
|
||||||
|
void glonass_l1_ca_code_gen_complex_sampled(std::complex<float>* _dest,/* unsigned int _prn,*/ signed int _fs, unsigned int _chip_shift);
|
||||||
|
|
||||||
|
#endif /* GNSS_SDR_GLONASS_SDR_SIGNAL_PROCESSING_H_ */
|
@ -35,6 +35,7 @@
|
|||||||
#include <cstring> // for memcpy
|
#include <cstring> // for memcpy
|
||||||
#include <gnuradio/io_signature.h>
|
#include <gnuradio/io_signature.h>
|
||||||
#include "control_message_factory.h"
|
#include "control_message_factory.h"
|
||||||
|
#include <glog/logging.h>
|
||||||
|
|
||||||
gnss_sdr_valve::gnss_sdr_valve (size_t sizeof_stream_item,
|
gnss_sdr_valve::gnss_sdr_valve (size_t sizeof_stream_item,
|
||||||
unsigned long long nitems,
|
unsigned long long nitems,
|
||||||
@ -61,6 +62,7 @@ int gnss_sdr_valve::work (int noutput_items,
|
|||||||
{
|
{
|
||||||
ControlMessageFactory* cmf = new ControlMessageFactory();
|
ControlMessageFactory* cmf = new ControlMessageFactory();
|
||||||
d_queue->handle(cmf->GetQueueMessage(200,0));
|
d_queue->handle(cmf->GetQueueMessage(200,0));
|
||||||
|
LOG(INFO) << "Stoping reciver, "<< d_ncopied_items << " samples processed";
|
||||||
delete cmf;
|
delete cmf;
|
||||||
return -1; // Done!
|
return -1; // Done!
|
||||||
}
|
}
|
||||||
|
@ -182,6 +182,7 @@ const int SYS_ALL = 0xFF; //!< navigation system: all
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#define ENAGLO
|
||||||
#ifdef ENAGLO
|
#ifdef ENAGLO
|
||||||
const int MINPRNGLO = 1; //!< min satellite slot number of GLONASS
|
const int MINPRNGLO = 1; //!< min satellite slot number of GLONASS
|
||||||
const int MAXPRNGLO = 27; //!< max satellite slot number of GLONASS
|
const int MAXPRNGLO = 27; //!< max satellite slot number of GLONASS
|
||||||
@ -194,6 +195,12 @@ const int NSATGLO = 0;
|
|||||||
const int NSYSGLO = 0;
|
const int NSYSGLO = 0;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
const int MINPRNGLO = 1; //!< min satellite slot number of GLONASS
|
||||||
|
const int MAXPRNGLO = 27; //!< max satellite slot number of GLONASS
|
||||||
|
const int NSATGLO = (MAXPRNGLO - MINPRNGLO + 1); //!< number of GLONASS satellites
|
||||||
|
const int NSYSGLO = 1;
|
||||||
|
*/
|
||||||
const int MINPRNGAL = 1; //!< min satellite PRN number of Galileo
|
const int MINPRNGAL = 1; //!< min satellite PRN number of Galileo
|
||||||
const int MAXPRNGAL = 30; //!< max satellite PRN number of Galileo
|
const int MAXPRNGAL = 30; //!< max satellite PRN number of Galileo
|
||||||
const int NSATGAL = (MAXPRNGAL - MINPRNGAL + 1); //!< number of Galileo satellites
|
const int NSATGAL = (MAXPRNGAL - MINPRNGAL + 1); //!< number of Galileo satellites
|
||||||
|
@ -62,6 +62,10 @@ obsd_t insert_obs_to_rtklib(obsd_t & rtklib_obs, const Gnss_Synchro & gnss_synch
|
|||||||
case 'E':
|
case 'E':
|
||||||
rtklib_obs.sat = gnss_synchro.PRN+NSATGPS+NSATGLO;
|
rtklib_obs.sat = gnss_synchro.PRN+NSATGPS+NSATGLO;
|
||||||
break;
|
break;
|
||||||
|
case 'R':
|
||||||
|
rtklib_obs.sat = gnss_synchro.PRN+NSATGPS;
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
rtklib_obs.sat = gnss_synchro.PRN;
|
rtklib_obs.sat = gnss_synchro.PRN;
|
||||||
}
|
}
|
||||||
@ -70,6 +74,46 @@ obsd_t insert_obs_to_rtklib(obsd_t & rtklib_obs, const Gnss_Synchro & gnss_synch
|
|||||||
return rtklib_obs;
|
return rtklib_obs;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
geph_t eph_to_rtklib(const Glonass_Gnav_Ephemeris & glonass_gnav_eph, const Glonass_Gnav_Utc_Model & gnav_clock_model)
|
||||||
|
{
|
||||||
|
double week, sec;
|
||||||
|
int adj_week;
|
||||||
|
geph_t rtklib_sat = {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};
|
||||||
|
|
||||||
|
rtklib_sat.sat = glonass_gnav_eph.i_satellite_slot_number + NSATGPS; /* satellite number */
|
||||||
|
rtklib_sat.iode = static_cast<int>(glonass_gnav_eph.d_t_b); /* IODE (0-6 bit of tb field) */
|
||||||
|
rtklib_sat.frq = glonass_gnav_eph.i_satellite_freq_channel; /* satellite frequency number */
|
||||||
|
rtklib_sat.svh = glonass_gnav_eph.d_l3rd_n; /* satellite health*/
|
||||||
|
rtklib_sat.sva = static_cast<int>(glonass_gnav_eph.d_F_T); /* satellite accuracy*/
|
||||||
|
rtklib_sat.age = static_cast<int>(glonass_gnav_eph.d_E_n); /* satellite age*/
|
||||||
|
rtklib_sat.pos[0] = glonass_gnav_eph.d_Xn*1000; /* satellite position (ecef) (m) */
|
||||||
|
rtklib_sat.pos[1] = glonass_gnav_eph.d_Yn*1000; /* satellite position (ecef) (m) */
|
||||||
|
rtklib_sat.pos[2] = glonass_gnav_eph.d_Zn*1000; /* satellite position (ecef) (m) */
|
||||||
|
rtklib_sat.vel[0] = glonass_gnav_eph.d_VXn*1000; /* satellite velocity (ecef) (m/s) */
|
||||||
|
rtklib_sat.vel[1] = glonass_gnav_eph.d_VYn*1000; /* satellite velocity (ecef) (m/s) */
|
||||||
|
rtklib_sat.vel[2] = glonass_gnav_eph.d_VZn*1000; /* satellite velocity (ecef) (m/s) */
|
||||||
|
rtklib_sat.acc[0] = glonass_gnav_eph.d_AXn*1000; /* satellite acceleration (ecef) (m/s^2) */
|
||||||
|
rtklib_sat.acc[1] = glonass_gnav_eph.d_AYn*1000; /* satellite acceleration (ecef) (m/s^2) */
|
||||||
|
rtklib_sat.acc[2] = glonass_gnav_eph.d_AZn*1000; /* satellite acceleration (ecef) (m/s^2) */
|
||||||
|
rtklib_sat.taun = glonass_gnav_eph.d_tau_n; /* SV clock bias (s) */
|
||||||
|
rtklib_sat.gamn = glonass_gnav_eph.d_gamma_n; /* SV relative freq bias */
|
||||||
|
rtklib_sat.age = static_cast<int>(glonass_gnav_eph.d_Delta_tau_n); /* delay between L1 and L2 (s) */
|
||||||
|
|
||||||
|
// Time expressed in GPS Time but using RTKLib format
|
||||||
|
glonass_gnav_eph.glot_to_gpst(glonass_gnav_eph.d_t_b, gnav_clock_model.d_tau_c, gnav_clock_model.d_tau_gps, &week, &sec);
|
||||||
|
adj_week = adjgpsweek(static_cast<int>(week));
|
||||||
|
rtklib_sat.toe = gpst2time(adj_week, sec);
|
||||||
|
|
||||||
|
// Time expressed in GPS Time but using RTKLib format
|
||||||
|
glonass_gnav_eph.glot_to_gpst(glonass_gnav_eph.d_t_k, gnav_clock_model.d_tau_c, gnav_clock_model.d_tau_gps, &week, &sec);
|
||||||
|
adj_week = adjgpsweek(static_cast<int>(week));
|
||||||
|
rtklib_sat.tof = gpst2time(adj_week, sec);
|
||||||
|
|
||||||
|
return rtklib_sat;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
eph_t eph_to_rtklib(const Galileo_Ephemeris & gal_eph)
|
eph_t eph_to_rtklib(const Galileo_Ephemeris & gal_eph)
|
||||||
{
|
{
|
||||||
eph_t rtklib_sat = {0, 0, 0, 0, 0, 0, 0, 0, {0, 0}, {0, 0}, {0, 0}, 0.0, 0.0, 0.0, 0.0, 0.0,
|
eph_t rtklib_sat = {0, 0, 0, 0, 0, 0, 0, 0, {0, 0}, {0, 0}, {0, 0}, 0.0, 0.0, 0.0, 0.0, 0.0,
|
||||||
|
@ -36,10 +36,18 @@
|
|||||||
#include "galileo_ephemeris.h"
|
#include "galileo_ephemeris.h"
|
||||||
#include "gps_ephemeris.h"
|
#include "gps_ephemeris.h"
|
||||||
#include "gps_cnav_ephemeris.h"
|
#include "gps_cnav_ephemeris.h"
|
||||||
|
#include "glonass_gnav_ephemeris.h"
|
||||||
|
#include "glonass_gnav_utc_model.h"
|
||||||
|
|
||||||
eph_t eph_to_rtklib(const Galileo_Ephemeris & gal_eph);
|
eph_t eph_to_rtklib(const Galileo_Ephemeris & gal_eph);
|
||||||
eph_t eph_to_rtklib(const Gps_Ephemeris & gps_eph);
|
eph_t eph_to_rtklib(const Gps_Ephemeris & gps_eph);
|
||||||
eph_t eph_to_rtklib(const Gps_CNAV_Ephemeris & gps_cnav_eph);
|
eph_t eph_to_rtklib(const Gps_CNAV_Ephemeris & gps_cnav_eph);
|
||||||
|
/*!
|
||||||
|
* \brief Transforms a Glonass_Gnav_Ephemeris to its RTKLIB counterpart
|
||||||
|
* \param glonass_gnav_eph GLONASS GNAV Ephemeris structure
|
||||||
|
* \return Ephemeris structure for RTKLIB parsing
|
||||||
|
*/
|
||||||
|
geph_t eph_to_rtklib(const Glonass_Gnav_Ephemeris & glonass_gnav_eph, const Glonass_Gnav_Utc_Model & gnav_clock_model);
|
||||||
|
|
||||||
obsd_t insert_obs_to_rtklib(obsd_t & rtklib_obs, const Gnss_Synchro & gnss_synchro, int week, int band);
|
obsd_t insert_obs_to_rtklib(obsd_t & rtklib_obs, const Gnss_Synchro & gnss_synchro, int week, int band);
|
||||||
|
|
||||||
|
@ -350,6 +350,12 @@ int decoderaw(rtksvr_t *svr, int index)
|
|||||||
/* decode download file ------------------------------------------------------*/
|
/* decode download file ------------------------------------------------------*/
|
||||||
void decodefile(rtksvr_t *svr, int index)
|
void decodefile(rtksvr_t *svr, int index)
|
||||||
{
|
{
|
||||||
|
int i = 0;
|
||||||
|
char glo_fcn[MAXPRNGLO+1];
|
||||||
|
|
||||||
|
// Allocate space for GLONASS frequency channels depending on availability
|
||||||
|
for(i=0; i < MAXPRNGLO+1; i++)
|
||||||
|
glo_fcn[i]='0';
|
||||||
pcv_t pcvt0[MAXSAT] = { {0, {'0'}, {'0'}, {0, 0.0}, {0, 0.0}, {{0.0},{0.0}}, {{0.0},{0.0}} } };
|
pcv_t pcvt0[MAXSAT] = { {0, {'0'}, {'0'}, {0, 0.0}, {0, 0.0}, {{0.0},{0.0}}, {{0.0},{0.0}} } };
|
||||||
sbsfcorr_t sbsfcorr0 = {{0, 0.0}, 0.0, 0.0, 0.0, 0, 0, 0};
|
sbsfcorr_t sbsfcorr0 = {{0, 0.0}, 0.0, 0.0, 0.0, 0, 0, 0};
|
||||||
sbslcorr_t sbslcorr0 = { {0, 0.0}, 0, {0.0}, {0.0}, 0.0, 0.0};
|
sbslcorr_t sbslcorr0 = { {0, 0.0}, 0, {0.0}, {0.0}, 0.0, 0.0};
|
||||||
@ -366,7 +372,7 @@ void decodefile(rtksvr_t *svr, int index)
|
|||||||
nav_t nav = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
nav_t nav = {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, (erpd_t *){0}}, {0.0}, {0.0}, {0.0}, {0.0}, {0.0}, {0.0}, {0.0}, {0.0},
|
{0, 0, (erpd_t *){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.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'}, {*pcvt0}, sbssat0, {*sbsion0}, {*dgps0}, {*ssr0}, {*lexeph0},
|
{0.0}, {0.0}, {*glo_fcn}, {*pcvt0}, sbssat0, {*sbsion0}, {*dgps0}, {*ssr0}, {*lexeph0},
|
||||||
{{0,0.0}, 0.0, {0.0}, {{0.0},{0.0}} }, pppcorr0} ;
|
{{0,0.0}, 0.0, {0.0}, {{0.0},{0.0}} }, pppcorr0} ;
|
||||||
|
|
||||||
char file[1024];
|
char file[1024];
|
||||||
|
@ -36,6 +36,7 @@
|
|||||||
#include "Galileo_E1.h"
|
#include "Galileo_E1.h"
|
||||||
#include "GPS_L1_CA.h"
|
#include "GPS_L1_CA.h"
|
||||||
#include "Galileo_E5a.h"
|
#include "Galileo_E5a.h"
|
||||||
|
#include "GLONASS_L1_CA.h"
|
||||||
|
|
||||||
|
|
||||||
using google::LogMessage;
|
using google::LogMessage;
|
||||||
@ -102,6 +103,11 @@ SignalGenerator::SignalGenerator(ConfigurationInterface* configuration,
|
|||||||
vector_length = round(static_cast<float>(fs_in)
|
vector_length = round(static_cast<float>(fs_in)
|
||||||
/ (GPS_L1_CA_CODE_RATE_HZ / GPS_L1_CA_CODE_LENGTH_CHIPS));
|
/ (GPS_L1_CA_CODE_RATE_HZ / GPS_L1_CA_CODE_LENGTH_CHIPS));
|
||||||
}
|
}
|
||||||
|
else if (std::find(system.begin(), system.end(), "R") != system.end())
|
||||||
|
{
|
||||||
|
vector_length = round((float)fs_in
|
||||||
|
/ (GLONASS_L1_CA_CODE_RATE_HZ / GLONASS_L1_CA_CODE_LENGTH_CHIPS));
|
||||||
|
}
|
||||||
|
|
||||||
if (item_type_.compare("gr_complex") == 0)
|
if (item_type_.compare("gr_complex") == 0)
|
||||||
{
|
{
|
||||||
|
@ -34,11 +34,13 @@
|
|||||||
#include <gnuradio/io_signature.h>
|
#include <gnuradio/io_signature.h>
|
||||||
#include <volk_gnsssdr/volk_gnsssdr.h>
|
#include <volk_gnsssdr/volk_gnsssdr.h>
|
||||||
#include "gps_sdr_signal_processing.h"
|
#include "gps_sdr_signal_processing.h"
|
||||||
|
#include "glonass_l1_signal_processing.h"
|
||||||
#include "galileo_e1_signal_processing.h"
|
#include "galileo_e1_signal_processing.h"
|
||||||
#include "galileo_e5_signal_processing.h"
|
#include "galileo_e5_signal_processing.h"
|
||||||
#include "Galileo_E1.h"
|
#include "Galileo_E1.h"
|
||||||
#include "Galileo_E5a.h"
|
#include "Galileo_E5a.h"
|
||||||
#include "GPS_L1_CA.h"
|
#include "GPS_L1_CA.h"
|
||||||
|
#include "GLONASS_L1_CA.h"
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Create a new instance of signal_generator_c and return
|
* Create a new instance of signal_generator_c and return
|
||||||
@ -107,6 +109,14 @@ void signal_generator_c::init()
|
|||||||
num_of_codes_per_vector_.push_back(galileo_signal ? 4 * static_cast<int>(Galileo_E1_C_SECONDARY_CODE_LENGTH) : 1);
|
num_of_codes_per_vector_.push_back(galileo_signal ? 4 * static_cast<int>(Galileo_E1_C_SECONDARY_CODE_LENGTH) : 1);
|
||||||
data_bit_duration_ms_.push_back(1e3 / GPS_CA_TELEMETRY_RATE_BITS_SECOND);
|
data_bit_duration_ms_.push_back(1e3 / GPS_CA_TELEMETRY_RATE_BITS_SECOND);
|
||||||
}
|
}
|
||||||
|
else if (system_[sat] == "R")
|
||||||
|
{
|
||||||
|
samples_per_code_.push_back(round(static_cast<float>(fs_in_)
|
||||||
|
/ (GLONASS_L1_CA_CODE_RATE_HZ / GLONASS_L1_CA_CODE_LENGTH_CHIPS)));
|
||||||
|
|
||||||
|
num_of_codes_per_vector_.push_back(galileo_signal ? 4 * static_cast<int>(Galileo_E1_C_SECONDARY_CODE_LENGTH) : 1);
|
||||||
|
data_bit_duration_ms_.push_back(1e3 / GLONASS_GNAV_TELEMETRY_RATE_BITS_SECOND);
|
||||||
|
}
|
||||||
else if (system_[sat] == "E")
|
else if (system_[sat] == "E")
|
||||||
{
|
{
|
||||||
if (signal_[sat].at(0) == '5')
|
if (signal_[sat].at(0) == '5')
|
||||||
@ -160,6 +170,28 @@ void signal_generator_c::generate_codes()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Concatenate "num_of_codes_per_vector_" codes
|
||||||
|
for (unsigned int i = 0; i < num_of_codes_per_vector_[sat]; i++)
|
||||||
|
{
|
||||||
|
memcpy(&(sampled_code_data_[sat][i * samples_per_code_[sat]]),
|
||||||
|
code, sizeof(gr_complex) * samples_per_code_[sat]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (system_[sat] == "R")
|
||||||
|
{
|
||||||
|
// Generate one code-period of 1G signal
|
||||||
|
glonass_l1_ca_code_gen_complex_sampled(code, /*PRN_[sat],*/ fs_in_,
|
||||||
|
static_cast<int>(GLONASS_L1_CA_CODE_LENGTH_CHIPS) - delay_chips_[sat]);
|
||||||
|
|
||||||
|
// Obtain the desired CN0 assuming that Pn = 1.
|
||||||
|
if (noise_flag_)
|
||||||
|
{
|
||||||
|
for (unsigned int i = 0; i < samples_per_code_[sat]; i++)
|
||||||
|
{
|
||||||
|
code[i] *= sqrt(pow(10,CN0_dB_[sat] / 10) / BW_BB_);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Concatenate "num_of_codes_per_vector_" codes
|
// Concatenate "num_of_codes_per_vector_" codes
|
||||||
for (unsigned int i = 0; i < num_of_codes_per_vector_[sat]; i++)
|
for (unsigned int i = 0; i < num_of_codes_per_vector_[sat]; i++)
|
||||||
{
|
{
|
||||||
@ -261,6 +293,8 @@ int signal_generator_c::general_work (int noutput_items __attribute__((unused)),
|
|||||||
unsigned int out_idx = 0;
|
unsigned int out_idx = 0;
|
||||||
unsigned int i = 0;
|
unsigned int i = 0;
|
||||||
unsigned int k = 0;
|
unsigned int k = 0;
|
||||||
|
// the intermediate frequency must be set by the user
|
||||||
|
unsigned int freq = 4e6;
|
||||||
|
|
||||||
for (out_idx = 0; out_idx < vector_length_; out_idx++)
|
for (out_idx = 0; out_idx < vector_length_; out_idx++)
|
||||||
{
|
{
|
||||||
@ -311,6 +345,45 @@ int signal_generator_c::general_work (int noutput_items __attribute__((unused)),
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
else if (system_[sat] == "R")
|
||||||
|
{
|
||||||
|
phase_step_rad = -static_cast<float>(GPS_TWO_PI) * (freq + (DFRQ1_GLO * GLONASS_PRN.at(PRN_[sat])) + doppler_Hz_[sat]) / static_cast<float>(fs_in_);
|
||||||
|
// std::cout << "sat " << PRN_[sat] << " SG - Freq = " << (freq + (DFRQ1_GLO * GLONASS_PRN.at(PRN_[sat]))) << " Doppler = " << doppler_Hz_[sat] << std::endl;
|
||||||
|
_phase[0] = -start_phase_rad_[sat];
|
||||||
|
volk_gnsssdr_s32f_sincos_32fc(complex_phase_, -phase_step_rad, _phase, vector_length_);
|
||||||
|
|
||||||
|
unsigned int delay_samples = (delay_chips_[sat] % static_cast<int>(GLONASS_L1_CA_CODE_LENGTH_CHIPS))
|
||||||
|
* samples_per_code_[sat] / GLONASS_L1_CA_CODE_LENGTH_CHIPS;
|
||||||
|
|
||||||
|
for (i = 0; i < num_of_codes_per_vector_[sat]; i++)
|
||||||
|
{
|
||||||
|
for (k = 0; k < delay_samples; k++)
|
||||||
|
{
|
||||||
|
out[out_idx] += sampled_code_data_[sat][out_idx]
|
||||||
|
* current_data_bits_[sat]
|
||||||
|
* complex_phase_[out_idx];
|
||||||
|
out_idx++;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ms_counter_[sat] == 0 && data_flag_)
|
||||||
|
{
|
||||||
|
// New random data bit
|
||||||
|
current_data_bits_[sat] = gr_complex((uniform_dist(e1) % 2) == 0 ? 1 : -1, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (k = delay_samples; k < samples_per_code_[sat]; k++)
|
||||||
|
{
|
||||||
|
out[out_idx] += sampled_code_data_[sat][out_idx]
|
||||||
|
* current_data_bits_[sat]
|
||||||
|
* complex_phase_[out_idx];
|
||||||
|
out_idx++;
|
||||||
|
}
|
||||||
|
|
||||||
|
ms_counter_[sat] = (ms_counter_[sat] + static_cast<int>(round(1e3*GLONASS_L1_CA_CODE_PERIOD)))
|
||||||
|
% data_bit_duration_ms_[sat];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
else if (system_[sat] == "E")
|
else if (system_[sat] == "E")
|
||||||
{
|
{
|
||||||
if(signal_[sat].at(0)=='5')
|
if(signal_[sat].at(0)=='5')
|
||||||
|
@ -16,6 +16,7 @@
|
|||||||
# along with GNSS-SDR. If not, see <http://www.gnu.org/licenses/>.
|
# along with GNSS-SDR. If not, see <http://www.gnu.org/licenses/>.
|
||||||
#
|
#
|
||||||
|
|
||||||
|
|
||||||
set(TELEMETRY_DECODER_ADAPTER_SOURCES
|
set(TELEMETRY_DECODER_ADAPTER_SOURCES
|
||||||
gps_l1_ca_telemetry_decoder.cc
|
gps_l1_ca_telemetry_decoder.cc
|
||||||
gps_l2c_telemetry_decoder.cc
|
gps_l2c_telemetry_decoder.cc
|
||||||
@ -23,6 +24,7 @@ set(TELEMETRY_DECODER_ADAPTER_SOURCES
|
|||||||
galileo_e1b_telemetry_decoder.cc
|
galileo_e1b_telemetry_decoder.cc
|
||||||
sbas_l1_telemetry_decoder.cc
|
sbas_l1_telemetry_decoder.cc
|
||||||
galileo_e5a_telemetry_decoder.cc
|
galileo_e5a_telemetry_decoder.cc
|
||||||
|
glonass_l1_ca_telemetry_decoder.cc
|
||||||
)
|
)
|
||||||
|
|
||||||
include_directories(
|
include_directories(
|
||||||
|
@ -0,0 +1,102 @@
|
|||||||
|
/*!
|
||||||
|
* \file glonass_l1_ca_telemetry_decoder.cc
|
||||||
|
* \brief Implementation of an adapter of a GLONASS L1 C/A NAV data decoder block
|
||||||
|
* to a TelemetryDecoderInterface
|
||||||
|
* \note Code added as part of GSoC 2017 program
|
||||||
|
* \author Damian Miralles, 2017. dmiralles2009(at)gmail.com
|
||||||
|
*
|
||||||
|
* -------------------------------------------------------------------------
|
||||||
|
*
|
||||||
|
* Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors)
|
||||||
|
*
|
||||||
|
* GNSS-SDR is a software defined Global Navigation
|
||||||
|
* Satellite Systems receiver
|
||||||
|
*
|
||||||
|
* This file is part of GNSS-SDR.
|
||||||
|
*
|
||||||
|
* GNSS-SDR is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* GNSS-SDR is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with GNSS-SDR. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*
|
||||||
|
* -------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#include "glonass_l1_ca_telemetry_decoder.h"
|
||||||
|
#include <gnuradio/io_signature.h>
|
||||||
|
#include <glog/logging.h>
|
||||||
|
#include "concurrent_queue.h"
|
||||||
|
#include "glonass_gnav_ephemeris.h"
|
||||||
|
#include "glonass_gnav_almanac.h"
|
||||||
|
#include "glonass_gnav_utc_model.h"
|
||||||
|
#include "configuration_interface.h"
|
||||||
|
|
||||||
|
using google::LogMessage;
|
||||||
|
|
||||||
|
GlonassL1CaTelemetryDecoder::GlonassL1CaTelemetryDecoder(ConfigurationInterface* configuration,
|
||||||
|
std::string role,
|
||||||
|
unsigned int in_streams,
|
||||||
|
unsigned int out_streams) :
|
||||||
|
role_(role),
|
||||||
|
in_streams_(in_streams),
|
||||||
|
out_streams_(out_streams)
|
||||||
|
{
|
||||||
|
std::string default_dump_filename = "./navigation.dat";
|
||||||
|
DLOG(INFO) << "role " << role;
|
||||||
|
dump_ = configuration->property(role + ".dump", false);
|
||||||
|
dump_filename_ = configuration->property(role + ".dump_filename", default_dump_filename);
|
||||||
|
// make telemetry decoder object
|
||||||
|
telemetry_decoder_ = glonass_l1_ca_make_telemetry_decoder_cc(satellite_, dump_);
|
||||||
|
DLOG(INFO) << "telemetry_decoder(" << telemetry_decoder_->unique_id() << ")";
|
||||||
|
|
||||||
|
DLOG(INFO) << "global navigation message queue assigned to telemetry_decoder ("<< telemetry_decoder_->unique_id() << ")";
|
||||||
|
channel_ = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
GlonassL1CaTelemetryDecoder::~GlonassL1CaTelemetryDecoder()
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
void GlonassL1CaTelemetryDecoder::set_satellite(const Gnss_Satellite & satellite)
|
||||||
|
{
|
||||||
|
satellite_ = Gnss_Satellite(satellite.get_system(), satellite.get_PRN());
|
||||||
|
telemetry_decoder_->set_satellite(satellite_);
|
||||||
|
DLOG(INFO) << "TELEMETRY DECODER: satellite set to " << satellite_;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void GlonassL1CaTelemetryDecoder::connect(gr::top_block_sptr top_block)
|
||||||
|
{
|
||||||
|
if(top_block) { /* top_block is not null */};
|
||||||
|
// Nothing to connect internally
|
||||||
|
DLOG(INFO) << "nothing to connect internally";
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void GlonassL1CaTelemetryDecoder::disconnect(gr::top_block_sptr top_block)
|
||||||
|
{
|
||||||
|
if(top_block) { /* top_block is not null */};
|
||||||
|
// Nothing to disconnect
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
gr::basic_block_sptr GlonassL1CaTelemetryDecoder::get_left_block()
|
||||||
|
{
|
||||||
|
return telemetry_decoder_;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
gr::basic_block_sptr GlonassL1CaTelemetryDecoder::get_right_block()
|
||||||
|
{
|
||||||
|
return telemetry_decoder_;
|
||||||
|
}
|
@ -0,0 +1,92 @@
|
|||||||
|
/*!
|
||||||
|
* \file glonass_l1_ca_telemetry_decoder.h
|
||||||
|
* \brief Interface of an adapter of a GLONASS L1 C/A NAV data decoder block
|
||||||
|
* to a TelemetryDecoderInterface
|
||||||
|
* \note Code added as part of GSoC 2017 program
|
||||||
|
* \author Damian Miralles, 2017. dmiralles2009(at)gmail.com
|
||||||
|
*
|
||||||
|
* -------------------------------------------------------------------------
|
||||||
|
*
|
||||||
|
* Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors)
|
||||||
|
*
|
||||||
|
* GNSS-SDR is a software defined Global Navigation
|
||||||
|
* Satellite Systems receiver
|
||||||
|
*
|
||||||
|
* This file is part of GNSS-SDR.
|
||||||
|
*
|
||||||
|
* GNSS-SDR is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* GNSS-SDR is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with GNSS-SDR. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*
|
||||||
|
* -------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef GNSS_SDR_GLONASS_L1_CA_TELEMETRY_DECODER_H_
|
||||||
|
#define GNSS_SDR_GLONASS_L1_CA_TELEMETRY_DECODER_H_
|
||||||
|
|
||||||
|
#include <string>
|
||||||
|
#include "telemetry_decoder_interface.h"
|
||||||
|
#include "glonass_l1_ca_telemetry_decoder_cc.h"
|
||||||
|
|
||||||
|
|
||||||
|
class ConfigurationInterface;
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief This class implements a NAV data decoder for GLONASS L1 C/A
|
||||||
|
*/
|
||||||
|
class GlonassL1CaTelemetryDecoder : public TelemetryDecoderInterface
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
GlonassL1CaTelemetryDecoder(ConfigurationInterface* configuration,
|
||||||
|
std::string role,
|
||||||
|
unsigned int in_streams,
|
||||||
|
unsigned int out_streams);
|
||||||
|
|
||||||
|
virtual ~GlonassL1CaTelemetryDecoder();
|
||||||
|
std::string role() override
|
||||||
|
{
|
||||||
|
return role_;
|
||||||
|
}
|
||||||
|
|
||||||
|
//! Returns "GLONASS_L1_CA_Telemetry_Decoder"
|
||||||
|
std::string implementation() override
|
||||||
|
{
|
||||||
|
return "GLONASS_L1_CA_Telemetry_Decoder";
|
||||||
|
}
|
||||||
|
void connect(gr::top_block_sptr top_block) override;
|
||||||
|
void disconnect(gr::top_block_sptr top_block) override;
|
||||||
|
gr::basic_block_sptr get_left_block() override;
|
||||||
|
gr::basic_block_sptr get_right_block() override;
|
||||||
|
void set_satellite(const Gnss_Satellite & satellite) override;
|
||||||
|
void set_channel(int channel) override {telemetry_decoder_->set_channel(channel);}
|
||||||
|
void reset() override
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
size_t item_size() override
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
glonass_l1_ca_telemetry_decoder_cc_sptr telemetry_decoder_;
|
||||||
|
Gnss_Satellite satellite_;
|
||||||
|
int channel_;
|
||||||
|
bool dump_;
|
||||||
|
std::string dump_filename_;
|
||||||
|
std::string role_;
|
||||||
|
unsigned int in_streams_;
|
||||||
|
unsigned int out_streams_;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
@ -23,6 +23,7 @@ set(TELEMETRY_DECODER_GR_BLOCKS_SOURCES
|
|||||||
galileo_e1b_telemetry_decoder_cc.cc
|
galileo_e1b_telemetry_decoder_cc.cc
|
||||||
sbas_l1_telemetry_decoder_cc.cc
|
sbas_l1_telemetry_decoder_cc.cc
|
||||||
galileo_e5a_telemetry_decoder_cc.cc
|
galileo_e5a_telemetry_decoder_cc.cc
|
||||||
|
glonass_l1_ca_telemetry_decoder_cc.cc
|
||||||
)
|
)
|
||||||
|
|
||||||
include_directories(
|
include_directories(
|
||||||
|
@ -0,0 +1,453 @@
|
|||||||
|
/*!
|
||||||
|
* \file glonass_l1_ca_telemetry_decoder_cc.cc
|
||||||
|
* \brief Implementation of an adapter of a GLONASS L1 C/A NAV data decoder block
|
||||||
|
* to a TelemetryDecoderInterface
|
||||||
|
* \note Code added as part of GSoC 2017 program
|
||||||
|
* \author Damian Miralles, 2017. dmiralles2009(at)gmail.com
|
||||||
|
*
|
||||||
|
* -------------------------------------------------------------------------
|
||||||
|
*
|
||||||
|
* Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors)
|
||||||
|
*
|
||||||
|
* GNSS-SDR is a software defined Global Navigation
|
||||||
|
* Satellite Systems receiver
|
||||||
|
*
|
||||||
|
* This file is part of GNSS-SDR.
|
||||||
|
*
|
||||||
|
* GNSS-SDR is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* GNSS-SDR is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with GNSS-SDR. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*
|
||||||
|
* -------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#include "glonass_l1_ca_telemetry_decoder_cc.h"
|
||||||
|
#include <boost/lexical_cast.hpp>
|
||||||
|
#include <gnuradio/io_signature.h>
|
||||||
|
#include <glog/logging.h>
|
||||||
|
|
||||||
|
|
||||||
|
#define CRC_ERROR_LIMIT 6
|
||||||
|
|
||||||
|
using google::LogMessage;
|
||||||
|
|
||||||
|
|
||||||
|
glonass_l1_ca_telemetry_decoder_cc_sptr
|
||||||
|
glonass_l1_ca_make_telemetry_decoder_cc(const Gnss_Satellite & satellite, bool dump)
|
||||||
|
{
|
||||||
|
return glonass_l1_ca_telemetry_decoder_cc_sptr(new glonass_l1_ca_telemetry_decoder_cc(satellite, dump));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
glonass_l1_ca_telemetry_decoder_cc::glonass_l1_ca_telemetry_decoder_cc(
|
||||||
|
const Gnss_Satellite & satellite,
|
||||||
|
bool dump) :
|
||||||
|
gr::block("glonass_l1_ca_telemetry_decoder_cc", gr::io_signature::make(1, 1, sizeof(Gnss_Synchro)),
|
||||||
|
gr::io_signature::make(1, 1, sizeof(Gnss_Synchro)))
|
||||||
|
{
|
||||||
|
// Telemetry Bit transition synchronization port out
|
||||||
|
this->message_port_register_out(pmt::mp("preamble_timestamp_s"));
|
||||||
|
// Ephemeris data port out
|
||||||
|
this->message_port_register_out(pmt::mp("telemetry"));
|
||||||
|
// initialize internal vars
|
||||||
|
d_dump = dump;
|
||||||
|
d_satellite = Gnss_Satellite(satellite.get_system(), satellite.get_PRN());
|
||||||
|
LOG(INFO) << "Initializing GLONASS L1 CA TELEMETRY DECODING";
|
||||||
|
// Define the number of sampes per symbol. Notice that GLONASS has 2 rates,
|
||||||
|
//one for the navigation data and the other for the preamble information
|
||||||
|
d_samples_per_symbol = ( GLONASS_L1_CA_CODE_RATE_HZ / GLONASS_L1_CA_CODE_LENGTH_CHIPS ) / GLONASS_L1_CA_SYMBOL_RATE_BPS;
|
||||||
|
|
||||||
|
// Set the preamble information
|
||||||
|
unsigned short int preambles_bits[GLONASS_GNAV_PREAMBLE_LENGTH_BITS] = GLONASS_GNAV_PREAMBLE;
|
||||||
|
// Since preamble rate is different than navigation data rate we use a constant
|
||||||
|
d_symbols_per_preamble = GLONASS_GNAV_PREAMBLE_LENGTH_SYMBOLS;
|
||||||
|
|
||||||
|
memcpy(static_cast<unsigned short int*>(this->d_preambles_bits), static_cast<unsigned short int*>(preambles_bits), GLONASS_GNAV_PREAMBLE_LENGTH_BITS * sizeof(unsigned short int));
|
||||||
|
|
||||||
|
// preamble bits to sampled symbols
|
||||||
|
d_preambles_symbols = static_cast<signed int*>(malloc(sizeof(signed int) * d_symbols_per_preamble));
|
||||||
|
int n = 0;
|
||||||
|
for (int i = 0; i < GLONASS_GNAV_PREAMBLE_LENGTH_BITS; i++)
|
||||||
|
{
|
||||||
|
for (unsigned int j = 0; j < GLONASS_GNAV_TELEMETRY_SYMBOLS_PER_PREAMBLE_BIT; j++)
|
||||||
|
{
|
||||||
|
if (d_preambles_bits[i] == 1)
|
||||||
|
{
|
||||||
|
d_preambles_symbols[n] = 1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
d_preambles_symbols[n] = -1;
|
||||||
|
}
|
||||||
|
n++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
d_sample_counter = 0;
|
||||||
|
d_stat = 0;
|
||||||
|
d_preamble_index = 0;
|
||||||
|
|
||||||
|
d_flag_frame_sync = false;
|
||||||
|
|
||||||
|
d_flag_parity = false;
|
||||||
|
d_TOW_at_current_symbol = 0;
|
||||||
|
Flag_valid_word = false;
|
||||||
|
delta_t = 0;
|
||||||
|
d_CRC_error_counter = 0;
|
||||||
|
d_flag_preamble = false;
|
||||||
|
d_channel = 0;
|
||||||
|
flag_TOW_set = false;
|
||||||
|
d_preamble_time_samples = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
glonass_l1_ca_telemetry_decoder_cc::~glonass_l1_ca_telemetry_decoder_cc()
|
||||||
|
{
|
||||||
|
delete d_preambles_symbols;
|
||||||
|
if(d_dump_file.is_open() == true)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
d_dump_file.close();
|
||||||
|
}
|
||||||
|
catch(const std::exception & ex)
|
||||||
|
{
|
||||||
|
LOG(WARNING) << "Exception in destructor closing the dump file " << ex.what();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void glonass_l1_ca_telemetry_decoder_cc::decode_string(double *frame_symbols,int frame_length)
|
||||||
|
{
|
||||||
|
double chip_acc = 0.0;
|
||||||
|
int chip_acc_counter = 0;
|
||||||
|
|
||||||
|
// 1. Transform from symbols to bits
|
||||||
|
std::string bi_binary_code;
|
||||||
|
std::string relative_code;
|
||||||
|
std::string data_bits;
|
||||||
|
|
||||||
|
// Group samples into bi-binary code
|
||||||
|
for(int i = 0; i < (frame_length); i++)
|
||||||
|
{
|
||||||
|
chip_acc += frame_symbols[i];
|
||||||
|
chip_acc_counter += 1;
|
||||||
|
|
||||||
|
if(chip_acc_counter == (GLONASS_GNAV_TELEMETRY_SYMBOLS_PER_BIT))
|
||||||
|
{
|
||||||
|
if (chip_acc > 0)
|
||||||
|
{
|
||||||
|
bi_binary_code.push_back('1');
|
||||||
|
chip_acc_counter = 0;
|
||||||
|
chip_acc = 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
bi_binary_code.push_back('0');
|
||||||
|
chip_acc_counter = 0;
|
||||||
|
chip_acc = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Convert from bi-binary code to relative code
|
||||||
|
for(int i = 0; i < (GLONASS_GNAV_STRING_BITS); i++)
|
||||||
|
{
|
||||||
|
if(bi_binary_code[2*i] == '1' && bi_binary_code[2*i + 1] == '0')
|
||||||
|
{
|
||||||
|
relative_code.push_back('1');
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
relative_code.push_back('0');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Convert from relative code to data bits
|
||||||
|
data_bits.push_back('0');
|
||||||
|
for(int i = 1; i < (GLONASS_GNAV_STRING_BITS); i++)
|
||||||
|
{
|
||||||
|
data_bits.push_back(((relative_code[i-1]-'0') ^ (relative_code[i]-'0')) + '0');
|
||||||
|
}
|
||||||
|
|
||||||
|
// 2. Call the GLONASS GNAV string decoder
|
||||||
|
d_nav.string_decoder(data_bits);
|
||||||
|
|
||||||
|
// 3. Check operation executed correctly
|
||||||
|
if(d_nav.flag_CRC_test == true)
|
||||||
|
{
|
||||||
|
LOG(INFO) << "GLONASS GNAV CRC correct on channel " << d_channel << " from satellite "<< d_satellite;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
LOG(INFO) << "GLONASS GNAV CRC error on channel " << d_channel << " from satellite " << d_satellite;
|
||||||
|
}
|
||||||
|
// 4. Push the new navigation data to the queues
|
||||||
|
if (d_nav.have_new_ephemeris() == true)
|
||||||
|
{
|
||||||
|
// get object for this SV (mandatory)
|
||||||
|
d_nav.gnav_ephemeris.i_satellite_freq_channel = d_satellite.get_rf_link();
|
||||||
|
std::shared_ptr<Glonass_Gnav_Ephemeris> tmp_obj = std::make_shared<Glonass_Gnav_Ephemeris>(d_nav.get_ephemeris());
|
||||||
|
this->message_port_pub(pmt::mp("telemetry"), pmt::make_any(tmp_obj));
|
||||||
|
LOG(INFO) << "GLONASS GNAV Ephemeris have been received on channel" << d_channel << " from satellite " << d_satellite;
|
||||||
|
}
|
||||||
|
if (d_nav.have_new_utc_model() == true)
|
||||||
|
{
|
||||||
|
// get object for this SV (mandatory)
|
||||||
|
std::shared_ptr<Glonass_Gnav_Utc_Model> tmp_obj = std::make_shared<Glonass_Gnav_Utc_Model>(d_nav.get_utc_model());
|
||||||
|
this->message_port_pub(pmt::mp("telemetry"), pmt::make_any(tmp_obj));
|
||||||
|
LOG(INFO) << "GLONASS GNAV UTC Model have been received on channel" << d_channel << " from satellite " << d_satellite;
|
||||||
|
}
|
||||||
|
if (d_nav.have_new_almanac() == true)
|
||||||
|
{
|
||||||
|
unsigned int slot_nbr = d_nav.i_alm_satellite_slot_number;
|
||||||
|
std::shared_ptr<Glonass_Gnav_Almanac> tmp_obj= std::make_shared<Glonass_Gnav_Almanac>(d_nav.get_almanac(slot_nbr));
|
||||||
|
this->message_port_pub(pmt::mp("telemetry"), pmt::make_any(tmp_obj));
|
||||||
|
LOG(INFO) << "GLONASS GNAV Almanac have been received on channel" << d_channel << " in slot number " << slot_nbr;
|
||||||
|
}
|
||||||
|
// 5. Update satellite information on system
|
||||||
|
if(d_nav.flag_update_slot_number == true)
|
||||||
|
{
|
||||||
|
LOG(INFO) << "GLONASS GNAV Slot Number Identified on channel " << d_channel;
|
||||||
|
d_satellite.update_PRN(d_nav.gnav_ephemeris.d_n);
|
||||||
|
d_satellite.what_block(d_satellite.get_system(), d_nav.gnav_ephemeris.d_n);
|
||||||
|
d_nav.flag_update_slot_number = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int glonass_l1_ca_telemetry_decoder_cc::general_work (int noutput_items __attribute__((unused)), gr_vector_int &ninput_items __attribute__((unused)),
|
||||||
|
gr_vector_const_void_star &input_items, gr_vector_void_star &output_items)
|
||||||
|
{
|
||||||
|
int corr_value = 0;
|
||||||
|
int preamble_diff = 0;
|
||||||
|
|
||||||
|
Gnss_Synchro **out = reinterpret_cast<Gnss_Synchro **>(&output_items[0]); // Get the output buffer pointer
|
||||||
|
const Gnss_Synchro **in = reinterpret_cast<const Gnss_Synchro **>(&input_items[0]); // Get the input buffer pointer
|
||||||
|
|
||||||
|
Gnss_Synchro current_symbol; //structure to save the synchronization information and send the output object to the next block
|
||||||
|
//1. Copy the current tracking output
|
||||||
|
current_symbol = in[0][0];
|
||||||
|
d_symbol_history.push_back(current_symbol); //add new symbol to the symbol queue
|
||||||
|
d_sample_counter++; //count for the processed samples
|
||||||
|
consume_each(1);
|
||||||
|
|
||||||
|
d_flag_preamble = false;
|
||||||
|
unsigned int required_symbols = GLONASS_GNAV_STRING_SYMBOLS;
|
||||||
|
|
||||||
|
if (d_symbol_history.size()>required_symbols)
|
||||||
|
{
|
||||||
|
//******* preamble correlation ********
|
||||||
|
for (int i = 0; i < d_symbols_per_preamble; i++)
|
||||||
|
{
|
||||||
|
if (d_symbol_history.at(i).Prompt_I < 0) // symbols clipping
|
||||||
|
{
|
||||||
|
corr_value -= d_preambles_symbols[i];
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
corr_value += d_preambles_symbols[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//******* frame sync ******************
|
||||||
|
if (d_stat == 0) //no preamble information
|
||||||
|
{
|
||||||
|
if (abs(corr_value) >= d_symbols_per_preamble)
|
||||||
|
{
|
||||||
|
// Record the preamble sample stamp
|
||||||
|
d_preamble_index = d_sample_counter;
|
||||||
|
LOG(INFO) << "Preamble detection for GLONASS L1 C/A SAT " << this->d_satellite;
|
||||||
|
// Enter into frame pre-detection status
|
||||||
|
d_stat = 1;
|
||||||
|
d_preamble_time_samples = d_symbol_history.at(0).Tracking_sample_counter; // record the preamble sample stamp
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (d_stat == 1) // posible preamble lock
|
||||||
|
{
|
||||||
|
if (abs(corr_value) >= d_symbols_per_preamble)
|
||||||
|
{
|
||||||
|
//check preamble separation
|
||||||
|
preamble_diff = d_sample_counter - d_preamble_index;
|
||||||
|
// Record the PRN start sample index associated to the preamble
|
||||||
|
d_preamble_time_samples = d_symbol_history.at(0).Tracking_sample_counter;
|
||||||
|
if (abs(preamble_diff - GLONASS_GNAV_PREAMBLE_PERIOD_SYMBOLS) == 0)
|
||||||
|
{
|
||||||
|
//try to decode frame
|
||||||
|
LOG(INFO) << "Starting string decoder for GLONASS L1 C/A SAT " << this->d_satellite;
|
||||||
|
d_preamble_index = d_sample_counter; //record the preamble sample stamp
|
||||||
|
d_stat = 2;
|
||||||
|
// send asynchronous message to tracking to inform of frame sync and extend correlation time
|
||||||
|
pmt::pmt_t value = pmt::from_double(static_cast<double>(d_preamble_time_samples) / static_cast<double>(d_symbol_history.at(0).fs) - 0.001);
|
||||||
|
this->message_port_pub(pmt::mp("preamble_timestamp_s"), value);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (preamble_diff > GLONASS_GNAV_PREAMBLE_PERIOD_SYMBOLS)
|
||||||
|
{
|
||||||
|
d_stat = 0; // start again
|
||||||
|
}
|
||||||
|
DLOG(INFO) << "Failed string decoder for GLONASS L1 C/A SAT " << this->d_satellite;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (d_stat == 2)
|
||||||
|
{
|
||||||
|
// FIXME: The preamble index marks the first symbol of the string count. Here I just wait for another full string to be received before processing
|
||||||
|
if (d_sample_counter == d_preamble_index + GLONASS_GNAV_STRING_SYMBOLS)
|
||||||
|
{
|
||||||
|
// NEW GLONASS string received
|
||||||
|
// 0. fetch the symbols into an array
|
||||||
|
int string_length = GLONASS_GNAV_STRING_SYMBOLS - d_symbols_per_preamble;
|
||||||
|
double string_symbols[GLONASS_GNAV_DATA_SYMBOLS] = {0};
|
||||||
|
|
||||||
|
//******* SYMBOL TO BIT *******
|
||||||
|
for (int i = 0; i < string_length; i++)
|
||||||
|
{
|
||||||
|
if (corr_value > 0)
|
||||||
|
{
|
||||||
|
string_symbols[i] = d_symbol_history.at(i + d_symbols_per_preamble).Prompt_I; // because last symbol of the preamble is just received now!
|
||||||
|
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
string_symbols[i] = -d_symbol_history.at(i + d_symbols_per_preamble).Prompt_I; // because last symbol of the preamble is just received now!
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//call the decoder
|
||||||
|
decode_string(string_symbols, string_length);
|
||||||
|
if (d_nav.flag_CRC_test == true)
|
||||||
|
{
|
||||||
|
d_CRC_error_counter = 0;
|
||||||
|
d_flag_preamble = true; //valid preamble indicator (initialized to false every work())
|
||||||
|
d_preamble_index = d_sample_counter; //record the preamble sample stamp (t_P)
|
||||||
|
if (!d_flag_frame_sync)
|
||||||
|
{
|
||||||
|
d_flag_frame_sync = true;
|
||||||
|
DLOG(INFO) << " Frame sync SAT " << this->d_satellite << " with preamble start at "
|
||||||
|
<< d_symbol_history.at(0).Tracking_sample_counter << " [samples]";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
d_CRC_error_counter++;
|
||||||
|
d_preamble_index = d_sample_counter; //record the preamble sample stamp
|
||||||
|
if (d_CRC_error_counter > CRC_ERROR_LIMIT)
|
||||||
|
{
|
||||||
|
LOG(INFO) << "Lost of frame sync SAT " << this->d_satellite;
|
||||||
|
d_flag_frame_sync = false;
|
||||||
|
d_stat = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// UPDATE GNSS SYNCHRO DATA
|
||||||
|
//2. Add the telemetry decoder information
|
||||||
|
if (this->d_flag_preamble == true and d_nav.flag_TOW_new == true)
|
||||||
|
//update TOW at the preamble instant
|
||||||
|
{
|
||||||
|
d_TOW_at_current_symbol = floor((d_nav.gnav_ephemeris.d_TOW-GLONASS_GNAV_PREAMBLE_DURATION_S)*1000)/1000;
|
||||||
|
d_nav.flag_TOW_new = false;
|
||||||
|
|
||||||
|
}
|
||||||
|
else //if there is not a new preamble, we define the TOW of the current symbol
|
||||||
|
{
|
||||||
|
d_TOW_at_current_symbol = d_TOW_at_current_symbol + GLONASS_L1_CA_CODE_PERIOD;
|
||||||
|
}
|
||||||
|
|
||||||
|
//if (d_flag_frame_sync == true and d_nav.flag_TOW_set==true and d_nav.flag_CRC_test == true)
|
||||||
|
|
||||||
|
// if(d_nav.flag_GGTO_1 == true and d_nav.flag_GGTO_2 == true and d_nav.flag_GGTO_3 == true and d_nav.flag_GGTO_4 == true) //all GGTO parameters arrived
|
||||||
|
// {
|
||||||
|
// delta_t = d_nav.A_0G_10 + d_nav.A_1G_10 * (d_TOW_at_current_symbol - d_nav.t_0G_10 + 604800.0 * (fmod((d_nav.WN_0 - d_nav.WN_0G_10), 64)));
|
||||||
|
// }
|
||||||
|
|
||||||
|
if (d_flag_frame_sync == true and d_nav.flag_TOW_set == true)
|
||||||
|
{
|
||||||
|
current_symbol.Flag_valid_word = true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
current_symbol.Flag_valid_word = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
current_symbol.PRN = this->d_satellite.get_PRN();
|
||||||
|
current_symbol.TOW_at_current_symbol_s = d_TOW_at_current_symbol;
|
||||||
|
current_symbol.TOW_at_current_symbol_s -= delta_t; // Galileo to GPS TOW
|
||||||
|
|
||||||
|
if(d_dump == true)
|
||||||
|
{
|
||||||
|
// MULTIPLEXED FILE RECORDING - Record results to file
|
||||||
|
try
|
||||||
|
{
|
||||||
|
double tmp_double;
|
||||||
|
unsigned long int tmp_ulong_int;
|
||||||
|
tmp_double = d_TOW_at_current_symbol;
|
||||||
|
d_dump_file.write(reinterpret_cast<char*>(&tmp_double), sizeof(double));
|
||||||
|
tmp_ulong_int = current_symbol.Tracking_sample_counter;
|
||||||
|
d_dump_file.write(reinterpret_cast<char*>(&tmp_ulong_int), sizeof(unsigned long int));
|
||||||
|
tmp_double = 0;
|
||||||
|
d_dump_file.write(reinterpret_cast<char*>(&tmp_double), sizeof(double));
|
||||||
|
}
|
||||||
|
catch (const std::ifstream::failure & e)
|
||||||
|
{
|
||||||
|
LOG(WARNING) << "Exception writing observables dump file " << e.what();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// remove used symbols from history
|
||||||
|
if (d_symbol_history.size()>required_symbols)
|
||||||
|
{
|
||||||
|
d_symbol_history.pop_front();
|
||||||
|
}
|
||||||
|
//3. Make the output (copy the object contents to the GNURadio reserved memory)
|
||||||
|
*out[0] = current_symbol;
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void glonass_l1_ca_telemetry_decoder_cc::set_satellite(const Gnss_Satellite & satellite)
|
||||||
|
{
|
||||||
|
d_satellite = Gnss_Satellite(satellite.get_system(), satellite.get_PRN());
|
||||||
|
DLOG(INFO) << "Setting decoder Finite State Machine to satellite "<< d_satellite;
|
||||||
|
DLOG(INFO) << "Navigation Satellite set to " << d_satellite;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void glonass_l1_ca_telemetry_decoder_cc::set_channel(int channel)
|
||||||
|
{
|
||||||
|
d_channel = channel;
|
||||||
|
LOG(INFO) << "Navigation channel set to " << channel;
|
||||||
|
// ############# ENABLE DATA FILE LOG #################
|
||||||
|
if (d_dump == true)
|
||||||
|
{
|
||||||
|
if (d_dump_file.is_open() == false)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
d_dump_filename = "telemetry";
|
||||||
|
d_dump_filename.append(boost::lexical_cast<std::string>(d_channel));
|
||||||
|
d_dump_filename.append(".dat");
|
||||||
|
d_dump_file.exceptions ( std::ifstream::failbit | std::ifstream::badbit );
|
||||||
|
d_dump_file.open(d_dump_filename.c_str(), std::ios::out | std::ios::binary);
|
||||||
|
LOG(INFO) << "Telemetry decoder dump enabled on channel " << d_channel << " Log file: " << d_dump_filename.c_str();
|
||||||
|
}
|
||||||
|
catch (const std::ifstream::failure& e)
|
||||||
|
{
|
||||||
|
LOG(WARNING) << "channel " << d_channel << ": exception opening Glonass TLM dump file. " << e.what();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,120 @@
|
|||||||
|
/*!
|
||||||
|
* \file glonass_l1_ca_telemetry_decoder_cc.h
|
||||||
|
* \brief Implementation of an adapter of a GLONASS L1 C/A NAV data decoder block
|
||||||
|
* to a TelemetryDecoderInterface
|
||||||
|
* \note Code added as part of GSoC 2017 program
|
||||||
|
* \author Damian Miralles, 2017. dmiralles2009(at)gmail.com
|
||||||
|
*
|
||||||
|
* -------------------------------------------------------------------------
|
||||||
|
*
|
||||||
|
* Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors)
|
||||||
|
*
|
||||||
|
* GNSS-SDR is a software defined Global Navigation
|
||||||
|
* Satellite Systems receiver
|
||||||
|
*
|
||||||
|
* This file is part of GNSS-SDR.
|
||||||
|
*
|
||||||
|
* GNSS-SDR is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* GNSS-SDR is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with GNSS-SDR. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*
|
||||||
|
* -------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef GNSS_SDR_GLONASS_L1_CA_TELEMETRY_DECODER_CC_H
|
||||||
|
#define GNSS_SDR_GLONASS_L1_CA_TELEMETRY_DECODER_CC_H
|
||||||
|
|
||||||
|
#include <fstream>
|
||||||
|
#include <string>
|
||||||
|
#include <gnuradio/block.h>
|
||||||
|
#include "GLONASS_L1_CA.h"
|
||||||
|
#include "concurrent_queue.h"
|
||||||
|
#include "gnss_satellite.h"
|
||||||
|
#include "glonass_gnav_navigation_message.h"
|
||||||
|
#include "glonass_gnav_ephemeris.h"
|
||||||
|
#include "glonass_gnav_almanac.h"
|
||||||
|
#include "glonass_gnav_utc_model.h"
|
||||||
|
#include "gnss_synchro.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
class glonass_l1_ca_telemetry_decoder_cc;
|
||||||
|
|
||||||
|
typedef boost::shared_ptr<glonass_l1_ca_telemetry_decoder_cc> glonass_l1_ca_telemetry_decoder_cc_sptr;
|
||||||
|
|
||||||
|
glonass_l1_ca_telemetry_decoder_cc_sptr glonass_l1_ca_make_telemetry_decoder_cc(const Gnss_Satellite & satellite, bool dump);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief This class implements a block that decodes the GNAV data defined in GLONASS ICD v5.1
|
||||||
|
* \note Code added as part of GSoC 2017 program
|
||||||
|
* \see <a href="http://russianspacesystems.ru/wp-content/uploads/2016/08/ICD_GLONASS_eng_v5.1.pdf">GLONASS ICD</a>
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
class glonass_l1_ca_telemetry_decoder_cc : public gr::block
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
~glonass_l1_ca_telemetry_decoder_cc(); //!< Class destructor
|
||||||
|
void set_satellite(const Gnss_Satellite & satellite); //!< Set satellite PRN
|
||||||
|
void set_channel(int channel); //!< Set receiver's channel
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief This is where all signal processing takes place
|
||||||
|
*/
|
||||||
|
int general_work (int noutput_items, gr_vector_int &ninput_items,
|
||||||
|
gr_vector_const_void_star &input_items, gr_vector_void_star &output_items);
|
||||||
|
|
||||||
|
private:
|
||||||
|
friend glonass_l1_ca_telemetry_decoder_cc_sptr
|
||||||
|
glonass_l1_ca_make_telemetry_decoder_cc(const Gnss_Satellite & satellite, bool dump);
|
||||||
|
glonass_l1_ca_telemetry_decoder_cc(const Gnss_Satellite & satellite, bool dump);
|
||||||
|
|
||||||
|
void decode_string(double *symbols, int frame_length);
|
||||||
|
|
||||||
|
//!< Help with coherent tracking
|
||||||
|
double d_preamble_time_samples;
|
||||||
|
|
||||||
|
//!< Preamble decoding
|
||||||
|
unsigned short int d_preambles_bits[GLONASS_GNAV_PREAMBLE_LENGTH_BITS];
|
||||||
|
int *d_preambles_symbols;
|
||||||
|
unsigned int d_samples_per_symbol;
|
||||||
|
int d_symbols_per_preamble;
|
||||||
|
|
||||||
|
//!< Storage for incoming data
|
||||||
|
std::deque<Gnss_Synchro> d_symbol_history;
|
||||||
|
|
||||||
|
//!< Variables for internal functionality
|
||||||
|
long unsigned int d_sample_counter; //!< Sample counter as an index (1,2,3,..etc) indicating number of samples processed
|
||||||
|
long unsigned int d_preamble_index; //!< Index of sample number where preamble was found
|
||||||
|
unsigned int d_stat; //!< Status of decoder
|
||||||
|
bool d_flag_frame_sync; //!< Indicate when a frame sync is achieved
|
||||||
|
bool d_flag_parity; //!< Flag indicating when parity check was achieved (crc check)
|
||||||
|
bool d_flag_preamble; //!< Flag indicating when preamble was found
|
||||||
|
int d_CRC_error_counter; //!< Number of failed CRC operations
|
||||||
|
bool flag_TOW_set; //!< Indicates when time of week is set
|
||||||
|
double delta_t; //!< GPS-GLONASS time offset
|
||||||
|
|
||||||
|
//!< Navigation Message variable
|
||||||
|
Glonass_Gnav_Navigation_Message d_nav;
|
||||||
|
|
||||||
|
//!< Values to populate gnss synchronization structure
|
||||||
|
double d_TOW_at_current_symbol;
|
||||||
|
bool Flag_valid_word;
|
||||||
|
|
||||||
|
//!< Satellite Information and logging capacity
|
||||||
|
Gnss_Satellite d_satellite;
|
||||||
|
int d_channel;
|
||||||
|
bool d_dump;
|
||||||
|
std::string d_dump_filename;
|
||||||
|
std::ofstream d_dump_file;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
@ -33,6 +33,8 @@ set(TRACKING_ADAPTER_SOURCES
|
|||||||
gps_l1_ca_tcp_connector_tracking.cc
|
gps_l1_ca_tcp_connector_tracking.cc
|
||||||
galileo_e5a_dll_pll_tracking.cc
|
galileo_e5a_dll_pll_tracking.cc
|
||||||
gps_l2_m_dll_pll_tracking.cc
|
gps_l2_m_dll_pll_tracking.cc
|
||||||
|
glonass_l1_ca_dll_pll_tracking.cc
|
||||||
|
glonass_l1_ca_dll_pll_c_aid_tracking.cc
|
||||||
gps_l5i_dll_pll_tracking.cc
|
gps_l5i_dll_pll_tracking.cc
|
||||||
${OPT_TRACKING_ADAPTERS}
|
${OPT_TRACKING_ADAPTERS}
|
||||||
)
|
)
|
||||||
|
@ -0,0 +1,237 @@
|
|||||||
|
/*!
|
||||||
|
* \file glonass_l1_ca_dll_pll_c_aid_tracking.cc
|
||||||
|
* \brief Interface of an adapter of a DLL+PLL tracking loop block
|
||||||
|
* for Glonass L1 C/A to a TrackingInterface
|
||||||
|
* \author Gabriel Araujo, 2017. gabriel.araujo.5000(at)gmail.com
|
||||||
|
* \author Luis Esteve, 2017. luis(at)epsilon-formacion.com
|
||||||
|
* \author Damian Miralles, 2017. dmiralles2009(at)gmail.com
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* Code DLL + carrier PLL according to the algorithms described in:
|
||||||
|
* K.Borre, D.M.Akos, N.Bertelsen, P.Rinder, and S.H.Jensen,
|
||||||
|
* A Software-Defined GPS and Galileo Receiver. A Single-Frequency
|
||||||
|
* Approach, Birkha user, 2007
|
||||||
|
*
|
||||||
|
* -------------------------------------------------------------------------
|
||||||
|
*
|
||||||
|
* Copyright (C) 2010-2017 (see AUTHORS file for a list of contributors)
|
||||||
|
*
|
||||||
|
* GNSS-SDR is a software defined Global Navigation
|
||||||
|
* Satellite Systems receiver
|
||||||
|
*
|
||||||
|
* This file is part of GNSS-SDR.
|
||||||
|
*
|
||||||
|
* GNSS-SDR is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* GNSS-SDR is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with GNSS-SDR. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*
|
||||||
|
* -------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "glonass_l1_ca_dll_pll_c_aid_tracking.h"
|
||||||
|
#include <glog/logging.h>
|
||||||
|
#include "GLONASS_L1_CA.h"
|
||||||
|
#include "configuration_interface.h"
|
||||||
|
|
||||||
|
|
||||||
|
using google::LogMessage;
|
||||||
|
|
||||||
|
GlonassL1CaDllPllCAidTracking::GlonassL1CaDllPllCAidTracking(
|
||||||
|
ConfigurationInterface* configuration, std::string role,
|
||||||
|
unsigned int in_streams, unsigned int out_streams) :
|
||||||
|
role_(role), in_streams_(in_streams), out_streams_(out_streams)
|
||||||
|
{
|
||||||
|
DLOG(INFO) << "role " << role;
|
||||||
|
//################# CONFIGURATION PARAMETERS ########################
|
||||||
|
int fs_in;
|
||||||
|
int vector_length;
|
||||||
|
int f_if;
|
||||||
|
bool dump;
|
||||||
|
std::string dump_filename;
|
||||||
|
std::string default_item_type = "gr_complex";
|
||||||
|
float pll_bw_hz;
|
||||||
|
float pll_bw_narrow_hz;
|
||||||
|
float dll_bw_hz;
|
||||||
|
float dll_bw_narrow_hz;
|
||||||
|
float early_late_space_chips;
|
||||||
|
item_type_ = configuration->property(role + ".item_type", default_item_type);
|
||||||
|
//vector_length = configuration->property(role + ".vector_length", 2048);
|
||||||
|
int fs_in_deprecated = configuration->property("GNSS-SDR.internal_fs_hz", 2048000);
|
||||||
|
fs_in = configuration->property("GNSS-SDR.internal_fs_sps", fs_in_deprecated);
|
||||||
|
f_if = configuration->property(role + ".if", 0);
|
||||||
|
dump = configuration->property(role + ".dump", false);
|
||||||
|
pll_bw_hz = configuration->property(role + ".pll_bw_hz", 50.0);
|
||||||
|
dll_bw_hz = configuration->property(role + ".dll_bw_hz", 2.0);
|
||||||
|
pll_bw_narrow_hz = configuration->property(role + ".pll_bw_narrow_hz", 20.0);
|
||||||
|
dll_bw_narrow_hz = configuration->property(role + ".dll_bw_narrow_hz", 2.0);
|
||||||
|
int extend_correlation_ms;
|
||||||
|
extend_correlation_ms = configuration->property(role + ".extend_correlation_ms", 1);
|
||||||
|
|
||||||
|
early_late_space_chips = configuration->property(role + ".early_late_space_chips", 0.5);
|
||||||
|
std::string default_dump_filename = "./track_ch";
|
||||||
|
dump_filename = configuration->property(role + ".dump_filename",
|
||||||
|
default_dump_filename); //unused!
|
||||||
|
vector_length = std::round(fs_in / (GLONASS_L1_CA_CODE_RATE_HZ / GLONASS_L1_CA_CODE_LENGTH_CHIPS));
|
||||||
|
|
||||||
|
//################# MAKE TRACKING GNURadio object ###################
|
||||||
|
if (item_type_.compare("gr_complex") == 0)
|
||||||
|
{
|
||||||
|
item_size_ = sizeof(gr_complex);
|
||||||
|
tracking_cc = glonass_l1_ca_dll_pll_c_aid_make_tracking_cc(
|
||||||
|
f_if,
|
||||||
|
fs_in,
|
||||||
|
vector_length,
|
||||||
|
dump,
|
||||||
|
dump_filename,
|
||||||
|
pll_bw_hz,
|
||||||
|
dll_bw_hz,
|
||||||
|
pll_bw_narrow_hz,
|
||||||
|
dll_bw_narrow_hz,
|
||||||
|
extend_correlation_ms,
|
||||||
|
early_late_space_chips);
|
||||||
|
DLOG(INFO) << "tracking(" << tracking_cc->unique_id() << ")";
|
||||||
|
}
|
||||||
|
else if(item_type_.compare("cshort") == 0)
|
||||||
|
{
|
||||||
|
item_size_ = sizeof(lv_16sc_t);
|
||||||
|
tracking_sc = glonass_l1_ca_dll_pll_c_aid_make_tracking_sc(
|
||||||
|
f_if,
|
||||||
|
fs_in,
|
||||||
|
vector_length,
|
||||||
|
dump,
|
||||||
|
dump_filename,
|
||||||
|
pll_bw_hz,
|
||||||
|
dll_bw_hz,
|
||||||
|
pll_bw_narrow_hz,
|
||||||
|
dll_bw_narrow_hz,
|
||||||
|
extend_correlation_ms,
|
||||||
|
early_late_space_chips);
|
||||||
|
DLOG(INFO) << "tracking(" << tracking_sc->unique_id() << ")";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
item_size_ = sizeof(gr_complex);
|
||||||
|
LOG(WARNING) << item_type_ << " unknown tracking item type.";
|
||||||
|
}
|
||||||
|
channel_ = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
GlonassL1CaDllPllCAidTracking::~GlonassL1CaDllPllCAidTracking()
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
void GlonassL1CaDllPllCAidTracking::start_tracking()
|
||||||
|
{
|
||||||
|
|
||||||
|
if (item_type_.compare("gr_complex") == 0)
|
||||||
|
{
|
||||||
|
tracking_cc->start_tracking();
|
||||||
|
}
|
||||||
|
else if (item_type_.compare("cshort") == 0)
|
||||||
|
{
|
||||||
|
tracking_sc->start_tracking();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
LOG(WARNING) << item_type_ << " unknown tracking item type";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Set tracking channel unique ID
|
||||||
|
*/
|
||||||
|
void GlonassL1CaDllPllCAidTracking::set_channel(unsigned int channel)
|
||||||
|
{
|
||||||
|
channel_ = channel;
|
||||||
|
|
||||||
|
if (item_type_.compare("gr_complex") == 0)
|
||||||
|
{
|
||||||
|
tracking_cc->set_channel(channel);
|
||||||
|
}
|
||||||
|
else if (item_type_.compare("cshort") == 0)
|
||||||
|
{
|
||||||
|
tracking_sc->set_channel(channel);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
LOG(WARNING) << item_type_ << " unknown tracking item type";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void GlonassL1CaDllPllCAidTracking::set_gnss_synchro(Gnss_Synchro* p_gnss_synchro)
|
||||||
|
{
|
||||||
|
if (item_type_.compare("gr_complex") == 0)
|
||||||
|
{
|
||||||
|
tracking_cc->set_gnss_synchro(p_gnss_synchro);
|
||||||
|
}
|
||||||
|
else if (item_type_.compare("cshort") == 0)
|
||||||
|
{
|
||||||
|
tracking_sc->set_gnss_synchro(p_gnss_synchro);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
LOG(WARNING) << item_type_ << " unknown tracking item type";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void GlonassL1CaDllPllCAidTracking::connect(gr::top_block_sptr top_block)
|
||||||
|
{
|
||||||
|
if(top_block) { /* top_block is not null */};
|
||||||
|
//nothing to connect, now the tracking uses gr_sync_decimator
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void GlonassL1CaDllPllCAidTracking::disconnect(gr::top_block_sptr top_block)
|
||||||
|
{
|
||||||
|
if(top_block) { /* top_block is not null */};
|
||||||
|
//nothing to disconnect, now the tracking uses gr_sync_decimator
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
gr::basic_block_sptr GlonassL1CaDllPllCAidTracking::get_left_block()
|
||||||
|
{
|
||||||
|
if (item_type_.compare("gr_complex") == 0)
|
||||||
|
{
|
||||||
|
return tracking_cc;
|
||||||
|
}
|
||||||
|
else if (item_type_.compare("cshort") == 0)
|
||||||
|
{
|
||||||
|
return tracking_sc;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
LOG(WARNING) << item_type_ << " unknown tracking item type";
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
gr::basic_block_sptr GlonassL1CaDllPllCAidTracking::get_right_block()
|
||||||
|
{
|
||||||
|
if (item_type_.compare("gr_complex") == 0)
|
||||||
|
{
|
||||||
|
return tracking_cc;
|
||||||
|
}
|
||||||
|
else if (item_type_.compare("cshort") == 0)
|
||||||
|
{
|
||||||
|
return tracking_sc;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
LOG(WARNING) << item_type_ << " unknown tracking item type";
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,109 @@
|
|||||||
|
/*!
|
||||||
|
* \file glonass_l1_ca_dll_pll_c_aid_tracking.h
|
||||||
|
* \brief Interface of an adapter of a DLL+PLL tracking loop block
|
||||||
|
* for Glonass L1 C/A to a TrackingInterface
|
||||||
|
* \author Gabriel Araujo, 2017. gabriel.araujo.5000(at)gmail.com
|
||||||
|
* \author Luis Esteve, 2017. luis(at)epsilon-formacion.com
|
||||||
|
* \author Damian Miralles, 2017. dmiralles2009(at)gmail.com
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* Code DLL + carrier PLL according to the algorithms described in:
|
||||||
|
* K.Borre, D.M.Akos, N.Bertelsen, P.Rinder, and S.H.Jensen,
|
||||||
|
* A Software-Defined GPS and Galileo Receiver. A Single-Frequency
|
||||||
|
* Approach, Birkha user, 2007
|
||||||
|
*
|
||||||
|
* -------------------------------------------------------------------------
|
||||||
|
*
|
||||||
|
* Copyright (C) 2010-2017 (see AUTHORS file for a list of contributors)
|
||||||
|
*
|
||||||
|
* GNSS-SDR is a software defined Global Navigation
|
||||||
|
* Satellite Systems receiver
|
||||||
|
*
|
||||||
|
* This file is part of GNSS-SDR.
|
||||||
|
*
|
||||||
|
* GNSS-SDR is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* GNSS-SDR is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with GNSS-SDR. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*
|
||||||
|
* -------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef GNSS_SDR_GLONASS_L1_CA_DLL_PLL_C_AID_TRACKING_H_
|
||||||
|
#define GNSS_SDR_GLONASS_L1_CA_DLL_PLL_C_AID_TRACKING_H_
|
||||||
|
|
||||||
|
#include <string>
|
||||||
|
#include "tracking_interface.h"
|
||||||
|
#include "glonass_l1_ca_dll_pll_c_aid_tracking_cc.h"
|
||||||
|
#include "glonass_l1_ca_dll_pll_c_aid_tracking_sc.h"
|
||||||
|
|
||||||
|
|
||||||
|
class ConfigurationInterface;
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief This class implements a code DLL + carrier PLL tracking loop
|
||||||
|
*/
|
||||||
|
class GlonassL1CaDllPllCAidTracking : public TrackingInterface
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
GlonassL1CaDllPllCAidTracking(ConfigurationInterface* configuration,
|
||||||
|
std::string role,
|
||||||
|
unsigned int in_streams,
|
||||||
|
unsigned int out_streams);
|
||||||
|
|
||||||
|
virtual ~GlonassL1CaDllPllCAidTracking();
|
||||||
|
|
||||||
|
inline std::string role() override
|
||||||
|
{
|
||||||
|
return role_;
|
||||||
|
}
|
||||||
|
|
||||||
|
//! Returns "GLONASS_L1_CA_DLL_PLL_C_Aid_Tracking"
|
||||||
|
inline std::string implementation() override
|
||||||
|
{
|
||||||
|
return "GLONASS_L1_CA_DLL_PLL_C_Aid_Tracking";
|
||||||
|
}
|
||||||
|
|
||||||
|
inline size_t item_size() override
|
||||||
|
{
|
||||||
|
return item_size_;
|
||||||
|
}
|
||||||
|
|
||||||
|
void connect(gr::top_block_sptr top_block) override;
|
||||||
|
void disconnect(gr::top_block_sptr top_block) override;
|
||||||
|
gr::basic_block_sptr get_left_block() override;
|
||||||
|
gr::basic_block_sptr get_right_block() override;
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Set tracking channel unique ID
|
||||||
|
*/
|
||||||
|
void set_channel(unsigned int channel) override;
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Set acquisition/tracking common Gnss_Synchro object pointer
|
||||||
|
* to efficiently exchange synchronization data between acquisition and tracking blocks
|
||||||
|
*/
|
||||||
|
void set_gnss_synchro(Gnss_Synchro* p_gnss_synchro) override;
|
||||||
|
|
||||||
|
void start_tracking() override;
|
||||||
|
|
||||||
|
private:
|
||||||
|
glonass_l1_ca_dll_pll_c_aid_tracking_cc_sptr tracking_cc;
|
||||||
|
glonass_l1_ca_dll_pll_c_aid_tracking_sc_sptr tracking_sc;
|
||||||
|
size_t item_size_;
|
||||||
|
std::string item_type_;
|
||||||
|
unsigned int channel_;
|
||||||
|
std::string role_;
|
||||||
|
unsigned int in_streams_;
|
||||||
|
unsigned int out_streams_;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // GNSS_SDR_GLONASS_L1_CA_DLL_PLL_C_AID_TRACKING_H_
|
@ -0,0 +1,149 @@
|
|||||||
|
/*!
|
||||||
|
* \file glonass_l1_ca_dll_pll_tracking.cc
|
||||||
|
* \brief Interface of an adapter of a DLL+PLL tracking loop block
|
||||||
|
* for Glonass L1 C/A to a TrackingInterface
|
||||||
|
* \author Gabriel Araujo, 2017. gabriel.araujo.5000(at)gmail.com
|
||||||
|
* \author Luis Esteve, 2017. luis(at)epsilon-formacion.com
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* Code DLL + carrier PLL according to the algorithms described in:
|
||||||
|
* K.Borre, D.M.Akos, N.Bertelsen, P.Rinder, and S.H.Jensen,
|
||||||
|
* A Software-Defined GPS and Galileo Receiver. A Single-Frequency
|
||||||
|
* Approach, Birkha user, 2007
|
||||||
|
*
|
||||||
|
* -------------------------------------------------------------------------
|
||||||
|
*
|
||||||
|
* Copyright (C) 2010-2017 (see AUTHORS file for a list of contributors)
|
||||||
|
*
|
||||||
|
* GNSS-SDR is a software defined Global Navigation
|
||||||
|
* Satellite Systems receiver
|
||||||
|
*
|
||||||
|
* This file is part of GNSS-SDR.
|
||||||
|
*
|
||||||
|
* GNSS-SDR is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* GNSS-SDR is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with GNSS-SDR. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*
|
||||||
|
* -------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "glonass_l1_ca_dll_pll_tracking.h"
|
||||||
|
#include <glog/logging.h>
|
||||||
|
#include "GLONASS_L1_CA.h"
|
||||||
|
#include "configuration_interface.h"
|
||||||
|
|
||||||
|
|
||||||
|
using google::LogMessage;
|
||||||
|
|
||||||
|
GlonassL1CaDllPllTracking::GlonassL1CaDllPllTracking(
|
||||||
|
ConfigurationInterface* configuration, std::string role,
|
||||||
|
unsigned int in_streams, unsigned int out_streams) :
|
||||||
|
role_(role), in_streams_(in_streams), out_streams_(out_streams)
|
||||||
|
{
|
||||||
|
DLOG(INFO) << "role " << role;
|
||||||
|
//################# CONFIGURATION PARAMETERS ########################
|
||||||
|
int fs_in;
|
||||||
|
int vector_length;
|
||||||
|
int f_if;
|
||||||
|
bool dump;
|
||||||
|
std::string dump_filename;
|
||||||
|
std::string item_type;
|
||||||
|
std::string default_item_type = "gr_complex";
|
||||||
|
float pll_bw_hz;
|
||||||
|
float dll_bw_hz;
|
||||||
|
float early_late_space_chips;
|
||||||
|
item_type = configuration->property(role + ".item_type", default_item_type);
|
||||||
|
int fs_in_deprecated = configuration->property("GNSS-SDR.internal_fs_hz", 2048000);
|
||||||
|
fs_in = configuration->property("GNSS-SDR.internal_fs_sps", fs_in_deprecated);
|
||||||
|
f_if = configuration->property(role + ".if", 0);
|
||||||
|
dump = configuration->property(role + ".dump", false);
|
||||||
|
pll_bw_hz = configuration->property(role + ".pll_bw_hz", 50.0);
|
||||||
|
dll_bw_hz = configuration->property(role + ".dll_bw_hz", 2.0);
|
||||||
|
early_late_space_chips = configuration->property(role + ".early_late_space_chips", 0.5);
|
||||||
|
std::string default_dump_filename = "./track_ch";
|
||||||
|
dump_filename = configuration->property(role + ".dump_filename", default_dump_filename); //unused!
|
||||||
|
vector_length = std::round(fs_in / (GLONASS_L1_CA_CODE_RATE_HZ / GLONASS_L1_CA_CODE_LENGTH_CHIPS));
|
||||||
|
|
||||||
|
//################# MAKE TRACKING GNURadio object ###################
|
||||||
|
if (item_type.compare("gr_complex") == 0)
|
||||||
|
{
|
||||||
|
item_size_ = sizeof(gr_complex);
|
||||||
|
tracking_ = glonass_l1_ca_dll_pll_make_tracking_cc(
|
||||||
|
f_if,
|
||||||
|
fs_in,
|
||||||
|
vector_length,
|
||||||
|
dump,
|
||||||
|
dump_filename,
|
||||||
|
pll_bw_hz,
|
||||||
|
dll_bw_hz,
|
||||||
|
early_late_space_chips);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
item_size_ = sizeof(gr_complex);
|
||||||
|
LOG(WARNING) << item_type << " unknown tracking item type.";
|
||||||
|
}
|
||||||
|
channel_ = 0;
|
||||||
|
DLOG(INFO) << "tracking(" << tracking_->unique_id() << ")";
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
GlonassL1CaDllPllTracking::~GlonassL1CaDllPllTracking()
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
void GlonassL1CaDllPllTracking::start_tracking()
|
||||||
|
{
|
||||||
|
tracking_->start_tracking();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Set tracking channel unique ID
|
||||||
|
*/
|
||||||
|
void GlonassL1CaDllPllTracking::set_channel(unsigned int channel)
|
||||||
|
{
|
||||||
|
channel_ = channel;
|
||||||
|
tracking_->set_channel(channel);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void GlonassL1CaDllPllTracking::set_gnss_synchro(Gnss_Synchro* p_gnss_synchro)
|
||||||
|
{
|
||||||
|
tracking_->set_gnss_synchro(p_gnss_synchro);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void GlonassL1CaDllPllTracking::connect(gr::top_block_sptr top_block)
|
||||||
|
{
|
||||||
|
if(top_block) { /* top_block is not null */};
|
||||||
|
//nothing to connect, now the tracking uses gr_sync_decimator
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void GlonassL1CaDllPllTracking::disconnect(gr::top_block_sptr top_block)
|
||||||
|
{
|
||||||
|
if(top_block) { /* top_block is not null */};
|
||||||
|
//nothing to disconnect, now the tracking uses gr_sync_decimator
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
gr::basic_block_sptr GlonassL1CaDllPllTracking::get_left_block()
|
||||||
|
{
|
||||||
|
return tracking_;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
gr::basic_block_sptr GlonassL1CaDllPllTracking::get_right_block()
|
||||||
|
{
|
||||||
|
return tracking_;
|
||||||
|
}
|
@ -0,0 +1,105 @@
|
|||||||
|
/*!
|
||||||
|
* \file glonass_l1_ca_dll_pll_tracking.h
|
||||||
|
* \brief Interface of an adapter of a DLL+PLL tracking loop block
|
||||||
|
* for Glonass L1 C/A to a TrackingInterface
|
||||||
|
* \author Gabriel Araujo, 2017. gabriel.araujo.5000(at)gmail.com
|
||||||
|
* \author Luis Esteve, 2017. luis(at)epsilon-formacion.com
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* Code DLL + carrier PLL according to the algorithms described in:
|
||||||
|
* K.Borre, D.M.Akos, N.Bertelsen, P.Rinder, and S.H.Jensen,
|
||||||
|
* A Software-Defined GPS and Galileo Receiver. A Single-Frequency
|
||||||
|
* Approach, Birkha user, 2007
|
||||||
|
*
|
||||||
|
* -------------------------------------------------------------------------
|
||||||
|
*
|
||||||
|
* Copyright (C) 2010-2017 (see AUTHORS file for a list of contributors)
|
||||||
|
*
|
||||||
|
* GNSS-SDR is a software defined Global Navigation
|
||||||
|
* Satellite Systems receiver
|
||||||
|
*
|
||||||
|
* This file is part of GNSS-SDR.
|
||||||
|
*
|
||||||
|
* GNSS-SDR is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* GNSS-SDR is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with GNSS-SDR. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*
|
||||||
|
* -------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef GNSS_SDR_GLONASS_L1_CA_DLL_PLL_TRACKING_H_
|
||||||
|
#define GNSS_SDR_GLONASS_L1_CA_DLL_PLL_TRACKING_H_
|
||||||
|
|
||||||
|
#include <string>
|
||||||
|
#include "tracking_interface.h"
|
||||||
|
#include "glonass_l1_ca_dll_pll_tracking_cc.h"
|
||||||
|
|
||||||
|
|
||||||
|
class ConfigurationInterface;
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief This class implements a code DLL + carrier PLL tracking loop
|
||||||
|
*/
|
||||||
|
class GlonassL1CaDllPllTracking : public TrackingInterface
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
GlonassL1CaDllPllTracking(ConfigurationInterface* configuration,
|
||||||
|
std::string role,
|
||||||
|
unsigned int in_streams,
|
||||||
|
unsigned int out_streams);
|
||||||
|
|
||||||
|
virtual ~GlonassL1CaDllPllTracking();
|
||||||
|
|
||||||
|
inline std::string role() override
|
||||||
|
{
|
||||||
|
return role_;
|
||||||
|
}
|
||||||
|
|
||||||
|
//! Returns "GLONASS_L1_CA_DLL_PLL_Tracking"
|
||||||
|
inline std::string implementation() override
|
||||||
|
{
|
||||||
|
return "GLONASS_L1_CA_DLL_PLL_Tracking";
|
||||||
|
}
|
||||||
|
|
||||||
|
inline size_t item_size() override
|
||||||
|
{
|
||||||
|
return item_size_;
|
||||||
|
}
|
||||||
|
|
||||||
|
void connect(gr::top_block_sptr top_block) override;
|
||||||
|
void disconnect(gr::top_block_sptr top_block) override;
|
||||||
|
gr::basic_block_sptr get_left_block() override;
|
||||||
|
gr::basic_block_sptr get_right_block() override;
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Set tracking channel unique ID
|
||||||
|
*/
|
||||||
|
void set_channel(unsigned int channel) override;
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Set acquisition/tracking common Gnss_Synchro object pointer
|
||||||
|
* to efficiently exchange synchronization data between acquisition and tracking blocks
|
||||||
|
*/
|
||||||
|
void set_gnss_synchro(Gnss_Synchro* p_gnss_synchro) override;
|
||||||
|
|
||||||
|
void start_tracking() override;
|
||||||
|
|
||||||
|
private:
|
||||||
|
glonass_l1_ca_dll_pll_tracking_cc_sptr tracking_;
|
||||||
|
size_t item_size_;
|
||||||
|
unsigned int channel_;
|
||||||
|
std::string role_;
|
||||||
|
unsigned int in_streams_;
|
||||||
|
unsigned int out_streams_;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // GNSS_SDR_GLONASS_L1_CA_DLL_PLL_TRACKING_H_
|
@ -36,6 +36,9 @@ set(TRACKING_GR_BLOCKS_SOURCES
|
|||||||
gps_l5i_dll_pll_tracking_cc.cc
|
gps_l5i_dll_pll_tracking_cc.cc
|
||||||
gps_l1_ca_dll_pll_c_aid_tracking_cc.cc
|
gps_l1_ca_dll_pll_c_aid_tracking_cc.cc
|
||||||
gps_l1_ca_dll_pll_c_aid_tracking_sc.cc
|
gps_l1_ca_dll_pll_c_aid_tracking_sc.cc
|
||||||
|
glonass_l1_ca_dll_pll_tracking_cc.cc
|
||||||
|
glonass_l1_ca_dll_pll_c_aid_tracking_cc.cc
|
||||||
|
glonass_l1_ca_dll_pll_c_aid_tracking_sc.cc
|
||||||
${OPT_TRACKING_BLOCKS}
|
${OPT_TRACKING_BLOCKS}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -0,0 +1,932 @@
|
|||||||
|
/*!
|
||||||
|
* \file glonass_l1_ca_dll_pll_c_aid_tracking_cc.h
|
||||||
|
* \brief Implementation of a code DLL + carrier PLL tracking block
|
||||||
|
* \author Gabriel Araujo, 2017. gabriel.araujo.5000(at)gmail.com
|
||||||
|
* \author Luis Esteve, 2017. luis(at)epsilon-formacion.com
|
||||||
|
* \author Damian Miralles, 2017. dmiralles2009(at)gmail.com
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* Code DLL + carrier PLL according to the algorithms described in:
|
||||||
|
* K.Borre, D.M.Akos, N.Bertelsen, P.Rinder, and S.H.Jensen,
|
||||||
|
* A Software-Defined GPS and Galileo Receiver. A Single-Frequency
|
||||||
|
* Approach, Birkha user, 2007
|
||||||
|
*
|
||||||
|
* -------------------------------------------------------------------------
|
||||||
|
*
|
||||||
|
* Copyright (C) 2010-2017 (see AUTHORS file for a list of contributors)
|
||||||
|
*
|
||||||
|
* GNSS-SDR is a software defined Global Navigation
|
||||||
|
* Satellite Systems receiver
|
||||||
|
*
|
||||||
|
* This file is part of GNSS-SDR.
|
||||||
|
*
|
||||||
|
* GNSS-SDR is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* GNSS-SDR is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with GNSS-SDR. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*
|
||||||
|
* -------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "glonass_l1_ca_dll_pll_c_aid_tracking_cc.h"
|
||||||
|
#include <cmath>
|
||||||
|
#include <iostream>
|
||||||
|
#include <memory>
|
||||||
|
#include <sstream>
|
||||||
|
#include <boost/lexical_cast.hpp>
|
||||||
|
#include <boost/bind.hpp>
|
||||||
|
#include <gnuradio/io_signature.h>
|
||||||
|
#include <matio.h>
|
||||||
|
#include <pmt/pmt.h>
|
||||||
|
#include <volk_gnsssdr/volk_gnsssdr.h>
|
||||||
|
#include <glog/logging.h>
|
||||||
|
#include "glonass_l1_signal_processing.h"
|
||||||
|
#include "tracking_discriminators.h"
|
||||||
|
#include "lock_detectors.h"
|
||||||
|
#include "GLONASS_L1_CA.h"
|
||||||
|
#include "control_message_factory.h"
|
||||||
|
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \todo Include in definition header file
|
||||||
|
*/
|
||||||
|
#define CN0_ESTIMATION_SAMPLES 10
|
||||||
|
#define MINIMUM_VALID_CN0 25
|
||||||
|
#define MAXIMUM_LOCK_FAIL_COUNTER 50
|
||||||
|
#define CARRIER_LOCK_THRESHOLD 0.85
|
||||||
|
|
||||||
|
|
||||||
|
using google::LogMessage;
|
||||||
|
|
||||||
|
glonass_l1_ca_dll_pll_c_aid_tracking_cc_sptr
|
||||||
|
glonass_l1_ca_dll_pll_c_aid_make_tracking_cc(
|
||||||
|
long if_freq,
|
||||||
|
long fs_in,
|
||||||
|
unsigned int vector_length,
|
||||||
|
bool dump,
|
||||||
|
std::string dump_filename,
|
||||||
|
float pll_bw_hz,
|
||||||
|
float dll_bw_hz,
|
||||||
|
float pll_bw_narrow_hz,
|
||||||
|
float dll_bw_narrow_hz,
|
||||||
|
int extend_correlation_ms,
|
||||||
|
float early_late_space_chips)
|
||||||
|
{
|
||||||
|
return glonass_l1_ca_dll_pll_c_aid_tracking_cc_sptr(new glonass_l1_ca_dll_pll_c_aid_tracking_cc(if_freq,
|
||||||
|
fs_in, vector_length, dump, dump_filename, pll_bw_hz, dll_bw_hz,pll_bw_narrow_hz, dll_bw_narrow_hz, extend_correlation_ms, early_late_space_chips));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void glonass_l1_ca_dll_pll_c_aid_tracking_cc::forecast (int noutput_items,
|
||||||
|
gr_vector_int &ninput_items_required)
|
||||||
|
{
|
||||||
|
if (noutput_items != 0)
|
||||||
|
{
|
||||||
|
ninput_items_required[0] = static_cast<int>(d_vector_length) * 2; //set the required available samples in each call
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void glonass_l1_ca_dll_pll_c_aid_tracking_cc::msg_handler_preamble_index(pmt::pmt_t msg)
|
||||||
|
{
|
||||||
|
//pmt::print(msg);
|
||||||
|
DLOG(INFO) << "Extended correlation enabled for Tracking CH " << d_channel << ": Satellite " << Gnss_Satellite(systemName[sys], d_acquisition_gnss_synchro->PRN);
|
||||||
|
if (d_enable_extended_integration == false) //avoid re-setting preamble indicator
|
||||||
|
{
|
||||||
|
d_preamble_timestamp_s = pmt::to_double(msg);
|
||||||
|
d_enable_extended_integration = true;
|
||||||
|
d_preamble_synchronized = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
glonass_l1_ca_dll_pll_c_aid_tracking_cc::glonass_l1_ca_dll_pll_c_aid_tracking_cc(
|
||||||
|
long if_freq,
|
||||||
|
long fs_in,
|
||||||
|
unsigned int vector_length,
|
||||||
|
bool dump,
|
||||||
|
std::string dump_filename,
|
||||||
|
float pll_bw_hz,
|
||||||
|
float dll_bw_hz,
|
||||||
|
float pll_bw_narrow_hz,
|
||||||
|
float dll_bw_narrow_hz,
|
||||||
|
int extend_correlation_ms,
|
||||||
|
float early_late_space_chips) :
|
||||||
|
gr::block("glonass_l1_ca_dll_pll_c_aid_tracking_cc", gr::io_signature::make(1, 1, sizeof(gr_complex)),
|
||||||
|
gr::io_signature::make(1, 1, sizeof(Gnss_Synchro)))
|
||||||
|
{
|
||||||
|
// Telemetry bit synchronization message port input
|
||||||
|
this->message_port_register_in(pmt::mp("preamble_timestamp_s"));
|
||||||
|
|
||||||
|
this->set_msg_handler(pmt::mp("preamble_timestamp_s"),
|
||||||
|
boost::bind(&glonass_l1_ca_dll_pll_c_aid_tracking_cc::msg_handler_preamble_index, this, _1));
|
||||||
|
|
||||||
|
this->message_port_register_out(pmt::mp("events"));
|
||||||
|
// initialize internal vars
|
||||||
|
d_dump = dump;
|
||||||
|
d_if_freq = if_freq;
|
||||||
|
d_fs_in = fs_in;
|
||||||
|
d_vector_length = vector_length;
|
||||||
|
d_dump_filename = dump_filename;
|
||||||
|
d_correlation_length_samples = static_cast<int>(d_vector_length);
|
||||||
|
|
||||||
|
// Initialize tracking ==========================================
|
||||||
|
d_pll_bw_hz = pll_bw_hz;
|
||||||
|
d_dll_bw_hz = dll_bw_hz;
|
||||||
|
d_pll_bw_narrow_hz = pll_bw_narrow_hz;
|
||||||
|
d_dll_bw_narrow_hz = dll_bw_narrow_hz;
|
||||||
|
d_extend_correlation_ms = extend_correlation_ms;
|
||||||
|
d_code_loop_filter.set_DLL_BW(d_dll_bw_hz);
|
||||||
|
d_carrier_loop_filter.set_params(10.0, d_pll_bw_hz, 2);
|
||||||
|
|
||||||
|
// --- DLL variables --------------------------------------------------------
|
||||||
|
d_early_late_spc_chips = early_late_space_chips; // Define early-late offset (in chips)
|
||||||
|
|
||||||
|
// Initialization of local code replica
|
||||||
|
// Get space for a vector with the C/A code replica sampled 1x/chip
|
||||||
|
d_ca_code = static_cast<gr_complex*>(volk_gnsssdr_malloc(static_cast<int>(GLONASS_L1_CA_CODE_LENGTH_CHIPS) * sizeof(gr_complex), volk_gnsssdr_get_alignment()));
|
||||||
|
|
||||||
|
// correlator outputs (scalar)
|
||||||
|
d_n_correlator_taps = 3; // Early, Prompt, and Late
|
||||||
|
d_correlator_outs = static_cast<gr_complex*>(volk_gnsssdr_malloc(d_n_correlator_taps*sizeof(gr_complex), volk_gnsssdr_get_alignment()));
|
||||||
|
for (int n = 0; n < d_n_correlator_taps; n++)
|
||||||
|
{
|
||||||
|
d_correlator_outs[n] = gr_complex(0,0);
|
||||||
|
}
|
||||||
|
d_local_code_shift_chips = static_cast<float*>(volk_gnsssdr_malloc(d_n_correlator_taps*sizeof(float), volk_gnsssdr_get_alignment()));
|
||||||
|
// Set TAPs delay values [chips]
|
||||||
|
d_local_code_shift_chips[0] = - d_early_late_spc_chips;
|
||||||
|
d_local_code_shift_chips[1] = 0.0;
|
||||||
|
d_local_code_shift_chips[2] = d_early_late_spc_chips;
|
||||||
|
|
||||||
|
multicorrelator_cpu.init(2 * d_correlation_length_samples, d_n_correlator_taps);
|
||||||
|
|
||||||
|
//--- Perform initializations ------------------------------
|
||||||
|
// define initial code frequency basis of NCO
|
||||||
|
d_code_freq_chips = GLONASS_L1_CA_CODE_RATE_HZ;
|
||||||
|
// define residual code phase (in chips)
|
||||||
|
d_rem_code_phase_samples = 0.0;
|
||||||
|
// define residual carrier phase
|
||||||
|
d_rem_carrier_phase_rad = 0.0;
|
||||||
|
|
||||||
|
// sample synchronization
|
||||||
|
d_sample_counter = 0; //(from trk to tlm)
|
||||||
|
d_acq_sample_stamp = 0;
|
||||||
|
d_enable_tracking = false;
|
||||||
|
d_pull_in = false;
|
||||||
|
|
||||||
|
// CN0 estimation and lock detector buffers
|
||||||
|
d_cn0_estimation_counter = 0;
|
||||||
|
d_Prompt_buffer = new gr_complex[CN0_ESTIMATION_SAMPLES];
|
||||||
|
d_carrier_lock_test = 1;
|
||||||
|
d_CN0_SNV_dB_Hz = 0;
|
||||||
|
d_carrier_lock_fail_counter = 0;
|
||||||
|
d_carrier_lock_threshold = CARRIER_LOCK_THRESHOLD;
|
||||||
|
|
||||||
|
systemName["R"] = std::string("Glonass");
|
||||||
|
|
||||||
|
set_relative_rate(1.0 / static_cast<double>(d_vector_length));
|
||||||
|
|
||||||
|
d_acquisition_gnss_synchro = 0;
|
||||||
|
d_channel = 0;
|
||||||
|
d_acq_code_phase_samples = 0.0;
|
||||||
|
d_acq_carrier_doppler_hz = 0.0;
|
||||||
|
d_carrier_doppler_hz = 0.0;
|
||||||
|
d_code_error_filt_chips_Ti = 0.0;
|
||||||
|
d_acc_carrier_phase_cycles = 0.0;
|
||||||
|
d_code_phase_samples = 0.0;
|
||||||
|
|
||||||
|
d_pll_to_dll_assist_secs_Ti = 0.0;
|
||||||
|
d_rem_code_phase_chips = 0.0;
|
||||||
|
d_code_phase_step_chips = 0.0;
|
||||||
|
d_carrier_phase_step_rad = 0.0;
|
||||||
|
d_enable_extended_integration = false;
|
||||||
|
d_preamble_synchronized = false;
|
||||||
|
d_rem_code_phase_integer_samples = 0;
|
||||||
|
d_code_error_chips_Ti = 0.0;
|
||||||
|
d_code_error_filt_chips_s = 0.0;
|
||||||
|
d_carr_phase_error_secs_Ti = 0.0;
|
||||||
|
d_preamble_timestamp_s = 0.0;
|
||||||
|
|
||||||
|
d_carrier_frequency_hz = 0.0;
|
||||||
|
d_carrier_doppler_old_hz = 0.0;
|
||||||
|
|
||||||
|
d_glonass_freq_ch = 0;
|
||||||
|
|
||||||
|
//set_min_output_buffer((long int)300);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void glonass_l1_ca_dll_pll_c_aid_tracking_cc::start_tracking()
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* correct the code phase according to the delay between acq and trk
|
||||||
|
*/
|
||||||
|
d_acq_code_phase_samples = d_acquisition_gnss_synchro->Acq_delay_samples;
|
||||||
|
d_acq_carrier_doppler_hz = d_acquisition_gnss_synchro->Acq_doppler_hz;
|
||||||
|
d_acq_sample_stamp = d_acquisition_gnss_synchro->Acq_samplestamp_samples;
|
||||||
|
|
||||||
|
long int acq_trk_diff_samples;
|
||||||
|
double acq_trk_diff_seconds;
|
||||||
|
acq_trk_diff_samples = static_cast<long int>(d_sample_counter) - static_cast<long int>(d_acq_sample_stamp);//-d_vector_length;
|
||||||
|
DLOG(INFO) << "Number of samples between Acquisition and Tracking =" << acq_trk_diff_samples;
|
||||||
|
acq_trk_diff_seconds = static_cast<double>(acq_trk_diff_samples) / static_cast<double>(d_fs_in);
|
||||||
|
// Doppler effect
|
||||||
|
// Fd=(C/(C+Vr))*F
|
||||||
|
d_glonass_freq_ch = GLONASS_L1_CA_FREQ_HZ + (DFRQ1_GLO * static_cast<double>(GLONASS_PRN.at(d_acquisition_gnss_synchro->PRN)));
|
||||||
|
double radial_velocity = (d_glonass_freq_ch + d_acq_carrier_doppler_hz) / d_glonass_freq_ch;
|
||||||
|
// new chip and prn sequence periods based on acq Doppler
|
||||||
|
double T_chip_mod_seconds;
|
||||||
|
double T_prn_mod_seconds;
|
||||||
|
double T_prn_mod_samples;
|
||||||
|
d_code_freq_chips = radial_velocity * GLONASS_L1_CA_CODE_RATE_HZ;
|
||||||
|
d_code_phase_step_chips = static_cast<double>(d_code_freq_chips) / static_cast<double>(d_fs_in);
|
||||||
|
T_chip_mod_seconds = 1.0 / d_code_freq_chips;
|
||||||
|
T_prn_mod_seconds = T_chip_mod_seconds * GLONASS_L1_CA_CODE_LENGTH_CHIPS;
|
||||||
|
T_prn_mod_samples = T_prn_mod_seconds * static_cast<double>(d_fs_in);
|
||||||
|
|
||||||
|
d_correlation_length_samples = round(T_prn_mod_samples);
|
||||||
|
|
||||||
|
double T_prn_true_seconds = GLONASS_L1_CA_CODE_LENGTH_CHIPS / GLONASS_L1_CA_CODE_RATE_HZ;
|
||||||
|
double T_prn_true_samples = T_prn_true_seconds * static_cast<double>(d_fs_in);
|
||||||
|
double T_prn_diff_seconds = T_prn_true_seconds - T_prn_mod_seconds;
|
||||||
|
double N_prn_diff = acq_trk_diff_seconds / T_prn_true_seconds;
|
||||||
|
double corrected_acq_phase_samples, delay_correction_samples;
|
||||||
|
corrected_acq_phase_samples = fmod((d_acq_code_phase_samples + T_prn_diff_seconds * N_prn_diff * static_cast<double>(d_fs_in)), T_prn_true_samples);
|
||||||
|
if (corrected_acq_phase_samples < 0)
|
||||||
|
{
|
||||||
|
corrected_acq_phase_samples = T_prn_mod_samples + corrected_acq_phase_samples;
|
||||||
|
}
|
||||||
|
delay_correction_samples = d_acq_code_phase_samples - corrected_acq_phase_samples;
|
||||||
|
|
||||||
|
d_acq_code_phase_samples = corrected_acq_phase_samples;
|
||||||
|
|
||||||
|
// d_carrier_doppler_hz = d_acq_carrier_doppler_hz + d_if_freq + (DFRQ1_GLO * GLONASS_PRN.at(d_acquisition_gnss_synchro->PRN));
|
||||||
|
// d_carrier_doppler_hz = d_acq_carrier_doppler_hz;
|
||||||
|
// d_carrier_phase_step_rad = GLONASS_TWO_PI * d_carrier_doppler_hz / static_cast<double>(d_fs_in);
|
||||||
|
d_carrier_frequency_hz = d_acq_carrier_doppler_hz + d_if_freq + (DFRQ1_GLO * static_cast<double>(GLONASS_PRN.at(d_acquisition_gnss_synchro->PRN)));
|
||||||
|
d_carrier_doppler_hz = d_acq_carrier_doppler_hz;
|
||||||
|
d_carrier_phase_step_rad = GLONASS_TWO_PI * d_carrier_frequency_hz / static_cast<double>(d_fs_in);
|
||||||
|
|
||||||
|
|
||||||
|
// DLL/PLL filter initialization
|
||||||
|
d_carrier_loop_filter.initialize(d_carrier_frequency_hz); // The carrier loop filter implements the Doppler accumulator
|
||||||
|
d_code_loop_filter.initialize(); // initialize the code filter
|
||||||
|
|
||||||
|
// generate local reference ALWAYS starting at chip 1 (1 sample per chip)
|
||||||
|
glonass_l1_ca_code_gen_complex(d_ca_code, 0);
|
||||||
|
|
||||||
|
multicorrelator_cpu.set_local_code_and_taps(static_cast<int>(GLONASS_L1_CA_CODE_LENGTH_CHIPS), d_ca_code, d_local_code_shift_chips);
|
||||||
|
for (int n = 0; n < d_n_correlator_taps; n++)
|
||||||
|
{
|
||||||
|
d_correlator_outs[n] = gr_complex(0,0);
|
||||||
|
}
|
||||||
|
|
||||||
|
d_carrier_lock_fail_counter = 0;
|
||||||
|
d_rem_code_phase_samples = 0.0;
|
||||||
|
d_rem_carrier_phase_rad = 0.0;
|
||||||
|
d_rem_code_phase_chips = 0.0;
|
||||||
|
d_acc_carrier_phase_cycles = 0.0;
|
||||||
|
d_pll_to_dll_assist_secs_Ti = 0.0;
|
||||||
|
d_code_phase_samples = d_acq_code_phase_samples;
|
||||||
|
|
||||||
|
std::string sys_ = &d_acquisition_gnss_synchro->System;
|
||||||
|
sys = sys_.substr(0,1);
|
||||||
|
|
||||||
|
// DEBUG OUTPUT
|
||||||
|
std::cout << "Tracking start on channel " << d_channel << " for satellite " << Gnss_Satellite(systemName[sys], d_acquisition_gnss_synchro->PRN) << std::endl;
|
||||||
|
LOG(INFO) << "Starting tracking of satellite " << Gnss_Satellite(systemName[sys], d_acquisition_gnss_synchro->PRN) << " on channel " << d_channel;
|
||||||
|
|
||||||
|
// enable tracking
|
||||||
|
d_pull_in = true;
|
||||||
|
d_enable_tracking = true;
|
||||||
|
d_enable_extended_integration = false;
|
||||||
|
d_preamble_synchronized = false;
|
||||||
|
LOG(INFO) << "PULL-IN Doppler [Hz]=" << d_carrier_doppler_hz
|
||||||
|
<< " Code Phase correction [samples]=" << delay_correction_samples
|
||||||
|
<< " PULL-IN Code Phase [samples]=" << d_acq_code_phase_samples;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
glonass_l1_ca_dll_pll_c_aid_tracking_cc::~glonass_l1_ca_dll_pll_c_aid_tracking_cc()
|
||||||
|
{
|
||||||
|
if (d_dump_file.is_open())
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
d_dump_file.close();
|
||||||
|
}
|
||||||
|
catch(const std::exception & ex)
|
||||||
|
{
|
||||||
|
LOG(WARNING) << "Exception in destructor " << ex.what();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(d_dump)
|
||||||
|
{
|
||||||
|
if(d_channel == 0)
|
||||||
|
{
|
||||||
|
std::cout << "Writing .mat files ...";
|
||||||
|
}
|
||||||
|
glonass_l1_ca_dll_pll_c_aid_tracking_cc::save_matfile();
|
||||||
|
if(d_channel == 0)
|
||||||
|
{
|
||||||
|
std::cout << " done." << std::endl;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
volk_gnsssdr_free(d_local_code_shift_chips);
|
||||||
|
volk_gnsssdr_free(d_correlator_outs);
|
||||||
|
volk_gnsssdr_free(d_ca_code);
|
||||||
|
delete[] d_Prompt_buffer;
|
||||||
|
multicorrelator_cpu.free();
|
||||||
|
}
|
||||||
|
catch(const std::exception & ex)
|
||||||
|
{
|
||||||
|
LOG(WARNING) << "Exception in destructor " << ex.what();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int glonass_l1_ca_dll_pll_c_aid_tracking_cc::save_matfile()
|
||||||
|
{
|
||||||
|
// READ DUMP FILE
|
||||||
|
std::ifstream::pos_type size;
|
||||||
|
int number_of_double_vars = 11;
|
||||||
|
int number_of_float_vars = 5;
|
||||||
|
int epoch_size_bytes = sizeof(unsigned long int) + sizeof(double) * number_of_double_vars +
|
||||||
|
sizeof(float) * number_of_float_vars + sizeof(unsigned int);
|
||||||
|
std::ifstream dump_file;
|
||||||
|
dump_file.exceptions(std::ifstream::failbit | std::ifstream::badbit);
|
||||||
|
try
|
||||||
|
{
|
||||||
|
dump_file.open(d_dump_filename.c_str(), std::ios::binary | std::ios::ate);
|
||||||
|
}
|
||||||
|
catch(const std::ifstream::failure &e)
|
||||||
|
{
|
||||||
|
std::cerr << "Problem opening dump file:" << e.what() << std::endl;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
// count number of epochs and rewind
|
||||||
|
long int num_epoch = 0;
|
||||||
|
if (dump_file.is_open())
|
||||||
|
{
|
||||||
|
size = dump_file.tellg();
|
||||||
|
num_epoch = static_cast<long int>(size) / static_cast<long int>(epoch_size_bytes);
|
||||||
|
dump_file.seekg(0, std::ios::beg);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
float * abs_E = new float [num_epoch];
|
||||||
|
float * abs_P = new float [num_epoch];
|
||||||
|
float * abs_L = new float [num_epoch];
|
||||||
|
float * Prompt_I = new float [num_epoch];
|
||||||
|
float * Prompt_Q = new float [num_epoch];
|
||||||
|
unsigned long int * PRN_start_sample_count = new unsigned long int [num_epoch];
|
||||||
|
double * acc_carrier_phase_rad = new double [num_epoch];
|
||||||
|
double * carrier_doppler_hz = new double [num_epoch];
|
||||||
|
double * code_freq_chips = new double [num_epoch];
|
||||||
|
double * carr_error_hz = new double [num_epoch];
|
||||||
|
double * carr_error_filt_hz = new double [num_epoch];
|
||||||
|
double * code_error_chips = new double [num_epoch];
|
||||||
|
double * code_error_filt_chips = new double [num_epoch];
|
||||||
|
double * CN0_SNV_dB_Hz = new double [num_epoch];
|
||||||
|
double * carrier_lock_test = new double [num_epoch];
|
||||||
|
double * aux1 = new double [num_epoch];
|
||||||
|
double * aux2 = new double [num_epoch];
|
||||||
|
unsigned int * PRN = new unsigned int [num_epoch];
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
if (dump_file.is_open())
|
||||||
|
{
|
||||||
|
for(long int i = 0; i < num_epoch; i++)
|
||||||
|
{
|
||||||
|
dump_file.read(reinterpret_cast<char *>(&abs_E[i]), sizeof(float));
|
||||||
|
dump_file.read(reinterpret_cast<char *>(&abs_P[i]), sizeof(float));
|
||||||
|
dump_file.read(reinterpret_cast<char *>(&abs_L[i]), sizeof(float));
|
||||||
|
dump_file.read(reinterpret_cast<char *>(&Prompt_I[i]), sizeof(float));
|
||||||
|
dump_file.read(reinterpret_cast<char *>(&Prompt_Q[i]), sizeof(float));
|
||||||
|
dump_file.read(reinterpret_cast<char *>(&PRN_start_sample_count[i]), sizeof(unsigned long int));
|
||||||
|
dump_file.read(reinterpret_cast<char *>(&acc_carrier_phase_rad[i]), sizeof(double));
|
||||||
|
dump_file.read(reinterpret_cast<char *>(&carrier_doppler_hz[i]), sizeof(double));
|
||||||
|
dump_file.read(reinterpret_cast<char *>(&code_freq_chips[i]), sizeof(double));
|
||||||
|
dump_file.read(reinterpret_cast<char *>(&carr_error_hz[i]), sizeof(double));
|
||||||
|
dump_file.read(reinterpret_cast<char *>(&carr_error_filt_hz[i]), sizeof(double));
|
||||||
|
dump_file.read(reinterpret_cast<char *>(&code_error_chips[i]), sizeof(double));
|
||||||
|
dump_file.read(reinterpret_cast<char *>(&code_error_filt_chips[i]), sizeof(double));
|
||||||
|
dump_file.read(reinterpret_cast<char *>(&CN0_SNV_dB_Hz[i]), sizeof(double));
|
||||||
|
dump_file.read(reinterpret_cast<char *>(&carrier_lock_test[i]), sizeof(double));
|
||||||
|
dump_file.read(reinterpret_cast<char *>(&aux1[i]), sizeof(double));
|
||||||
|
dump_file.read(reinterpret_cast<char *>(&aux2[i]), sizeof(double));
|
||||||
|
dump_file.read(reinterpret_cast<char *>(&PRN[i]), sizeof(unsigned int));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
dump_file.close();
|
||||||
|
}
|
||||||
|
catch (const std::ifstream::failure &e)
|
||||||
|
{
|
||||||
|
std::cerr << "Problem reading dump file:" << e.what() << std::endl;
|
||||||
|
delete[] abs_E;
|
||||||
|
delete[] abs_P;
|
||||||
|
delete[] abs_L;
|
||||||
|
delete[] Prompt_I;
|
||||||
|
delete[] Prompt_Q;
|
||||||
|
delete[] PRN_start_sample_count;
|
||||||
|
delete[] acc_carrier_phase_rad;
|
||||||
|
delete[] carrier_doppler_hz;
|
||||||
|
delete[] code_freq_chips;
|
||||||
|
delete[] carr_error_hz;
|
||||||
|
delete[] carr_error_filt_hz;
|
||||||
|
delete[] code_error_chips;
|
||||||
|
delete[] code_error_filt_chips;
|
||||||
|
delete[] CN0_SNV_dB_Hz;
|
||||||
|
delete[] carrier_lock_test;
|
||||||
|
delete[] aux1;
|
||||||
|
delete[] aux2;
|
||||||
|
delete[] PRN;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// WRITE MAT FILE
|
||||||
|
mat_t *matfp;
|
||||||
|
matvar_t *matvar;
|
||||||
|
std::string filename = d_dump_filename;
|
||||||
|
filename.erase(filename.length() - 4, 4);
|
||||||
|
filename.append(".mat");
|
||||||
|
matfp = Mat_CreateVer(filename.c_str(), NULL, MAT_FT_MAT73);
|
||||||
|
if(reinterpret_cast<long*>(matfp) != NULL)
|
||||||
|
{
|
||||||
|
size_t dims[2] = {1, static_cast<size_t>(num_epoch)};
|
||||||
|
matvar = Mat_VarCreate("abs_E", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims, abs_E, 0);
|
||||||
|
Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
|
Mat_VarFree(matvar);
|
||||||
|
|
||||||
|
matvar = Mat_VarCreate("abs_P", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims, abs_P, 0);
|
||||||
|
Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
|
Mat_VarFree(matvar);
|
||||||
|
|
||||||
|
matvar = Mat_VarCreate("abs_L", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims, abs_L, 0);
|
||||||
|
Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
|
Mat_VarFree(matvar);
|
||||||
|
|
||||||
|
matvar = Mat_VarCreate("Prompt_I", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims, Prompt_I, 0);
|
||||||
|
Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
|
Mat_VarFree(matvar);
|
||||||
|
|
||||||
|
matvar = Mat_VarCreate("Prompt_Q", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims, Prompt_Q, 0);
|
||||||
|
Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
|
Mat_VarFree(matvar);
|
||||||
|
|
||||||
|
matvar = Mat_VarCreate("PRN_start_sample_count", MAT_C_UINT64, MAT_T_UINT64, 2, dims, PRN_start_sample_count, 0);
|
||||||
|
Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
|
Mat_VarFree(matvar);
|
||||||
|
|
||||||
|
matvar = Mat_VarCreate("acc_carrier_phase_rad", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims, acc_carrier_phase_rad, 0);
|
||||||
|
Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
|
Mat_VarFree(matvar);
|
||||||
|
|
||||||
|
matvar = Mat_VarCreate("carrier_doppler_hz", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims, carrier_doppler_hz, 0);
|
||||||
|
Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
|
Mat_VarFree(matvar);
|
||||||
|
|
||||||
|
matvar = Mat_VarCreate("code_freq_chips", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims, code_freq_chips, 0);
|
||||||
|
Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
|
Mat_VarFree(matvar);
|
||||||
|
|
||||||
|
matvar = Mat_VarCreate("carr_error_hz", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims, carr_error_hz, 0);
|
||||||
|
Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
|
Mat_VarFree(matvar);
|
||||||
|
|
||||||
|
matvar = Mat_VarCreate("carr_error_filt_hz", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims, carr_error_filt_hz, 0);
|
||||||
|
Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
|
Mat_VarFree(matvar);
|
||||||
|
|
||||||
|
matvar = Mat_VarCreate("code_error_chips", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims, code_error_chips, 0);
|
||||||
|
Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
|
Mat_VarFree(matvar);
|
||||||
|
|
||||||
|
matvar = Mat_VarCreate("code_error_filt_chips", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims, code_error_filt_chips, 0);
|
||||||
|
Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
|
Mat_VarFree(matvar);
|
||||||
|
|
||||||
|
matvar = Mat_VarCreate("CN0_SNV_dB_Hz", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims, CN0_SNV_dB_Hz, 0);
|
||||||
|
Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
|
Mat_VarFree(matvar);
|
||||||
|
|
||||||
|
matvar = Mat_VarCreate("carrier_lock_test", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims, carrier_lock_test, 0);
|
||||||
|
Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
|
Mat_VarFree(matvar);
|
||||||
|
|
||||||
|
matvar = Mat_VarCreate("aux1", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims, aux1, 0);
|
||||||
|
Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
|
Mat_VarFree(matvar);
|
||||||
|
|
||||||
|
matvar = Mat_VarCreate("aux2", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims, aux2, 0);
|
||||||
|
Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
|
Mat_VarFree(matvar);
|
||||||
|
|
||||||
|
matvar = Mat_VarCreate("PRN", MAT_C_UINT32, MAT_T_UINT32, 2, dims, PRN, 0);
|
||||||
|
Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
|
Mat_VarFree(matvar);
|
||||||
|
}
|
||||||
|
Mat_Close(matfp);
|
||||||
|
delete[] abs_E;
|
||||||
|
delete[] abs_P;
|
||||||
|
delete[] abs_L;
|
||||||
|
delete[] Prompt_I;
|
||||||
|
delete[] Prompt_Q;
|
||||||
|
delete[] PRN_start_sample_count;
|
||||||
|
delete[] acc_carrier_phase_rad;
|
||||||
|
delete[] carrier_doppler_hz;
|
||||||
|
delete[] code_freq_chips;
|
||||||
|
delete[] carr_error_hz;
|
||||||
|
delete[] carr_error_filt_hz;
|
||||||
|
delete[] code_error_chips;
|
||||||
|
delete[] code_error_filt_chips;
|
||||||
|
delete[] CN0_SNV_dB_Hz;
|
||||||
|
delete[] carrier_lock_test;
|
||||||
|
delete[] aux1;
|
||||||
|
delete[] aux2;
|
||||||
|
delete[] PRN;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int glonass_l1_ca_dll_pll_c_aid_tracking_cc::general_work (int noutput_items __attribute__((unused)), gr_vector_int &ninput_items __attribute__((unused)),
|
||||||
|
gr_vector_const_void_star &input_items, gr_vector_void_star &output_items)
|
||||||
|
{
|
||||||
|
// Block input data and block output stream pointers
|
||||||
|
const gr_complex* in = reinterpret_cast<const gr_complex*>(input_items[0]); // PRN start block alignment
|
||||||
|
Gnss_Synchro **out = reinterpret_cast<Gnss_Synchro **>(&output_items[0]);
|
||||||
|
|
||||||
|
// GNSS_SYNCHRO OBJECT to interchange data between tracking->telemetry_decoder
|
||||||
|
Gnss_Synchro current_synchro_data = Gnss_Synchro();
|
||||||
|
|
||||||
|
// process vars
|
||||||
|
double code_error_filt_secs_Ti = 0.0;
|
||||||
|
double CURRENT_INTEGRATION_TIME_S = 0.0;
|
||||||
|
double CORRECTED_INTEGRATION_TIME_S = 0.0;
|
||||||
|
|
||||||
|
if (d_enable_tracking == true)
|
||||||
|
{
|
||||||
|
// Fill the acquisition data
|
||||||
|
current_synchro_data = *d_acquisition_gnss_synchro;
|
||||||
|
// Receiver signal alignment
|
||||||
|
if (d_pull_in == true)
|
||||||
|
{
|
||||||
|
int samples_offset;
|
||||||
|
double acq_trk_shif_correction_samples;
|
||||||
|
int acq_to_trk_delay_samples;
|
||||||
|
acq_to_trk_delay_samples = d_sample_counter - d_acq_sample_stamp;
|
||||||
|
acq_trk_shif_correction_samples = d_correlation_length_samples - fmod(static_cast<double>(acq_to_trk_delay_samples), static_cast<double>(d_correlation_length_samples));
|
||||||
|
samples_offset = round(d_acq_code_phase_samples + acq_trk_shif_correction_samples);
|
||||||
|
current_synchro_data.Tracking_sample_counter = d_sample_counter + samples_offset;
|
||||||
|
d_sample_counter += samples_offset; // count for the processed samples
|
||||||
|
d_pull_in = false;
|
||||||
|
d_acc_carrier_phase_cycles -= d_carrier_phase_step_rad * samples_offset / GLONASS_TWO_PI;
|
||||||
|
current_synchro_data.Carrier_phase_rads = d_acc_carrier_phase_cycles * GLONASS_TWO_PI;
|
||||||
|
current_synchro_data.Carrier_Doppler_hz = d_carrier_doppler_hz;
|
||||||
|
current_synchro_data.fs=d_fs_in;
|
||||||
|
*out[0] = current_synchro_data;
|
||||||
|
consume_each(samples_offset); // shift input to perform alignment with local replica
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ################# CARRIER WIPEOFF AND CORRELATORS ##############################
|
||||||
|
// perform carrier wipe-off and compute Early, Prompt and Late correlation
|
||||||
|
multicorrelator_cpu.set_input_output_vectors(d_correlator_outs,in);
|
||||||
|
multicorrelator_cpu.Carrier_wipeoff_multicorrelator_resampler(d_rem_carrier_phase_rad,
|
||||||
|
d_carrier_phase_step_rad,
|
||||||
|
d_rem_code_phase_chips,
|
||||||
|
d_code_phase_step_chips,
|
||||||
|
d_correlation_length_samples);
|
||||||
|
|
||||||
|
// ####### coherent intergration extension
|
||||||
|
// keep the last symbols
|
||||||
|
d_E_history.push_back(d_correlator_outs[0]); // save early output
|
||||||
|
d_P_history.push_back(d_correlator_outs[1]); // save prompt output
|
||||||
|
d_L_history.push_back(d_correlator_outs[2]); // save late output
|
||||||
|
|
||||||
|
if (static_cast<int>(d_P_history.size()) > d_extend_correlation_ms)
|
||||||
|
{
|
||||||
|
d_E_history.pop_front();
|
||||||
|
d_P_history.pop_front();
|
||||||
|
d_L_history.pop_front();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool enable_dll_pll;
|
||||||
|
if (d_enable_extended_integration == true)
|
||||||
|
{
|
||||||
|
long int symbol_diff = round(1000.0 * ((static_cast<double>(d_sample_counter) + d_rem_code_phase_samples) / static_cast<double>(d_fs_in) - d_preamble_timestamp_s));
|
||||||
|
if (symbol_diff > 0 and symbol_diff % d_extend_correlation_ms == 0)
|
||||||
|
{
|
||||||
|
// compute coherent integration and enable tracking loop
|
||||||
|
// perform coherent integration using correlator output history
|
||||||
|
// std::cout<<"##### RESET COHERENT INTEGRATION ####"<<std::endl;
|
||||||
|
d_correlator_outs[0] = gr_complex(0.0,0.0);
|
||||||
|
d_correlator_outs[1] = gr_complex(0.0,0.0);
|
||||||
|
d_correlator_outs[2] = gr_complex(0.0,0.0);
|
||||||
|
for (int n = 0; n < d_extend_correlation_ms; n++)
|
||||||
|
{
|
||||||
|
d_correlator_outs[0] += d_E_history.at(n);
|
||||||
|
d_correlator_outs[1] += d_P_history.at(n);
|
||||||
|
d_correlator_outs[2] += d_L_history.at(n);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (d_preamble_synchronized == false)
|
||||||
|
{
|
||||||
|
d_code_loop_filter.set_DLL_BW(d_dll_bw_narrow_hz);
|
||||||
|
d_carrier_loop_filter.set_params(10.0, d_pll_bw_narrow_hz,2);
|
||||||
|
d_preamble_synchronized = true;
|
||||||
|
std::cout << "Enabled " << d_extend_correlation_ms << " [ms] extended correlator for CH "<< d_channel << " : Satellite " << Gnss_Satellite(systemName[sys], d_acquisition_gnss_synchro->PRN)
|
||||||
|
<< " pll_bw = " << d_pll_bw_hz << " [Hz], pll_narrow_bw = " << d_pll_bw_narrow_hz << " [Hz]" << std::endl
|
||||||
|
<< " dll_bw = " << d_dll_bw_hz << " [Hz], dll_narrow_bw = " << d_dll_bw_narrow_hz << " [Hz]" << std::endl;
|
||||||
|
}
|
||||||
|
// UPDATE INTEGRATION TIME
|
||||||
|
CURRENT_INTEGRATION_TIME_S = static_cast<double>(d_extend_correlation_ms) * GLONASS_L1_CA_CODE_PERIOD;
|
||||||
|
d_code_loop_filter.set_pdi(CURRENT_INTEGRATION_TIME_S);
|
||||||
|
enable_dll_pll = true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if(d_preamble_synchronized == true)
|
||||||
|
{
|
||||||
|
// continue extended coherent correlation
|
||||||
|
// Compute the next buffer length based on the period of the PRN sequence and the code phase error estimation
|
||||||
|
double T_chip_seconds = 1.0 / d_code_freq_chips;
|
||||||
|
double T_prn_seconds = T_chip_seconds * GLONASS_L1_CA_CODE_LENGTH_CHIPS;
|
||||||
|
double T_prn_samples = T_prn_seconds * static_cast<double>(d_fs_in);
|
||||||
|
int K_prn_samples = round(T_prn_samples);
|
||||||
|
double K_T_prn_error_samples = K_prn_samples - T_prn_samples;
|
||||||
|
|
||||||
|
d_rem_code_phase_samples = d_rem_code_phase_samples - K_T_prn_error_samples;
|
||||||
|
d_rem_code_phase_integer_samples = round(d_rem_code_phase_samples); // round to a discrete number of samples
|
||||||
|
d_correlation_length_samples = K_prn_samples + d_rem_code_phase_integer_samples;
|
||||||
|
d_rem_code_phase_samples = d_rem_code_phase_samples - d_rem_code_phase_integer_samples;
|
||||||
|
// code phase step (Code resampler phase increment per sample) [chips/sample]
|
||||||
|
d_code_phase_step_chips = d_code_freq_chips / static_cast<double>(d_fs_in);
|
||||||
|
// remnant code phase [chips]
|
||||||
|
d_rem_code_phase_chips = d_rem_code_phase_samples * (d_code_freq_chips / static_cast<double>(d_fs_in));
|
||||||
|
d_rem_carrier_phase_rad = fmod(d_rem_carrier_phase_rad + d_carrier_phase_step_rad * static_cast<double>(d_correlation_length_samples), GLONASS_TWO_PI);
|
||||||
|
|
||||||
|
// UPDATE ACCUMULATED CARRIER PHASE
|
||||||
|
CORRECTED_INTEGRATION_TIME_S = (static_cast<double>(d_correlation_length_samples) / static_cast<double>(d_fs_in));
|
||||||
|
d_acc_carrier_phase_cycles -= d_carrier_phase_step_rad * d_correlation_length_samples / GLONASS_TWO_PI;
|
||||||
|
|
||||||
|
// disable tracking loop and inform telemetry decoder
|
||||||
|
enable_dll_pll = false;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// perform basic (1ms) correlation
|
||||||
|
// UPDATE INTEGRATION TIME
|
||||||
|
CURRENT_INTEGRATION_TIME_S = static_cast<double>(d_correlation_length_samples) / static_cast<double>(d_fs_in);
|
||||||
|
d_code_loop_filter.set_pdi(CURRENT_INTEGRATION_TIME_S);
|
||||||
|
enable_dll_pll = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// UPDATE INTEGRATION TIME
|
||||||
|
CURRENT_INTEGRATION_TIME_S = static_cast<double>(d_correlation_length_samples) / static_cast<double>(d_fs_in);
|
||||||
|
enable_dll_pll = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (enable_dll_pll == true)
|
||||||
|
{
|
||||||
|
// ################## PLL ##########################################################
|
||||||
|
// Update PLL discriminator [rads/Ti -> Secs/Ti]
|
||||||
|
d_carr_phase_error_secs_Ti = pll_cloop_two_quadrant_atan(d_correlator_outs[1]) / GLONASS_TWO_PI; // prompt output
|
||||||
|
d_carrier_doppler_old_hz = d_carrier_doppler_hz;
|
||||||
|
// Carrier discriminator filter
|
||||||
|
// NOTICE: The carrier loop filter includes the Carrier Doppler accumulator, as described in Kaplan
|
||||||
|
// Input [s/Ti] -> output [Hz]
|
||||||
|
d_carrier_doppler_hz = d_carrier_loop_filter.get_carrier_error(0.0, d_carr_phase_error_secs_Ti, CURRENT_INTEGRATION_TIME_S);
|
||||||
|
// PLL to DLL assistance [Secs/Ti]
|
||||||
|
d_pll_to_dll_assist_secs_Ti = (d_carrier_doppler_hz * CURRENT_INTEGRATION_TIME_S) / d_glonass_freq_ch;
|
||||||
|
// code Doppler frequency update
|
||||||
|
d_code_freq_chips = GLONASS_L1_CA_CODE_RATE_HZ + (((d_carrier_doppler_hz - d_carrier_doppler_old_hz) * GLONASS_L1_CA_CODE_RATE_HZ) / d_glonass_freq_ch);
|
||||||
|
|
||||||
|
// ################## DLL ##########################################################
|
||||||
|
// DLL discriminator
|
||||||
|
d_code_error_chips_Ti = dll_nc_e_minus_l_normalized(d_correlator_outs[0], d_correlator_outs[2]); // [chips/Ti] //early and late
|
||||||
|
// Code discriminator filter
|
||||||
|
d_code_error_filt_chips_s = d_code_loop_filter.get_code_nco(d_code_error_chips_Ti); // input [chips/Ti] -> output [chips/second]
|
||||||
|
d_code_error_filt_chips_Ti = d_code_error_filt_chips_s * CURRENT_INTEGRATION_TIME_S;
|
||||||
|
code_error_filt_secs_Ti = d_code_error_filt_chips_Ti / d_code_freq_chips; // [s/Ti]
|
||||||
|
|
||||||
|
// ################## CARRIER AND CODE NCO BUFFER ALIGNEMENT #######################
|
||||||
|
// keep alignment parameters for the next input buffer
|
||||||
|
// Compute the next buffer length based in the new period of the PRN sequence and the code phase error estimation
|
||||||
|
double T_chip_seconds = 1.0 / d_code_freq_chips;
|
||||||
|
double T_prn_seconds = T_chip_seconds * GLONASS_L1_CA_CODE_LENGTH_CHIPS;
|
||||||
|
double T_prn_samples = T_prn_seconds * static_cast<double>(d_fs_in);
|
||||||
|
double K_prn_samples = round(T_prn_samples);
|
||||||
|
double K_T_prn_error_samples = K_prn_samples - T_prn_samples;
|
||||||
|
|
||||||
|
d_rem_code_phase_samples = d_rem_code_phase_samples - K_T_prn_error_samples + code_error_filt_secs_Ti * static_cast<double>(d_fs_in); //(code_error_filt_secs_Ti + d_pll_to_dll_assist_secs_Ti) * static_cast<double>(d_fs_in);
|
||||||
|
d_rem_code_phase_integer_samples = round(d_rem_code_phase_samples); // round to a discrete number of samples
|
||||||
|
d_correlation_length_samples = K_prn_samples + d_rem_code_phase_integer_samples;
|
||||||
|
d_rem_code_phase_samples = d_rem_code_phase_samples - d_rem_code_phase_integer_samples;
|
||||||
|
|
||||||
|
//################### PLL COMMANDS #################################################
|
||||||
|
//carrier phase step (NCO phase increment per sample) [rads/sample]
|
||||||
|
d_carrier_phase_step_rad = GLONASS_TWO_PI * d_carrier_doppler_hz / static_cast<double>(d_fs_in);
|
||||||
|
d_acc_carrier_phase_cycles -= d_carrier_phase_step_rad * d_correlation_length_samples / GLONASS_TWO_PI;
|
||||||
|
// UPDATE ACCUMULATED CARRIER PHASE
|
||||||
|
CORRECTED_INTEGRATION_TIME_S = (static_cast<double>(d_correlation_length_samples) / static_cast<double>(d_fs_in));
|
||||||
|
//remnant carrier phase [rad]
|
||||||
|
d_rem_carrier_phase_rad = fmod(d_rem_carrier_phase_rad + GLONASS_TWO_PI * d_carrier_doppler_hz * CORRECTED_INTEGRATION_TIME_S, GLONASS_TWO_PI);
|
||||||
|
|
||||||
|
//################### DLL COMMANDS #################################################
|
||||||
|
//code phase step (Code resampler phase increment per sample) [chips/sample]
|
||||||
|
d_code_phase_step_chips = d_code_freq_chips / static_cast<double>(d_fs_in);
|
||||||
|
//remnant code phase [chips]
|
||||||
|
d_rem_code_phase_chips = d_rem_code_phase_samples * (d_code_freq_chips / static_cast<double>(d_fs_in));
|
||||||
|
|
||||||
|
// ####### CN0 ESTIMATION AND LOCK DETECTORS #######################################
|
||||||
|
if (d_cn0_estimation_counter < CN0_ESTIMATION_SAMPLES)
|
||||||
|
{
|
||||||
|
// fill buffer with prompt correlator output values
|
||||||
|
d_Prompt_buffer[d_cn0_estimation_counter] = d_correlator_outs[1]; // prompt
|
||||||
|
d_cn0_estimation_counter++;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
d_cn0_estimation_counter = 0;
|
||||||
|
// Code lock indicator
|
||||||
|
d_CN0_SNV_dB_Hz = cn0_svn_estimator(d_Prompt_buffer, CN0_ESTIMATION_SAMPLES, d_fs_in, GLONASS_L1_CA_CODE_LENGTH_CHIPS);
|
||||||
|
// Carrier lock indicator
|
||||||
|
d_carrier_lock_test = carrier_lock_detector(d_Prompt_buffer, CN0_ESTIMATION_SAMPLES);
|
||||||
|
// Loss of lock detection
|
||||||
|
if (d_carrier_lock_test < d_carrier_lock_threshold or d_CN0_SNV_dB_Hz < MINIMUM_VALID_CN0)
|
||||||
|
{
|
||||||
|
d_carrier_lock_fail_counter++;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (d_carrier_lock_fail_counter > 0) d_carrier_lock_fail_counter--;
|
||||||
|
}
|
||||||
|
if (d_carrier_lock_fail_counter > MAXIMUM_LOCK_FAIL_COUNTER)
|
||||||
|
{
|
||||||
|
std::cout << "Loss of lock in channel " << d_channel << "!" << std::endl;
|
||||||
|
LOG(INFO) << "Loss of lock in channel " << d_channel << "!";
|
||||||
|
this->message_port_pub(pmt::mp("events"), pmt::from_long(3));//3 -> loss of lock
|
||||||
|
d_carrier_lock_fail_counter = 0;
|
||||||
|
d_enable_tracking = false; // TODO: check if disabling tracking is consistent with the channel state machine
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// ########### Output the tracking data to navigation and PVT ##########
|
||||||
|
current_synchro_data.Prompt_I = static_cast<double>((d_correlator_outs[1]).real());
|
||||||
|
current_synchro_data.Prompt_Q = static_cast<double>((d_correlator_outs[1]).imag());
|
||||||
|
current_synchro_data.Tracking_sample_counter = d_sample_counter + d_correlation_length_samples;
|
||||||
|
current_synchro_data.Code_phase_samples = d_rem_code_phase_samples;
|
||||||
|
current_synchro_data.Carrier_phase_rads = GLONASS_TWO_PI * d_acc_carrier_phase_cycles;
|
||||||
|
current_synchro_data.Carrier_Doppler_hz = d_carrier_doppler_hz;
|
||||||
|
current_synchro_data.CN0_dB_hz = d_CN0_SNV_dB_Hz;
|
||||||
|
current_synchro_data.Flag_valid_symbol_output = true;
|
||||||
|
if (d_preamble_synchronized == true)
|
||||||
|
{
|
||||||
|
current_synchro_data.correlation_length_ms = d_extend_correlation_ms;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
current_synchro_data.correlation_length_ms = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
current_synchro_data.Prompt_I = static_cast<double>((d_correlator_outs[1]).real());
|
||||||
|
current_synchro_data.Prompt_Q = static_cast<double>((d_correlator_outs[1]).imag());
|
||||||
|
current_synchro_data.Tracking_sample_counter = d_sample_counter + d_correlation_length_samples;
|
||||||
|
current_synchro_data.Code_phase_samples = d_rem_code_phase_samples;
|
||||||
|
current_synchro_data.Carrier_phase_rads = GLONASS_TWO_PI * d_acc_carrier_phase_cycles;
|
||||||
|
current_synchro_data.Carrier_Doppler_hz = d_carrier_doppler_hz;// todo: project the carrier doppler
|
||||||
|
current_synchro_data.CN0_dB_hz = d_CN0_SNV_dB_Hz;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
for (int n = 0; n < d_n_correlator_taps; n++)
|
||||||
|
{
|
||||||
|
d_correlator_outs[n] = gr_complex(0,0);
|
||||||
|
}
|
||||||
|
|
||||||
|
current_synchro_data.System = {'R'};
|
||||||
|
current_synchro_data.Tracking_sample_counter = d_sample_counter + d_correlation_length_samples;
|
||||||
|
}
|
||||||
|
//assign the GNURadio block output data
|
||||||
|
current_synchro_data.fs=d_fs_in;
|
||||||
|
*out[0] = current_synchro_data;
|
||||||
|
if(d_dump)
|
||||||
|
{
|
||||||
|
// MULTIPLEXED FILE RECORDING - Record results to file
|
||||||
|
float prompt_I;
|
||||||
|
float prompt_Q;
|
||||||
|
float tmp_E, tmp_P, tmp_L;
|
||||||
|
double tmp_double;
|
||||||
|
prompt_I = d_correlator_outs[1].real();
|
||||||
|
prompt_Q = d_correlator_outs[1].imag();
|
||||||
|
tmp_E = std::abs<float>(d_correlator_outs[0]);
|
||||||
|
tmp_P = std::abs<float>(d_correlator_outs[1]);
|
||||||
|
tmp_L = std::abs<float>(d_correlator_outs[2]);
|
||||||
|
try
|
||||||
|
{
|
||||||
|
// EPR
|
||||||
|
d_dump_file.write(reinterpret_cast<char*>(&tmp_E), sizeof(float));
|
||||||
|
d_dump_file.write(reinterpret_cast<char*>(&tmp_P), sizeof(float));
|
||||||
|
d_dump_file.write(reinterpret_cast<char*>(&tmp_L), sizeof(float));
|
||||||
|
// PROMPT I and Q (to analyze navigation symbols)
|
||||||
|
d_dump_file.write(reinterpret_cast<char*>(&prompt_I), sizeof(float));
|
||||||
|
d_dump_file.write(reinterpret_cast<char*>(&prompt_Q), sizeof(float));
|
||||||
|
// PRN start sample stamp
|
||||||
|
//tmp_float=(float)d_sample_counter;
|
||||||
|
d_dump_file.write(reinterpret_cast<char*>(&d_sample_counter), sizeof(unsigned long int));
|
||||||
|
// accumulated carrier phase
|
||||||
|
d_dump_file.write(reinterpret_cast<char*>(&d_acc_carrier_phase_cycles), sizeof(double));
|
||||||
|
|
||||||
|
// carrier and code frequency
|
||||||
|
double if_freq_carrier = d_carrier_doppler_hz + d_if_freq + (DFRQ1_GLO * static_cast<double>(GLONASS_PRN.at(d_acquisition_gnss_synchro->PRN)));
|
||||||
|
d_dump_file.write(reinterpret_cast<char*>(&if_freq_carrier), sizeof(double));
|
||||||
|
d_dump_file.write(reinterpret_cast<char*>(&d_code_freq_chips), sizeof(double));
|
||||||
|
|
||||||
|
//PLL commands
|
||||||
|
d_dump_file.write(reinterpret_cast<char*>(&d_carr_phase_error_secs_Ti), sizeof(double));
|
||||||
|
d_dump_file.write(reinterpret_cast<char*>(&d_carrier_doppler_hz), sizeof(double));
|
||||||
|
|
||||||
|
//DLL commands
|
||||||
|
d_dump_file.write(reinterpret_cast<char*>(&d_code_error_chips_Ti), sizeof(double));
|
||||||
|
d_dump_file.write(reinterpret_cast<char*>(&d_code_error_filt_chips_Ti), sizeof(double));
|
||||||
|
|
||||||
|
// CN0 and carrier lock test
|
||||||
|
d_dump_file.write(reinterpret_cast<char*>(&d_CN0_SNV_dB_Hz), sizeof(double));
|
||||||
|
d_dump_file.write(reinterpret_cast<char*>(&d_carrier_lock_test), sizeof(double));
|
||||||
|
|
||||||
|
// AUX vars (for debug purposes)
|
||||||
|
tmp_double = d_code_error_chips_Ti * CURRENT_INTEGRATION_TIME_S;
|
||||||
|
d_dump_file.write(reinterpret_cast<char*>(&tmp_double), sizeof(double));
|
||||||
|
tmp_double = static_cast<double>(d_sample_counter + d_correlation_length_samples);
|
||||||
|
d_dump_file.write(reinterpret_cast<char*>(&tmp_double), sizeof(double));
|
||||||
|
|
||||||
|
// PRN
|
||||||
|
unsigned int prn_ = d_acquisition_gnss_synchro->PRN;
|
||||||
|
d_dump_file.write(reinterpret_cast<char*>(&prn_), sizeof(unsigned int));
|
||||||
|
}
|
||||||
|
catch (const std::ifstream::failure* e)
|
||||||
|
{
|
||||||
|
LOG(WARNING) << "Exception writing trk dump file " << e->what();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
consume_each(d_correlation_length_samples); // this is necessary in gr::block derivates
|
||||||
|
d_sample_counter += d_correlation_length_samples; //count for the processed samples
|
||||||
|
|
||||||
|
return 1; //output tracking result ALWAYS even in the case of d_enable_tracking==false
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void glonass_l1_ca_dll_pll_c_aid_tracking_cc::set_channel(unsigned int channel)
|
||||||
|
{
|
||||||
|
d_channel = channel;
|
||||||
|
LOG(INFO) << "Tracking Channel set to " << d_channel;
|
||||||
|
// ############# ENABLE DATA FILE LOG #################
|
||||||
|
if (d_dump == true)
|
||||||
|
{
|
||||||
|
if (d_dump_file.is_open() == false)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
d_dump_filename.append(boost::lexical_cast<std::string>(d_channel));
|
||||||
|
d_dump_filename.append(".dat");
|
||||||
|
d_dump_file.exceptions (std::ifstream::failbit | std::ifstream::badbit);
|
||||||
|
d_dump_file.open(d_dump_filename.c_str(), std::ios::out | std::ios::binary);
|
||||||
|
LOG(INFO) << "Tracking dump enabled on channel " << d_channel << " Log file: " << d_dump_filename.c_str() << std::endl;
|
||||||
|
}
|
||||||
|
catch (const std::ifstream::failure* e)
|
||||||
|
{
|
||||||
|
LOG(WARNING) << "channel " << d_channel << " Exception opening trk dump file " << e->what() << std::endl;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void glonass_l1_ca_dll_pll_c_aid_tracking_cc::set_gnss_synchro(Gnss_Synchro* p_gnss_synchro)
|
||||||
|
{
|
||||||
|
d_acquisition_gnss_synchro = p_gnss_synchro;
|
||||||
|
}
|
@ -0,0 +1,209 @@
|
|||||||
|
/*!
|
||||||
|
* \file glonass_l1_ca_dll_pll_c_aid_tracking_cc.h
|
||||||
|
* \brief Implementation of a code DLL + carrier PLL tracking block
|
||||||
|
* \author Gabriel Araujo, 2017. gabriel.araujo.5000(at)gmail.com
|
||||||
|
* \author Luis Esteve, 2017. luis(at)epsilon-formacion.com
|
||||||
|
* \author Damian Miralles, 2017. dmiralles2009(at)gmail.com
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* Code DLL + carrier PLL according to the algorithms described in:
|
||||||
|
* K.Borre, D.M.Akos, N.Bertelsen, P.Rinder, and S.H.Jensen,
|
||||||
|
* A Software-Defined GPS and Galileo Receiver. A Single-Frequency
|
||||||
|
* Approach, Birkha user, 2007
|
||||||
|
*
|
||||||
|
* -------------------------------------------------------------------------
|
||||||
|
*
|
||||||
|
* Copyright (C) 2010-2017 (see AUTHORS file for a list of contributors)
|
||||||
|
*
|
||||||
|
* GNSS-SDR is a software defined Global Navigation
|
||||||
|
* Satellite Systems receiver
|
||||||
|
*
|
||||||
|
* This file is part of GNSS-SDR.
|
||||||
|
*
|
||||||
|
* GNSS-SDR is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* GNSS-SDR is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with GNSS-SDR. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*
|
||||||
|
* -------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef GNSS_SDR_GLONASS_L1_CA_DLL_PLL_C_AID_TRACKING_CC_H
|
||||||
|
#define GNSS_SDR_GLONASS_L1_CA_DLL_PLL_C_AID_TRACKING_CC_H
|
||||||
|
|
||||||
|
#include <fstream>
|
||||||
|
#include <map>
|
||||||
|
#include <deque>
|
||||||
|
#include <string>
|
||||||
|
#include <gnuradio/block.h>
|
||||||
|
#include <pmt/pmt.h>
|
||||||
|
#include "gnss_synchro.h"
|
||||||
|
#include "tracking_2nd_DLL_filter.h"
|
||||||
|
#include "tracking_FLL_PLL_filter.h"
|
||||||
|
//#include "tracking_loop_filter.h"
|
||||||
|
#include "cpu_multicorrelator.h"
|
||||||
|
|
||||||
|
class glonass_l1_ca_dll_pll_c_aid_tracking_cc;
|
||||||
|
|
||||||
|
typedef boost::shared_ptr<glonass_l1_ca_dll_pll_c_aid_tracking_cc>
|
||||||
|
glonass_l1_ca_dll_pll_c_aid_tracking_cc_sptr;
|
||||||
|
|
||||||
|
glonass_l1_ca_dll_pll_c_aid_tracking_cc_sptr
|
||||||
|
glonass_l1_ca_dll_pll_c_aid_make_tracking_cc(long if_freq,
|
||||||
|
long fs_in, unsigned
|
||||||
|
int vector_length,
|
||||||
|
bool dump,
|
||||||
|
std::string dump_filename,
|
||||||
|
float pll_bw_hz,
|
||||||
|
float dll_bw_hz,
|
||||||
|
float pll_bw_narrow_hz,
|
||||||
|
float dll_bw_narrow_hz,
|
||||||
|
int extend_correlation_ms,
|
||||||
|
float early_late_space_chips);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief This class implements a DLL + PLL tracking loop block
|
||||||
|
*/
|
||||||
|
class glonass_l1_ca_dll_pll_c_aid_tracking_cc: public gr::block
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
~glonass_l1_ca_dll_pll_c_aid_tracking_cc();
|
||||||
|
|
||||||
|
void set_channel(unsigned int channel);
|
||||||
|
void set_gnss_synchro(Gnss_Synchro* p_gnss_synchro);
|
||||||
|
void start_tracking();
|
||||||
|
|
||||||
|
int general_work (int noutput_items, gr_vector_int &ninput_items,
|
||||||
|
gr_vector_const_void_star &input_items, gr_vector_void_star &output_items);
|
||||||
|
|
||||||
|
void forecast (int noutput_items, gr_vector_int &ninput_items_required);
|
||||||
|
|
||||||
|
private:
|
||||||
|
friend glonass_l1_ca_dll_pll_c_aid_tracking_cc_sptr
|
||||||
|
glonass_l1_ca_dll_pll_c_aid_make_tracking_cc(long if_freq,
|
||||||
|
long fs_in, unsigned
|
||||||
|
int vector_length,
|
||||||
|
bool dump,
|
||||||
|
std::string dump_filename,
|
||||||
|
float pll_bw_hz,
|
||||||
|
float dll_bw_hz,
|
||||||
|
float pll_bw_narrow_hz,
|
||||||
|
float dll_bw_narrow_hz,
|
||||||
|
int extend_correlation_ms,
|
||||||
|
float early_late_space_chips);
|
||||||
|
|
||||||
|
glonass_l1_ca_dll_pll_c_aid_tracking_cc(long if_freq,
|
||||||
|
long fs_in, unsigned
|
||||||
|
int vector_length,
|
||||||
|
bool dump,
|
||||||
|
std::string dump_filename,
|
||||||
|
float pll_bw_hz,
|
||||||
|
float dll_bw_hz,
|
||||||
|
float pll_bw_narrow_hz,
|
||||||
|
float dll_bw_narrow_hz,
|
||||||
|
int extend_correlation_ms,
|
||||||
|
float early_late_space_chips);
|
||||||
|
|
||||||
|
// tracking configuration vars
|
||||||
|
unsigned int d_vector_length;
|
||||||
|
bool d_dump;
|
||||||
|
|
||||||
|
Gnss_Synchro* d_acquisition_gnss_synchro;
|
||||||
|
unsigned int d_channel;
|
||||||
|
|
||||||
|
long d_if_freq;
|
||||||
|
long d_fs_in;
|
||||||
|
double d_glonass_freq_ch;
|
||||||
|
|
||||||
|
double d_early_late_spc_chips;
|
||||||
|
int d_n_correlator_taps;
|
||||||
|
|
||||||
|
gr_complex* d_ca_code;
|
||||||
|
float* d_local_code_shift_chips;
|
||||||
|
gr_complex* d_correlator_outs;
|
||||||
|
cpu_multicorrelator multicorrelator_cpu;
|
||||||
|
|
||||||
|
// remaining code phase and carrier phase between tracking loops
|
||||||
|
double d_rem_code_phase_samples;
|
||||||
|
double d_rem_code_phase_chips;
|
||||||
|
double d_rem_carrier_phase_rad;
|
||||||
|
int d_rem_code_phase_integer_samples;
|
||||||
|
|
||||||
|
// PLL and DLL filter library
|
||||||
|
//Tracking_2nd_DLL_filter d_code_loop_filter;
|
||||||
|
Tracking_2nd_DLL_filter d_code_loop_filter;
|
||||||
|
Tracking_FLL_PLL_filter d_carrier_loop_filter;
|
||||||
|
|
||||||
|
// acquisition
|
||||||
|
double d_acq_code_phase_samples;
|
||||||
|
double d_acq_carrier_doppler_hz;
|
||||||
|
|
||||||
|
// tracking vars
|
||||||
|
float d_dll_bw_hz;
|
||||||
|
float d_pll_bw_hz;
|
||||||
|
float d_dll_bw_narrow_hz;
|
||||||
|
float d_pll_bw_narrow_hz;
|
||||||
|
double d_code_freq_chips;
|
||||||
|
double d_code_phase_step_chips;
|
||||||
|
double d_carrier_doppler_hz;
|
||||||
|
double d_carrier_frequency_hz;
|
||||||
|
double d_carrier_doppler_old_hz;
|
||||||
|
double d_carrier_phase_step_rad;
|
||||||
|
double d_acc_carrier_phase_cycles;
|
||||||
|
double d_code_phase_samples;
|
||||||
|
double d_pll_to_dll_assist_secs_Ti;
|
||||||
|
double d_code_error_chips_Ti;
|
||||||
|
double d_code_error_filt_chips_s;
|
||||||
|
double d_code_error_filt_chips_Ti;
|
||||||
|
double d_carr_phase_error_secs_Ti;
|
||||||
|
|
||||||
|
// symbol history to detect bit transition
|
||||||
|
std::deque<gr_complex> d_E_history;
|
||||||
|
std::deque<gr_complex> d_P_history;
|
||||||
|
std::deque<gr_complex> d_L_history;
|
||||||
|
double d_preamble_timestamp_s;
|
||||||
|
int d_extend_correlation_ms;
|
||||||
|
bool d_enable_extended_integration;
|
||||||
|
bool d_preamble_synchronized;
|
||||||
|
void msg_handler_preamble_index(pmt::pmt_t msg);
|
||||||
|
|
||||||
|
//Integration period in samples
|
||||||
|
int d_correlation_length_samples;
|
||||||
|
|
||||||
|
//processing samples counters
|
||||||
|
unsigned long int d_sample_counter;
|
||||||
|
unsigned long int d_acq_sample_stamp;
|
||||||
|
|
||||||
|
// CN0 estimation and lock detector
|
||||||
|
int d_cn0_estimation_counter;
|
||||||
|
gr_complex* d_Prompt_buffer;
|
||||||
|
double d_carrier_lock_test;
|
||||||
|
double d_CN0_SNV_dB_Hz;
|
||||||
|
double d_carrier_lock_threshold;
|
||||||
|
int d_carrier_lock_fail_counter;
|
||||||
|
|
||||||
|
// control vars
|
||||||
|
bool d_enable_tracking;
|
||||||
|
bool d_pull_in;
|
||||||
|
|
||||||
|
// file dump
|
||||||
|
std::string d_dump_filename;
|
||||||
|
std::ofstream d_dump_file;
|
||||||
|
|
||||||
|
std::map<std::string, std::string> systemName;
|
||||||
|
std::string sys;
|
||||||
|
|
||||||
|
int save_matfile();
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif //GNSS_SDR_GLONASS_L1_CA_DLL_PLL_C_AID_TRACKING_CC_H
|
@ -0,0 +1,923 @@
|
|||||||
|
/*!
|
||||||
|
* \file glonass_l1_ca_dll_pll_c_aid_tracking_sc.cc
|
||||||
|
* \brief Implementation of a code DLL + carrier PLL tracking block
|
||||||
|
* \author Gabriel Araujo, 2017. gabriel.araujo.5000(at)gmail.com
|
||||||
|
* \author Luis Esteve, 2017. luis(at)epsilon-formacion.com
|
||||||
|
* \author Damian Miralles, 2017. dmiralles2009(at)gmail.com
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* Code DLL + carrier PLL according to the algorithms described in:
|
||||||
|
* K.Borre, D.M.Akos, N.Bertelsen, P.Rinder, and S.H.Jensen,
|
||||||
|
* A Software-Defined GPS and Galileo Receiver. A Single-Frequency
|
||||||
|
* Approach, Birkha user, 2007
|
||||||
|
*
|
||||||
|
* -------------------------------------------------------------------------
|
||||||
|
*
|
||||||
|
* Copyright (C) 2010-2017 (see AUTHORS file for a list of contributors)
|
||||||
|
*
|
||||||
|
* GNSS-SDR is a software defined Global Navigation
|
||||||
|
* Satellite Systems receiver
|
||||||
|
*
|
||||||
|
* This file is part of GNSS-SDR.
|
||||||
|
*
|
||||||
|
* GNSS-SDR is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* GNSS-SDR is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with GNSS-SDR. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*
|
||||||
|
* -------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "glonass_l1_ca_dll_pll_c_aid_tracking_sc.h"
|
||||||
|
#include <cmath>
|
||||||
|
#include <iostream>
|
||||||
|
#include <memory>
|
||||||
|
#include <sstream>
|
||||||
|
#include <boost/bind.hpp>
|
||||||
|
#include <boost/lexical_cast.hpp>
|
||||||
|
#include <gnuradio/io_signature.h>
|
||||||
|
#include <matio.h>
|
||||||
|
#include <pmt/pmt.h>
|
||||||
|
#include <volk_gnsssdr/volk_gnsssdr.h>
|
||||||
|
#include <glog/logging.h>
|
||||||
|
#include "gnss_synchro.h"
|
||||||
|
#include "glonass_l1_signal_processing.h"
|
||||||
|
#include "tracking_discriminators.h"
|
||||||
|
#include "lock_detectors.h"
|
||||||
|
#include "GLONASS_L1_CA.h"
|
||||||
|
#include "control_message_factory.h"
|
||||||
|
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \todo Include in definition header file
|
||||||
|
*/
|
||||||
|
#define CN0_ESTIMATION_SAMPLES 10
|
||||||
|
#define MINIMUM_VALID_CN0 25
|
||||||
|
#define MAXIMUM_LOCK_FAIL_COUNTER 50
|
||||||
|
#define CARRIER_LOCK_THRESHOLD 0.85
|
||||||
|
|
||||||
|
|
||||||
|
using google::LogMessage;
|
||||||
|
|
||||||
|
glonass_l1_ca_dll_pll_c_aid_tracking_sc_sptr
|
||||||
|
glonass_l1_ca_dll_pll_c_aid_make_tracking_sc(
|
||||||
|
long if_freq,
|
||||||
|
long fs_in,
|
||||||
|
unsigned int vector_length,
|
||||||
|
bool dump,
|
||||||
|
std::string dump_filename,
|
||||||
|
float pll_bw_hz,
|
||||||
|
float dll_bw_hz,
|
||||||
|
float pll_bw_narrow_hz,
|
||||||
|
float dll_bw_narrow_hz,
|
||||||
|
int extend_correlation_ms,
|
||||||
|
float early_late_space_chips)
|
||||||
|
{
|
||||||
|
return glonass_l1_ca_dll_pll_c_aid_tracking_sc_sptr(new glonass_l1_ca_dll_pll_c_aid_tracking_sc(if_freq,
|
||||||
|
fs_in, vector_length, dump, dump_filename, pll_bw_hz, dll_bw_hz, pll_bw_narrow_hz, dll_bw_narrow_hz, extend_correlation_ms, early_late_space_chips));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void glonass_l1_ca_dll_pll_c_aid_tracking_sc::forecast (int noutput_items,
|
||||||
|
gr_vector_int &ninput_items_required)
|
||||||
|
{
|
||||||
|
if (noutput_items != 0)
|
||||||
|
{
|
||||||
|
ninput_items_required[0] = static_cast<int>(d_vector_length) * 2; //set the required available samples in each call
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void glonass_l1_ca_dll_pll_c_aid_tracking_sc::msg_handler_preamble_index(pmt::pmt_t msg)
|
||||||
|
{
|
||||||
|
//pmt::print(msg);
|
||||||
|
DLOG(INFO) << "Extended correlation enabled for Tracking CH " << d_channel << ": Satellite " << Gnss_Satellite(systemName[sys], d_acquisition_gnss_synchro->PRN);
|
||||||
|
if (d_enable_extended_integration == false) //avoid re-setting preamble indicator
|
||||||
|
{
|
||||||
|
d_preamble_timestamp_s = pmt::to_double(msg);
|
||||||
|
d_enable_extended_integration = true;
|
||||||
|
d_preamble_synchronized = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
glonass_l1_ca_dll_pll_c_aid_tracking_sc::glonass_l1_ca_dll_pll_c_aid_tracking_sc(
|
||||||
|
long if_freq,
|
||||||
|
long fs_in,
|
||||||
|
unsigned int vector_length,
|
||||||
|
bool dump,
|
||||||
|
std::string dump_filename,
|
||||||
|
float pll_bw_hz,
|
||||||
|
float dll_bw_hz,
|
||||||
|
float pll_bw_narrow_hz,
|
||||||
|
float dll_bw_narrow_hz,
|
||||||
|
int extend_correlation_ms,
|
||||||
|
float early_late_space_chips) :
|
||||||
|
gr::block("glonass_l1_ca_dll_pll_c_aid_tracking_sc", gr::io_signature::make(1, 1, sizeof(lv_16sc_t)),
|
||||||
|
gr::io_signature::make(1, 1, sizeof(Gnss_Synchro)))
|
||||||
|
{
|
||||||
|
// Telemetry bit synchronization message port input
|
||||||
|
this->message_port_register_in(pmt::mp("preamble_timestamp_s"));
|
||||||
|
this->set_msg_handler(pmt::mp("preamble_timestamp_s"),
|
||||||
|
boost::bind(&glonass_l1_ca_dll_pll_c_aid_tracking_sc::msg_handler_preamble_index, this, _1));
|
||||||
|
this->message_port_register_out(pmt::mp("events"));
|
||||||
|
// initialize internal vars
|
||||||
|
d_dump = dump;
|
||||||
|
d_if_freq = if_freq;
|
||||||
|
d_fs_in = fs_in;
|
||||||
|
d_vector_length = vector_length;
|
||||||
|
d_dump_filename = dump_filename;
|
||||||
|
d_correlation_length_samples = static_cast<int>(d_vector_length);
|
||||||
|
|
||||||
|
// Initialize tracking ==========================================
|
||||||
|
d_pll_bw_hz = pll_bw_hz;
|
||||||
|
d_dll_bw_hz = dll_bw_hz;
|
||||||
|
d_pll_bw_narrow_hz = pll_bw_narrow_hz;
|
||||||
|
d_dll_bw_narrow_hz = dll_bw_narrow_hz;
|
||||||
|
d_code_loop_filter.set_DLL_BW(d_dll_bw_hz);
|
||||||
|
d_carrier_loop_filter.set_params(10.0, d_pll_bw_hz, 2);
|
||||||
|
d_extend_correlation_ms = extend_correlation_ms;
|
||||||
|
|
||||||
|
// --- DLL variables --------------------------------------------------------
|
||||||
|
d_early_late_spc_chips = early_late_space_chips; // Define early-late offset (in chips)
|
||||||
|
|
||||||
|
// Initialization of local code replica
|
||||||
|
// Get space for a vector with the C/A code replica sampled 1x/chip
|
||||||
|
d_ca_code = static_cast<gr_complex*>(volk_gnsssdr_malloc(static_cast<int>(GLONASS_L1_CA_CODE_LENGTH_CHIPS) * sizeof(gr_complex), volk_gnsssdr_get_alignment()));
|
||||||
|
d_ca_code_16sc = static_cast<lv_16sc_t*>(volk_gnsssdr_malloc(static_cast<int>(GLONASS_L1_CA_CODE_LENGTH_CHIPS) * sizeof(lv_16sc_t), volk_gnsssdr_get_alignment()));
|
||||||
|
|
||||||
|
// correlator outputs (scalar)
|
||||||
|
d_n_correlator_taps = 3; // Early, Prompt, and Late
|
||||||
|
|
||||||
|
d_correlator_outs_16sc = static_cast<lv_16sc_t*>(volk_gnsssdr_malloc(d_n_correlator_taps*sizeof(lv_16sc_t), volk_gnsssdr_get_alignment()));
|
||||||
|
for (int n = 0; n < d_n_correlator_taps; n++)
|
||||||
|
{
|
||||||
|
d_correlator_outs_16sc[n] = lv_cmake(0,0);
|
||||||
|
}
|
||||||
|
|
||||||
|
d_local_code_shift_chips = static_cast<float*>(volk_gnsssdr_malloc(d_n_correlator_taps*sizeof(float), volk_gnsssdr_get_alignment()));
|
||||||
|
// Set TAPs delay values [chips]
|
||||||
|
d_local_code_shift_chips[0] = - d_early_late_spc_chips;
|
||||||
|
d_local_code_shift_chips[1] = 0.0;
|
||||||
|
d_local_code_shift_chips[2] = d_early_late_spc_chips;
|
||||||
|
|
||||||
|
multicorrelator_cpu_16sc.init(2 * d_correlation_length_samples, d_n_correlator_taps);
|
||||||
|
|
||||||
|
//--- Perform initializations ------------------------------
|
||||||
|
// define initial code frequency basis of NCO
|
||||||
|
d_code_freq_chips = GLONASS_L1_CA_CODE_RATE_HZ;
|
||||||
|
// define residual code phase (in chips)
|
||||||
|
d_rem_code_phase_samples = 0.0;
|
||||||
|
// define residual carrier phase
|
||||||
|
d_rem_carrier_phase_rad = 0.0;
|
||||||
|
|
||||||
|
// sample synchronization
|
||||||
|
d_sample_counter = 0; //(from trk to tlm)
|
||||||
|
d_acq_sample_stamp = 0;
|
||||||
|
d_enable_tracking = false;
|
||||||
|
d_pull_in = false;
|
||||||
|
|
||||||
|
// CN0 estimation and lock detector buffers
|
||||||
|
d_cn0_estimation_counter = 0;
|
||||||
|
d_Prompt_buffer = new gr_complex[CN0_ESTIMATION_SAMPLES];
|
||||||
|
d_carrier_lock_test = 1;
|
||||||
|
d_CN0_SNV_dB_Hz = 0;
|
||||||
|
d_carrier_lock_fail_counter = 0;
|
||||||
|
d_carrier_lock_threshold = CARRIER_LOCK_THRESHOLD;
|
||||||
|
|
||||||
|
systemName["R"] = std::string("Glonass");
|
||||||
|
|
||||||
|
set_relative_rate(1.0 / static_cast<double>(d_vector_length));
|
||||||
|
|
||||||
|
d_acquisition_gnss_synchro = 0;
|
||||||
|
d_channel = 0;
|
||||||
|
d_acq_code_phase_samples = 0.0;
|
||||||
|
d_acq_carrier_doppler_hz = 0.0;
|
||||||
|
d_carrier_doppler_hz = 0.0;
|
||||||
|
d_acc_carrier_phase_cycles = 0.0;
|
||||||
|
d_code_phase_samples = 0.0;
|
||||||
|
d_enable_extended_integration = false;
|
||||||
|
d_preamble_synchronized = false;
|
||||||
|
d_rem_code_phase_integer_samples = 0;
|
||||||
|
d_code_error_chips_Ti = 0.0;
|
||||||
|
d_pll_to_dll_assist_secs_Ti = 0.0;
|
||||||
|
d_rem_code_phase_chips = 0.0;
|
||||||
|
d_code_phase_step_chips = 0.0;
|
||||||
|
d_carrier_phase_step_rad = 0.0;
|
||||||
|
d_code_error_filt_chips_s = 0.0;
|
||||||
|
d_code_error_filt_chips_Ti = 0.0;
|
||||||
|
d_preamble_timestamp_s = 0.0;
|
||||||
|
d_carr_phase_error_secs_Ti = 0.0;
|
||||||
|
|
||||||
|
d_carrier_frequency_hz = 0.0;
|
||||||
|
d_carrier_doppler_old_hz = 0.0;
|
||||||
|
|
||||||
|
d_glonass_freq_ch = 0;
|
||||||
|
//set_min_output_buffer((long int)300);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void glonass_l1_ca_dll_pll_c_aid_tracking_sc::start_tracking()
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* correct the code phase according to the delay between acq and trk
|
||||||
|
*/
|
||||||
|
d_acq_code_phase_samples = d_acquisition_gnss_synchro->Acq_delay_samples;
|
||||||
|
d_acq_carrier_doppler_hz = d_acquisition_gnss_synchro->Acq_doppler_hz;
|
||||||
|
d_acq_sample_stamp = d_acquisition_gnss_synchro->Acq_samplestamp_samples;
|
||||||
|
|
||||||
|
long int acq_trk_diff_samples;
|
||||||
|
double acq_trk_diff_seconds;
|
||||||
|
acq_trk_diff_samples = static_cast<long int>(d_sample_counter) - static_cast<long int>(d_acq_sample_stamp);//-d_vector_length;
|
||||||
|
DLOG(INFO) << "Number of samples between Acquisition and Tracking =" << acq_trk_diff_samples;
|
||||||
|
acq_trk_diff_seconds = static_cast<double>(acq_trk_diff_samples) / static_cast<double>(d_fs_in);
|
||||||
|
// Doppler effect
|
||||||
|
// Fd=(C/(C+Vr))*F
|
||||||
|
d_glonass_freq_ch = GLONASS_L1_CA_FREQ_HZ + (GLONASS_L1_CA_FREQ_HZ * GLONASS_PRN.at(d_acquisition_gnss_synchro->PRN));
|
||||||
|
double radial_velocity = (d_glonass_freq_ch + d_acq_carrier_doppler_hz) / d_glonass_freq_ch;
|
||||||
|
// new chip and prn sequence periods based on acq Doppler
|
||||||
|
double T_chip_mod_seconds;
|
||||||
|
double T_prn_mod_seconds;
|
||||||
|
double T_prn_mod_samples;
|
||||||
|
d_code_freq_chips = radial_velocity * GLONASS_L1_CA_CODE_RATE_HZ;
|
||||||
|
d_code_phase_step_chips = static_cast<double>(d_code_freq_chips) / static_cast<double>(d_fs_in);
|
||||||
|
T_chip_mod_seconds = 1.0 / d_code_freq_chips;
|
||||||
|
T_prn_mod_seconds = T_chip_mod_seconds * GLONASS_L1_CA_CODE_LENGTH_CHIPS;
|
||||||
|
T_prn_mod_samples = T_prn_mod_seconds * static_cast<double>(d_fs_in);
|
||||||
|
|
||||||
|
d_correlation_length_samples = round(T_prn_mod_samples);
|
||||||
|
|
||||||
|
double T_prn_true_seconds = GLONASS_L1_CA_CODE_LENGTH_CHIPS / GLONASS_L1_CA_CODE_RATE_HZ;
|
||||||
|
double T_prn_true_samples = T_prn_true_seconds * static_cast<double>(d_fs_in);
|
||||||
|
double T_prn_diff_seconds = T_prn_true_seconds - T_prn_mod_seconds;
|
||||||
|
double N_prn_diff = acq_trk_diff_seconds / T_prn_true_seconds;
|
||||||
|
double corrected_acq_phase_samples, delay_correction_samples;
|
||||||
|
corrected_acq_phase_samples = fmod((d_acq_code_phase_samples + T_prn_diff_seconds * N_prn_diff * static_cast<double>(d_fs_in)), T_prn_true_samples);
|
||||||
|
if (corrected_acq_phase_samples < 0)
|
||||||
|
{
|
||||||
|
corrected_acq_phase_samples = T_prn_mod_samples + corrected_acq_phase_samples;
|
||||||
|
}
|
||||||
|
delay_correction_samples = d_acq_code_phase_samples - corrected_acq_phase_samples;
|
||||||
|
|
||||||
|
d_acq_code_phase_samples = corrected_acq_phase_samples;
|
||||||
|
|
||||||
|
d_carrier_frequency_hz = d_acq_carrier_doppler_hz + d_if_freq + (DFRQ1_GLO * static_cast<double>(GLONASS_PRN.at(d_acquisition_gnss_synchro->PRN)));;
|
||||||
|
d_carrier_doppler_hz = d_acq_carrier_doppler_hz;
|
||||||
|
|
||||||
|
d_carrier_phase_step_rad = GLONASS_TWO_PI * d_carrier_frequency_hz / static_cast<double>(d_fs_in);
|
||||||
|
|
||||||
|
// DLL/PLL filter initialization
|
||||||
|
d_carrier_loop_filter.initialize(d_carrier_frequency_hz); // The carrier loop filter implements the Doppler accumulator
|
||||||
|
d_code_loop_filter.initialize(); // initialize the code filter
|
||||||
|
|
||||||
|
// generate local reference ALWAYS starting at chip 1 (1 sample per chip)
|
||||||
|
glonass_l1_ca_code_gen_complex(d_ca_code, 0);
|
||||||
|
volk_gnsssdr_32fc_convert_16ic(d_ca_code_16sc, d_ca_code, static_cast<int>(GLONASS_L1_CA_CODE_LENGTH_CHIPS));
|
||||||
|
|
||||||
|
multicorrelator_cpu_16sc.set_local_code_and_taps(static_cast<int>(GLONASS_L1_CA_CODE_LENGTH_CHIPS), d_ca_code_16sc, d_local_code_shift_chips);
|
||||||
|
for (int n = 0; n < d_n_correlator_taps; n++)
|
||||||
|
{
|
||||||
|
d_correlator_outs_16sc[n] = lv_16sc_t(0,0);
|
||||||
|
}
|
||||||
|
|
||||||
|
d_carrier_lock_fail_counter = 0;
|
||||||
|
d_rem_code_phase_samples = 0.0;
|
||||||
|
d_rem_carrier_phase_rad = 0.0;
|
||||||
|
d_rem_code_phase_chips = 0.0;
|
||||||
|
d_acc_carrier_phase_cycles = 0.0;
|
||||||
|
d_pll_to_dll_assist_secs_Ti = 0.0;
|
||||||
|
d_code_phase_samples = d_acq_code_phase_samples;
|
||||||
|
|
||||||
|
std::string sys_ = &d_acquisition_gnss_synchro->System;
|
||||||
|
sys = sys_.substr(0,1);
|
||||||
|
|
||||||
|
// DEBUG OUTPUT
|
||||||
|
std::cout << "Tracking start on channel " << d_channel << " for satellite " << Gnss_Satellite(systemName[sys], d_acquisition_gnss_synchro->PRN) << std::endl;
|
||||||
|
LOG(INFO) << "Starting tracking of satellite " << Gnss_Satellite(systemName[sys], d_acquisition_gnss_synchro->PRN) << " on channel " << d_channel;
|
||||||
|
|
||||||
|
// enable tracking
|
||||||
|
d_pull_in = true;
|
||||||
|
d_enable_tracking = true;
|
||||||
|
d_enable_extended_integration = true;
|
||||||
|
d_preamble_synchronized = true;
|
||||||
|
|
||||||
|
LOG(INFO) << "PULL-IN Doppler [Hz]=" << d_carrier_doppler_hz
|
||||||
|
<< " Code Phase correction [samples]=" << delay_correction_samples
|
||||||
|
<< " PULL-IN Code Phase [samples]=" << d_acq_code_phase_samples;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int glonass_l1_ca_dll_pll_c_aid_tracking_sc::save_matfile()
|
||||||
|
{
|
||||||
|
// READ DUMP FILE
|
||||||
|
std::ifstream::pos_type size;
|
||||||
|
int number_of_double_vars = 11;
|
||||||
|
int number_of_float_vars = 5;
|
||||||
|
int epoch_size_bytes = sizeof(unsigned long int) + sizeof(double) * number_of_double_vars +
|
||||||
|
sizeof(float) * number_of_float_vars + sizeof(unsigned int);
|
||||||
|
std::ifstream dump_file;
|
||||||
|
dump_file.exceptions(std::ifstream::failbit | std::ifstream::badbit);
|
||||||
|
try
|
||||||
|
{
|
||||||
|
dump_file.open(d_dump_filename.c_str(), std::ios::binary | std::ios::ate);
|
||||||
|
}
|
||||||
|
catch(const std::ifstream::failure &e)
|
||||||
|
{
|
||||||
|
std::cerr << "Problem opening dump file:" << e.what() << std::endl;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
// count number of epochs and rewind
|
||||||
|
long int num_epoch = 0;
|
||||||
|
if (dump_file.is_open())
|
||||||
|
{
|
||||||
|
size = dump_file.tellg();
|
||||||
|
num_epoch = static_cast<long int>(size) / static_cast<long int>(epoch_size_bytes);
|
||||||
|
dump_file.seekg(0, std::ios::beg);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
float * abs_E = new float [num_epoch];
|
||||||
|
float * abs_P = new float [num_epoch];
|
||||||
|
float * abs_L = new float [num_epoch];
|
||||||
|
float * Prompt_I = new float [num_epoch];
|
||||||
|
float * Prompt_Q = new float [num_epoch];
|
||||||
|
unsigned long int * PRN_start_sample_count = new unsigned long int [num_epoch];
|
||||||
|
double * acc_carrier_phase_rad = new double [num_epoch];
|
||||||
|
double * carrier_doppler_hz = new double [num_epoch];
|
||||||
|
double * code_freq_chips = new double [num_epoch];
|
||||||
|
double * carr_error_hz = new double [num_epoch];
|
||||||
|
double * carr_error_filt_hz = new double [num_epoch];
|
||||||
|
double * code_error_chips = new double [num_epoch];
|
||||||
|
double * code_error_filt_chips = new double [num_epoch];
|
||||||
|
double * CN0_SNV_dB_Hz = new double [num_epoch];
|
||||||
|
double * carrier_lock_test = new double [num_epoch];
|
||||||
|
double * aux1 = new double [num_epoch];
|
||||||
|
double * aux2 = new double [num_epoch];
|
||||||
|
unsigned int * PRN = new unsigned int [num_epoch];
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
if (dump_file.is_open())
|
||||||
|
{
|
||||||
|
for(long int i = 0; i < num_epoch; i++)
|
||||||
|
{
|
||||||
|
dump_file.read(reinterpret_cast<char *>(&abs_E[i]), sizeof(float));
|
||||||
|
dump_file.read(reinterpret_cast<char *>(&abs_P[i]), sizeof(float));
|
||||||
|
dump_file.read(reinterpret_cast<char *>(&abs_L[i]), sizeof(float));
|
||||||
|
dump_file.read(reinterpret_cast<char *>(&Prompt_I[i]), sizeof(float));
|
||||||
|
dump_file.read(reinterpret_cast<char *>(&Prompt_Q[i]), sizeof(float));
|
||||||
|
dump_file.read(reinterpret_cast<char *>(&PRN_start_sample_count[i]), sizeof(unsigned long int));
|
||||||
|
dump_file.read(reinterpret_cast<char *>(&acc_carrier_phase_rad[i]), sizeof(double));
|
||||||
|
dump_file.read(reinterpret_cast<char *>(&carrier_doppler_hz[i]), sizeof(double));
|
||||||
|
dump_file.read(reinterpret_cast<char *>(&code_freq_chips[i]), sizeof(double));
|
||||||
|
dump_file.read(reinterpret_cast<char *>(&carr_error_hz[i]), sizeof(double));
|
||||||
|
dump_file.read(reinterpret_cast<char *>(&carr_error_filt_hz[i]), sizeof(double));
|
||||||
|
dump_file.read(reinterpret_cast<char *>(&code_error_chips[i]), sizeof(double));
|
||||||
|
dump_file.read(reinterpret_cast<char *>(&code_error_filt_chips[i]), sizeof(double));
|
||||||
|
dump_file.read(reinterpret_cast<char *>(&CN0_SNV_dB_Hz[i]), sizeof(double));
|
||||||
|
dump_file.read(reinterpret_cast<char *>(&carrier_lock_test[i]), sizeof(double));
|
||||||
|
dump_file.read(reinterpret_cast<char *>(&aux1[i]), sizeof(double));
|
||||||
|
dump_file.read(reinterpret_cast<char *>(&aux2[i]), sizeof(double));
|
||||||
|
dump_file.read(reinterpret_cast<char *>(&PRN[i]), sizeof(unsigned int));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
dump_file.close();
|
||||||
|
}
|
||||||
|
catch (const std::ifstream::failure &e)
|
||||||
|
{
|
||||||
|
std::cerr << "Problem reading dump file:" << e.what() << std::endl;
|
||||||
|
delete[] abs_E;
|
||||||
|
delete[] abs_P;
|
||||||
|
delete[] abs_L;
|
||||||
|
delete[] Prompt_I;
|
||||||
|
delete[] Prompt_Q;
|
||||||
|
delete[] PRN_start_sample_count;
|
||||||
|
delete[] acc_carrier_phase_rad;
|
||||||
|
delete[] carrier_doppler_hz;
|
||||||
|
delete[] code_freq_chips;
|
||||||
|
delete[] carr_error_hz;
|
||||||
|
delete[] carr_error_filt_hz;
|
||||||
|
delete[] code_error_chips;
|
||||||
|
delete[] code_error_filt_chips;
|
||||||
|
delete[] CN0_SNV_dB_Hz;
|
||||||
|
delete[] carrier_lock_test;
|
||||||
|
delete[] aux1;
|
||||||
|
delete[] aux2;
|
||||||
|
delete[] PRN;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// WRITE MAT FILE
|
||||||
|
mat_t *matfp;
|
||||||
|
matvar_t *matvar;
|
||||||
|
std::string filename = d_dump_filename;
|
||||||
|
filename.erase(filename.length() - 4, 4);
|
||||||
|
filename.append(".mat");
|
||||||
|
matfp = Mat_CreateVer(filename.c_str(), NULL, MAT_FT_MAT73);
|
||||||
|
if(reinterpret_cast<long*>(matfp) != NULL)
|
||||||
|
{
|
||||||
|
size_t dims[2] = {1, static_cast<size_t>(num_epoch)};
|
||||||
|
matvar = Mat_VarCreate("abs_E", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims, abs_E, 0);
|
||||||
|
Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
|
Mat_VarFree(matvar);
|
||||||
|
|
||||||
|
matvar = Mat_VarCreate("abs_P", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims, abs_P, 0);
|
||||||
|
Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
|
Mat_VarFree(matvar);
|
||||||
|
|
||||||
|
matvar = Mat_VarCreate("abs_L", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims, abs_L, 0);
|
||||||
|
Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
|
Mat_VarFree(matvar);
|
||||||
|
|
||||||
|
matvar = Mat_VarCreate("Prompt_I", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims, Prompt_I, 0);
|
||||||
|
Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
|
Mat_VarFree(matvar);
|
||||||
|
|
||||||
|
matvar = Mat_VarCreate("Prompt_Q", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims, Prompt_Q, 0);
|
||||||
|
Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
|
Mat_VarFree(matvar);
|
||||||
|
|
||||||
|
matvar = Mat_VarCreate("PRN_start_sample_count", MAT_C_UINT64, MAT_T_UINT64, 2, dims, PRN_start_sample_count, 0);
|
||||||
|
Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
|
Mat_VarFree(matvar);
|
||||||
|
|
||||||
|
matvar = Mat_VarCreate("acc_carrier_phase_rad", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims, acc_carrier_phase_rad, 0);
|
||||||
|
Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
|
Mat_VarFree(matvar);
|
||||||
|
|
||||||
|
matvar = Mat_VarCreate("carrier_doppler_hz", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims, carrier_doppler_hz, 0);
|
||||||
|
Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
|
Mat_VarFree(matvar);
|
||||||
|
|
||||||
|
matvar = Mat_VarCreate("code_freq_chips", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims, code_freq_chips, 0);
|
||||||
|
Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
|
Mat_VarFree(matvar);
|
||||||
|
|
||||||
|
matvar = Mat_VarCreate("carr_error_hz", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims, carr_error_hz, 0);
|
||||||
|
Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
|
Mat_VarFree(matvar);
|
||||||
|
|
||||||
|
matvar = Mat_VarCreate("carr_error_filt_hz", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims, carr_error_filt_hz, 0);
|
||||||
|
Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
|
Mat_VarFree(matvar);
|
||||||
|
|
||||||
|
matvar = Mat_VarCreate("code_error_chips", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims, code_error_chips, 0);
|
||||||
|
Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
|
Mat_VarFree(matvar);
|
||||||
|
|
||||||
|
matvar = Mat_VarCreate("code_error_filt_chips", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims, code_error_filt_chips, 0);
|
||||||
|
Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
|
Mat_VarFree(matvar);
|
||||||
|
|
||||||
|
matvar = Mat_VarCreate("CN0_SNV_dB_Hz", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims, CN0_SNV_dB_Hz, 0);
|
||||||
|
Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
|
Mat_VarFree(matvar);
|
||||||
|
|
||||||
|
matvar = Mat_VarCreate("carrier_lock_test", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims, carrier_lock_test, 0);
|
||||||
|
Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
|
Mat_VarFree(matvar);
|
||||||
|
|
||||||
|
matvar = Mat_VarCreate("aux1", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims, aux1, 0);
|
||||||
|
Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
|
Mat_VarFree(matvar);
|
||||||
|
|
||||||
|
matvar = Mat_VarCreate("aux2", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims, aux2, 0);
|
||||||
|
Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
|
Mat_VarFree(matvar);
|
||||||
|
|
||||||
|
matvar = Mat_VarCreate("PRN", MAT_C_UINT32, MAT_T_UINT32, 2, dims, PRN, 0);
|
||||||
|
Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
|
Mat_VarFree(matvar);
|
||||||
|
}
|
||||||
|
Mat_Close(matfp);
|
||||||
|
delete[] abs_E;
|
||||||
|
delete[] abs_P;
|
||||||
|
delete[] abs_L;
|
||||||
|
delete[] Prompt_I;
|
||||||
|
delete[] Prompt_Q;
|
||||||
|
delete[] PRN_start_sample_count;
|
||||||
|
delete[] acc_carrier_phase_rad;
|
||||||
|
delete[] carrier_doppler_hz;
|
||||||
|
delete[] code_freq_chips;
|
||||||
|
delete[] carr_error_hz;
|
||||||
|
delete[] carr_error_filt_hz;
|
||||||
|
delete[] code_error_chips;
|
||||||
|
delete[] code_error_filt_chips;
|
||||||
|
delete[] CN0_SNV_dB_Hz;
|
||||||
|
delete[] carrier_lock_test;
|
||||||
|
delete[] aux1;
|
||||||
|
delete[] aux2;
|
||||||
|
delete[] PRN;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
glonass_l1_ca_dll_pll_c_aid_tracking_sc::~glonass_l1_ca_dll_pll_c_aid_tracking_sc()
|
||||||
|
{
|
||||||
|
if (d_dump_file.is_open())
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
d_dump_file.close();
|
||||||
|
}
|
||||||
|
catch(const std::exception & ex)
|
||||||
|
{
|
||||||
|
LOG(WARNING) << "Exception in destructor " << ex.what();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(d_dump)
|
||||||
|
{
|
||||||
|
if(d_channel == 0)
|
||||||
|
{
|
||||||
|
std::cout << "Writing .mat files ...";
|
||||||
|
}
|
||||||
|
glonass_l1_ca_dll_pll_c_aid_tracking_sc::save_matfile();
|
||||||
|
if(d_channel == 0)
|
||||||
|
{
|
||||||
|
std::cout << " done." << std::endl;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
volk_gnsssdr_free(d_local_code_shift_chips);
|
||||||
|
volk_gnsssdr_free(d_ca_code);
|
||||||
|
volk_gnsssdr_free(d_ca_code_16sc);
|
||||||
|
volk_gnsssdr_free(d_correlator_outs_16sc);
|
||||||
|
|
||||||
|
delete[] d_Prompt_buffer;
|
||||||
|
multicorrelator_cpu_16sc.free();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
int glonass_l1_ca_dll_pll_c_aid_tracking_sc::general_work (int noutput_items __attribute__((unused)), gr_vector_int &ninput_items __attribute__((unused)),
|
||||||
|
gr_vector_const_void_star &input_items, gr_vector_void_star &output_items)
|
||||||
|
{
|
||||||
|
// Block input data and block output stream pointers
|
||||||
|
const lv_16sc_t* in = reinterpret_cast<const lv_16sc_t*>(input_items[0]); // PRN start block alignment
|
||||||
|
Gnss_Synchro **out = reinterpret_cast<Gnss_Synchro **>(&output_items[0]);
|
||||||
|
|
||||||
|
// GNSS_SYNCHRO OBJECT to interchange data between tracking->telemetry_decoder
|
||||||
|
Gnss_Synchro current_synchro_data = Gnss_Synchro();
|
||||||
|
|
||||||
|
// process vars
|
||||||
|
double code_error_filt_secs_Ti = 0.0;
|
||||||
|
double CURRENT_INTEGRATION_TIME_S = 0.0;
|
||||||
|
double CORRECTED_INTEGRATION_TIME_S = 0.0;
|
||||||
|
|
||||||
|
if (d_enable_tracking == true)
|
||||||
|
{
|
||||||
|
// Fill the acquisition data
|
||||||
|
current_synchro_data = *d_acquisition_gnss_synchro;
|
||||||
|
// Receiver signal alignment
|
||||||
|
if (d_pull_in == true)
|
||||||
|
{
|
||||||
|
int samples_offset;
|
||||||
|
double acq_trk_shif_correction_samples;
|
||||||
|
int acq_to_trk_delay_samples;
|
||||||
|
acq_to_trk_delay_samples = d_sample_counter - d_acq_sample_stamp;
|
||||||
|
acq_trk_shif_correction_samples = d_correlation_length_samples - fmod(static_cast<double>(acq_to_trk_delay_samples), static_cast<double>(d_correlation_length_samples));
|
||||||
|
samples_offset = round(d_acq_code_phase_samples + acq_trk_shif_correction_samples);
|
||||||
|
current_synchro_data.Tracking_sample_counter = d_sample_counter + samples_offset;
|
||||||
|
d_sample_counter += samples_offset; // count for the processed samples
|
||||||
|
d_pull_in = false;
|
||||||
|
d_acc_carrier_phase_cycles -= d_carrier_phase_step_rad * samples_offset / GLONASS_TWO_PI;
|
||||||
|
current_synchro_data.Carrier_phase_rads = d_acc_carrier_phase_cycles * GLONASS_TWO_PI;
|
||||||
|
current_synchro_data.Carrier_Doppler_hz = d_carrier_doppler_hz;
|
||||||
|
current_synchro_data.fs=d_fs_in;
|
||||||
|
*out[0] = current_synchro_data;
|
||||||
|
consume_each(samples_offset); // shift input to perform alignment with local replica
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ################# CARRIER WIPEOFF AND CORRELATORS ##############################
|
||||||
|
// perform carrier wipe-off and compute Early, Prompt and Late correlation
|
||||||
|
multicorrelator_cpu_16sc.set_input_output_vectors(d_correlator_outs_16sc, in);
|
||||||
|
multicorrelator_cpu_16sc.Carrier_wipeoff_multicorrelator_resampler(d_rem_carrier_phase_rad,
|
||||||
|
d_carrier_phase_step_rad,
|
||||||
|
d_rem_code_phase_chips,
|
||||||
|
d_code_phase_step_chips,
|
||||||
|
d_correlation_length_samples);
|
||||||
|
|
||||||
|
// ####### coherent intergration extension
|
||||||
|
// keep the last symbols
|
||||||
|
d_E_history.push_back(d_correlator_outs_16sc[0]); // save early output
|
||||||
|
d_P_history.push_back(d_correlator_outs_16sc[1]); // save prompt output
|
||||||
|
d_L_history.push_back(d_correlator_outs_16sc[2]); // save late output
|
||||||
|
|
||||||
|
if (static_cast<int>(d_P_history.size()) > d_extend_correlation_ms)
|
||||||
|
{
|
||||||
|
d_E_history.pop_front();
|
||||||
|
d_P_history.pop_front();
|
||||||
|
d_L_history.pop_front();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool enable_dll_pll;
|
||||||
|
if (d_enable_extended_integration == true)
|
||||||
|
{
|
||||||
|
long int symbol_diff = round(1000.0 * ((static_cast<double>(d_sample_counter) + d_rem_code_phase_samples) / static_cast<double>(d_fs_in) - d_preamble_timestamp_s));
|
||||||
|
if (symbol_diff > 0 and symbol_diff % d_extend_correlation_ms == 0)
|
||||||
|
{
|
||||||
|
// compute coherent integration and enable tracking loop
|
||||||
|
// perform coherent integration using correlator output history
|
||||||
|
// std::cout<<"##### RESET COHERENT INTEGRATION ####"<<std::endl;
|
||||||
|
d_correlator_outs_16sc[0] = lv_cmake(0,0);
|
||||||
|
d_correlator_outs_16sc[1] = lv_cmake(0,0);
|
||||||
|
d_correlator_outs_16sc[2] = lv_cmake(0,0);
|
||||||
|
for (int n = 0; n < d_extend_correlation_ms; n++)
|
||||||
|
{
|
||||||
|
d_correlator_outs_16sc[0] += d_E_history.at(n);
|
||||||
|
d_correlator_outs_16sc[1] += d_P_history.at(n);
|
||||||
|
d_correlator_outs_16sc[2] += d_L_history.at(n);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (d_preamble_synchronized == false)
|
||||||
|
{
|
||||||
|
d_code_loop_filter.set_DLL_BW(d_dll_bw_narrow_hz);
|
||||||
|
d_carrier_loop_filter.set_params(10.0, d_pll_bw_narrow_hz,2);
|
||||||
|
d_preamble_synchronized = true;
|
||||||
|
std::cout << "Enabled " << d_extend_correlation_ms << " [ms] extended correlator for CH "<< d_channel << " : Satellite " << Gnss_Satellite(systemName[sys], d_acquisition_gnss_synchro->PRN)
|
||||||
|
<< " pll_bw = " << d_pll_bw_hz << " [Hz], pll_narrow_bw = " << d_pll_bw_narrow_hz << " [Hz]" << std::endl
|
||||||
|
<< " dll_bw = " << d_dll_bw_hz << " [Hz], dll_narrow_bw = " << d_dll_bw_narrow_hz << " [Hz]" << std::endl;
|
||||||
|
}
|
||||||
|
// UPDATE INTEGRATION TIME
|
||||||
|
CURRENT_INTEGRATION_TIME_S = static_cast<double>(d_extend_correlation_ms) * GLONASS_L1_CA_CODE_PERIOD;
|
||||||
|
enable_dll_pll = true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if(d_preamble_synchronized == true)
|
||||||
|
{
|
||||||
|
// continue extended coherent correlation
|
||||||
|
// Compute the next buffer length based on the period of the PRN sequence and the code phase error estimation
|
||||||
|
double T_chip_seconds = 1.0 / d_code_freq_chips;
|
||||||
|
double T_prn_seconds = T_chip_seconds * GLONASS_L1_CA_CODE_LENGTH_CHIPS;
|
||||||
|
double T_prn_samples = T_prn_seconds * static_cast<double>(d_fs_in);
|
||||||
|
int K_prn_samples = round(T_prn_samples);
|
||||||
|
double K_T_prn_error_samples = K_prn_samples - T_prn_samples;
|
||||||
|
|
||||||
|
d_rem_code_phase_samples = d_rem_code_phase_samples - K_T_prn_error_samples;
|
||||||
|
d_rem_code_phase_integer_samples = round(d_rem_code_phase_samples); // round to a discrete number of samples
|
||||||
|
d_correlation_length_samples = K_prn_samples + d_rem_code_phase_integer_samples;
|
||||||
|
d_rem_code_phase_samples = d_rem_code_phase_samples - d_rem_code_phase_integer_samples;
|
||||||
|
// code phase step (Code resampler phase increment per sample) [chips/sample]
|
||||||
|
d_code_phase_step_chips = d_code_freq_chips / static_cast<double>(d_fs_in);
|
||||||
|
// remnant code phase [chips]
|
||||||
|
d_rem_code_phase_chips = d_rem_code_phase_samples * (d_code_freq_chips / static_cast<double>(d_fs_in));
|
||||||
|
d_rem_carrier_phase_rad = fmod(d_rem_carrier_phase_rad + d_carrier_phase_step_rad * static_cast<double>(d_correlation_length_samples), GLONASS_TWO_PI);
|
||||||
|
|
||||||
|
// UPDATE ACCUMULATED CARRIER PHASE
|
||||||
|
CORRECTED_INTEGRATION_TIME_S = (static_cast<double>(d_correlation_length_samples) / static_cast<double>(d_fs_in));
|
||||||
|
d_acc_carrier_phase_cycles -= d_carrier_phase_step_rad * d_correlation_length_samples / GLONASS_TWO_PI;
|
||||||
|
|
||||||
|
// disable tracking loop and inform telemetry decoder
|
||||||
|
enable_dll_pll = false;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// perform basic (1ms) correlation
|
||||||
|
// UPDATE INTEGRATION TIME
|
||||||
|
CURRENT_INTEGRATION_TIME_S = static_cast<double>(d_correlation_length_samples) / static_cast<double>(d_fs_in);
|
||||||
|
enable_dll_pll = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// UPDATE INTEGRATION TIME
|
||||||
|
CURRENT_INTEGRATION_TIME_S = static_cast<double>(d_correlation_length_samples) / static_cast<double>(d_fs_in);
|
||||||
|
enable_dll_pll = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (enable_dll_pll == true)
|
||||||
|
{
|
||||||
|
// ################## PLL ##########################################################
|
||||||
|
// Update PLL discriminator [rads/Ti -> Secs/Ti]
|
||||||
|
d_carr_phase_error_secs_Ti = pll_cloop_two_quadrant_atan(std::complex<float>(d_correlator_outs_16sc[1].real(),d_correlator_outs_16sc[1].imag())) / GLONASS_TWO_PI; //prompt output
|
||||||
|
d_carrier_doppler_old_hz = d_carrier_doppler_hz;
|
||||||
|
// Carrier discriminator filter
|
||||||
|
// NOTICE: The carrier loop filter includes the Carrier Doppler accumulator, as described in Kaplan
|
||||||
|
// Input [s/Ti] -> output [Hz]
|
||||||
|
d_carrier_doppler_hz = d_carrier_loop_filter.get_carrier_error(0.0, d_carr_phase_error_secs_Ti, CURRENT_INTEGRATION_TIME_S);
|
||||||
|
// PLL to DLL assistance [Secs/Ti]
|
||||||
|
d_pll_to_dll_assist_secs_Ti = (d_carrier_doppler_hz * CURRENT_INTEGRATION_TIME_S) / d_glonass_freq_ch;
|
||||||
|
// code Doppler frequency update
|
||||||
|
d_code_freq_chips = GLONASS_L1_CA_CODE_RATE_HZ + (((d_carrier_doppler_hz - d_carrier_doppler_old_hz) * GLONASS_L1_CA_CODE_RATE_HZ) / d_glonass_freq_ch);
|
||||||
|
|
||||||
|
// ################## DLL ##########################################################
|
||||||
|
// DLL discriminator
|
||||||
|
d_code_error_chips_Ti = dll_nc_e_minus_l_normalized(std::complex<float>(d_correlator_outs_16sc[0].real(),d_correlator_outs_16sc[0].imag()), std::complex<float>(d_correlator_outs_16sc[2].real(),d_correlator_outs_16sc[2].imag())); // [chips/Ti] //early and late
|
||||||
|
// Code discriminator filter
|
||||||
|
d_code_error_filt_chips_s = d_code_loop_filter.get_code_nco(d_code_error_chips_Ti); // input [chips/Ti] -> output [chips/second]
|
||||||
|
d_code_error_filt_chips_Ti = d_code_error_filt_chips_s * CURRENT_INTEGRATION_TIME_S;
|
||||||
|
code_error_filt_secs_Ti = d_code_error_filt_chips_Ti / d_code_freq_chips; // [s/Ti]
|
||||||
|
|
||||||
|
// ################## CARRIER AND CODE NCO BUFFER ALIGNEMENT #######################
|
||||||
|
// keep alignment parameters for the next input buffer
|
||||||
|
// Compute the next buffer length based in the new period of the PRN sequence and the code phase error estimation
|
||||||
|
double T_chip_seconds = 1.0 / d_code_freq_chips;
|
||||||
|
double T_prn_seconds = T_chip_seconds * GLONASS_L1_CA_CODE_LENGTH_CHIPS;
|
||||||
|
double T_prn_samples = T_prn_seconds * static_cast<double>(d_fs_in);
|
||||||
|
double K_prn_samples = round(T_prn_samples);
|
||||||
|
double K_T_prn_error_samples = K_prn_samples - T_prn_samples;
|
||||||
|
|
||||||
|
d_rem_code_phase_samples = d_rem_code_phase_samples - K_T_prn_error_samples + code_error_filt_secs_Ti * static_cast<double>(d_fs_in); //(code_error_filt_secs_Ti + d_pll_to_dll_assist_secs_Ti) * static_cast<double>(d_fs_in);
|
||||||
|
d_rem_code_phase_integer_samples = round(d_rem_code_phase_samples); // round to a discrete number of samples
|
||||||
|
d_correlation_length_samples = K_prn_samples + d_rem_code_phase_integer_samples;
|
||||||
|
d_rem_code_phase_samples = d_rem_code_phase_samples - d_rem_code_phase_integer_samples;
|
||||||
|
|
||||||
|
//################### PLL COMMANDS #################################################
|
||||||
|
//carrier phase step (NCO phase increment per sample) [rads/sample]
|
||||||
|
d_carrier_phase_step_rad = GLONASS_TWO_PI * d_carrier_doppler_hz / static_cast<double>(d_fs_in);
|
||||||
|
d_acc_carrier_phase_cycles -= d_carrier_phase_step_rad * d_correlation_length_samples / GLONASS_TWO_PI;
|
||||||
|
// UPDATE ACCUMULATED CARRIER PHASE
|
||||||
|
CORRECTED_INTEGRATION_TIME_S = (static_cast<double>(d_correlation_length_samples) / static_cast<double>(d_fs_in));
|
||||||
|
//remnant carrier phase [rad]
|
||||||
|
d_rem_carrier_phase_rad = fmod(d_rem_carrier_phase_rad + GLONASS_TWO_PI * d_carrier_doppler_hz * CORRECTED_INTEGRATION_TIME_S, GLONASS_TWO_PI);
|
||||||
|
|
||||||
|
//################### DLL COMMANDS #################################################
|
||||||
|
//code phase step (Code resampler phase increment per sample) [chips/sample]
|
||||||
|
d_code_phase_step_chips = d_code_freq_chips / static_cast<double>(d_fs_in);
|
||||||
|
//remnant code phase [chips]
|
||||||
|
d_rem_code_phase_chips = d_rem_code_phase_samples * (d_code_freq_chips / static_cast<double>(d_fs_in));
|
||||||
|
|
||||||
|
// ####### CN0 ESTIMATION AND LOCK DETECTORS #######################################
|
||||||
|
if (d_cn0_estimation_counter < CN0_ESTIMATION_SAMPLES)
|
||||||
|
{
|
||||||
|
// fill buffer with prompt correlator output values
|
||||||
|
d_Prompt_buffer[d_cn0_estimation_counter] = lv_cmake(static_cast<float>(d_correlator_outs_16sc[1].real()), static_cast<float>(d_correlator_outs_16sc[1].imag()) ); // prompt
|
||||||
|
d_cn0_estimation_counter++;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
d_cn0_estimation_counter = 0;
|
||||||
|
// Code lock indicator
|
||||||
|
d_CN0_SNV_dB_Hz = cn0_svn_estimator(d_Prompt_buffer, CN0_ESTIMATION_SAMPLES, d_fs_in, GLONASS_L1_CA_CODE_LENGTH_CHIPS);
|
||||||
|
// Carrier lock indicator
|
||||||
|
d_carrier_lock_test = carrier_lock_detector(d_Prompt_buffer, CN0_ESTIMATION_SAMPLES);
|
||||||
|
// Loss of lock detection
|
||||||
|
if (d_carrier_lock_test < d_carrier_lock_threshold or d_CN0_SNV_dB_Hz < MINIMUM_VALID_CN0)
|
||||||
|
{
|
||||||
|
d_carrier_lock_fail_counter++;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (d_carrier_lock_fail_counter > 0) d_carrier_lock_fail_counter--;
|
||||||
|
}
|
||||||
|
if (d_carrier_lock_fail_counter > MAXIMUM_LOCK_FAIL_COUNTER)
|
||||||
|
{
|
||||||
|
std::cout << "Loss of lock in channel " << d_channel << "!" << std::endl;
|
||||||
|
LOG(INFO) << "Loss of lock in channel " << d_channel << "!";
|
||||||
|
this->message_port_pub(pmt::mp("events"), pmt::from_long(3));//3 -> loss of lock
|
||||||
|
d_carrier_lock_fail_counter = 0;
|
||||||
|
d_enable_tracking = false; // TODO: check if disabling tracking is consistent with the channel state machine
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// ########### Output the tracking data to navigation and PVT ##########
|
||||||
|
current_synchro_data.Prompt_I = static_cast<double>((d_correlator_outs_16sc[1]).real());
|
||||||
|
current_synchro_data.Prompt_Q = static_cast<double>((d_correlator_outs_16sc[1]).imag());
|
||||||
|
// Tracking_timestamp_secs is aligned with the CURRENT PRN start sample (Hybridization OK!)
|
||||||
|
current_synchro_data.Tracking_sample_counter = d_sample_counter + d_correlation_length_samples;
|
||||||
|
current_synchro_data.Code_phase_samples = d_rem_code_phase_samples;
|
||||||
|
current_synchro_data.Carrier_phase_rads = GLONASS_TWO_PI * d_acc_carrier_phase_cycles;
|
||||||
|
current_synchro_data.Carrier_Doppler_hz = d_carrier_doppler_hz;
|
||||||
|
current_synchro_data.CN0_dB_hz = d_CN0_SNV_dB_Hz;
|
||||||
|
current_synchro_data.Flag_valid_symbol_output = true;
|
||||||
|
if (d_preamble_synchronized == true)
|
||||||
|
{
|
||||||
|
current_synchro_data.correlation_length_ms = d_extend_correlation_ms;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
current_synchro_data.correlation_length_ms = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
current_synchro_data.Prompt_I = static_cast<double>((d_correlator_outs_16sc[1]).real());
|
||||||
|
current_synchro_data.Prompt_Q = static_cast<double>((d_correlator_outs_16sc[1]).imag());
|
||||||
|
current_synchro_data.Tracking_sample_counter = d_sample_counter + d_correlation_length_samples;
|
||||||
|
current_synchro_data.Code_phase_samples = d_rem_code_phase_samples;
|
||||||
|
current_synchro_data.Carrier_phase_rads = GLONASS_TWO_PI * d_acc_carrier_phase_cycles;
|
||||||
|
current_synchro_data.Carrier_Doppler_hz = d_carrier_doppler_hz;// todo: project the carrier doppler
|
||||||
|
current_synchro_data.CN0_dB_hz = d_CN0_SNV_dB_Hz;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
for (int n = 0; n < d_n_correlator_taps; n++)
|
||||||
|
{
|
||||||
|
d_correlator_outs_16sc[n] = lv_cmake(0,0);
|
||||||
|
}
|
||||||
|
|
||||||
|
current_synchro_data.System = {'R'};
|
||||||
|
current_synchro_data.Tracking_sample_counter = d_sample_counter + d_correlation_length_samples;
|
||||||
|
}
|
||||||
|
current_synchro_data.fs=d_fs_in;
|
||||||
|
*out[0] = current_synchro_data;
|
||||||
|
if(d_dump)
|
||||||
|
{
|
||||||
|
// MULTIPLEXED FILE RECORDING - Record results to file
|
||||||
|
float prompt_I;
|
||||||
|
float prompt_Q;
|
||||||
|
float tmp_E, tmp_P, tmp_L;
|
||||||
|
double tmp_double;
|
||||||
|
prompt_I = d_correlator_outs_16sc[1].real();
|
||||||
|
prompt_Q = d_correlator_outs_16sc[1].imag();
|
||||||
|
tmp_E = std::abs<float>(std::complex<float>(d_correlator_outs_16sc[0].real(),d_correlator_outs_16sc[0].imag()));
|
||||||
|
tmp_P = std::abs<float>(std::complex<float>(d_correlator_outs_16sc[1].real(),d_correlator_outs_16sc[1].imag()));
|
||||||
|
tmp_L = std::abs<float>(std::complex<float>(d_correlator_outs_16sc[2].real(),d_correlator_outs_16sc[2].imag()));
|
||||||
|
try
|
||||||
|
{
|
||||||
|
// EPR
|
||||||
|
d_dump_file.write(reinterpret_cast<char*>(&tmp_E), sizeof(float));
|
||||||
|
d_dump_file.write(reinterpret_cast<char*>(&tmp_P), sizeof(float));
|
||||||
|
d_dump_file.write(reinterpret_cast<char*>(&tmp_L), sizeof(float));
|
||||||
|
// PROMPT I and Q (to analyze navigation symbols)
|
||||||
|
d_dump_file.write(reinterpret_cast<char*>(&prompt_I), sizeof(float));
|
||||||
|
d_dump_file.write(reinterpret_cast<char*>(&prompt_Q), sizeof(float));
|
||||||
|
// PRN start sample stamp
|
||||||
|
//tmp_float=(float)d_sample_counter;
|
||||||
|
d_dump_file.write(reinterpret_cast<char*>(&d_sample_counter), sizeof(unsigned long int));
|
||||||
|
// accumulated carrier phase
|
||||||
|
d_dump_file.write(reinterpret_cast<char*>(&d_acc_carrier_phase_cycles), sizeof(double));
|
||||||
|
|
||||||
|
// carrier and code frequency
|
||||||
|
d_dump_file.write(reinterpret_cast<char*>(&d_carrier_doppler_hz), sizeof(double));
|
||||||
|
d_dump_file.write(reinterpret_cast<char*>(&d_code_freq_chips), sizeof(double));
|
||||||
|
|
||||||
|
//PLL commands
|
||||||
|
d_dump_file.write(reinterpret_cast<char*>(&d_carr_phase_error_secs_Ti), sizeof(double));
|
||||||
|
d_dump_file.write(reinterpret_cast<char*>(&d_carrier_doppler_hz), sizeof(double));
|
||||||
|
|
||||||
|
//DLL commands
|
||||||
|
d_dump_file.write(reinterpret_cast<char*>(&d_code_error_chips_Ti), sizeof(double));
|
||||||
|
d_dump_file.write(reinterpret_cast<char*>(&d_code_error_filt_chips_Ti), sizeof(double));
|
||||||
|
|
||||||
|
// CN0 and carrier lock test
|
||||||
|
d_dump_file.write(reinterpret_cast<char*>(&d_CN0_SNV_dB_Hz), sizeof(double));
|
||||||
|
d_dump_file.write(reinterpret_cast<char*>(&d_carrier_lock_test), sizeof(double));
|
||||||
|
|
||||||
|
// AUX vars (for debug purposes)
|
||||||
|
tmp_double = d_code_error_chips_Ti * CURRENT_INTEGRATION_TIME_S;
|
||||||
|
d_dump_file.write(reinterpret_cast<char*>(&tmp_double), sizeof(double));
|
||||||
|
tmp_double = static_cast<double>(d_sample_counter + d_correlation_length_samples);
|
||||||
|
d_dump_file.write(reinterpret_cast<char*>(&tmp_double), sizeof(double));
|
||||||
|
|
||||||
|
// PRN
|
||||||
|
unsigned int prn_ = d_acquisition_gnss_synchro->PRN;
|
||||||
|
d_dump_file.write(reinterpret_cast<char*>(&prn_), sizeof(unsigned int));
|
||||||
|
}
|
||||||
|
catch (const std::ifstream::failure* e)
|
||||||
|
{
|
||||||
|
LOG(WARNING) << "Exception writing trk dump file " << e->what();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
consume_each(d_correlation_length_samples); // this is necessary in gr::block derivates
|
||||||
|
d_sample_counter += d_correlation_length_samples; //count for the processed samples
|
||||||
|
|
||||||
|
return 1; //output tracking result ALWAYS even in the case of d_enable_tracking==false
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void glonass_l1_ca_dll_pll_c_aid_tracking_sc::set_channel(unsigned int channel)
|
||||||
|
{
|
||||||
|
d_channel = channel;
|
||||||
|
LOG(INFO) << "Tracking Channel set to " << d_channel;
|
||||||
|
// ############# ENABLE DATA FILE LOG #################
|
||||||
|
if (d_dump == true)
|
||||||
|
{
|
||||||
|
if (d_dump_file.is_open() == false)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
d_dump_filename.append(boost::lexical_cast<std::string>(d_channel));
|
||||||
|
d_dump_filename.append(".dat");
|
||||||
|
d_dump_file.exceptions (std::ifstream::failbit | std::ifstream::badbit);
|
||||||
|
d_dump_file.open(d_dump_filename.c_str(), std::ios::out | std::ios::binary);
|
||||||
|
LOG(INFO) << "Tracking dump enabled on channel " << d_channel << " Log file: " << d_dump_filename.c_str() << std::endl;
|
||||||
|
}
|
||||||
|
catch (const std::ifstream::failure* e)
|
||||||
|
{
|
||||||
|
LOG(WARNING) << "channel " << d_channel << " Exception opening trk dump file " << e->what() << std::endl;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void glonass_l1_ca_dll_pll_c_aid_tracking_sc::set_gnss_synchro(Gnss_Synchro* p_gnss_synchro)
|
||||||
|
{
|
||||||
|
d_acquisition_gnss_synchro = p_gnss_synchro;
|
||||||
|
}
|
@ -0,0 +1,212 @@
|
|||||||
|
/*!
|
||||||
|
* \file glonass_l1_ca_dll_pll_c_aid_tracking_sc.h
|
||||||
|
* \brief Implementation of a code DLL + carrier PLL tracking block
|
||||||
|
* \author Gabriel Araujo, 2017. gabriel.araujo.5000(at)gmail.com
|
||||||
|
* \author Luis Esteve, 2017. luis(at)epsilon-formacion.com
|
||||||
|
* \author Damian Miralles, 2017. dmiralles2009(at)gmail.com
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* Code DLL + carrier PLL according to the algorithms described in:
|
||||||
|
* K.Borre, D.M.Akos, N.Bertelsen, P.Rinder, and S.H.Jensen,
|
||||||
|
* A Software-Defined GPS and Galileo Receiver. A Single-Frequency
|
||||||
|
* Approach, Birkha user, 2007
|
||||||
|
*
|
||||||
|
* -------------------------------------------------------------------------
|
||||||
|
*
|
||||||
|
* Copyright (C) 2010-2017 (see AUTHORS file for a list of contributors)
|
||||||
|
*
|
||||||
|
* GNSS-SDR is a software defined Global Navigation
|
||||||
|
* Satellite Systems receiver
|
||||||
|
*
|
||||||
|
* This file is part of GNSS-SDR.
|
||||||
|
*
|
||||||
|
* GNSS-SDR is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* GNSS-SDR is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with GNSS-SDR. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*
|
||||||
|
* -------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef GNSS_SDR_GLONASS_L1_CA_DLL_PLL_C_AID_TRACKING_SC_H
|
||||||
|
#define GNSS_SDR_GLONASS_L1_CA_DLL_PLL_C_AID_TRACKING_SC_H
|
||||||
|
|
||||||
|
#include <fstream>
|
||||||
|
#include <map>
|
||||||
|
#include <string>
|
||||||
|
#include <boost/thread/mutex.hpp>
|
||||||
|
#include <boost/thread/thread.hpp>
|
||||||
|
#include <gnuradio/block.h>
|
||||||
|
#include <volk/volk.h>
|
||||||
|
#include "glonass_l1_signal_processing.h"
|
||||||
|
#include "gnss_synchro.h"
|
||||||
|
#include "tracking_2nd_DLL_filter.h"
|
||||||
|
#include "tracking_FLL_PLL_filter.h"
|
||||||
|
#include "cpu_multicorrelator_16sc.h"
|
||||||
|
|
||||||
|
class glonass_l1_ca_dll_pll_c_aid_tracking_sc;
|
||||||
|
|
||||||
|
typedef boost::shared_ptr<glonass_l1_ca_dll_pll_c_aid_tracking_sc>
|
||||||
|
glonass_l1_ca_dll_pll_c_aid_tracking_sc_sptr;
|
||||||
|
|
||||||
|
glonass_l1_ca_dll_pll_c_aid_tracking_sc_sptr
|
||||||
|
glonass_l1_ca_dll_pll_c_aid_make_tracking_sc(long if_freq,
|
||||||
|
long fs_in, unsigned
|
||||||
|
int vector_length,
|
||||||
|
bool dump,
|
||||||
|
std::string dump_filename,
|
||||||
|
float pll_bw_hz,
|
||||||
|
float dll_bw_hz,
|
||||||
|
float pll_bw_narrow_hz,
|
||||||
|
float dll_bw_narrow_hz,
|
||||||
|
int extend_correlation_ms,
|
||||||
|
float early_late_space_chips);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief This class implements a DLL + PLL tracking loop block
|
||||||
|
*/
|
||||||
|
class glonass_l1_ca_dll_pll_c_aid_tracking_sc: public gr::block
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
~glonass_l1_ca_dll_pll_c_aid_tracking_sc();
|
||||||
|
|
||||||
|
void set_channel(unsigned int channel);
|
||||||
|
void set_gnss_synchro(Gnss_Synchro* p_gnss_synchro);
|
||||||
|
void start_tracking();
|
||||||
|
|
||||||
|
int general_work (int noutput_items, gr_vector_int &ninput_items,
|
||||||
|
gr_vector_const_void_star &input_items, gr_vector_void_star &output_items);
|
||||||
|
|
||||||
|
void forecast (int noutput_items, gr_vector_int &ninput_items_required);
|
||||||
|
|
||||||
|
private:
|
||||||
|
friend glonass_l1_ca_dll_pll_c_aid_tracking_sc_sptr
|
||||||
|
glonass_l1_ca_dll_pll_c_aid_make_tracking_sc(long if_freq,
|
||||||
|
long fs_in, unsigned
|
||||||
|
int vector_length,
|
||||||
|
bool dump,
|
||||||
|
std::string dump_filename,
|
||||||
|
float pll_bw_hz,
|
||||||
|
float dll_bw_hz,
|
||||||
|
float pll_bw_narrow_hz,
|
||||||
|
float dll_bw_narrow_hz,
|
||||||
|
int extend_correlation_ms,
|
||||||
|
float early_late_space_chips);
|
||||||
|
|
||||||
|
glonass_l1_ca_dll_pll_c_aid_tracking_sc(long if_freq,
|
||||||
|
long fs_in, unsigned
|
||||||
|
int vector_length,
|
||||||
|
bool dump,
|
||||||
|
std::string dump_filename,
|
||||||
|
float pll_bw_hz,
|
||||||
|
float dll_bw_hz,
|
||||||
|
float pll_bw_narrow_hz,
|
||||||
|
float dll_bw_narrow_hz,
|
||||||
|
int extend_correlation_ms,
|
||||||
|
float early_late_space_chips);
|
||||||
|
|
||||||
|
// tracking configuration vars
|
||||||
|
unsigned int d_vector_length;
|
||||||
|
bool d_dump;
|
||||||
|
|
||||||
|
Gnss_Synchro* d_acquisition_gnss_synchro;
|
||||||
|
unsigned int d_channel;
|
||||||
|
|
||||||
|
long d_if_freq;
|
||||||
|
long d_fs_in;
|
||||||
|
long d_glonass_freq_ch;
|
||||||
|
|
||||||
|
double d_early_late_spc_chips;
|
||||||
|
int d_n_correlator_taps;
|
||||||
|
|
||||||
|
gr_complex* d_ca_code;
|
||||||
|
lv_16sc_t* d_ca_code_16sc;
|
||||||
|
float* d_local_code_shift_chips;
|
||||||
|
//gr_complex* d_correlator_outs;
|
||||||
|
lv_16sc_t* d_correlator_outs_16sc;
|
||||||
|
//cpu_multicorrelator multicorrelator_cpu;
|
||||||
|
cpu_multicorrelator_16sc multicorrelator_cpu_16sc;
|
||||||
|
|
||||||
|
// remaining code phase and carrier phase between tracking loops
|
||||||
|
double d_rem_code_phase_samples;
|
||||||
|
double d_rem_code_phase_chips;
|
||||||
|
double d_rem_carrier_phase_rad;
|
||||||
|
int d_rem_code_phase_integer_samples;
|
||||||
|
|
||||||
|
// PLL and DLL filter library
|
||||||
|
Tracking_2nd_DLL_filter d_code_loop_filter;
|
||||||
|
Tracking_FLL_PLL_filter d_carrier_loop_filter;
|
||||||
|
|
||||||
|
// acquisition
|
||||||
|
double d_acq_code_phase_samples;
|
||||||
|
double d_acq_carrier_doppler_hz;
|
||||||
|
|
||||||
|
// tracking vars
|
||||||
|
float d_dll_bw_hz;
|
||||||
|
float d_pll_bw_hz;
|
||||||
|
float d_dll_bw_narrow_hz;
|
||||||
|
float d_pll_bw_narrow_hz;
|
||||||
|
double d_code_freq_chips;
|
||||||
|
double d_code_phase_step_chips;
|
||||||
|
double d_carrier_doppler_hz;
|
||||||
|
double d_carrier_frequency_hz;
|
||||||
|
double d_carrier_doppler_old_hz;
|
||||||
|
double d_carrier_phase_step_rad;
|
||||||
|
double d_acc_carrier_phase_cycles;
|
||||||
|
double d_code_phase_samples;
|
||||||
|
double d_pll_to_dll_assist_secs_Ti;
|
||||||
|
double d_carr_phase_error_secs_Ti;
|
||||||
|
double d_code_error_chips_Ti;
|
||||||
|
double d_preamble_timestamp_s;
|
||||||
|
int d_extend_correlation_ms;
|
||||||
|
bool d_enable_extended_integration;
|
||||||
|
bool d_preamble_synchronized;
|
||||||
|
double d_code_error_filt_chips_s;
|
||||||
|
double d_code_error_filt_chips_Ti;
|
||||||
|
void msg_handler_preamble_index(pmt::pmt_t msg);
|
||||||
|
|
||||||
|
// symbol history to detect bit transition
|
||||||
|
std::deque<lv_16sc_t> d_E_history;
|
||||||
|
std::deque<lv_16sc_t> d_P_history;
|
||||||
|
std::deque<lv_16sc_t> d_L_history;
|
||||||
|
|
||||||
|
//Integration period in samples
|
||||||
|
int d_correlation_length_samples;
|
||||||
|
|
||||||
|
//processing samples counters
|
||||||
|
unsigned long int d_sample_counter;
|
||||||
|
unsigned long int d_acq_sample_stamp;
|
||||||
|
|
||||||
|
// CN0 estimation and lock detector
|
||||||
|
int d_cn0_estimation_counter;
|
||||||
|
gr_complex* d_Prompt_buffer;
|
||||||
|
double d_carrier_lock_test;
|
||||||
|
double d_CN0_SNV_dB_Hz;
|
||||||
|
double d_carrier_lock_threshold;
|
||||||
|
int d_carrier_lock_fail_counter;
|
||||||
|
|
||||||
|
// control vars
|
||||||
|
bool d_enable_tracking;
|
||||||
|
bool d_pull_in;
|
||||||
|
|
||||||
|
// file dump
|
||||||
|
std::string d_dump_filename;
|
||||||
|
std::ofstream d_dump_file;
|
||||||
|
|
||||||
|
std::map<std::string, std::string> systemName;
|
||||||
|
std::string sys;
|
||||||
|
|
||||||
|
int save_matfile();
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif //GNSS_SDR_GLONASS_L1_CA_DLL_PLL_C_AID_TRACKING_SC_H
|
@ -0,0 +1,775 @@
|
|||||||
|
/*!
|
||||||
|
* \file glonass_l1_ca_dll_pll_tracking_cc.cc
|
||||||
|
* \brief Implementation of a code DLL + carrier PLL tracking block
|
||||||
|
* \author Gabriel Araujo, 2017. gabriel.araujo.5000(at)gmail.com
|
||||||
|
* \author Luis Esteve, 2017. luis(at)epsilon-formacion.com
|
||||||
|
* \author Damian Miralles, 2017. dmiralles2009(at)gmail.com
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* Code DLL + carrier PLL according to the algorithms described in:
|
||||||
|
* K.Borre, D.M.Akos, N.Bertelsen, P.Rinder, and S.H.Jensen,
|
||||||
|
* A Software-Defined GPS and Galileo Receiver. A Single-Frequency
|
||||||
|
* Approach, Birkha user, 2007
|
||||||
|
*
|
||||||
|
* -------------------------------------------------------------------------
|
||||||
|
*
|
||||||
|
* Copyright (C) 2010-2017 (see AUTHORS file for a list of contributors)
|
||||||
|
*
|
||||||
|
* GNSS-SDR is a software defined Global Navigation
|
||||||
|
* Satellite Systems receiver
|
||||||
|
*
|
||||||
|
* This file is part of GNSS-SDR.
|
||||||
|
*
|
||||||
|
* GNSS-SDR is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* GNSS-SDR is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with GNSS-SDR. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*
|
||||||
|
* -------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "glonass_l1_ca_dll_pll_tracking_cc.h"
|
||||||
|
#include <cmath>
|
||||||
|
#include <iostream>
|
||||||
|
#include <memory>
|
||||||
|
#include <sstream>
|
||||||
|
#include <boost/lexical_cast.hpp>
|
||||||
|
#include <gnuradio/io_signature.h>
|
||||||
|
#include <glog/logging.h>
|
||||||
|
#include <matio.h>
|
||||||
|
#include <volk_gnsssdr/volk_gnsssdr.h>
|
||||||
|
#include "glonass_l1_signal_processing.h"
|
||||||
|
#include "tracking_discriminators.h"
|
||||||
|
#include "lock_detectors.h"
|
||||||
|
#include "GLONASS_L1_CA.h"
|
||||||
|
#include "control_message_factory.h"
|
||||||
|
|
||||||
|
|
||||||
|
#define CN0_ESTIMATION_SAMPLES 10
|
||||||
|
#define MINIMUM_VALID_CN0 25
|
||||||
|
#define MAXIMUM_LOCK_FAIL_COUNTER 50
|
||||||
|
#define CARRIER_LOCK_THRESHOLD 0.85
|
||||||
|
|
||||||
|
|
||||||
|
using google::LogMessage;
|
||||||
|
|
||||||
|
glonass_l1_ca_dll_pll_tracking_cc_sptr
|
||||||
|
glonass_l1_ca_dll_pll_make_tracking_cc(
|
||||||
|
long if_freq,
|
||||||
|
long fs_in,
|
||||||
|
unsigned int vector_length,
|
||||||
|
bool dump,
|
||||||
|
std::string dump_filename,
|
||||||
|
float pll_bw_hz,
|
||||||
|
float dll_bw_hz,
|
||||||
|
float early_late_space_chips)
|
||||||
|
{
|
||||||
|
return glonass_l1_ca_dll_pll_tracking_cc_sptr(new Glonass_L1_Ca_Dll_Pll_Tracking_cc(if_freq,
|
||||||
|
fs_in, vector_length, dump, dump_filename, pll_bw_hz, dll_bw_hz, early_late_space_chips));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void Glonass_L1_Ca_Dll_Pll_Tracking_cc::forecast (int noutput_items,
|
||||||
|
gr_vector_int &ninput_items_required)
|
||||||
|
{
|
||||||
|
if (noutput_items != 0)
|
||||||
|
{
|
||||||
|
ninput_items_required[0] = static_cast<int>(d_vector_length) * 2; //set the required available samples in each call
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Glonass_L1_Ca_Dll_Pll_Tracking_cc::Glonass_L1_Ca_Dll_Pll_Tracking_cc(
|
||||||
|
long if_freq,
|
||||||
|
long fs_in,
|
||||||
|
unsigned int vector_length,
|
||||||
|
bool dump,
|
||||||
|
std::string dump_filename,
|
||||||
|
float pll_bw_hz,
|
||||||
|
float dll_bw_hz,
|
||||||
|
float early_late_space_chips) :
|
||||||
|
gr::block("Glonass_L1_Ca_Dll_Pll_Tracking_cc", gr::io_signature::make(1, 1, sizeof(gr_complex)),
|
||||||
|
gr::io_signature::make(1, 1, sizeof(Gnss_Synchro)))
|
||||||
|
{
|
||||||
|
// Telemetry bit synchronization message port input
|
||||||
|
this->message_port_register_in(pmt::mp("preamble_timestamp_s"));
|
||||||
|
this->message_port_register_out(pmt::mp("events"));
|
||||||
|
|
||||||
|
// initialize internal vars
|
||||||
|
d_dump = dump;
|
||||||
|
d_if_freq = if_freq;
|
||||||
|
d_fs_in = fs_in;
|
||||||
|
d_vector_length = vector_length;
|
||||||
|
d_dump_filename = dump_filename;
|
||||||
|
|
||||||
|
d_current_prn_length_samples = static_cast<int>(d_vector_length);
|
||||||
|
|
||||||
|
// Initialize tracking ==========================================
|
||||||
|
d_code_loop_filter.set_DLL_BW(dll_bw_hz);
|
||||||
|
d_carrier_loop_filter.set_PLL_BW(pll_bw_hz);
|
||||||
|
|
||||||
|
//--- DLL variables --------------------------------------------------------
|
||||||
|
d_early_late_spc_chips = early_late_space_chips; // Define early-late offset (in chips)
|
||||||
|
|
||||||
|
// Initialization of local code replica
|
||||||
|
// Get space for a vector with the C/A code replica sampled 1x/chip
|
||||||
|
d_ca_code = static_cast<gr_complex*>(volk_gnsssdr_malloc(static_cast<int>(GLONASS_L1_CA_CODE_LENGTH_CHIPS) * sizeof(gr_complex), volk_gnsssdr_get_alignment()));
|
||||||
|
|
||||||
|
// correlator outputs (scalar)
|
||||||
|
d_n_correlator_taps = 3; // Early, Prompt, and Late
|
||||||
|
d_correlator_outs = static_cast<gr_complex*>(volk_gnsssdr_malloc(d_n_correlator_taps*sizeof(gr_complex), volk_gnsssdr_get_alignment()));
|
||||||
|
for (int n = 0; n < d_n_correlator_taps; n++)
|
||||||
|
{
|
||||||
|
d_correlator_outs[n] = gr_complex(0,0);
|
||||||
|
}
|
||||||
|
d_local_code_shift_chips = static_cast<float*>(volk_gnsssdr_malloc(d_n_correlator_taps*sizeof(float), volk_gnsssdr_get_alignment()));
|
||||||
|
// Set TAPs delay values [chips]
|
||||||
|
d_local_code_shift_chips[0] = - d_early_late_spc_chips;
|
||||||
|
d_local_code_shift_chips[1] = 0.0;
|
||||||
|
d_local_code_shift_chips[2] = d_early_late_spc_chips;
|
||||||
|
|
||||||
|
multicorrelator_cpu.init(2 * d_current_prn_length_samples, d_n_correlator_taps);
|
||||||
|
|
||||||
|
//--- Perform initializations ------------------------------
|
||||||
|
// define initial code frequency basis of NCO
|
||||||
|
d_code_freq_chips = GLONASS_L1_CA_CODE_RATE_HZ;
|
||||||
|
// define residual code phase (in chips)
|
||||||
|
d_rem_code_phase_samples = 0.0;
|
||||||
|
// define residual carrier phase
|
||||||
|
d_rem_carr_phase_rad = 0.0;
|
||||||
|
|
||||||
|
// sample synchronization
|
||||||
|
d_sample_counter = 0;
|
||||||
|
//d_sample_counter_seconds = 0;
|
||||||
|
d_acq_sample_stamp = 0;
|
||||||
|
|
||||||
|
d_enable_tracking = false;
|
||||||
|
d_pull_in = false;
|
||||||
|
|
||||||
|
// CN0 estimation and lock detector buffers
|
||||||
|
d_cn0_estimation_counter = 0;
|
||||||
|
d_Prompt_buffer = new gr_complex[CN0_ESTIMATION_SAMPLES];
|
||||||
|
d_carrier_lock_test = 1;
|
||||||
|
d_CN0_SNV_dB_Hz = 0;
|
||||||
|
d_carrier_lock_fail_counter = 0;
|
||||||
|
d_carrier_lock_threshold = CARRIER_LOCK_THRESHOLD;
|
||||||
|
|
||||||
|
systemName["R"] = std::string("Glonass");
|
||||||
|
|
||||||
|
d_acquisition_gnss_synchro = 0;
|
||||||
|
d_channel = 0;
|
||||||
|
d_acq_code_phase_samples = 0.0;
|
||||||
|
d_acq_carrier_doppler_hz = 0.0;
|
||||||
|
d_carrier_doppler_hz = 0.0;
|
||||||
|
d_carrier_doppler_phase_step_rad = 0.0;
|
||||||
|
d_carrier_frequency_hz = 0.0;
|
||||||
|
d_acc_carrier_phase_rad = 0.0;
|
||||||
|
d_code_phase_samples = 0.0;
|
||||||
|
d_rem_code_phase_chips = 0.0;
|
||||||
|
d_code_phase_step_chips = 0.0;
|
||||||
|
d_carrier_phase_step_rad = 0.0;
|
||||||
|
|
||||||
|
d_glonass_freq_ch = 0;
|
||||||
|
|
||||||
|
set_relative_rate(1.0 / static_cast<double>(d_vector_length));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void Glonass_L1_Ca_Dll_Pll_Tracking_cc::start_tracking()
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* correct the code phase according to the delay between acq and trk
|
||||||
|
*/
|
||||||
|
d_acq_code_phase_samples = d_acquisition_gnss_synchro->Acq_delay_samples;
|
||||||
|
d_acq_carrier_doppler_hz = d_acquisition_gnss_synchro->Acq_doppler_hz;
|
||||||
|
d_acq_sample_stamp = d_acquisition_gnss_synchro->Acq_samplestamp_samples;
|
||||||
|
|
||||||
|
long int acq_trk_diff_samples;
|
||||||
|
double acq_trk_diff_seconds;
|
||||||
|
acq_trk_diff_samples = static_cast<long int>(d_sample_counter) - static_cast<long int>(d_acq_sample_stamp); //-d_vector_length;
|
||||||
|
DLOG(INFO) << "Number of samples between Acquisition and Tracking =" << acq_trk_diff_samples;
|
||||||
|
acq_trk_diff_seconds = static_cast<float>(acq_trk_diff_samples) / static_cast<float>(d_fs_in);
|
||||||
|
// Doppler effect
|
||||||
|
// Fd=(C/(C+Vr))*F
|
||||||
|
d_glonass_freq_ch = GLONASS_L1_CA_FREQ_HZ + (DFRQ1_GLO * GLONASS_PRN.at(d_acquisition_gnss_synchro->PRN));
|
||||||
|
double radial_velocity = (d_glonass_freq_ch + d_acq_carrier_doppler_hz) / d_glonass_freq_ch;
|
||||||
|
// new chip and prn sequence periods based on acq Doppler
|
||||||
|
double T_chip_mod_seconds;
|
||||||
|
double T_prn_mod_seconds;
|
||||||
|
double T_prn_mod_samples;
|
||||||
|
d_code_freq_chips = radial_velocity * GLONASS_L1_CA_CODE_RATE_HZ;
|
||||||
|
d_code_phase_step_chips = static_cast<double>(d_code_freq_chips) / static_cast<double>(d_fs_in);
|
||||||
|
T_chip_mod_seconds = 1/d_code_freq_chips;
|
||||||
|
T_prn_mod_seconds = T_chip_mod_seconds * GLONASS_L1_CA_CODE_LENGTH_CHIPS;
|
||||||
|
T_prn_mod_samples = T_prn_mod_seconds * static_cast<double>(d_fs_in);
|
||||||
|
|
||||||
|
d_current_prn_length_samples = round(T_prn_mod_samples);
|
||||||
|
|
||||||
|
double T_prn_true_seconds = GLONASS_L1_CA_CODE_LENGTH_CHIPS / GLONASS_L1_CA_CODE_RATE_HZ;
|
||||||
|
double T_prn_true_samples = T_prn_true_seconds * static_cast<double>(d_fs_in);
|
||||||
|
double T_prn_diff_seconds = T_prn_true_seconds - T_prn_mod_seconds;
|
||||||
|
double N_prn_diff = acq_trk_diff_seconds / T_prn_true_seconds;
|
||||||
|
double corrected_acq_phase_samples, delay_correction_samples;
|
||||||
|
corrected_acq_phase_samples = fmod((d_acq_code_phase_samples + T_prn_diff_seconds * N_prn_diff * static_cast<double>(d_fs_in)), T_prn_true_samples);
|
||||||
|
if (corrected_acq_phase_samples < 0)
|
||||||
|
{
|
||||||
|
corrected_acq_phase_samples = T_prn_mod_samples + corrected_acq_phase_samples;
|
||||||
|
}
|
||||||
|
delay_correction_samples = d_acq_code_phase_samples - corrected_acq_phase_samples;
|
||||||
|
|
||||||
|
d_acq_code_phase_samples = corrected_acq_phase_samples;
|
||||||
|
|
||||||
|
d_carrier_frequency_hz = d_acq_carrier_doppler_hz + d_if_freq + (DFRQ1_GLO * GLONASS_PRN.at(d_acquisition_gnss_synchro->PRN));
|
||||||
|
d_carrier_doppler_hz = d_acq_carrier_doppler_hz;
|
||||||
|
d_carrier_phase_step_rad = GLONASS_TWO_PI * d_carrier_frequency_hz / static_cast<double>(d_fs_in);
|
||||||
|
d_carrier_doppler_phase_step_rad = GLONASS_TWO_PI * (d_carrier_doppler_hz) / static_cast<double>(d_fs_in);
|
||||||
|
|
||||||
|
// DLL/PLL filter initialization
|
||||||
|
d_carrier_loop_filter.initialize(); // initialize the carrier filter
|
||||||
|
d_code_loop_filter.initialize(); // initialize the code filter
|
||||||
|
|
||||||
|
// generate local reference ALWAYS starting at chip 1 (1 sample per chip)
|
||||||
|
glonass_l1_ca_code_gen_complex(d_ca_code, 0);
|
||||||
|
|
||||||
|
multicorrelator_cpu.set_local_code_and_taps(static_cast<int>(GLONASS_L1_CA_CODE_LENGTH_CHIPS), d_ca_code, d_local_code_shift_chips);
|
||||||
|
for (int n = 0; n < d_n_correlator_taps; n++)
|
||||||
|
{
|
||||||
|
d_correlator_outs[n] = gr_complex(0,0);
|
||||||
|
}
|
||||||
|
|
||||||
|
d_carrier_lock_fail_counter = 0;
|
||||||
|
d_rem_code_phase_samples = 0;
|
||||||
|
d_rem_carr_phase_rad = 0.0;
|
||||||
|
d_rem_code_phase_chips = 0.0;
|
||||||
|
d_acc_carrier_phase_rad = 0.0;
|
||||||
|
|
||||||
|
d_code_phase_samples = d_acq_code_phase_samples;
|
||||||
|
|
||||||
|
std::string sys_ = &d_acquisition_gnss_synchro->System;
|
||||||
|
sys = sys_.substr(0,1);
|
||||||
|
|
||||||
|
// DEBUG OUTPUT
|
||||||
|
std::cout << "Tracking of GLONASS L1 C/A signal started on channel " << d_channel << " for satellite " << Gnss_Satellite(systemName[sys], d_acquisition_gnss_synchro->PRN) << std::endl;
|
||||||
|
LOG(INFO) << "Starting tracking of satellite " << Gnss_Satellite(systemName[sys], d_acquisition_gnss_synchro->PRN) << " on channel " << d_channel;
|
||||||
|
|
||||||
|
// enable tracking
|
||||||
|
d_pull_in = true;
|
||||||
|
d_enable_tracking = true;
|
||||||
|
|
||||||
|
LOG(INFO) << "PULL-IN Doppler [Hz]=" << d_carrier_frequency_hz
|
||||||
|
<< " Code Phase correction [samples]=" << delay_correction_samples
|
||||||
|
<< " PULL-IN Code Phase [samples]=" << d_acq_code_phase_samples;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Glonass_L1_Ca_Dll_Pll_Tracking_cc::~Glonass_L1_Ca_Dll_Pll_Tracking_cc()
|
||||||
|
{
|
||||||
|
if (d_dump_file.is_open())
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
d_dump_file.close();
|
||||||
|
}
|
||||||
|
catch(const std::exception & ex)
|
||||||
|
{
|
||||||
|
LOG(WARNING) << "Exception in destructor " << ex.what();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(d_dump)
|
||||||
|
{
|
||||||
|
if(d_channel == 0)
|
||||||
|
{
|
||||||
|
std::cout << "Writing .mat files ...";
|
||||||
|
}
|
||||||
|
Glonass_L1_Ca_Dll_Pll_Tracking_cc::save_matfile();
|
||||||
|
if(d_channel == 0)
|
||||||
|
{
|
||||||
|
std::cout << " done." << std::endl;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
try
|
||||||
|
{
|
||||||
|
volk_gnsssdr_free(d_local_code_shift_chips);
|
||||||
|
volk_gnsssdr_free(d_correlator_outs);
|
||||||
|
volk_gnsssdr_free(d_ca_code);
|
||||||
|
delete[] d_Prompt_buffer;
|
||||||
|
multicorrelator_cpu.free();
|
||||||
|
}
|
||||||
|
catch(const std::exception & ex)
|
||||||
|
{
|
||||||
|
LOG(WARNING) << "Exception in destructor " << ex.what();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int Glonass_L1_Ca_Dll_Pll_Tracking_cc::save_matfile()
|
||||||
|
{
|
||||||
|
// READ DUMP FILE
|
||||||
|
std::ifstream::pos_type size;
|
||||||
|
int number_of_double_vars = 11;
|
||||||
|
int number_of_float_vars = 5;
|
||||||
|
int epoch_size_bytes = sizeof(unsigned long int) + sizeof(double) * number_of_double_vars +
|
||||||
|
sizeof(float) * number_of_float_vars + sizeof(unsigned int);
|
||||||
|
std::ifstream dump_file;
|
||||||
|
dump_file.exceptions(std::ifstream::failbit | std::ifstream::badbit);
|
||||||
|
try
|
||||||
|
{
|
||||||
|
dump_file.open(d_dump_filename.c_str(), std::ios::binary | std::ios::ate);
|
||||||
|
}
|
||||||
|
catch(const std::ifstream::failure &e)
|
||||||
|
{
|
||||||
|
std::cerr << "Problem opening dump file:" << e.what() << std::endl;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
// count number of epochs and rewind
|
||||||
|
long int num_epoch = 0;
|
||||||
|
if (dump_file.is_open())
|
||||||
|
{
|
||||||
|
size = dump_file.tellg();
|
||||||
|
num_epoch = static_cast<long int>(size) / static_cast<long int>(epoch_size_bytes);
|
||||||
|
dump_file.seekg(0, std::ios::beg);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
float * abs_E = new float [num_epoch];
|
||||||
|
float * abs_P = new float [num_epoch];
|
||||||
|
float * abs_L = new float [num_epoch];
|
||||||
|
float * Prompt_I = new float [num_epoch];
|
||||||
|
float * Prompt_Q = new float [num_epoch];
|
||||||
|
unsigned long int * PRN_start_sample_count = new unsigned long int [num_epoch];
|
||||||
|
double * acc_carrier_phase_rad = new double [num_epoch];
|
||||||
|
double * carrier_doppler_hz = new double [num_epoch];
|
||||||
|
double * code_freq_chips = new double [num_epoch];
|
||||||
|
double * carr_error_hz = new double [num_epoch];
|
||||||
|
double * carr_error_filt_hz = new double [num_epoch];
|
||||||
|
double * code_error_chips = new double [num_epoch];
|
||||||
|
double * code_error_filt_chips = new double [num_epoch];
|
||||||
|
double * CN0_SNV_dB_Hz = new double [num_epoch];
|
||||||
|
double * carrier_lock_test = new double [num_epoch];
|
||||||
|
double * aux1 = new double [num_epoch];
|
||||||
|
double * aux2 = new double [num_epoch];
|
||||||
|
unsigned int * PRN = new unsigned int [num_epoch];
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
if (dump_file.is_open())
|
||||||
|
{
|
||||||
|
for(long int i = 0; i < num_epoch; i++)
|
||||||
|
{
|
||||||
|
dump_file.read(reinterpret_cast<char *>(&abs_E[i]), sizeof(float));
|
||||||
|
dump_file.read(reinterpret_cast<char *>(&abs_P[i]), sizeof(float));
|
||||||
|
dump_file.read(reinterpret_cast<char *>(&abs_L[i]), sizeof(float));
|
||||||
|
dump_file.read(reinterpret_cast<char *>(&Prompt_I[i]), sizeof(float));
|
||||||
|
dump_file.read(reinterpret_cast<char *>(&Prompt_Q[i]), sizeof(float));
|
||||||
|
dump_file.read(reinterpret_cast<char *>(&PRN_start_sample_count[i]), sizeof(unsigned long int));
|
||||||
|
dump_file.read(reinterpret_cast<char *>(&acc_carrier_phase_rad[i]), sizeof(double));
|
||||||
|
dump_file.read(reinterpret_cast<char *>(&carrier_doppler_hz[i]), sizeof(double));
|
||||||
|
dump_file.read(reinterpret_cast<char *>(&code_freq_chips[i]), sizeof(double));
|
||||||
|
dump_file.read(reinterpret_cast<char *>(&carr_error_hz[i]), sizeof(double));
|
||||||
|
dump_file.read(reinterpret_cast<char *>(&carr_error_filt_hz[i]), sizeof(double));
|
||||||
|
dump_file.read(reinterpret_cast<char *>(&code_error_chips[i]), sizeof(double));
|
||||||
|
dump_file.read(reinterpret_cast<char *>(&code_error_filt_chips[i]), sizeof(double));
|
||||||
|
dump_file.read(reinterpret_cast<char *>(&CN0_SNV_dB_Hz[i]), sizeof(double));
|
||||||
|
dump_file.read(reinterpret_cast<char *>(&carrier_lock_test[i]), sizeof(double));
|
||||||
|
dump_file.read(reinterpret_cast<char *>(&aux1[i]), sizeof(double));
|
||||||
|
dump_file.read(reinterpret_cast<char *>(&aux2[i]), sizeof(double));
|
||||||
|
dump_file.read(reinterpret_cast<char *>(&PRN[i]), sizeof(unsigned int));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
dump_file.close();
|
||||||
|
}
|
||||||
|
catch (const std::ifstream::failure &e)
|
||||||
|
{
|
||||||
|
std::cerr << "Problem reading dump file:" << e.what() << std::endl;
|
||||||
|
delete[] abs_E;
|
||||||
|
delete[] abs_P;
|
||||||
|
delete[] abs_L;
|
||||||
|
delete[] Prompt_I;
|
||||||
|
delete[] Prompt_Q;
|
||||||
|
delete[] PRN_start_sample_count;
|
||||||
|
delete[] acc_carrier_phase_rad;
|
||||||
|
delete[] carrier_doppler_hz;
|
||||||
|
delete[] code_freq_chips;
|
||||||
|
delete[] carr_error_hz;
|
||||||
|
delete[] carr_error_filt_hz;
|
||||||
|
delete[] code_error_chips;
|
||||||
|
delete[] code_error_filt_chips;
|
||||||
|
delete[] CN0_SNV_dB_Hz;
|
||||||
|
delete[] carrier_lock_test;
|
||||||
|
delete[] aux1;
|
||||||
|
delete[] aux2;
|
||||||
|
delete[] PRN;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// WRITE MAT FILE
|
||||||
|
mat_t *matfp;
|
||||||
|
matvar_t *matvar;
|
||||||
|
std::string filename = d_dump_filename;
|
||||||
|
filename.erase(filename.length() - 4, 4);
|
||||||
|
filename.append(".mat");
|
||||||
|
matfp = Mat_CreateVer(filename.c_str(), NULL, MAT_FT_MAT73);
|
||||||
|
if(reinterpret_cast<long*>(matfp) != NULL)
|
||||||
|
{
|
||||||
|
size_t dims[2] = {1, static_cast<size_t>(num_epoch)};
|
||||||
|
matvar = Mat_VarCreate("abs_E", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims, abs_E, 0);
|
||||||
|
Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
|
Mat_VarFree(matvar);
|
||||||
|
|
||||||
|
matvar = Mat_VarCreate("abs_P", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims, abs_P, 0);
|
||||||
|
Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
|
Mat_VarFree(matvar);
|
||||||
|
|
||||||
|
matvar = Mat_VarCreate("abs_L", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims, abs_L, 0);
|
||||||
|
Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
|
Mat_VarFree(matvar);
|
||||||
|
|
||||||
|
matvar = Mat_VarCreate("Prompt_I", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims, Prompt_I, 0);
|
||||||
|
Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
|
Mat_VarFree(matvar);
|
||||||
|
|
||||||
|
matvar = Mat_VarCreate("Prompt_Q", MAT_C_SINGLE, MAT_T_SINGLE, 2, dims, Prompt_Q, 0);
|
||||||
|
Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
|
Mat_VarFree(matvar);
|
||||||
|
|
||||||
|
matvar = Mat_VarCreate("PRN_start_sample_count", MAT_C_UINT64, MAT_T_UINT64, 2, dims, PRN_start_sample_count, 0);
|
||||||
|
Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
|
Mat_VarFree(matvar);
|
||||||
|
|
||||||
|
matvar = Mat_VarCreate("acc_carrier_phase_rad", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims, acc_carrier_phase_rad, 0);
|
||||||
|
Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
|
Mat_VarFree(matvar);
|
||||||
|
|
||||||
|
matvar = Mat_VarCreate("carrier_doppler_hz", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims, carrier_doppler_hz, 0);
|
||||||
|
Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
|
Mat_VarFree(matvar);
|
||||||
|
|
||||||
|
matvar = Mat_VarCreate("code_freq_chips", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims, code_freq_chips, 0);
|
||||||
|
Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
|
Mat_VarFree(matvar);
|
||||||
|
|
||||||
|
matvar = Mat_VarCreate("carr_error_hz", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims, carr_error_hz, 0);
|
||||||
|
Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
|
Mat_VarFree(matvar);
|
||||||
|
|
||||||
|
matvar = Mat_VarCreate("carr_error_filt_hz", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims, carr_error_filt_hz, 0);
|
||||||
|
Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
|
Mat_VarFree(matvar);
|
||||||
|
|
||||||
|
matvar = Mat_VarCreate("code_error_chips", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims, code_error_chips, 0);
|
||||||
|
Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
|
Mat_VarFree(matvar);
|
||||||
|
|
||||||
|
matvar = Mat_VarCreate("code_error_filt_chips", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims, code_error_filt_chips, 0);
|
||||||
|
Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
|
Mat_VarFree(matvar);
|
||||||
|
|
||||||
|
matvar = Mat_VarCreate("CN0_SNV_dB_Hz", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims, CN0_SNV_dB_Hz, 0);
|
||||||
|
Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
|
Mat_VarFree(matvar);
|
||||||
|
|
||||||
|
matvar = Mat_VarCreate("carrier_lock_test", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims, carrier_lock_test, 0);
|
||||||
|
Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
|
Mat_VarFree(matvar);
|
||||||
|
|
||||||
|
matvar = Mat_VarCreate("aux1", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims, aux1, 0);
|
||||||
|
Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
|
Mat_VarFree(matvar);
|
||||||
|
|
||||||
|
matvar = Mat_VarCreate("aux2", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims, aux2, 0);
|
||||||
|
Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
|
Mat_VarFree(matvar);
|
||||||
|
|
||||||
|
matvar = Mat_VarCreate("PRN", MAT_C_UINT32, MAT_T_UINT32, 2, dims, PRN, 0);
|
||||||
|
Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_ZLIB); // or MAT_COMPRESSION_NONE
|
||||||
|
Mat_VarFree(matvar);
|
||||||
|
}
|
||||||
|
Mat_Close(matfp);
|
||||||
|
delete[] abs_E;
|
||||||
|
delete[] abs_P;
|
||||||
|
delete[] abs_L;
|
||||||
|
delete[] Prompt_I;
|
||||||
|
delete[] Prompt_Q;
|
||||||
|
delete[] PRN_start_sample_count;
|
||||||
|
delete[] acc_carrier_phase_rad;
|
||||||
|
delete[] carrier_doppler_hz;
|
||||||
|
delete[] code_freq_chips;
|
||||||
|
delete[] carr_error_hz;
|
||||||
|
delete[] carr_error_filt_hz;
|
||||||
|
delete[] code_error_chips;
|
||||||
|
delete[] code_error_filt_chips;
|
||||||
|
delete[] CN0_SNV_dB_Hz;
|
||||||
|
delete[] carrier_lock_test;
|
||||||
|
delete[] aux1;
|
||||||
|
delete[] aux2;
|
||||||
|
delete[] PRN;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int Glonass_L1_Ca_Dll_Pll_Tracking_cc::general_work (int noutput_items __attribute__((unused)), gr_vector_int &ninput_items __attribute__((unused)),
|
||||||
|
gr_vector_const_void_star &input_items, gr_vector_void_star &output_items)
|
||||||
|
{
|
||||||
|
// process vars
|
||||||
|
double carr_error_hz = 0.0;
|
||||||
|
double carr_error_filt_hz = 0.0;
|
||||||
|
double code_error_chips = 0.0;
|
||||||
|
double code_error_filt_chips = 0.0;
|
||||||
|
|
||||||
|
// Block input data and block output stream pointers
|
||||||
|
const gr_complex* in = reinterpret_cast<const gr_complex*>(input_items[0]); // PRN start block alignment
|
||||||
|
Gnss_Synchro **out = reinterpret_cast<Gnss_Synchro **>(&output_items[0]);
|
||||||
|
|
||||||
|
// GNSS_SYNCHRO OBJECT to interchange data between tracking->telemetry_decoder
|
||||||
|
Gnss_Synchro current_synchro_data = Gnss_Synchro();
|
||||||
|
|
||||||
|
if (d_enable_tracking == true)
|
||||||
|
{
|
||||||
|
// Fill the acquisition data
|
||||||
|
current_synchro_data = *d_acquisition_gnss_synchro;
|
||||||
|
// Receiver signal alignment
|
||||||
|
if (d_pull_in == true)
|
||||||
|
{
|
||||||
|
int samples_offset;
|
||||||
|
double acq_trk_shif_correction_samples;
|
||||||
|
int acq_to_trk_delay_samples;
|
||||||
|
acq_to_trk_delay_samples = d_sample_counter - d_acq_sample_stamp;
|
||||||
|
acq_trk_shif_correction_samples = d_current_prn_length_samples - fmod(static_cast<float>(acq_to_trk_delay_samples), static_cast<float>(d_current_prn_length_samples));
|
||||||
|
samples_offset = round(d_acq_code_phase_samples + acq_trk_shif_correction_samples);
|
||||||
|
current_synchro_data.Tracking_sample_counter = d_sample_counter + samples_offset;
|
||||||
|
d_sample_counter = d_sample_counter + samples_offset; // count for the processed samples
|
||||||
|
d_pull_in = false;
|
||||||
|
// take into account the carrier cycles accumulated in the pull in signal alignment
|
||||||
|
d_acc_carrier_phase_rad -= d_carrier_doppler_phase_step_rad * samples_offset;
|
||||||
|
current_synchro_data.Carrier_phase_rads = d_acc_carrier_phase_rad;
|
||||||
|
current_synchro_data.Carrier_Doppler_hz = d_carrier_doppler_hz;
|
||||||
|
current_synchro_data.fs = d_fs_in;
|
||||||
|
current_synchro_data.correlation_length_ms = 1;
|
||||||
|
*out[0] = current_synchro_data;
|
||||||
|
consume_each(samples_offset); // shift input to perform alignment with local replica
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ################# CARRIER WIPEOFF AND CORRELATORS ##############################
|
||||||
|
// perform carrier wipe-off and compute Early, Prompt and Late correlation
|
||||||
|
multicorrelator_cpu.set_input_output_vectors(d_correlator_outs, in);
|
||||||
|
multicorrelator_cpu.Carrier_wipeoff_multicorrelator_resampler(d_rem_carr_phase_rad,
|
||||||
|
d_carrier_phase_step_rad,
|
||||||
|
d_rem_code_phase_chips,
|
||||||
|
d_code_phase_step_chips,
|
||||||
|
d_current_prn_length_samples);
|
||||||
|
|
||||||
|
// ################## PLL ##########################################################
|
||||||
|
// PLL discriminator
|
||||||
|
// Update PLL discriminator [rads/Ti -> Secs/Ti]
|
||||||
|
carr_error_hz = pll_cloop_two_quadrant_atan(d_correlator_outs[1]) / GLONASS_TWO_PI; // prompt output
|
||||||
|
// Carrier discriminator filter
|
||||||
|
carr_error_filt_hz = d_carrier_loop_filter.get_carrier_nco(carr_error_hz);
|
||||||
|
// New carrier Doppler frequency estimation
|
||||||
|
d_carrier_frequency_hz += carr_error_filt_hz;
|
||||||
|
d_carrier_doppler_hz += carr_error_filt_hz;
|
||||||
|
d_code_freq_chips = GLONASS_L1_CA_CODE_RATE_HZ + ((d_carrier_doppler_hz * GLONASS_L1_CA_CODE_RATE_HZ) / d_glonass_freq_ch);
|
||||||
|
|
||||||
|
// ################## DLL ##########################################################
|
||||||
|
// DLL discriminator
|
||||||
|
code_error_chips = dll_nc_e_minus_l_normalized(d_correlator_outs[0], d_correlator_outs[2]); // [chips/Ti] //early and late
|
||||||
|
// Code discriminator filter
|
||||||
|
code_error_filt_chips = d_code_loop_filter.get_code_nco(code_error_chips); // [chips/second]
|
||||||
|
double T_chip_seconds = 1.0 / static_cast<double>(d_code_freq_chips);
|
||||||
|
double T_prn_seconds = T_chip_seconds * GLONASS_L1_CA_CODE_LENGTH_CHIPS;
|
||||||
|
double code_error_filt_secs = (T_prn_seconds * code_error_filt_chips*T_chip_seconds); //[seconds]
|
||||||
|
//double code_error_filt_secs = (GPS_L1_CA_CODE_PERIOD * code_error_filt_chips) / GLONASS_L1_CA_CODE_RATE_HZ; // [seconds]
|
||||||
|
|
||||||
|
// ################## CARRIER AND CODE NCO BUFFER ALIGNEMENT #######################
|
||||||
|
// keep alignment parameters for the next input buffer
|
||||||
|
// Compute the next buffer length based in the new period of the PRN sequence and the code phase error estimation
|
||||||
|
//double T_chip_seconds = 1.0 / static_cast<double>(d_code_freq_chips);
|
||||||
|
//double T_prn_seconds = T_chip_seconds * GLONASS_L1_CA_CODE_LENGTH_CHIPS;
|
||||||
|
double T_prn_samples = T_prn_seconds * static_cast<double>(d_fs_in);
|
||||||
|
double K_blk_samples = T_prn_samples + d_rem_code_phase_samples + code_error_filt_secs * static_cast<double>(d_fs_in);
|
||||||
|
d_current_prn_length_samples = round(K_blk_samples); // round to a discrete number of samples
|
||||||
|
|
||||||
|
//################### PLL COMMANDS #################################################
|
||||||
|
// carrier phase step (NCO phase increment per sample) [rads/sample]
|
||||||
|
d_carrier_doppler_phase_step_rad = GLONASS_TWO_PI * d_carrier_doppler_hz / static_cast<double>(d_fs_in);
|
||||||
|
d_carrier_phase_step_rad = GLONASS_TWO_PI * d_carrier_frequency_hz / static_cast<double>(d_fs_in);
|
||||||
|
// remnant carrier phase to prevent overflow in the code NCO
|
||||||
|
d_rem_carr_phase_rad = d_rem_carr_phase_rad + d_carrier_phase_step_rad * d_current_prn_length_samples;
|
||||||
|
d_rem_carr_phase_rad = fmod(d_rem_carr_phase_rad, GLONASS_TWO_PI);
|
||||||
|
// carrier phase accumulator
|
||||||
|
d_acc_carrier_phase_rad -= d_carrier_doppler_phase_step_rad * d_current_prn_length_samples;
|
||||||
|
|
||||||
|
//################### DLL COMMANDS #################################################
|
||||||
|
// code phase step (Code resampler phase increment per sample) [chips/sample]
|
||||||
|
d_code_phase_step_chips = d_code_freq_chips / static_cast<double>(d_fs_in);
|
||||||
|
// remnant code phase [chips]
|
||||||
|
d_rem_code_phase_samples = K_blk_samples - d_current_prn_length_samples; // rounding error < 1 sample
|
||||||
|
d_rem_code_phase_chips = d_code_freq_chips * (d_rem_code_phase_samples / static_cast<double>(d_fs_in));
|
||||||
|
|
||||||
|
// ####### CN0 ESTIMATION AND LOCK DETECTORS ######
|
||||||
|
if (d_cn0_estimation_counter < CN0_ESTIMATION_SAMPLES)
|
||||||
|
{
|
||||||
|
// fill buffer with prompt correlator output values
|
||||||
|
d_Prompt_buffer[d_cn0_estimation_counter] = d_correlator_outs[1]; //prompt
|
||||||
|
d_cn0_estimation_counter++;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
d_cn0_estimation_counter = 0;
|
||||||
|
// Code lock indicator
|
||||||
|
d_CN0_SNV_dB_Hz = cn0_svn_estimator(d_Prompt_buffer, CN0_ESTIMATION_SAMPLES, d_fs_in, GLONASS_L1_CA_CODE_LENGTH_CHIPS);
|
||||||
|
// Carrier lock indicator
|
||||||
|
d_carrier_lock_test = carrier_lock_detector(d_Prompt_buffer, CN0_ESTIMATION_SAMPLES);
|
||||||
|
// Loss of lock detection
|
||||||
|
if (d_carrier_lock_test < d_carrier_lock_threshold or d_CN0_SNV_dB_Hz < MINIMUM_VALID_CN0)
|
||||||
|
{
|
||||||
|
d_carrier_lock_fail_counter++;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (d_carrier_lock_fail_counter > 0) d_carrier_lock_fail_counter--;
|
||||||
|
}
|
||||||
|
if (d_carrier_lock_fail_counter > MAXIMUM_LOCK_FAIL_COUNTER)
|
||||||
|
{
|
||||||
|
std::cout << "Loss of lock in channel " << d_channel << "!" << std::endl;
|
||||||
|
LOG(INFO) << "Loss of lock in channel " << d_channel << "!";
|
||||||
|
this->message_port_pub(pmt::mp("events"), pmt::from_long(3)); // 3 -> loss of lock
|
||||||
|
d_carrier_lock_fail_counter = 0;
|
||||||
|
d_enable_tracking = false; // TODO: check if disabling tracking is consistent with the channel state machine
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// ########### Output the tracking data to navigation and PVT ##########
|
||||||
|
current_synchro_data.Prompt_I = static_cast<double>((d_correlator_outs[1]).real());
|
||||||
|
current_synchro_data.Prompt_Q = static_cast<double>((d_correlator_outs[1]).imag());
|
||||||
|
current_synchro_data.Tracking_sample_counter = d_sample_counter + d_current_prn_length_samples;
|
||||||
|
current_synchro_data.Code_phase_samples = d_rem_code_phase_samples;
|
||||||
|
current_synchro_data.Carrier_phase_rads = d_acc_carrier_phase_rad;
|
||||||
|
current_synchro_data.Carrier_Doppler_hz = d_carrier_doppler_hz;
|
||||||
|
current_synchro_data.CN0_dB_hz = d_CN0_SNV_dB_Hz;
|
||||||
|
current_synchro_data.Flag_valid_symbol_output = true;
|
||||||
|
current_synchro_data.correlation_length_ms = 1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
for (int n = 0; n < d_n_correlator_taps; n++)
|
||||||
|
{
|
||||||
|
d_correlator_outs[n] = gr_complex(0,0);
|
||||||
|
}
|
||||||
|
|
||||||
|
current_synchro_data.Tracking_sample_counter = d_sample_counter + d_current_prn_length_samples;
|
||||||
|
current_synchro_data.System = {'R'};
|
||||||
|
current_synchro_data.correlation_length_ms = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
//assign the GNURadio block output data
|
||||||
|
current_synchro_data.fs = d_fs_in;
|
||||||
|
*out[0] = current_synchro_data;
|
||||||
|
if(d_dump)
|
||||||
|
{
|
||||||
|
// MULTIPLEXED FILE RECORDING - Record results to file
|
||||||
|
float prompt_I;
|
||||||
|
float prompt_Q;
|
||||||
|
float tmp_E, tmp_P, tmp_L;
|
||||||
|
double tmp_double;
|
||||||
|
unsigned long int tmp_long;
|
||||||
|
prompt_I = d_correlator_outs[1].real();
|
||||||
|
prompt_Q = d_correlator_outs[1].imag();
|
||||||
|
tmp_E = std::abs<float>(d_correlator_outs[0]);
|
||||||
|
tmp_P = std::abs<float>(d_correlator_outs[1]);
|
||||||
|
tmp_L = std::abs<float>(d_correlator_outs[2]);
|
||||||
|
try
|
||||||
|
{
|
||||||
|
// EPR
|
||||||
|
d_dump_file.write(reinterpret_cast<char*>(&tmp_E), sizeof(float));
|
||||||
|
d_dump_file.write(reinterpret_cast<char*>(&tmp_P), sizeof(float));
|
||||||
|
d_dump_file.write(reinterpret_cast<char*>(&tmp_L), sizeof(float));
|
||||||
|
// PROMPT I and Q (to analyze navigation symbols)
|
||||||
|
d_dump_file.write(reinterpret_cast<char*>(&prompt_I), sizeof(float));
|
||||||
|
d_dump_file.write(reinterpret_cast<char*>(&prompt_Q), sizeof(float));
|
||||||
|
// PRN start sample stamp
|
||||||
|
tmp_long = d_sample_counter + d_current_prn_length_samples;
|
||||||
|
d_dump_file.write(reinterpret_cast<char*>(&tmp_long), sizeof(unsigned long int));
|
||||||
|
// accumulated carrier phase
|
||||||
|
d_dump_file.write(reinterpret_cast<char*>(&d_acc_carrier_phase_rad), sizeof(double));
|
||||||
|
|
||||||
|
// carrier and code frequency
|
||||||
|
d_dump_file.write(reinterpret_cast<char*>(&d_carrier_frequency_hz), sizeof(double));
|
||||||
|
d_dump_file.write(reinterpret_cast<char*>(&d_code_freq_chips), sizeof(double));
|
||||||
|
|
||||||
|
// PLL commands
|
||||||
|
d_dump_file.write(reinterpret_cast<char*>(&carr_error_hz), sizeof(double));
|
||||||
|
d_dump_file.write(reinterpret_cast<char*>(&carr_error_filt_hz), sizeof(double));
|
||||||
|
|
||||||
|
// DLL commands
|
||||||
|
d_dump_file.write(reinterpret_cast<char*>(&code_error_chips), sizeof(double));
|
||||||
|
d_dump_file.write(reinterpret_cast<char*>(&code_error_filt_chips), sizeof(double));
|
||||||
|
|
||||||
|
// CN0 and carrier lock test
|
||||||
|
d_dump_file.write(reinterpret_cast<char*>(&d_CN0_SNV_dB_Hz), sizeof(double));
|
||||||
|
d_dump_file.write(reinterpret_cast<char*>(&d_carrier_lock_test), sizeof(double));
|
||||||
|
|
||||||
|
// AUX vars (for debug purposes)
|
||||||
|
tmp_double = d_rem_code_phase_samples;
|
||||||
|
d_dump_file.write(reinterpret_cast<char*>(&tmp_double), sizeof(double));
|
||||||
|
tmp_double = static_cast<double>(d_sample_counter);
|
||||||
|
d_dump_file.write(reinterpret_cast<char*>(&tmp_double), sizeof(double));
|
||||||
|
|
||||||
|
// PRN
|
||||||
|
unsigned int prn_ = d_acquisition_gnss_synchro->PRN;
|
||||||
|
d_dump_file.write(reinterpret_cast<char*>(&prn_), sizeof(unsigned int));
|
||||||
|
}
|
||||||
|
catch (const std::ifstream::failure &e)
|
||||||
|
{
|
||||||
|
LOG(WARNING) << "Exception writing trk dump file " << e.what();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
consume_each(d_current_prn_length_samples); // this is necessary in gr::block derivates
|
||||||
|
d_sample_counter += d_current_prn_length_samples; // count for the processed samples
|
||||||
|
return 1; // output tracking result ALWAYS even in the case of d_enable_tracking==false
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void Glonass_L1_Ca_Dll_Pll_Tracking_cc::set_channel(unsigned int channel)
|
||||||
|
{
|
||||||
|
d_channel = channel;
|
||||||
|
LOG(INFO) << "Tracking Channel set to " << d_channel;
|
||||||
|
// ############# ENABLE DATA FILE LOG #################
|
||||||
|
if (d_dump == true)
|
||||||
|
{
|
||||||
|
if (d_dump_file.is_open() == false)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
d_dump_filename.append(boost::lexical_cast<std::string>(d_channel));
|
||||||
|
d_dump_filename.append(".dat");
|
||||||
|
d_dump_file.exceptions (std::ifstream::failbit | std::ifstream::badbit);
|
||||||
|
d_dump_file.open(d_dump_filename.c_str(), std::ios::out | std::ios::binary);
|
||||||
|
LOG(INFO) << "Tracking dump enabled on channel " << d_channel << " Log file: " << d_dump_filename.c_str();
|
||||||
|
}
|
||||||
|
catch (const std::ifstream::failure &e)
|
||||||
|
{
|
||||||
|
LOG(WARNING) << "channel " << d_channel << " Exception opening trk dump file " << e.what();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void Glonass_L1_Ca_Dll_Pll_Tracking_cc::set_gnss_synchro(Gnss_Synchro* p_gnss_synchro)
|
||||||
|
{
|
||||||
|
d_acquisition_gnss_synchro = p_gnss_synchro;
|
||||||
|
}
|
@ -0,0 +1,177 @@
|
|||||||
|
/*!
|
||||||
|
* \file glonass_l1_ca_dll_pll_tracking_cc.h
|
||||||
|
* \brief Implementation of a code DLL + carrier PLL tracking block
|
||||||
|
* \author Gabriel Araujo, 2017. gabriel.araujo.5000(at)gmail.com
|
||||||
|
* \author Luis Esteve, 2017. luis(at)epsilon-formacion.com
|
||||||
|
* \author Damian Miralles, 2017. dmiralles2009(at)gmail.com
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* Code DLL + carrier PLL according to the algorithms described in:
|
||||||
|
* K.Borre, D.M.Akos, N.Bertelsen, P.Rinder, and S.H.Jensen,
|
||||||
|
* A Software-Defined GPS and Galileo Receiver. A Single-Frequency
|
||||||
|
* Approach, Birkha user, 2007
|
||||||
|
*
|
||||||
|
* -------------------------------------------------------------------------
|
||||||
|
*
|
||||||
|
* Copyright (C) 2010-2017 (see AUTHORS file for a list of contributors)
|
||||||
|
*
|
||||||
|
* GNSS-SDR is a software defined Global Navigation
|
||||||
|
* Satellite Systems receiver
|
||||||
|
*
|
||||||
|
* This file is part of GNSS-SDR.
|
||||||
|
*
|
||||||
|
* GNSS-SDR is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* GNSS-SDR is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with GNSS-SDR. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*
|
||||||
|
* -------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef GNSS_SDR_GLONASS_L1_CA_DLL_PLL_TRACKING_CC_H
|
||||||
|
#define GNSS_SDR_GLONASS_L1_CA_DLL_PLL_TRACKING_CC_H
|
||||||
|
|
||||||
|
#include <fstream>
|
||||||
|
#include <map>
|
||||||
|
#include <string>
|
||||||
|
#include <gnuradio/block.h>
|
||||||
|
#include "gnss_synchro.h"
|
||||||
|
#include "tracking_2nd_DLL_filter.h"
|
||||||
|
#include "tracking_2nd_PLL_filter.h"
|
||||||
|
#include "cpu_multicorrelator.h"
|
||||||
|
|
||||||
|
class Glonass_L1_Ca_Dll_Pll_Tracking_cc;
|
||||||
|
|
||||||
|
typedef boost::shared_ptr<Glonass_L1_Ca_Dll_Pll_Tracking_cc>
|
||||||
|
glonass_l1_ca_dll_pll_tracking_cc_sptr;
|
||||||
|
|
||||||
|
glonass_l1_ca_dll_pll_tracking_cc_sptr
|
||||||
|
glonass_l1_ca_dll_pll_make_tracking_cc(long if_freq,
|
||||||
|
long fs_in, unsigned
|
||||||
|
int vector_length,
|
||||||
|
bool dump,
|
||||||
|
std::string dump_filename,
|
||||||
|
float pll_bw_hz,
|
||||||
|
float dll_bw_hz,
|
||||||
|
float early_late_space_chips);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief This class implements a DLL + PLL tracking loop block
|
||||||
|
*/
|
||||||
|
class Glonass_L1_Ca_Dll_Pll_Tracking_cc: public gr::block
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
~Glonass_L1_Ca_Dll_Pll_Tracking_cc();
|
||||||
|
|
||||||
|
void set_channel(unsigned int channel);
|
||||||
|
void set_gnss_synchro(Gnss_Synchro* p_gnss_synchro);
|
||||||
|
void start_tracking();
|
||||||
|
|
||||||
|
int general_work (int noutput_items, gr_vector_int &ninput_items,
|
||||||
|
gr_vector_const_void_star &input_items, gr_vector_void_star &output_items);
|
||||||
|
|
||||||
|
void forecast (int noutput_items, gr_vector_int &ninput_items_required);
|
||||||
|
|
||||||
|
private:
|
||||||
|
friend glonass_l1_ca_dll_pll_tracking_cc_sptr
|
||||||
|
glonass_l1_ca_dll_pll_make_tracking_cc(long if_freq,
|
||||||
|
long fs_in, unsigned
|
||||||
|
int vector_length,
|
||||||
|
bool dump,
|
||||||
|
std::string dump_filename,
|
||||||
|
float pll_bw_hz,
|
||||||
|
float dll_bw_hz,
|
||||||
|
float early_late_space_chips);
|
||||||
|
|
||||||
|
Glonass_L1_Ca_Dll_Pll_Tracking_cc(long if_freq,
|
||||||
|
long fs_in, unsigned
|
||||||
|
int vector_length,
|
||||||
|
bool dump,
|
||||||
|
std::string dump_filename,
|
||||||
|
float pll_bw_hz,
|
||||||
|
float dll_bw_hz,
|
||||||
|
float early_late_space_chips);
|
||||||
|
|
||||||
|
// tracking configuration vars
|
||||||
|
unsigned int d_vector_length;
|
||||||
|
bool d_dump;
|
||||||
|
|
||||||
|
Gnss_Synchro* d_acquisition_gnss_synchro;
|
||||||
|
unsigned int d_channel;
|
||||||
|
|
||||||
|
long d_if_freq;
|
||||||
|
long d_fs_in;
|
||||||
|
long d_glonass_freq_ch;
|
||||||
|
|
||||||
|
double d_early_late_spc_chips;
|
||||||
|
|
||||||
|
// remaining code phase and carrier phase between tracking loops
|
||||||
|
double d_rem_code_phase_samples;
|
||||||
|
double d_rem_code_phase_chips;
|
||||||
|
double d_rem_carr_phase_rad;
|
||||||
|
|
||||||
|
// PLL and DLL filter library
|
||||||
|
Tracking_2nd_DLL_filter d_code_loop_filter;
|
||||||
|
Tracking_2nd_PLL_filter d_carrier_loop_filter;
|
||||||
|
|
||||||
|
// acquisition
|
||||||
|
double d_acq_code_phase_samples;
|
||||||
|
double d_acq_carrier_doppler_hz;
|
||||||
|
// correlator
|
||||||
|
int d_n_correlator_taps;
|
||||||
|
gr_complex* d_ca_code;
|
||||||
|
float* d_local_code_shift_chips;
|
||||||
|
gr_complex* d_correlator_outs;
|
||||||
|
cpu_multicorrelator multicorrelator_cpu;
|
||||||
|
|
||||||
|
|
||||||
|
// tracking vars
|
||||||
|
double d_code_freq_chips;
|
||||||
|
double d_code_phase_step_chips;
|
||||||
|
double d_carrier_doppler_hz;
|
||||||
|
double d_carrier_doppler_phase_step_rad;
|
||||||
|
double d_carrier_frequency_hz;
|
||||||
|
double d_carrier_phase_step_rad;
|
||||||
|
double d_acc_carrier_phase_rad;
|
||||||
|
double d_code_phase_samples;
|
||||||
|
|
||||||
|
//PRN period in samples
|
||||||
|
int d_current_prn_length_samples;
|
||||||
|
|
||||||
|
//processing samples counters
|
||||||
|
unsigned long int d_sample_counter;
|
||||||
|
unsigned long int d_acq_sample_stamp;
|
||||||
|
|
||||||
|
// CN0 estimation and lock detector
|
||||||
|
int d_cn0_estimation_counter;
|
||||||
|
gr_complex* d_Prompt_buffer;
|
||||||
|
double d_carrier_lock_test;
|
||||||
|
double d_CN0_SNV_dB_Hz;
|
||||||
|
double d_carrier_lock_threshold;
|
||||||
|
int d_carrier_lock_fail_counter;
|
||||||
|
|
||||||
|
// control vars
|
||||||
|
bool d_enable_tracking;
|
||||||
|
bool d_pull_in;
|
||||||
|
|
||||||
|
// file dump
|
||||||
|
std::string d_dump_filename;
|
||||||
|
std::ofstream d_dump_file;
|
||||||
|
|
||||||
|
std::map<std::string, std::string> systemName;
|
||||||
|
std::string sys;
|
||||||
|
|
||||||
|
int save_matfile();
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif //GNSS_SDR_GLONASS_L1_CA_DLL_PLL_TRACKING_CC_H
|
@ -53,7 +53,6 @@
|
|||||||
#include "two_bit_packed_file_signal_source.h"
|
#include "two_bit_packed_file_signal_source.h"
|
||||||
#include "labsat_signal_source.h"
|
#include "labsat_signal_source.h"
|
||||||
#include "channel.h"
|
#include "channel.h"
|
||||||
|
|
||||||
#include "signal_conditioner.h"
|
#include "signal_conditioner.h"
|
||||||
#include "array_signal_conditioner.h"
|
#include "array_signal_conditioner.h"
|
||||||
#include "byte_to_short.h"
|
#include "byte_to_short.h"
|
||||||
@ -82,6 +81,7 @@
|
|||||||
#include "galileo_e1_pcps_cccwsr_ambiguous_acquisition.h"
|
#include "galileo_e1_pcps_cccwsr_ambiguous_acquisition.h"
|
||||||
#include "galileo_e1_pcps_quicksync_ambiguous_acquisition.h"
|
#include "galileo_e1_pcps_quicksync_ambiguous_acquisition.h"
|
||||||
#include "galileo_e5a_noncoherent_iq_acquisition_caf.h"
|
#include "galileo_e5a_noncoherent_iq_acquisition_caf.h"
|
||||||
|
#include "glonass_l1_ca_pcps_acquisition.h"
|
||||||
#include "gps_l1_ca_dll_pll_tracking.h"
|
#include "gps_l1_ca_dll_pll_tracking.h"
|
||||||
#include "gps_l1_ca_dll_pll_c_aid_tracking.h"
|
#include "gps_l1_ca_dll_pll_c_aid_tracking.h"
|
||||||
#include "gps_l1_ca_tcp_connector_tracking.h"
|
#include "gps_l1_ca_tcp_connector_tracking.h"
|
||||||
@ -89,12 +89,15 @@
|
|||||||
#include "galileo_e1_tcp_connector_tracking.h"
|
#include "galileo_e1_tcp_connector_tracking.h"
|
||||||
#include "galileo_e5a_dll_pll_tracking.h"
|
#include "galileo_e5a_dll_pll_tracking.h"
|
||||||
#include "gps_l2_m_dll_pll_tracking.h"
|
#include "gps_l2_m_dll_pll_tracking.h"
|
||||||
|
#include "glonass_l1_ca_dll_pll_tracking.h"
|
||||||
|
#include "glonass_l1_ca_dll_pll_c_aid_tracking.h"
|
||||||
#include "gps_l5i_dll_pll_tracking.h"
|
#include "gps_l5i_dll_pll_tracking.h"
|
||||||
#include "gps_l1_ca_telemetry_decoder.h"
|
#include "gps_l1_ca_telemetry_decoder.h"
|
||||||
#include "gps_l2c_telemetry_decoder.h"
|
#include "gps_l2c_telemetry_decoder.h"
|
||||||
#include "gps_l5_telemetry_decoder.h"
|
#include "gps_l5_telemetry_decoder.h"
|
||||||
#include "galileo_e1b_telemetry_decoder.h"
|
#include "galileo_e1b_telemetry_decoder.h"
|
||||||
#include "galileo_e5a_telemetry_decoder.h"
|
#include "galileo_e5a_telemetry_decoder.h"
|
||||||
|
#include "glonass_l1_ca_telemetry_decoder.h"
|
||||||
#include "sbas_l1_telemetry_decoder.h"
|
#include "sbas_l1_telemetry_decoder.h"
|
||||||
#include "hybrid_observables.h"
|
#include "hybrid_observables.h"
|
||||||
#include "rtklib_pvt.h"
|
#include "rtklib_pvt.h"
|
||||||
@ -232,7 +235,6 @@ std::unique_ptr<GNSSBlockInterface> GNSSBlockFactory::GetSignalConditioner(
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
std::unique_ptr<GNSSBlockInterface> GNSSBlockFactory::GetObservables(std::shared_ptr<ConfigurationInterface> configuration)
|
std::unique_ptr<GNSSBlockInterface> GNSSBlockFactory::GetObservables(std::shared_ptr<ConfigurationInterface> configuration)
|
||||||
{
|
{
|
||||||
std::string default_implementation = "Hybrid_Observables";
|
std::string default_implementation = "Hybrid_Observables";
|
||||||
@ -243,11 +245,11 @@ std::unique_ptr<GNSSBlockInterface> GNSSBlockFactory::GetObservables(std::shared
|
|||||||
unsigned int GPS_channels = configuration->property("Channels_1C.count", 0);
|
unsigned int GPS_channels = configuration->property("Channels_1C.count", 0);
|
||||||
GPS_channels += configuration->property("Channels_2S.count", 0);
|
GPS_channels += configuration->property("Channels_2S.count", 0);
|
||||||
GPS_channels += configuration->property("Channels_L5.count", 0);
|
GPS_channels += configuration->property("Channels_L5.count", 0);
|
||||||
return GetBlock(configuration, "Observables", implementation, Galileo_channels + GPS_channels, Galileo_channels + GPS_channels);
|
unsigned int Glonass_channels = configuration->property("Channels_1G.count", 0);
|
||||||
|
return GetBlock(configuration, "Observables", implementation, Galileo_channels + GPS_channels + Glonass_channels, Galileo_channels + GPS_channels + Glonass_channels);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
std::unique_ptr<GNSSBlockInterface> GNSSBlockFactory::GetPVT(std::shared_ptr<ConfigurationInterface> configuration)
|
std::unique_ptr<GNSSBlockInterface> GNSSBlockFactory::GetPVT(std::shared_ptr<ConfigurationInterface> configuration)
|
||||||
{
|
{
|
||||||
std::string default_implementation = "RTKLIB_PVT";
|
std::string default_implementation = "RTKLIB_PVT";
|
||||||
@ -258,7 +260,8 @@ std::unique_ptr<GNSSBlockInterface> GNSSBlockFactory::GetPVT(std::shared_ptr<Con
|
|||||||
unsigned int GPS_channels = configuration->property("Channels_1C.count", 0);
|
unsigned int GPS_channels = configuration->property("Channels_1C.count", 0);
|
||||||
GPS_channels += configuration->property("Channels_2S.count", 0);
|
GPS_channels += configuration->property("Channels_2S.count", 0);
|
||||||
GPS_channels += configuration->property("Channels_L5.count", 0);
|
GPS_channels += configuration->property("Channels_L5.count", 0);
|
||||||
return GetBlock(configuration, "PVT", implementation, Galileo_channels + GPS_channels, 0);
|
unsigned int Glonass_channels = configuration->property("Channels_1G.count", 0);
|
||||||
|
return GetBlock(configuration, "PVT", implementation, Galileo_channels + GPS_channels + Glonass_channels, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -330,13 +333,13 @@ std::unique_ptr<GNSSBlockInterface> GNSSBlockFactory::GetChannel_1C(
|
|||||||
return channel_;
|
return channel_;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//********* GPS L2C (M) CHANNEL *****************
|
//********* GPS L2C (M) CHANNEL *****************
|
||||||
std::unique_ptr<GNSSBlockInterface> GNSSBlockFactory::GetChannel_2S(
|
std::unique_ptr<GNSSBlockInterface> GNSSBlockFactory::GetChannel_2S(
|
||||||
std::shared_ptr<ConfigurationInterface> configuration,
|
std::shared_ptr<ConfigurationInterface> configuration,
|
||||||
std::string acq, std::string trk, std::string tlm, int channel,
|
std::string acq, std::string trk, std::string tlm, int channel,
|
||||||
gr::msg_queue::sptr queue)
|
gr::msg_queue::sptr queue)
|
||||||
{
|
{
|
||||||
|
|
||||||
LOG(INFO) << "Instantiating Channel " << channel << " with Acquisition Implementation: "
|
LOG(INFO) << "Instantiating Channel " << channel << " with Acquisition Implementation: "
|
||||||
<< acq << ", Tracking Implementation: " << trk << ", Telemetry Decoder implementation: " << tlm;
|
<< acq << ", Tracking Implementation: " << trk << ", Telemetry Decoder implementation: " << tlm;
|
||||||
std::string aux = configuration->property("Acquisition_2S" + boost::lexical_cast<std::string>(channel) + ".implementation", std::string("W"));
|
std::string aux = configuration->property("Acquisition_2S" + boost::lexical_cast<std::string>(channel) + ".implementation", std::string("W"));
|
||||||
@ -395,6 +398,7 @@ std::unique_ptr<GNSSBlockInterface> GNSSBlockFactory::GetChannel_2S(
|
|||||||
return channel_;
|
return channel_;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//********* GALILEO E1 B CHANNEL *****************
|
//********* GALILEO E1 B CHANNEL *****************
|
||||||
std::unique_ptr<GNSSBlockInterface> GNSSBlockFactory::GetChannel_1B(
|
std::unique_ptr<GNSSBlockInterface> GNSSBlockFactory::GetChannel_1B(
|
||||||
std::shared_ptr<ConfigurationInterface> configuration,
|
std::shared_ptr<ConfigurationInterface> configuration,
|
||||||
@ -462,6 +466,7 @@ std::unique_ptr<GNSSBlockInterface> GNSSBlockFactory::GetChannel_1B(
|
|||||||
return channel_;
|
return channel_;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//********* GALILEO E5a CHANNEL *****************
|
//********* GALILEO E5a CHANNEL *****************
|
||||||
std::unique_ptr<GNSSBlockInterface> GNSSBlockFactory::GetChannel_5X(
|
std::unique_ptr<GNSSBlockInterface> GNSSBlockFactory::GetChannel_5X(
|
||||||
std::shared_ptr<ConfigurationInterface> configuration,
|
std::shared_ptr<ConfigurationInterface> configuration,
|
||||||
@ -529,6 +534,76 @@ std::unique_ptr<GNSSBlockInterface> GNSSBlockFactory::GetChannel_5X(
|
|||||||
return channel_;
|
return channel_;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//********* GLONASS L1 C/A CHANNEL *****************
|
||||||
|
std::unique_ptr<GNSSBlockInterface> GNSSBlockFactory::GetChannel_1G(
|
||||||
|
std::shared_ptr<ConfigurationInterface> configuration,
|
||||||
|
std::string acq, std::string trk, std::string tlm, int channel,
|
||||||
|
boost::shared_ptr<gr::msg_queue> queue)
|
||||||
|
{
|
||||||
|
std::stringstream stream;
|
||||||
|
stream << channel;
|
||||||
|
std::string id = stream.str();
|
||||||
|
LOG(INFO) << "Instantiating Channel " << channel << " with Acquisition Implementation: "
|
||||||
|
<< acq << ", Tracking Implementation: " << trk << ", Telemetry Decoder Implementation: " << tlm;
|
||||||
|
|
||||||
|
std::string aux = configuration->property("Acquisition_1G" + boost::lexical_cast<std::string>(channel) + ".implementation", std::string("W"));
|
||||||
|
std::string appendix1;
|
||||||
|
if(aux.compare("W") != 0)
|
||||||
|
{
|
||||||
|
appendix1 = boost::lexical_cast<std::string>(channel);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
appendix1 = "";
|
||||||
|
}
|
||||||
|
aux = configuration->property("Tracking_1G" + boost::lexical_cast<std::string>(channel) + ".implementation", std::string("W"));
|
||||||
|
std::string appendix2;
|
||||||
|
if(aux.compare("W") != 0)
|
||||||
|
{
|
||||||
|
appendix2 = boost::lexical_cast<std::string>(channel);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
appendix2 = "";
|
||||||
|
}
|
||||||
|
aux = configuration->property("TelemetryDecoder_1G" + boost::lexical_cast<std::string>(channel) + ".implementation", std::string("W"));
|
||||||
|
std::string appendix3;
|
||||||
|
if(aux.compare("W") != 0)
|
||||||
|
{
|
||||||
|
appendix3 = boost::lexical_cast<std::string>(channel);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
appendix3 = "";
|
||||||
|
}
|
||||||
|
// Automatically detect input data type
|
||||||
|
std::shared_ptr<InMemoryConfiguration> config;
|
||||||
|
config = std::make_shared<InMemoryConfiguration>();
|
||||||
|
std::string default_item_type = "gr_complex";
|
||||||
|
std::string acq_item_type = configuration->property("Acquisition_1G" + appendix1 + ".item_type", default_item_type);
|
||||||
|
std::string trk_item_type = configuration->property("Tracking_1G" + appendix2 + ".item_type", default_item_type);
|
||||||
|
if(acq_item_type.compare(trk_item_type))
|
||||||
|
{
|
||||||
|
LOG(ERROR) << "Acquisition and Tracking blocks must have the same input data type!";
|
||||||
|
}
|
||||||
|
config->set_property("Channel.item_type", acq_item_type);
|
||||||
|
|
||||||
|
std::unique_ptr<GNSSBlockInterface> pass_through_ = GetBlock(config, "Channel", "Pass_Through", 1, 1, queue);
|
||||||
|
std::unique_ptr<AcquisitionInterface> acq_ = GetAcqBlock(configuration, "Acquisition_1G" + appendix1, acq, 1, 0);
|
||||||
|
std::unique_ptr<TrackingInterface> trk_ = GetTrkBlock(configuration, "Tracking_1G"+ appendix2, trk, 1, 1);
|
||||||
|
std::unique_ptr<TelemetryDecoderInterface> tlm_ = GetTlmBlock(configuration, "TelemetryDecoder_1G" + appendix3, tlm, 1, 1);
|
||||||
|
|
||||||
|
std::unique_ptr<GNSSBlockInterface> channel_(new Channel(configuration.get(), channel, std::move(pass_through_),
|
||||||
|
std::move(acq_),
|
||||||
|
std::move(trk_),
|
||||||
|
std::move(tlm_),
|
||||||
|
"Channel", "1G", queue));
|
||||||
|
|
||||||
|
return channel_;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
//********* GPS L5 CHANNEL *****************
|
//********* GPS L5 CHANNEL *****************
|
||||||
std::unique_ptr<GNSSBlockInterface> GNSSBlockFactory::GetChannel_L5(
|
std::unique_ptr<GNSSBlockInterface> GNSSBlockFactory::GetChannel_L5(
|
||||||
std::shared_ptr<ConfigurationInterface> configuration,
|
std::shared_ptr<ConfigurationInterface> configuration,
|
||||||
@ -597,7 +672,6 @@ std::unique_ptr<GNSSBlockInterface> GNSSBlockFactory::GetChannel_L5(
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
std::unique_ptr<std::vector<std::unique_ptr<GNSSBlockInterface>>> GNSSBlockFactory::GetChannels(
|
std::unique_ptr<std::vector<std::unique_ptr<GNSSBlockInterface>>> GNSSBlockFactory::GetChannels(
|
||||||
std::shared_ptr<ConfigurationInterface> configuration, gr::msg_queue::sptr queue)
|
std::shared_ptr<ConfigurationInterface> configuration, gr::msg_queue::sptr queue)
|
||||||
{
|
{
|
||||||
@ -612,45 +686,46 @@ std::unique_ptr<std::vector<std::unique_ptr<GNSSBlockInterface>>> GNSSBlockFacto
|
|||||||
unsigned int Channels_2S_count = configuration->property("Channels_2S.count", 0);
|
unsigned int Channels_2S_count = configuration->property("Channels_2S.count", 0);
|
||||||
unsigned int Channels_1B_count = configuration->property("Channels_1B.count", 0);
|
unsigned int Channels_1B_count = configuration->property("Channels_1B.count", 0);
|
||||||
unsigned int Channels_5X_count = configuration->property("Channels_5X.count", 0);
|
unsigned int Channels_5X_count = configuration->property("Channels_5X.count", 0);
|
||||||
|
unsigned int Channels_1G_count = configuration->property("Channels_1G.count", 0);
|
||||||
unsigned int Channels_L5_count = configuration->property("Channels_L5.count", 0);
|
unsigned int Channels_L5_count = configuration->property("Channels_L5.count", 0);
|
||||||
|
|
||||||
unsigned int total_channels = Channels_1C_count +
|
unsigned int total_channels = Channels_1C_count +
|
||||||
Channels_2S_count +
|
Channels_2S_count +
|
||||||
Channels_1B_count +
|
Channels_1B_count +
|
||||||
Channels_5X_count +
|
Channels_5X_count +
|
||||||
|
Channels_1G_count +
|
||||||
Channels_L5_count;
|
Channels_L5_count;
|
||||||
|
|
||||||
std::unique_ptr<std::vector<std::unique_ptr<GNSSBlockInterface>>> channels(new std::vector<std::unique_ptr<GNSSBlockInterface>>(total_channels));
|
std::unique_ptr<std::vector<std::unique_ptr<GNSSBlockInterface>>> channels(new std::vector<std::unique_ptr<GNSSBlockInterface>>(total_channels));
|
||||||
|
|
||||||
//**************** GPS L1 C/A CHANNELS **********************
|
//**************** GPS L1 C/A CHANNELS **********************
|
||||||
|
|
||||||
LOG(INFO) << "Getting " << Channels_1C_count << " GPS L1 C/A channels";
|
LOG(INFO) << "Getting " << Channels_1C_count << " GPS L1 C/A channels";
|
||||||
acquisition_implementation = configuration->property("Acquisition_1C.implementation", default_implementation);
|
acquisition_implementation = configuration->property("Acquisition_1C.implementation", default_implementation);
|
||||||
tracking_implementation = configuration->property("Tracking_1C.implementation", default_implementation);
|
tracking_implementation = configuration->property("Tracking_1C.implementation", default_implementation);
|
||||||
telemetry_decoder_implementation = configuration->property("TelemetryDecoder_1C.implementation", default_implementation);
|
telemetry_decoder_implementation = configuration->property("TelemetryDecoder_1C.implementation", default_implementation);
|
||||||
|
|
||||||
|
|
||||||
for (unsigned int i = 0; i < Channels_1C_count; i++)
|
for (unsigned int i = 0; i < Channels_1C_count; i++)
|
||||||
{
|
{
|
||||||
//(i.e. Acquisition_1C0.implementation=xxxx)
|
//(i.e. Acquisition_1C0.implementation=xxxx)
|
||||||
std::string acquisition_implementation_specific = configuration->property(
|
std::string acquisition_implementation_specific = configuration->property(
|
||||||
"Acquisition_1C" + boost::lexical_cast<std::string>(channel_absolute_id) + ".implementation",
|
"Acquisition_1C" + boost::lexical_cast<std::string>(channel_absolute_id) + ".implementation",
|
||||||
acquisition_implementation);
|
acquisition_implementation);
|
||||||
//(i.e. Tracking_1C0.implementation=xxxx)
|
//(i.e. Tracking_1C0.implementation=xxxx)
|
||||||
std::string tracking_implementation_specific = configuration->property(
|
std::string tracking_implementation_specific = configuration->property(
|
||||||
"Tracking_1C" + boost::lexical_cast<std::string>(channel_absolute_id) + ".implementation",
|
"Tracking_1C" + boost::lexical_cast<std::string>(channel_absolute_id) + ".implementation",
|
||||||
tracking_implementation);
|
tracking_implementation);
|
||||||
std::string telemetry_decoder_implementation_specific = configuration->property(
|
std::string telemetry_decoder_implementation_specific = configuration->property(
|
||||||
"TelemetryDecoder_1C" + boost::lexical_cast<std::string>(channel_absolute_id) + ".implementation",
|
"TelemetryDecoder_1C" + boost::lexical_cast<std::string>(channel_absolute_id) + ".implementation",
|
||||||
telemetry_decoder_implementation);
|
telemetry_decoder_implementation);
|
||||||
|
|
||||||
// Push back the channel to the vector of channels
|
// Push back the channel to the vector of channels
|
||||||
channels->at(channel_absolute_id) = std::move(GetChannel_1C(configuration,
|
channels->at(channel_absolute_id) = std::move(GetChannel_1C(configuration,
|
||||||
acquisition_implementation_specific,
|
acquisition_implementation_specific,
|
||||||
tracking_implementation_specific,
|
tracking_implementation_specific,
|
||||||
telemetry_decoder_implementation_specific,
|
telemetry_decoder_implementation_specific,
|
||||||
channel_absolute_id,
|
channel_absolute_id,
|
||||||
queue));
|
queue));
|
||||||
channel_absolute_id++;
|
channel_absolute_id++;
|
||||||
}
|
}
|
||||||
|
|
||||||
//**************** GPS L2C (M) CHANNELS **********************
|
//**************** GPS L2C (M) CHANNELS **********************
|
||||||
@ -662,25 +737,26 @@ std::unique_ptr<std::vector<std::unique_ptr<GNSSBlockInterface>>> GNSSBlockFacto
|
|||||||
{
|
{
|
||||||
//(i.e. Acquisition_1C0.implementation=xxxx)
|
//(i.e. Acquisition_1C0.implementation=xxxx)
|
||||||
std::string acquisition_implementation_specific = configuration->property(
|
std::string acquisition_implementation_specific = configuration->property(
|
||||||
"Acquisition_2S" + boost::lexical_cast<std::string>(channel_absolute_id) + ".implementation",
|
"Acquisition_2S" + boost::lexical_cast<std::string>(channel_absolute_id) + ".implementation",
|
||||||
acquisition_implementation);
|
acquisition_implementation);
|
||||||
//(i.e. Tracking_1C0.implementation=xxxx)
|
//(i.e. Tracking_1C0.implementation=xxxx)
|
||||||
std::string tracking_implementation_specific = configuration->property(
|
std::string tracking_implementation_specific = configuration->property(
|
||||||
"Tracking_2S" + boost::lexical_cast<std::string>(channel_absolute_id) + ".implementation",
|
"Tracking_2S" + boost::lexical_cast<std::string>(channel_absolute_id) + ".implementation",
|
||||||
tracking_implementation);
|
tracking_implementation);
|
||||||
std::string telemetry_decoder_implementation_specific = configuration->property(
|
std::string telemetry_decoder_implementation_specific = configuration->property(
|
||||||
"TelemetryDecoder_2S" + boost::lexical_cast<std::string>(channel_absolute_id) + ".implementation",
|
"TelemetryDecoder_2S" + boost::lexical_cast<std::string>(channel_absolute_id) + ".implementation",
|
||||||
telemetry_decoder_implementation);
|
telemetry_decoder_implementation);
|
||||||
|
|
||||||
// Push back the channel to the vector of channels
|
// Push back the channel to the vector of channels
|
||||||
channels->at(channel_absolute_id) = std::move(GetChannel_2S(configuration,
|
channels->at(channel_absolute_id) = std::move(GetChannel_2S(configuration,
|
||||||
acquisition_implementation_specific,
|
acquisition_implementation_specific,
|
||||||
tracking_implementation_specific,
|
tracking_implementation_specific,
|
||||||
telemetry_decoder_implementation_specific,
|
telemetry_decoder_implementation_specific,
|
||||||
channel_absolute_id,
|
channel_absolute_id,
|
||||||
queue));
|
queue));
|
||||||
channel_absolute_id++;
|
channel_absolute_id++;
|
||||||
}
|
}
|
||||||
|
|
||||||
//**************** GPS L5 CHANNELS **********************
|
//**************** GPS L5 CHANNELS **********************
|
||||||
LOG(INFO)<< "Getting " << Channels_L5_count << " GPS L5 channels";
|
LOG(INFO)<< "Getting " << Channels_L5_count << " GPS L5 channels";
|
||||||
tracking_implementation = configuration->property("Tracking_L5.implementation", default_implementation);
|
tracking_implementation = configuration->property("Tracking_L5.implementation", default_implementation);
|
||||||
@ -690,88 +766,118 @@ std::unique_ptr<std::vector<std::unique_ptr<GNSSBlockInterface>>> GNSSBlockFacto
|
|||||||
{
|
{
|
||||||
//(i.e. Acquisition_1C0.implementation=xxxx)
|
//(i.e. Acquisition_1C0.implementation=xxxx)
|
||||||
std::string acquisition_implementation_specific = configuration->property(
|
std::string acquisition_implementation_specific = configuration->property(
|
||||||
"Acquisition_L5" + boost::lexical_cast<std::string>(channel_absolute_id) + ".implementation",
|
"Acquisition_L5" + boost::lexical_cast<std::string>(channel_absolute_id) + ".implementation",
|
||||||
acquisition_implementation);
|
acquisition_implementation);
|
||||||
//(i.e. Tracking_1C0.implementation=xxxx)
|
//(i.e. Tracking_1C0.implementation=xxxx)
|
||||||
std::string tracking_implementation_specific = configuration->property(
|
std::string tracking_implementation_specific = configuration->property(
|
||||||
"Tracking_L5" + boost::lexical_cast<std::string>(channel_absolute_id) + ".implementation",
|
"Tracking_L5" + boost::lexical_cast<std::string>(channel_absolute_id) + ".implementation",
|
||||||
tracking_implementation);
|
tracking_implementation);
|
||||||
std::string telemetry_decoder_implementation_specific = configuration->property(
|
std::string telemetry_decoder_implementation_specific = configuration->property(
|
||||||
"TelemetryDecoder_L5" + boost::lexical_cast<std::string>(channel_absolute_id) + ".implementation",
|
"TelemetryDecoder_L5" + boost::lexical_cast<std::string>(channel_absolute_id) + ".implementation",
|
||||||
telemetry_decoder_implementation);
|
telemetry_decoder_implementation);
|
||||||
|
|
||||||
// Push back the channel to the vector of channels
|
// Push back the channel to the vector of channels
|
||||||
channels->at(channel_absolute_id) = std::move(GetChannel_L5(configuration,
|
channels->at(channel_absolute_id) = std::move(GetChannel_L5(configuration,
|
||||||
acquisition_implementation_specific,
|
acquisition_implementation_specific,
|
||||||
tracking_implementation_specific,
|
tracking_implementation_specific,
|
||||||
telemetry_decoder_implementation_specific,
|
telemetry_decoder_implementation_specific,
|
||||||
channel_absolute_id,
|
channel_absolute_id,
|
||||||
queue));
|
queue));
|
||||||
channel_absolute_id++;
|
channel_absolute_id++;
|
||||||
}
|
}
|
||||||
|
|
||||||
//**************** GALILEO E1 B (I/NAV OS) CHANNELS **********************
|
//**************** GALILEO E1 B (I/NAV OS) CHANNELS **********************
|
||||||
|
|
||||||
LOG(INFO) << "Getting " << Channels_1B_count << " GALILEO E1 B (I/NAV OS) channels";
|
LOG(INFO) << "Getting " << Channels_1B_count << " GALILEO E1 B (I/NAV OS) channels";
|
||||||
tracking_implementation = configuration->property("Tracking_1B.implementation", default_implementation);
|
tracking_implementation = configuration->property("Tracking_1B.implementation", default_implementation);
|
||||||
telemetry_decoder_implementation = configuration->property("TelemetryDecoder_1B.implementation", default_implementation);
|
telemetry_decoder_implementation = configuration->property("TelemetryDecoder_1B.implementation", default_implementation);
|
||||||
acquisition_implementation = configuration->property("Acquisition_1B.implementation", default_implementation);
|
acquisition_implementation = configuration->property("Acquisition_1B.implementation", default_implementation);
|
||||||
for (unsigned int i = 0; i < Channels_1B_count; i++)
|
for (unsigned int i = 0; i < Channels_1B_count; i++)
|
||||||
{
|
{
|
||||||
//(i.e. Acquisition_1C0.implementation=xxxx)
|
//(i.e. Acquisition_1C0.implementation=xxxx)
|
||||||
std::string acquisition_implementation_specific = configuration->property(
|
std::string acquisition_implementation_specific = configuration->property(
|
||||||
"Acquisition_1B" + boost::lexical_cast<std::string>(channel_absolute_id) + ".implementation",
|
"Acquisition_1B" + boost::lexical_cast<std::string>(channel_absolute_id) + ".implementation",
|
||||||
acquisition_implementation);
|
acquisition_implementation);
|
||||||
//(i.e. Tracking_1C0.implementation=xxxx)
|
//(i.e. Tracking_1C0.implementation=xxxx)
|
||||||
std::string tracking_implementation_specific = configuration->property(
|
std::string tracking_implementation_specific = configuration->property(
|
||||||
"Tracking_1B" + boost::lexical_cast<std::string>(channel_absolute_id) + ".implementation",
|
"Tracking_1B" + boost::lexical_cast<std::string>(channel_absolute_id) + ".implementation",
|
||||||
tracking_implementation);
|
tracking_implementation);
|
||||||
std::string telemetry_decoder_implementation_specific = configuration->property(
|
std::string telemetry_decoder_implementation_specific = configuration->property(
|
||||||
"TelemetryDecoder_1B" + boost::lexical_cast<std::string>(channel_absolute_id) + ".implementation",
|
"TelemetryDecoder_1B" + boost::lexical_cast<std::string>(channel_absolute_id) + ".implementation",
|
||||||
telemetry_decoder_implementation);
|
telemetry_decoder_implementation);
|
||||||
|
|
||||||
// Push back the channel to the vector of channels
|
|
||||||
channels->at(channel_absolute_id) = std::move(GetChannel_1B(configuration,
|
|
||||||
acquisition_implementation_specific,
|
|
||||||
tracking_implementation_specific,
|
|
||||||
telemetry_decoder_implementation_specific,
|
|
||||||
channel_absolute_id,
|
|
||||||
queue));
|
|
||||||
channel_absolute_id++;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
// Push back the channel to the vector of channels
|
||||||
|
channels->at(channel_absolute_id) = std::move(GetChannel_1B(configuration,
|
||||||
|
acquisition_implementation_specific,
|
||||||
|
tracking_implementation_specific,
|
||||||
|
telemetry_decoder_implementation_specific,
|
||||||
|
channel_absolute_id,
|
||||||
|
queue));
|
||||||
|
channel_absolute_id++;
|
||||||
|
}
|
||||||
|
|
||||||
//**************** GALILEO E5a I (F/NAV OS) CHANNELS **********************
|
//**************** GALILEO E5a I (F/NAV OS) CHANNELS **********************
|
||||||
LOG(INFO) << "Getting " << Channels_5X_count << " GALILEO E5a I (F/NAV OS) channels";
|
LOG(INFO) << "Getting " << Channels_5X_count << " GALILEO E5a I (F/NAV OS) channels";
|
||||||
tracking_implementation = configuration->property("Tracking_5X.implementation", default_implementation);
|
tracking_implementation = configuration->property("Tracking_5X.implementation", default_implementation);
|
||||||
telemetry_decoder_implementation = configuration->property("TelemetryDecoder_5X.implementation", default_implementation);
|
telemetry_decoder_implementation = configuration->property("TelemetryDecoder_5X.implementation", default_implementation);
|
||||||
acquisition_implementation = configuration->property("Acquisition_5X.implementation", default_implementation);
|
acquisition_implementation = configuration->property("Acquisition_5X.implementation", default_implementation);
|
||||||
for (unsigned int i = 0; i < Channels_5X_count; i++)
|
for (unsigned int i = 0; i < Channels_5X_count; i++)
|
||||||
{
|
{
|
||||||
//(i.e. Acquisition_1C0.implementation=xxxx)
|
//(i.e. Acquisition_1C0.implementation=xxxx)
|
||||||
std::string acquisition_implementation_specific = configuration->property(
|
std::string acquisition_implementation_specific = configuration->property(
|
||||||
"Acquisition_5X" + boost::lexical_cast<std::string>(channel_absolute_id) + ".implementation",
|
"Acquisition_5X" + boost::lexical_cast<std::string>(channel_absolute_id) + ".implementation",
|
||||||
acquisition_implementation);
|
acquisition_implementation);
|
||||||
//(i.e. Tracking_1C0.implementation=xxxx)
|
//(i.e. Tracking_1C0.implementation=xxxx)
|
||||||
std::string tracking_implementation_specific = configuration->property(
|
std::string tracking_implementation_specific = configuration->property(
|
||||||
"Tracking_5X" + boost::lexical_cast<std::string>(channel_absolute_id) + ".implementation",
|
"Tracking_5X" + boost::lexical_cast<std::string>(channel_absolute_id) + ".implementation",
|
||||||
tracking_implementation);
|
tracking_implementation);
|
||||||
std::string telemetry_decoder_implementation_specific = configuration->property(
|
std::string telemetry_decoder_implementation_specific = configuration->property(
|
||||||
"TelemetryDecoder_5X" + boost::lexical_cast<std::string>(channel_absolute_id) + ".implementation",
|
"TelemetryDecoder_5X" + boost::lexical_cast<std::string>(channel_absolute_id) + ".implementation",
|
||||||
telemetry_decoder_implementation);
|
telemetry_decoder_implementation);
|
||||||
|
|
||||||
// Push back the channel to the vector of channels
|
// Push back the channel to the vector of channels
|
||||||
channels->at(channel_absolute_id) = std::move(GetChannel_5X(configuration,
|
channels->at(channel_absolute_id) = std::move(GetChannel_5X(configuration,
|
||||||
acquisition_implementation_specific,
|
acquisition_implementation_specific,
|
||||||
tracking_implementation_specific,
|
tracking_implementation_specific,
|
||||||
telemetry_decoder_implementation_specific,
|
telemetry_decoder_implementation_specific,
|
||||||
channel_absolute_id,
|
channel_absolute_id,
|
||||||
queue));
|
queue));
|
||||||
channel_absolute_id++;
|
channel_absolute_id++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//**************** GLONASS L1 C/A CHANNELS **********************
|
||||||
|
LOG(INFO) << "Getting " << Channels_1G_count << " GLONASS L1 C/A channels";
|
||||||
|
acquisition_implementation = configuration->property("Acquisition_1G.implementation", default_implementation);
|
||||||
|
tracking_implementation = configuration->property("Tracking_1G.implementation", default_implementation);
|
||||||
|
telemetry_decoder_implementation = configuration->property("TelemetryDecoder_1G.implementation", default_implementation);
|
||||||
|
|
||||||
|
for (unsigned int i = 0; i < Channels_1G_count; i++)
|
||||||
|
{
|
||||||
|
//(i.e. Acquisition_1G0.implementation=xxxx)
|
||||||
|
std::string acquisition_implementation_specific = configuration->property(
|
||||||
|
"Acquisition_1G" + boost::lexical_cast<std::string>(channel_absolute_id) + ".implementation",
|
||||||
|
acquisition_implementation);
|
||||||
|
//(i.e. Tracking_1G0.implementation=xxxx)
|
||||||
|
std::string tracking_implementation_specific = configuration->property(
|
||||||
|
"Tracking_1G" + boost::lexical_cast<std::string>(channel_absolute_id) + ".implementation",
|
||||||
|
tracking_implementation);
|
||||||
|
std::string telemetry_decoder_implementation_specific = configuration->property(
|
||||||
|
"TelemetryDecoder_1G" + boost::lexical_cast<std::string>(channel_absolute_id) + ".implementation",
|
||||||
|
telemetry_decoder_implementation);
|
||||||
|
|
||||||
|
// Push back the channel to the vector of channels
|
||||||
|
channels->at(channel_absolute_id) = std::move(GetChannel_1G(configuration,
|
||||||
|
acquisition_implementation_specific,
|
||||||
|
tracking_implementation_specific,
|
||||||
|
telemetry_decoder_implementation_specific,
|
||||||
|
channel_absolute_id,
|
||||||
|
queue));
|
||||||
|
channel_absolute_id++;
|
||||||
|
}
|
||||||
|
|
||||||
return channels;
|
return channels;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Returns the block with the required configuration and implementation
|
* Returns the block with the required configuration and implementation
|
||||||
*
|
*
|
||||||
@ -1056,7 +1162,6 @@ std::unique_ptr<GNSSBlockInterface> GNSSBlockFactory::GetBlock(
|
|||||||
block = std::move(block_);
|
block = std::move(block_);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// RESAMPLER -------------------------------------------------------------------
|
// RESAMPLER -------------------------------------------------------------------
|
||||||
else if (implementation.compare("Direct_Resampler") == 0)
|
else if (implementation.compare("Direct_Resampler") == 0)
|
||||||
{
|
{
|
||||||
@ -1163,9 +1268,12 @@ std::unique_ptr<GNSSBlockInterface> GNSSBlockFactory::GetBlock(
|
|||||||
out_streams));
|
out_streams));
|
||||||
block = std::move(block_);
|
block = std::move(block_);
|
||||||
}
|
}
|
||||||
|
else if (implementation.compare("GLONASS_L1_CA_PCPS_Acquisition") == 0)
|
||||||
|
{
|
||||||
|
std::unique_ptr<AcquisitionInterface> block_(new GlonassL1CaPcpsAcquisition(configuration.get(), role, in_streams,
|
||||||
|
out_streams));
|
||||||
|
block = std::move(block_);
|
||||||
|
}
|
||||||
|
|
||||||
// TRACKING BLOCKS -------------------------------------------------------------
|
// TRACKING BLOCKS -------------------------------------------------------------
|
||||||
else if (implementation.compare("GPS_L1_CA_DLL_PLL_Tracking") == 0)
|
else if (implementation.compare("GPS_L1_CA_DLL_PLL_Tracking") == 0)
|
||||||
@ -1232,6 +1340,18 @@ std::unique_ptr<GNSSBlockInterface> GNSSBlockFactory::GetBlock(
|
|||||||
out_streams));
|
out_streams));
|
||||||
block = std::move(block_);
|
block = std::move(block_);
|
||||||
}
|
}
|
||||||
|
else if (implementation.compare("GLONASS_L1_CA_DLL_PLL_Tracking") == 0)
|
||||||
|
{
|
||||||
|
std::unique_ptr<GNSSBlockInterface> block_(new GlonassL1CaDllPllTracking(configuration.get(), role, in_streams,
|
||||||
|
out_streams));
|
||||||
|
block = std::move(block_);
|
||||||
|
}
|
||||||
|
else if (implementation.compare("GLONASS_L1_CA_DLL_PLL_C_Aid_Tracking") == 0)
|
||||||
|
{
|
||||||
|
std::unique_ptr<GNSSBlockInterface> block_(new GlonassL1CaDllPllCAidTracking(configuration.get(), role, in_streams,
|
||||||
|
out_streams));
|
||||||
|
block = std::move(block_);
|
||||||
|
}
|
||||||
|
|
||||||
// TELEMETRY DECODERS ----------------------------------------------------------
|
// TELEMETRY DECODERS ----------------------------------------------------------
|
||||||
else if (implementation.compare("GPS_L1_CA_Telemetry_Decoder") == 0)
|
else if (implementation.compare("GPS_L1_CA_Telemetry_Decoder") == 0)
|
||||||
@ -1270,6 +1390,12 @@ std::unique_ptr<GNSSBlockInterface> GNSSBlockFactory::GetBlock(
|
|||||||
out_streams));
|
out_streams));
|
||||||
block = std::move(block_);
|
block = std::move(block_);
|
||||||
}
|
}
|
||||||
|
else if (implementation.compare("GLONASS_L1_CA_Telemetry_Decoder") == 0)
|
||||||
|
{
|
||||||
|
std::unique_ptr<GNSSBlockInterface> block_(new GlonassL1CaTelemetryDecoder(configuration.get(), role, in_streams,
|
||||||
|
out_streams));
|
||||||
|
block = std::move(block_);
|
||||||
|
}
|
||||||
|
|
||||||
// OBSERVABLES -----------------------------------------------------------------
|
// OBSERVABLES -----------------------------------------------------------------
|
||||||
else if ((implementation.compare("Hybrid_Observables") == 0) || (implementation.compare("GPS_L1_CA_Observables") == 0) || (implementation.compare("GPS_L2C_Observables") == 0) ||
|
else if ((implementation.compare("Hybrid_Observables") == 0) || (implementation.compare("GPS_L1_CA_Observables") == 0) || (implementation.compare("GPS_L2C_Observables") == 0) ||
|
||||||
@ -1279,6 +1405,7 @@ std::unique_ptr<GNSSBlockInterface> GNSSBlockFactory::GetBlock(
|
|||||||
out_streams));
|
out_streams));
|
||||||
block = std::move(block_);
|
block = std::move(block_);
|
||||||
}
|
}
|
||||||
|
|
||||||
// PVT -------------------------------------------------------------------------
|
// PVT -------------------------------------------------------------------------
|
||||||
else if ((implementation.compare("RTKLIB_PVT") == 0) || (implementation.compare("GPS_L1_CA_PVT") == 0) || (implementation.compare("Galileo_E1_PVT") == 0) || (implementation.compare("Hybrid_PVT") == 0))
|
else if ((implementation.compare("RTKLIB_PVT") == 0) || (implementation.compare("GPS_L1_CA_PVT") == 0) || (implementation.compare("Galileo_E1_PVT") == 0) || (implementation.compare("Hybrid_PVT") == 0))
|
||||||
{
|
{
|
||||||
@ -1408,6 +1535,12 @@ std::unique_ptr<AcquisitionInterface> GNSSBlockFactory::GetAcqBlock(
|
|||||||
out_streams));
|
out_streams));
|
||||||
block = std::move(block_);
|
block = std::move(block_);
|
||||||
}
|
}
|
||||||
|
else if (implementation.compare("GLONASS_L1_CA_PCPS_Acquisition") == 0)
|
||||||
|
{
|
||||||
|
std::unique_ptr<AcquisitionInterface> block_(new GlonassL1CaPcpsAcquisition(configuration.get(), role, in_streams,
|
||||||
|
out_streams));
|
||||||
|
block = std::move(block_);
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// Log fatal. This causes execution to stop.
|
// Log fatal. This causes execution to stop.
|
||||||
@ -1490,6 +1623,18 @@ std::unique_ptr<TrackingInterface> GNSSBlockFactory::GetTrkBlock(
|
|||||||
block = std::move(block_);
|
block = std::move(block_);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
else if (implementation.compare("GLONASS_L1_CA_DLL_PLL_Tracking") == 0)
|
||||||
|
{
|
||||||
|
std::unique_ptr<TrackingInterface> block_(new GlonassL1CaDllPllTracking(configuration.get(), role, in_streams,
|
||||||
|
out_streams));
|
||||||
|
block = std::move(block_);
|
||||||
|
}
|
||||||
|
else if (implementation.compare("GLONASS_L1_CA_DLL_PLL_C_Aid_Tracking") == 0)
|
||||||
|
{
|
||||||
|
std::unique_ptr<TrackingInterface> block_(new GlonassL1CaDllPllCAidTracking(configuration.get(), role, in_streams,
|
||||||
|
out_streams));
|
||||||
|
block = std::move(block_);
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// Log fatal. This causes execution to stop.
|
// Log fatal. This causes execution to stop.
|
||||||
@ -1538,6 +1683,12 @@ std::unique_ptr<TelemetryDecoderInterface> GNSSBlockFactory::GetTlmBlock(
|
|||||||
out_streams));
|
out_streams));
|
||||||
block = std::move(block_);
|
block = std::move(block_);
|
||||||
}
|
}
|
||||||
|
else if (implementation.compare("GLONASS_L1_CA_Telemetry_Decoder") == 0)
|
||||||
|
{
|
||||||
|
std::unique_ptr<TelemetryDecoderInterface> block_(new GlonassL1CaTelemetryDecoder(configuration.get(), role, in_streams,
|
||||||
|
out_streams));
|
||||||
|
block = std::move(block_);
|
||||||
|
}
|
||||||
else if (implementation.compare("GPS_L5_Telemetry_Decoder") == 0)
|
else if (implementation.compare("GPS_L5_Telemetry_Decoder") == 0)
|
||||||
{
|
{
|
||||||
std::unique_ptr<TelemetryDecoderInterface> block_(new GpsL5TelemetryDecoder(configuration.get(), role, in_streams,
|
std::unique_ptr<TelemetryDecoderInterface> block_(new GpsL5TelemetryDecoder(configuration.get(), role, in_streams,
|
||||||
|
@ -98,6 +98,10 @@ private:
|
|||||||
std::string acq, std::string trk, std::string tlm, int channel,
|
std::string acq, std::string trk, std::string tlm, int channel,
|
||||||
gr::msg_queue::sptr queue);
|
gr::msg_queue::sptr queue);
|
||||||
|
|
||||||
|
std::unique_ptr<GNSSBlockInterface> GetChannel_1G(std::shared_ptr<ConfigurationInterface> configuration,
|
||||||
|
std::string acq, std::string trk, std::string tlm, int channel,
|
||||||
|
boost::shared_ptr<gr::msg_queue> queue);
|
||||||
|
|
||||||
std::unique_ptr<AcquisitionInterface> GetAcqBlock(
|
std::unique_ptr<AcquisitionInterface> GetAcqBlock(
|
||||||
std::shared_ptr<ConfigurationInterface> configuration,
|
std::shared_ptr<ConfigurationInterface> configuration,
|
||||||
std::string role,
|
std::string role,
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user