mirror of
				https://github.com/gnss-sdr/gnss-sdr
				synced 2025-10-31 15:23:04 +00:00 
			
		
		
		
	Merge branch 'next' of https://github.com/gnss-sdr/gnss-sdr into next
This commit is contained in:
		| @@ -1,41 +0,0 @@ | ||||
| #set terminal pdf color font "Bold,14" | ||||
| #set output "IFEN_accuracy.pdf" | ||||
|  | ||||
| set terminal jpeg font "Helvetica, 14" | ||||
| set output "4_GPS_3_GAL_accuracy_precision.jpeg" | ||||
|  | ||||
| set grid  | ||||
| set xrange [-10:10] | ||||
| set yrange [-5:15] | ||||
| set ylabel "North [m]"  | ||||
| set xlabel "East [m]" | ||||
|  | ||||
| set key Left left | ||||
| set title "IFEN simulated data, 4 GPS, 8 Gal - Accuracy and Precision" | ||||
| #file1="8_GPS_GNSS_SDR_solutions.txt" | ||||
| #file2="8_GAL_GNSS_SDR_solutions.txt" | ||||
| file3="4_GPS_3_GAL_GNSS_SDR_solutions.txt" | ||||
|  | ||||
| #values to copy from statistic file | ||||
| DRMS= 3.077806456 | ||||
| DUE_DRMS= 6.155612912 | ||||
| CEP= 2.565164055 | ||||
|  | ||||
|  | ||||
| #difference with respect to the reference position | ||||
| #values to copy from statistic file | ||||
| delta_E= -1.812 # combined | ||||
| delta_N= 3.596  # combined | ||||
|  | ||||
| set parametric | ||||
| #dummy variable is t for curves, u/v for surfaces | ||||
| set size square | ||||
| set angle degree | ||||
| set trange [0:360] | ||||
| #radius_6_GPS=6 | ||||
|  | ||||
| plot file3 u 9:10 with points pointsize 0.3 lc rgb "green" notitle,\ | ||||
| DRMS*sin(t)+delta_E,DRMS*cos(t)+delta_N lw 3 lc rgb "black" title "DRMS",\ | ||||
| DUE_DRMS*sin(t)+delta_E,DUE_DRMS*cos(t)+delta_N lw 2 lc rgb "gray" title "2DRMS",\ | ||||
| CEP*sin(t)+delta_E,CEP*cos(t)+delta_N lw 1 lc rgb "black"  title "CEP" | ||||
|  | ||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
										
											Binary file not shown.
										
									
								
							| Before Width: | Height: | Size: 47 KiB | 
										
											Binary file not shown.
										
									
								
							| Before Width: | Height: | Size: 52 KiB | 
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @@ -1,40 +0,0 @@ | ||||
| #set terminal pdf color font "Bold,14" | ||||
| #set output "IFEN_accuracy.pdf" | ||||
|  | ||||
| set terminal jpeg font "Helvetica, 14" | ||||
| set output "8_GPS_accuracy_precision.jpeg" | ||||
|  | ||||
| set grid  | ||||
| set xrange [-8:8] | ||||
| set yrange [-8:8] | ||||
| set ylabel "North [m]"  | ||||
| set xlabel "East [m]" | ||||
|  | ||||
| set key Left left | ||||
| set title "IFEN simulated data, 8 GPS - Accuracy and Precision" | ||||
| file1="8_GPS_GNSS_SDR_solutions.txt" | ||||
| #file2="8_GAL_GNSS_SDR_solutions.txt" | ||||
| #file3="8_GPS_GNSS_SDR_solutions.txt" | ||||
|  | ||||
| #values to copy from statistic file | ||||
| DRMS= 2.034509899 | ||||
| DUE_DRMS= 4.069019799 | ||||
| CEP= 1.678044871 | ||||
|  | ||||
| #difference with respect to the reference position | ||||
| #values to copy from statistic file | ||||
| delta_E=-0.560 #gps | ||||
| delta_N=1.323 #gps | ||||
|  | ||||
| set parametric | ||||
| #dummy variable is t for curves, u/v for surfaces | ||||
| set size square | ||||
| set angle degree | ||||
| set trange [0:360] | ||||
| #radius_6_GPS=6 | ||||
|  | ||||
| plot file1 u 9:10 with points pointsize 0.3 lc rgb "red" notitle,\ | ||||
| DRMS*sin(t)+delta_E,DRMS*cos(t)+delta_N lw 3 lc rgb "black" title "DRMS",\ | ||||
| DUE_DRMS*sin(t)+delta_E,DUE_DRMS*cos(t)+delta_N lw 2 lc rgb "gray" title "2DRMS",\ | ||||
| CEP*sin(t)+delta_E,CEP*cos(t)+delta_N lw 1 lc rgb "black"  title "CEP" | ||||
|  | ||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
										
											Binary file not shown.
										
									
								
							| Before Width: | Height: | Size: 54 KiB | 
| @@ -1,40 +0,0 @@ | ||||
| #set terminal pdf color font "Bold,14" | ||||
| #set output "IFEN_accuracy.pdf" | ||||
|  | ||||
| set terminal jpeg font "Helvetica, 14" | ||||
| set output "8_GALILEO_accuracy_precision.jpeg" | ||||
|  | ||||
| set grid  | ||||
| set xrange [-8:8] | ||||
| set yrange [-8:8] | ||||
| set ylabel "North [m]"  | ||||
| set xlabel "East [m]" | ||||
|  | ||||
| set key Left left | ||||
| set title "IFEN simulated data, 8 Galileo - Accuracy and Precision" | ||||
| #file1="8_GPS_GNSS_SDR_solutions.txt" | ||||
| file2="8_GAL_GNSS_SDR_solutions.txt" | ||||
| #file3="8_GPS_GNSS_SDR_solutions.txt" | ||||
|  | ||||
| #values to copy from statistic file | ||||
| DRMS= 1.870121081 | ||||
| DUE_DRMS= 3.740242162 | ||||
| CEP= 1.556390643 | ||||
|  | ||||
| #difference with respect to the reference position | ||||
| #values to copy from statistic file | ||||
| delta_E=1.191 #galileo | ||||
| delta_N=1.923 #galileo | ||||
|  | ||||
| set parametric | ||||
| #dummy variable is t for curves, u/v for surfaces | ||||
| set size square | ||||
| set angle degree | ||||
| set trange [0:360] | ||||
| #radius_6_GPS=6 | ||||
|  | ||||
| plot file2 u 9:10 with points pointsize 0.3 lc rgb "blue" notitle,\ | ||||
| DRMS*sin(t)+delta_E,DRMS*cos(t)+delta_N lw 3 lc rgb "black" title "DRMS",\ | ||||
| DUE_DRMS*sin(t)+delta_E,DUE_DRMS*cos(t)+delta_N lw 2 lc rgb "gray" title "2DRMS",\ | ||||
| CEP*sin(t)+delta_E,CEP*cos(t)+delta_N lw 1 lc rgb "black"  title "CEP" | ||||
|  | ||||
										
											Binary file not shown.
										
									
								
							| Before Width: | Height: | Size: 49 KiB | 
| @@ -1,50 +0,0 @@ | ||||
| #to load the file digit from terminal: | ||||
| #> gnuplot 8_sat_IFEN_accuracy_precision.plt | ||||
|  | ||||
| #set terminal pdf color font "Bold,14" | ||||
| #set output "IFEN_solutions_pdf" | ||||
| set terminal jpeg font "Helvetica, 14" | ||||
| set output "8_sat_accuracy_precision.jpeg" | ||||
|  | ||||
| set grid  | ||||
| set xrange [-15:15] | ||||
| set yrange [-10:20] | ||||
| set ylabel "North [m]"  | ||||
| set xlabel "East [m]" | ||||
|  | ||||
| set key Left left | ||||
| set title "Accuracy-Precision (with respect to CORRECT coordinates)- 2DRMS" | ||||
| file1="4_GPS_3_GAL_GNSS_SDR_solutions.txt" | ||||
| file2="8_GAL_GNSS_SDR_solutions.txt" | ||||
| file3="8_GPS_GNSS_SDR_solutions.txt" | ||||
|  | ||||
| #values to copy from statistic file | ||||
| DRMS_1=2*3.077 	 #it is 2*DRMS  combined | ||||
| DRMS_2=2*1.87	 # gal | ||||
| DRMS_3=2*2.034   # gps | ||||
|  | ||||
| #difference with respect to the reference position | ||||
|  | ||||
| #values to copy from statistic file | ||||
| delta_E_1=-1.812 #combined | ||||
| delta_N_1= 3.596 #combined | ||||
|  | ||||
| delta_E_2= 1.191 #gal | ||||
| delta_N_2= 1.923 #gal | ||||
|  | ||||
| delta_E_3= -0.560 #gps | ||||
| delta_N_3= 1.323  #gps | ||||
|  | ||||
| set parametric | ||||
| #dummy variable is t for curves, u/v for surfaces | ||||
| set size square | ||||
| set angle degree | ||||
| set trange [0:360] | ||||
|  | ||||
| plot file1 u 9:10 with points pointsize 0.3 lc rgb "green" title "4 GPS-3 GAL",\ | ||||
| file3 u 9:10 with points pointsize 0.3 lc rgb "red" title "8 GPS",\ | ||||
| file2 u 9:10 with points pointsize 0.3 lc rgb "blue" title "8 GAL",\ | ||||
| DRMS_1*sin(t)+delta_E_1,DRMS_1*cos(t)+delta_N_1 lw 2 lc rgb "green" notitle,\ | ||||
| DRMS_3*sin(t)+delta_E_3,DRMS_3*cos(t)+delta_N_3 lw 2 lc rgb "red" notitle,\ | ||||
| DRMS_2*sin(t)+delta_E_2,DRMS_2*cos(t)+delta_N_2 lw 2 lc rgb "blue" notitle | ||||
|  | ||||
| @@ -1,23 +0,0 @@ | ||||
| Num of GPS observation 4 | ||||
| Num of GALILEO observation 3 | ||||
| GDOP mean= 2.380532594 | ||||
|  | ||||
| ENU computed at (IFEN true coordinates): ref Longitude = 11.808005630, Ref Latitude = 48.171497670 for Accuracy | ||||
| ENU computed at (average coordinates) mean Longitude = 11.807981252, mean Latitude = 48.171530020 for Precision | ||||
|  | ||||
| ACCURACY (respect true position) | ||||
| East offset [m] = -1.812959237, East st. dev =  1.899085141 | ||||
| Nord offset [m] = 3.596061973,Noth st. dev =  2.422058671 | ||||
| Up offset [m] = 8.995532878, Up st. dev =  3.881428324 | ||||
|  | ||||
| DRMS= 3.077806456 | ||||
| DUE_DRMS= 6.155612912 | ||||
| CEP= 2.565164055 | ||||
| MRSE= 4.953622757 | ||||
| SEP= 12.514572993 | ||||
|  | ||||
| PRECISION (respect average solution) | ||||
| East offset [m] = 0.000000000, East st. dev = 1.899086239 | ||||
| Nord offset [m] = -0.000000001, ,Noth st. dev = 2.422059160 | ||||
| Up offset  [m]= -0.000000003, Up st. dev = 3.881427482 | ||||
| ---------------------------------------------------------------------------------------------- | ||||
| @@ -1,23 +0,0 @@ | ||||
| Num of GPS observation 0 | ||||
| Num of GALILEO observation 8 | ||||
| GDOP mean= 1.769225604 | ||||
|  | ||||
| ENU computed at (IFEN true coordinates): ref Longitude = 11.808005630, Ref Latitude = 48.171497670 for Accuracy | ||||
| ENU computed at (average coordinates) mean Longitude = 11.808021645, mean Latitude = 48.171514975 for Precision | ||||
|  | ||||
| ACCURACY (respect true position) | ||||
| East offset [m] = 1.191616778, East st. dev =  1.370472661 | ||||
| Nord offset [m] = 1.923075914,Noth st. dev =  1.272461214 | ||||
| Up offset [m] = 13.774563698, Up st. dev =  3.492269580 | ||||
|  | ||||
| DRMS= 1.870121081 | ||||
| DUE_DRMS= 3.740242162 | ||||
| CEP= 1.556390643 | ||||
| MRSE= 3.961476957 | ||||
| SEP= 8.003582836 | ||||
|  | ||||
| PRECISION (respect average solution) | ||||
| East offset [m] = -0.000000002, East st. dev = 1.370472897 | ||||
| Nord offset [m] = -0.000000001, ,Noth st. dev = 1.272461012 | ||||
| Up offset  [m]= 0.000000002, Up st. dev = 3.492269562 | ||||
| ---------------------------------------------------------------------------------------------- | ||||
| @@ -1,23 +0,0 @@ | ||||
| Num of GPS observation 8 | ||||
| Num of GALILEO observation 0 | ||||
| GDOP mean= 2.002216944 | ||||
|  | ||||
| ENU computed at (IFEN true coordinates): ref Longitude = 11.808005630, Ref Latitude = 48.171497670 for Accuracy | ||||
| ENU computed at (average coordinates) mean Longitude = 11.807998091, mean Latitude = 48.171509585 for Precision | ||||
|  | ||||
| ACCURACY (respect true position) | ||||
| East offset [m] = -0.560396234, East st. dev =  1.105718017 | ||||
| Nord offset [m] = 1.323685667,Noth st. dev =  1.707810937 | ||||
| Up offset [m] = 10.792857384, Up st. dev =  3.121160956 | ||||
|  | ||||
| DRMS= 2.034509899 | ||||
| DUE_DRMS= 4.069019799 | ||||
| CEP= 1.678044871 | ||||
| MRSE= 3.725704798 | ||||
| SEP= 7.079246885 | ||||
|  | ||||
| PRECISION (respect average solution) | ||||
| East offset [m] = 0.000000000, East st. dev = 1.105718027 | ||||
| Nord offset [m] = -0.000000005, ,Noth st. dev = 1.707811217 | ||||
| Up offset  [m]= -0.000000005, Up st. dev = 3.121160800 | ||||
| ---------------------------------------------------------------------------------------------- | ||||
| @@ -1,37 +1,36 @@ | ||||
| % /*! | ||||
| %  * \file dll_pll_vml_plot_sample.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 | ||||
| %  * \author Antonio Ramos,  2018. antonio.ramos(at)cttc.es | ||||
| %  * ------------------------------------------------------------------------- | ||||
| %  * | ||||
| %  * Copyright (C) 2010-2018  (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 <http://www.gnu.org/licenses/>. | ||||
| %  * | ||||
| %  * ------------------------------------------------------------------------- | ||||
| %  */  | ||||
| % Reads GNSS-SDR Tracking dump binary file using the provided | ||||
| %  function and plots some internal variables | ||||
| % Javier Arribas, 2011. jarribas(at)cttc.es | ||||
| % Antonio Ramos,  2018. antonio.ramos(at)cttc.es | ||||
| % ------------------------------------------------------------------------- | ||||
| % | ||||
| % Copyright (C) 2010-2018  (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 <http://www.gnu.org/licenses/>. | ||||
| % | ||||
| % ------------------------------------------------------------------------- | ||||
| % | ||||
|  | ||||
| close all; | ||||
| clear all; | ||||
|  | ||||
| if ~exist('dll_pll_veml_read_tracking_dump.m','file') | ||||
| if ~exist('dll_pll_veml_read_tracking_dump.m', 'file') | ||||
|     addpath('./libs') | ||||
| end | ||||
|  | ||||
| @@ -43,41 +42,41 @@ first_channel = 0;  % Number of the first channel | ||||
| path = '/dump_dir/';  %% CHANGE THIS PATH | ||||
|  | ||||
| for N=1:1:channels | ||||
|     tracking_log_path = [path 'track_ch_' num2str(N+first_channel-1) '.dat']; %% CHANGE track_ch BY YOUR dump_filename | ||||
|     GNSS_tracking(N)= dll_pll_veml_read_tracking_dump(tracking_log_path);    | ||||
|     tracking_log_path = [path 'track_ch_' num2str(N+first_channel-1) '.dat']; %% CHANGE track_ch_ BY YOUR dump_filename | ||||
|     GNSS_tracking(N) = dll_pll_veml_read_tracking_dump(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).P.'; | ||||
|         trackResults(N).Q_P = zeros(1,length(GNSS_tracking(N).P)); | ||||
|  | ||||
|         trackResults(N).I_VE = GNSS_tracking(N).VE.'; | ||||
|         trackResults(N).I_E = GNSS_tracking(N).E.'; | ||||
|         trackResults(N).I_L = GNSS_tracking(N).L.'; | ||||
|         trackResults(N).I_VL = GNSS_tracking(N).VL.'; | ||||
|         trackResults(N).Q_VE = zeros(1,length(GNSS_tracking(N).VE)); | ||||
|         trackResults(N).Q_E = zeros(1,length(GNSS_tracking(N).E)); | ||||
|         trackResults(N).Q_L = zeros(1,length(GNSS_tracking(N).L)); | ||||
|         trackResults(N).Q_VL = zeros(1,length(GNSS_tracking(N).VL)); | ||||
|         trackResults(N).data_I = GNSS_tracking(N).prompt_I.'; | ||||
|         trackResults(N).data_Q = GNSS_tracking(N).prompt_Q.'; | ||||
|         trackResults(N).PRN = GNSS_tracking(N).PRN.'; | ||||
|         trackResults(N).CNo = GNSS_tracking(N).CN0_SNV_dB_Hz.'; | ||||
|          | ||||
|         % Use original MATLAB tracking plot function | ||||
|         settings.numberOfChannels = channels; | ||||
|         settings.msToProcess = length(GNSS_tracking(N).E)*coherent_integration_time_ms; | ||||
|         plotVEMLTracking(N,trackResults,settings) | ||||
|     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).P.'; | ||||
|     trackResults(N).Q_P = zeros(1,length(GNSS_tracking(N).P)); | ||||
|      | ||||
|     trackResults(N).I_VE = GNSS_tracking(N).VE.'; | ||||
|     trackResults(N).I_E = GNSS_tracking(N).E.'; | ||||
|     trackResults(N).I_L = GNSS_tracking(N).L.'; | ||||
|     trackResults(N).I_VL = GNSS_tracking(N).VL.'; | ||||
|     trackResults(N).Q_VE = zeros(1,length(GNSS_tracking(N).VE)); | ||||
|     trackResults(N).Q_E = zeros(1,length(GNSS_tracking(N).E)); | ||||
|     trackResults(N).Q_L = zeros(1,length(GNSS_tracking(N).L)); | ||||
|     trackResults(N).Q_VL = zeros(1,length(GNSS_tracking(N).VL)); | ||||
|     trackResults(N).data_I = GNSS_tracking(N).prompt_I.'; | ||||
|     trackResults(N).data_Q = GNSS_tracking(N).prompt_Q.'; | ||||
|     trackResults(N).PRN = GNSS_tracking(N).PRN.'; | ||||
|     trackResults(N).CNo = GNSS_tracking(N).CN0_SNV_dB_Hz.'; | ||||
|      | ||||
|     % Use original MATLAB tracking plot function | ||||
|     settings.numberOfChannels = channels; | ||||
|     settings.msToProcess = length(GNSS_tracking(N).E) * coherent_integration_time_ms; | ||||
|     plotVEMLTracking(N, trackResults, settings) | ||||
| end | ||||
|  | ||||
|  | ||||
|   | ||||
| @@ -1,36 +1,35 @@ | ||||
| % /*! | ||||
| %  * \file galileo_l1_ca_dll_pll_vml_plot_sample.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 <http://www.gnu.org/licenses/>. | ||||
| %  * | ||||
| %  * ------------------------------------------------------------------------- | ||||
| %  */  | ||||
| % Reads GNSS-SDR Tracking dump binary file using the provided | ||||
| %  function and plots some internal variables | ||||
| % Javier Arribas, 2011. jarribas(at)cttc.es | ||||
| % ------------------------------------------------------------------------- | ||||
| % | ||||
| % Copyright (C) 2010-2018  (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 <http://www.gnu.org/licenses/>. | ||||
| % | ||||
| % ------------------------------------------------------------------------- | ||||
| % | ||||
|  | ||||
| close all; | ||||
| clear all; | ||||
|  | ||||
| if ~exist('galileo_e1_dll_pll_veml_read_tracking_dump.m','file') | ||||
| if ~exist('dll_pll_veml_read_tracking_dump.m', 'file') | ||||
|     addpath('./libs') | ||||
| end | ||||
|  | ||||
| @@ -42,38 +41,38 @@ path = '/Users/carlesfernandez/git/cttc/build/';  %% CHANGE THIS PATH | ||||
|  | ||||
| for N=1:1:channels | ||||
|     tracking_log_path = [path 'track_ch' num2str(N+first_channel-1) '.dat']; %% CHANGE track_ch BY YOUR dump_filename | ||||
|     GNSS_tracking(N)= galileo_e1_dll_pll_veml_read_tracking_dump(tracking_log_path);    | ||||
|     GNSS_tracking(N) = dll_pll_veml_read_tracking_dump(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_VE = GNSS_tracking(N).VE.'; | ||||
|         trackResults(N).I_E = GNSS_tracking(N).E.'; | ||||
|         trackResults(N).I_L = GNSS_tracking(N).L.'; | ||||
|         trackResults(N).I_VL = GNSS_tracking(N).VL.'; | ||||
|         trackResults(N).Q_VE = zeros(1,length(GNSS_tracking(N).VE)); | ||||
|         trackResults(N).Q_E = zeros(1,length(GNSS_tracking(N).E)); | ||||
|         trackResults(N).Q_L = zeros(1,length(GNSS_tracking(N).L)); | ||||
|         trackResults(N).Q_VL = zeros(1,length(GNSS_tracking(N).VL)); | ||||
|         trackResults(N).PRN = GNSS_tracking(N).PRN.'; | ||||
|         trackResults(N).CNo = GNSS_tracking(N).CN0_SNV_dB_Hz.'; | ||||
|          | ||||
|         % Use original MATLAB tracking plot function | ||||
|         settings.numberOfChannels = channels; | ||||
|         settings.msToProcess = length(GNSS_tracking(N).E)*4; | ||||
|         plotVEMLTracking(N,trackResults,settings) | ||||
|     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_VE = GNSS_tracking(N).VE.'; | ||||
|     trackResults(N).I_E = GNSS_tracking(N).E.'; | ||||
|     trackResults(N).I_L = GNSS_tracking(N).L.'; | ||||
|     trackResults(N).I_VL = GNSS_tracking(N).VL.'; | ||||
|     trackResults(N).Q_VE = zeros(1,length(GNSS_tracking(N).VE)); | ||||
|     trackResults(N).Q_E = zeros(1,length(GNSS_tracking(N).E)); | ||||
|     trackResults(N).Q_L = zeros(1,length(GNSS_tracking(N).L)); | ||||
|     trackResults(N).Q_VL = zeros(1,length(GNSS_tracking(N).VL)); | ||||
|     trackResults(N).PRN = GNSS_tracking(N).PRN.'; | ||||
|     trackResults(N).CNo = GNSS_tracking(N).CN0_SNV_dB_Hz.'; | ||||
|      | ||||
|     % Use original MATLAB tracking plot function | ||||
|     settings.numberOfChannels = channels; | ||||
|     settings.msToProcess = length(GNSS_tracking(N).E)*4; | ||||
|     plotVEMLTracking(N, trackResults, settings) | ||||
| end | ||||
|  | ||||
|  | ||||
|   | ||||
| @@ -1,33 +1,31 @@ | ||||
| % /*! | ||||
| %  * \file galileo_e5a_dll_pll_plot_sample.m | ||||
| %  * \brief Read GNSS-SDR Tracking dump binary file using the provided | ||||
| %  function and plot some internal variables | ||||
| %  * \author Javier Arribas, Marc Sales 2014. jarribas(at)cttc.es | ||||
| %  marcsales92@gmail.com | ||||
| %  * ------------------------------------------------------------------------- | ||||
| %  * | ||||
| %  * Copyright (C) 2010-2014  (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 <http://www.gnu.org/licenses/>. | ||||
| %  * | ||||
| %  * ------------------------------------------------------------------------- | ||||
| %  */  | ||||
| % Reads GNSS-SDR Tracking dump binary file using the provided | ||||
| %   function and plots some internal variables | ||||
| % Javier Arribas, Marc Sales 2014. jarribas(at)cttc.es, marcsales92@gmail.com | ||||
| % ------------------------------------------------------------------------- | ||||
| % | ||||
| % Copyright (C) 2010-2018  (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 <http://www.gnu.org/licenses/>. | ||||
| % | ||||
| % ------------------------------------------------------------------------- | ||||
| % | ||||
|  | ||||
| close all; | ||||
| clear all; | ||||
|  | ||||
| @@ -44,54 +42,54 @@ path = '/Users/carlesfernandez/git/cttc/build/';  %% CHANGE THIS PATH | ||||
|  | ||||
| for N=1:1:channels | ||||
|     tracking_log_path = [path 'tracking_ch_' num2str(N+first_channel-1) '.dat']; %% CHANGE tracking_ch_ BY YOUR dump_filename | ||||
|     GNSS_tracking(N)= gps_l1_ca_dll_pll_read_tracking_dump(tracking_log_path);    | ||||
|     GNSS_tracking(N) = gps_l1_ca_dll_pll_read_tracking_dump(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_PN = GNSS_tracking(N).prompt_I.'; | ||||
|         trackResults(N).Q_PN = GNSS_tracking(N).prompt_Q.'; | ||||
|         trackResults(N).Q_P = zeros(1,length(GNSS_tracking(N).P)); | ||||
|         trackResults(N).I_P = GNSS_tracking(N).P.'; | ||||
|  | ||||
|         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 = GNSS_tracking(N).PRN.'; | ||||
|          | ||||
|         % Use original MATLAB tracking plot function | ||||
|         settings.numberOfChannels = channels; | ||||
|         settings.msToProcess = length(GNSS_tracking(N).E); | ||||
|         plotTrackingE5a(N,trackResults,settings) | ||||
|     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_PN = GNSS_tracking(N).prompt_I.'; | ||||
|     trackResults(N).Q_PN = GNSS_tracking(N).prompt_Q.'; | ||||
|     trackResults(N).Q_P = zeros(1,length(GNSS_tracking(N).P)); | ||||
|     trackResults(N).I_P = GNSS_tracking(N).P.'; | ||||
|      | ||||
|     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 = GNSS_tracking(N).PRN.'; | ||||
|      | ||||
|     % Use original MATLAB tracking plot function | ||||
|     settings.numberOfChannels = channels; | ||||
|     settings.msToProcess = length(GNSS_tracking(N).E); | ||||
|     plotTrackingE5a(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)]); | ||||
|     %  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 | ||||
| @@ -1,36 +1,35 @@ | ||||
| % /*! | ||||
| %  * \file glonass_ca_dll_pll_plot_sample.m | ||||
| %  * \brief Read GNSS-SDR Tracking dump binary file using the provided | ||||
| %  function and plot some internal variables | ||||
| %  * \author Damian Miralles, 2017. dmiralles2009(at)gmail.com | ||||
| %  * ------------------------------------------------------------------------- | ||||
| %  * | ||||
| %  * 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 <http://www.gnu.org/licenses/>. | ||||
| %  * | ||||
| %  * ------------------------------------------------------------------------- | ||||
| %  */ | ||||
| % Reads GNSS-SDR Tracking dump binary file using the provided | ||||
| %  function and plots some internal variables | ||||
| % Damian Miralles, 2017. dmiralles2009(at)gmail.com | ||||
| % ------------------------------------------------------------------------- | ||||
| % | ||||
| % Copyright (C) 2010-2018  (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 <http://www.gnu.org/licenses/>. | ||||
| % | ||||
| % ------------------------------------------------------------------------- | ||||
| % | ||||
|  | ||||
| close all; | ||||
| clear all; | ||||
|  | ||||
| if ~exist('glonass_ca_dll_pll_read_tracking_dump.m','file') | ||||
| if ~exist('dll_pll_veml_read_tracking_dump.m', 'file') | ||||
|     addpath('./libs') | ||||
| end | ||||
|  | ||||
| @@ -42,33 +41,33 @@ first_channel = 0; | ||||
| path = '/archive/';  %% CHANGE THIS PATH | ||||
|  | ||||
| for N=1:1:channels | ||||
|     tracking_log_path = [path 'glo_tracking_ch_' num2str(N+first_channel-1) '.dat']; %% CHANGE epl_tracking_ch_ BY YOUR dump_filename | ||||
|     GNSS_tracking(N)= glonass_ca_dll_pll_read_tracking_dump(tracking_log_path); | ||||
|     tracking_log_path = [path 'glo_tracking_ch_' num2str(N+first_channel-1) '.dat']; %% CHANGE glo_tracking_ch_ BY YOUR dump_filename | ||||
|     GNSS_tracking(N) = dll_pll_veml_read_tracking_dump(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_freq_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).CNo = GNSS_tracking(N).CN0_SNV_dB_Hz.'; | ||||
|         trackResults(N).PRN = ones(1,length(GNSS_tracking(N).E)); | ||||
|  | ||||
|         % Use original MATLAB tracking plot function | ||||
|         settings.numberOfChannels = channels; | ||||
|         settings.msToProcess = length(GNSS_tracking(N).E); | ||||
|         plotTracking(N,trackResults,settings); | ||||
|     trackResults(N).status = 'T'; %fake track | ||||
|     trackResults(N).codeFreq       = GNSS_tracking(N).code_freq_hz.'; | ||||
|     trackResults(N).carrFreq       = GNSS_tracking(N).carrier_freq_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).CNo = GNSS_tracking(N).CN0_SNV_dB_Hz.'; | ||||
|     trackResults(N).PRN = ones(1,length(GNSS_tracking(N).E)); | ||||
|      | ||||
|     % Use original MATLAB tracking plot function | ||||
|     settings.numberOfChannels = channels; | ||||
|     settings.msToProcess = length(GNSS_tracking(N).E); | ||||
|     plotTracking(N, trackResults, settings) | ||||
| end | ||||
|   | ||||
| @@ -1,36 +1,35 @@ | ||||
| % /*! | ||||
| %  * \file gps_l1_ca_dll_pll_plot_sample.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 <http://www.gnu.org/licenses/>. | ||||
| %  * | ||||
| %  * ------------------------------------------------------------------------- | ||||
| %  */  | ||||
| % Reads GNSS-SDR Tracking dump binary file using the provided | ||||
| %  function and plots some internal variables | ||||
| % Javier Arribas, 2011. jarribas(at)cttc.es | ||||
| % ------------------------------------------------------------------------- | ||||
| % | ||||
| % Copyright (C) 2010-2018  (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 <http://www.gnu.org/licenses/>. | ||||
| % | ||||
| % ------------------------------------------------------------------------- | ||||
| % | ||||
|  | ||||
| close all; | ||||
| clear all; | ||||
|  | ||||
| if ~exist('gps_l1_ca_dll_pll_read_tracking_dump.m','file') | ||||
| if ~exist('dll_pll_veml_read_tracking_dump.m', 'file') | ||||
|     addpath('./libs') | ||||
| end | ||||
|  | ||||
| @@ -42,35 +41,35 @@ first_channel = 0; | ||||
| path = '/archive/';  %% CHANGE THIS PATH | ||||
|  | ||||
| for N=1:1:channels | ||||
|     tracking_log_path = [path 'glo_tracking_ch_' num2str(N+first_channel-1) '.dat']; %% CHANGE epl_tracking_ch_ BY YOUR dump_filename | ||||
|     GNSS_tracking(N)= gps_l1_ca_dll_pll_read_tracking_dump(tracking_log_path); | ||||
|     tracking_log_path = [path 'epl_tracking_ch_' num2str(N+first_channel-1) '.dat']; %% CHANGE epl_tracking_ch_ BY YOUR dump_filename | ||||
|     GNSS_tracking(N) = dll_pll_veml_read_tracking_dump(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 = ones(1,length(GNSS_tracking(N).E)); | ||||
|         trackResults(N).CNo = GNSS_tracking(N).CN0_SNV_dB_Hz.'; | ||||
|          | ||||
|         % Use original MATLAB tracking plot function | ||||
|         settings.numberOfChannels = channels; | ||||
|         settings.msToProcess = length(GNSS_tracking(N).E); | ||||
|         plotTracking(N,trackResults,settings) | ||||
|     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 = ones(1,length(GNSS_tracking(N).E)); | ||||
|     trackResults(N).CNo = GNSS_tracking(N).CN0_SNV_dB_Hz.'; | ||||
|      | ||||
|     % Use original MATLAB tracking plot function | ||||
|     settings.numberOfChannels = channels; | ||||
|     settings.msToProcess = length(GNSS_tracking(N).E); | ||||
|     plotTracking(N, trackResults, settings) | ||||
| end | ||||
|  | ||||
|  | ||||
|   | ||||
| @@ -1,32 +1,30 @@ | ||||
| % /*! | ||||
| %  * \file gps_l1_ca_pvt_plot_sample.m | ||||
| %  * \brief Read GNSS-SDR PVT 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 <http://www.gnu.org/licenses/>. | ||||
| %  * | ||||
| %  * ------------------------------------------------------------------------- | ||||
| %  */  | ||||
| % Reads GNSS-SDR PVT dump binary file using the provided | ||||
| %  function and plots some internal variables | ||||
| % Javier Arribas, 2011. jarribas(at)cttc.es | ||||
| % ------------------------------------------------------------------------- | ||||
| % | ||||
| % Copyright (C) 2010-2018  (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 <http://www.gnu.org/licenses/>. | ||||
| % | ||||
| % ------------------------------------------------------------------------- | ||||
| % | ||||
|  | ||||
| close all; | ||||
| clear all; | ||||
| @@ -63,17 +61,17 @@ h=35; | ||||
| [X, Y, Z]=geo2cart(lat, long, h, 5); % geographical to cartesian conversion | ||||
|  | ||||
| %=== Convert to UTM coordinate system ============================= | ||||
| utmZone = findUtmZone(lat_deg, long_deg);  | ||||
| utmZone = findUtmZone(lat_deg, long_deg); | ||||
|  | ||||
|  [settings.truePosition.E, ... | ||||
|   settings.truePosition.N, ... | ||||
|   settings.truePosition.U] = cart2utm(X, Y, Z, utmZone); | ||||
| [settings.truePosition.E, ... | ||||
|     settings.truePosition.N, ... | ||||
|     settings.truePosition.U] = cart2utm(X, Y, Z, utmZone); | ||||
|  | ||||
|  | ||||
| for k=1:1:length(navSolutions.X) | ||||
|     [navSolutions.E(k), ... | ||||
|      navSolutions.N(k), ... | ||||
|      navSolutions.U(k)]=cart2utm(navSolutions.X(k), navSolutions.Y(k), navSolutions.Z(k), utmZone); | ||||
|         navSolutions.N(k), ... | ||||
|         navSolutions.U(k)]=cart2utm(navSolutions.X(k), navSolutions.Y(k), navSolutions.Z(k), utmZone); | ||||
| end | ||||
|  | ||||
| plot_skyplot=0; | ||||
|   | ||||
| @@ -1,4 +1,28 @@ | ||||
| % Read PVG raw dump | ||||
| % ------------------------------------------------------------------------- | ||||
| % | ||||
| % Copyright (C) 2010-2018  (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 <http://www.gnu.org/licenses/>. | ||||
| % | ||||
| % ------------------------------------------------------------------------- | ||||
| % | ||||
|  | ||||
| %clear all; | ||||
|  | ||||
| @@ -6,4 +30,4 @@ samplingFreq       = 64e6/16;     %[Hz] | ||||
| channels=4; | ||||
| path='/home/javier/workspace/gnss-sdr-ref/trunk/install/'; | ||||
| pvt_raw_log_path=[path 'PVT_raw.dat']; | ||||
| GNSS_PVT_raw= gps_l1_ca_read_pvt_raw_dump(channels,pvt_raw_log_path);    | ||||
| GNSS_PVT_raw= gps_l1_ca_read_pvt_raw_dump(channels,pvt_raw_log_path); | ||||
|   | ||||
| @@ -1,32 +1,31 @@ | ||||
| % /*! | ||||
| %  * \file gps_l1_ca_dll_fll_pll_plot_sample.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 <http://www.gnu.org/licenses/>. | ||||
| %  * | ||||
| %  * ------------------------------------------------------------------------- | ||||
| %  */  | ||||
| % Reads GNSS-SDR Tracking dump binary file using the provided | ||||
| %  function and plots some internal variables | ||||
| % Javier Arribas, 2011. jarribas(at)cttc.es | ||||
| % ------------------------------------------------------------------------- | ||||
| % | ||||
| % Copyright (C) 2010-2018  (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 <http://www.gnu.org/licenses/>. | ||||
| % | ||||
| % ------------------------------------------------------------------------- | ||||
| % | ||||
|  | ||||
| %close all; | ||||
| %clear all; | ||||
| samplingFreq       = 64e6/16;     %[Hz] | ||||
| @@ -35,6 +34,6 @@ path='/home/javier/workspace/gnss-sdr-ref/trunk/install/'; | ||||
| clear PRN_absolute_sample_start; | ||||
| for N=1:1:channels | ||||
|     telemetry_log_path=[path 'telemetry' num2str(N-1) '.dat']; | ||||
|     GNSS_telemetry(N)= gps_l1_ca_read_telemetry_dump(telemetry_log_path);    | ||||
|     GNSS_telemetry(N)= gps_l1_ca_read_telemetry_dump(telemetry_log_path); | ||||
| end | ||||
|  | ||||
|   | ||||
| @@ -1,3 +1,28 @@ | ||||
| % ------------------------------------------------------------------------- | ||||
| % | ||||
| % Copyright (C) 2010-2018  (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 <http://www.gnu.org/licenses/>. | ||||
| % | ||||
| % ------------------------------------------------------------------------- | ||||
| % | ||||
|  | ||||
| %help script to compare GNSS-SDR Preambles starts | ||||
| channel=3; | ||||
| % From GNSS_SDR telemetry decoder | ||||
| @@ -25,9 +50,9 @@ error_ms=preambles_timestamp_sdr_ms(common_start_index:(common_start_index+lengt | ||||
|  | ||||
| % figure | ||||
| % stem(tracking_loop_start+javi_subFrameStart_sample(channel,:),1000*trackResults_sdr(channel).absoluteSample(javi_subFrameStart_sample(channel,:))/settings.samplingFreq); | ||||
| %  | ||||
| % | ||||
| % hold on; | ||||
| %  | ||||
| % | ||||
| % plot(GNSS_observables.preamble_delay_ms(channel,:)); | ||||
| %  | ||||
| % | ||||
| % plot(GNSS_observables.prn_delay_ms(channel,:),'r') | ||||
| @@ -1,4 +1,29 @@ | ||||
| % compare pseudoranges  | ||||
| % ------------------------------------------------------------------------- | ||||
| % | ||||
| % Copyright (C) 2010-2018  (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 <http://www.gnu.org/licenses/>. | ||||
| % | ||||
| % ------------------------------------------------------------------------- | ||||
| % | ||||
|  | ||||
| % compare pseudoranges | ||||
|  | ||||
| close all; | ||||
| % GNSS SDR | ||||
|   | ||||
| @@ -1,3 +1,28 @@ | ||||
| % ------------------------------------------------------------------------- | ||||
| % | ||||
| % Copyright (C) 2010-2018  (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 <http://www.gnu.org/licenses/>. | ||||
| % | ||||
| % ------------------------------------------------------------------------- | ||||
| % | ||||
|  | ||||
| % Read observables dump | ||||
|  | ||||
| %clear all; | ||||
| @@ -41,24 +66,24 @@ title('Doppler frequency') | ||||
| xlabel('TOW [s]') | ||||
| ylabel('[Hz]'); | ||||
|  | ||||
| %  | ||||
| % | ||||
| % %read true obs from simulator (optional) | ||||
| % GPS_STARTOFFSET_s = 68.802e-3; | ||||
| %  | ||||
| % | ||||
| % true_observables_log_path='/home/javier/git/gnss-sdr/build/obs_out.bin'; | ||||
| % GNSS_true_observables= read_true_sim_observables_dump(true_observables_log_path); | ||||
| %  | ||||
| % | ||||
| % %correct the clock error using true values (it is not possible for a receiver to correct | ||||
| % %the receiver clock offset error at the observables level because it is required the | ||||
| % %decoding of the ephemeris data and solve the PVT equations) | ||||
| %  | ||||
| % SPEED_OF_LIGHT_M_S = 299792458.0;  | ||||
| %  | ||||
| % | ||||
| % SPEED_OF_LIGHT_M_S = 299792458.0; | ||||
| % | ||||
| % %find the reference satellite | ||||
| % [~,ref_sat_ch]=min(GNSS_observables.Pseudorange_m(:,min_idx+1)); | ||||
| % shift_time_s=GNSS_true_observables.Pseudorange_m(ref_sat_ch,:)/SPEED_OF_LIGHT_M_S-GPS_STARTOFFSET_s; | ||||
| %  | ||||
| %  | ||||
| % | ||||
| % | ||||
| % %Compute deltas if required and interpolate to measurement time | ||||
| % delta_true_psudorange_m=GNSS_true_observables.Pseudorange_m(1,:)-GNSS_true_observables.Pseudorange_m(2,:); | ||||
| % delta_true_interp_psudorange_m=interp1(GNSS_true_observables.RX_time(1,:)-shift_time_s, ... | ||||
| @@ -67,23 +92,23 @@ ylabel('[Hz]'); | ||||
| %     GNSS_true_observables.Carrier_phase_hz(1,:),GNSS_observables.RX_time(1,min_idx+1:end),'lineal','extrap'); | ||||
| % true_interp_acc_carrier_phase_ch2_hz=interp1(GNSS_true_observables.RX_time(1,:)-shift_time_s, ... | ||||
| %     GNSS_true_observables.Carrier_phase_hz(2,:),GNSS_observables.RX_time(2,min_idx+1:end),'lineal','extrap'); | ||||
| %  | ||||
| % | ||||
| % %Compute measurement errors | ||||
| %  | ||||
| % | ||||
| % delta_measured_psudorange_m=GNSS_observables.Pseudorange_m(1,min_idx+1:end)-GNSS_observables.Pseudorange_m(2,min_idx+1:end); | ||||
| % psudorange_error_m=delta_measured_psudorange_m-delta_true_interp_psudorange_m; | ||||
| % psudorange_rms_m=sqrt(sum(psudorange_error_m.^2)/length(psudorange_error_m)) | ||||
| %  | ||||
| % | ||||
| % acc_carrier_error_ch1_hz=GNSS_observables.Carrier_phase_hz(1,min_idx+1:end)-true_interp_acc_carrier_phase_ch1_hz... | ||||
| %     -GNSS_observables.Carrier_phase_hz(1,min_idx+1)+true_interp_acc_carrier_phase_ch1_hz(1); | ||||
| %  | ||||
| % | ||||
| % acc_phase_rms_ch1_hz=sqrt(sum(acc_carrier_error_ch1_hz.^2)/length(acc_carrier_error_ch1_hz)) | ||||
| %  | ||||
| % | ||||
| % acc_carrier_error_ch2_hz=GNSS_observables.Carrier_phase_hz(2,min_idx+1:end)-true_interp_acc_carrier_phase_ch2_hz... | ||||
| %     -GNSS_observables.Carrier_phase_hz(2,min_idx+1)+true_interp_acc_carrier_phase_ch2_hz(1); | ||||
| % acc_phase_rms_ch2_hz=sqrt(sum(acc_carrier_error_ch2_hz.^2)/length(acc_carrier_error_ch2_hz)) | ||||
| %  | ||||
| %  | ||||
| % | ||||
| % | ||||
| % %plot results | ||||
| % figure; | ||||
| % plot(GNSS_true_observables.RX_time(1,:),delta_true_psudorange_m,'g'); | ||||
| @@ -92,25 +117,25 @@ ylabel('[Hz]'); | ||||
| % title('TRUE vs. measured Pseudoranges [m]') | ||||
| % xlabel('TOW [s]') | ||||
| % ylabel('[m]'); | ||||
| %  | ||||
| % | ||||
| % figure; | ||||
| % plot(GNSS_observables.RX_time(1,min_idx+1:end),psudorange_error_m) | ||||
| % title('Pseudoranges error [m]') | ||||
| % xlabel('TOW [s]') | ||||
| % ylabel('[m]'); | ||||
| %  | ||||
| % | ||||
| % figure; | ||||
| % plot(GNSS_observables.RX_time(1,min_idx+1:end),acc_carrier_error_ch1_hz) | ||||
| % title('Accumulated carrier phase error CH1 [hz]') | ||||
| % xlabel('TOW [s]') | ||||
| % ylabel('[hz]'); | ||||
| %  | ||||
| % | ||||
| % figure; | ||||
| % plot(GNSS_observables.RX_time(1,min_idx+1:end),acc_carrier_error_ch2_hz) | ||||
| % title('Accumulated carrier phase error CH2 [hz]') | ||||
| % xlabel('TOW [s]') | ||||
| % ylabel('[hz]'); | ||||
| %  | ||||
| %  | ||||
| %  | ||||
| %  | ||||
| % | ||||
| % | ||||
| % | ||||
| % | ||||
|   | ||||
| @@ -1,130 +1,128 @@ | ||||
| % /*! | ||||
| %  * \file dll_pll_veml_read_tracking_dump.m | ||||
| %  * \brief Read GNSS-SDR Tracking dump binary file into MATLAB. | ||||
| %  * \author Luis Esteve, 2012. luis(at)epsilon-formacion.com | ||||
| %  * ------------------------------------------------------------------------- | ||||
| %  * | ||||
| %  * Copyright (C) 2010-2012  (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 <http://www.gnu.org/licenses/>. | ||||
| %  * | ||||
| %  * ------------------------------------------------------------------------- | ||||
| %  */          | ||||
| % Usage: dll_pll_veml_read_tracking_dump (filename, [count]) | ||||
| % | ||||
| % Opens GNSS-SDR tracking binary log file .dat and returns the contents | ||||
|  | ||||
| % Read GNSS-SDR Tracking dump binary file into MATLAB. | ||||
| % Luis Esteve, 2012. luis(at)epsilon-formacion.com | ||||
| % ------------------------------------------------------------------------- | ||||
| % | ||||
| % Copyright (C) 2010-2018  (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 <http://www.gnu.org/licenses/>. | ||||
| % | ||||
| % ------------------------------------------------------------------------- | ||||
| % | ||||
|  | ||||
| function [GNSS_tracking] = dll_pll_veml_read_tracking_dump (filename, count) | ||||
|   %% usage: dll_pll_veml_read_tracking_dump (filename, [count]) | ||||
|   %% | ||||
|   %% open GNSS-SDR tracking binary log file .dat and return the contents | ||||
|   %% | ||||
|  | ||||
|   m = nargchk (1,2,nargin); | ||||
|    | ||||
|   num_float_vars = 17; | ||||
|   num_unsigned_long_int_vars = 1; | ||||
|   num_double_vars = 1; | ||||
|   num_unsigned_int_vars = 1; | ||||
|    | ||||
|   if(~isempty(strfind(computer('arch'), '64'))) | ||||
|       % 64-bit computer | ||||
|       double_size_bytes = 8; | ||||
|       unsigned_long_int_size_bytes = 8; | ||||
|       float_size_bytes = 4; | ||||
|       unsigned_int_size_bytes = 4; | ||||
|   else | ||||
|       double_size_bytes = 8; | ||||
|       unsigned_long_int_size_bytes = 4; | ||||
|       float_size_bytes = 4; | ||||
|       unsigned_int_size_bytes = 4; | ||||
|   end | ||||
|    | ||||
|   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 + num_unsigned_int_vars*unsigned_int_size_bytes; | ||||
|    | ||||
|   bytes_shift = 0; | ||||
|          | ||||
|   if (m) | ||||
| m = nargchk (1,2,nargin); | ||||
|  | ||||
| num_float_vars = 17; | ||||
| num_unsigned_long_int_vars = 1; | ||||
| num_double_vars = 1; | ||||
| num_unsigned_int_vars = 1; | ||||
|  | ||||
| if(~isempty(strfind(computer('arch'), '64'))) | ||||
|     % 64-bit computer | ||||
|     double_size_bytes = 8; | ||||
|     unsigned_long_int_size_bytes = 8; | ||||
|     float_size_bytes = 4; | ||||
|     unsigned_int_size_bytes = 4; | ||||
| else | ||||
|     double_size_bytes = 8; | ||||
|     unsigned_long_int_size_bytes = 4; | ||||
|     float_size_bytes = 4; | ||||
|     unsigned_int_size_bytes = 4; | ||||
| end | ||||
|  | ||||
| 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 + num_unsigned_int_vars*unsigned_int_size_bytes; | ||||
|  | ||||
| bytes_shift = 0; | ||||
|  | ||||
| if (m) | ||||
|     usage (m); | ||||
|   end | ||||
| end | ||||
|  | ||||
|   if (nargin < 2) | ||||
| if (nargin < 2) | ||||
|     count = Inf; | ||||
|   end | ||||
|     %loops_counter = fread (f, count, 'uint32',4*12); | ||||
|   f = fopen (filename, 'rb'); | ||||
|   if (f < 0) | ||||
|   else | ||||
| 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; | ||||
|     bytes_shift = bytes_shift + float_size_bytes; | ||||
|     fseek(f,bytes_shift,'bof'); % move to next float | ||||
|     v2 = fread (f, count, 'float', skip_bytes_each_read - float_size_bytes); | ||||
|         bytes_shift = bytes_shift + float_size_bytes; | ||||
|     bytes_shift = bytes_shift + float_size_bytes; | ||||
|     fseek(f,bytes_shift,'bof'); % move to next float | ||||
|     v3 = fread (f, count, 'float', skip_bytes_each_read - float_size_bytes); | ||||
|         bytes_shift = bytes_shift + float_size_bytes; | ||||
|     bytes_shift = bytes_shift + float_size_bytes; | ||||
|     fseek(f,bytes_shift,'bof'); % move to next float | ||||
|     v4 = fread (f, count, 'float', skip_bytes_each_read - float_size_bytes); | ||||
|         bytes_shift = bytes_shift + float_size_bytes; | ||||
|     bytes_shift = bytes_shift + float_size_bytes; | ||||
|     fseek(f,bytes_shift,'bof'); % move to next float | ||||
|     v5 = fread (f, count, 'float', skip_bytes_each_read - float_size_bytes); | ||||
|         bytes_shift = bytes_shift + float_size_bytes; | ||||
|     bytes_shift = bytes_shift + float_size_bytes; | ||||
|     fseek(f,bytes_shift,'bof'); % move to next float | ||||
|     v6 = fread (f, count, 'float', skip_bytes_each_read - float_size_bytes); | ||||
|         bytes_shift = bytes_shift + float_size_bytes; | ||||
|     bytes_shift = bytes_shift + float_size_bytes; | ||||
|     fseek(f,bytes_shift,'bof'); % move to next float | ||||
|     v7 = fread (f, count, 'float', skip_bytes_each_read - float_size_bytes); | ||||
|         bytes_shift = bytes_shift + float_size_bytes; | ||||
|     bytes_shift = bytes_shift + float_size_bytes; | ||||
|     fseek(f,bytes_shift,'bof'); % move to next interleaved float | ||||
|     v8 = fread (f, count, 'long', skip_bytes_each_read - unsigned_long_int_size_bytes); | ||||
|         bytes_shift = bytes_shift + unsigned_long_int_size_bytes; | ||||
|     bytes_shift = bytes_shift + unsigned_long_int_size_bytes; | ||||
|     fseek(f,bytes_shift,'bof'); % move to next float | ||||
|     v9 = fread (f, count, 'float', skip_bytes_each_read - float_size_bytes); | ||||
|         bytes_shift = bytes_shift + float_size_bytes; | ||||
|     bytes_shift = bytes_shift + float_size_bytes; | ||||
|     fseek(f,bytes_shift,'bof'); % move to next float | ||||
|     v10 = fread (f, count, 'float', skip_bytes_each_read - float_size_bytes); | ||||
|         bytes_shift = bytes_shift + float_size_bytes; | ||||
|     bytes_shift = bytes_shift + float_size_bytes; | ||||
|     fseek(f,bytes_shift,'bof'); % move to next float | ||||
|     v11 = fread (f, count, 'float', skip_bytes_each_read - float_size_bytes); | ||||
|         bytes_shift = bytes_shift + float_size_bytes; | ||||
|     bytes_shift = bytes_shift + float_size_bytes; | ||||
|     fseek(f,bytes_shift,'bof'); % move to next float | ||||
|     v12 = fread (f, count, 'float', skip_bytes_each_read - float_size_bytes); | ||||
|         bytes_shift = bytes_shift + float_size_bytes; | ||||
|     bytes_shift = bytes_shift + float_size_bytes; | ||||
|     fseek(f,bytes_shift,'bof'); % move to next float | ||||
|     v13 = fread (f, count, 'float', skip_bytes_each_read - float_size_bytes); | ||||
|         bytes_shift = bytes_shift + float_size_bytes; | ||||
|     bytes_shift = bytes_shift + float_size_bytes; | ||||
|     fseek(f,bytes_shift,'bof'); % move to next float | ||||
|     v14 = fread (f, count, 'float', skip_bytes_each_read - float_size_bytes); | ||||
|         bytes_shift = bytes_shift + float_size_bytes; | ||||
|     bytes_shift = bytes_shift + float_size_bytes; | ||||
|     fseek(f,bytes_shift,'bof'); % move to next float | ||||
|     v15 = fread (f, count, 'float', skip_bytes_each_read - float_size_bytes); | ||||
|         bytes_shift = bytes_shift + float_size_bytes; | ||||
|     bytes_shift = bytes_shift + float_size_bytes; | ||||
|     fseek(f,bytes_shift,'bof'); % move to next float | ||||
|     v16 = fread (f, count, 'float', skip_bytes_each_read - float_size_bytes); | ||||
|         bytes_shift = bytes_shift + float_size_bytes; | ||||
|     bytes_shift = bytes_shift + float_size_bytes; | ||||
|     fseek(f,bytes_shift,'bof'); % move to next interleaved float | ||||
|     v17 = fread (f, count, 'float', skip_bytes_each_read - float_size_bytes); | ||||
|         bytes_shift = bytes_shift + float_size_bytes; | ||||
|     bytes_shift = bytes_shift + float_size_bytes; | ||||
|     fseek(f,bytes_shift,'bof'); % move to next float | ||||
|     v18 = fread (f, count, 'float', skip_bytes_each_read-float_size_bytes); | ||||
|         bytes_shift = bytes_shift + float_size_bytes; | ||||
|     bytes_shift = bytes_shift + float_size_bytes; | ||||
|     fseek(f,bytes_shift,'bof'); % move to next double | ||||
|     v19 = fread (f, count, 'double', skip_bytes_each_read - double_size_bytes);   | ||||
|         bytes_shift = bytes_shift + double_size_bytes; | ||||
|     v19 = fread (f, count, 'double', skip_bytes_each_read - double_size_bytes); | ||||
|     bytes_shift = bytes_shift + double_size_bytes; | ||||
|     fseek(f,bytes_shift,'bof'); % move to next unsigned int | ||||
|     v20 = fread (f, count, 'uint', skip_bytes_each_read - unsigned_int_size_bytes); | ||||
|     fclose (f); | ||||
| @@ -149,5 +147,5 @@ function [GNSS_tracking] = dll_pll_veml_read_tracking_dump (filename, count) | ||||
|     GNSS_tracking.var1 = v18; | ||||
|     GNSS_tracking.var2 = v19; | ||||
|     GNSS_tracking.PRN = v20; | ||||
|   end | ||||
|    | ||||
| end | ||||
|  | ||||
|   | ||||
| @@ -1,153 +0,0 @@ | ||||
| % /*! | ||||
| %  * \file galileo_e1_dll_pll_veml_read_tracking_dump.m | ||||
| %  * \brief Read GNSS-SDR Tracking dump binary file into MATLAB. | ||||
| %  * \author Luis Esteve, 2012. luis(at)epsilon-formacion.com | ||||
| %  * ------------------------------------------------------------------------- | ||||
| %  * | ||||
| %  * Copyright (C) 2010-2012  (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 <http://www.gnu.org/licenses/>. | ||||
| %  * | ||||
| %  * ------------------------------------------------------------------------- | ||||
| %  */          | ||||
|  | ||||
| function [GNSS_tracking] = galileo_e1_dll_pll_veml_read_tracking_dump (filename, count) | ||||
|   %% usage: galileo_e1_dll_pll_veml_read_tracking_dump (filename, [count]) | ||||
|   %% | ||||
|   %% open GNSS-SDR tracking binary log file .dat and return the contents | ||||
|   %% | ||||
|  | ||||
|   m = nargchk (1,2,nargin); | ||||
|    | ||||
|   num_float_vars = 17; | ||||
|   num_unsigned_long_int_vars = 1; | ||||
|   num_double_vars = 1; | ||||
|   num_unsigned_int_vars = 1; | ||||
|    | ||||
|   if(~isempty(strfind(computer('arch'), '64'))) | ||||
|       % 64-bit computer | ||||
|       double_size_bytes = 8; | ||||
|       unsigned_long_int_size_bytes = 8; | ||||
|       float_size_bytes = 4; | ||||
|       unsigned_int_size_bytes = 4; | ||||
|   else | ||||
|       double_size_bytes = 8; | ||||
|       unsigned_long_int_size_bytes = 4; | ||||
|       float_size_bytes = 4; | ||||
|       unsigned_int_size_bytes = 4; | ||||
|   end | ||||
|    | ||||
|   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 + num_unsigned_int_vars*unsigned_int_size_bytes; | ||||
|    | ||||
|   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 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 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 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 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 float | ||||
|     v6 = 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 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, 'long', 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 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 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 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 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 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 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 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 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, 'float', skip_bytes_each_read - float_size_bytes); | ||||
|         bytes_shift = bytes_shift + float_size_bytes; | ||||
|     fseek(f,bytes_shift,'bof'); % move to next float | ||||
|     v18 = 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 double | ||||
|     v19 = fread (f, count, 'double', skip_bytes_each_read - double_size_bytes);   | ||||
|         bytes_shift = bytes_shift + double_size_bytes; | ||||
|     fseek(f,bytes_shift,'bof'); % move to next unsigned int | ||||
|     v20 = fread (f, count, 'uint', skip_bytes_each_read - unsigned_int_size_bytes); | ||||
|     fclose (f); | ||||
|      | ||||
|     GNSS_tracking.VE = v1; | ||||
|     GNSS_tracking.E = v2; | ||||
|     GNSS_tracking.P = v3; | ||||
|     GNSS_tracking.L = v4; | ||||
|     GNSS_tracking.VL = v5; | ||||
|     GNSS_tracking.prompt_I = v6; | ||||
|     GNSS_tracking.prompt_Q = v7; | ||||
|     GNSS_tracking.PRN_start_sample = v8; | ||||
|     GNSS_tracking.acc_carrier_phase_rad = v9; | ||||
|     GNSS_tracking.carrier_doppler_hz = v10; | ||||
|     GNSS_tracking.code_freq_hz = v11; | ||||
|     GNSS_tracking.carr_error = v12; | ||||
|     GNSS_tracking.carr_nco = v13; | ||||
|     GNSS_tracking.code_error = v14; | ||||
|     GNSS_tracking.code_nco = v15; | ||||
|     GNSS_tracking.CN0_SNV_dB_Hz = v16; | ||||
|     GNSS_tracking.carrier_lock_test = v17; | ||||
|     GNSS_tracking.var1 = v18; | ||||
|     GNSS_tracking.var2 = v19; | ||||
|     GNSS_tracking.PRN = v20; | ||||
|   end | ||||
|    | ||||
| @@ -1,8 +1,8 @@ | ||||
| function [phi, lambda, h] = cart2geo(X, Y, Z, i) | ||||
| %CART2GEO Conversion of Cartesian coordinates (X,Y,Z) to geographical | ||||
| %coordinates (phi, lambda, h) on a selected reference ellipsoid. | ||||
| % CART2GEO Conversion of Cartesian coordinates (X,Y,Z) to geographical | ||||
| % coordinates (phi, lambda, h) on a selected reference ellipsoid. | ||||
| % | ||||
| %[phi, lambda, h] = cart2geo(X, Y, Z, i); | ||||
| % [phi, lambda, h] = cart2geo(X, Y, Z, i); | ||||
| % | ||||
| %   Choices i of Reference Ellipsoid for Geographical Coordinates | ||||
| %          	  1. International Ellipsoid 1924 | ||||
| @@ -11,12 +11,9 @@ function [phi, lambda, h] = cart2geo(X, Y, Z, i) | ||||
| %	          4. Geodetic Reference System 1980 | ||||
| %	          5. World Geodetic System 1984 | ||||
|  | ||||
| %Kai Borre 10-13-98 | ||||
| %Copyright (c) by Kai Borre | ||||
| %Revision: 1.0   Date: 1998/10/23   | ||||
| % | ||||
| % CVS record: | ||||
| % $Id: cart2geo.m,v 1.1.2.3 2007/01/29 15:22:49 dpl Exp $ | ||||
| % Kai Borre 10-13-98 | ||||
| % Copyright (c) by Kai Borre | ||||
| % Revision: 1.0   Date: 1998/10/23 | ||||
| %========================================================================== | ||||
|  | ||||
| a = [6378388 6378160 6378135 6378137 6378137]; | ||||
| @@ -30,16 +27,16 @@ phi = atan(Z/((sqrt(X^2+Y^2)*(1-(2-f(i)))*f(i)))); | ||||
| h = 0.1; oldh = 0; | ||||
| iterations = 0; | ||||
| while abs(h-oldh) > 1.e-12 | ||||
|    oldh = h; | ||||
|    N = c/sqrt(1+ex2*cos(phi)^2); | ||||
|    phi = atan(Z/((sqrt(X^2+Y^2)*(1-(2-f(i))*f(i)*N/(N+h))))); | ||||
|    h = sqrt(X^2+Y^2)/cos(phi)-N; | ||||
|     | ||||
|    iterations = iterations + 1; | ||||
|    if iterations > 100 | ||||
|        fprintf('Failed to approximate h with desired precision. h-oldh: %e.\n', h-oldh); | ||||
|        break; | ||||
|    end    | ||||
|     oldh = h; | ||||
|     N = c/sqrt(1+ex2*cos(phi)^2); | ||||
|     phi = atan(Z/((sqrt(X^2+Y^2)*(1-(2-f(i))*f(i)*N/(N+h))))); | ||||
|     h = sqrt(X^2+Y^2)/cos(phi)-N; | ||||
|      | ||||
|     iterations = iterations + 1; | ||||
|     if iterations > 100 | ||||
|         fprintf('Failed to approximate h with desired precision. h-oldh: %e.\n', h-oldh); | ||||
|         break; | ||||
|     end | ||||
| end | ||||
|  | ||||
| phi = phi*180/pi; | ||||
| @@ -57,4 +54,5 @@ lambda = lambda*180/pi; | ||||
| %fprintf('\n     phi =%3.0f %3.0f %8.5f',b(1),b(2),b(3)) | ||||
| %fprintf('\n  lambda =%3.0f %3.0f %8.5f',l(1),l(2),l(3)) | ||||
| %fprintf('\n       h =%14.3f\n',h) | ||||
|  | ||||
| %%%%%%%%%%%%%% end cart2geo.m %%%%%%%%%%%%%%%%%%% | ||||
|   | ||||
| @@ -1,7 +1,7 @@ | ||||
| function [E, N, U] = cart2utm(X, Y, Z, zone) | ||||
| %CART2UTM  Transformation of (X,Y,Z) to (N,E,U) in UTM, zone 'zone'. | ||||
| % CART2UTM  Transformation of (X,Y,Z) to (N,E,U) in UTM, zone 'zone'. | ||||
| % | ||||
| %[E, N, U] = cart2utm(X, Y, Z, zone); | ||||
| % [E, N, U] = cart2utm(X, Y, Z, zone); | ||||
| % | ||||
| %   Inputs: | ||||
| %       X,Y,Z       - Cartesian coordinates. Coordinates are referenced | ||||
| @@ -12,19 +12,16 @@ function [E, N, U] = cart2utm(X, Y, Z, zone) | ||||
| %   Outputs: | ||||
| %      E, N, U      - UTM coordinates (Easting, Northing, Uping) | ||||
|  | ||||
| %Kai Borre -11-1994 | ||||
| %Copyright (c) by Kai Borre | ||||
| % | ||||
| % CVS record: | ||||
| % $Id: cart2utm.m,v 1.1.1.1.2.6 2007/01/30 09:45:12 dpl Exp $ | ||||
| % Kai Borre -11-1994 | ||||
| % Copyright (c) by Kai Borre | ||||
|  | ||||
| %This implementation is based upon | ||||
| %O. Andersson & K. Poder (1981) Koordinattransformationer | ||||
| % This implementation is based upon | ||||
| % O. Andersson & K. Poder (1981) Koordinattransformationer | ||||
| %  ved Geod\ae{}tisk Institut. Landinspekt\oe{}ren | ||||
| %  Vol. 30: 552--571 and Vol. 31: 76 | ||||
| % | ||||
| %An excellent, general reference (KW) is | ||||
| %R. Koenig & K.H. Weise (1951) Mathematische Grundlagen der | ||||
| % An excellent, general reference (KW) is | ||||
| % R. Koenig & K.H. Weise (1951) Mathematische Grundlagen der | ||||
| %  h\"oheren Geod\"asie und Kartographie. | ||||
| %  Erster Band, Springer Verlag | ||||
|  | ||||
| @@ -52,8 +49,8 @@ c     = a * sqrt(1+ex2); | ||||
| vec   = [X; Y; Z-4.5]; | ||||
| alpha = .756e-6; | ||||
| R     = [ 1       -alpha  0; | ||||
|             alpha	1       0; | ||||
|             0       0       1]; | ||||
|     alpha	1       0; | ||||
|     0       0       1]; | ||||
| trans = [89.5; 93.8; 127.6]; | ||||
| scale = 0.9999988; | ||||
| v     = scale*R*vec + trans;	  % coordinate vector in ED50 | ||||
| @@ -68,78 +65,78 @@ while abs(U-oldU) > 1.e-4 | ||||
|     N1   = c/sqrt(1+ex2*(cos(B))^2); | ||||
|     B    = atan2(v(3)/((1-f)^2*N1+U), norm(v(1:2))/(N1+U) ); | ||||
|     U    = norm(v(1:2))/cos(B)-N1; | ||||
| 	 | ||||
|    iterations = iterations + 1; | ||||
|    if iterations > 100 | ||||
|        fprintf('Failed to approximate U with desired precision. U-oldU: %e.\n', U-oldU); | ||||
|        break; | ||||
|    end	 | ||||
|      | ||||
|     iterations = iterations + 1; | ||||
|     if iterations > 100 | ||||
|         fprintf('Failed to approximate U with desired precision. U-oldU: %e.\n', U-oldU); | ||||
|         break; | ||||
|     end | ||||
| end | ||||
|  | ||||
| %Normalized meridian quadrant, KW p. 50 (96), p. 19 (38b), p. 5 (21) | ||||
| % Normalized meridian quadrant, KW p. 50 (96), p. 19 (38b), p. 5 (21) | ||||
| m0  = 0.0004; | ||||
| n   = f / (2-f); | ||||
| m   = n^2 * (1/4 + n*n/64); | ||||
| w   = (a*(-n-m0+m*(1-m0))) / (1+n); | ||||
| Q_n = a + w; | ||||
|  | ||||
| %Easting and longitude of central meridian | ||||
| % Easting and longitude of central meridian | ||||
| E0      = 500000; | ||||
| L0      = (zone-30)*6 - 3; | ||||
|  | ||||
| %Check tolerance for reverse transformation | ||||
| % Check tolerance for reverse transformation | ||||
| tolutm  = pi/2 * 1.2e-10 * Q_n; | ||||
| tolgeo  = 0.000040; | ||||
|  | ||||
| %Coefficients of trigonometric series | ||||
| % Coefficients of trigonometric series | ||||
|  | ||||
| %ellipsoidal to spherical geographical, KW p. 186--187, (51)-(52) | ||||
| % ellipsoidal to spherical geographical, KW p. 186--187, (51)-(52) | ||||
| % bg[1] = n*(-2 + n*(2/3    + n*(4/3	  + n*(-82/45)))); | ||||
| % bg[2] = n^2*(5/3    + n*(-16/15 + n*(-13/9))); | ||||
| % bg[3] = n^3*(-26/15 + n*34/21); | ||||
| % bg[4] = n^4*1237/630; | ||||
|  | ||||
| %spherical to ellipsoidal geographical, KW p. 190--191, (61)-(62) | ||||
| % spherical to ellipsoidal geographical, KW p. 190--191, (61)-(62) | ||||
| % gb[1] = n*(2	      + n*(-2/3    + n*(-2	 + n*116/45))); | ||||
| % gb[2] = n^2*(7/3    + n*(-8/5 + n*(-227/45))); | ||||
| % gb[3] = n^3*(56/15 + n*(-136/35)); | ||||
| % gb[4] = n^4*4279/630; | ||||
|  | ||||
| %spherical to ellipsoidal N, E, KW p. 196, (69) | ||||
| % gtu[1] = n*(1/2	  + n*(-2/3    + n*(5/16     + n*41/180))); | ||||
| % gtu[2] = n^2*(13/48	  + n*(-3/5 + n*557/1440)); | ||||
| % gtu[3] = n^3*(61/240	 + n*(-103/140)); | ||||
| % gtu[4] = n^4*49561/161280; | ||||
| % spherical to ellipsoidal N, E, KW p. 196, (69) | ||||
| %  gtu[1] = n*(1/2	  + n*(-2/3    + n*(5/16     + n*41/180))); | ||||
| %  gtu[2] = n^2*(13/48	  + n*(-3/5 + n*557/1440)); | ||||
| %  gtu[3] = n^3*(61/240	 + n*(-103/140)); | ||||
| %  gtu[4] = n^4*49561/161280; | ||||
|  | ||||
| %ellipsoidal to spherical N, E, KW p. 194, (65) | ||||
| % utg[1] = n*(-1/2	   + n*(2/3    + n*(-37/96	+ n*1/360))); | ||||
| % utg[2] = n^2*(-1/48	  + n*(-1/15 + n*437/1440)); | ||||
| % utg[3] = n^3*(-17/480 + n*37/840); | ||||
| % utg[4] = n^4*(-4397/161280); | ||||
| % ellipsoidal to spherical N, E, KW p. 194, (65) | ||||
| %  utg[1] = n*(-1/2	   + n*(2/3    + n*(-37/96	+ n*1/360))); | ||||
| %  utg[2] = n^2*(-1/48	  + n*(-1/15 + n*437/1440)); | ||||
| %  utg[3] = n^3*(-17/480 + n*37/840); | ||||
| %  utg[4] = n^4*(-4397/161280); | ||||
|  | ||||
| %With f = 1/297 we get | ||||
| % With f = 1/297 we get | ||||
|  | ||||
| bg = [-3.37077907e-3; | ||||
|        4.73444769e-6; | ||||
|       -8.29914570e-9; | ||||
|        1.58785330e-11]; | ||||
|     4.73444769e-6; | ||||
|     -8.29914570e-9; | ||||
|     1.58785330e-11]; | ||||
|  | ||||
| gb = [ 3.37077588e-3; | ||||
|        6.62769080e-6; | ||||
|        1.78718601e-8; | ||||
|        5.49266312e-11]; | ||||
|     6.62769080e-6; | ||||
|     1.78718601e-8; | ||||
|     5.49266312e-11]; | ||||
|  | ||||
| gtu = [ 8.41275991e-4; | ||||
|         7.67306686e-7; | ||||
|         1.21291230e-9; | ||||
|         2.48508228e-12]; | ||||
|     7.67306686e-7; | ||||
|     1.21291230e-9; | ||||
|     2.48508228e-12]; | ||||
|  | ||||
| utg = [-8.41276339e-4; | ||||
|        -5.95619298e-8; | ||||
|        -1.69485209e-10; | ||||
|        -2.20473896e-13]; | ||||
|     -5.95619298e-8; | ||||
|     -1.69485209e-10; | ||||
|     -2.20473896e-13]; | ||||
|  | ||||
| %Ellipsoidal latitude, longitude to spherical latitude, longitude | ||||
| % Ellipsoidal latitude, longitude to spherical latitude, longitude | ||||
| neg_geo = 'FALSE'; | ||||
|  | ||||
| if B < 0 | ||||
| @@ -152,7 +149,7 @@ Bg_r    = Bg_r + res_clensin; | ||||
| L0      = L0*pi / 180; | ||||
| Lg_r    = L - L0; | ||||
|  | ||||
| %Spherical latitude, longitude to complementary spherical latitude | ||||
| % Spherical latitude, longitude to complementary spherical latitude | ||||
| %  i.e. spherical N, E | ||||
| cos_BN  = cos(Bg_r); | ||||
| Np      = atan2(sin(Bg_r), cos(Lg_r)*cos_BN); | ||||
|   | ||||
| @@ -1,7 +1,7 @@ | ||||
| function corrTime = check_t(time) | ||||
| %CHECK_T accounting for beginning or end of week crossover. | ||||
| % CHECK_T accounting for beginning or end of week crossover. | ||||
| % | ||||
| %corrTime = check_t(time); | ||||
| % corrTime = check_t(time); | ||||
| % | ||||
| %   Inputs: | ||||
| %       time        - time in seconds | ||||
| @@ -9,11 +9,8 @@ function corrTime = check_t(time) | ||||
| %   Outputs: | ||||
| %       corrTime    - corrected time (seconds) | ||||
|  | ||||
| %Kai Borre 04-01-96 | ||||
| %Copyright (c) by Kai Borre | ||||
| % | ||||
| % CVS record: | ||||
| % $Id: check_t.m,v 1.1.1.1.2.4 2006/08/22 13:45:59 dpl Exp $ | ||||
| % Kai Borre 04-01-96 | ||||
| % Copyright (c) by Kai Borre | ||||
| %========================================================================== | ||||
|  | ||||
| half_week = 302400;     % seconds | ||||
| @@ -24,5 +21,6 @@ if time > half_week | ||||
|     corrTime = time - 2*half_week; | ||||
| elseif time < -half_week | ||||
|     corrTime = time + 2*half_week; | ||||
| end | ||||
| %%%%%%% end check_t.m  %%%%%%%%%%%%%%%%% | ||||
| end | ||||
|  | ||||
| %%%%%%% end check_t.m  %%%%%%%%%%%%%%%%% | ||||
|   | ||||
| @@ -1,14 +1,12 @@ | ||||
| function [re, im] = clksin(ar, degree, arg_real, arg_imag) | ||||
| %Clenshaw summation of sinus with complex argument | ||||
| %[re, im] = clksin(ar, degree, arg_real, arg_imag); | ||||
| % Clenshaw summation of sinus with complex argument | ||||
| % [re, im] = clksin(ar, degree, arg_real, arg_imag); | ||||
|  | ||||
| % Written by Kai Borre | ||||
| % December 20, 1995 | ||||
| % | ||||
| % See also WGS2UTM or CART2UTM | ||||
| % | ||||
| % CVS record: | ||||
| % $Id: clksin.m,v 1.1.1.1.2.4 2006/08/22 13:45:59 dpl Exp $ | ||||
| %========================================================================== | ||||
|  | ||||
| sin_arg_r   = sin(arg_real); | ||||
|   | ||||
| @@ -1,15 +1,12 @@ | ||||
| function  result = clsin(ar, degree, argument) | ||||
| %Clenshaw summation of sinus of argument. | ||||
| % Clenshaw summation of sinus of argument. | ||||
| % | ||||
| %result = clsin(ar, degree, argument); | ||||
| % result = clsin(ar, degree, argument); | ||||
|  | ||||
| % Written by Kai Borre | ||||
| % December 20, 1995 | ||||
| % | ||||
| % See also WGS2UTM or CART2UTM | ||||
| % | ||||
| % CVS record: | ||||
| % $Id: clsin.m,v 1.1.1.1.2.4 2006/08/22 13:45:59 dpl Exp $ | ||||
| %========================================================================== | ||||
|  | ||||
| cos_arg = 2 * cos(argument); | ||||
| @@ -17,10 +14,11 @@ hr1     = 0; | ||||
| hr      = 0; | ||||
|  | ||||
| for t = degree : -1 : 1 | ||||
|    hr2 = hr1; | ||||
|    hr1 = hr; | ||||
|    hr  = ar(t) + cos_arg*hr1 - hr2; | ||||
|     hr2 = hr1; | ||||
|     hr1 = hr; | ||||
|     hr  = ar(t) + cos_arg*hr1 - hr2; | ||||
| end | ||||
|  | ||||
| result = hr * sin(argument); | ||||
| %%%%%%%%%%%%%%%%%%%%%%% end clsin.m  %%%%%%%%%%%%%%%%%%%%% | ||||
| result = hr * sin(argument); | ||||
|  | ||||
| %%%%%%%%%%%%%%%%%%%%%%% end clsin.m  %%%%%%%%%%%%%%%%%%%%% | ||||
|   | ||||
| @@ -1,6 +1,6 @@ | ||||
| function dmsOutput = deg2dms(deg) | ||||
| %DEG2DMS  Conversion of degrees to degrees, minutes, and seconds. | ||||
| %The output format (dms format) is: (degrees*100 + minutes + seconds/100) | ||||
| % DEG2DMS  Conversion of degrees to degrees, minutes, and seconds. | ||||
| % The output format (dms format) is: (degrees*100 + minutes + seconds/100) | ||||
|  | ||||
| % Written by Kai Borre | ||||
| % February 7, 2001 | ||||
| @@ -11,7 +11,7 @@ neg_arg = false; | ||||
| if deg < 0 | ||||
|     % Only positive numbers should be used while spliting into deg/min/sec | ||||
|     deg     = -deg; | ||||
|     neg_arg = true;     | ||||
|     neg_arg = true; | ||||
| end | ||||
|  | ||||
| %%% Split degrees minutes and seconds | ||||
| @@ -40,4 +40,4 @@ if neg_arg == true | ||||
|     dmsOutput = -dmsOutput; | ||||
| end | ||||
|  | ||||
| %%%%%%%%%%%%%%%%%%% end deg2dms.m %%%%%%%%%%%%%%%% | ||||
| %%%%%%%%%%%%%%%%%%% end deg2dms.m %%%%%%%%%%%%%%%% | ||||
|   | ||||
| @@ -1,12 +1,12 @@ | ||||
|  | ||||
| function deg = dms2deg(dms) | ||||
| %DMS2DEG  Conversion of  degrees, minutes, and seconds to degrees. | ||||
| % DMS2DEG  Conversion of  degrees, minutes, and seconds to degrees. | ||||
|  | ||||
| % Written by Javier Arribas 2011 | ||||
| % December 7, 2011 | ||||
|  | ||||
| %if (dms(1)>=0) | ||||
|     deg=dms(1)+dms(2)/60+dms(3)/3600; | ||||
| deg=dms(1)+dms(2)/60+dms(3)/3600; | ||||
| %else | ||||
|     %deg=dms(1)-dms(2)/60-dms(3)/3600; | ||||
| %deg=dms(1)-dms(2)/60-dms(3)/3600; | ||||
| %end | ||||
|   | ||||
| @@ -1,6 +1,6 @@ | ||||
| function [dout,mout,sout] = dms2mat(dms,n) | ||||
|  | ||||
| %DMS2MAT Converts a dms vector format to a [deg min sec] matrix | ||||
| % DMS2MAT Converts a dms vector format to a [deg min sec] matrix | ||||
| % | ||||
| %  [d,m,s] = DMS2MAT(dms) converts a dms vector format to a | ||||
| %  deg:min:sec matrix.  The vector format is dms = 100*deg + min + sec/100. | ||||
| @@ -19,7 +19,7 @@ function [dout,mout,sout] = dms2mat(dms,n) | ||||
|  | ||||
| %  Copyright 1996-2002 Systems Planning and Analysis, Inc. and The MathWorks, Inc. | ||||
| %  Written by:  E. Byrns, E. Brown | ||||
| %   $Revision: 1.10 $    $Date: 2002/03/20 21:25:06 $ | ||||
| %  Revision: 1.10    $Date: 2002/03/20 21:25:06 | ||||
|  | ||||
|  | ||||
| if nargin == 0 | ||||
| @@ -71,7 +71,7 @@ if ~isempty(indx);   d(indx) = d(indx) + 1;   m(indx) =  m(indx) - 60;   end | ||||
|  | ||||
| if any(m > 59) | any (m < 0) | ||||
|     error('Minutes must be >= 0 and <= 59') | ||||
|  | ||||
|      | ||||
| elseif any(s >= 60) | any( s < 0) | ||||
|     error('Seconds must be >= 0 and < 60') | ||||
| end | ||||
|   | ||||
| @@ -1,8 +1,8 @@ | ||||
| function X_sat_rot = e_r_corr(traveltime, X_sat) | ||||
| %E_R_CORR  Returns rotated satellite ECEF coordinates due to Earth | ||||
| %rotation during signal travel time | ||||
| % E_R_CORR  Returns rotated satellite ECEF coordinates due to Earth | ||||
| % rotation during signal travel time | ||||
| % | ||||
| %X_sat_rot = e_r_corr(traveltime, X_sat); | ||||
| % X_sat_rot = e_r_corr(traveltime, X_sat); | ||||
| % | ||||
| %   Inputs: | ||||
| %       travelTime  - signal travel time | ||||
| @@ -11,11 +11,8 @@ function X_sat_rot = e_r_corr(traveltime, X_sat) | ||||
| %   Outputs: | ||||
| %       X_sat_rot   - rotated satellite's coordinates (ECEF) | ||||
|  | ||||
| %Written by Kai Borre | ||||
| %Copyright (c) by Kai Borre | ||||
| % | ||||
| % CVS record: | ||||
| % $Id: e_r_corr.m,v 1.1.1.1.2.6 2006/08/22 13:45:59 dpl Exp $ | ||||
| % Written by Kai Borre | ||||
| % Copyright (c) by Kai Borre | ||||
| %========================================================================== | ||||
|  | ||||
| Omegae_dot = 7.292115147e-5;           %  rad/sec | ||||
| @@ -25,10 +22,10 @@ omegatau   = Omegae_dot * traveltime; | ||||
|  | ||||
| %--- Make a rotation matrix ----------------------------------------------- | ||||
| R3 = [ cos(omegatau)    sin(omegatau)   0; | ||||
|       -sin(omegatau)    cos(omegatau)   0; | ||||
|        0                0               1]; | ||||
|     -sin(omegatau)    cos(omegatau)   0; | ||||
|     0                0               1]; | ||||
|  | ||||
| %--- Do the rotation ------------------------------------------------------ | ||||
| X_sat_rot = R3 * X_sat; | ||||
|  | ||||
| %%%%%%%% end e_r_corr.m %%%%%%%%%%%%%%%%%%%% | ||||
| %%%%%%%% end e_r_corr.m %%%%%%%%%%%%%%%%%%%% | ||||
|   | ||||
| @@ -1,17 +1,17 @@ | ||||
| function utmZone = findUtmZone(latitude, longitude) | ||||
| %Function finds the UTM zone number for given longitude and latitude. | ||||
| %The longitude value must be between -180 (180 degree West) and 180 (180 | ||||
| %degree East) degree. The latitude must be within -80 (80 degree South) and | ||||
| %84 (84 degree North). | ||||
| % Function finds the UTM zone number for given longitude and latitude. | ||||
| % The longitude value must be between -180 (180 degree West) and 180 (180 | ||||
| % degree East) degree. The latitude must be within -80 (80 degree South) and | ||||
| % 84 (84 degree North). | ||||
| % | ||||
| %utmZone = findUtmZone(latitude, longitude); | ||||
| % utmZone = findUtmZone(latitude, longitude); | ||||
| % | ||||
| %Latitude and longitude must be in decimal degrees (e.g. 15.5 degrees not | ||||
| %15 deg 30 min).  | ||||
| % Latitude and longitude must be in decimal degrees (e.g. 15.5 degrees not | ||||
| % 15 deg 30 min). | ||||
|  | ||||
| %-------------------------------------------------------------------------- | ||||
| %                           SoftGNSS v3.0 | ||||
| %  | ||||
| % | ||||
| % Copyright (C) Darius Plausinaitis | ||||
| % Written by Darius Plausinaitis | ||||
| %-------------------------------------------------------------------------- | ||||
| @@ -31,9 +31,6 @@ function utmZone = findUtmZone(latitude, longitude) | ||||
| %USA. | ||||
| %========================================================================== | ||||
|  | ||||
| %CVS record: | ||||
| %$Id: findUtmZone.m,v 1.1.2.2 2006/08/22 13:45:59 dpl Exp $ | ||||
|  | ||||
| %% Check value bounds ===================================================== | ||||
|  | ||||
| if ((longitude > 180) || (longitude < -180)) | ||||
| @@ -62,11 +59,11 @@ if (latitude > 72) | ||||
|         utmZone = 35; | ||||
|     elseif ((longitude >= 33) && (longitude < 42)) | ||||
|         utmZone = 37; | ||||
|     end     | ||||
|     end | ||||
|      | ||||
| elseif ((latitude >= 56) && (latitude < 64)) | ||||
|     % Correction for zone 32 | ||||
|     if ((longitude >= 3) && (longitude < 12)) | ||||
|         utmZone = 32; | ||||
|     end | ||||
| end | ||||
| end | ||||
|   | ||||
| @@ -1,13 +1,13 @@ | ||||
| function [X, Y, Z] = geo2cart(phi, lambda, h, i) | ||||
| %GEO2CART Conversion of geographical coordinates (phi, lambda, h) to | ||||
| %Cartesian coordinates (X, Y, Z).  | ||||
| % GEO2CART Conversion of geographical coordinates (phi, lambda, h) to | ||||
| % Cartesian coordinates (X, Y, Z). | ||||
| % | ||||
| %[X, Y, Z] = geo2cart(phi, lambda, h, i); | ||||
| % [X, Y, Z] = geo2cart(phi, lambda, h, i); | ||||
| % | ||||
| %Format for phi and lambda: [degrees minutes seconds]. | ||||
| %h, X, Y, and Z are in meters. | ||||
| % Format for phi and lambda: [degrees minutes seconds]. | ||||
| % h, X, Y, and Z are in meters. | ||||
| % | ||||
| %Choices i of Reference Ellipsoid | ||||
| % Choices i of Reference Ellipsoid | ||||
| %   1. International Ellipsoid 1924 | ||||
| %   2. International Ellipsoid 1967 | ||||
| %   3. World Geodetic System 1972 | ||||
| @@ -16,18 +16,15 @@ function [X, Y, Z] = geo2cart(phi, lambda, h, i) | ||||
| % | ||||
| %   Inputs: | ||||
| %       phi       - geocentric latitude (format [degrees minutes seconds]) | ||||
| %       lambda    - geocentric longitude (format [degrees minutes seconds])  | ||||
| %       lambda    - geocentric longitude (format [degrees minutes seconds]) | ||||
| %       h         - height | ||||
| %       i         - reference ellipsoid type | ||||
| % | ||||
| %   Outputs: | ||||
| %       X, Y, Z   - Cartesian coordinates (meters) | ||||
|  | ||||
| %Kai Borre 10-13-98 | ||||
| %Copyright (c) by Kai Borre | ||||
| % | ||||
| % CVS record: | ||||
| % $Id: geo2cart.m,v 1.1.2.7 2006/08/22 13:45:59 dpl Exp $ | ||||
| % Kai Borre 10-13-98 | ||||
| % Copyright (c) by Kai Borre | ||||
| %========================================================================== | ||||
|  | ||||
| b   = phi(1) + phi(2)/60 + phi(3)/3600; | ||||
| @@ -44,5 +41,6 @@ N   = c / sqrt(1 + ex2*cos(b)^2); | ||||
|  | ||||
| X   = (N+h) * cos(b) * cos(l); | ||||
| Y   = (N+h) * cos(b) * sin(l); | ||||
| Z   = ((1-f(i))^2*N + h) * sin(b); | ||||
| Z   = ((1-f(i))^2*N + h) * sin(b); | ||||
|  | ||||
| %%%%%%%%%%%%%% end geo2cart.m  %%%%%%%%%%%%%%%%%%%%%%%% | ||||
|   | ||||
| @@ -1,7 +1,7 @@ | ||||
| function [pos, el, az, dop] = leastSquarePos(satpos, obs, settings) | ||||
| %Function calculates the Least Square Solution. | ||||
| % Function calculates the Least Square Solution. | ||||
| % | ||||
| %[pos, el, az, dop] = leastSquarePos(satpos, obs, settings); | ||||
| % [pos, el, az, dop] = leastSquarePos(satpos, obs, settings); | ||||
| % | ||||
| %   Inputs: | ||||
| %       satpos      - Satellites positions (in ECEF system: [X; Y; Z;] - | ||||
| @@ -12,8 +12,8 @@ function [pos, el, az, dop] = leastSquarePos(satpos, obs, settings) | ||||
| %       settings    - receiver settings | ||||
| % | ||||
| %   Outputs: | ||||
| %       pos         - receiver position and receiver clock error  | ||||
| %                   (in ECEF system: [X, Y, Z, dt])  | ||||
| %       pos         - receiver position and receiver clock error | ||||
| %                   (in ECEF system: [X, Y, Z, dt]) | ||||
| %       el          - Satellites elevation angles (degrees) | ||||
| %       az          - Satellites azimuth angles (degrees) | ||||
| %       dop         - Dilutions Of Precision ([GDOP PDOP HDOP VDOP TDOP]) | ||||
| @@ -24,9 +24,6 @@ function [pos, el, az, dop] = leastSquarePos(satpos, obs, settings) | ||||
| %Based on Kai Borre | ||||
| %Copyright (c) by Kai Borre | ||||
| %Updated by Darius Plausinaitis, Peter Rinder and Nicolaj Bertelsen | ||||
| % | ||||
| % CVS record: | ||||
| % $Id: leastSquarePos.m,v 1.1.2.12 2006/08/22 13:45:59 dpl Exp $ | ||||
| %========================================================================== | ||||
|  | ||||
| %=== Initialization ======================================================= | ||||
| @@ -44,7 +41,7 @@ el      = az; | ||||
|  | ||||
| %=== Iteratively find receiver position =================================== | ||||
| for iter = 1:nmbOfIterations | ||||
|  | ||||
|      | ||||
|     for i = 1:nmbOfSatellites | ||||
|         if iter == 1 | ||||
|             %--- Initialize variables at the first iteration -------------- | ||||
| @@ -53,41 +50,41 @@ for iter = 1:nmbOfIterations | ||||
|         else | ||||
|             %--- Update equations ----------------------------------------- | ||||
|             rho2 = (X(1, i) - pos(1))^2 + (X(2, i) - pos(2))^2 + ... | ||||
|                    (X(3, i) - pos(3))^2; | ||||
|                 (X(3, i) - pos(3))^2; | ||||
|             traveltime = sqrt(rho2) / settings.c ; | ||||
|  | ||||
|              | ||||
|             %--- Correct satellite position (do to earth rotation) -------- | ||||
|             Rot_X = e_r_corr(traveltime, X(:, i)); | ||||
|  | ||||
|              | ||||
|             %--- Find the elevation angel of the satellite ---------------- | ||||
|             [az(i), el(i), dist] = topocent(pos(1:3, :), Rot_X - pos(1:3, :)); | ||||
|  | ||||
|              | ||||
|             if (settings.useTropCorr == 1) | ||||
|                 %--- Calculate tropospheric correction -------------------- | ||||
|                 trop = tropo(sin(el(i) * dtr), ... | ||||
|                              0.0, 1013.0, 293.0, 50.0, 0.0, 0.0, 0.0); | ||||
|                     0.0, 1013.0, 293.0, 50.0, 0.0, 0.0, 0.0); | ||||
|             else | ||||
|                 % Do not calculate or apply the tropospheric corrections | ||||
|                 trop = 0; | ||||
|             end | ||||
|         end % if iter == 1 ... ... else  | ||||
|  | ||||
|         end % if iter == 1 ... ... else | ||||
|          | ||||
|         %--- Apply the corrections ---------------------------------------- | ||||
|         omc(i) = (obs(i) - norm(Rot_X - pos(1:3), 'fro') - pos(4) - trop); | ||||
|  | ||||
|          | ||||
|         %--- Construct the A matrix --------------------------------------- | ||||
|         A(i, :) =  [ (-(Rot_X(1) - pos(1))) / obs(i) ... | ||||
|                      (-(Rot_X(2) - pos(2))) / obs(i) ... | ||||
|                      (-(Rot_X(3) - pos(3))) / obs(i) ... | ||||
|                      1 ]; | ||||
|             (-(Rot_X(2) - pos(2))) / obs(i) ... | ||||
|             (-(Rot_X(3) - pos(3))) / obs(i) ... | ||||
|             1 ]; | ||||
|     end % for i = 1:nmbOfSatellites | ||||
|  | ||||
|      | ||||
|     % These lines allow the code to exit gracefully in case of any errors | ||||
|     if rank(A) ~= 4 | ||||
|         pos     = zeros(1, 4); | ||||
|         return | ||||
|     end | ||||
|  | ||||
|      | ||||
|     %--- Find position update --------------------------------------------- | ||||
|     x   = A \ omc; | ||||
|      | ||||
| @@ -106,7 +103,7 @@ if nargout  == 4 | ||||
|     %--- Calculate DOP ---------------------------------------------------- | ||||
|     Q       = inv(A'*A); | ||||
|      | ||||
|     dop(1)  = sqrt(trace(Q));                       % GDOP     | ||||
|     dop(1)  = sqrt(trace(Q));                       % GDOP | ||||
|     dop(2)  = sqrt(Q(1,1) + Q(2,2) + Q(3,3));       % PDOP | ||||
|     dop(3)  = sqrt(Q(1,1) + Q(2,2));                % HDOP | ||||
|     dop(4)  = sqrt(Q(3,3));                         % VDOP | ||||
|   | ||||
| @@ -1,6 +1,5 @@ | ||||
| function dmsvec = mat2dms(d,m,s,n) | ||||
|  | ||||
| %MAT2DMS Converts a [deg min sec] matrix to vector format | ||||
| % MAT2DMS Converts a [deg min sec] matrix to vector format | ||||
| % | ||||
| %  dms = MAT2DMS(d,m,s) converts a deg:min:sec matrix into a vector | ||||
| %  format.  The vector format is dms = 100*deg + min + sec/100. | ||||
| @@ -24,12 +23,12 @@ function dmsvec = mat2dms(d,m,s,n) | ||||
|  | ||||
| %  Copyright 1996-2002 Systems Planning and Analysis, Inc. and The MathWorks, Inc. | ||||
| %  Written by:  E. Byrns, E. Brown | ||||
| %   $Revision: 1.10 $    $Date: 2002/03/20 21:25:51 $ | ||||
| %  Revision: 1.10    Date: 2002/03/20 21:25:51 | ||||
|  | ||||
|  | ||||
| if nargin == 0 | ||||
|     error('Incorrect number of arguments') | ||||
|  | ||||
|      | ||||
| elseif nargin==1 | ||||
|     if size(d,2)== 3 | ||||
|         s = d(:,3);   m = d(:,2);   d = d(:,1); | ||||
| @@ -41,11 +40,11 @@ elseif nargin==1 | ||||
|         error('Single input matrices must be n-by-2 or n-by-3.'); | ||||
|     end | ||||
|     n = -5; | ||||
|  | ||||
|      | ||||
| elseif nargin == 2 | ||||
|     s = zeros(size(d)); | ||||
|     n = -5; | ||||
|  | ||||
|      | ||||
| elseif nargin == 3 | ||||
|     n = -5; | ||||
| end | ||||
|   | ||||
| @@ -1,6 +1,6 @@ | ||||
| function [x,msg] = roundn(x,n) | ||||
|  | ||||
| %ROUNDN  Rounds input data at specified power of 10 | ||||
| % ROUNDN  Rounds input data at specified power of 10 | ||||
| % | ||||
| %  y = ROUNDN(x) rounds the input data x to the nearest hundredth. | ||||
| % | ||||
| @@ -15,7 +15,7 @@ function [x,msg] = roundn(x,n) | ||||
|  | ||||
| %  Copyright 1996-2002 Systems Planning and Analysis, Inc. and The MathWorks, Inc. | ||||
| %  Written by:  E. Byrns, E. Brown | ||||
| %   $Revision: 1.9 $    $Date: 2002/03/20 21:26:19 $ | ||||
| %  Revision: 1.9    Date: 2002/03/20 21:26:19 | ||||
|  | ||||
| msg = [];   %  Initialize output | ||||
|  | ||||
| @@ -43,4 +43,4 @@ factors  = 10 ^ (fix(-n)); | ||||
|  | ||||
| %  Set the significant digits for the input data | ||||
|  | ||||
| x = round(x * factors) / factors; | ||||
| x = round(x * factors) / factors; | ||||
|   | ||||
| @@ -1,9 +1,9 @@ | ||||
| function [satPositions, satClkCorr] = satpos(transmitTime, prnList, ... | ||||
|                                              eph, settings)  | ||||
| %SATPOS Computation of satellite coordinates X,Y,Z at TRANSMITTIME for | ||||
| %given ephemeris EPH. Coordinates are computed for each satellite in the | ||||
| %list PRNLIST. | ||||
| %[satPositions, satClkCorr] = satpos(transmitTime, prnList, eph, settings); | ||||
|     eph, settings) | ||||
| % SATPOS Computation of satellite coordinates X,Y,Z at TRANSMITTIME for | ||||
| % given ephemeris EPH. Coordinates are computed for each satellite in the | ||||
| % list PRNLIST. | ||||
| %[ satPositions, satClkCorr] = satpos(transmitTime, prnList, eph, settings); | ||||
| % | ||||
| %   Inputs: | ||||
| %       transmitTime  - transmission time | ||||
| @@ -18,25 +18,22 @@ function [satPositions, satClkCorr] = satpos(transmitTime, prnList, ... | ||||
| %-------------------------------------------------------------------------- | ||||
| %                           SoftGNSS v3.0 | ||||
| %-------------------------------------------------------------------------- | ||||
| %Based on Kai Borre 04-09-96 | ||||
| %Copyright (c) by Kai Borre | ||||
| %Updated by Darius Plausinaitis, Peter Rinder and Nicolaj Bertelsen | ||||
| % | ||||
| % CVS record: | ||||
| % $Id: satpos.m,v 1.1.2.17 2007/01/30 09:45:12 dpl Exp $ | ||||
| % Based on Kai Borre 04-09-96 | ||||
| % Copyright (c) by Kai Borre | ||||
| % Updated by Darius Plausinaitis, Peter Rinder and Nicolaj Bertelsen | ||||
|  | ||||
| %% Initialize constants =================================================== | ||||
| numOfSatellites = size(prnList, 2); | ||||
|  | ||||
| % GPS constatns | ||||
|  | ||||
| gpsPi          = 3.1415926535898;  % Pi used in the GPS coordinate  | ||||
|                                    % system | ||||
| gpsPi          = 3.1415926535898;  % Pi used in the GPS coordinate | ||||
| % system | ||||
|  | ||||
| %--- Constants for satellite position calculation ------------------------- | ||||
| Omegae_dot     = 7.2921151467e-5;  % Earth rotation rate, [rad/s] | ||||
| GM             = 3.986005e14;      % Universal gravitational constant times | ||||
|                                    % the mass of the Earth, [m^3/s^2] | ||||
| % the mass of the Earth, [m^3/s^2] | ||||
| F              = -4.442807633e-10; % Constant, [sec/(meter)^(1/2)] | ||||
|  | ||||
| %% Initialize results ===================================================== | ||||
| @@ -49,65 +46,65 @@ for satNr = 1 : numOfSatellites | ||||
|      | ||||
|     prn = prnList(satNr); | ||||
|      | ||||
| %% Find initial satellite clock correction -------------------------------- | ||||
|  | ||||
|     %% Find initial satellite clock correction -------------------------------- | ||||
|      | ||||
|     %--- Find time difference --------------------------------------------- | ||||
|     dt = check_t(transmitTime - eph(prn).t_oc); | ||||
|  | ||||
|      | ||||
|     %--- Calculate clock correction --------------------------------------- | ||||
|     satClkCorr(satNr) = (eph(prn).a_f2 * dt + eph(prn).a_f1) * dt + ... | ||||
|                          eph(prn).a_f0 - ... | ||||
|                          eph(prn).T_GD; | ||||
|  | ||||
|         eph(prn).a_f0 - ... | ||||
|         eph(prn).T_GD; | ||||
|      | ||||
|     time = transmitTime - satClkCorr(satNr); | ||||
|  | ||||
| %% Find satellite's position ---------------------------------------------- | ||||
|  | ||||
|      | ||||
|     %% Find satellite's position ---------------------------------------------- | ||||
|      | ||||
|     %Restore semi-major axis | ||||
|     a   = eph(prn).sqrtA * eph(prn).sqrtA; | ||||
|  | ||||
|      | ||||
|     %Time correction | ||||
|     tk  = check_t(time - eph(prn).t_oe); | ||||
|  | ||||
|      | ||||
|     %Initial mean motion | ||||
|     n0  = sqrt(GM / a^3); | ||||
|     %Mean motion | ||||
|     n   = n0 + eph(prn).deltan; | ||||
|  | ||||
|      | ||||
|     %Mean anomaly | ||||
|     M   = eph(prn).M_0 + n * tk; | ||||
|     %Reduce mean anomaly to between 0 and 360 deg | ||||
|     M   = rem(M + 2*gpsPi, 2*gpsPi); | ||||
|  | ||||
|      | ||||
|     %Initial guess of eccentric anomaly | ||||
|     E   = M; | ||||
|  | ||||
|      | ||||
|     %--- Iteratively compute eccentric anomaly ---------------------------- | ||||
|     for ii = 1:10 | ||||
|         E_old   = E; | ||||
|         E       = M + eph(prn).e * sin(E); | ||||
|         dE      = rem(E - E_old, 2*gpsPi); | ||||
|  | ||||
|          | ||||
|         if abs(dE) < 1.e-12 | ||||
|             % Necessary precision is reached, exit from the loop  | ||||
|             % Necessary precision is reached, exit from the loop | ||||
|             break; | ||||
|         end | ||||
|     end  | ||||
|  | ||||
|     end | ||||
|      | ||||
|     %Reduce eccentric anomaly to between 0 and 360 deg | ||||
|     E   = rem(E + 2*gpsPi, 2*gpsPi); | ||||
|  | ||||
|      | ||||
|     %Compute relativistic correction term | ||||
|     dtr = F * eph(prn).e * eph(prn).sqrtA * sin(E); | ||||
|  | ||||
|      | ||||
|     %Calculate the true anomaly | ||||
|     nu   = atan2(sqrt(1 - eph(prn).e^2) * sin(E), cos(E)-eph(prn).e); | ||||
|  | ||||
|      | ||||
|     %Compute angle phi | ||||
|     phi = nu + eph(prn).omega; | ||||
|     %Reduce phi to between 0 and 360 deg | ||||
|     phi = rem(phi, 2*gpsPi); | ||||
|  | ||||
|      | ||||
|     %Correct argument of latitude | ||||
|     u = phi + ... | ||||
|         eph(prn).C_uc * cos(2*phi) + ... | ||||
| @@ -120,22 +117,22 @@ for satNr = 1 : numOfSatellites | ||||
|     i = eph(prn).i_0 + eph(prn).iDot * tk + ... | ||||
|         eph(prn).C_ic * cos(2*phi) + ... | ||||
|         eph(prn).C_is * sin(2*phi); | ||||
|  | ||||
|      | ||||
|     %Compute the angle between the ascending node and the Greenwich meridian | ||||
|     Omega = eph(prn).omega_0 + (eph(prn).omegaDot - Omegae_dot)*tk - ... | ||||
|             Omegae_dot * eph(prn).t_oe; | ||||
|         Omegae_dot * eph(prn).t_oe; | ||||
|     %Reduce to between 0 and 360 deg | ||||
|     Omega = rem(Omega + 2*gpsPi, 2*gpsPi); | ||||
|  | ||||
|      | ||||
|     %--- Compute satellite coordinates ------------------------------------ | ||||
|     satPositions(1, satNr) = cos(u)*r * cos(Omega) - sin(u)*r * cos(i)*sin(Omega); | ||||
|     satPositions(2, satNr) = cos(u)*r * sin(Omega) + sin(u)*r * cos(i)*cos(Omega); | ||||
|     satPositions(3, satNr) = sin(u)*r * sin(i); | ||||
|  | ||||
|  | ||||
| %% Include relativistic correction in clock correction -------------------- | ||||
|      | ||||
|      | ||||
|     %% Include relativistic correction in clock correction -------------------- | ||||
|     satClkCorr(satNr) = (eph(prn).a_f2 * dt + eph(prn).a_f1) * dt + ... | ||||
|                          eph(prn).a_f0 - ... | ||||
|                          eph(prn).T_GD + dtr; | ||||
|                       | ||||
|         eph(prn).a_f0 - ... | ||||
|         eph(prn).T_GD + dtr; | ||||
|      | ||||
| end % for satNr = 1 : numOfSatellites | ||||
|   | ||||
| @@ -1,9 +1,9 @@ | ||||
| function [dphi, dlambda, h] = togeod(a, finv, X, Y, Z) | ||||
| %TOGEOD   Subroutine to calculate geodetic coordinates latitude, longitude, | ||||
| % TOGEOD   Subroutine to calculate geodetic coordinates latitude, longitude, | ||||
| %         height given Cartesian coordinates X,Y,Z, and reference ellipsoid | ||||
| %         values semi-major axis (a) and the inverse of flattening (finv). | ||||
| % | ||||
| %[dphi, dlambda, h] = togeod(a, finv, X, Y, Z); | ||||
| % [dphi, dlambda, h] = togeod(a, finv, X, Y, Z); | ||||
| % | ||||
| %  The units of linear parameters X,Y,Z,a must all agree (m,km,mi,ft,..etc) | ||||
| %  The output units of angular quantities will be in decimal degrees | ||||
| @@ -24,9 +24,6 @@ function [dphi, dlambda, h] = togeod(a, finv, X, Y, Z) | ||||
| %  Reprinted with permission of author, 1996 | ||||
| %  Fortran code translated into MATLAB | ||||
| %  Kai Borre 03-30-96 | ||||
| % | ||||
| % CVS record: | ||||
| % $Id: togeod.m,v 1.1.1.1.2.4 2006/08/22 13:45:59 dpl Exp $ | ||||
| %========================================================================== | ||||
|  | ||||
| h       = 0; | ||||
| @@ -100,7 +97,7 @@ for i = 1:maxit | ||||
|     if (dP*dP + dZ*dZ < tolsq) | ||||
|         break; | ||||
|     end | ||||
|  | ||||
|      | ||||
|     % Not Converged--Warn user | ||||
|     if i == maxit | ||||
|         fprintf([' Problem in TOGEOD, did not converge in %2.0f',... | ||||
|   | ||||
| @@ -1,24 +1,21 @@ | ||||
| function [Az, El, D] = topocent(X, dx) | ||||
| %TOPOCENT  Transformation of vector dx into topocentric coordinate | ||||
| % TOPOCENT  Transformation of vector dx into topocentric coordinate | ||||
| %          system with origin at X. | ||||
| %          Both parameters are 3 by 1 vectors. | ||||
| % | ||||
| %[Az, El, D] = topocent(X, dx); | ||||
| % [Az, El, D] = topocent(X, dx); | ||||
| % | ||||
| %   Inputs: | ||||
| %       X           - vector origin corrdinates (in ECEF system [X; Y; Z;])  | ||||
| %       dx          - vector ([dX; dY; dZ;]).  | ||||
| %       X           - vector origin corrdinates (in ECEF system [X; Y; Z;]) | ||||
| %       dx          - vector ([dX; dY; dZ;]). | ||||
| % | ||||
| %   Outputs: | ||||
| %       D           - vector length. Units like units of the input | ||||
| %       Az          - azimuth from north positive clockwise, degrees | ||||
| %       El          - elevation angle, degrees | ||||
|  | ||||
| %Kai Borre 11-24-96 | ||||
| %Copyright (c) by Kai Borre | ||||
| % | ||||
| % CVS record: | ||||
| % $Id: topocent.m,v 1.1.1.1.2.4 2006/08/22 13:45:59 dpl Exp $ | ||||
| % Kai Borre 11-24-96 | ||||
| % Copyright (c) by Kai Borre | ||||
| %========================================================================== | ||||
|  | ||||
| dtr = pi/180; | ||||
| @@ -27,12 +24,12 @@ dtr = pi/180; | ||||
|  | ||||
| cl  = cos(lambda * dtr); | ||||
| sl  = sin(lambda * dtr); | ||||
| cb  = cos(phi * dtr);  | ||||
| cb  = cos(phi * dtr); | ||||
| sb  = sin(phi * dtr); | ||||
|  | ||||
| F   = [-sl -sb*cl cb*cl; | ||||
|         cl -sb*sl cb*sl; | ||||
|         0    cb   sb]; | ||||
|     cl -sb*sl cb*sl; | ||||
|     0    cb   sb]; | ||||
|  | ||||
| local_vector = F' * dx; | ||||
| E   = local_vector(1); | ||||
| @@ -54,4 +51,4 @@ if Az < 0 | ||||
| end | ||||
|  | ||||
| D   = sqrt(dx(1)^2 + dx(2)^2 + dx(3)^2); | ||||
| %%%%%%%%% end topocent.m %%%%%%%%% | ||||
| %%%%%%%%% end topocent.m %%%%%%%%% | ||||
|   | ||||
| @@ -1,9 +1,9 @@ | ||||
| function ddr = tropo(sinel, hsta, p, tkel, hum, hp, htkel, hhum) | ||||
| %TROPO  Calculation of tropospheric correction. | ||||
| % TROPO  Calculation of tropospheric correction. | ||||
| %       The range correction ddr in m is to be subtracted from | ||||
| %       pseudo-ranges and carrier phases | ||||
| % | ||||
| %ddr = tropo(sinel, hsta, p, tkel, hum, hp, htkel, hhum); | ||||
| % ddr = tropo(sinel, hsta, p, tkel, hum, hp, htkel, hhum); | ||||
| % | ||||
| %   Inputs: | ||||
| %       sinel   - sin of elevation angle of satellite | ||||
| @@ -26,9 +26,6 @@ function ddr = tropo(sinel, hsta, p, tkel, hum, hp, htkel, hhum) | ||||
|  | ||||
| % A Matlab reimplementation of a C code from driver. | ||||
| % Kai Borre 06-28-95 | ||||
| % | ||||
| % CVS record: | ||||
| % $Id: tropo.m,v 1.1.1.1.2.4 2006/08/22 13:46:00 dpl Exp $ | ||||
| %========================================================================== | ||||
|  | ||||
| a_e    = 6378.137;     % semi-major axis of earth ellipsoid | ||||
| @@ -60,14 +57,14 @@ while 1 | ||||
|      | ||||
|     % check to see if geometry is crazy | ||||
|     if rtop < 0 | ||||
|         rtop = 0;  | ||||
|     end  | ||||
|         rtop = 0; | ||||
|     end | ||||
|      | ||||
|     rtop = sqrt(rtop) - (a_e+hsta)*sinel; | ||||
|     a    = -sinel/(htop-hsta); | ||||
|     b    = -b0*(1-sinel^2) / (htop-hsta); | ||||
|     rn   = zeros(8,1); | ||||
|  | ||||
|      | ||||
|     for i = 1:8 | ||||
|         rn(i) = rtop^(i+1); | ||||
|     end | ||||
| @@ -77,17 +74,17 @@ while 1 | ||||
|         b^2*(6*a^2+4*b)*1.428571e-1, 0, 0]; | ||||
|      | ||||
|     if b^2 > 1.0e-35 | ||||
|         alpha(7) = a*b^3/2;  | ||||
|         alpha(8) = b^4/9;  | ||||
|         alpha(7) = a*b^3/2; | ||||
|         alpha(8) = b^4/9; | ||||
|     end | ||||
|  | ||||
|      | ||||
|     dr = rtop; | ||||
|     dr = dr + alpha*rn; | ||||
|     tropo = tropo + dr*ref*1000; | ||||
|      | ||||
|     if done == 'TRUE ' | ||||
|         ddr = tropo;  | ||||
|         break;  | ||||
|         ddr = tropo; | ||||
|         break; | ||||
|     end | ||||
|      | ||||
|     done    = 'TRUE '; | ||||
|   | ||||
| @@ -1,191 +0,0 @@ | ||||
| % /*! | ||||
| %  * \file glonass_ca_dll_pll_read_tracking_dump.m | ||||
| %  * \brief Read GNSS-SDR Tracking dump binary file into MATLAB. | ||||
| %  * \author Damian Miralles, 2017. dmiralles2009(at)gmail.com | ||||
| %  * ------------------------------------------------------------------------- | ||||
| %  * | ||||
| %  * 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 <http://www.gnu.org/licenses/>. | ||||
| %  * | ||||
| %  * ------------------------------------------------------------------------- | ||||
| %  */              | ||||
| function [GNSS_tracking] = glonass_ca_dll_pll_read_tracking_dump (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 | ||||
|   %% | ||||
|  | ||||
|   narginchk (1,2); | ||||
|   num_float_vars=5; | ||||
|   num_unsigned_long_int_vars=1; | ||||
|   num_double_vars=11; | ||||
|   num_unsigned_int_vars=1; | ||||
|   double_size_bytes=8; | ||||
|   unsigned_long_int_size_bytes=8; | ||||
|   float_size_bytes=4; | ||||
|   long_int_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+long_int_size_bytes*num_unsigned_int_vars; | ||||
|   bytes_shift=0; | ||||
|  | ||||
|   if (nargin < 2) | ||||
|     %count = Inf; | ||||
|     file_stats = dir(filename); | ||||
|     %round num bytes to read to integer number of samples (to protect the script from binary | ||||
|     %dump end file transitory) | ||||
|     count = (file_stats.bytes - mod(file_stats.bytes,skip_bytes_each_read))/skip_bytes_each_read; | ||||
|   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 unsigned_long_int | ||||
|     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 double | ||||
|     v7 = fread (f, count, 'float64',skip_bytes_each_read-double_size_bytes); | ||||
|         bytes_shift=bytes_shift+double_size_bytes; | ||||
|     fseek(f,bytes_shift,'bof'); % move to next interleaved double | ||||
|     v8 = fread (f, count, 'float64',skip_bytes_each_read-double_size_bytes); | ||||
|         bytes_shift=bytes_shift+double_size_bytes; | ||||
|     fseek(f,bytes_shift,'bof'); % move to next interleaved double | ||||
|     v9 = fread (f, count, 'float64',skip_bytes_each_read-double_size_bytes); | ||||
|         bytes_shift=bytes_shift+double_size_bytes; | ||||
|     fseek(f,bytes_shift,'bof'); % move to next interleaved double | ||||
|     v10 = fread (f, count, 'float64',skip_bytes_each_read-double_size_bytes); | ||||
|         bytes_shift=bytes_shift+double_size_bytes; | ||||
|     fseek(f,bytes_shift,'bof'); % move to next interleaved double | ||||
|     v11 = fread (f, count, 'float64',skip_bytes_each_read-double_size_bytes); | ||||
|         bytes_shift=bytes_shift+double_size_bytes; | ||||
|     fseek(f,bytes_shift,'bof'); % move to next interleaved double | ||||
|     v12 = fread (f, count, 'float64',skip_bytes_each_read-double_size_bytes); | ||||
|         bytes_shift=bytes_shift+double_size_bytes; | ||||
|     fseek(f,bytes_shift,'bof'); % move to next interleaved double | ||||
|     v13 = fread (f, count, 'float64',skip_bytes_each_read-double_size_bytes); | ||||
|         bytes_shift=bytes_shift+double_size_bytes; | ||||
|     fseek(f,bytes_shift,'bof'); % move to next interleaved double | ||||
|     v14 = fread (f, count, 'float64',skip_bytes_each_read-double_size_bytes); | ||||
|         bytes_shift=bytes_shift+double_size_bytes; | ||||
|     fseek(f,bytes_shift,'bof'); % move to next interleaved double | ||||
|     v15 = fread (f, count, 'float64',skip_bytes_each_read-double_size_bytes); | ||||
|         bytes_shift=bytes_shift+double_size_bytes; | ||||
|     fseek(f,bytes_shift,'bof'); % move to next interleaved double | ||||
|     v16 = fread (f, count, 'float64',skip_bytes_each_read-double_size_bytes); | ||||
|         bytes_shift=bytes_shift+double_size_bytes; | ||||
|     fseek(f,bytes_shift,'bof'); % move to next interleaved double | ||||
|     v17 = fread (f, count, 'float64',skip_bytes_each_read-double_size_bytes); | ||||
|         bytes_shift=bytes_shift+double_size_bytes; | ||||
|     fseek(f,bytes_shift,'bof'); % move to next interleaved double | ||||
|     v18 = fread (f, count, 'uint32',skip_bytes_each_read-double_size_bytes); | ||||
|     fclose (f); | ||||
|      | ||||
|     %%%%%%%% output vars %%%%%%%% | ||||
|      | ||||
| %                     // EPR | ||||
| %                     d_dump_file.write(reinterpret_cast<char*>(&tmp_E), sizeof(float)); | ||||
| %                     d_dump_file.write(reinterpret_cast<char*>(&tmp_P), sizeof(float)); | ||||
| %                     d_dump_file.write(reinterpret_cast<char*>(&tmp_L), sizeof(float)); | ||||
| %                     // PROMPT I and Q (to analyze navigation symbols) | ||||
| %                     d_dump_file.write(reinterpret_cast<char*>(&prompt_I), sizeof(float)); | ||||
| %                     d_dump_file.write(reinterpret_cast<char*>(&prompt_Q), sizeof(float)); | ||||
| %                     // PRN start sample stamp | ||||
| %                     //tmp_float=(float)d_sample_counter; | ||||
| %                     d_dump_file.write(reinterpret_cast<char*>(&d_sample_counter), sizeof(unsigned long int)); | ||||
| %                     // accumulated carrier phase | ||||
| %                     d_dump_file.write(reinterpret_cast<char*>(&d_acc_carrier_phase_rad), sizeof(double)); | ||||
| %  | ||||
| %                     // carrier and code frequency | ||||
| %                     d_dump_file.write(reinterpret_cast<char*>(&d_carrier_doppler_hz), sizeof(double)); | ||||
| %                     d_dump_file.write(reinterpret_cast<char*>(&d_code_freq_chips), sizeof(double)); | ||||
| %  | ||||
| %                     //PLL commands | ||||
| %                     d_dump_file.write(reinterpret_cast<char*>(&carr_phase_error_secs_Ti), sizeof(double)); | ||||
| %                     d_dump_file.write(reinterpret_cast<char*>(&d_carrier_doppler_hz), sizeof(double)); | ||||
| %  | ||||
| %                     //DLL commands | ||||
| %                     d_dump_file.write(reinterpret_cast<char*>(&code_error_chips_Ti), sizeof(double)); | ||||
| %                     d_dump_file.write(reinterpret_cast<char*>(&code_error_filt_chips), sizeof(double)); | ||||
| %  | ||||
| %                     // CN0 and carrier lock test | ||||
| %                     d_dump_file.write(reinterpret_cast<char*>(&d_CN0_SNV_dB_Hz), sizeof(double)); | ||||
| %                     d_dump_file.write(reinterpret_cast<char*>(&d_carrier_lock_test), sizeof(double)); | ||||
| %  | ||||
| %                     // AUX vars (for debug purposes) | ||||
| %                     tmp_double = d_rem_code_phase_samples; | ||||
| %                     d_dump_file.write(reinterpret_cast<char*>(&tmp_double), sizeof(double)); | ||||
| %                     tmp_double = static_cast<double>(d_sample_counter + d_current_prn_length_samples); | ||||
| %                     d_dump_file.write(reinterpret_cast<char*>(&tmp_double), sizeof(double)); | ||||
| %                             // PRN | ||||
| %             unsigned int prn_ = d_acquisition_gnss_synchro->PRN; | ||||
| %             d_dump_file.write(reinterpret_cast<char*>(&prn_), sizeof(unsigned int)); | ||||
|     E=v1; | ||||
|     P=v2; | ||||
|     L=v3; | ||||
|     prompt_I=v4; | ||||
|     prompt_Q=v5; | ||||
|     PRN_start_sample=v6; | ||||
|     acc_carrier_phase_rad=v7; | ||||
|     carrier_freq_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; | ||||
|     PRN=v18; | ||||
|      | ||||
|     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_freq_hz=carrier_freq_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.d_rem_code_phase_samples=var1; | ||||
|     GNSS_tracking.var2=var2; | ||||
|     GNSS_tracking.PRN=PRN; | ||||
|   end | ||||
|    | ||||
| @@ -1,178 +0,0 @@ | ||||
| % /*! | ||||
| %  * \file gps_l1_ca_dll_fll_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 <http://www.gnu.org/licenses/>. | ||||
| %  * | ||||
| %  * ------------------------------------------------------------------------- | ||||
| %  */              | ||||
| function [GNSS_tracking] = gps_l1_ca_dll_fll_pll_read_tracking_dump (filename, samplingFreq, count) | ||||
|  | ||||
|   %% usage: gps_l1_ca_dll_fll_pll_read_tracking_dump (filename, [count]) | ||||
|   %% | ||||
|   %% open GNSS-SDR tracking binary log file .dat and return the contents | ||||
|   %% | ||||
|  | ||||
|   m = nargchk (1,3,nargin); | ||||
|   num_float_vars=16; | ||||
|   num_double_vars=1; | ||||
|   double_size_bytes=8; | ||||
|   float_size_bytes=4; | ||||
|   skip_bytes_each_read=float_size_bytes*num_float_vars+double_size_bytes*num_double_vars; | ||||
|   bytes_shift=0; | ||||
|   if (m) | ||||
|     usage (m); | ||||
|   end | ||||
|  | ||||
|   if (nargin < 3) | ||||
|     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, 'uint32',skip_bytes_each_read-float_size_bytes); | ||||
|         bytes_shift=bytes_shift+float_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*)&PLL_discriminator_hz, sizeof(float)); | ||||
| % 			d_dump_file.write((char*)&carr_nco_hz, sizeof(float)); | ||||
| %  | ||||
| % 			//DLL commands | ||||
| % 			d_dump_file.write((char*)&code_error_chips, sizeof(float)); | ||||
| % 			d_dump_file.write((char*)&d_code_phase_samples, 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; | ||||
|     PLL_discriminator_hz=v10; | ||||
|     carr_nco_hz=v11; | ||||
|     code_error_chips=v12; | ||||
|     code_phase_samples=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.PLL_discriminator_hz=PLL_discriminator_hz; | ||||
|     GNSS_tracking.carr_nco=carr_nco_hz; | ||||
|     GNSS_tracking.code_error_chips=code_error_chips; | ||||
|     GNSS_tracking.code_phase_samples=code_phase_samples; | ||||
|     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; | ||||
|     GNSS_tracking.prn_delay_ms=1000*(GNSS_tracking.var2+GNSS_tracking.var1)./samplingFreq; | ||||
|   end | ||||
|    | ||||
| @@ -1,158 +1,156 @@ | ||||
| % /*! | ||||
| %  * \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 <http://www.gnu.org/licenses/>. | ||||
| %  * | ||||
| %  * ------------------------------------------------------------------------- | ||||
| %  */              | ||||
| % Usage: gps_l1_ca_dll_pll_read_tracking_dump_64bits (filename, [count]) | ||||
| % | ||||
| % Opens GNSS-SDR tracking binary log file .dat and returns the contents | ||||
|  | ||||
| % Read GNSS-SDR Tracking dump binary file into MATLAB. | ||||
| % Javier Arribas, 2011. jarribas(at)cttc.es | ||||
| % ------------------------------------------------------------------------- | ||||
| % | ||||
| % Copyright (C) 2010-2018  (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 <http://www.gnu.org/licenses/>. | ||||
| % | ||||
| % ------------------------------------------------------------------------- | ||||
| % | ||||
|  | ||||
| function [GNSS_tracking] = gps_l1_ca_dll_pll_read_tracking_dump (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=5; | ||||
| num_unsigned_long_int_vars=1; | ||||
| num_double_vars=11; | ||||
| num_unsigned_int_vars=1; | ||||
| double_size_bytes=8; | ||||
| unsigned_long_int_size_bytes=8; | ||||
| float_size_bytes=4; | ||||
| long_int_size_bytes=4; | ||||
|  | ||||
|   m = nargchk (1,2,nargin); | ||||
|   num_float_vars=5; | ||||
|   num_unsigned_long_int_vars=1; | ||||
|   num_double_vars=11; | ||||
|   num_unsigned_int_vars=1; | ||||
|   double_size_bytes=8; | ||||
|   unsigned_long_int_size_bytes=8; | ||||
|   float_size_bytes=4; | ||||
|   long_int_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+long_int_size_bytes*num_unsigned_int_vars; | ||||
|   bytes_shift=0; | ||||
|   if (m) | ||||
| 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+long_int_size_bytes*num_unsigned_int_vars; | ||||
| bytes_shift=0; | ||||
| if (m) | ||||
|     usage (m); | ||||
|   end | ||||
| end | ||||
|  | ||||
|   if (nargin < 2) | ||||
| if (nargin < 2) | ||||
|     %count = Inf; | ||||
|     file_stats = dir(filename); | ||||
|     %round num bytes to read to integer number of samples (to protect the script from binary | ||||
|     %dump end file transitory) | ||||
|     count = (file_stats.bytes - mod(file_stats.bytes,skip_bytes_each_read))/skip_bytes_each_read; | ||||
|   end | ||||
|     %loops_counter = fread (f, count, 'uint32',4*12); | ||||
|   f = fopen (filename, 'rb'); | ||||
|   if (f < 0) | ||||
|   else | ||||
| 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; | ||||
|     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; | ||||
|     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; | ||||
|     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; | ||||
|     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; | ||||
|     bytes_shift=bytes_shift+float_size_bytes; | ||||
|     fseek(f,bytes_shift,'bof'); % move to next interleaved unsigned_long_int | ||||
|     v6 = fread (f, count, 'uint64',skip_bytes_each_read-unsigned_long_int_size_bytes); | ||||
|         bytes_shift=bytes_shift+unsigned_long_int_size_bytes; | ||||
|     bytes_shift=bytes_shift+unsigned_long_int_size_bytes; | ||||
|     fseek(f,bytes_shift,'bof'); % move to next interleaved double | ||||
|     v7 = 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 double | ||||
|     v8 = 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 double | ||||
|     v9 = 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 double | ||||
|     v10 = 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 double | ||||
|     v11 = 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 double | ||||
|     v12 = 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 double | ||||
|     v13 = 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 double | ||||
|     v14 = 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 double | ||||
|     v15 = 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 double | ||||
|     v16 = 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 double | ||||
|     v17 = 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 double | ||||
|     v18 = fread (f, count, 'uint32',skip_bytes_each_read-double_size_bytes); | ||||
|     fclose (f); | ||||
|      | ||||
|     %%%%%%%% output vars %%%%%%%% | ||||
|      | ||||
| %                     // EPR | ||||
| %                     d_dump_file.write(reinterpret_cast<char*>(&tmp_E), sizeof(float)); | ||||
| %                     d_dump_file.write(reinterpret_cast<char*>(&tmp_P), sizeof(float)); | ||||
| %                     d_dump_file.write(reinterpret_cast<char*>(&tmp_L), sizeof(float)); | ||||
| %                     // PROMPT I and Q (to analyze navigation symbols) | ||||
| %                     d_dump_file.write(reinterpret_cast<char*>(&prompt_I), sizeof(float)); | ||||
| %                     d_dump_file.write(reinterpret_cast<char*>(&prompt_Q), sizeof(float)); | ||||
| %                     // PRN start sample stamp | ||||
| %                     //tmp_float=(float)d_sample_counter; | ||||
| %                     d_dump_file.write(reinterpret_cast<char*>(&d_sample_counter), sizeof(unsigned long int)); | ||||
| %                     // accumulated carrier phase | ||||
| %                     d_dump_file.write(reinterpret_cast<char*>(&d_acc_carrier_phase_rad), sizeof(double)); | ||||
| %  | ||||
| %                     // carrier and code frequency | ||||
| %                     d_dump_file.write(reinterpret_cast<char*>(&d_carrier_doppler_hz), sizeof(double)); | ||||
| %                     d_dump_file.write(reinterpret_cast<char*>(&d_code_freq_chips), sizeof(double)); | ||||
| %  | ||||
| %                     //PLL commands | ||||
| %                     d_dump_file.write(reinterpret_cast<char*>(&carr_phase_error_secs_Ti), sizeof(double)); | ||||
| %                     d_dump_file.write(reinterpret_cast<char*>(&d_carrier_doppler_hz), sizeof(double)); | ||||
| %  | ||||
| %                     //DLL commands | ||||
| %                     d_dump_file.write(reinterpret_cast<char*>(&code_error_chips_Ti), sizeof(double)); | ||||
| %                     d_dump_file.write(reinterpret_cast<char*>(&code_error_filt_chips), sizeof(double)); | ||||
| %  | ||||
| %                     // CN0 and carrier lock test | ||||
| %                     d_dump_file.write(reinterpret_cast<char*>(&d_CN0_SNV_dB_Hz), sizeof(double)); | ||||
| %                     d_dump_file.write(reinterpret_cast<char*>(&d_carrier_lock_test), sizeof(double)); | ||||
| %  | ||||
| %                     // AUX vars (for debug purposes) | ||||
| %                     tmp_double = d_rem_code_phase_samples; | ||||
| %                     d_dump_file.write(reinterpret_cast<char*>(&tmp_double), sizeof(double)); | ||||
| %                     tmp_double = static_cast<double>(d_sample_counter + d_current_prn_length_samples); | ||||
| %                     d_dump_file.write(reinterpret_cast<char*>(&tmp_double), sizeof(double)); | ||||
| %                             // PRN | ||||
| %             unsigned int prn_ = d_acquisition_gnss_synchro->PRN; | ||||
| %             d_dump_file.write(reinterpret_cast<char*>(&prn_), sizeof(unsigned int)); | ||||
|     %                     // EPR | ||||
|     %                     d_dump_file.write(reinterpret_cast<char*>(&tmp_E), sizeof(float)); | ||||
|     %                     d_dump_file.write(reinterpret_cast<char*>(&tmp_P), sizeof(float)); | ||||
|     %                     d_dump_file.write(reinterpret_cast<char*>(&tmp_L), sizeof(float)); | ||||
|     %                     // PROMPT I and Q (to analyze navigation symbols) | ||||
|     %                     d_dump_file.write(reinterpret_cast<char*>(&prompt_I), sizeof(float)); | ||||
|     %                     d_dump_file.write(reinterpret_cast<char*>(&prompt_Q), sizeof(float)); | ||||
|     %                     // PRN start sample stamp | ||||
|     %                     //tmp_float=(float)d_sample_counter; | ||||
|     %                     d_dump_file.write(reinterpret_cast<char*>(&d_sample_counter), sizeof(unsigned long int)); | ||||
|     %                     // accumulated carrier phase | ||||
|     %                     d_dump_file.write(reinterpret_cast<char*>(&d_acc_carrier_phase_rad), sizeof(double)); | ||||
|     % | ||||
|     %                     // carrier and code frequency | ||||
|     %                     d_dump_file.write(reinterpret_cast<char*>(&d_carrier_doppler_hz), sizeof(double)); | ||||
|     %                     d_dump_file.write(reinterpret_cast<char*>(&d_code_freq_chips), sizeof(double)); | ||||
|     % | ||||
|     %                     //PLL commands | ||||
|     %                     d_dump_file.write(reinterpret_cast<char*>(&carr_phase_error_secs_Ti), sizeof(double)); | ||||
|     %                     d_dump_file.write(reinterpret_cast<char*>(&d_carrier_doppler_hz), sizeof(double)); | ||||
|     % | ||||
|     %                     //DLL commands | ||||
|     %                     d_dump_file.write(reinterpret_cast<char*>(&code_error_chips_Ti), sizeof(double)); | ||||
|     %                     d_dump_file.write(reinterpret_cast<char*>(&code_error_filt_chips), sizeof(double)); | ||||
|     % | ||||
|     %                     // CN0 and carrier lock test | ||||
|     %                     d_dump_file.write(reinterpret_cast<char*>(&d_CN0_SNV_dB_Hz), sizeof(double)); | ||||
|     %                     d_dump_file.write(reinterpret_cast<char*>(&d_carrier_lock_test), sizeof(double)); | ||||
|     % | ||||
|     %                     // AUX vars (for debug purposes) | ||||
|     %                     tmp_double = d_rem_code_phase_samples; | ||||
|     %                     d_dump_file.write(reinterpret_cast<char*>(&tmp_double), sizeof(double)); | ||||
|     %                     tmp_double = static_cast<double>(d_sample_counter + d_current_prn_length_samples); | ||||
|     %                     d_dump_file.write(reinterpret_cast<char*>(&tmp_double), sizeof(double)); | ||||
|     %                             // PRN | ||||
|     %             unsigned int prn_ = d_acquisition_gnss_synchro->PRN; | ||||
|     %             d_dump_file.write(reinterpret_cast<char*>(&prn_), sizeof(unsigned int)); | ||||
|     E=v1; | ||||
|     P=v2; | ||||
|     L=v3; | ||||
| @@ -190,5 +188,5 @@ function [GNSS_tracking] = gps_l1_ca_dll_pll_read_tracking_dump (filename, count | ||||
|     GNSS_tracking.d_rem_code_phase_samples=var1; | ||||
|     GNSS_tracking.var2=var2; | ||||
|     GNSS_tracking.PRN=PRN; | ||||
|   end | ||||
|    | ||||
| end | ||||
|  | ||||
|   | ||||
| @@ -1,39 +1,40 @@ | ||||
| % /*! | ||||
| %  * \file gps_l1_ca_pvt_read_pvt_dump.m | ||||
| %  * \brief Read GNSS-SDR PVT lib dump binary file into MATLAB. The resulting | ||||
| % | ||||
| % \file gps_l1_ca_pvt_read_pvt_dump.m | ||||
| % \brief Read GNSS-SDR PVT lib dump binary file into MATLAB. The resulting | ||||
| %  structure is compatible with the K.Borre MATLAB-based receiver. | ||||
| %  * \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 <http://www.gnu.org/licenses/>. | ||||
| %  * | ||||
| %  * ------------------------------------------------------------------------- | ||||
| %  */         | ||||
| % \author Javier Arribas, 2011. jarribas(at)cttc.es | ||||
| % ------------------------------------------------------------------------- | ||||
| % | ||||
| % Copyright (C) 2010-2018  (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 <http://www.gnu.org/licenses/>. | ||||
| % | ||||
| % ------------------------------------------------------------------------- | ||||
| % | ||||
|  | ||||
| function [navSolutions] = gps_l1_ca_pvt_read_pvt_dump (filename, count) | ||||
|  | ||||
|   %% usage: gps_l1_ca_pvt_read_pvt_dump (filename, [count]) | ||||
|   %% | ||||
|   %% open GNSS-SDR PVT binary log file .dat and return the contents | ||||
|   %% | ||||
| %  | ||||
| %% usage: gps_l1_ca_pvt_read_pvt_dump (filename, [count]) | ||||
| %% | ||||
| %% open GNSS-SDR PVT binary log file .dat and return the contents | ||||
| %% | ||||
| % | ||||
| % //  PVT GPS time | ||||
| % tmp_double=GPS_current_time; | ||||
| % d_dump_file.write((char*)&tmp_double, sizeof(double)); | ||||
| @@ -58,57 +59,56 @@ function [navSolutions] = gps_l1_ca_pvt_read_pvt_dump (filename, count) | ||||
| % // GEO user position Height [m] | ||||
| % tmp_double=d_height_m; | ||||
| % d_dump_file.write((char*)&tmp_double, sizeof(double)); | ||||
|                  | ||||
|   m = nargchk (1,2,nargin); | ||||
|   num_double_vars=8; | ||||
|   double_size_bytes=8; | ||||
|   skip_bytes_each_read=double_size_bytes*num_double_vars; | ||||
|   bytes_shift=0; | ||||
|   if (m) | ||||
|     usage (m); | ||||
|   end | ||||
|  | ||||
|   if (nargin < 3) | ||||
| m = nargchk (1,2,nargin); | ||||
| num_double_vars=8; | ||||
| double_size_bytes=8; | ||||
| skip_bytes_each_read=double_size_bytes*num_double_vars; | ||||
| bytes_shift=0; | ||||
| if (m) | ||||
|     usage (m); | ||||
| end | ||||
|  | ||||
| if (nargin < 3) | ||||
|     count = Inf; | ||||
|   end | ||||
|     %loops_counter = fread (f, count, 'uint32',4*12); | ||||
|   f = fopen (filename, 'rb'); | ||||
|   if (f < 0) | ||||
|   else | ||||
|         GPS_current_time = fread (f, count, 'float64',skip_bytes_each_read-double_size_bytes); | ||||
|         bytes_shift=bytes_shift+double_size_bytes; | ||||
|         fseek(f,bytes_shift,'bof'); % move to next interleaved | ||||
|         ECEF_X = fread (f, count, 'float64',skip_bytes_each_read-double_size_bytes); | ||||
|         bytes_shift=bytes_shift+double_size_bytes; | ||||
|         fseek(f,bytes_shift,'bof'); % move to next interleaved | ||||
|         ECEF_Y = fread (f, count, 'float64',skip_bytes_each_read-double_size_bytes); | ||||
|         bytes_shift=bytes_shift+double_size_bytes; | ||||
|         fseek(f,bytes_shift,'bof'); % move to next interleaved | ||||
|         ECEF_Z = fread (f, count, 'float64',skip_bytes_each_read-double_size_bytes); | ||||
|         bytes_shift=bytes_shift+double_size_bytes; | ||||
|         fseek(f,bytes_shift,'bof'); % move to next interleaved | ||||
|         Clock_Offset = fread (f, count, 'float64',skip_bytes_each_read-double_size_bytes); | ||||
|         bytes_shift=bytes_shift+double_size_bytes; | ||||
|         fseek(f,bytes_shift,'bof'); % move to next interleaved | ||||
|         Lat = fread (f, count, 'float64',skip_bytes_each_read-double_size_bytes); | ||||
|         bytes_shift=bytes_shift+double_size_bytes; | ||||
|         fseek(f,bytes_shift,'bof'); % move to next interleaved | ||||
|         Long = fread (f, count, 'float64',skip_bytes_each_read-double_size_bytes); | ||||
|         bytes_shift=bytes_shift+double_size_bytes; | ||||
|         fseek(f,bytes_shift,'bof'); % move to next interleaved | ||||
|         Height = fread (f, count, 'float64',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); | ||||
|   end | ||||
|    | ||||
|   navSolutions.X=ECEF_X.'; | ||||
|   navSolutions.Y=ECEF_Y.'; | ||||
|   navSolutions.Z=ECEF_Z.'; | ||||
|   navSolutions.dt=Clock_Offset.'; | ||||
|   navSolutions.latitude=Lat.'; | ||||
|   navSolutions.longitude=Long.'; | ||||
|   navSolutions.height=Height.'; | ||||
|   navSolutions.TransmitTime=GPS_current_time.'; | ||||
|    | ||||
|    | ||||
| end | ||||
| %loops_counter = fread (f, count, 'uint32',4*12); | ||||
| f = fopen (filename, 'rb'); | ||||
| if (f < 0) | ||||
| else | ||||
|     GPS_current_time = fread (f, count, 'float64',skip_bytes_each_read-double_size_bytes); | ||||
|     bytes_shift=bytes_shift+double_size_bytes; | ||||
|     fseek(f,bytes_shift,'bof'); % move to next interleaved | ||||
|     ECEF_X = fread (f, count, 'float64',skip_bytes_each_read-double_size_bytes); | ||||
|     bytes_shift=bytes_shift+double_size_bytes; | ||||
|     fseek(f,bytes_shift,'bof'); % move to next interleaved | ||||
|     ECEF_Y = fread (f, count, 'float64',skip_bytes_each_read-double_size_bytes); | ||||
|     bytes_shift=bytes_shift+double_size_bytes; | ||||
|     fseek(f,bytes_shift,'bof'); % move to next interleaved | ||||
|     ECEF_Z = fread (f, count, 'float64',skip_bytes_each_read-double_size_bytes); | ||||
|     bytes_shift=bytes_shift+double_size_bytes; | ||||
|     fseek(f,bytes_shift,'bof'); % move to next interleaved | ||||
|     Clock_Offset = fread (f, count, 'float64',skip_bytes_each_read-double_size_bytes); | ||||
|     bytes_shift=bytes_shift+double_size_bytes; | ||||
|     fseek(f,bytes_shift,'bof'); % move to next interleaved | ||||
|     Lat = fread (f, count, 'float64',skip_bytes_each_read-double_size_bytes); | ||||
|     bytes_shift=bytes_shift+double_size_bytes; | ||||
|     fseek(f,bytes_shift,'bof'); % move to next interleaved | ||||
|     Long = fread (f, count, 'float64',skip_bytes_each_read-double_size_bytes); | ||||
|     bytes_shift=bytes_shift+double_size_bytes; | ||||
|     fseek(f,bytes_shift,'bof'); % move to next interleaved | ||||
|     Height = fread (f, count, 'float64',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); | ||||
| end | ||||
|  | ||||
| navSolutions.X=ECEF_X.'; | ||||
| navSolutions.Y=ECEF_Y.'; | ||||
| navSolutions.Z=ECEF_Z.'; | ||||
| navSolutions.dt=Clock_Offset.'; | ||||
| navSolutions.latitude=Lat.'; | ||||
| navSolutions.longitude=Long.'; | ||||
| navSolutions.height=Height.'; | ||||
| navSolutions.TransmitTime=GPS_current_time.'; | ||||
|  | ||||
|   | ||||
| @@ -1,27 +1,52 @@ | ||||
| % Javier Arribas 2011              | ||||
| % ------------------------------------------------------------------------- | ||||
| % | ||||
| % Copyright (C) 2010-2018  (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 <http://www.gnu.org/licenses/>. | ||||
| % | ||||
| % ------------------------------------------------------------------------- | ||||
| % | ||||
| % Javier Arribas 2011 | ||||
|  | ||||
| function [pvt_raw] = gps_l1_ca_read_pvt_raw_dump (channels, filename, count) | ||||
|  | ||||
|   %% usage: read_tracking_dat (filename, [count]) | ||||
|   %% | ||||
|   %% open GNSS-SDR pvt binary log file .dat and return the contents | ||||
|   %% | ||||
| %% usage: read_tracking_dat (filename, [count]) | ||||
| %% | ||||
| %% open GNSS-SDR pvt binary log file .dat and return the contents | ||||
| %% | ||||
|  | ||||
|   m = nargchk (1,2,nargin); | ||||
|   num_double_vars=3; | ||||
|   double_size_bytes=8; | ||||
|   skip_bytes_each_read=double_size_bytes*num_double_vars*channels; | ||||
|   bytes_shift=0; | ||||
|   if (m) | ||||
| m = nargchk (1,2,nargin); | ||||
| num_double_vars=3; | ||||
| double_size_bytes=8; | ||||
| skip_bytes_each_read=double_size_bytes*num_double_vars*channels; | ||||
| bytes_shift=0; | ||||
| if (m) | ||||
|     usage (m); | ||||
|   end | ||||
| end | ||||
|  | ||||
|   if (nargin < 3) | ||||
| if (nargin < 3) | ||||
|     count = Inf; | ||||
|   end | ||||
|     %loops_counter = fread (f, count, 'uint32',4*12); | ||||
|   f = fopen (filename, 'rb'); | ||||
|   if (f < 0) | ||||
|   else | ||||
| end | ||||
| %loops_counter = fread (f, count, 'uint32',4*12); | ||||
| f = fopen (filename, 'rb'); | ||||
| if (f < 0) | ||||
| else | ||||
|     for N=1:1:channels | ||||
|         pvt_raw.Pseudorange_m(N,:) = fread (f, count, 'float64',skip_bytes_each_read-double_size_bytes); | ||||
|         bytes_shift=bytes_shift+double_size_bytes; | ||||
| @@ -33,17 +58,17 @@ function [pvt_raw] = gps_l1_ca_read_pvt_raw_dump (channels, filename, count) | ||||
|         bytes_shift=bytes_shift+double_size_bytes; | ||||
|         fseek(f,bytes_shift,'bof'); % move to next interleaved | ||||
|     end | ||||
|  | ||||
|      | ||||
|     fclose (f); | ||||
|      | ||||
|     %%%%%%%% output vars %%%%%%%% | ||||
| %     for (unsigned int i=0; i<d_nchannels ; i++) | ||||
| %         { | ||||
| %             tmp_double = in[i][0].Pseudorange_m; | ||||
| %             d_dump_file.write((char*)&tmp_double, sizeof(double)); | ||||
| %             tmp_double = in[i][0].Pseudorange_symbol_shift; | ||||
| %             d_dump_file.write((char*)&tmp_double, sizeof(double)); | ||||
| %             d_dump_file.write((char*)&d_tx_time, sizeof(double)); | ||||
| %         } | ||||
|   end | ||||
|    | ||||
|     %     for (unsigned int i=0; i<d_nchannels ; i++) | ||||
|     %         { | ||||
|     %             tmp_double = in[i][0].Pseudorange_m; | ||||
|     %             d_dump_file.write((char*)&tmp_double, sizeof(double)); | ||||
|     %             tmp_double = in[i][0].Pseudorange_symbol_shift; | ||||
|     %             d_dump_file.write((char*)&tmp_double, sizeof(double)); | ||||
|     %             d_dump_file.write((char*)&d_tx_time, sizeof(double)); | ||||
|     %         } | ||||
| end | ||||
|  | ||||
|   | ||||
| @@ -1,48 +1,73 @@ | ||||
| % Javier Arribas 2011              | ||||
| % ------------------------------------------------------------------------- | ||||
| % | ||||
| % Copyright (C) 2010-2018  (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 <http://www.gnu.org/licenses/>. | ||||
| % | ||||
| % ------------------------------------------------------------------------- | ||||
| % | ||||
| % Javier Arribas 2011 | ||||
|  | ||||
| function [telemetry] = gps_l1_ca_read_telemetry_dump (filename, count) | ||||
|  | ||||
|   %% usage: read_tracking_dat (filename, [count]) | ||||
|   %% | ||||
|   %% open GNSS-SDR tracking binary log file .dat and return the contents | ||||
|   %% | ||||
| %% usage: read_tracking_dat (filename, [count]) | ||||
| %% | ||||
| %% open GNSS-SDR tracking binary log file .dat and return the contents | ||||
| %% | ||||
|  | ||||
|   m = nargchk (1,2,nargin); | ||||
|   num_double_vars=3; | ||||
|   double_size_bytes=8; | ||||
|   skip_bytes_each_read=double_size_bytes*num_double_vars; | ||||
|   bytes_shift=0; | ||||
|   if (m) | ||||
| m = nargchk (1,2,nargin); | ||||
| num_double_vars=3; | ||||
| double_size_bytes=8; | ||||
| skip_bytes_each_read=double_size_bytes*num_double_vars; | ||||
| bytes_shift=0; | ||||
| if (m) | ||||
|     usage (m); | ||||
|   end | ||||
| end | ||||
|  | ||||
|   if (nargin < 3) | ||||
| if (nargin < 3) | ||||
|     count = Inf; | ||||
|   end | ||||
|     %loops_counter = fread (f, count, 'uint32',4*12); | ||||
|   f = fopen (filename, 'rb'); | ||||
|   if (f < 0) | ||||
|   else | ||||
|         telemetry.preamble_delay_ms = fread (f, count, 'float64',skip_bytes_each_read-double_size_bytes); | ||||
|         bytes_shift=bytes_shift+double_size_bytes; | ||||
|         fseek(f,bytes_shift,'bof'); % move to next interleaved | ||||
|         telemetry.prn_delay_ms = fread (f, count, 'float64',skip_bytes_each_read-double_size_bytes); | ||||
|         bytes_shift=bytes_shift+double_size_bytes; | ||||
|         fseek(f,bytes_shift,'bof'); % move to next interleaved | ||||
|         telemetry.Preamble_symbol_counter = fread (f, count, 'float64',skip_bytes_each_read-double_size_bytes); | ||||
|         bytes_shift=bytes_shift+double_size_bytes; | ||||
|         fseek(f,bytes_shift,'bof'); % move to next interleaved | ||||
|  | ||||
| end | ||||
| %loops_counter = fread (f, count, 'uint32',4*12); | ||||
| f = fopen (filename, 'rb'); | ||||
| if (f < 0) | ||||
| else | ||||
|     telemetry.preamble_delay_ms = fread (f, count, 'float64',skip_bytes_each_read-double_size_bytes); | ||||
|     bytes_shift=bytes_shift+double_size_bytes; | ||||
|     fseek(f,bytes_shift,'bof'); % move to next interleaved | ||||
|     telemetry.prn_delay_ms = fread (f, count, 'float64',skip_bytes_each_read-double_size_bytes); | ||||
|     bytes_shift=bytes_shift+double_size_bytes; | ||||
|     fseek(f,bytes_shift,'bof'); % move to next interleaved | ||||
|     telemetry.Preamble_symbol_counter = fread (f, count, 'float64',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); | ||||
|      | ||||
|     %%%%%%%% output vars %%%%%%%% | ||||
| %           { | ||||
| % 				double tmp_double; | ||||
| % 				tmp_double = current_synchro_data.Preamble_delay_ms; | ||||
| % 				d_dump_file.write((char*)&tmp_double, sizeof(double)); | ||||
| % 				tmp_double = current_synchro_data.Prn_delay_ms; | ||||
| % 				d_dump_file.write((char*)&tmp_double, sizeof(double)); | ||||
| % 				tmp_double = current_synchro_data.Preamble_symbol_counter; | ||||
| % 				d_dump_file.write((char*)&tmp_double, sizeof(double)); | ||||
| %             } | ||||
|   end | ||||
|    | ||||
|     %           { | ||||
|     % 				double tmp_double; | ||||
|     % 				tmp_double = current_synchro_data.Preamble_delay_ms; | ||||
|     % 				d_dump_file.write((char*)&tmp_double, sizeof(double)); | ||||
|     % 				tmp_double = current_synchro_data.Prn_delay_ms; | ||||
|     % 				d_dump_file.write((char*)&tmp_double, sizeof(double)); | ||||
|     % 				tmp_double = current_synchro_data.Preamble_symbol_counter; | ||||
|     % 				d_dump_file.write((char*)&tmp_double, sizeof(double)); | ||||
|     %             } | ||||
| end | ||||
|  | ||||
|   | ||||
| @@ -1,42 +1,8 @@ | ||||
| % /*! | ||||
| %  * \file plotNavigation.m | ||||
| %  * \brief  | ||||
| %   Functions plots variations of coordinates over time and a 3D position | ||||
| %   plot. It plots receiver coordinates in UTM system or coordinate offsets if | ||||
| %   the true UTM receiver coordinates are provided.   | ||||
| %  * \author Darius Plausinaitis | ||||
| %  * Modified by 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 <http://www.gnu.org/licenses/>. | ||||
| %  * | ||||
| %  * ------------------------------------------------------------------------- | ||||
| %  */  | ||||
|  | ||||
| function plotNavigation(navSolutions, settings,plot_skyplot) | ||||
| %Functions plots variations of coordinates over time and a 3D position | ||||
| %plot. It plots receiver coordinates in UTM system or coordinate offsets if | ||||
| %the true UTM receiver coordinates are provided.   | ||||
| % Function plots variations of coordinates over time and a 3D position | ||||
| % plot. It plots receiver coordinates in UTM system or coordinate offsets if | ||||
| % the true UTM receiver coordinates are provided. | ||||
| % | ||||
| %plotNavigation(navSolutions, settings) | ||||
| % plotNavigation(navSolutions, settings) | ||||
| % | ||||
| %   Inputs: | ||||
| %       navSolutions    - Results from navigation solution function. It | ||||
| @@ -47,47 +13,77 @@ function plotNavigation(navSolutions, settings,plot_skyplot) | ||||
| %       plot_skyplot    - If ==1 then use satellite coordinates to plot the | ||||
| %                       the satellite positions | ||||
|  | ||||
| % Darius Plausinaitis | ||||
| % Modified by Javier Arribas, 2011. jarribas(at)cttc.es | ||||
| % ------------------------------------------------------------------------- | ||||
| % | ||||
| % Copyright (C) 2010-2018  (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 <http://www.gnu.org/licenses/>. | ||||
| % | ||||
| % ------------------------------------------------------------------------- | ||||
| % | ||||
|  | ||||
| function plotNavigation(navSolutions, settings,plot_skyplot) | ||||
|  | ||||
|  | ||||
| %% Plot results in the necessary data exists ============================== | ||||
| if (~isempty(navSolutions)) | ||||
|  | ||||
|      | ||||
|     %% If reference position is not provided, then set reference position | ||||
|     %% to the average postion | ||||
|     if isnan(settings.truePosition.E) || isnan(settings.truePosition.N) ... | ||||
|                                       || isnan(settings.truePosition.U) | ||||
|  | ||||
|         %=== Compute mean values ==========================================  | ||||
|             || isnan(settings.truePosition.U) | ||||
|          | ||||
|         %=== Compute mean values ========================================== | ||||
|         % Remove NaN-s or the output of the function MEAN will be NaN. | ||||
|         refCoord.E = mean(navSolutions.E(~isnan(navSolutions.E))); | ||||
|         refCoord.N = mean(navSolutions.N(~isnan(navSolutions.N))); | ||||
|         refCoord.U = mean(navSolutions.U(~isnan(navSolutions.U))); | ||||
|  | ||||
|          | ||||
|         %Also convert geodetic coordinates to deg:min:sec vector format | ||||
|         meanLongitude = dms2mat(deg2dms(... | ||||
|             mean(navSolutions.longitude(~isnan(navSolutions.longitude)))), -5); | ||||
|         meanLatitude  = dms2mat(deg2dms(... | ||||
|             mean(navSolutions.latitude(~isnan(navSolutions.latitude)))), -5); | ||||
|  | ||||
|         LatLong_str=[num2str(meanLatitude(1)), 'º', ... | ||||
|                             num2str(meanLatitude(2)), '''', ... | ||||
|                             num2str(meanLatitude(3)), '''''', ... | ||||
|                             ',', ... | ||||
|                             num2str(meanLongitude(1)), 'º', ... | ||||
|                             num2str(meanLongitude(2)), '''', ... | ||||
|                             num2str(meanLongitude(3)), ''''''] | ||||
|                              | ||||
|                              | ||||
|          | ||||
|         LatLong_str=[num2str(meanLatitude(1)), '??', ... | ||||
|             num2str(meanLatitude(2)), '''', ... | ||||
|             num2str(meanLatitude(3)), '''''', ... | ||||
|             ',', ... | ||||
|             num2str(meanLongitude(1)), '??', ... | ||||
|             num2str(meanLongitude(2)), '''', ... | ||||
|             num2str(meanLongitude(3)), ''''''] | ||||
|          | ||||
|          | ||||
|          | ||||
|         refPointLgText = ['Mean Position\newline  Lat: ', ... | ||||
|                             num2str(meanLatitude(1)), '{\circ}', ... | ||||
|                             num2str(meanLatitude(2)), '{\prime}', ... | ||||
|                             num2str(meanLatitude(3)), '{\prime}{\prime}', ... | ||||
|                          '\newline Lng: ', ... | ||||
|                             num2str(meanLongitude(1)), '{\circ}', ... | ||||
|                             num2str(meanLongitude(2)), '{\prime}', ... | ||||
|                             num2str(meanLongitude(3)), '{\prime}{\prime}', ... | ||||
|                          '\newline Hgt: ', ... | ||||
|                             num2str(mean(navSolutions.height(~isnan(navSolutions.height))), '%+6.1f')]; | ||||
|                    | ||||
|             num2str(meanLatitude(1)), '{\circ}', ... | ||||
|             num2str(meanLatitude(2)), '{\prime}', ... | ||||
|             num2str(meanLatitude(3)), '{\prime}{\prime}', ... | ||||
|             '\newline Lng: ', ... | ||||
|             num2str(meanLongitude(1)), '{\circ}', ... | ||||
|             num2str(meanLongitude(2)), '{\prime}', ... | ||||
|             num2str(meanLongitude(3)), '{\prime}{\prime}', ... | ||||
|             '\newline Hgt: ', ... | ||||
|             num2str(mean(navSolutions.height(~isnan(navSolutions.height))), '%+6.1f')]; | ||||
|          | ||||
|     else | ||||
|         % compute the mean error for static receiver | ||||
|         mean_position.E = mean(navSolutions.E(~isnan(navSolutions.E))); | ||||
| @@ -100,55 +96,55 @@ if (~isempty(navSolutions)) | ||||
|         error_meters=sqrt((mean_position.E-refCoord.E)^2+(mean_position.N-refCoord.N)^2+(mean_position.U-refCoord.U)^2); | ||||
|          | ||||
|         refPointLgText = ['Reference Position, Mean 3D error = ' num2str(error_meters) ' [m]']; | ||||
|     end     | ||||
|       | ||||
|     end | ||||
|      | ||||
|     figureNumber = 300; | ||||
|     % The 300 is chosen for more convenient handling of the open | ||||
|     % figure windows, when many figures are closed and reopened. Figures | ||||
|     % drawn or opened by the user, will not be "overwritten" by this | ||||
|     % function if the auto numbering is not used. | ||||
|   | ||||
|      | ||||
|     %=== Select (or create) and clear the figure ========================== | ||||
|     figure(figureNumber); | ||||
|     clf   (figureNumber); | ||||
|     set   (figureNumber, 'Name', 'Navigation solutions'); | ||||
|   | ||||
|      | ||||
|     %--- Draw axes -------------------------------------------------------- | ||||
|     handles(1, 1) = subplot(4, 2, 1 : 4); | ||||
|     handles(3, 1) = subplot(4, 2, [5, 7]); | ||||
|     handles(3, 2) = subplot(4, 2, [6, 8]);     | ||||
|   | ||||
| %% Plot all figures ======================================================= | ||||
|   | ||||
|     handles(3, 2) = subplot(4, 2, [6, 8]); | ||||
|      | ||||
|     %% Plot all figures ======================================================= | ||||
|      | ||||
|     %--- Coordinate differences in UTM system ----------------------------- | ||||
|     plot(handles(1, 1), [(navSolutions.E - refCoord.E)', ... | ||||
|                          (navSolutions.N - refCoord.N)',... | ||||
|                          (navSolutions.U - refCoord.U)']); | ||||
|   | ||||
|         (navSolutions.N - refCoord.N)',... | ||||
|         (navSolutions.U - refCoord.U)']); | ||||
|      | ||||
|     title (handles(1, 1), 'Coordinates variations in UTM system'); | ||||
|     legend(handles(1, 1), 'E', 'N', 'U'); | ||||
|     xlabel(handles(1, 1), ['Measurement period: ', ... | ||||
|                                     num2str(settings.navSolPeriod), 'ms']); | ||||
|         num2str(settings.navSolPeriod), 'ms']); | ||||
|     ylabel(handles(1, 1), 'Variations (m)'); | ||||
|     grid  (handles(1, 1)); | ||||
|     axis  (handles(1, 1), 'tight');     | ||||
|   | ||||
|     axis  (handles(1, 1), 'tight'); | ||||
|      | ||||
|     %--- Position plot in UTM system -------------------------------------- | ||||
|     plot3 (handles(3, 1), navSolutions.E - refCoord.E, ... | ||||
|                           navSolutions.N - refCoord.N, ...  | ||||
|                           navSolutions.U - refCoord.U, '+'); | ||||
|         navSolutions.N - refCoord.N, ... | ||||
|         navSolutions.U - refCoord.U, '+'); | ||||
|     hold  (handles(3, 1), 'on'); | ||||
|                        | ||||
|      | ||||
|     %Plot the reference point | ||||
|     plot3 (handles(3, 1), 0, 0, 0, 'r+', 'LineWidth', 1.5, 'MarkerSize', 10); | ||||
|     hold  (handles(3, 1), 'off'); | ||||
|      | ||||
|     view  (handles(3, 1), 0, 90); | ||||
|     axis  (handles(3, 1), 'equal'); | ||||
|     grid  (handles(3, 1), 'minor');     | ||||
|     grid  (handles(3, 1), 'minor'); | ||||
|      | ||||
|     legend(handles(3, 1), 'Measurements', refPointLgText); | ||||
|   | ||||
|      | ||||
|     title (handles(3, 1), 'Positions in UTM system (3D plot)'); | ||||
|     xlabel(handles(3, 1), 'East (m)'); | ||||
|     ylabel(handles(3, 1), 'North (m)'); | ||||
| @@ -157,14 +153,14 @@ if (~isempty(navSolutions)) | ||||
|     if (plot_skyplot==1) | ||||
|         %--- Satellite sky plot ----------------------------------------------- | ||||
|         skyPlot(handles(3, 2), ... | ||||
|                 navSolutions.channel.az, ... | ||||
|                 navSolutions.channel.el, ... | ||||
|                 navSolutions.channel.PRN(:, 1)); | ||||
|              | ||||
|             navSolutions.channel.az, ... | ||||
|             navSolutions.channel.el, ... | ||||
|             navSolutions.channel.PRN(:, 1)); | ||||
|          | ||||
|         title (handles(3, 2), ['Sky plot (mean PDOP: ', ... | ||||
|                                    num2str(mean(navSolutions.DOP(2,:))), ')']);   | ||||
|             num2str(mean(navSolutions.DOP(2,:))), ')']); | ||||
|     end | ||||
|                             | ||||
|      | ||||
| else | ||||
|     disp('plotNavigation: No navigation data to plot.'); | ||||
| end % if (~isempty(navSolutions)) | ||||
|   | ||||
| @@ -1,7 +1,7 @@ | ||||
| function plotTracking(channelList, trackResults, settings) | ||||
| %This function plots the tracking results for the given channel list. | ||||
| % This function plots the tracking results for the given channel list. | ||||
| % | ||||
| %plotTracking(channelList, trackResults, settings) | ||||
| % plotTracking(channelList, trackResults, settings) | ||||
| % | ||||
| %   Inputs: | ||||
| %       channelList     - list of channels to be plotted. | ||||
| @@ -10,7 +10,7 @@ function plotTracking(channelList, trackResults, settings) | ||||
|  | ||||
| %-------------------------------------------------------------------------- | ||||
| %                           SoftGNSS v3.0 | ||||
| %  | ||||
| % | ||||
| % Copyright (C) Darius Plausinaitis | ||||
| % Written by Darius Plausinaitis | ||||
| %-------------------------------------------------------------------------- | ||||
| @@ -30,160 +30,158 @@ function plotTracking(channelList, trackResults, settings) | ||||
| %USA. | ||||
| %-------------------------------------------------------------------------- | ||||
|  | ||||
| %CVS record: | ||||
| %$Id: plotTracking.m,v 1.5.2.23 2006/08/14 14:45:14 dpl Exp $ | ||||
|  | ||||
| % Protection - if the list contains incorrect channel numbers | ||||
| channelList = intersect(channelList, 1:settings.numberOfChannels); | ||||
|  | ||||
| %=== For all listed channels ============================================== | ||||
| for channelNr = channelList | ||||
|  | ||||
| %% Select (or create) and clear the figure ================================ | ||||
|      | ||||
|     %% Select (or create) and clear the figure ================================ | ||||
|     % The number 200 is added just for more convenient handling of the open | ||||
|     % figure windows, when many figures are closed and reopened. | ||||
|     % Figures drawn or opened by the user, will not be "overwritten" by | ||||
|     % this function. | ||||
|  | ||||
|      | ||||
|     figure(channelNr +200); | ||||
|     clf(channelNr +200); | ||||
|     set(channelNr +200, 'Name', ['Channel ', num2str(channelNr), ... | ||||
|                                  ' (PRN ', ... | ||||
|                                  num2str(trackResults(channelNr).PRN(end-1)), ... | ||||
|                                  ') results']); | ||||
|  | ||||
| %% Draw axes ============================================================== | ||||
|         % Row 1 | ||||
|         handles(1, 1) = subplot(4, 3, 1); | ||||
|         handles(1, 2) = subplot(4, 3, [2 3]); | ||||
|         % Row 2 | ||||
|         handles(2, 1) = subplot(4, 3, 4); | ||||
|         handles(2, 2) = subplot(4, 3, [5 6]); | ||||
|         % Row 3 | ||||
|         handles(3, 1) = subplot(4, 3, 7); | ||||
|         handles(3, 2) = subplot(4, 3, 8); | ||||
|         handles(3, 3) = subplot(4, 3, 9); | ||||
|         % Row 4 | ||||
|         handles(4, 1) = subplot(4, 3, 10); | ||||
|         handles(4, 2) = subplot(4, 3, 11); | ||||
|         handles(4, 3) = subplot(4, 3, 12); | ||||
|          | ||||
|  | ||||
| %% Plot all figures ======================================================= | ||||
|  | ||||
|         timeAxisInSeconds = (1:settings.msToProcess)/1000; | ||||
|  | ||||
|         %----- Discrete-Time Scatter Plot --------------------------------- | ||||
|         plot(handles(1, 1), trackResults(channelNr).I_P,... | ||||
|                             trackResults(channelNr).Q_P, ... | ||||
|                             '.'); | ||||
|  | ||||
|         grid  (handles(1, 1)); | ||||
|         axis  (handles(1, 1), 'equal'); | ||||
|         title (handles(1, 1), 'Discrete-Time Scatter Plot'); | ||||
|         xlabel(handles(1, 1), 'I prompt'); | ||||
|         ylabel(handles(1, 1), 'Q prompt'); | ||||
|  | ||||
|         %----- Nav bits --------------------------------------------------- | ||||
|         plot  (handles(1, 2), timeAxisInSeconds, ... | ||||
|                               trackResults(channelNr).I_P); | ||||
|  | ||||
|         grid  (handles(1, 2)); | ||||
|         title (handles(1, 2), 'Bits of the navigation message'); | ||||
|         xlabel(handles(1, 2), 'Time (s)'); | ||||
|         axis  (handles(1, 2), 'tight'); | ||||
|  | ||||
|         %----- PLL discriminator unfiltered-------------------------------- | ||||
|         plot  (handles(2, 1), timeAxisInSeconds, ... | ||||
|                               trackResults(channelNr).pllDiscr, 'r');       | ||||
|  | ||||
|         grid  (handles(2, 1)); | ||||
|         axis  (handles(2, 1), 'tight'); | ||||
|         xlabel(handles(2, 1), 'Time (s)'); | ||||
|         ylabel(handles(2, 1), 'Amplitude'); | ||||
|         title (handles(2, 1), 'Raw PLL discriminator'); | ||||
|  | ||||
|         %----- Correlation ------------------------------------------------ | ||||
|         plot(handles(2, 2), timeAxisInSeconds, ... | ||||
|                             [sqrt(trackResults(channelNr).I_E.^2 + ... | ||||
|                                   trackResults(channelNr).Q_E.^2)', ... | ||||
|                              sqrt(trackResults(channelNr).I_P.^2 + ... | ||||
|                                   trackResults(channelNr).Q_P.^2)', ... | ||||
|                              sqrt(trackResults(channelNr).I_L.^2 + ... | ||||
|                                   trackResults(channelNr).Q_L.^2)'], ... | ||||
|                             '-*'); | ||||
|  | ||||
|         grid  (handles(2, 2)); | ||||
|         title (handles(2, 2), 'Correlation results'); | ||||
|         xlabel(handles(2, 2), 'Time (s)'); | ||||
|         axis  (handles(2, 2), 'tight'); | ||||
|          | ||||
|         hLegend = legend(handles(2, 2), '$\sqrt{I_{E}^2 + Q_{E}^2}$', ... | ||||
|                                         '$\sqrt{I_{P}^2 + Q_{P}^2}$', ... | ||||
|                                         '$\sqrt{I_{L}^2 + Q_{L}^2}$'); | ||||
|                            | ||||
|         %set interpreter from tex to latex. This will draw \sqrt correctly | ||||
|         set(hLegend, 'Interpreter', 'Latex'); | ||||
|  | ||||
|         %----- PLL discriminator filtered---------------------------------- | ||||
|         plot  (handles(3, 1), timeAxisInSeconds, ... | ||||
|                               trackResults(channelNr).pllDiscrFilt(1:settings.msToProcess), 'b');       | ||||
|  | ||||
|         grid  (handles(3, 1)); | ||||
|         axis  (handles(3, 1), 'tight'); | ||||
|         xlabel(handles(3, 1), 'Time (s)'); | ||||
|         ylabel(handles(3, 1), 'Amplitude'); | ||||
|         title (handles(3, 1), 'Filtered PLL discriminator'); | ||||
|  | ||||
|         %----- DLL discriminator unfiltered-------------------------------- | ||||
|         plot  (handles(3, 2), timeAxisInSeconds, ... | ||||
|                               trackResults(channelNr).dllDiscr, 'r');       | ||||
|  | ||||
|         grid  (handles(3, 2)); | ||||
|         axis  (handles(3, 2), 'tight'); | ||||
|         xlabel(handles(3, 2), 'Time (s)'); | ||||
|         ylabel(handles(3, 2), 'Amplitude'); | ||||
|         title (handles(3, 2), 'Raw DLL discriminator'); | ||||
|  | ||||
|         %----- DLL discriminator filtered---------------------------------- | ||||
|         plot  (handles(3, 3), timeAxisInSeconds, ... | ||||
|                               trackResults(channelNr).dllDiscrFilt, 'b');       | ||||
|  | ||||
|         grid  (handles(3, 3)); | ||||
|         axis  (handles(3, 3), 'tight'); | ||||
|         xlabel(handles(3, 3), 'Time (s)'); | ||||
|         ylabel(handles(3, 3), 'Amplitude'); | ||||
|         title (handles(3, 3), 'Filtered DLL discriminator'); | ||||
|          | ||||
|         %----- CNo for signal---------------------------------- | ||||
|         plot  (handles(4, 1), timeAxisInSeconds, ... | ||||
|             trackResults(channelNr).CNo(1:settings.msToProcess), 'b');       | ||||
|  | ||||
|         grid  (handles(4, 1)); | ||||
|         axis  (handles(4, 1), 'tight'); | ||||
|         xlabel(handles(4, 1), 'Time (s)'); | ||||
|         ylabel(handles(4, 1), 'CNo (dB-Hz)'); | ||||
|         title (handles(4, 1), 'Carrier to Noise Ratio'); | ||||
|  | ||||
|         %----- Carrier Frequency -------------------------------- | ||||
|         plot  (handles(4, 2), timeAxisInSeconds(2:end), ... | ||||
|             trackResults(channelNr).carrFreq(2:settings.msToProcess), 'Color',[0.42 0.25 0.39]);     | ||||
|  | ||||
|         grid  (handles(4, 2)); | ||||
|         axis  (handles(4, 2)); | ||||
|         xlabel(handles(4, 2), 'Time (s)'); | ||||
|         ylabel(handles(4, 2), 'Freq (hz)'); | ||||
|         title (handles(4, 2), 'Carrier Freq'); | ||||
|  | ||||
|         %----- Code Frequency---------------------------------- | ||||
|         %--- Skip sample 0 to help with results display | ||||
|         plot  (handles(4, 3), timeAxisInSeconds(2:end), ... | ||||
|              trackResults(channelNr).codeFreq(2:settings.msToProcess), 'Color',[0.2 0.3 0.49]);       | ||||
|  | ||||
|         grid  (handles(4, 3)); | ||||
|         axis  (handles(4, 3), 'tight'); | ||||
|         xlabel(handles(4, 3), 'Time (s)'); | ||||
|         ylabel(handles(4, 3), 'Freq (Hz)'); | ||||
|         title (handles(4, 3), 'Code Freq');         | ||||
|  | ||||
|         ' (PRN ', ... | ||||
|         num2str(trackResults(channelNr).PRN(end-1)), ... | ||||
|         ') results']); | ||||
|      | ||||
|     %% Draw axes ============================================================== | ||||
|     % Row 1 | ||||
|     handles(1, 1) = subplot(4, 3, 1); | ||||
|     handles(1, 2) = subplot(4, 3, [2 3]); | ||||
|     % Row 2 | ||||
|     handles(2, 1) = subplot(4, 3, 4); | ||||
|     handles(2, 2) = subplot(4, 3, [5 6]); | ||||
|     % Row 3 | ||||
|     handles(3, 1) = subplot(4, 3, 7); | ||||
|     handles(3, 2) = subplot(4, 3, 8); | ||||
|     handles(3, 3) = subplot(4, 3, 9); | ||||
|     % Row 4 | ||||
|     handles(4, 1) = subplot(4, 3, 10); | ||||
|     handles(4, 2) = subplot(4, 3, 11); | ||||
|     handles(4, 3) = subplot(4, 3, 12); | ||||
|      | ||||
|      | ||||
|     %% Plot all figures ======================================================= | ||||
|      | ||||
|     timeAxisInSeconds = (1:settings.msToProcess)/1000; | ||||
|      | ||||
|     %----- Discrete-Time Scatter Plot --------------------------------- | ||||
|     plot(handles(1, 1), trackResults(channelNr).I_P,... | ||||
|         trackResults(channelNr).Q_P, ... | ||||
|         '.'); | ||||
|      | ||||
|     grid  (handles(1, 1)); | ||||
|     axis  (handles(1, 1), 'equal'); | ||||
|     title (handles(1, 1), 'Discrete-Time Scatter Plot'); | ||||
|     xlabel(handles(1, 1), 'I prompt'); | ||||
|     ylabel(handles(1, 1), 'Q prompt'); | ||||
|      | ||||
|     %----- Nav bits --------------------------------------------------- | ||||
|     plot  (handles(1, 2), timeAxisInSeconds, ... | ||||
|         trackResults(channelNr).I_P); | ||||
|      | ||||
|     grid  (handles(1, 2)); | ||||
|     title (handles(1, 2), 'Bits of the navigation message'); | ||||
|     xlabel(handles(1, 2), 'Time (s)'); | ||||
|     axis  (handles(1, 2), 'tight'); | ||||
|      | ||||
|     %----- PLL discriminator unfiltered-------------------------------- | ||||
|     plot  (handles(2, 1), timeAxisInSeconds, ... | ||||
|         trackResults(channelNr).pllDiscr, 'r'); | ||||
|      | ||||
|     grid  (handles(2, 1)); | ||||
|     axis  (handles(2, 1), 'tight'); | ||||
|     xlabel(handles(2, 1), 'Time (s)'); | ||||
|     ylabel(handles(2, 1), 'Amplitude'); | ||||
|     title (handles(2, 1), 'Raw PLL discriminator'); | ||||
|      | ||||
|     %----- Correlation ------------------------------------------------ | ||||
|     plot(handles(2, 2), timeAxisInSeconds, ... | ||||
|         [sqrt(trackResults(channelNr).I_E.^2 + ... | ||||
|         trackResults(channelNr).Q_E.^2)', ... | ||||
|         sqrt(trackResults(channelNr).I_P.^2 + ... | ||||
|         trackResults(channelNr).Q_P.^2)', ... | ||||
|         sqrt(trackResults(channelNr).I_L.^2 + ... | ||||
|         trackResults(channelNr).Q_L.^2)'], ... | ||||
|         '-*'); | ||||
|      | ||||
|     grid  (handles(2, 2)); | ||||
|     title (handles(2, 2), 'Correlation results'); | ||||
|     xlabel(handles(2, 2), 'Time (s)'); | ||||
|     axis  (handles(2, 2), 'tight'); | ||||
|      | ||||
|     hLegend = legend(handles(2, 2), '$\sqrt{I_{E}^2 + Q_{E}^2}$', ... | ||||
|         '$\sqrt{I_{P}^2 + Q_{P}^2}$', ... | ||||
|         '$\sqrt{I_{L}^2 + Q_{L}^2}$'); | ||||
|      | ||||
|     %set interpreter from tex to latex. This will draw \sqrt correctly | ||||
|     set(hLegend, 'Interpreter', 'Latex'); | ||||
|      | ||||
|     %----- PLL discriminator filtered---------------------------------- | ||||
|     plot  (handles(3, 1), timeAxisInSeconds, ... | ||||
|         trackResults(channelNr).pllDiscrFilt(1:settings.msToProcess), 'b'); | ||||
|      | ||||
|     grid  (handles(3, 1)); | ||||
|     axis  (handles(3, 1), 'tight'); | ||||
|     xlabel(handles(3, 1), 'Time (s)'); | ||||
|     ylabel(handles(3, 1), 'Amplitude'); | ||||
|     title (handles(3, 1), 'Filtered PLL discriminator'); | ||||
|      | ||||
|     %----- DLL discriminator unfiltered-------------------------------- | ||||
|     plot  (handles(3, 2), timeAxisInSeconds, ... | ||||
|         trackResults(channelNr).dllDiscr, 'r'); | ||||
|      | ||||
|     grid  (handles(3, 2)); | ||||
|     axis  (handles(3, 2), 'tight'); | ||||
|     xlabel(handles(3, 2), 'Time (s)'); | ||||
|     ylabel(handles(3, 2), 'Amplitude'); | ||||
|     title (handles(3, 2), 'Raw DLL discriminator'); | ||||
|      | ||||
|     %----- DLL discriminator filtered---------------------------------- | ||||
|     plot  (handles(3, 3), timeAxisInSeconds, ... | ||||
|         trackResults(channelNr).dllDiscrFilt, 'b'); | ||||
|      | ||||
|     grid  (handles(3, 3)); | ||||
|     axis  (handles(3, 3), 'tight'); | ||||
|     xlabel(handles(3, 3), 'Time (s)'); | ||||
|     ylabel(handles(3, 3), 'Amplitude'); | ||||
|     title (handles(3, 3), 'Filtered DLL discriminator'); | ||||
|      | ||||
|     %----- CNo for signal---------------------------------- | ||||
|     plot  (handles(4, 1), timeAxisInSeconds, ... | ||||
|         trackResults(channelNr).CNo(1:settings.msToProcess), 'b'); | ||||
|      | ||||
|     grid  (handles(4, 1)); | ||||
|     axis  (handles(4, 1), 'tight'); | ||||
|     xlabel(handles(4, 1), 'Time (s)'); | ||||
|     ylabel(handles(4, 1), 'CNo (dB-Hz)'); | ||||
|     title (handles(4, 1), 'Carrier to Noise Ratio'); | ||||
|      | ||||
|     %----- Carrier Frequency -------------------------------- | ||||
|     plot  (handles(4, 2), timeAxisInSeconds(2:end), ... | ||||
|         trackResults(channelNr).carrFreq(2:settings.msToProcess), 'Color',[0.42 0.25 0.39]); | ||||
|      | ||||
|     grid  (handles(4, 2)); | ||||
|     axis  (handles(4, 2)); | ||||
|     xlabel(handles(4, 2), 'Time (s)'); | ||||
|     ylabel(handles(4, 2), 'Freq (hz)'); | ||||
|     title (handles(4, 2), 'Carrier Freq'); | ||||
|      | ||||
|     %----- Code Frequency---------------------------------- | ||||
|     %--- Skip sample 0 to help with results display | ||||
|     plot  (handles(4, 3), timeAxisInSeconds(2:end), ... | ||||
|         trackResults(channelNr).codeFreq(2:settings.msToProcess), 'Color',[0.2 0.3 0.49]); | ||||
|      | ||||
|     grid  (handles(4, 3)); | ||||
|     axis  (handles(4, 3), 'tight'); | ||||
|     xlabel(handles(4, 3), 'Time (s)'); | ||||
|     ylabel(handles(4, 3), 'Freq (Hz)'); | ||||
|     title (handles(4, 3), 'Code Freq'); | ||||
|      | ||||
| end % for channelNr = channelList | ||||
|   | ||||
| @@ -1,7 +1,7 @@ | ||||
| function plotVEMLTracking(channelList, trackResults, settings) | ||||
| %This function plots the tracking results for the given channel list. | ||||
| % This function plots the tracking results for the given channel list. | ||||
| % | ||||
| %plotTracking(channelList, trackResults, settings) | ||||
| % plotTracking(channelList, trackResults, settings) | ||||
| % | ||||
| %   Inputs: | ||||
| %       channelList     - list of channels to be plotted. | ||||
| @@ -10,7 +10,7 @@ function plotVEMLTracking(channelList, trackResults, settings) | ||||
|  | ||||
| %-------------------------------------------------------------------------- | ||||
| %                           SoftGNSS v3.0 | ||||
| %  | ||||
| % | ||||
| % Copyright (C) Darius Plausinaitis | ||||
| % Written by Darius Plausinaitis | ||||
| %-------------------------------------------------------------------------- | ||||
| @@ -30,136 +30,133 @@ function plotVEMLTracking(channelList, trackResults, settings) | ||||
| %USA. | ||||
| %-------------------------------------------------------------------------- | ||||
|  | ||||
| %CVS record: | ||||
| %$Id: plotTracking.m,v 1.5.2.23 2006/08/14 14:45:14 dpl Exp $ | ||||
|  | ||||
| % Protection - if the list contains incorrect channel numbers | ||||
| channelList = intersect(channelList, 1:settings.numberOfChannels); | ||||
|  | ||||
| %=== For all listed channels ============================================== | ||||
| for channelNr = channelList | ||||
|  | ||||
| %% Select (or create) and clear the figure ================================ | ||||
|      | ||||
|     %% Select (or create) and clear the figure ================================ | ||||
|     % The number 200 is added just for more convenient handling of the open | ||||
|     % figure windows, when many figures are closed and reopened. | ||||
|     % Figures drawn or opened by the user, will not be "overwritten" by | ||||
|     % this function. | ||||
|  | ||||
|      | ||||
|     figure(channelNr +200); | ||||
|     clf(channelNr +200); | ||||
|     set(channelNr +200, 'Name', ['Channel ', num2str(channelNr), ... | ||||
|                                  ' (PRN ', ... | ||||
|                                  num2str(trackResults(channelNr).PRN(end-1)), ... | ||||
|                                  ') results']); | ||||
|  | ||||
| %% Draw axes ============================================================== | ||||
|         % Row 1 | ||||
|         handles(1, 1) = subplot(3, 3, 1); | ||||
|         handles(1, 2) = subplot(3, 3, [2 3]); | ||||
|         % Row 2 | ||||
|         handles(2, 1) = subplot(3, 3, 4); | ||||
|         handles(2, 2) = subplot(3, 3, [5 6]); | ||||
|         % Row 3 | ||||
|         handles(3, 1) = subplot(3, 3, 7); | ||||
|         handles(3, 2) = subplot(3, 3, 8); | ||||
|         handles(3, 3) = subplot(3, 3, 9); | ||||
|  | ||||
| %% Plot all figures ======================================================= | ||||
|  | ||||
|         timeAxisInSeconds = (1:4:settings.msToProcess)/1000; | ||||
|  | ||||
|         %----- Discrete-Time Scatter Plot --------------------------------- | ||||
|         plot(handles(1, 1), trackResults(channelNr).data_I,... | ||||
|                             trackResults(channelNr).data_Q, ... | ||||
|                             '.'); | ||||
|  | ||||
|         grid  (handles(1, 1)); | ||||
|         axis  (handles(1, 1), 'equal'); | ||||
|         title (handles(1, 1), 'Discrete-Time Scatter Plot'); | ||||
|         xlabel(handles(1, 1), 'I prompt'); | ||||
|         ylabel(handles(1, 1), 'Q prompt'); | ||||
|  | ||||
|         %----- Nav bits --------------------------------------------------- | ||||
|         t = (1:length(trackResults(channelNr).data_I)); | ||||
|         plot  (handles(1, 2), t, ... | ||||
|                               trackResults(channelNr).data_I); | ||||
|  | ||||
|         grid  (handles(1, 2)); | ||||
|         title (handles(1, 2), 'Bits of the navigation message'); | ||||
|         xlabel(handles(1, 2), 'Time (s)'); | ||||
|         axis  (handles(1, 2), 'tight'); | ||||
|  | ||||
|         %----- PLL discriminator unfiltered-------------------------------- | ||||
|         t = (1:length(trackResults(channelNr).pllDiscr)); | ||||
|         plot  (handles(2, 1), t, ... | ||||
|                               trackResults(channelNr).pllDiscr, 'r');       | ||||
|  | ||||
|         grid  (handles(2, 1)); | ||||
|         axis  (handles(2, 1), 'tight'); | ||||
|         xlabel(handles(2, 1), 'Time (s)'); | ||||
|         ylabel(handles(2, 1), 'Amplitude'); | ||||
|         title (handles(2, 1), 'Raw PLL discriminator'); | ||||
|  | ||||
|         %----- Correlation ------------------------------------------------ | ||||
|         t = (1:length(trackResults(channelNr).I_VE)); | ||||
|         plot(handles(2, 2), t, ... | ||||
|                             [sqrt(trackResults(channelNr).I_VE.^2 + ... | ||||
|                                   trackResults(channelNr).Q_VE.^2)', ... | ||||
|                              sqrt(trackResults(channelNr).I_E.^2 + ... | ||||
|                                   trackResults(channelNr).Q_E.^2)', ... | ||||
|                              sqrt(trackResults(channelNr).I_P.^2 + ... | ||||
|                                   trackResults(channelNr).Q_P.^2)', ... | ||||
|                              sqrt(trackResults(channelNr).I_L.^2 + ... | ||||
|                                   trackResults(channelNr).Q_L.^2)', ... | ||||
|                              sqrt(trackResults(channelNr).I_VL.^2 + ... | ||||
|                                   trackResults(channelNr).Q_VL.^2)'], ... | ||||
|                             '-*'); | ||||
|  | ||||
|         grid  (handles(2, 2)); | ||||
|         title (handles(2, 2), 'Correlation results'); | ||||
|         xlabel(handles(2, 2), 'Time (s)'); | ||||
|         axis  (handles(2, 2), 'tight'); | ||||
|          | ||||
|         hLegend = legend(handles(2, 2), '$\sqrt{I_{VE}^2 + Q_{VE}^2}$', ... | ||||
|                                         '$\sqrt{I_{E}^2 + Q_{E}^2}$', ... | ||||
|                                         '$\sqrt{I_{P}^2 + Q_{P}^2}$', ... | ||||
|                                         '$\sqrt{I_{L}^2 + Q_{L}^2}$', ... | ||||
|                                         '$\sqrt{I_{VL}^2 + Q_{VL}^2}$'); | ||||
|                            | ||||
|         %set interpreter from tex to latex. This will draw \sqrt correctly | ||||
|         set(hLegend, 'Interpreter', 'Latex'); | ||||
|  | ||||
|         %----- PLL discriminator filtered---------------------------------- | ||||
|         t = (1:length(trackResults(channelNr).pllDiscrFilt)); | ||||
|         plot  (handles(3, 1), t, ... | ||||
|                               trackResults(channelNr).pllDiscrFilt, 'b');       | ||||
|  | ||||
|         grid  (handles(3, 1)); | ||||
|         axis  (handles(3, 1), 'tight'); | ||||
|         xlabel(handles(3, 1), 'Time (s)'); | ||||
|         ylabel(handles(3, 1), 'Amplitude'); | ||||
|         title (handles(3, 1), 'Filtered PLL discriminator'); | ||||
|  | ||||
|         %----- DLL discriminator unfiltered-------------------------------- | ||||
|         t = (1:length(trackResults(channelNr).dllDiscr)); | ||||
|         plot  (handles(3, 2), t, ... | ||||
|                               trackResults(channelNr).dllDiscr, 'r');       | ||||
|  | ||||
|         grid  (handles(3, 2)); | ||||
|         axis  (handles(3, 2), 'tight'); | ||||
|         xlabel(handles(3, 2), 'Time (s)'); | ||||
|         ylabel(handles(3, 2), 'Amplitude'); | ||||
|         title (handles(3, 2), 'Raw DLL discriminator'); | ||||
|  | ||||
|         %----- DLL discriminator filtered---------------------------------- | ||||
|         t = (1:length(trackResults(channelNr).dllDiscrFilt)); | ||||
|         plot  (handles(3, 3), t, ... | ||||
|                               trackResults(channelNr).dllDiscrFilt, 'b');       | ||||
|  | ||||
|         grid  (handles(3, 3)); | ||||
|         axis  (handles(3, 3), 'tight'); | ||||
|         xlabel(handles(3, 3), 'Time (s)'); | ||||
|         ylabel(handles(3, 3), 'Amplitude'); | ||||
|         title (handles(3, 3), 'Filtered DLL discriminator'); | ||||
|  | ||||
|         ' (PRN ', ... | ||||
|         num2str(trackResults(channelNr).PRN(end-1)), ... | ||||
|         ') results']); | ||||
|      | ||||
|     %% Draw axes ============================================================== | ||||
|     % Row 1 | ||||
|     handles(1, 1) = subplot(3, 3, 1); | ||||
|     handles(1, 2) = subplot(3, 3, [2 3]); | ||||
|     % Row 2 | ||||
|     handles(2, 1) = subplot(3, 3, 4); | ||||
|     handles(2, 2) = subplot(3, 3, [5 6]); | ||||
|     % Row 3 | ||||
|     handles(3, 1) = subplot(3, 3, 7); | ||||
|     handles(3, 2) = subplot(3, 3, 8); | ||||
|     handles(3, 3) = subplot(3, 3, 9); | ||||
|      | ||||
|     %% Plot all figures ======================================================= | ||||
|      | ||||
|     timeAxisInSeconds = (1:4:settings.msToProcess)/1000; | ||||
|      | ||||
|     %----- Discrete-Time Scatter Plot --------------------------------- | ||||
|     plot(handles(1, 1), trackResults(channelNr).data_I,... | ||||
|         trackResults(channelNr).data_Q, ... | ||||
|         '.'); | ||||
|      | ||||
|     grid  (handles(1, 1)); | ||||
|     axis  (handles(1, 1), 'equal'); | ||||
|     title (handles(1, 1), 'Discrete-Time Scatter Plot'); | ||||
|     xlabel(handles(1, 1), 'I prompt'); | ||||
|     ylabel(handles(1, 1), 'Q prompt'); | ||||
|      | ||||
|     %----- Nav bits --------------------------------------------------- | ||||
|     t = (1:length(trackResults(channelNr).data_I)); | ||||
|     plot  (handles(1, 2), t, ... | ||||
|         trackResults(channelNr).data_I); | ||||
|      | ||||
|     grid  (handles(1, 2)); | ||||
|     title (handles(1, 2), 'Bits of the navigation message'); | ||||
|     xlabel(handles(1, 2), 'Time (s)'); | ||||
|     axis  (handles(1, 2), 'tight'); | ||||
|      | ||||
|     %----- PLL discriminator unfiltered-------------------------------- | ||||
|     t = (1:length(trackResults(channelNr).pllDiscr)); | ||||
|     plot  (handles(2, 1), t, ... | ||||
|         trackResults(channelNr).pllDiscr, 'r'); | ||||
|      | ||||
|     grid  (handles(2, 1)); | ||||
|     axis  (handles(2, 1), 'tight'); | ||||
|     xlabel(handles(2, 1), 'Time (s)'); | ||||
|     ylabel(handles(2, 1), 'Amplitude'); | ||||
|     title (handles(2, 1), 'Raw PLL discriminator'); | ||||
|      | ||||
|     %----- Correlation ------------------------------------------------ | ||||
|     t = (1:length(trackResults(channelNr).I_VE)); | ||||
|     plot(handles(2, 2), t, ... | ||||
|         [sqrt(trackResults(channelNr).I_VE.^2 + ... | ||||
|         trackResults(channelNr).Q_VE.^2)', ... | ||||
|         sqrt(trackResults(channelNr).I_E.^2 + ... | ||||
|         trackResults(channelNr).Q_E.^2)', ... | ||||
|         sqrt(trackResults(channelNr).I_P.^2 + ... | ||||
|         trackResults(channelNr).Q_P.^2)', ... | ||||
|         sqrt(trackResults(channelNr).I_L.^2 + ... | ||||
|         trackResults(channelNr).Q_L.^2)', ... | ||||
|         sqrt(trackResults(channelNr).I_VL.^2 + ... | ||||
|         trackResults(channelNr).Q_VL.^2)'], ... | ||||
|         '-*'); | ||||
|      | ||||
|     grid  (handles(2, 2)); | ||||
|     title (handles(2, 2), 'Correlation results'); | ||||
|     xlabel(handles(2, 2), 'Time (s)'); | ||||
|     axis  (handles(2, 2), 'tight'); | ||||
|      | ||||
|     hLegend = legend(handles(2, 2), '$\sqrt{I_{VE}^2 + Q_{VE}^2}$', ... | ||||
|         '$\sqrt{I_{E}^2 + Q_{E}^2}$', ... | ||||
|         '$\sqrt{I_{P}^2 + Q_{P}^2}$', ... | ||||
|         '$\sqrt{I_{L}^2 + Q_{L}^2}$', ... | ||||
|         '$\sqrt{I_{VL}^2 + Q_{VL}^2}$'); | ||||
|      | ||||
|     %set interpreter from tex to latex. This will draw \sqrt correctly | ||||
|     set(hLegend, 'Interpreter', 'Latex'); | ||||
|      | ||||
|     %----- PLL discriminator filtered---------------------------------- | ||||
|     t = (1:length(trackResults(channelNr).pllDiscrFilt)); | ||||
|     plot  (handles(3, 1), t, ... | ||||
|         trackResults(channelNr).pllDiscrFilt, 'b'); | ||||
|      | ||||
|     grid  (handles(3, 1)); | ||||
|     axis  (handles(3, 1), 'tight'); | ||||
|     xlabel(handles(3, 1), 'Time (s)'); | ||||
|     ylabel(handles(3, 1), 'Amplitude'); | ||||
|     title (handles(3, 1), 'Filtered PLL discriminator'); | ||||
|      | ||||
|     %----- DLL discriminator unfiltered-------------------------------- | ||||
|     t = (1:length(trackResults(channelNr).dllDiscr)); | ||||
|     plot  (handles(3, 2), t, ... | ||||
|         trackResults(channelNr).dllDiscr, 'r'); | ||||
|      | ||||
|     grid  (handles(3, 2)); | ||||
|     axis  (handles(3, 2), 'tight'); | ||||
|     xlabel(handles(3, 2), 'Time (s)'); | ||||
|     ylabel(handles(3, 2), 'Amplitude'); | ||||
|     title (handles(3, 2), 'Raw DLL discriminator'); | ||||
|      | ||||
|     %----- DLL discriminator filtered---------------------------------- | ||||
|     t = (1:length(trackResults(channelNr).dllDiscrFilt)); | ||||
|     plot  (handles(3, 3), t, ... | ||||
|         trackResults(channelNr).dllDiscrFilt, 'b'); | ||||
|      | ||||
|     grid  (handles(3, 3)); | ||||
|     axis  (handles(3, 3), 'tight'); | ||||
|     xlabel(handles(3, 3), 'Time (s)'); | ||||
|     ylabel(handles(3, 3), 'Amplitude'); | ||||
|     title (handles(3, 3), 'Filtered DLL discriminator'); | ||||
|      | ||||
| end % for channelNr = channelList | ||||
|   | ||||
| @@ -1,50 +1,54 @@ | ||||
| % Usage: read_complex_binary (filename, [count], [start_sample]) | ||||
| % | ||||
| % Copyright 2001 Free Software Foundation, Inc. | ||||
| % Opens filename and returns the contents as a column vector, | ||||
| % treating them as 32 bit complex numbers | ||||
| % | ||||
| % This file is part of GNU Radio | ||||
|  | ||||
| % ------------------------------------------------------------------------- | ||||
| % | ||||
| % GNU Radio is free software; you can redistribute it and/or modify | ||||
| % Copyright (C) 2010-2018  (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, or (at your option) | ||||
| % any later version. | ||||
| % the Free Software Foundation, either version 3 of the License, or | ||||
| % at your option) any later version. | ||||
| % | ||||
| % GNU Radio is distributed in the hope that it will be useful, | ||||
| % 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 GNU Radio; see the file COPYING.  If not, write to | ||||
| % the Free Software Foundation, Inc., 51 Franklin Street, | ||||
| % Boston, MA 02110-1301, USA. | ||||
| % along with GNSS-SDR. If not, see <http://www.gnu.org/licenses/>. | ||||
| % | ||||
| % ------------------------------------------------------------------------- | ||||
| % | ||||
|  | ||||
| function v = read_complex_binary (filename, count, start_sample) | ||||
|  | ||||
|   %% usage: read_complex_binary (filename, [count], [start_sample]) | ||||
|   %% | ||||
|   %%  open filename and return the contents as a column vector, | ||||
|   %%  treating them as 32 bit complex numbers | ||||
|   %% | ||||
|  | ||||
|   m = nargchk (1,2,nargin); | ||||
|   if (m) | ||||
| m = nargchk (1,2,nargin); | ||||
| if (m) | ||||
|     %usage (m); | ||||
|   end | ||||
| end | ||||
|  | ||||
|   if (nargin < 2) | ||||
| if (nargin < 2) | ||||
|     count = Inf; | ||||
|     start_sample=0; | ||||
|   end | ||||
| end | ||||
|  | ||||
|   if (nargin < 3) | ||||
| if (nargin < 3) | ||||
|     start_sample=0; | ||||
|   end | ||||
|    | ||||
|   f = fopen (filename, 'rb'); | ||||
|   if (f < 0) | ||||
| end | ||||
|  | ||||
| f = fopen (filename, 'rb'); | ||||
| if (f < 0) | ||||
|     v = 0; | ||||
|   else | ||||
| else | ||||
|     if (start_sample>0) | ||||
|         bytes_per_sample=4; | ||||
|         fseek(f,start_sample*bytes_per_sample,'bof'); | ||||
| @@ -54,4 +58,4 @@ function v = read_complex_binary (filename, count, start_sample) | ||||
|     v = t(1,:) + t(2,:)*i; | ||||
|     [r, c] = size (v); | ||||
|     v = reshape (v, c, r); | ||||
|   end | ||||
| end | ||||
|   | ||||
| @@ -1,48 +1,52 @@ | ||||
| % Usage: read_complex_binary (filename, [count]) | ||||
| % | ||||
| % Copyright 2001 Free Software Foundation, Inc. | ||||
| %  | ||||
| % This file is part of GNU Radio | ||||
| %  | ||||
| % GNU Radio is free software; you can redistribute it and/or modify | ||||
| % Opens filename and returns the contents as a column vector, | ||||
| %  treating them as 32 bit complex numbers | ||||
| % | ||||
|  | ||||
| % ------------------------------------------------------------------------- | ||||
| % | ||||
| % Copyright (C) 2010-2018  (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, or (at your option) | ||||
| % any later version. | ||||
| %  | ||||
| % GNU Radio is distributed in the hope that it will be useful, | ||||
| % 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 GNU Radio; see the file COPYING.  If not, write to | ||||
| % the Free Software Foundation, Inc., 51 Franklin Street, | ||||
| % Boston, MA 02110-1301, USA. | ||||
| %  | ||||
| % along with GNSS-SDR. If not, see <http://www.gnu.org/licenses/>. | ||||
| % | ||||
| % ------------------------------------------------------------------------- | ||||
| % | ||||
|  | ||||
| function v = read_complex_char_binary (filename, count) | ||||
|  | ||||
|   %% usage: read_complex_binary (filename, [count]) | ||||
|   %% | ||||
|   %%  open filename and return the contents as a column vector,  | ||||
|   %%  treating them as 32 bit complex numbers | ||||
|   %% | ||||
|  | ||||
|   m = nargchk (1,2,nargin); | ||||
|   if (m) | ||||
| m = nargchk (1,2,nargin); | ||||
| if (m) | ||||
|     usage (m); | ||||
|   end | ||||
| end | ||||
|  | ||||
|   if (nargin < 2) | ||||
| if (nargin < 2) | ||||
|     count = Inf; | ||||
|   end | ||||
| end | ||||
|  | ||||
|   f = fopen (filename, 'rb'); | ||||
|   if (f < 0) | ||||
| f = fopen (filename, 'rb'); | ||||
| if (f < 0) | ||||
|     v = 0; | ||||
|   else | ||||
| else | ||||
|     t = fread (f, [2, count], 'int8'); | ||||
|     fclose (f); | ||||
|     v = t(1,:) + t(2,:)*i; | ||||
|     [r, c] = size (v); | ||||
|     v = reshape (v, c, r); | ||||
|   end | ||||
| end | ||||
|   | ||||
| @@ -1,48 +1,52 @@ | ||||
| % Usage: read_complex_binary (filename, [count]) | ||||
| % | ||||
| % Copyright 2001 Free Software Foundation, Inc. | ||||
| %  | ||||
| % This file is part of GNU Radio | ||||
| %  | ||||
| % GNU Radio is free software; you can redistribute it and/or modify | ||||
| % Opens filename and returns the contents as a column vector, | ||||
| %  treating them as 32 bit complex numbers | ||||
| % | ||||
|  | ||||
| % ------------------------------------------------------------------------- | ||||
| % | ||||
| % Copyright (C) 2010-2018  (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, or (at your option) | ||||
| % any later version. | ||||
| %  | ||||
| % GNU Radio is distributed in the hope that it will be useful, | ||||
| % 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 GNU Radio; see the file COPYING.  If not, write to | ||||
| % the Free Software Foundation, Inc., 51 Franklin Street, | ||||
| % Boston, MA 02110-1301, USA. | ||||
| %  | ||||
| % along with GNSS-SDR. If not, see <http://www.gnu.org/licenses/>. | ||||
| % | ||||
| % ------------------------------------------------------------------------- | ||||
| % | ||||
|  | ||||
| function v = read_complex_short_binary (filename, count) | ||||
|  | ||||
|   %% usage: read_complex_binary (filename, [count]) | ||||
|   %% | ||||
|   %%  open filename and return the contents as a column vector,  | ||||
|   %%  treating them as 32 bit complex numbers | ||||
|   %% | ||||
|  | ||||
|   m = nargchk (1,2,nargin); | ||||
|   if (m) | ||||
| m = nargchk (1,2,nargin); | ||||
| if (m) | ||||
|     usage (m); | ||||
|   end | ||||
| end | ||||
|  | ||||
|   if (nargin < 2) | ||||
| if (nargin < 2) | ||||
|     count = Inf; | ||||
|   end | ||||
| end | ||||
|  | ||||
|   f = fopen (filename, 'rb'); | ||||
|   if (f < 0) | ||||
| f = fopen (filename, 'rb'); | ||||
| if (f < 0) | ||||
|     v = 0; | ||||
|   else | ||||
| else | ||||
|     t = fread (f, [2, count], 'short'); | ||||
|     fclose (f); | ||||
|     v = t(1,:) + t(2,:)*i; | ||||
|     [r, c] = size (v); | ||||
|     v = reshape (v, c, r); | ||||
|   end | ||||
| end | ||||
|   | ||||
| @@ -1,27 +1,52 @@ | ||||
| % Javier Arribas 2011              | ||||
| % Usage: read_tracking_dat (filename, [count]) | ||||
| % | ||||
| % Opens GNSS-SDR tracking binary log file .dat and returns the contents | ||||
| % | ||||
|  | ||||
| % ------------------------------------------------------------------------- | ||||
| % | ||||
| % Copyright (C) 2010-2018  (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 <http://www.gnu.org/licenses/>. | ||||
| % | ||||
| % ------------------------------------------------------------------------- | ||||
| % | ||||
| % Javier Arribas 2011 | ||||
|  | ||||
| function [observables] = read_hybrid_observables_dump (channels, filename, count) | ||||
|  | ||||
|   %% usage: read_tracking_dat (filename, [count]) | ||||
|   %% | ||||
|   %% open GNSS-SDR tracking binary log file .dat and return the contents | ||||
|   %% | ||||
|  | ||||
|   m = nargchk (1,2,nargin); | ||||
|   num_double_vars=7; | ||||
|   double_size_bytes=8; | ||||
|   skip_bytes_each_read=double_size_bytes*num_double_vars*channels; | ||||
|   bytes_shift=0; | ||||
|   if (m) | ||||
| m = nargchk (1,2,nargin); | ||||
| num_double_vars=7; | ||||
| double_size_bytes=8; | ||||
| skip_bytes_each_read=double_size_bytes*num_double_vars*channels; | ||||
| bytes_shift=0; | ||||
| if (m) | ||||
|     usage (m); | ||||
|   end | ||||
| end | ||||
|  | ||||
|   if (nargin < 3) | ||||
| if (nargin < 3) | ||||
|     count = Inf; | ||||
|   end | ||||
|     %loops_counter = fread (f, count, 'uint32',4*12); | ||||
|   f = fopen (filename, 'rb'); | ||||
|   if (f < 0) | ||||
|   else | ||||
| end | ||||
| %loops_counter = fread (f, count, 'uint32',4*12); | ||||
| f = fopen (filename, 'rb'); | ||||
| if (f < 0) | ||||
| else | ||||
|     for N=1:1:channels | ||||
|         observables.RX_time(N,:) = fread (f, count, 'float64',skip_bytes_each_read-double_size_bytes); | ||||
|         bytes_shift=bytes_shift+double_size_bytes; | ||||
| @@ -45,27 +70,27 @@ function [observables] = read_hybrid_observables_dump (channels, filename, count | ||||
|         bytes_shift=bytes_shift+double_size_bytes; | ||||
|         fseek(f,bytes_shift,'bof'); % move to next interleaved | ||||
|     end | ||||
|  | ||||
|      | ||||
|     fclose (f); | ||||
|      | ||||
|     %%%%%%%% output vars %%%%%%%% | ||||
| %     double tmp_double; | ||||
| %     for (unsigned int i = 0; i < d_nchannels; i++) | ||||
| %         { | ||||
| %             tmp_double = current_gnss_synchro[i].RX_time; | ||||
| %             d_dump_file.write((char*)&tmp_double, sizeof(double)); | ||||
| %             tmp_double = current_gnss_synchro[i].TOW_at_current_symbol_s; | ||||
| %             d_dump_file.write((char*)&tmp_double, sizeof(double)); | ||||
| %             tmp_double = current_gnss_synchro[i].Carrier_Doppler_hz; | ||||
| %             d_dump_file.write((char*)&tmp_double, sizeof(double)); | ||||
| %             tmp_double = current_gnss_synchro[i].Carrier_phase_rads/GPS_TWO_PI; | ||||
| %             d_dump_file.write((char*)&tmp_double, sizeof(double)); | ||||
| %             tmp_double = current_gnss_synchro[i].Pseudorange_m; | ||||
| %             d_dump_file.write((char*)&tmp_double, sizeof(double)); | ||||
| %             tmp_double = current_gnss_synchro[i].PRN; | ||||
| %             d_dump_file.write((char*)&tmp_double, sizeof(double)); | ||||
| %             tmp_double = current_gnss_synchro[i].Flag_valid_pseudorange; | ||||
| %             d_dump_file.write((char*)&tmp_double, sizeof(double)); | ||||
| %         } | ||||
|   end | ||||
|    | ||||
|     %     double tmp_double; | ||||
|     %     for (unsigned int i = 0; i < d_nchannels; i++) | ||||
|     %         { | ||||
|     %             tmp_double = current_gnss_synchro[i].RX_time; | ||||
|     %             d_dump_file.write((char*)&tmp_double, sizeof(double)); | ||||
|     %             tmp_double = current_gnss_synchro[i].TOW_at_current_symbol_s; | ||||
|     %             d_dump_file.write((char*)&tmp_double, sizeof(double)); | ||||
|     %             tmp_double = current_gnss_synchro[i].Carrier_Doppler_hz; | ||||
|     %             d_dump_file.write((char*)&tmp_double, sizeof(double)); | ||||
|     %             tmp_double = current_gnss_synchro[i].Carrier_phase_rads/GPS_TWO_PI; | ||||
|     %             d_dump_file.write((char*)&tmp_double, sizeof(double)); | ||||
|     %             tmp_double = current_gnss_synchro[i].Pseudorange_m; | ||||
|     %             d_dump_file.write((char*)&tmp_double, sizeof(double)); | ||||
|     %             tmp_double = current_gnss_synchro[i].PRN; | ||||
|     %             d_dump_file.write((char*)&tmp_double, sizeof(double)); | ||||
|     %             tmp_double = current_gnss_synchro[i].Flag_valid_pseudorange; | ||||
|     %             d_dump_file.write((char*)&tmp_double, sizeof(double)); | ||||
|     %         } | ||||
| end | ||||
|  | ||||
|   | ||||
| @@ -1,29 +1,54 @@ | ||||
| % Javier Arribas 2011              | ||||
| % Usage: read_true_sim_observables_dump (filename, [count]) | ||||
| % | ||||
| % Opens gnss-sdr-sim observables dump and reads all chennels | ||||
| % | ||||
|  | ||||
| % ------------------------------------------------------------------------- | ||||
| % | ||||
| % Copyright (C) 2010-2018  (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 <http://www.gnu.org/licenses/>. | ||||
| % | ||||
| % ------------------------------------------------------------------------- | ||||
| % | ||||
| % Javier Arribas 2011 | ||||
|  | ||||
| function [observables] = read_true_sim_observables_dump (filename, count) | ||||
|  | ||||
|   %% usage: read_true_sim_observables_dump (filename, [count]) | ||||
|   %% | ||||
|   %% open gnss-sdr-sim observables dump and read all chennels | ||||
|   %% | ||||
| m = nargchk (1,2,nargin); | ||||
| channels=12; %Simulator always use 12 channels | ||||
| num_double_vars=7; | ||||
| double_size_bytes=8; | ||||
| skip_bytes_each_read=double_size_bytes*num_double_vars*channels; | ||||
| bytes_shift=0; | ||||
|  | ||||
|   m = nargchk (1,2,nargin); | ||||
|   channels=12; %Simulator always use 12 channels | ||||
|   num_double_vars=7; | ||||
|   double_size_bytes=8; | ||||
|   skip_bytes_each_read=double_size_bytes*num_double_vars*channels; | ||||
|   bytes_shift=0; | ||||
|  | ||||
|   if (m) | ||||
| if (m) | ||||
|     usage (m); | ||||
|   end | ||||
| end | ||||
|  | ||||
|   if (nargin < 2) | ||||
| if (nargin < 2) | ||||
|     count = Inf; | ||||
|   end | ||||
|     %loops_counter = fread (f, count, 'uint32',4*12); | ||||
|   f = fopen (filename, 'rb'); | ||||
|   if (f < 0) | ||||
|   else | ||||
| end | ||||
| %loops_counter = fread (f, count, 'uint32',4*12); | ||||
| f = fopen (filename, 'rb'); | ||||
| if (f < 0) | ||||
| else | ||||
|     for N=1:1:channels | ||||
|         observables.RX_time(N,:) = fread (f, count, 'float64',skip_bytes_each_read-double_size_bytes); | ||||
|         bytes_shift=bytes_shift+double_size_bytes; | ||||
| @@ -47,19 +72,19 @@ function [observables] = read_true_sim_observables_dump (filename, count) | ||||
|         bytes_shift=bytes_shift+double_size_bytes; | ||||
|         fseek(f,bytes_shift,'bof'); % move to next interleaved | ||||
|     end | ||||
|  | ||||
|      | ||||
|     fclose (f); | ||||
|      | ||||
| %     %%%%%%%% output vars %%%%%%%% | ||||
| %         for(int i=0;i<12;i++) | ||||
| %         { | ||||
| %             d_dump_file.read((char *) &gps_time_sec[i], sizeof(double)); | ||||
| %             d_dump_file.read((char *) &doppler_l1_hz, sizeof(double)); | ||||
| %             d_dump_file.read((char *) &acc_carrier_phase_l1_cycles[i], sizeof(double)); | ||||
| %             d_dump_file.read((char *) &dist_m[i], sizeof(double)); | ||||
| %             d_dump_file.read((char *) &true_dist_m[i], sizeof(double)); | ||||
| %             d_dump_file.read((char *) &carrier_phase_l1_cycles[i], sizeof(double)); | ||||
| %             d_dump_file.read((char *) &prn[i], sizeof(double)); | ||||
| %         } | ||||
|   end | ||||
|    | ||||
|     %     %%%%%%%% output vars %%%%%%%% | ||||
|     %         for(int i=0;i<12;i++) | ||||
|     %         { | ||||
|     %             d_dump_file.read((char *) &gps_time_sec[i], sizeof(double)); | ||||
|     %             d_dump_file.read((char *) &doppler_l1_hz, sizeof(double)); | ||||
|     %             d_dump_file.read((char *) &acc_carrier_phase_l1_cycles[i], sizeof(double)); | ||||
|     %             d_dump_file.read((char *) &dist_m[i], sizeof(double)); | ||||
|     %             d_dump_file.read((char *) &true_dist_m[i], sizeof(double)); | ||||
|     %             d_dump_file.read((char *) &carrier_phase_l1_cycles[i], sizeof(double)); | ||||
|     %             d_dump_file.read((char *) &prn[i], sizeof(double)); | ||||
|     %         } | ||||
| end | ||||
|  | ||||
|   | ||||
| @@ -1,7 +1,7 @@ | ||||
| function plotTracking(channelList, trackResults, settings) | ||||
| %This function plots the tracking results for the given channel list. | ||||
| % This function plots the tracking results for the given channel list. | ||||
| % | ||||
| %plotTracking(channelList, trackResults, settings) | ||||
| % plotTracking(channelList, trackResults, settings) | ||||
| % | ||||
| %   Inputs: | ||||
| %       channelList     - list of channels to be plotted. | ||||
| @@ -10,144 +10,141 @@ function plotTracking(channelList, trackResults, settings) | ||||
|  | ||||
| %-------------------------------------------------------------------------- | ||||
| %                           SoftGNSS v3.0 | ||||
| %  | ||||
| % | ||||
| % Copyright (C) Darius Plausinaitis | ||||
| % Written by Darius Plausinaitis | ||||
| %-------------------------------------------------------------------------- | ||||
| %This program 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 2 | ||||
| %of the License, or (at your option) any later version. | ||||
| % This program 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 2 | ||||
| % of the License, or (at your option) any later version. | ||||
| % | ||||
| %This program 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. | ||||
| % This program 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 this program; if not, write to the Free Software | ||||
| %Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, | ||||
| %USA. | ||||
| % You should have received a copy of the GNU General Public License | ||||
| % along with this program; if not, write to the Free Software | ||||
| % Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, | ||||
| % USA. | ||||
| %-------------------------------------------------------------------------- | ||||
|  | ||||
| %CVS record: | ||||
| %$Id: plotTracking.m,v 1.5.2.23 2006/08/14 14:45:14 dpl Exp $ | ||||
|  | ||||
| % Protection - if the list contains incorrect channel numbers | ||||
| channelList = intersect(channelList, 1:settings.numberOfChannels); | ||||
|  | ||||
| %=== For all listed channels ============================================== | ||||
| for channelNr = channelList | ||||
|  | ||||
| %% Select (or create) and clear the figure ================================ | ||||
|      | ||||
|     %% Select (or create) and clear the figure ================================ | ||||
|     % The number 200 is added just for more convenient handling of the open | ||||
|     % figure windows, when many figures are closed and reopened. | ||||
|     % Figures drawn or opened by the user, will not be "overwritten" by | ||||
|     % this function. | ||||
|  | ||||
|      | ||||
|     figure(channelNr +200); | ||||
|     clf(channelNr +200); | ||||
|     set(channelNr +200, 'Name', ['Channel ', num2str(channelNr), ... | ||||
|                                  ' (PRN ', ... | ||||
|                                  num2str(trackResults(channelNr).PRN), ... | ||||
|                                  ') results']); | ||||
|  | ||||
| %% Draw axes ============================================================== | ||||
|         % Row 1 | ||||
|         handles(1, 1) = subplot(3, 3, 1); | ||||
|         handles(1, 2) = subplot(3, 3, [2 3]); | ||||
|         % Row 2 | ||||
|         handles(2, 1) = subplot(3, 3, 4); | ||||
|         handles(2, 2) = subplot(3, 3, [5 6]); | ||||
|         % Row 3 | ||||
|         handles(3, 1) = subplot(3, 3, 7); | ||||
|         handles(3, 2) = subplot(3, 3, 8); | ||||
|         handles(3, 3) = subplot(3, 3, 9); | ||||
|  | ||||
| %% Plot all figures ======================================================= | ||||
|  | ||||
|         timeAxisInSeconds = (1:settings.msToProcess-1)/1000; | ||||
|  | ||||
|         %----- Discrete-Time Scatter Plot --------------------------------- | ||||
|         plot(handles(1, 1), trackResults(channelNr).I_PN,... | ||||
|                             trackResults(channelNr).Q_PN, ... | ||||
|                             '.'); | ||||
|  | ||||
|         grid  (handles(1, 1)); | ||||
|         axis  (handles(1, 1), 'equal'); | ||||
|         title (handles(1, 1), 'Discrete-Time Scatter Plot'); | ||||
|         xlabel(handles(1, 1), 'I prompt'); | ||||
|         ylabel(handles(1, 1), 'Q prompt'); | ||||
|  | ||||
|         %----- Nav bits --------------------------------------------------- | ||||
|         plot  (handles(1, 2), timeAxisInSeconds, ... | ||||
|                               trackResults(channelNr).I_PN(1:settings.msToProcess-1)); | ||||
|  | ||||
|         grid  (handles(1, 2)); | ||||
|         title (handles(1, 2), 'Bits of the navigation message'); | ||||
|         xlabel(handles(1, 2), 'Time (s)'); | ||||
|         axis  (handles(1, 2), 'tight'); | ||||
|  | ||||
|         %----- PLL discriminator unfiltered-------------------------------- | ||||
|         plot  (handles(2, 1), timeAxisInSeconds, ... | ||||
|                               trackResults(channelNr).pllDiscr(1:settings.msToProcess-1), 'r');       | ||||
|  | ||||
|         grid  (handles(2, 1)); | ||||
|         axis  (handles(2, 1), 'tight'); | ||||
|         xlabel(handles(2, 1), 'Time (s)'); | ||||
|         ylabel(handles(2, 1), 'Amplitude'); | ||||
|         title (handles(2, 1), 'Raw PLL discriminator'); | ||||
|  | ||||
|         %----- Correlation ------------------------------------------------ | ||||
|         plot(handles(2, 2), timeAxisInSeconds, ... | ||||
|                             [sqrt(trackResults(channelNr).I_E(1:settings.msToProcess-1).^2 + ... | ||||
|                                   trackResults(channelNr).Q_E(1:settings.msToProcess-1).^2)', ... | ||||
|                              sqrt(trackResults(channelNr).I_P(1:settings.msToProcess-1).^2 + ... | ||||
|                                   trackResults(channelNr).Q_P(1:settings.msToProcess-1).^2)', ... | ||||
|                              sqrt(trackResults(channelNr).I_L(1:settings.msToProcess-1).^2 + ... | ||||
|                                   trackResults(channelNr).Q_L(1:settings.msToProcess-1).^2)'], ... | ||||
|                             '-*'); | ||||
|  | ||||
|         grid  (handles(2, 2)); | ||||
|         title (handles(2, 2), 'Correlation results'); | ||||
|         xlabel(handles(2, 2), 'Time (s)'); | ||||
|         axis  (handles(2, 2), 'tight'); | ||||
|          | ||||
|         hLegend = legend(handles(2, 2), '$\sqrt{I_{E}^2 + Q_{E}^2}$', ... | ||||
|                                         '$\sqrt{I_{P}^2 + Q_{P}^2}$', ... | ||||
|                                         '$\sqrt{I_{L}^2 + Q_{L}^2}$'); | ||||
|                            | ||||
|         %set interpreter from tex to latex. This will draw \sqrt correctly | ||||
|         set(hLegend, 'Interpreter', 'Latex'); | ||||
|  | ||||
|         %----- PLL discriminator filtered---------------------------------- | ||||
|         plot  (handles(3, 1), timeAxisInSeconds, ... | ||||
|                               trackResults(channelNr).pllDiscrFilt(1:settings.msToProcess-1), 'b');       | ||||
|  | ||||
|         grid  (handles(3, 1)); | ||||
|         axis  (handles(3, 1), 'tight'); | ||||
|         xlabel(handles(3, 1), 'Time (s)'); | ||||
|         ylabel(handles(3, 1), 'Amplitude'); | ||||
|         title (handles(3, 1), 'Filtered PLL discriminator'); | ||||
|  | ||||
|         %----- DLL discriminator unfiltered-------------------------------- | ||||
|         plot  (handles(3, 2), timeAxisInSeconds, ... | ||||
|                               trackResults(channelNr).dllDiscr(1:settings.msToProcess-1), 'r');       | ||||
|  | ||||
|         grid  (handles(3, 2)); | ||||
|         axis  (handles(3, 2), 'tight'); | ||||
|         xlabel(handles(3, 2), 'Time (s)'); | ||||
|         ylabel(handles(3, 2), 'Amplitude'); | ||||
|         title (handles(3, 2), 'Raw DLL discriminator'); | ||||
|  | ||||
|         %----- DLL discriminator filtered---------------------------------- | ||||
|         plot  (handles(3, 3), timeAxisInSeconds, ... | ||||
|                               trackResults(channelNr).dllDiscrFilt(1:settings.msToProcess-1), 'b');       | ||||
|  | ||||
|         grid  (handles(3, 3)); | ||||
|         axis  (handles(3, 3), 'tight'); | ||||
|         xlabel(handles(3, 3), 'Time (s)'); | ||||
|         ylabel(handles(3, 3), 'Amplitude'); | ||||
|         title (handles(3, 3), 'Filtered DLL discriminator'); | ||||
|  | ||||
|         ' (PRN ', ... | ||||
|         num2str(trackResults(channelNr).PRN), ... | ||||
|         ') results']); | ||||
|      | ||||
|     %% Draw axes ============================================================== | ||||
|     % Row 1 | ||||
|     handles(1, 1) = subplot(3, 3, 1); | ||||
|     handles(1, 2) = subplot(3, 3, [2 3]); | ||||
|     % Row 2 | ||||
|     handles(2, 1) = subplot(3, 3, 4); | ||||
|     handles(2, 2) = subplot(3, 3, [5 6]); | ||||
|     % Row 3 | ||||
|     handles(3, 1) = subplot(3, 3, 7); | ||||
|     handles(3, 2) = subplot(3, 3, 8); | ||||
|     handles(3, 3) = subplot(3, 3, 9); | ||||
|      | ||||
|     %% Plot all figures ======================================================= | ||||
|      | ||||
|     timeAxisInSeconds = (1:settings.msToProcess-1)/1000; | ||||
|      | ||||
|     %----- Discrete-Time Scatter Plot --------------------------------- | ||||
|     plot(handles(1, 1), trackResults(channelNr).I_PN,... | ||||
|         trackResults(channelNr).Q_PN, ... | ||||
|         '.'); | ||||
|      | ||||
|     grid  (handles(1, 1)); | ||||
|     axis  (handles(1, 1), 'equal'); | ||||
|     title (handles(1, 1), 'Discrete-Time Scatter Plot'); | ||||
|     xlabel(handles(1, 1), 'I prompt'); | ||||
|     ylabel(handles(1, 1), 'Q prompt'); | ||||
|      | ||||
|     %----- Nav bits --------------------------------------------------- | ||||
|     plot  (handles(1, 2), timeAxisInSeconds, ... | ||||
|         trackResults(channelNr).I_PN(1:settings.msToProcess-1)); | ||||
|      | ||||
|     grid  (handles(1, 2)); | ||||
|     title (handles(1, 2), 'Bits of the navigation message'); | ||||
|     xlabel(handles(1, 2), 'Time (s)'); | ||||
|     axis  (handles(1, 2), 'tight'); | ||||
|      | ||||
|     %----- PLL discriminator unfiltered-------------------------------- | ||||
|     plot  (handles(2, 1), timeAxisInSeconds, ... | ||||
|         trackResults(channelNr).pllDiscr(1:settings.msToProcess-1), 'r'); | ||||
|      | ||||
|     grid  (handles(2, 1)); | ||||
|     axis  (handles(2, 1), 'tight'); | ||||
|     xlabel(handles(2, 1), 'Time (s)'); | ||||
|     ylabel(handles(2, 1), 'Amplitude'); | ||||
|     title (handles(2, 1), 'Raw PLL discriminator'); | ||||
|      | ||||
|     %----- Correlation ------------------------------------------------ | ||||
|     plot(handles(2, 2), timeAxisInSeconds, ... | ||||
|         [sqrt(trackResults(channelNr).I_E(1:settings.msToProcess-1).^2 + ... | ||||
|         trackResults(channelNr).Q_E(1:settings.msToProcess-1).^2)', ... | ||||
|         sqrt(trackResults(channelNr).I_P(1:settings.msToProcess-1).^2 + ... | ||||
|         trackResults(channelNr).Q_P(1:settings.msToProcess-1).^2)', ... | ||||
|         sqrt(trackResults(channelNr).I_L(1:settings.msToProcess-1).^2 + ... | ||||
|         trackResults(channelNr).Q_L(1:settings.msToProcess-1).^2)'], ... | ||||
|         '-*'); | ||||
|      | ||||
|     grid  (handles(2, 2)); | ||||
|     title (handles(2, 2), 'Correlation results'); | ||||
|     xlabel(handles(2, 2), 'Time (s)'); | ||||
|     axis  (handles(2, 2), 'tight'); | ||||
|      | ||||
|     hLegend = legend(handles(2, 2), '$\sqrt{I_{E}^2 + Q_{E}^2}$', ... | ||||
|         '$\sqrt{I_{P}^2 + Q_{P}^2}$', ... | ||||
|         '$\sqrt{I_{L}^2 + Q_{L}^2}$'); | ||||
|      | ||||
|     %set interpreter from tex to latex. This will draw \sqrt correctly | ||||
|     set(hLegend, 'Interpreter', 'Latex'); | ||||
|      | ||||
|     %----- PLL discriminator filtered---------------------------------- | ||||
|     plot  (handles(3, 1), timeAxisInSeconds, ... | ||||
|         trackResults(channelNr).pllDiscrFilt(1:settings.msToProcess-1), 'b'); | ||||
|      | ||||
|     grid  (handles(3, 1)); | ||||
|     axis  (handles(3, 1), 'tight'); | ||||
|     xlabel(handles(3, 1), 'Time (s)'); | ||||
|     ylabel(handles(3, 1), 'Amplitude'); | ||||
|     title (handles(3, 1), 'Filtered PLL discriminator'); | ||||
|      | ||||
|     %----- DLL discriminator unfiltered-------------------------------- | ||||
|     plot  (handles(3, 2), timeAxisInSeconds, ... | ||||
|         trackResults(channelNr).dllDiscr(1:settings.msToProcess-1), 'r'); | ||||
|      | ||||
|     grid  (handles(3, 2)); | ||||
|     axis  (handles(3, 2), 'tight'); | ||||
|     xlabel(handles(3, 2), 'Time (s)'); | ||||
|     ylabel(handles(3, 2), 'Amplitude'); | ||||
|     title (handles(3, 2), 'Raw DLL discriminator'); | ||||
|      | ||||
|     %----- DLL discriminator filtered---------------------------------- | ||||
|     plot  (handles(3, 3), timeAxisInSeconds, ... | ||||
|         trackResults(channelNr).dllDiscrFilt(1:settings.msToProcess-1), 'b'); | ||||
|      | ||||
|     grid  (handles(3, 3)); | ||||
|     axis  (handles(3, 3), 'tight'); | ||||
|     xlabel(handles(3, 3), 'Time (s)'); | ||||
|     ylabel(handles(3, 3), 'Amplitude'); | ||||
|     title (handles(3, 3), 'Filtered DLL discriminator'); | ||||
|      | ||||
| end % for channelNr = channelList | ||||
|   | ||||
| @@ -1,36 +1,32 @@ | ||||
| % /*! | ||||
| %  * \file plot_acq_grid.m | ||||
| %  * \brief Read GNSS-SDR Acquisition dump .mat file using the provided | ||||
| %  function and plot acquisition grid of acquisition statistic of PRN sat | ||||
| % Reads GNSS-SDR Acquisition dump .mat file using the provided | ||||
| %  function and plots acquisition grid of acquisition statistic of PRN sat | ||||
| % Antonio Ramos, 2017. antonio.ramos(at)cttc.es | ||||
| % ------------------------------------------------------------------------- | ||||
| % | ||||
| % Copyright (C) 2010-2018  (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 <http://www.gnu.org/licenses/>. | ||||
| % | ||||
| % ------------------------------------------------------------------------- | ||||
| % | ||||
| %   | ||||
| %  * \author Antonio Ramos, 2017. antonio.ramos(at)cttc.es | ||||
| %  * ------------------------------------------------------------------------- | ||||
| %  * | ||||
| %  * Copyright (C) 2010-2017  (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 <http://www.gnu.org/licenses/>. | ||||
| %  * | ||||
| %  * ------------------------------------------------------------------------- | ||||
| %  */  | ||||
|  | ||||
| %%%%%%%%% ¡¡¡ CONFIGURE !!! %%%%%%%%%%%%%  | ||||
| %%%%%%%%% ?????? CONFIGURE !!! %%%%%%%%%%%%% | ||||
|  | ||||
| path = '/archive/'; | ||||
| file = 'acq'; | ||||
|   | ||||
| @@ -1,37 +1,35 @@ | ||||
| % /*! | ||||
| %  * \file plot_acq_grid_gsoc.m | ||||
| %  * \brief Read GNSS-SDR Acquisition dump binary file using the provided | ||||
| %  function and plot acquisition grid of acquisition statistic of PRN sat | ||||
| % Reads GNSS-SDR Acquisition dump binary file using the provided | ||||
| %  function and plots acquisition grid of acquisition statistic of PRN sat | ||||
| % | ||||
| %  This function analyzes a experiment performed by Luis Esteve in the framework  | ||||
| %  This function analyzes a experiment performed by Luis Esteve in the framework | ||||
| %  of the Google Summer of Code (GSoC) 2012, with the collaboration of Javier Arribas | ||||
| %  and Carles Fernández, related to the extension of GNSS-SDR to Galileo. | ||||
| %  and Carles Fern??ndez, related to the extension of GNSS-SDR to Galileo. | ||||
| % | ||||
| % Luis Esteve, 2012. luis(at)epsilon-formacion.com | ||||
| % ------------------------------------------------------------------------- | ||||
| % | ||||
| % Copyright (C) 2010-2018  (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 <http://www.gnu.org/licenses/>. | ||||
| % | ||||
| % ------------------------------------------------------------------------- | ||||
| % | ||||
| %  * \author Luis Esteve, 2012. luis(at)epsilon-formacion.com | ||||
| %  * ------------------------------------------------------------------------- | ||||
| %  * | ||||
| %  * 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 <http://www.gnu.org/licenses/>. | ||||
| %  * | ||||
| %  * ------------------------------------------------------------------------- | ||||
| %  */  | ||||
|  | ||||
| function plot_acq_grid_gsoc(sat) | ||||
|  | ||||
| @@ -61,7 +59,7 @@ for k=Doppler_min_Hz:Doppler_step_Hz:Doppler_max_Hz | ||||
|     index=index+1; | ||||
|     filename=['test_statistics_E_1C_sat_' num2str(sat) '_doppler_' num2str(k) '.dat']; | ||||
|     acq_grid(index,:)=abs(read_complex_binary (filename)); | ||||
|  end | ||||
| end | ||||
|  | ||||
| maximum_correlation_peak = max(max(acq_grid)) | ||||
|  | ||||
|   | ||||
| @@ -1,39 +1,38 @@ | ||||
| % /*! | ||||
| %  * \file plot_acq_grid_gsoc_e5.m | ||||
| %  * \brief Read GNSS-SDR Acquisition dump binary file using the provided | ||||
| %  function and plot acquisition grid of acquisition statistic of PRN sat. | ||||
| %  CAF input must be 0 or 1 depending if the user desires to read the file | ||||
| %  that resolves doppler ambiguity or not. | ||||
| % Reads GNSS-SDR Acquisition dump binary file using the provided | ||||
| % function and plot acquisition grid of acquisition statistic of PRN sat. | ||||
| % CAF input must be 0 or 1 depending if the user desires to read the file | ||||
| % that resolves doppler ambiguity or not. | ||||
| % | ||||
| %  This function analyzes a experiment performed by Marc Sales in the framework  | ||||
| %  of the Google Summer of Code (GSoC) 2014, with the collaboration of Luis Esteve, Javier Arribas | ||||
| %  and Carles Fernández, related to the extension of GNSS-SDR to Galileo. | ||||
| % This function analyzes a experiment performed by Marc Sales in the framework | ||||
| % of the Google Summer of Code (GSoC) 2014, with the collaboration of Luis Esteve, Javier Arribas | ||||
| % and Carles Fernandez, related to the extension of GNSS-SDR to Galileo. | ||||
| % | ||||
| % Marc Sales marcsales92(at)gmail.com,  | ||||
| % Luis Esteve, 2014. luis(at)epsilon-formacion.com | ||||
| % ------------------------------------------------------------------------- | ||||
| % | ||||
| % Copyright (C) 2010-2018  (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 <http://www.gnu.org/licenses/>. | ||||
| % | ||||
| % ------------------------------------------------------------------------- | ||||
| % | ||||
| %  * \author Marc Sales marcsales92(at)gmail.com, Luis Esteve, 2014. luis(at)epsilon-formacion.com | ||||
| %  * ------------------------------------------------------------------------- | ||||
| %  * | ||||
| %  * Copyright (C) 2010-2014  (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 <http://www.gnu.org/licenses/>. | ||||
| %  * | ||||
| %  * ------------------------------------------------------------------------- | ||||
| %  */  | ||||
|  | ||||
| function plot_acq_grid_gsoc_e5(sat,CAF) | ||||
|  | ||||
| @@ -127,7 +126,7 @@ myFile = java.io.File(file); | ||||
| flen = length(myFile); | ||||
| num_samples=flen/8; % 8 bytes (2 single floats) per complex sample | ||||
|  | ||||
| for k=1:num_samples    | ||||
| for k=1:num_samples | ||||
|     a(1:2) = fread(fid, 2, 'float'); | ||||
|     x(k) = a(1) + a(2)*1i; | ||||
|     k=k+1; | ||||
|   | ||||
| @@ -1,37 +1,34 @@ | ||||
| % /*! | ||||
| %  * \file plot_acq_grid_gsoc.m | ||||
| %  * \brief Read GNSS-SDR Acquisition dump binary file using the provided | ||||
| %  function and plot acquisition grid of acquisition statistic of PRN sat | ||||
| %  Reads GNSS-SDR Acquisition dump binary file using the provided | ||||
| %  function and plots acquisition grid of acquisition statistic of PRN sat | ||||
| % | ||||
| %  This function analyzes a experiment performed by Luis Esteve in the framework  | ||||
| %  This function analyzes a experiment performed by Luis Esteve in the framework | ||||
| %  of the Google Summer of Code (GSoC) 2012, with the collaboration of Javier Arribas | ||||
| %  and Carles Fernández, related to the extension of GNSS-SDR to Galileo. | ||||
| %  and Carles Fernandez, related to the extension of GNSS-SDR to Galileo. | ||||
| % | ||||
| % ------------------------------------------------------------------------- | ||||
| % | ||||
| % Copyright (C) 2010-2018  (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 <http://www.gnu.org/licenses/>. | ||||
| % | ||||
| % ------------------------------------------------------------------------- | ||||
| % | ||||
| %  * \author Luis Esteve, 2012. luis(at)epsilon-formacion.com | ||||
| %  * ------------------------------------------------------------------------- | ||||
| %  * | ||||
| %  * 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 <http://www.gnu.org/licenses/>. | ||||
| %  * | ||||
| %  * ------------------------------------------------------------------------- | ||||
| %  */  | ||||
|  | ||||
| function plot_acq_grid_gsoc_glonass(sat) | ||||
|  | ||||
| @@ -62,9 +59,9 @@ for k=Doppler_min_Hz:Doppler_step_Hz:Doppler_max_Hz | ||||
|     index=index+1; | ||||
|     filename=['acquisition_R_1G_sat_' num2str(sat) '_doppler_' num2str(k) '.dat']; | ||||
|     acq_grid(index,:)=abs(read_complex_binary (filename)); | ||||
|  end | ||||
| end | ||||
|  | ||||
|  acq_grid = acq_grid.^2; | ||||
| acq_grid = acq_grid.^2; | ||||
|  | ||||
| maximum_correlation_peak = max(max(acq_grid)) | ||||
|  | ||||
|   | ||||
| @@ -1,32 +1,28 @@ | ||||
| % /*! | ||||
| %  * \file plot_dump.m | ||||
| %  * \brief Read GNSS-SDR Tracking dump binary file and plot some internal | ||||
| %     variables | ||||
| %  * \author Antonio Ramos, 2018. antonio.ramos(at)cttc.es | ||||
| %  * ------------------------------------------------------------------------- | ||||
| %  * | ||||
| %  * Copyright (C) 2010-2018  (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 <http://www.gnu.org/licenses/>. | ||||
| %  * | ||||
| %  * ------------------------------------------------------------------------- | ||||
| %  */ | ||||
| % ------------------------------------------------------------------------- | ||||
| % | ||||
| % Copyright (C) 2010-2018  (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 <http://www.gnu.org/licenses/>. | ||||
| % | ||||
| % ------------------------------------------------------------------------- | ||||
| % | ||||
| %  Antonio Ramos, 2018. antonio.ramos(at)cttc.es | ||||
|  | ||||
| clear all; | ||||
| clc; | ||||
| @@ -84,158 +80,136 @@ end | ||||
| fclose(fileID); | ||||
|  | ||||
|  | ||||
| mean_Latitude=mean(navsol.lat); | ||||
| mean_Longitude=mean(navsol.long); | ||||
| mean_h=mean(navsol.height); | ||||
| utmZone = findUtmZone(mean_Latitude,mean_Longitude); | ||||
| [ref_X_cart,ref_Y_cart,ref_Z_cart]=geo2cart(dms2mat(deg2dms(mean_Latitude)), dms2mat(deg2dms(mean_Longitude)), mean_h, 5); | ||||
| [mean_utm_X,mean_utm_Y,mean_utm_Z]=cart2utm(ref_X_cart,ref_Y_cart,ref_Z_cart,utmZone); | ||||
| mean_Latitude = mean(navsol.lat); | ||||
| mean_Longitude = mean(navsol.long); | ||||
| mean_h = mean(navsol.height); | ||||
| utmZone = findUtmZone(mean_Latitude, mean_Longitude); | ||||
| [ref_X_cart, ref_Y_cart, ref_Z_cart] = geo2cart(dms2mat(deg2dms(mean_Latitude)), dms2mat(deg2dms(mean_Longitude)), mean_h, 5); | ||||
| [mean_utm_X, mean_utm_Y, mean_utm_Z] = cart2utm(ref_X_cart, ref_Y_cart, ref_Z_cart, utmZone); | ||||
|  | ||||
|  | ||||
| numPoints=length(navsol.X); | ||||
| aux=0; | ||||
| for n=1:numPoints | ||||
|     aux=aux+1; | ||||
|     [E(aux),N(aux),U(aux)]=cart2utm(navsol.X(n), navsol.Y(n), navsol.Z(n), utmZone); | ||||
| numPoints = length(navsol.X); | ||||
| aux = 0; | ||||
| for n = 1:numPoints | ||||
|     aux = aux+1; | ||||
|     [E(aux), N(aux), U(aux)] = cart2utm(navsol.X(n), navsol.Y(n), navsol.Z(n), utmZone); | ||||
| end | ||||
|  | ||||
| v_2d=[E;N].'; %2D East Nort position vectors | ||||
| v_3d=[E;N;U].'; %2D East Nort position vectors | ||||
| v_2d = [E;N].';   % 2D East Nort position vectors | ||||
| v_3d = [E;N;U].'; % 2D East Nort position vectors | ||||
|  | ||||
|  | ||||
| %% ACCURACY | ||||
|  | ||||
| % 2D ------------------- | ||||
|  | ||||
| sigma_E_accuracy=sqrt((1/(numPoints-1))*sum((v_2d(:,1)-mean_utm_X).^2)); | ||||
| sigma_N_accuracy=sqrt((1/(numPoints-1))*sum((v_2d(:,2)-mean_utm_Y).^2)); | ||||
|  | ||||
| sigma_ratio_2d_accuracy=sigma_N_accuracy/sigma_E_accuracy | ||||
| sigma_E_accuracy = sqrt((1/(numPoints-1)) * sum((v_2d(:,1) - mean_utm_X).^2)); | ||||
| sigma_N_accuracy = sqrt((1/(numPoints-1)) * sum((v_2d(:,2) - mean_utm_Y).^2)); | ||||
| sigma_ratio_2d_accuracy = sigma_N_accuracy / sigma_E_accuracy | ||||
|  | ||||
| % if sigma_ratio=1 -> Prob in circle with r=DRMS -> 65% | ||||
| DRMS_accuracy=sqrt(sigma_E_accuracy^2+sigma_N_accuracy^2) | ||||
| DRMS_accuracy = sqrt(sigma_E_accuracy^2 + sigma_N_accuracy^2) | ||||
| % if sigma_ratio=1 -> Prob in circle with r=2DRMS -> 95% | ||||
| TWO_DRMS_accuracy=2*DRMS_accuracy | ||||
| TWO_DRMS_accuracy = 2 * DRMS_accuracy | ||||
| % if sigma_ratio>0.3 -> Prob in circle with r=CEP -> 50% | ||||
| CEP_accuracy=0.62*sigma_E_accuracy+0.56*sigma_N_accuracy | ||||
| CEP_accuracy = 0.62 * sigma_E_accuracy + 0.56 * sigma_N_accuracy | ||||
|  | ||||
| % 3D ------------------- | ||||
|  | ||||
| sigma_U_accuracy=sqrt((1/(numPoints-1))*sum((v_3d(:,3)-mean_utm_Z).^2)); | ||||
| sigma_U_accuracy = sqrt((1/(numPoints-1)) * sum((v_3d(:,3) - mean_utm_Z).^2)); | ||||
|  | ||||
| % if sigma_ratio=1 -> Prob in circle with r=DRMS -> 50% | ||||
| SEP_accuracy=0.51*sqrt(sigma_E_accuracy^2+sigma_N_accuracy^2+sigma_U_accuracy^2) | ||||
|  | ||||
| SEP_accuracy = 0.51 * sqrt(sigma_E_accuracy^2 + sigma_N_accuracy^2 + sigma_U_accuracy^2) | ||||
| % if sigma_ratio=1 -> Prob in circle with r=DRMS -> 61% | ||||
| MRSE_accuracy=sqrt(sigma_E_accuracy^2+sigma_N_accuracy^2+sigma_U_accuracy^2) | ||||
| MRSE_accuracy = sqrt(sigma_E_accuracy^2 + sigma_N_accuracy^2 + sigma_U_accuracy^2) | ||||
| % if sigma_ratio=1 -> Prob in circle with r=2DRMS -> 95% | ||||
| TWO_MRSE_accuracy=2*MRSE_accuracy | ||||
| TWO_MRSE_accuracy=2 * MRSE_accuracy | ||||
|  | ||||
|  | ||||
|  | ||||
| %% PRECISION | ||||
|  | ||||
| % 2D analysis | ||||
| % Simulated X,Y measurements | ||||
| %v1=randn(1000,2); | ||||
|  | ||||
| % 2D Mean and Variance | ||||
| mean_2d  = [mean(v_2d(:,1)) ; mean(v_2d(:,2))]; | ||||
| sigma_2d = [sqrt(var(v_2d(:,1))) ; sqrt(var(v_2d(:,2)))]; | ||||
|  | ||||
| sigma_ratio_2d=sigma_2d(2)/sigma_2d(1) | ||||
| sigma_ratio_2d = sigma_2d(2) / sigma_2d(1) | ||||
|  | ||||
| % if sigma_ratio=1 -> Prob in circle with r=DRMS -> 65% | ||||
| DRMS=sqrt(sigma_2d(1)^2+sigma_2d(2)^2) | ||||
| DRMS = sqrt(sigma_2d(1)^2 + sigma_2d(2)^2) | ||||
| % if sigma_ratio=1 -> Prob in circle with r=2DRMS -> 95% | ||||
| TWO_DRMS=2*DRMS | ||||
| TWO_DRMS = 2 * DRMS | ||||
| % if sigma_ratio>0.3 -> Prob in circle with r=CEP -> 50% | ||||
| CEP=0.62*sigma_2d(1)+0.56*sigma_2d(2) | ||||
| CEP = 0.62 * sigma_2d(1) + 0.56 * sigma_2d(2) | ||||
|  | ||||
|  | ||||
| % Mean and Variance | ||||
| mean_3d=[mean(v_3d(:,1)) ; mean(v_3d(:,2)) ; mean(v_3d(:,3))]; | ||||
| sigma_3d=[sqrt(var(v_3d(:,1))) ; sqrt(var(v_3d(:,2))) ; sqrt(var(v_3d(:,3)))]; | ||||
| % 3D Mean and Variance | ||||
| mean_3d = [mean(v_3d(:,1)) ; mean(v_3d(:,2)) ; mean(v_3d(:,3))]; | ||||
| sigma_3d = [sqrt(var(v_3d(:,1))) ; sqrt(var(v_3d(:,2))) ; sqrt(var(v_3d(:,3)))]; | ||||
|  | ||||
| % absolute mean error | ||||
| % 2D | ||||
| error_2D_vec = [mean_utm_X-mean_2d(1) mean_utm_Y-mean_2d(2)]; | ||||
| error_2D_m = norm(error_2D_vec) | ||||
|  | ||||
| error_2D_vec=[mean_utm_X-mean_2d(1) mean_utm_Y-mean_2d(2)]; | ||||
| error_2D_m=norm(error_2D_vec) | ||||
| error_3D_vec = [mean_utm_X-mean_3d(1) mean_utm_Y-mean_3d(2) mean_utm_Z-mean_3d(3)]; | ||||
| error_3D_m = norm(error_3D_vec) | ||||
|  | ||||
| error_3D_vec=[mean_utm_X-mean_3d(1) mean_utm_Y-mean_3d(2) mean_utm_Z-mean_3d(3)]; | ||||
| error_3D_m=norm(error_3D_vec) | ||||
| RMSE_X = sqrt(mean((v_3d(:,1)-mean_utm_X).^2)) | ||||
| RMSE_Y = sqrt(mean((v_3d(:,2)-mean_utm_Y).^2)) | ||||
| RMSE_Z = sqrt(mean((v_3d(:,3)-mean_utm_Z).^2)) | ||||
|  | ||||
| % RMSE 2D | ||||
| RMSE_2D = sqrt(mean((v_2d(:,1)-mean_utm_X).^2 + (v_2d(:,2)-mean_utm_Y).^2)) | ||||
| RMSE_3D = sqrt(mean((v_3d(:,1)-mean_utm_X).^2 + (v_3d(:,2)-mean_utm_Y).^2 + (v_3d(:,3)-mean_utm_Z).^2)) | ||||
|  | ||||
| RMSE_X=sqrt(mean((v_3d(:,1)-mean_utm_X).^2)) | ||||
| RMSE_Y=sqrt(mean((v_3d(:,2)-mean_utm_Y).^2)) | ||||
| RMSE_Z=sqrt(mean((v_3d(:,3)-mean_utm_Z).^2)) | ||||
| % if sigma_ratio=1 -> Prob in circle with r=DRMS -> 50% | ||||
| SEP = 0.51 * sqrt(sigma_3d(1)^2 + sigma_3d(2)^2 + sigma_3d(3)^2) | ||||
| % if sigma_ratio=1 -> Prob in circle with r=DRMS -> 61% | ||||
| MRSE = sqrt(sigma_3d(1)^2 + sigma_3d(2)^2 + sigma_3d(3)^2) | ||||
| % if sigma_ratio=1 -> Prob in circle with r=2DRMS -> 95% | ||||
| TWO_MRSE = 2 * MRSE | ||||
|  | ||||
|  | ||||
| RMSE_2D=sqrt(mean((v_2d(:,1)-mean_utm_X).^2+(v_2d(:,2)-mean_utm_Y).^2)) | ||||
|  | ||||
| RMSE_3D=sqrt(mean((v_3d(:,1)-mean_utm_X).^2+(v_3d(:,2)-mean_utm_Y).^2+(v_3d(:,3)-mean_utm_Z).^2)) | ||||
|  | ||||
| % SCATTER PLOT | ||||
| %% SCATTER PLOT 2D | ||||
| subplot(3,3,8) | ||||
| scatter(v_2d(:,1)-mean_2d(1),v_2d(:,2)-mean_2d(2)); | ||||
| scatter(v_2d(:,1)-mean_2d(1), v_2d(:,2)-mean_2d(2)); | ||||
| hold on; | ||||
|  | ||||
| plot(0,0,'k*'); | ||||
| plot(0, 0, 'k*'); | ||||
|  | ||||
| [x,y,z] = cylinder([TWO_DRMS TWO_DRMS], 200); | ||||
| plot(x(1,:), y(1,:), 'Color', [0 0.6 0]); | ||||
| str = strcat('2DRMS=', num2str(TWO_DRMS), ' m'); | ||||
| text(cosd(65)*TWO_DRMS, sind(65)*TWO_DRMS, str, 'Color', [0 0.6 0]); | ||||
|  | ||||
| [x,y,z] = cylinder([TWO_DRMS TWO_DRMS],200); | ||||
| plot(x(1,:),y(1,:),'Color',[0 0.6 0]); | ||||
| str = strcat('2DRMS=',num2str(TWO_DRMS), ' m'); | ||||
| text(cosd(65)*TWO_DRMS,sind(65)*TWO_DRMS,str,'Color',[0 0.6 0]); | ||||
|  | ||||
|  | ||||
| [x,y,z] = cylinder([CEP CEP],200); | ||||
|  | ||||
| plot(x(1,:),y(1,:),'r--'); | ||||
| str = strcat('CEP=',num2str(CEP), ' m'); | ||||
| text(cosd(80)*CEP,sind(80)*CEP,str,'Color','r'); | ||||
| [x,y,z] = cylinder([CEP CEP], 200); | ||||
| plot(x(1,:), y(1,:), 'r--'); | ||||
| str = strcat('CEP=', num2str(CEP), ' m'); | ||||
| text(cosd(80)*CEP, sind(80)*CEP, str, 'Color','r'); | ||||
|  | ||||
| grid on | ||||
| axis equal; | ||||
| xlabel('North [m]','fontname','Times','fontsize', fontsize) | ||||
| ylabel('East [m]','fontname','Times','fontsize', fontsize) | ||||
|  | ||||
| % 3D analysis | ||||
| % Simulated X,Y,Z measurements | ||||
|  | ||||
| % if sigma_ratio=1 -> Prob in circle with r=DRMS -> 50% | ||||
| SEP=0.51*sqrt(sigma_3d(1)^2+sigma_3d(2)^2+sigma_3d(3)^2) | ||||
|  | ||||
| % if sigma_ratio=1 -> Prob in circle with r=DRMS -> 61% | ||||
| MRSE=sqrt(sigma_3d(1)^2+sigma_3d(2)^2+sigma_3d(3)^2) | ||||
| % if sigma_ratio=1 -> Prob in circle with r=2DRMS -> 95% | ||||
| TWO_MRSE=2*MRSE | ||||
|  | ||||
|  | ||||
|  | ||||
| % SCATTER PLOT | ||||
| %% SCATTER PLOT 3D | ||||
| subplot(3,3,9) | ||||
| scatter3(v_3d(:,1)-mean_3d(1),v_3d(:,2)-mean_3d(2), v_3d(:,3)-mean_3d(3)); | ||||
| scatter3(v_3d(:,1)-mean_3d(1), v_3d(:,2)-mean_3d(2), v_3d(:,3)-mean_3d(3)); | ||||
|  | ||||
| hold on; | ||||
|  | ||||
| [x,y,z] = sphere(); | ||||
| hSurface=surf(MRSE*x,MRSE*y,MRSE*z);  % sphere centered at origin | ||||
| hSurface = surf(MRSE*x, MRSE*y, MRSE*z);  % sphere centered at origin | ||||
| set(hSurface, 'facecolor', 'none', 'edgecolor', [0 0.6 0], 'edgealpha', 1, 'facealpha', 1); | ||||
|  | ||||
| set(hSurface,'facecolor','none','edgecolor',[0 0.6 0],'edgealpha',1,'facealpha',1); | ||||
| xlabel('North [m]', 'fontname', 'Times', 'fontsize', fontsize-2) | ||||
| ylabel('East [m]', 'fontname', 'Times', 'fontsize', fontsize-2) | ||||
| zlabel('Up [m]', 'fontname', 'Times', 'fontsize', fontsize-2) | ||||
| str = strcat('MRSE=', num2str(MRSE), ' m') | ||||
| text(cosd(45)*MRSE, sind(45)*MRSE, 20, str, 'Color', [0 0.6 0]); | ||||
| a = gca; | ||||
| set(a, 'fontsize', fontsize-6) | ||||
|  | ||||
| %axis equal; | ||||
| xlabel('North [m]','fontname','Times','fontsize', fontsize-2) | ||||
| ylabel('East [m]','fontname','Times','fontsize', fontsize-2) | ||||
| zlabel('Up [m]','fontname','Times','fontsize', fontsize-2) | ||||
| str = strcat('MRSE=',num2str(MRSE), ' m') | ||||
| text(cosd(45)*MRSE,sind(45)*MRSE,20,str,'Color',[0 0.6 0]); | ||||
| a=gca; | ||||
| set(a,'fontsize',fontsize-6) | ||||
|  | ||||
| hh=findall(hf,'-property','FontName'); | ||||
| set(hh,'FontName','Times'); | ||||
| hh = findall(hf, '-property', 'FontName'); | ||||
| set(hh, 'FontName', 'Times'); | ||||
| print(hf, 'Figure2.eps', '-depsc') | ||||
| close(hf); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Carles Fernandez
					Carles Fernandez