diff --git a/src/utils/matlab/gps_l1_ca_dll_pll_plot_sample_64bits.m b/src/utils/matlab/gps_l1_ca_dll_pll_plot_sample_64bits.m new file mode 100644 index 000000000..b3ed5ca33 --- /dev/null +++ b/src/utils/matlab/gps_l1_ca_dll_pll_plot_sample_64bits.m @@ -0,0 +1,89 @@ +% /*! +% * \file gps_l1_ca_dll_pll_plot_sample_64bits.m +% * \brief Read GNSS-SDR Tracking dump binary file using the provided +% function and plot some internal variables +% * \author Javier Arribas, 2011. jarribas(at)cttc.es +% * ------------------------------------------------------------------------- +% * +% * Copyright (C) 2010-2011 (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 . +% * +% * ------------------------------------------------------------------------- +% */ +close all; +clear all; +samplingFreq = 64e6/32; %[Hz] +channels=1; +%path='/home/javier/workspace/gnss-sdr/trunk/install/'; +path='/home/luis/dev/gnss-sdr/trunk/data/'; +clear PRN_absolute_sample_start; +for N=1:1:channels + tracking_log_path=[path 'tracking_ch_' num2str(N-1) '.dat']; + GNSS_tracking(N)= gps_l1_ca_dll_pll_read_tracking_dump_64bits(tracking_log_path); +end + +% GNSS-SDR format conversion to MATLAB GPS receiver + +for N=1:1:channels + trackResults(N).status='T'; %fake track + trackResults(N).codeFreq=GNSS_tracking(N).code_freq_hz.'; + trackResults(N).carrFreq=GNSS_tracking(N).carrier_doppler_hz.'; + trackResults(N).dllDiscr = GNSS_tracking(N).code_error.'; + trackResults(N).dllDiscrFilt = GNSS_tracking(N).code_nco.'; + trackResults(N).pllDiscr = GNSS_tracking(N).carr_error.'; + trackResults(N).pllDiscrFilt = GNSS_tracking(N).carr_nco.'; + + trackResults(N).I_P=GNSS_tracking(N).prompt_I.'; + trackResults(N).Q_P=GNSS_tracking(N).prompt_Q.'; + + trackResults(N).I_E= GNSS_tracking(N).E.'; + trackResults(N).I_L = GNSS_tracking(N).L.'; + trackResults(N).Q_E = zeros(1,length(GNSS_tracking(N).E)); + trackResults(N).Q_L =zeros(1,length(GNSS_tracking(N).E)); + trackResults(N).PRN=N; %fake PRN + + % Use original MATLAB tracking plot function + settings.numberOfChannels=channels; + settings.msToProcess=length(GNSS_tracking(N).E); + plotTracking(N,trackResults,settings) +end + +for N=1:1:channels +% figure; +% plot([GNSS_tracking(N).E,GNSS_tracking(N).P,GNSS_tracking(N).L],'-*'); +% title(['Early, Prompt, and Late correlator absolute value output for channel ' num2str(N)']); +% figure; +% plot(GNSS_tracking(N).prompt_I,GNSS_tracking(N).prompt_Q,'+'); +% title(['Navigation constellation plot for channel ' num2str(N)]); +% figure; +% +% plot(GNSS_tracking(N).prompt_Q,'r'); +% hold on; +% plot(GNSS_tracking(N).prompt_I); +% title(['Navigation symbols I(red) Q(blue) for channel ' num2str(N)]); +% + figure; + t=0:length(GNSS_tracking(N).carrier_doppler_hz)-1; + t=t/1000; + plot(t,GNSS_tracking(N).carrier_doppler_hz/1000); + xlabel('Time(s)');ylabel('Doppler(KHz)');title(['Doppler frequency channel ' num2str(N)]); +end + + diff --git a/src/utils/matlab/libs/gps_l1_ca_dll_pll_read_tracking_dump_64bits.m b/src/utils/matlab/libs/gps_l1_ca_dll_pll_read_tracking_dump_64bits.m new file mode 100644 index 000000000..f7d0bb97a --- /dev/null +++ b/src/utils/matlab/libs/gps_l1_ca_dll_pll_read_tracking_dump_64bits.m @@ -0,0 +1,179 @@ +% /*! +% * \file gps_l1_ca_dll_pll_read_tracking_dump.m +% * \brief Read GNSS-SDR Tracking dump binary file into MATLAB. +% * \author Javier Arribas, 2011. jarribas(at)cttc.es +% * ------------------------------------------------------------------------- +% * +% * Copyright (C) 2010-2011 (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 . +% * +% * ------------------------------------------------------------------------- +% */ +function [GNSS_tracking] = gps_l1_ca_dll_pll_read_tracking_dump_64bits (filename, count) + + %% usage: gps_l1_ca_dll_pll_read_tracking_dump_64bits (filename, [count]) + %% + %% open GNSS-SDR tracking binary log file .dat and return the contents + %% + + m = nargchk (1,2,nargin); + num_float_vars=15; + num_unsigned_long_int_vars=1; + num_double_vars=1; + double_size_bytes=8; + unsigned_long_int_size_bytes=8; + float_size_bytes=4; + skip_bytes_each_read=float_size_bytes*num_float_vars+unsigned_long_int_size_bytes*num_unsigned_long_int_vars+double_size_bytes*num_double_vars; + bytes_shift=0; + if (m) + usage (m); + end + + if (nargin < 2) + count = Inf; + end + %loops_counter = fread (f, count, 'uint32',4*12); + f = fopen (filename, 'rb'); + if (f < 0) + else + v1 = fread (f, count, 'float',skip_bytes_each_read-float_size_bytes); + bytes_shift=bytes_shift+float_size_bytes; + fseek(f,bytes_shift,'bof'); % move to next interleaved float + v2 = fread (f, count, 'float',skip_bytes_each_read-float_size_bytes); + bytes_shift=bytes_shift+float_size_bytes; + fseek(f,bytes_shift,'bof'); % move to next interleaved float + v3 = fread (f, count, 'float',skip_bytes_each_read-float_size_bytes); + bytes_shift=bytes_shift+float_size_bytes; + fseek(f,bytes_shift,'bof'); % move to next interleaved float + v4 = fread (f, count, 'float',skip_bytes_each_read-float_size_bytes); + bytes_shift=bytes_shift+float_size_bytes; + fseek(f,bytes_shift,'bof'); % move to next interleaved float + v5 = fread (f, count, 'float',skip_bytes_each_read-float_size_bytes); + bytes_shift=bytes_shift+float_size_bytes; + fseek(f,bytes_shift,'bof'); % move to next interleaved float + v6 = fread (f, count, 'uint64',skip_bytes_each_read-unsigned_long_int_size_bytes); + bytes_shift=bytes_shift+unsigned_long_int_size_bytes; + fseek(f,bytes_shift,'bof'); % move to next interleaved float + v7 = fread (f, count, 'float',skip_bytes_each_read-float_size_bytes); + bytes_shift=bytes_shift+float_size_bytes; + fseek(f,bytes_shift,'bof'); % move to next interleaved float + v8 = fread (f, count, '*float',skip_bytes_each_read-float_size_bytes); + bytes_shift=bytes_shift+float_size_bytes; + fseek(f,bytes_shift,'bof'); % move to next interleaved float + v9 = fread (f, count, 'float',skip_bytes_each_read-float_size_bytes); + bytes_shift=bytes_shift+float_size_bytes; + fseek(f,bytes_shift,'bof'); % move to next interleaved float + v10 = fread (f, count, 'float',skip_bytes_each_read-float_size_bytes); + bytes_shift=bytes_shift+float_size_bytes; + fseek(f,bytes_shift,'bof'); % move to next interleaved float + v11 = fread (f, count, '*float',skip_bytes_each_read-float_size_bytes); + bytes_shift=bytes_shift+float_size_bytes; + fseek(f,bytes_shift,'bof'); % move to next interleaved float + v12 = fread (f, count, 'float',skip_bytes_each_read-float_size_bytes); + bytes_shift=bytes_shift+float_size_bytes; + fseek(f,bytes_shift,'bof'); % move to next interleaved float + v13 = fread (f, count, 'float',skip_bytes_each_read-float_size_bytes); + bytes_shift=bytes_shift+float_size_bytes; + fseek(f,bytes_shift,'bof'); % move to next interleaved float + v14 = fread (f, count, 'float',skip_bytes_each_read-float_size_bytes); + bytes_shift=bytes_shift+float_size_bytes; + fseek(f,bytes_shift,'bof'); % move to next interleaved float + v15 = fread (f, count, 'float',skip_bytes_each_read-float_size_bytes); + bytes_shift=bytes_shift+float_size_bytes; + fseek(f,bytes_shift,'bof'); % move to next interleaved float + v16 = fread (f, count, 'float',skip_bytes_each_read-float_size_bytes); + bytes_shift=bytes_shift+float_size_bytes; + fseek(f,bytes_shift,'bof'); % move to next interleaved float + v17 = fread (f, count, 'float64',skip_bytes_each_read-double_size_bytes); + fclose (f); + + %%%%%%%% output vars %%%%%%%% + +% // EPR +% d_dump_file.write((char*)&tmp_E, sizeof(float)); +% d_dump_file.write((char*)&tmp_P, sizeof(float)); +% d_dump_file.write((char*)&tmp_L, sizeof(float)); +% // PROMPT I and Q (to analyze navigation symbols) +% d_dump_file.write((char*)&prompt_I, sizeof(float)); +% d_dump_file.write((char*)&prompt_Q, sizeof(float)); +% // PRN start sample stamp +% //tmp_float=(float)d_sample_counter; +% d_dump_file.write((char*)&d_sample_counter, sizeof(unsigned long int)); +% // accumulated carrier phase +% d_dump_file.write((char*)&d_acc_carrier_phase_rad, sizeof(float)); +% +% // carrier and code frequency +% d_dump_file.write((char*)&d_carrier_doppler_hz, sizeof(float)); +% d_dump_file.write((char*)&d_code_freq_hz, sizeof(float)); +% +% //PLL commands +% d_dump_file.write((char*)&carr_error, sizeof(float)); +% d_dump_file.write((char*)&carr_nco, sizeof(float)); +% +% //DLL commands +% d_dump_file.write((char*)&code_error, sizeof(float)); +% d_dump_file.write((char*)&code_nco, sizeof(float)); +% +% // CN0 and carrier lock test +% d_dump_file.write((char*)&d_CN0_SNV_dB_Hz, sizeof(float)); +% d_dump_file.write((char*)&d_carrier_lock_test, sizeof(float)); +% +% // AUX vars (for debug purposes) +% tmp_float=0; +% d_dump_file.write((char*)&tmp_float, sizeof(float)); +% d_dump_file.write((char*)&d_sample_counter_seconds, sizeof(double)); + + E=v1; + P=v2; + L=v3; + prompt_I=v4; + prompt_Q=v5; + PRN_start_sample=v6; + acc_carrier_phase_rad=v7; + carrier_doppler_hz=v8; + code_freq_hz=v9; + carr_error=v10; + carr_nco=v11; + code_error=v12; + code_nco=v13; + CN0_SNV_dB_Hz=v14; + carrier_lock_test=v15; + var1=v16; + var2=v17; + + GNSS_tracking.E=E; + GNSS_tracking.P=P; + GNSS_tracking.L=L; + GNSS_tracking.prompt_I=prompt_I; + GNSS_tracking.prompt_Q=prompt_Q; + GNSS_tracking.PRN_start_sample=PRN_start_sample; + GNSS_tracking.acc_carrier_phase_rad=acc_carrier_phase_rad; + GNSS_tracking.carrier_doppler_hz=carrier_doppler_hz; + GNSS_tracking.code_freq_hz=code_freq_hz; + GNSS_tracking.carr_error=carr_error; + GNSS_tracking.carr_nco=carr_nco; + GNSS_tracking.code_error=code_error; + GNSS_tracking.code_nco=code_nco; + GNSS_tracking.CN0_SNV_dB_Hz=CN0_SNV_dB_Hz; + GNSS_tracking.carrier_lock_test=carrier_lock_test; + GNSS_tracking.var1=var1; + GNSS_tracking.var2=var2; + end +