mirror of
https://github.com/gnss-sdr/gnss-sdr
synced 2024-12-12 11:10:33 +00:00
bds_b3i: Fixes bug with D2 data decoding in pvt computation
This commit is contained in:
parent
47d20e4021
commit
3f274e40d1
@ -89,7 +89,7 @@ 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_
|
||||||
|
|
||||||
|
|
||||||
|
@ -16,7 +16,7 @@ ControlThread.wait_for_flowgraph=false
|
|||||||
|
|
||||||
;######### SIGNAL_SOURCE CONFIG ############
|
;######### SIGNAL_SOURCE CONFIG ############
|
||||||
SignalSource.implementation=File_Signal_Source
|
SignalSource.implementation=File_Signal_Source
|
||||||
SignalSource.filename=/home/dmiralles/Documents/GNSS-Metadata-Standard/install/BdsB3IStr01.dat
|
SignalSource.filename=/home/dmiralles/Documents/gnss-metadata-standard/install/BdsB3IStr01.dat
|
||||||
SignalSource.item_type=byte
|
SignalSource.item_type=byte
|
||||||
SignalSource.sampling_frequency=50000000
|
SignalSource.sampling_frequency=50000000
|
||||||
SignalSource.samples=0
|
SignalSource.samples=0
|
||||||
@ -54,52 +54,46 @@ Resampler.item_type=gr_complex
|
|||||||
|
|
||||||
|
|
||||||
;######### CHANNELS GLOBAL CONFIG ############
|
;######### CHANNELS GLOBAL CONFIG ############
|
||||||
Channels_B3.count=13
|
Channels_B3.count=10
|
||||||
Channels.in_acquisition=1
|
Channels.in_acquisition=10
|
||||||
Channel.signal=B3
|
Channel.signal=B3
|
||||||
|
|
||||||
Channel0.satellite = 6;
|
Channel0.satellite = 6;
|
||||||
Channel1.satellite = 7;
|
Channel1.satellite = 23;
|
||||||
Channel2.satellite = 9;
|
Channel2.satellite = 16;
|
||||||
Channel3.satellite = 16;
|
Channel3.satellite = 18;
|
||||||
Channel4.satellite = 18;
|
Channel4.satellite = 7;
|
||||||
Channel5.satellite = 1;
|
Channel5.satellite = 1;
|
||||||
Channel6.satellite = 2;
|
Channel6.satellite = 2;
|
||||||
Channel7.satellite = 3;
|
Channel7.satellite = 3;
|
||||||
Channel8.satellite = 4;
|
Channel8.satellite = 4;
|
||||||
Channel9.satellite = 5;
|
Channel9.satellite = 5;
|
||||||
Channel10.satellite = 23;
|
|
||||||
Channel11.satellite = 25;
|
|
||||||
Channel12.satellite = 32;
|
|
||||||
|
|
||||||
;######### ACQUISITION GLOBAL CONFIG ############
|
;######### ACQUISITION GLOBAL CONFIG ############
|
||||||
Acquisition_B3.implementation=BEIDOU_B3I_PCPS_Acquisition
|
Acquisition_B3.implementation=BEIDOU_B3I_PCPS_Acquisition
|
||||||
Acquisition_B3.item_type=gr_complex
|
Acquisition_B3.item_type=gr_complex
|
||||||
Acquisition_B3.coherent_integration_time_ms=1
|
Acquisition_B3.coherent_integration_time_ms=3
|
||||||
Acquisition_B3.max_dwells = 1
|
Acquisition_B3.max_dwells = 2
|
||||||
Acquisition_B3.threshold=0.00035
|
Acquisition_B3.threshold=0.0004
|
||||||
;Acquisition_B3.pfa=0.0000001;
|
|
||||||
Acquisition_B3.doppler_max=10000
|
Acquisition_B3.doppler_max=10000
|
||||||
Acquisition_B3.doppler_step=50
|
Acquisition_B3.doppler_step=100
|
||||||
Acquisition_B3.dump=true
|
Acquisition_B3.dump=false
|
||||||
Acquisition_B3.dump_filename=./bds_acq
|
Acquisition_B3.dump_filename=./bds_acq
|
||||||
Acquisition_B3.blocking=false;
|
|
||||||
Acquisition_B3.use_CFAR_algorithm=true;
|
|
||||||
Acquisition_B3.bit_transition_flag = false;
|
|
||||||
|
|
||||||
|
|
||||||
;######### TRACKING GLOBAL CONFIG ############
|
;######### TRACKING GLOBAL CONFIG ############
|
||||||
Tracking_B3.implementation=BEIDOU_B3I_DLL_PLL_Tracking
|
Tracking_B3.implementation=BEIDOU_B3I_DLL_PLL_Tracking
|
||||||
Tracking_B3.item_type=gr_complex
|
Tracking_B3.item_type=gr_complex
|
||||||
Tracking_B3.pll_bw_hz=25.0;
|
Tracking_B3.pll_bw_hz=40.0;
|
||||||
Tracking_B3.dll_bw_hz=2.50;
|
Tracking_B3.dll_bw_hz=4.0;
|
||||||
Tracking_B3.dump=true;
|
Tracking_B3.pll_bw_narrow_hz=20.0;
|
||||||
|
Tracking_B3.dll_bw_narrow_hz=3.0;
|
||||||
|
Tracking_B3.dump=false;
|
||||||
Tracking_B3.dump_filename=./epl_tracking_ch_
|
Tracking_B3.dump_filename=./epl_tracking_ch_
|
||||||
|
|
||||||
|
|
||||||
;######### TELEMETRY DECODER GPS CONFIG ############
|
;######### TELEMETRY DECODER GPS CONFIG ############
|
||||||
TelemetryDecoder_B3.implementation=BEIDOU_B3I_Telemetry_Decoder
|
TelemetryDecoder_B3.implementation=BEIDOU_B3I_Telemetry_Decoder
|
||||||
TelemetryDecoder_B3.dump=false
|
TelemetryDecoder_B3.dump=true
|
||||||
|
|
||||||
|
|
||||||
;######### OBSERVABLES CONFIG ############
|
;######### OBSERVABLES CONFIG ############
|
||||||
|
@ -1801,6 +1801,15 @@ int rtklib_pvt_gs::work(int noutput_items, gr_vector_const_void_star& input_item
|
|||||||
b_rinex_header_written = true; // do not write header anymore
|
b_rinex_header_written = true; // do not write header anymore
|
||||||
}
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
case 60: // BDS B1I only
|
||||||
|
if (beidou_dnav_ephemeris_iter != d_pvt_solver->beidou_dnav_ephemeris_map.cend())
|
||||||
|
{
|
||||||
|
rp->rinex_obs_header(rp->obsFile, beidou_dnav_ephemeris_iter->second, d_rx_time, "B3");
|
||||||
|
rp->rinex_nav_header(rp->navFile, d_pvt_solver->beidou_dnav_iono, d_pvt_solver->beidou_dnav_utc_model);
|
||||||
|
b_rinex_header_written = true; // do not write header anymore
|
||||||
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
|
@ -53,6 +53,7 @@
|
|||||||
|
|
||||||
#include "rtklib_solver.h"
|
#include "rtklib_solver.h"
|
||||||
#include "Beidou_B1I.h"
|
#include "Beidou_B1I.h"
|
||||||
|
#include "Beidou_B3I.h"
|
||||||
#include "GLONASS_L1_L2_CA.h"
|
#include "GLONASS_L1_L2_CA.h"
|
||||||
#include "GPS_L1_CA.h"
|
#include "GPS_L1_CA.h"
|
||||||
#include "Galileo_E1.h"
|
#include "Galileo_E1.h"
|
||||||
@ -833,6 +834,47 @@ bool Rtklib_Solver::get_PVT(const std::map<int, Gnss_Synchro> &gnss_observables_
|
|||||||
DLOG(INFO) << "No ephemeris data for SV " << gnss_observables_iter->first;
|
DLOG(INFO) << "No ephemeris data for SV " << gnss_observables_iter->first;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// BeiDou B3
|
||||||
|
if (sig_ == "B3")
|
||||||
|
{
|
||||||
|
beidou_ephemeris_iter = beidou_dnav_ephemeris_map.find(gnss_observables_iter->second.PRN);
|
||||||
|
if (beidou_ephemeris_iter != beidou_dnav_ephemeris_map.cend())
|
||||||
|
{
|
||||||
|
bool found_B1I_obs = false;
|
||||||
|
for (int i = 0; i < valid_obs; i++)
|
||||||
|
{
|
||||||
|
if (eph_data[i].sat == (static_cast<int>(gnss_observables_iter->second.PRN + NSATGPS + NSATGLO + NSATGAL + NSATQZS)))
|
||||||
|
{
|
||||||
|
obs_data[i + glo_valid_obs] = insert_obs_to_rtklib(obs_data[i + glo_valid_obs],
|
||||||
|
gnss_observables_iter->second,
|
||||||
|
beidou_ephemeris_iter->second.i_BEIDOU_week + 1356,
|
||||||
|
1); // Band 3 (L2/G2/B3)
|
||||||
|
found_B1I_obs = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!found_B1I_obs)
|
||||||
|
{
|
||||||
|
// insert BeiDou B3I obs as new obs and also insert its ephemeris
|
||||||
|
// convert ephemeris from GNSS-SDR class to RTKLIB structure
|
||||||
|
eph_data[valid_obs] = eph_to_rtklib(beidou_ephemeris_iter->second);
|
||||||
|
// convert observation from GNSS-SDR class to RTKLIB structure
|
||||||
|
auto default_code_ = static_cast<unsigned char>(CODE_NONE);
|
||||||
|
obsd_t newobs = {{0, 0}, '0', '0', {}, {},
|
||||||
|
{default_code_, default_code_, default_code_},
|
||||||
|
{}, {0.0, 0.0, 0.0}, {}};
|
||||||
|
obs_data[valid_obs + glo_valid_obs] = insert_obs_to_rtklib(newobs,
|
||||||
|
gnss_observables_iter->second,
|
||||||
|
beidou_ephemeris_iter->second.i_BEIDOU_week + 1356,
|
||||||
|
1); // Band 2 (L2/G2)
|
||||||
|
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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -118,7 +118,7 @@ public:
|
|||||||
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 Ephemeris
|
std::map<int, Glonass_Gnav_Ephemeris> glonass_gnav_ephemeris_map; //!< Map storing new GLONASS GNAV Ephemeris
|
||||||
std::map<int, Beidou_Dnav_Ephemeris> beidou_dnav_ephemeris_map; //!< Map storing new GLONASS GNAV Ephmeris
|
std::map<int, Beidou_Dnav_Ephemeris> beidou_dnav_ephemeris_map; //!< Map storing new BeiDou DNAV Ephmeris
|
||||||
|
|
||||||
Galileo_Utc_Model galileo_utc_model;
|
Galileo_Utc_Model galileo_utc_model;
|
||||||
Galileo_Iono galileo_iono;
|
Galileo_Iono galileo_iono;
|
||||||
|
@ -119,8 +119,8 @@ beidou_b1i_telemetry_decoder_gs::beidou_b1i_telemetry_decoder_gs(
|
|||||||
|
|
||||||
d_subframe_symbols = static_cast<double *>(volk_gnsssdr_malloc(BEIDOU_DNAV_PREAMBLE_PERIOD_SYMBOLS * sizeof(double), volk_gnsssdr_get_alignment()));
|
d_subframe_symbols = static_cast<double *>(volk_gnsssdr_malloc(BEIDOU_DNAV_PREAMBLE_PERIOD_SYMBOLS * sizeof(double), volk_gnsssdr_get_alignment()));
|
||||||
d_required_symbols = BEIDOU_DNAV_SUBFRAME_SYMBOLS * d_samples_per_symbol + d_samples_per_preamble;
|
d_required_symbols = BEIDOU_DNAV_SUBFRAME_SYMBOLS * d_samples_per_symbol + d_samples_per_preamble;
|
||||||
|
|
||||||
d_symbol_history.set_capacity(d_required_symbols + 1);
|
d_symbol_history.set_capacity(d_required_symbols + 1);
|
||||||
|
|
||||||
// Generic settings
|
// Generic settings
|
||||||
d_sample_counter = 0;
|
d_sample_counter = 0;
|
||||||
d_stat = 0;
|
d_stat = 0;
|
||||||
@ -351,6 +351,7 @@ void beidou_b1i_telemetry_decoder_gs::set_satellite(const Gnss_Satellite &satell
|
|||||||
|
|
||||||
d_subframe_symbols = static_cast<double *>(volk_gnsssdr_malloc(BEIDOU_DNAV_PREAMBLE_PERIOD_SYMBOLS * sizeof(double), volk_gnsssdr_get_alignment()));
|
d_subframe_symbols = static_cast<double *>(volk_gnsssdr_malloc(BEIDOU_DNAV_PREAMBLE_PERIOD_SYMBOLS * sizeof(double), volk_gnsssdr_get_alignment()));
|
||||||
d_required_symbols = BEIDOU_DNAV_SUBFRAME_SYMBOLS * d_samples_per_symbol + d_samples_per_preamble;
|
d_required_symbols = BEIDOU_DNAV_SUBFRAME_SYMBOLS * d_samples_per_symbol + d_samples_per_preamble;
|
||||||
|
d_symbol_history.set_capacity(d_required_symbols + 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -576,6 +577,8 @@ int beidou_b1i_telemetry_decoder_gs::general_work(int noutput_items __attribute_
|
|||||||
d_dump_file.write(reinterpret_cast<char *>(&tmp_ulong_int), sizeof(uint64_t));
|
d_dump_file.write(reinterpret_cast<char *>(&tmp_ulong_int), sizeof(uint64_t));
|
||||||
tmp_double = d_nav.d_SOW;
|
tmp_double = d_nav.d_SOW;
|
||||||
d_dump_file.write(reinterpret_cast<char *>(&tmp_double), sizeof(double));
|
d_dump_file.write(reinterpret_cast<char *>(&tmp_double), sizeof(double));
|
||||||
|
tmp_ulong_int = static_cast<uint64_t>(d_required_symbols);
|
||||||
|
d_dump_file.write(reinterpret_cast<char *>(&tmp_ulong_int), sizeof(uint64_t));
|
||||||
}
|
}
|
||||||
catch (const std::ifstream::failure &e)
|
catch (const std::ifstream::failure &e)
|
||||||
{
|
{
|
||||||
|
@ -353,6 +353,7 @@ void beidou_b3i_telemetry_decoder_gs::set_satellite(const Gnss_Satellite &satell
|
|||||||
|
|
||||||
d_subframe_symbols = static_cast<double *>(volk_gnsssdr_malloc(BEIDOU_DNAV_PREAMBLE_PERIOD_SYMBOLS * sizeof(double), volk_gnsssdr_get_alignment()));
|
d_subframe_symbols = static_cast<double *>(volk_gnsssdr_malloc(BEIDOU_DNAV_PREAMBLE_PERIOD_SYMBOLS * sizeof(double), volk_gnsssdr_get_alignment()));
|
||||||
d_required_symbols = BEIDOU_DNAV_SUBFRAME_SYMBOLS*d_samples_per_symbol + d_samples_per_preamble;
|
d_required_symbols = BEIDOU_DNAV_SUBFRAME_SYMBOLS*d_samples_per_symbol + d_samples_per_preamble;
|
||||||
|
d_symbol_history.set_capacity(d_required_symbols + 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -26,15 +26,37 @@
|
|||||||
% -------------------------------------------------------------------------
|
% -------------------------------------------------------------------------
|
||||||
%
|
%
|
||||||
|
|
||||||
%close all;
|
close all;clear;
|
||||||
|
|
||||||
samplingFreq = 25000000; %[Hz]
|
samplingFreq = 25000000; %[Hz]
|
||||||
channels=[0:9];
|
channels=[0:9];
|
||||||
path='/home/dmiralles/Documents/gnss-sdr/';
|
path='/home/dmiralles/Documents/gnss-sdr-bds_b1i_v2/';
|
||||||
addpath('libs/');
|
addpath('libs/');
|
||||||
clear PRN_absolute_sample_start;
|
clear PRN_absolute_sample_start;
|
||||||
for N=1:1:length(channels)
|
for N=1:1:length(channels)
|
||||||
telemetry_log_path=[path 'telemetry' num2str(channels(N)) '.dat'];
|
telemetry_log_path=[path 'telemetry' num2str(channels(N)) '.dat'];
|
||||||
GNSS_telemetry(N)= gps_l1_ca_read_telemetry_dump(telemetry_log_path);
|
GNSS_telemetry_v2(N)= gps_l1_ca_read_telemetry_dump(telemetry_log_path);
|
||||||
end
|
end
|
||||||
|
|
||||||
|
%% Plotting values
|
||||||
|
%--- Plot results
|
||||||
|
figure;
|
||||||
|
plot(GNSS_telemetry_v2(6).tracking_sample_counter, ...
|
||||||
|
GNSS_telemetry_v2(6).tow_current_symbol_ms, 'b+');
|
||||||
|
hold on;
|
||||||
|
grid on;
|
||||||
|
plot(GNSS_telemetry_v2(1).tracking_sample_counter, ...
|
||||||
|
GNSS_telemetry_v2(1).tow_current_symbol_ms, 'ro');
|
||||||
|
xlabel('TRK Sampling Counter');
|
||||||
|
ylabel('Current Symbol TOW');
|
||||||
|
legend('BDS-1', 'BDS-6');
|
||||||
|
|
||||||
|
figure;
|
||||||
|
plot(GNSS_telemetry_v2(6).tracking_sample_counter, ...
|
||||||
|
GNSS_telemetry_v2(6).tow, 'b+');
|
||||||
|
hold on;
|
||||||
|
grid on;
|
||||||
|
plot(GNSS_telemetry_v2(1).tracking_sample_counter, ...
|
||||||
|
GNSS_telemetry_v2(1).tow, 'ro');
|
||||||
|
xlabel('TRK Sampling Counter');
|
||||||
|
ylabel('Decoded Nav TOW');
|
||||||
|
legend('BDS-1', 'BDS-6');
|
||||||
|
@ -32,7 +32,7 @@ function [telemetry] = gps_l1_ca_read_telemetry_dump (filename, count)
|
|||||||
%%
|
%%
|
||||||
|
|
||||||
m = nargchk (1,2,nargin);
|
m = nargchk (1,2,nargin);
|
||||||
num_double_vars=3;
|
num_double_vars=4;
|
||||||
double_size_bytes=8;
|
double_size_bytes=8;
|
||||||
skip_bytes_each_read=double_size_bytes*num_double_vars;
|
skip_bytes_each_read=double_size_bytes*num_double_vars;
|
||||||
bytes_shift=0;
|
bytes_shift=0;
|
||||||
@ -56,6 +56,9 @@ else
|
|||||||
telemetry.tow = fread (f, count, 'float64',skip_bytes_each_read-double_size_bytes);
|
telemetry.tow = fread (f, count, 'float64',skip_bytes_each_read-double_size_bytes);
|
||||||
bytes_shift=bytes_shift+double_size_bytes;
|
bytes_shift=bytes_shift+double_size_bytes;
|
||||||
fseek(f,bytes_shift,'bof'); % move to next interleaved
|
fseek(f,bytes_shift,'bof'); % move to next interleaved
|
||||||
|
telemetry.required_symbols = fread (f, count, 'uint64',skip_bytes_each_read-double_size_bytes);
|
||||||
|
bytes_shift=bytes_shift+double_size_bytes;
|
||||||
|
fseek(f,bytes_shift,'bof'); % move to next interleaved
|
||||||
|
|
||||||
fclose (f);
|
fclose (f);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user