From c20cd3303897cf16654815c96c9527b2517cbb6d Mon Sep 17 00:00:00 2001 From: Damian Miralles Date: Sun, 4 Nov 2018 17:31:58 -0600 Subject: [PATCH] beidou b1i: checking performance with new data set --- conf/gnss-sdr_BDS_B1I_byte.conf | 111 ++++++++++++++++++++ conf/gnss-sdr_GPS_L1_CA_byte.conf | 110 +++++++++++++++++++ src/utils/matlab/dll_pll_veml_plot_sample.m | 4 +- src/utils/matlab/plot_acq_grid.m | 31 +++--- 4 files changed, 241 insertions(+), 15 deletions(-) create mode 100644 conf/gnss-sdr_BDS_B1I_byte.conf create mode 100644 conf/gnss-sdr_GPS_L1_CA_byte.conf diff --git a/conf/gnss-sdr_BDS_B1I_byte.conf b/conf/gnss-sdr_BDS_B1I_byte.conf new file mode 100644 index 000000000..ef3d29f79 --- /dev/null +++ b/conf/gnss-sdr_BDS_B1I_byte.conf @@ -0,0 +1,111 @@ +; 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=99375000 + +;######### CONTROL_THREAD CONFIG ############ +ControlThread.wait_for_flowgraph=false + +;######### SIGNAL_SOURCE CONFIG ############ +SignalSource.implementation=File_Signal_Source +SignalSource.filename=/media/dmiralles/Seagate Backup Plus Drive/GNSS Data/Beidou_B1_IF_signal.bin +SignalSource.item_type=byte +SignalSource.sampling_frequency=99375000 +SignalSource.samples=0 +SignalSource.repeat=false +SignalSource.dump=false +SignalSource.enable_throttle_control=false + +;######### SIGNAL_CONDITIONER CONFIG ############ +SignalConditioner.implementation=Signal_Conditioner +DataTypeAdapter.implementation=Byte_To_Short +InputFilter.implementation=Freq_Xlating_Fir_Filter +InputFilter.input_item_type=short +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=99375000 +InputFilter.IF=28902000 +Resampler.implementation=Pass_Through +Resampler.sample_freq_in=99375000 +Resampler.sample_freq_out=99375000 +Resampler.item_type=gr_complex + + +;######### CHANNELS GLOBAL CONFIG ############ +Channels_B1.count=8 +Channels.in_acquisition=1 +Channel.signal=B1 + + +;######### ACQUISITION GLOBAL CONFIG ############ +Acquisition_B1.implementation=BEIDOU_B1I_PCPS_Acquisition +Acquisition_B1.item_type=gr_complex +Acquisition_B1.coherent_integration_time_ms=1 +Acquisition_B1.threshold=0.00005 +;Acquisition_B1.pfa=0.0000001; +Acquisition_B1.doppler_max=10000 +Acquisition_B1.doppler_step=100 +Acquisition_B1.dump=true +Acquisition_B1.dump_filename=./bds_acq +Acquisition_B1.blocking=false; +Acquisition_B1.use_CFAR_algorithm=true; +Acquisition_B1.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=30.0; +Tracking_B1.dll_bw_hz=3.0; +Tracking_B1.dump=true; +Tracking_B1.dump_filename=./epl_tracking_ch_ + + +;######### TELEMETRY DECODER GPS CONFIG ############ +TelemetryDecoder_B1.implementation=BEIDOU_B1I_Telemetry_Decoder +TelemetryDecoder_B1.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=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.output_rate_ms=100 +PVT.display_rate_ms=500 +PVT.dump_filename=./PVT +PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea; +PVT.flag_nmea_tty_port=false; +PVT.nmea_dump_devname=/dev/pts/4 +PVT.flag_rtcm_server=false +PVT.flag_rtcm_tty_port=false +PVT.rtcm_dump_devname=/dev/pts/1 +PVT.dump=false diff --git a/conf/gnss-sdr_GPS_L1_CA_byte.conf b/conf/gnss-sdr_GPS_L1_CA_byte.conf new file mode 100644 index 000000000..258130315 --- /dev/null +++ b/conf/gnss-sdr_GPS_L1_CA_byte.conf @@ -0,0 +1,110 @@ +; 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=99375000 + +;######### CONTROL_THREAD CONFIG ############ +ControlThread.wait_for_flowgraph=false + +;######### SIGNAL_SOURCE CONFIG ############ +SignalSource.implementation=File_Signal_Source +SignalSource.filename=/media/dmiralles/Seagate Backup Plus Drive/GNSS Data/Beidou_B1_IF_signal.bin +SignalSource.item_type=byte +SignalSource.sampling_frequency=99375000 +SignalSource.samples=0 +SignalSource.repeat=false +SignalSource.dump=false +SignalSource.enable_throttle_control=false + +;######### SIGNAL_CONDITIONER CONFIG ############ +SignalConditioner.implementation=Signal_Conditioner +DataTypeAdapter.implementation=Byte_To_Short +InputFilter.implementation=Freq_Xlating_Fir_Filter +InputFilter.input_item_type=short +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=99375000 +InputFilter.IF=14580000 +Resampler.implementation=Direct_Resampler +Resampler.sample_freq_in=99375000 +Resampler.sample_freq_out=99375000 +Resampler.item_type=gr_complex + + +;######### CHANNELS GLOBAL CONFIG ############ +Channels_1C.count=8 +Channels.in_acquisition=1 +Channel.signal=1C + + +;######### ACQUISITION GLOBAL CONFIG ############ +Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition +Acquisition_1C.item_type=gr_complex +Acquisition_1C.coherent_integration_time_ms=1 +Acquisition_1C.threshold=3.5 +;Acquisition_1C.pfa=0.000001; +Acquisition_1C.doppler_max=14000 +Acquisition_1C.doppler_step=100 +Acquisition_1C.dump=true +Acquisition_1C.dump_filename=./gps_acq +Acquisition_1C.blocking=false; +Acquisition_1C.use_CFAR_algorithm=false + + +;######### TRACKING GLOBAL CONFIG ############ +Tracking_1C.implementation=GPS_L1_CA_DLL_PLL_Tracking +Tracking_1C.item_type=gr_complex +Tracking_1C.pll_bw_hz=30.0; +Tracking_1C.dll_bw_hz=3.0; +Tracking_1C.dump=true; +Tracking_1C.dump_filename=./epl_tracking_ch_ + + +;######### TELEMETRY DECODER GPS CONFIG ############ +TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder +TelemetryDecoder_1C.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=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.output_rate_ms=100 +PVT.display_rate_ms=500 +PVT.dump_filename=./PVT +PVT.nmea_dump_filename=./gnss_sdr_pvt.nmea; +PVT.flag_nmea_tty_port=false; +PVT.nmea_dump_devname=/dev/pts/4 +PVT.flag_rtcm_server=false +PVT.flag_rtcm_tty_port=false +PVT.rtcm_dump_devname=/dev/pts/1 +PVT.dump=false diff --git a/src/utils/matlab/dll_pll_veml_plot_sample.m b/src/utils/matlab/dll_pll_veml_plot_sample.m index 8d4cf62d4..a78ff99a7 100644 --- a/src/utils/matlab/dll_pll_veml_plot_sample.m +++ b/src/utils/matlab/dll_pll_veml_plot_sample.m @@ -34,12 +34,12 @@ if ~exist('dll_pll_veml_read_tracking_dump.m', 'file') addpath('./libs') end -samplingFreq = 25000000; %[Hz] +samplingFreq = 99375000; %[Hz] coherent_integration_time_ms = 1; %[ms] channels = 8; % Number of channels first_channel = 0; % Number of the first channel -path = '/home/sergi/gnss/gnss-sdr/install/'; %% CHANGE THIS PATH +path = '/home/dmiralles/Documents/gnss-sdr/';%#'; %% CHANGE THIS PATH for N=1:1:channels tracking_log_path = [path 'epl_tracking_ch_' num2str(N+first_channel-1) '.dat']; %% CHANGE track_ch_ BY YOUR dump_filename diff --git a/src/utils/matlab/plot_acq_grid.m b/src/utils/matlab/plot_acq_grid.m index 86a710e76..b72946a77 100644 --- a/src/utils/matlab/plot_acq_grid.m +++ b/src/utils/matlab/plot_acq_grid.m @@ -28,13 +28,13 @@ %%%%%%%%% ?????? CONFIGURE !!! %%%%%%%%%%%%% -path = '/archive/'; -file = 'acq'; +path = '/home/dmiralles/Documents/gnss-sdr/'; +file = 'bds_acq'; -sat = 7; +sat = 32; channel = 0; -execution = 1; +execution = 3; % Signal: % 1 GPS L1 % 2 GPS L2M @@ -42,10 +42,11 @@ execution = 1; % 4 Gal. E1B % 5 Gal. E5 % 6 Glo. 1G +% 7 BDS B1 -signal_type = 1; +signal_type = 7; -%%% True for light grid representation +%%% True for light acq_grid representation lite_view = true; %%% If lite_view, it sets the number of samples per chip in the graphical representation @@ -78,21 +79,25 @@ switch(signal_type) n_chips = 511; system = 'R'; signal = '1G'; + case 7 + n_chips = 2046; + system = 'C'; + signal = 'B1'; end filename = [path file '_' system '_' signal '_ch_' num2str(channel) '_' num2str(execution) '_sat_' num2str(sat) '.mat']; load(filename); -[n_fft n_dop_bins] = size(grid); -[d_max f_max] = find(grid == max(max(grid))); +[n_fft n_dop_bins] = size(acq_grid); +[d_max f_max] = find(acq_grid == max(max(acq_grid))); freq = (0 : n_dop_bins - 1) * doppler_step - doppler_max; delay = (0 : n_fft - 1) / n_fft * n_chips; figure(1) if(lite_view == false) - surf(freq, delay, grid, 'FaceColor', 'interp', 'LineStyle', 'none') + surf(freq, delay, acq_grid, 'FaceColor', 'interp', 'LineStyle', 'none') ylim([min(delay) max(delay)]) else delay_interp = (0 : n_samples_per_chip * n_chips - 1) / n_samples_per_chip; - grid_interp = spline(delay, grid', delay_interp)'; - surf(freq, delay_interp, grid_interp, 'FaceColor', 'interp', 'LineStyle', 'none') + acq_grid_interp = spline(delay, acq_grid', delay_interp)'; + surf(freq, delay_interp, acq_grid_interp, 'FaceColor', 'interp', 'LineStyle', 'none') ylim([min(delay_interp) max(delay_interp)]) end xlabel('Doppler shift / Hz') @@ -101,14 +106,14 @@ ylabel('Code delay / chips') zlabel('Test statistics') figure(2) subplot(2,1,1) -plot(freq, grid(d_max, :)) +plot(freq, acq_grid(d_max, :)) xlim([min(freq) max(freq)]) xlabel('Doppler shift / Hz') ylabel('Test statistics') title(['Fixed code delay to ' num2str((d_max - 1) / n_fft * n_chips) ' chips']) subplot(2,1,2) normalization = (d_samples_per_code^4) * input_power; -plot(delay, acq_grid(:, f_max)./normalization) +plot(delay, acq_acq_grid(:, f_max)./normalization) xlim([min(delay) max(delay)]) xlabel('Code delay / chips') ylabel('Test statistics')