mirror of
				https://github.com/gnss-sdr/gnss-sdr
				synced 2025-10-30 23:03:05 +00:00 
			
		
		
		
	Add Matlab parsing and plotting functions for Kalman filter tracking block
This commit is contained in:
		
							
								
								
									
										63
									
								
								conf/gnss-sdr-kalman-bayes.conf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										63
									
								
								conf/gnss-sdr-kalman-bayes.conf
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,63 @@ | ||||
| [GNSS-SDR] | ||||
|  | ||||
| ;######### GLOBAL OPTIONS ################## | ||||
| ;internal_fs_sps: Internal signal sampling frequency after the signal conditioning stage [samples per second]. | ||||
| GNSS-SDR.internal_fs_sps=2000000 | ||||
| GNSS-SDR.internal_fs_hz=2000000 | ||||
|  | ||||
| ;######### SIGNAL_SOURCE CONFIG ############ | ||||
| SignalSource.implementation=File_Signal_Source | ||||
| SignalSource.filename=/home/glamountain/gnss-sdr/data/2013_04_04_GNSS_SIGNAL_at_CTTC_SPAIN/2013_04_04_GNSS_SIGNAL_at_CTTC_SPAIN.dat | ||||
| SignalSource.item_type=ishort | ||||
| SignalSource.sampling_frequency=4000000 | ||||
| SignalSource.freq=1575420000 | ||||
| SignalSource.samples=0 | ||||
|  | ||||
| ;######### SIGNAL_CONDITIONER CONFIG ############ | ||||
| SignalConditioner.implementation=Signal_Conditioner | ||||
| DataTypeAdapter.implementation=Ishort_To_Complex | ||||
| InputFilter.implementation=Pass_Through | ||||
| InputFilter.item_type=gr_complex | ||||
| Resampler.implementation=Direct_Resampler | ||||
| Resampler.sample_freq_in=4000000 | ||||
| Resampler.sample_freq_out=2000000 | ||||
| Resampler.item_type=gr_complex | ||||
|  | ||||
| ;######### CHANNELS GLOBAL CONFIG ############ | ||||
| Channels_1C.count=8 | ||||
| Channels.in_acquisition=1 | ||||
| Channel.signal=1C | ||||
|  | ||||
| ;######### ACQUISITION GLOBAL CONFIG ############ | ||||
| Acquisition_1C.implementation=GPS_L1_CA_PCPS_Acquisition | ||||
| Acquisition_1C.item_type=gr_complex | ||||
| Acquisition_1C.threshold=0.008 | ||||
| Acquisition_1C.doppler_max=10000 | ||||
| Acquisition_1C.doppler_step=250 | ||||
| Acquisition_1C.dump=false | ||||
| Acquisition_1C.dump_filename=../data/kalman/acq_dump | ||||
|  | ||||
| ;######### TRACKING GLOBAL CONFIG ############ | ||||
| Tracking_1C.implementation=GPS_L1_CA_KF_Tracking | ||||
| Tracking_1C.item_type=gr_complex | ||||
| Tracking_1C.pll_bw_hz=40.0; | ||||
| Tracking_1C.dll_bw_hz=4.0; | ||||
| Tracking_1C.order=3; | ||||
| Tracking_1C.dump=true | ||||
| Tracking_1C.dump_filename=../data/kalman/epl_tracking_ch_ | ||||
| Tracking_1C.bce_run = true; | ||||
| Tracking_1C.p_transient = 0; | ||||
| Tracking_1C.s_transient = 100; | ||||
|  | ||||
| ;######### TELEMETRY DECODER GPS CONFIG ############ | ||||
| TelemetryDecoder_1C.implementation=GPS_L1_CA_Telemetry_Decoder | ||||
|  | ||||
| ;######### OBSERVABLES CONFIG ############ | ||||
| Observables.implementation=GPS_L1_CA_Observables | ||||
|  | ||||
| ;######### PVT CONFIG ############ | ||||
| PVT.implementation=GPS_L1_CA_PVT | ||||
| PVT.averaging_depth=100 | ||||
| PVT.flag_averaging=true | ||||
| PVT.output_rate_ms=10 | ||||
| PVT.display_rate_ms=500 | ||||
							
								
								
									
										93
									
								
								src/utils/matlab/gps_l1_ca_kf_plot_sample.m
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										93
									
								
								src/utils/matlab/gps_l1_ca_kf_plot_sample.m
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,93 @@ | ||||
| % 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 <https://www.gnu.org/licenses/>. | ||||
| % | ||||
| % ------------------------------------------------------------------------- | ||||
| % | ||||
|  | ||||
| close all; | ||||
| clear all; | ||||
|  | ||||
| if ~exist('dll_pll_veml_read_tracking_dump.m', 'file') | ||||
|     addpath('./libs') | ||||
| end | ||||
|  | ||||
|  | ||||
| samplingFreq = 6625000;     %[Hz] | ||||
| channels = 8; | ||||
| first_channel = 0; | ||||
| code_period = 0.001; | ||||
|  | ||||
| path    = '/archive/';  %% CHANGE THIS PATH | ||||
| figpath = [path]; | ||||
|  | ||||
| for N=1:1:channels | ||||
|     tracking_log_path = [path 'epl_tracking_ch_' num2str(N+first_channel-1) '.dat']; %% CHANGE epl_tracking_ch_ BY YOUR dump_filename | ||||
|     GNSS_tracking(N) = gps_l1_ca_kf_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).carrFreqRate   = GNSS_tracking(N).carrier_dopplerrate_hz2.'; | ||||
|     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 = GNSS_tracking(N).PRN.'; | ||||
|     trackResults(N).CNo = GNSS_tracking(N).CN0_SNV_dB_Hz.'; | ||||
|      | ||||
|      | ||||
|     kalmanResults(N).PRN = GNSS_tracking(N).PRN.'; | ||||
|     kalmanResults(N).innovation  = GNSS_tracking(N).carr_error.'; | ||||
|     kalmanResults(N).state1      = GNSS_tracking(N).carr_nco.'; | ||||
|     kalmanResults(N).state2      = GNSS_tracking(N).carrier_doppler_hz.'; | ||||
|     kalmanResults(N).state3      = GNSS_tracking(N).carrier_dopplerrate_hz2.'; | ||||
|     kalmanResults(N).r_noise_cov = GNSS_tracking(N).carr_noise_sigma2.'; | ||||
|     kalmanResults(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); | ||||
|     settings.codePeriod  = code_period; | ||||
|     settings.timeStartInSeconds = 20; | ||||
|      | ||||
|     %plotTracking(N, trackResults, settings) | ||||
|     plotKalman(N, kalmanResults, settings) | ||||
|      | ||||
|     saveas(gcf, [figpath 'epl_tracking_ch_' num2str(N) '_PRN_' num2str(trackResults(N).PRN(end)) '.png'], 'png') | ||||
| end | ||||
|  | ||||
|  | ||||
							
								
								
									
										158
									
								
								src/utils/matlab/libs/gps_l1_ca_kf_read_tracking_dump.m
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										158
									
								
								src/utils/matlab/libs/gps_l1_ca_kf_read_tracking_dump.m
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,158 @@ | ||||
| % Usage: gps_l1_ca_kf_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. | ||||
| % 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 <https://www.gnu.org/licenses/>. | ||||
| % | ||||
| % ------------------------------------------------------------------------- | ||||
| % | ||||
|  | ||||
| function [GNSS_tracking] = gps_l1_ca_kf_read_tracking_dump (filename, count) | ||||
|  | ||||
| m = nargchk (1,2,nargin); | ||||
|  | ||||
| num_float_vars = 19; | ||||
| 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 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 interleaved float | ||||
|     v19 = 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 | ||||
|     v20 = 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 | ||||
|     v21 = 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 | ||||
|     v22 = 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.carrier_dopplerrate_hz2 = v11; | ||||
|     GNSS_tracking.code_freq_hz = v12; | ||||
|     GNSS_tracking.carr_error = v13; | ||||
|     GNSS_tracking.carr_noise_sigma2 = v14; | ||||
|     GNSS_tracking.carr_nco = v15; | ||||
|     GNSS_tracking.code_error = v16; | ||||
|     GNSS_tracking.code_nco = v17; | ||||
|     GNSS_tracking.CN0_SNV_dB_Hz = v18; | ||||
|     GNSS_tracking.carrier_lock_test = v19; | ||||
|     GNSS_tracking.var1 = v20; | ||||
|     GNSS_tracking.var2 = v21; | ||||
|     GNSS_tracking.PRN = v22; | ||||
| end | ||||
							
								
								
									
										135
									
								
								src/utils/matlab/libs/plotKalman.m
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										135
									
								
								src/utils/matlab/libs/plotKalman.m
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,135 @@ | ||||
| function plotKalman(channelList, trackResults, settings) | ||||
| % This function plots the tracking results for the given channel list. | ||||
| % | ||||
| % plotTracking(channelList, trackResults, settings) | ||||
| % | ||||
| %   Inputs: | ||||
| %       channelList     - list of channels to be plotted. | ||||
| %       trackResults    - tracking results from the tracking function. | ||||
| %       settings        - receiver 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 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. | ||||
| %-------------------------------------------------------------------------- | ||||
|  | ||||
| % 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 ================================ | ||||
|     % 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']); | ||||
|      | ||||
|     timeStart = settings.timeStartInSeconds; | ||||
|      | ||||
|     %% Draw axes ============================================================== | ||||
|     % Row 1 | ||||
|     handles(1, 1) = subplot(4, 2, 1); | ||||
|     handles(1, 2) = subplot(4, 2, 2); | ||||
|     % Row 2 | ||||
|     handles(2, 1) = subplot(4, 2, 3); | ||||
|     handles(2, 2) = subplot(4, 2, 4); | ||||
|     % Row 3 | ||||
|     handles(3, 1) = subplot(4, 2, [5 6]); | ||||
|     % Row 4 | ||||
|     handles(4, 1) = subplot(4, 2, [7 8]); | ||||
|      | ||||
|     %% Plot all figures ======================================================= | ||||
|      | ||||
|     timeAxisInSeconds = (1:settings.msToProcess)/1000; | ||||
|      | ||||
|     %----- CNo for signal---------------------------------- | ||||
|     plot  (handles(1, 1), timeAxisInSeconds, ... | ||||
|         trackResults(channelNr).CNo(1:settings.msToProcess), 'b'); | ||||
|      | ||||
|     grid  (handles(1, 1)); | ||||
|     axis  (handles(1, 1), 'tight'); | ||||
|     xlabel(handles(1, 1), 'Time (s)'); | ||||
|     ylabel(handles(1, 1), 'CNo (dB-Hz)'); | ||||
|     title (handles(1, 1), 'Carrier to Noise Ratio'); | ||||
|      | ||||
|     %----- PLL discriminator filtered---------------------------------- | ||||
|     plot  (handles(1, 2), timeAxisInSeconds, ... | ||||
|         trackResults(channelNr).state1(1:settings.msToProcess), 'b'); | ||||
|      | ||||
|     grid  (handles(1, 2)); | ||||
|     axis  (handles(1, 2), 'tight'); | ||||
|     xlim  (handles(1, 2), [timeStart, timeAxisInSeconds(end)]); | ||||
|     xlabel(handles(1, 2), 'Time (s)'); | ||||
|     ylabel(handles(1, 2), 'Phase Amplitude'); | ||||
|     title (handles(1, 2), 'Filtered Carrier Phase'); | ||||
|      | ||||
|     %----- Carrier Frequency -------------------------------- | ||||
|     plot  (handles(2, 1), timeAxisInSeconds(2:end), ... | ||||
|         trackResults(channelNr).state2(2:settings.msToProcess), 'Color',[0.42 0.25 0.39]); | ||||
|      | ||||
|     grid  (handles(2, 1)); | ||||
|     axis  (handles(2, 1)); | ||||
|     xlim  (handles(2, 1), [timeStart, timeAxisInSeconds(end)]); | ||||
|     xlabel(handles(2, 1), 'Time (s)'); | ||||
|     ylabel(handles(2, 1), 'Freq (hz)'); | ||||
|     title (handles(2, 1), 'Filtered Doppler Frequency'); | ||||
|      | ||||
|     %----- Carrier Frequency Rate -------------------------------- | ||||
|     plot  (handles(2, 2), timeAxisInSeconds(2:end), ... | ||||
|         trackResults(channelNr).state3(2:settings.msToProcess), 'Color',[0.42 0.25 0.39]); | ||||
|      | ||||
|     grid  (handles(2, 2)); | ||||
|     axis  (handles(2, 2)); | ||||
|     xlim  (handles(2, 2), [timeStart, timeAxisInSeconds(end)]); | ||||
|     xlabel(handles(2, 2), 'Time (s)'); | ||||
|     ylabel(handles(2, 2), 'Freq (hz)'); | ||||
|     title (handles(2, 2), 'Filtered Doppler Frequency Rate'); | ||||
|      | ||||
|     %----- PLL discriminator unfiltered-------------------------------- | ||||
|     plot  (handles(3, 1), timeAxisInSeconds, ... | ||||
|         trackResults(channelNr).innovation, 'r'); | ||||
|      | ||||
|     grid  (handles(3, 1)); | ||||
|     axis  (handles(3, 1), 'auto'); | ||||
|     xlim  (handles(3, 1), [timeStart, timeAxisInSeconds(end)]); | ||||
|     xlabel(handles(3, 1), 'Time (s)'); | ||||
|     ylabel(handles(3, 1), 'Amplitude'); | ||||
|     title (handles(3, 1), 'Raw PLL discriminator (Innovation)'); | ||||
|      | ||||
|      | ||||
|     %----- PLL discriminator covariance -------------------------------- | ||||
|     plot  (handles(4, 1), timeAxisInSeconds, ... | ||||
|         trackResults(channelNr).r_noise_cov, 'r'); | ||||
|      | ||||
|     grid  (handles(4, 1)); | ||||
|     axis  (handles(4, 1), 'auto'); | ||||
|     xlim  (handles(4, 1), [timeStart, timeAxisInSeconds(end)]); | ||||
|     xlabel(handles(4, 1), 'Time (s)'); | ||||
|     ylabel(handles(4, 1), 'Variance'); | ||||
|     title (handles(4, 1), 'Estimated Noise Variance'); | ||||
| end % for channelNr = channelList | ||||
		Reference in New Issue
	
	Block a user
	 Gerald LaMountain
					Gerald LaMountain