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
+