mirror of
https://github.com/gnss-sdr/gnss-sdr
synced 2024-12-15 12:40:35 +00:00
Merge branch 'next' of https://github.com/gnss-sdr/gnss-sdr into next
This commit is contained in:
commit
b7df062112
@ -1,274 +0,0 @@
|
|||||||
; This is a GNSS-SDR configuration file
|
|
||||||
; The configuration API is described at https://gnss-sdr.org/docs/sp-blocks/
|
|
||||||
|
|
||||||
; You can define your own receiver and invoke it by doing
|
|
||||||
; gnss-sdr --config_file=my_GNSS_SDR_configuration.conf
|
|
||||||
;
|
|
||||||
|
|
||||||
[GNSS-SDR]
|
|
||||||
|
|
||||||
;######### GLOBAL OPTIONS ##################
|
|
||||||
;internal_fs_sps: Internal signal sampling frequency after the signal conditioning stage [samples per second].
|
|
||||||
GNSS-SDR.internal_fs_sps=25000000
|
|
||||||
Receiver.sources_count=2
|
|
||||||
|
|
||||||
;######### CONTROL_THREAD CONFIG ############
|
|
||||||
ControlThread.wait_for_flowgraph=false
|
|
||||||
|
|
||||||
;######### SIGNAL_SOURCE CONFIG ############
|
|
||||||
;# Signal Source config for GPS, Galileo signals
|
|
||||||
SignalSource0.implementation=File_Signal_Source
|
|
||||||
SignalSource0.filename=/home/dmiralles/Documents/GNSS-Metadata-Standard/install/GPSL1-GalileoE1.dat
|
|
||||||
SignalSource0.item_type=byte
|
|
||||||
SignalSource0.sampling_frequency=25000000
|
|
||||||
SignalSource0.samples=0
|
|
||||||
SignalSource0.repeat=false
|
|
||||||
SignalSource0.dump=false
|
|
||||||
SignalSource0.enable_throttle_control=false
|
|
||||||
|
|
||||||
;# Signal Source config for BDS signals
|
|
||||||
SignalSource1.implementation=File_Signal_Source
|
|
||||||
SignalSource1.filename=/home/dmiralles/Documents/GNSS-Metadata-Standard/install/BdsB1IStr01.dat
|
|
||||||
SignalSource1.item_type=byte
|
|
||||||
SignalSource1.sampling_frequency=25000000
|
|
||||||
SignalSource1.samples=0
|
|
||||||
SignalSource1.repeat=false
|
|
||||||
SignalSource1.dump=false
|
|
||||||
SignalSource1.enable_throttle_control=false
|
|
||||||
|
|
||||||
;######### SIGNAL_CONDITIONER CONFIG ############
|
|
||||||
;# Signal Conditioner config for GPS, Galileo signals
|
|
||||||
SignalConditioner0.implementation=Signal_Conditioner
|
|
||||||
DataTypeAdapter0.implementation=Byte_To_Short
|
|
||||||
InputFilter0.implementation=Freq_Xlating_Fir_Filter
|
|
||||||
InputFilter0.input_item_type=short
|
|
||||||
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=25000000
|
|
||||||
InputFilter0.IF=6250000
|
|
||||||
Resampler0.implementation=Pass_Through
|
|
||||||
Resampler0.sample_freq_in=25000000
|
|
||||||
Resampler0.sample_freq_out=25000000
|
|
||||||
Resampler0.item_type=gr_complex
|
|
||||||
|
|
||||||
;# Signal Conditioner config for BDS signals
|
|
||||||
SignalConditioner1.implementation=Signal_Conditioner
|
|
||||||
DataTypeAdapter1.implementation=Byte_To_Short
|
|
||||||
InputFilter1.implementation=Freq_Xlating_Fir_Filter
|
|
||||||
InputFilter1.input_item_type=short
|
|
||||||
InputFilter1.output_item_type=gr_complex
|
|
||||||
InputFilter1.taps_item_type=float
|
|
||||||
InputFilter1.number_of_taps=5
|
|
||||||
InputFilter1.number_of_bands=2
|
|
||||||
InputFilter1.band1_begin=0.0
|
|
||||||
InputFilter1.band1_end=0.70
|
|
||||||
InputFilter1.band2_begin=0.80
|
|
||||||
InputFilter1.band2_end=1.0
|
|
||||||
InputFilter1.ampl1_begin=1.0
|
|
||||||
InputFilter1.ampl1_end=1.0
|
|
||||||
InputFilter1.ampl2_begin=0.0
|
|
||||||
InputFilter1.ampl2_end=0.0
|
|
||||||
InputFilter1.band1_error=1.0
|
|
||||||
InputFilter1.band2_error=1.0
|
|
||||||
InputFilter1.filter_type=bandpass
|
|
||||||
InputFilter1.grid_density=16
|
|
||||||
InputFilter1.sampling_frequency=25000000
|
|
||||||
InputFilter1.IF=6250000
|
|
||||||
Resampler1.implementation=Pass_Through
|
|
||||||
Resampler1.sample_freq_in=25000000
|
|
||||||
Resampler1.sample_freq_out=25000000
|
|
||||||
Resampler1.item_type=gr_complex
|
|
||||||
|
|
||||||
;######### CHANNELS GLOBAL CONFIG ############
|
|
||||||
Channels_1C.count=7
|
|
||||||
Channels_1B.count=7
|
|
||||||
Channels_B1.count=10
|
|
||||||
Channels.in_acquisition=10
|
|
||||||
|
|
||||||
;# Preparing collection for GPS 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=0
|
|
||||||
Channel6.RF_channel_ID=0
|
|
||||||
Channel0.signal=1C
|
|
||||||
Channel0.satellite = 2
|
|
||||||
Channel1.signal=1C
|
|
||||||
Channel1.satellite = 5
|
|
||||||
Channel2.signal=1C
|
|
||||||
Channel2.satellite = 6
|
|
||||||
Channel3.signal=1C
|
|
||||||
Channel3.satellite = 7
|
|
||||||
Channel4.signal=1C
|
|
||||||
Channel4.satellite = 13
|
|
||||||
Channel5.signal=1C
|
|
||||||
Channel5.satellite = 19
|
|
||||||
Channel6.signal=1C
|
|
||||||
Channel6.satellite = 29
|
|
||||||
|
|
||||||
;# Preparing collection for Galileo satellites
|
|
||||||
Channel7.RF_channel_ID=0
|
|
||||||
Channel8.RF_channel_ID=0
|
|
||||||
Channel9.RF_channel_ID=0
|
|
||||||
Channel10.RF_channel_ID=0
|
|
||||||
Channel11.RF_channel_ID=0
|
|
||||||
Channel12.RF_channel_ID=0
|
|
||||||
Channel13.RF_channel_ID=0
|
|
||||||
Channel7.signal=1B
|
|
||||||
Channel7.satellite = 2
|
|
||||||
Channel8.signal=1B
|
|
||||||
Channel8.satellite = 5
|
|
||||||
Channel9.signal=1B
|
|
||||||
Channel9.satellite = 6
|
|
||||||
Channel10.signal=1B
|
|
||||||
Channel10.satellite = 7
|
|
||||||
Channel11.signal=1B
|
|
||||||
Channel11.satellite = 13
|
|
||||||
Channel12.signal=1B
|
|
||||||
Channel12.satellite = 19
|
|
||||||
Channel13.signal=1B
|
|
||||||
Channel13.satellite = 29
|
|
||||||
|
|
||||||
;# Preparing collection for BDS satellites
|
|
||||||
Channel14.RF_channel_ID=1
|
|
||||||
Channel15.RF_channel_ID=1
|
|
||||||
Channel16.RF_channel_ID=1
|
|
||||||
Channel17.RF_channel_ID=1
|
|
||||||
Channel18.RF_channel_ID=1
|
|
||||||
Channel19.RF_channel_ID=1
|
|
||||||
Channel20.RF_channel_ID=1
|
|
||||||
Channel21.RF_channel_ID=1
|
|
||||||
Channel22.RF_channel_ID=1
|
|
||||||
Channel23.RF_channel_ID=1
|
|
||||||
|
|
||||||
Channel14.signal=B1
|
|
||||||
Channel14.satellite = 6
|
|
||||||
Channel15.signal=B1
|
|
||||||
Channel15.satellite = 8
|
|
||||||
Channel16.signal=B1
|
|
||||||
Channel16.satellite = 9
|
|
||||||
Channel17.signal=B1
|
|
||||||
Channel17.satellite = 13
|
|
||||||
Channel18.signal=B1
|
|
||||||
Channel18.satellite = 17
|
|
||||||
Channel19.signal=B1
|
|
||||||
Channel19.satellite = 1
|
|
||||||
Channel20.signal=B1
|
|
||||||
Channel20.satellite = 2
|
|
||||||
Channel21.signal=B1
|
|
||||||
Channel21.satellite = 3
|
|
||||||
Channel22.signal=B1
|
|
||||||
Channel22.satellite = 4
|
|
||||||
Channel23.signal=B1
|
|
||||||
Channel23.satellite = 5
|
|
||||||
|
|
||||||
;######### ACQUISITION GLOBAL CONFIG ############
|
|
||||||
;# Acquisition config for BDS signals
|
|
||||||
Acquisition_B1.implementation=BEIDOU_B1I_PCPS_Acquisition
|
|
||||||
Acquisition_B1.item_type=gr_complex
|
|
||||||
Acquisition_B1.coherent_integration_time_ms=1
|
|
||||||
Acquisition_B1.threshold=0.0038
|
|
||||||
Acquisition_B1.doppler_max=15000
|
|
||||||
Acquisition_B1.doppler_step=100
|
|
||||||
Acquisition_B1.dump=true
|
|
||||||
Acquisition_B1.dump_filename=/home/dmiralles/Documents/Research/Publications/INSIDE_GNSS/bds_leg_pvt/Data/bds_b1i_acq
|
|
||||||
Acquisition_B1.blocking=false;
|
|
||||||
Acquisition_B1.use_CFAR_algorithm=true;
|
|
||||||
Acquisition_B1.bit_transition_flag = false;
|
|
||||||
|
|
||||||
;# Acquisition config for GPS signals
|
|
||||||
Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition
|
|
||||||
Acquisition_1C.item_type=gr_complex
|
|
||||||
Acquisition_1C.coherent_integration_time_ms=1
|
|
||||||
Acquisition_1C.threshold=0.0038
|
|
||||||
Acquisition_1C.doppler_max=15000
|
|
||||||
Acquisition_1C.doppler_step=100
|
|
||||||
Acquisition_1C.dump=true
|
|
||||||
Acquisition_1C.dump_filename=/home/dmiralles/Documents/Research/Publications/INSIDE_GNSS/bds_leg_pvt/Data/gps_l1ca_acq
|
|
||||||
Acquisition_1C.blocking=false;
|
|
||||||
Acquisition_1C.use_CFAR_algorithm=true;
|
|
||||||
Acquisition_1C.bit_transition_flag = false;
|
|
||||||
|
|
||||||
;# Acquisition config for Galileo signals
|
|
||||||
Acquisition_1B.implementation=Galileo_E1_PCPS_Ambiguous_Acquisition
|
|
||||||
Acquisition_1B.item_type=gr_complex
|
|
||||||
Acquisition_1B.coherent_integration_time_ms=4
|
|
||||||
Acquisition_1B.threshold=0.0038
|
|
||||||
Acquisition_1B.doppler_max=15000
|
|
||||||
Acquisition_1B.doppler_step=100
|
|
||||||
Acquisition_1B.dump=true
|
|
||||||
Acquisition_1B.dump_filename=/home/dmiralles/Documents/Research/Publications/INSIDE_GNSS/bds_leg_pvt/Data/gal_e1b_acq
|
|
||||||
Acquisition_1B.blocking=false;
|
|
||||||
Acquisition_1B.use_CFAR_algorithm=true;
|
|
||||||
Acquisition_1B.bit_transition_flag = false;
|
|
||||||
|
|
||||||
;######### TRACKING GLOBAL CONFIG ############
|
|
||||||
Tracking_B1.implementation=BEIDOU_B1I_DLL_PLL_Tracking
|
|
||||||
Tracking_B1.item_type=gr_complex
|
|
||||||
Tracking_B1.pll_bw_hz=25.0;
|
|
||||||
Tracking_B1.dll_bw_hz=2.50;
|
|
||||||
Tracking_B1.dump=true;
|
|
||||||
Tracking_B1.dump_filename=/home/dmiralles/Documents/Research/Publications/INSIDE_GNSS/bds_leg_pvt/Data/bds_b1i_trk_ch_
|
|
||||||
|
|
||||||
Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking
|
|
||||||
Tracking_1C.item_type=gr_complex
|
|
||||||
Tracking_1C.pll_bw_hz=25.0;
|
|
||||||
Tracking_1C.dll_bw_hz=2.50;
|
|
||||||
Tracking_1C.dump=true;
|
|
||||||
Tracking_1C.dump_filename=/home/dmiralles/Documents/Research/Publications/INSIDE_GNSS/bds_leg_pvt/Data/gps_l1ca_trk_ch_
|
|
||||||
|
|
||||||
Tracking_1B.implementation=Galileo_E1_DLL_PLL_VEML_Tracking
|
|
||||||
Tracking_1B.item_type=gr_complex
|
|
||||||
Tracking_1B.pll_bw_hz=25.0;
|
|
||||||
Tracking_1B.dll_bw_hz=2.50;
|
|
||||||
Tracking_1B.dump=true;
|
|
||||||
Tracking_1B.dump_filename=/home/dmiralles/Documents/Research/Publications/INSIDE_GNSS/bds_leg_pvt/Data/gal_e1b_trk_ch_
|
|
||||||
|
|
||||||
;######### TELEMETRY DECODER GPS CONFIG ############
|
|
||||||
TelemetryDecoder_B1.implementation=BEIDOU_B1I_Telemetry_Decoder
|
|
||||||
TelemetryDecoder_B1.dump=false
|
|
||||||
|
|
||||||
TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder
|
|
||||||
TelemetryDecoder_1C.dump=false
|
|
||||||
|
|
||||||
TelemetryDecoder_1B.implementation=Galileo_E1B_Telemetry_Decoder
|
|
||||||
TelemetryDecoder_1B.dump=false
|
|
||||||
|
|
||||||
;######### OBSERVABLES CONFIG ############
|
|
||||||
Observables.implementation=Hybrid_Observables
|
|
||||||
Observables.dump=true
|
|
||||||
Observables.dump_filename=./observables.dat
|
|
||||||
|
|
||||||
|
|
||||||
;######### PVT CONFIG ############
|
|
||||||
PVT.implementation=RTKLIB_PVT
|
|
||||||
PVT.positioning_mode=Single ; options: Single, Static, Kinematic, PPP_Static, PPP_Kinematic
|
|
||||||
PVT.iono_model=OFF ; options: OFF, Broadcast, SBAS, Iono-Free-LC, Estimate_STEC, IONEX
|
|
||||||
PVT.trop_model=Saastamoinen ; options: OFF, Saastamoinen, SBAS, Estimate_ZTD, Estimate_ZTD_Grad
|
|
||||||
PVT.output_rate_ms=100
|
|
||||||
PVT.display_rate_ms=500
|
|
||||||
PVT.dump=true
|
|
||||||
PVT.dump_filename = /home/dmiralles/Documents/Research/Publications/INSIDE_GNSS/bds_leg_pvt/Data/pvt_l1
|
|
||||||
PVT.kml_output_enabled = false;
|
|
||||||
PVT.xml_output_enabled = false;
|
|
||||||
PVT.gpx_output_enabled = false;
|
|
||||||
PVT.rinex_output_enabled = false;
|
|
||||||
PVT.rtcm_output_enabled = false;
|
|
||||||
PVT.nmea_output_enabled = false;
|
|
||||||
PVT.geojson_output_enabled = false;
|
|
@ -91,25 +91,25 @@ Tracking_B1.implementation=BEIDOU_B1I_DLL_PLL_Tracking
|
|||||||
Tracking_B1.item_type=gr_complex
|
Tracking_B1.item_type=gr_complex
|
||||||
Tracking_B1.pll_bw_hz=25.0;
|
Tracking_B1.pll_bw_hz=25.0;
|
||||||
Tracking_B1.dll_bw_hz=2.50;
|
Tracking_B1.dll_bw_hz=2.50;
|
||||||
Tracking_B1.dump=true;
|
Tracking_B1.dump=false;
|
||||||
Tracking_B1.dump_filename=./epl_tracking_ch_
|
Tracking_B1.dump_filename=./epl_tracking_ch_
|
||||||
|
|
||||||
|
|
||||||
;######### TELEMETRY DECODER GPS CONFIG ############
|
;######### TELEMETRY DECODER GPS CONFIG ############
|
||||||
TelemetryDecoder_B1.implementation=BEIDOU_B1I_Telemetry_Decoder
|
TelemetryDecoder_B1.implementation=BEIDOU_B1I_Telemetry_Decoder
|
||||||
TelemetryDecoder_B1.dump=true
|
TelemetryDecoder_B1.dump=false
|
||||||
|
|
||||||
|
|
||||||
;######### OBSERVABLES CONFIG ############
|
;######### OBSERVABLES CONFIG ############
|
||||||
Observables.implementation=Hybrid_Observables
|
Observables.implementation=Hybrid_Observables
|
||||||
Observables.dump=true
|
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=Single ; options: Single, Static, Kinematic, PPP_Static, PPP_Kinematic
|
PVT.positioning_mode=Single ; options: Single, Static, Kinematic, PPP_Static, PPP_Kinematic
|
||||||
PVT.iono_model=OFF ; 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.output_rate_ms=100
|
PVT.output_rate_ms=100
|
||||||
PVT.display_rate_ms=500
|
PVT.display_rate_ms=500
|
||||||
@ -121,3 +121,6 @@ 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=true
|
PVT.dump=true
|
||||||
|
PVT.rinex_version=3
|
||||||
|
PVT.rinex_output_enabled=true
|
||||||
|
PVT.gpx_output_enabled=true
|
||||||
|
@ -100,14 +100,14 @@ TelemetryDecoder_B3.dump=false
|
|||||||
|
|
||||||
;######### OBSERVABLES CONFIG ############
|
;######### OBSERVABLES CONFIG ############
|
||||||
Observables.implementation=Hybrid_Observables
|
Observables.implementation=Hybrid_Observables
|
||||||
Observables.dump=true
|
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=Single ; options: Single, Static, Kinematic, PPP_Static, PPP_Kinematic
|
PVT.positioning_mode=Single ; options: Single, Static, Kinematic, PPP_Static, PPP_Kinematic
|
||||||
PVT.iono_model=OFF ; 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.output_rate_ms=100
|
PVT.output_rate_ms=100
|
||||||
PVT.display_rate_ms=500
|
PVT.display_rate_ms=500
|
||||||
|
@ -443,8 +443,8 @@ bool Rtklib_Solver::get_PVT(const std::map<int, Gnss_Synchro> &gnss_observables_
|
|||||||
int glo_valid_obs = 0; // GLONASS L1/L2 valid observations counter
|
int glo_valid_obs = 0; // GLONASS L1/L2 valid observations counter
|
||||||
|
|
||||||
std::array<obsd_t, MAXOBS> obs_data{};
|
std::array<obsd_t, MAXOBS> obs_data{};
|
||||||
std::array<eph_t, MAXOBS> eph_data{};
|
std::vector<eph_t> eph_data(MAXOBS);
|
||||||
std::array<geph_t, MAXOBS> geph_data{};
|
std::vector<geph_t> geph_data(MAXOBS);
|
||||||
|
|
||||||
// Workaround for NAV/CNAV clash problem
|
// Workaround for NAV/CNAV clash problem
|
||||||
bool gps_dual_band = false;
|
bool gps_dual_band = false;
|
||||||
@ -783,7 +783,7 @@ bool Rtklib_Solver::get_PVT(const std::map<int, Gnss_Synchro> &gnss_observables_
|
|||||||
obs_data[i + glo_valid_obs] = insert_obs_to_rtklib(obs_data[i + glo_valid_obs],
|
obs_data[i + glo_valid_obs] = insert_obs_to_rtklib(obs_data[i + glo_valid_obs],
|
||||||
gnss_observables_iter->second,
|
gnss_observables_iter->second,
|
||||||
beidou_ephemeris_iter->second.i_BEIDOU_week + BEIDOU_DNAV_BDT2GPST_WEEK_NUM_OFFSET,
|
beidou_ephemeris_iter->second.i_BEIDOU_week + BEIDOU_DNAV_BDT2GPST_WEEK_NUM_OFFSET,
|
||||||
1); // Band 3 (L2/G2/B3)
|
2); // Band 3 (L2/G2/B3)
|
||||||
found_B1I_obs = true;
|
found_B1I_obs = true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -801,7 +801,7 @@ bool Rtklib_Solver::get_PVT(const std::map<int, Gnss_Synchro> &gnss_observables_
|
|||||||
obs_data[valid_obs + glo_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,
|
||||||
beidou_ephemeris_iter->second.i_BEIDOU_week + BEIDOU_DNAV_BDT2GPST_WEEK_NUM_OFFSET,
|
beidou_ephemeris_iter->second.i_BEIDOU_week + BEIDOU_DNAV_BDT2GPST_WEEK_NUM_OFFSET,
|
||||||
1); // Band 2 (L2/G2)
|
2); // Band 2 (L2/G2)
|
||||||
valid_obs++;
|
valid_obs++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -827,7 +827,6 @@ bool Rtklib_Solver::get_PVT(const std::map<int, Gnss_Synchro> &gnss_observables_
|
|||||||
if ((valid_obs + glo_valid_obs) > 3)
|
if ((valid_obs + glo_valid_obs) > 3)
|
||||||
{
|
{
|
||||||
int result = 0;
|
int result = 0;
|
||||||
int sat = 0;
|
|
||||||
nav_t nav_data{};
|
nav_t nav_data{};
|
||||||
nav_data.eph = eph_data.data();
|
nav_data.eph = eph_data.data();
|
||||||
nav_data.geph = geph_data.data();
|
nav_data.geph = geph_data.data();
|
||||||
@ -913,21 +912,8 @@ bool Rtklib_Solver::get_PVT(const std::map<int, Gnss_Synchro> &gnss_observables_
|
|||||||
nav_data.leaps = beidou_dnav_utc_model.d_DeltaT_LS;
|
nav_data.leaps = beidou_dnav_utc_model.d_DeltaT_LS;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (auto &lambda_ : nav_data.lam)
|
/* update carrier wave length using native function call in RTKlib */
|
||||||
{
|
uniqnav(&nav_data);
|
||||||
lambda_[0] = SPEED_OF_LIGHT / FREQ1; // L1/E1
|
|
||||||
lambda_[1] = SPEED_OF_LIGHT / FREQ2; // L2
|
|
||||||
lambda_[2] = SPEED_OF_LIGHT / FREQ5; // L5/E5
|
|
||||||
|
|
||||||
// Keep update on sat number
|
|
||||||
sat++;
|
|
||||||
if (sat > NSYSGPS + NSYSGLO + NSYSGAL + NSYSQZS and sat < NSYSGPS + NSYSGLO + NSYSGAL + NSYSQZS + NSYSBDS)
|
|
||||||
{
|
|
||||||
lambda_[0] = SPEED_OF_LIGHT / FREQ1_BDS; // B1I
|
|
||||||
lambda_[1] = SPEED_OF_LIGHT / FREQ3_BDS; // B3I
|
|
||||||
lambda_[2] = SPEED_OF_LIGHT / FREQ5; // L5/E5
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
result = rtkpos(&rtk_, obs_data.data(), valid_obs + glo_valid_obs, &nav_data);
|
result = rtkpos(&rtk_, obs_data.data(), valid_obs + glo_valid_obs, &nav_data);
|
||||||
|
|
||||||
|
@ -32,17 +32,20 @@
|
|||||||
|
|
||||||
#include "beidou_b1i_signal_processing.h"
|
#include "beidou_b1i_signal_processing.h"
|
||||||
#include <array>
|
#include <array>
|
||||||
|
#include <bitset>
|
||||||
|
#include <string>
|
||||||
|
|
||||||
auto auxCeil = [](float x) { return static_cast<int32_t>(static_cast<int64_t>((x) + 1)); };
|
auto auxCeil = [](float x) { return static_cast<int32_t>(static_cast<int64_t>((x) + 1)); };
|
||||||
|
|
||||||
void beidou_b1i_code_gen_int(gsl::span<int32_t> _dest, int32_t _prn, uint32_t _chip_shift)
|
void beidou_b1i_code_gen_int(gsl::span<int32_t> _dest, int32_t _prn, uint32_t _chip_shift)
|
||||||
{
|
{
|
||||||
const uint32_t _code_length = 2046;
|
const uint32_t _code_length = 2046;
|
||||||
std::array<bool, _code_length> G1{};
|
std::bitset<_code_length> G1{};
|
||||||
std::array<bool, _code_length> G2{};
|
std::bitset<_code_length> G2{};
|
||||||
|
|
||||||
|
std::bitset<11> G1_register(std::string("01010101010"));
|
||||||
|
std::bitset<11> G2_register(std::string("01010101010"));
|
||||||
|
|
||||||
std::array<bool, 11> G1_register{false, true, false, true, false, true, false, true, false, true, false};
|
|
||||||
std::array<bool, 11> G2_register{false, true, false, true, false, true, false, true, false, true, false};
|
|
||||||
bool feedback1, feedback2;
|
bool feedback1, feedback2;
|
||||||
bool aux;
|
bool aux;
|
||||||
uint32_t lcv, lcv2;
|
uint32_t lcv, lcv2;
|
||||||
|
@ -32,85 +32,90 @@
|
|||||||
|
|
||||||
#include "beidou_b3i_signal_processing.h"
|
#include "beidou_b3i_signal_processing.h"
|
||||||
#include <array>
|
#include <array>
|
||||||
|
#include <bitset>
|
||||||
|
#include <string>
|
||||||
|
|
||||||
auto auxCeil = [](float x) { return static_cast<int>(static_cast<long>((x) + 1)); };
|
auto auxCeil = [](float x) { return static_cast<int>(static_cast<long>((x) + 1)); };
|
||||||
|
|
||||||
void beidou_b3i_code_gen_int(gsl::span<int> _dest, signed int _prn, unsigned int _chip_shift)
|
void beidou_b3i_code_gen_int(gsl::span<int> _dest, signed int _prn, unsigned int _chip_shift)
|
||||||
{
|
{
|
||||||
const unsigned int _code_length = 10230;
|
const unsigned int _code_length = 10230;
|
||||||
std::array<bool, _code_length> G1{};
|
std::bitset<_code_length> G1{};
|
||||||
std::array<bool, _code_length> G2{};
|
std::bitset<_code_length> G2{};
|
||||||
std::array<bool, 13> G1_register = {{true, true, true, true, true, true, true, true, true, true, true, true, true}};
|
auto G1_register = std::move(std::bitset<13>{}.set()); // All true
|
||||||
std::array<bool, 13> G2_register = {{true, true, true, true, true, true, true, true, true, true, true, true, true}};
|
auto G2_register = std::move(std::bitset<13>{}.set()); // All true
|
||||||
std::array<bool, 13> G1_register_reset = {{false, false, true, true, true, true, true, true, true, true, true, true, true}};
|
auto G1_register_reset = std::move(std::bitset<13>{}.set());
|
||||||
|
G1_register_reset.reset(0);
|
||||||
|
G1_register_reset.reset(1); // {false, false, true, true, true, true, true, true, true, true, true, true, true};
|
||||||
|
|
||||||
bool feedback1, feedback2, aux;
|
bool feedback1, feedback2, aux;
|
||||||
uint32_t lcv, lcv2, delay;
|
uint32_t lcv, lcv2, delay;
|
||||||
int32_t prn_idx = _prn - 1;
|
int32_t prn_idx = _prn - 1;
|
||||||
|
|
||||||
std::array<std::array<bool, 13>, 63> G2_register_shifted =
|
const std::array<std::bitset<13>, 63> G2_register_shifted =
|
||||||
{{{{true, false, true, false, true, true, true, true, true, true, true, true, true}},
|
{std::bitset<13>(std::string("1010111111111")),
|
||||||
{{true, true, true, true, false, false, false, true, false, true, false, true, true}},
|
std::bitset<13>(std::string("1111000101011")),
|
||||||
{{true, false, true, true, true, true, false, false, false, true, false, true, false}},
|
std::bitset<13>(std::string("1011110001010")),
|
||||||
{{true, true, true, true, true, true, true, true, true, true, false, true, true}},
|
std::bitset<13>(std::string("1111111111011")),
|
||||||
{{true, true, false, false, true, false, false, false, true, true, true, true, true}},
|
std::bitset<13>(std::string("1100100011111")),
|
||||||
{{true, false, false, true, false, false, true, true, false, false, true, false, false}},
|
std::bitset<13>(std::string("1001001100100")),
|
||||||
{{true, true, true, true, true, true, true, false, true, false, false, true, false}},
|
std::bitset<13>(std::string("1111111010010")),
|
||||||
{{true, true, true, false, true, true, true, true, true, true, true, false, true}},
|
std::bitset<13>(std::string("1110111111101")),
|
||||||
{{true, false, true, false, false, false, false, false, false, false, false, true, false}},
|
std::bitset<13>(std::string("1010000000010")),
|
||||||
{{false, false, true, false, false, false, false, false, true, true, false, true, true}},
|
std::bitset<13>(std::string("0010000011011")),
|
||||||
{{true, true, true, false, true, false, true, true, true, false, false, false, false}},
|
std::bitset<13>(std::string("1110101110000")),
|
||||||
{{false, false, true, false, true, true, false, false, true, true, true, true, false}},
|
std::bitset<13>(std::string("0010110011110")),
|
||||||
{{false, true, true, false, false, true, false, false, true, false, true, false, true}},
|
std::bitset<13>(std::string("0110010010101")),
|
||||||
{{false, true, true, true, false, false, false, true, false, false, true, true, false}},
|
std::bitset<13>(std::string("0111000100110")),
|
||||||
{{true, false, false, false, true, true, false, false, false, true, false, false, true}},
|
std::bitset<13>(std::string("1000110001001")),
|
||||||
{{true, true, true, false, false, false, true, true, true, true, true, false, false}},
|
std::bitset<13>(std::string("1110001111100")),
|
||||||
{{false, false, true, false, false, true, true, false, false, false, true, false, true}},
|
std::bitset<13>(std::string("0010011000101")),
|
||||||
{{false, false, false, false, false, true, true, true, false, true, true, false, false}},
|
std::bitset<13>(std::string("0000011101100")),
|
||||||
{{true, false, false, false, true, false, true, false, true, false, true, true, true}},
|
std::bitset<13>(std::string("1000101010111")),
|
||||||
{{false, false, false, true, false, true, true, false, true, true, true, true, false}},
|
std::bitset<13>(std::string("0001011011110")),
|
||||||
{{false, false, true, false, false, false, false, true, false, true, true, false, true}},
|
std::bitset<13>(std::string("0010000101101")),
|
||||||
{{false, false, true, false, true, true, false, false, false, true, false, true, false}},
|
std::bitset<13>(std::string("0010110001010")),
|
||||||
{{false, false, false, true, false, true, true, false, false, true, true, true, true}},
|
std::bitset<13>(std::string("0001011001111")),
|
||||||
{{false, false, true, true, false, false, true, true, false, false, false, true, false}},
|
std::bitset<13>(std::string("0011001100010")),
|
||||||
{{false, false, true, true, true, false, true, false, false, true, false, false, false}},
|
std::bitset<13>(std::string("0011101001000")),
|
||||||
{{false, true, false, false, true, false, false, true, false, true, false, false, true}},
|
std::bitset<13>(std::string("0100100101001")),
|
||||||
{{true, false, true, true, false, true, true, false, true, false, false, true, true}},
|
std::bitset<13>(std::string("1011011010011")),
|
||||||
{{true, false, true, false, true, true, true, true, false, false, false, true, false}},
|
std::bitset<13>(std::string("1010111100010")),
|
||||||
{{false, false, false, true, false, true, true, true, true, false, true, false, true}},
|
std::bitset<13>(std::string("0001011110101")),
|
||||||
{{false, true, true, true, true, true, true, true, true, true, true, true, true}},
|
std::bitset<13>(std::string("0111111111111")),
|
||||||
{{false, true, true, false, true, true, false, false, false, true, true, true, true}},
|
std::bitset<13>(std::string("0110110001111")),
|
||||||
{{true, false, true, false, true, true, false, false, false, true, false, false, true}},
|
std::bitset<13>(std::string("1010110001001")),
|
||||||
{{true, false, false, true, false, true, false, true, false, true, false, true, true}},
|
std::bitset<13>(std::string("1001010101011")),
|
||||||
{{true, true, false, false, true, true, false, true, false, false, true, false, true}},
|
std::bitset<13>(std::string("1100110100101")),
|
||||||
{{true, true, false, true, false, false, true, false, true, true, true, false, true}},
|
std::bitset<13>(std::string("1101001011101")),
|
||||||
{{true, true, true, true, true, false, true, true, true, false, true, false, false}},
|
std::bitset<13>(std::string("1111101110100")),
|
||||||
{{false, false, true, false, true, false, true, true, false, false, true, true, true}},
|
std::bitset<13>(std::string("0010101100111")),
|
||||||
{{true, true, true, false, true, false, false, false, true, false, false, false, false}},
|
std::bitset<13>(std::string("1110100010000")),
|
||||||
{{true, true, false, true, true, true, false, false, true, false, false, false, false}},
|
std::bitset<13>(std::string("1101110010000")),
|
||||||
{{true, true, false, true, false, true, true, false, false, true, true, true, false}},
|
std::bitset<13>(std::string("1101011001110")),
|
||||||
{{true, false, false, false, false, false, false, true, true, false, true, false, false}},
|
std::bitset<13>(std::string("1000000110100")),
|
||||||
{{false, true, false, true, true, true, true, false, true, true, false, false, true}},
|
std::bitset<13>(std::string("0101111011001")),
|
||||||
{{false, true, true, false, true, true, false, true, true, true, true, false, false}},
|
std::bitset<13>(std::string("0110110111100")),
|
||||||
{{true, true, false, true, false, false, true, true, true, false, false, false, true}},
|
std::bitset<13>(std::string("1101001110001")),
|
||||||
{{false, false, true, true, true, false, false, true, false, false, false, true, false}},
|
std::bitset<13>(std::string("0011100100010")),
|
||||||
{{false, true, false, true, false, true, true, false, false, false, true, false, true}},
|
std::bitset<13>(std::string("0101011000101")),
|
||||||
{{true, false, false, true, true, true, true, true, false, false, true, true, false}},
|
std::bitset<13>(std::string("1001111100110")),
|
||||||
{{true, true, true, true, true, false, true, false, false, true, false, false, false}},
|
std::bitset<13>(std::string("1111101001000")),
|
||||||
{{false, false, false, false, true, false, true, false, false, true, false, false, true}},
|
std::bitset<13>(std::string("0000101001001")),
|
||||||
{{true, false, false, false, false, true, false, true, false, true, true, false, false}},
|
std::bitset<13>(std::string("1000010101100")),
|
||||||
{{true, true, true, true, false, false, true, false, false, true, true, false, false}},
|
std::bitset<13>(std::string("1111001001100")),
|
||||||
{{false, true, false, false, true, true, false, false, false, true, true, true, true}},
|
std::bitset<13>(std::string("0100110001111")),
|
||||||
{{false, false, false, false, false, false, false, false, true, true, false, false, false}},
|
std::bitset<13>(std::string("0000000011000")),
|
||||||
{{true, false, false, false, false, false, false, false, false, false, true, false, false}},
|
std::bitset<13>(std::string("1000000000100")),
|
||||||
{{false, false, true, true, false, true, false, true, false, false, true, true, false}},
|
std::bitset<13>(std::string("0011010100110")),
|
||||||
{{true, false, true, true, false, false, true, false, false, false, true, true, false}},
|
std::bitset<13>(std::string("1011001000110")),
|
||||||
{{false, true, true, true, false, false, true, true, true, true, false, false, false}},
|
std::bitset<13>(std::string("0111001111000")),
|
||||||
{{false, false, true, false, true, true, true, false, false, true, false, true, false}},
|
std::bitset<13>(std::string("0010111001010")),
|
||||||
{{true, true, false, false, true, true, true, true, true, false, true, true, false}},
|
std::bitset<13>(std::string("1100111110110")),
|
||||||
{{true, false, false, true, false, false, true, false, false, false, true, false, true}},
|
std::bitset<13>(std::string("1001001000101")),
|
||||||
{{false, true, true, true, false, false, false, true, false, false, false, false, false}},
|
std::bitset<13>(std::string("0111000100000")),
|
||||||
{{false, false, true, true, false, false, true, false, false, false, false, true, false}},
|
std::bitset<13>(std::string("0011001000010")),
|
||||||
{{false, false, true, false, false, false, true, false, false, true, true, true, false}}}};
|
std::bitset<13>(std::string("0010001001110"))};
|
||||||
|
|
||||||
// A simple error check
|
// A simple error check
|
||||||
if ((prn_idx < 0) || (prn_idx > 63))
|
if ((prn_idx < 0) || (prn_idx > 63))
|
||||||
@ -120,7 +125,6 @@ void beidou_b3i_code_gen_int(gsl::span<int> _dest, signed int _prn, unsigned int
|
|||||||
|
|
||||||
// Assign shifted G2 register based on prn number
|
// Assign shifted G2 register based on prn number
|
||||||
G2_register = G2_register_shifted[prn_idx];
|
G2_register = G2_register_shifted[prn_idx];
|
||||||
std::reverse(G2_register.begin(), G2_register.end());
|
|
||||||
|
|
||||||
// Generate G1 and G2 Register
|
// Generate G1 and G2 Register
|
||||||
for (lcv = 0; lcv < _code_length; lcv++)
|
for (lcv = 0; lcv < _code_length; lcv++)
|
||||||
@ -128,7 +132,6 @@ void beidou_b3i_code_gen_int(gsl::span<int> _dest, signed int _prn, unsigned int
|
|||||||
G1[lcv] = G1_register[0];
|
G1[lcv] = G1_register[0];
|
||||||
G2[lcv] = G2_register[0];
|
G2[lcv] = G2_register[0];
|
||||||
|
|
||||||
//feedback1 = (test_G1_register[0]+test_G1_register[2]+test_G1_register[3]+test_G1_register[12]) & 0x1;
|
|
||||||
feedback1 = G1_register[0] xor G1_register[9] xor G1_register[10] xor G1_register[12];
|
feedback1 = G1_register[0] xor G1_register[9] xor G1_register[10] xor G1_register[12];
|
||||||
feedback2 = G2_register[0] xor G2_register[1] xor G2_register[3] xor G2_register[4] xor
|
feedback2 = G2_register[0] xor G2_register[1] xor G2_register[3] xor G2_register[4] xor
|
||||||
G2_register[6] xor G2_register[7] xor G2_register[8] xor G2_register[12];
|
G2_register[6] xor G2_register[7] xor G2_register[8] xor G2_register[12];
|
||||||
@ -145,7 +148,7 @@ void beidou_b3i_code_gen_int(gsl::span<int> _dest, signed int _prn, unsigned int
|
|||||||
// Reset G1 register if sequence found
|
// Reset G1 register if sequence found
|
||||||
if (G1_register == G1_register_reset)
|
if (G1_register == G1_register_reset)
|
||||||
{
|
{
|
||||||
G1_register = {{true, true, true, true, true, true, true, true, true, true, true, true, true}};
|
G1_register = std::move(std::bitset<13>{}.set()); // All true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -32,16 +32,17 @@
|
|||||||
|
|
||||||
#include "gps_sdr_signal_processing.h"
|
#include "gps_sdr_signal_processing.h"
|
||||||
#include <array>
|
#include <array>
|
||||||
|
#include <bitset>
|
||||||
|
|
||||||
auto auxCeil = [](float x) { return static_cast<int32_t>(static_cast<int64_t>((x) + 1)); };
|
auto auxCeil = [](float x) { return static_cast<int32_t>(static_cast<int64_t>((x) + 1)); };
|
||||||
|
|
||||||
void gps_l1_ca_code_gen_int(gsl::span<int32_t> _dest, int32_t _prn, uint32_t _chip_shift)
|
void gps_l1_ca_code_gen_int(gsl::span<int32_t> _dest, int32_t _prn, uint32_t _chip_shift)
|
||||||
{
|
{
|
||||||
const uint32_t _code_length = 1023;
|
const uint32_t _code_length = 1023;
|
||||||
std::array<bool, _code_length> G1{};
|
std::bitset<_code_length> G1{};
|
||||||
std::array<bool, _code_length> G2{};
|
std::bitset<_code_length> G2{};
|
||||||
std::array<bool, 10> G1_register{};
|
std::bitset<10> G1_register{};
|
||||||
std::array<bool, 10> G2_register{};
|
std::bitset<10> G2_register{};
|
||||||
bool feedback1, feedback2;
|
bool feedback1, feedback2;
|
||||||
bool aux;
|
bool aux;
|
||||||
uint32_t lcv, lcv2;
|
uint32_t lcv, lcv2;
|
||||||
|
@ -166,9 +166,8 @@ double prange(const obsd_t *obs, const nav_t *nav, const double *azel,
|
|||||||
return 0.0;
|
return 0.0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* L1-L2 for GPS/GLO/QZS, L1-L5 for GAL/SBS/BDS */
|
||||||
/* L1-L2 for GPS/GLO/QZS, L1-L5 for GAL/SBS */
|
if (sys == SYS_GAL or sys == SYS_SBS or sys == SYS_BDS)
|
||||||
if (sys == SYS_GAL or sys == SYS_SBS)
|
|
||||||
{
|
{
|
||||||
j = 2;
|
j = 2;
|
||||||
}
|
}
|
||||||
@ -285,7 +284,7 @@ double prange(const obsd_t *obs, const nav_t *nav, const double *azel,
|
|||||||
if (sys == SYS_BDS)
|
if (sys == SYS_BDS)
|
||||||
{
|
{
|
||||||
P2 += P2_C2; /* C2->P2 */
|
P2 += P2_C2; /* C2->P2 */
|
||||||
PC = P2; // no tgd corrections for B3I
|
PC = P2; // no tgd corrections for B3I
|
||||||
}
|
}
|
||||||
else if (sys == SYS_GAL or sys == SYS_GLO or sys == SYS_BDS) // Gal. E5a single freq.
|
else if (sys == SYS_GAL or sys == SYS_GLO or sys == SYS_BDS) // Gal. E5a single freq.
|
||||||
{
|
{
|
||||||
|
@ -271,7 +271,7 @@ void beidou_b1i_telemetry_decoder_gs::decode_subframe(float *frame_symbols)
|
|||||||
std::shared_ptr<Beidou_Dnav_Iono> tmp_obj = std::make_shared<Beidou_Dnav_Iono>(d_nav.get_iono());
|
std::shared_ptr<Beidou_Dnav_Iono> tmp_obj = std::make_shared<Beidou_Dnav_Iono>(d_nav.get_iono());
|
||||||
this->message_port_pub(pmt::mp("telemetry"), pmt::make_any(tmp_obj));
|
this->message_port_pub(pmt::mp("telemetry"), pmt::make_any(tmp_obj));
|
||||||
LOG(INFO) << "BEIDOU DNAV Iono have been received in channel" << d_channel << " from satellite " << d_satellite;
|
LOG(INFO) << "BEIDOU DNAV Iono have been received in channel" << d_channel << " from satellite " << d_satellite;
|
||||||
std::cout << "New BEIDOU B1I DNAV Iono message received in channel " << d_channel << ": Iono model parameters from satellite " << d_satellite << TEXT_RESET << std::endl;
|
std::cout << TEXT_YELLOW << "New BEIDOU B1I DNAV Iono message received in channel " << d_channel << ": Iono model parameters from satellite " << d_satellite << TEXT_RESET << std::endl;
|
||||||
}
|
}
|
||||||
if (d_nav.have_new_almanac() == true)
|
if (d_nav.have_new_almanac() == true)
|
||||||
{
|
{
|
||||||
|
@ -181,9 +181,9 @@ galileo_telemetry_decoder_gs::galileo_telemetry_decoder_gs(
|
|||||||
d_symbol_history.set_capacity(d_required_symbols + 1);
|
d_symbol_history.set_capacity(d_required_symbols + 1);
|
||||||
|
|
||||||
// vars for Viterbi decoder
|
// vars for Viterbi decoder
|
||||||
int32_t max_states = 1 << mm; // 2^mm
|
int32_t max_states = 1U << static_cast<uint32_t>(mm); // 2^mm
|
||||||
g_encoder[0] = 121; // Polynomial G1
|
g_encoder[0] = 121; // Polynomial G1
|
||||||
g_encoder[1] = 91; // Polynomial G2
|
g_encoder[1] = 91; // Polynomial G2
|
||||||
out0 = static_cast<int32_t *>(volk_gnsssdr_malloc(max_states * sizeof(int32_t), volk_gnsssdr_get_alignment()));
|
out0 = static_cast<int32_t *>(volk_gnsssdr_malloc(max_states * sizeof(int32_t), volk_gnsssdr_get_alignment()));
|
||||||
out1 = static_cast<int32_t *>(volk_gnsssdr_malloc(max_states * sizeof(int32_t), volk_gnsssdr_get_alignment()));
|
out1 = static_cast<int32_t *>(volk_gnsssdr_malloc(max_states * sizeof(int32_t), volk_gnsssdr_get_alignment()));
|
||||||
state0 = static_cast<int32_t *>(volk_gnsssdr_malloc(max_states * sizeof(int32_t), volk_gnsssdr_get_alignment()));
|
state0 = static_cast<int32_t *>(volk_gnsssdr_malloc(max_states * sizeof(int32_t), volk_gnsssdr_get_alignment()));
|
||||||
|
@ -145,18 +145,18 @@ bool gps_l1_ca_telemetry_decoder_gs::gps_word_parityCheck(uint32_t gpsword)
|
|||||||
// up bits which are to be XOR'ed together to implement the GPS parity
|
// up bits which are to be XOR'ed together to implement the GPS parity
|
||||||
// check algorithm described in IS-GPS-200E. This avoids lengthy shift-
|
// check algorithm described in IS-GPS-200E. This avoids lengthy shift-
|
||||||
// and-xor loops.
|
// and-xor loops.
|
||||||
d1 = gpsword & 0xFBFFBF00;
|
d1 = gpsword & 0xFBFFBF00U;
|
||||||
d2 = _rotl(gpsword, 1) & 0x07FFBF01;
|
d2 = _rotl(gpsword, 1U) & 0x07FFBF01U;
|
||||||
d3 = _rotl(gpsword, 2) & 0xFC0F8100;
|
d3 = _rotl(gpsword, 2U) & 0xFC0F8100U;
|
||||||
d4 = _rotl(gpsword, 3) & 0xF81FFE02;
|
d4 = _rotl(gpsword, 3U) & 0xF81FFE02U;
|
||||||
d5 = _rotl(gpsword, 4) & 0xFC00000E;
|
d5 = _rotl(gpsword, 4U) & 0xFC00000EU;
|
||||||
d6 = _rotl(gpsword, 5) & 0x07F00001;
|
d6 = _rotl(gpsword, 5U) & 0x07F00001U;
|
||||||
d7 = _rotl(gpsword, 6) & 0x00003000;
|
d7 = _rotl(gpsword, 6U) & 0x00003000U;
|
||||||
t = d1 ^ d2 ^ d3 ^ d4 ^ d5 ^ d6 ^ d7;
|
t = d1 ^ d2 ^ d3 ^ d4 ^ d5 ^ d6 ^ d7;
|
||||||
// Now XOR the 5 6-bit fields together to produce the 6-bit final result.
|
// Now XOR the 5 6-bit fields together to produce the 6-bit final result.
|
||||||
parity = t ^ _rotl(t, 6) ^ _rotl(t, 12) ^ _rotl(t, 18) ^ _rotl(t, 24);
|
parity = t ^ _rotl(t, 6U) ^ _rotl(t, 12U) ^ _rotl(t, 18U) ^ _rotl(t, 24U);
|
||||||
parity = parity & 0x3F;
|
parity = parity & 0x3FU;
|
||||||
if (parity == (gpsword & 0x3F))
|
if (parity == (gpsword & 0x3FU))
|
||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -230,19 +230,19 @@ bool gps_l1_ca_telemetry_decoder_gs::decode_subframe()
|
|||||||
// Bits 0 to 29 = the GPS data word
|
// Bits 0 to 29 = the GPS data word
|
||||||
// Bits 30 to 31 = 2 LSBs of the GPS word ahead.
|
// Bits 30 to 31 = 2 LSBs of the GPS word ahead.
|
||||||
// prepare the extended frame [-2 -1 0 ... 30]
|
// prepare the extended frame [-2 -1 0 ... 30]
|
||||||
if (d_prev_GPS_frame_4bytes & 0x00000001)
|
if (d_prev_GPS_frame_4bytes & 0x00000001U)
|
||||||
{
|
{
|
||||||
GPS_frame_4bytes = GPS_frame_4bytes | 0x40000000;
|
GPS_frame_4bytes = GPS_frame_4bytes | 0x40000000U;
|
||||||
}
|
}
|
||||||
if (d_prev_GPS_frame_4bytes & 0x00000002)
|
if (d_prev_GPS_frame_4bytes & 0x00000002U)
|
||||||
{
|
{
|
||||||
GPS_frame_4bytes = GPS_frame_4bytes | 0x80000000;
|
GPS_frame_4bytes = GPS_frame_4bytes | 0x80000000U;
|
||||||
}
|
}
|
||||||
// Check that the 2 most recently logged words pass parity. Have to first
|
// Check that the 2 most recently logged words pass parity. Have to first
|
||||||
// invert the data bits according to bit 30 of the previous word.
|
// invert the data bits according to bit 30 of the previous word.
|
||||||
if (GPS_frame_4bytes & 0x40000000)
|
if (GPS_frame_4bytes & 0x40000000U)
|
||||||
{
|
{
|
||||||
GPS_frame_4bytes ^= 0x3FFFFFC0; // invert the data bits (using XOR)
|
GPS_frame_4bytes ^= 0x3FFFFFC0U; // invert the data bits (using XOR)
|
||||||
}
|
}
|
||||||
// check parity. If ANY word inside the subframe fails the parity, set subframe_synchro_confirmation = false
|
// check parity. If ANY word inside the subframe fails the parity, set subframe_synchro_confirmation = false
|
||||||
if (not gps_l1_ca_telemetry_decoder_gs::gps_word_parityCheck(GPS_frame_4bytes))
|
if (not gps_l1_ca_telemetry_decoder_gs::gps_word_parityCheck(GPS_frame_4bytes))
|
||||||
@ -258,7 +258,7 @@ bool gps_l1_ca_telemetry_decoder_gs::decode_subframe()
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
GPS_frame_4bytes <<= 1; // shift 1 bit left the telemetry word
|
GPS_frame_4bytes <<= 1U; // shift 1 bit left the telemetry word
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -667,7 +667,7 @@ void dll_pll_veml_tracking::start_tracking()
|
|||||||
d_symbols_per_bit = BEIDOU_B1I_TELEMETRY_SYMBOLS_PER_BIT; //todo: enable after fixing beidou symbol synchronization
|
d_symbols_per_bit = BEIDOU_B1I_TELEMETRY_SYMBOLS_PER_BIT; //todo: enable after fixing beidou symbol synchronization
|
||||||
d_correlation_length_ms = 1;
|
d_correlation_length_ms = 1;
|
||||||
d_code_samples_per_chip = 1;
|
d_code_samples_per_chip = 1;
|
||||||
d_secondary = false;
|
d_secondary = true;
|
||||||
trk_parameters.track_pilot = false;
|
trk_parameters.track_pilot = false;
|
||||||
// synchronize and remove data secondary code
|
// synchronize and remove data secondary code
|
||||||
d_secondary_code_length = static_cast<uint32_t>(BEIDOU_B1I_SECONDARY_CODE_LENGTH);
|
d_secondary_code_length = static_cast<uint32_t>(BEIDOU_B1I_SECONDARY_CODE_LENGTH);
|
||||||
@ -687,7 +687,7 @@ void dll_pll_veml_tracking::start_tracking()
|
|||||||
d_symbols_per_bit = BEIDOU_B3I_GEO_TELEMETRY_SYMBOLS_PER_BIT; //todo: enable after fixing beidou symbol synchronization
|
d_symbols_per_bit = BEIDOU_B3I_GEO_TELEMETRY_SYMBOLS_PER_BIT; //todo: enable after fixing beidou symbol synchronization
|
||||||
d_correlation_length_ms = 1;
|
d_correlation_length_ms = 1;
|
||||||
d_code_samples_per_chip = 1;
|
d_code_samples_per_chip = 1;
|
||||||
d_secondary = true;
|
d_secondary = false;
|
||||||
trk_parameters.track_pilot = false;
|
trk_parameters.track_pilot = false;
|
||||||
// set the preamble in the secondary code acquisition
|
// set the preamble in the secondary code acquisition
|
||||||
d_secondary_code_length = static_cast<uint32_t>(BEIDOU_B3I_GEO_PREAMBLE_LENGTH_SYMBOLS);
|
d_secondary_code_length = static_cast<uint32_t>(BEIDOU_B3I_GEO_PREAMBLE_LENGTH_SYMBOLS);
|
||||||
|
Loading…
Reference in New Issue
Block a user