From c32b6f0bc7eb93041c0f0e74f0e99bf5ced7500f Mon Sep 17 00:00:00 2001 From: KarsVeldkamp Date: Mon, 13 Jan 2025 17:52:28 +0100 Subject: [PATCH] remove unneccessary matlab files --- .../matlab_scripts/ppg/1-2-3_signal_quality.m | 379 ---------- docs/matlab_scripts/ppg/1-4_HR_estimation.m | 223 ------ .../ppg/2-3_signal_quality_dbpd_update.m | 253 ------- .../tremor/main_tremor_eScience.m | 254 ------- .../ppg/classifier/LR_PPG_quality.pkl | Bin 948 -> 0 bytes src/paradigma/ppg/classifier/LR_model.mat | Bin 3712 -> 0 bytes .../ppg/feat_extraction/acc_feature.m | 20 - src/paradigma/ppg/feat_extraction/peakdet.m | 64 -- .../ppg/feat_extraction/ppg_features.m | 53 -- .../ppg/glob_functions/extract_hr_segments.m | 37 - .../extract_overlapping_segments.m | 23 - .../ppg/glob_functions/jsonlab/AUTHORS.txt | 41 - .../ppg/glob_functions/jsonlab/ChangeLog.txt | 74 -- .../glob_functions/jsonlab/LICENSE_BSD.txt | 25 - .../glob_functions/jsonlab/LICENSE_GPLv3.txt | 699 ------------------ .../ppg/glob_functions/jsonlab/README.txt | 394 ---------- .../jsonlab/examples/.svn/entries | 368 --------- .../text-base/demo_jsonlab_basic.m.svn-base | 180 ----- .../text-base/demo_ubjson_basic.m.svn-base | 180 ----- .../.svn/text-base/example1.json.svn-base | 23 - .../.svn/text-base/example2.json.svn-base | 22 - .../.svn/text-base/example3.json.svn-base | 11 - .../.svn/text-base/example4.json.svn-base | 34 - .../jsonlab_basictest.matlab.svn-base | 662 ----------------- .../text-base/jsonlab_selftest.m.svn-base | 27 - .../jsonlab_selftest.matlab.svn-base | 144 ---- .../text-base/jsonlab_speedtest.m.svn-base | 21 - .../jsonlab/examples/demo_jsonlab_basic.m | 180 ----- .../jsonlab/examples/demo_ubjson_basic.m | 180 ----- .../jsonlab/examples/example1.json | 23 - .../jsonlab/examples/example2.json | 22 - .../jsonlab/examples/example3.json | 11 - .../jsonlab/examples/example4.json | 34 - .../jsonlab/examples/jsonlab_basictest.matlab | 662 ----------------- .../jsonlab/examples/jsonlab_selftest.m | 27 - .../jsonlab/examples/jsonlab_selftest.matlab | 144 ---- .../jsonlab/examples/jsonlab_speedtest.m | 21 - .../ppg/glob_functions/jsonlab/jsonopt.m | 32 - .../ppg/glob_functions/jsonlab/loadjson.m | 566 -------------- .../ppg/glob_functions/jsonlab/loadubjson.m | 528 ------------- .../ppg/glob_functions/jsonlab/mergestruct.m | 33 - .../ppg/glob_functions/jsonlab/savejson.m | 475 ------------ .../ppg/glob_functions/jsonlab/saveubjson.m | 504 ------------- .../glob_functions/jsonlab/varargin2struct.m | 40 - .../ppg/glob_functions/sample_prob_final.m | 49 -- .../ppg/glob_functions/synchronization.m | 76 -- .../ppg/glob_functions/tsdf_scan_meta.m | 22 - src/paradigma/ppg/hr_functions/Long_TFD_JOT.m | 38 - src/paradigma/ppg/hr_functions/PPG_TFD_HR.m | 59 -- .../hr_functions/TFD toolbox JOT/.gitignore | 4 - .../hr_functions/TFD toolbox JOT/CHANGELOG.md | 23 - .../hr_functions/TFD toolbox JOT/LICENCE.md | 27 - .../hr_functions/TFD toolbox JOT/README.md | 251 ------- .../hr_functions/TFD toolbox JOT/README.pdf | Bin 457441 -> 0 bytes .../TFD toolbox JOT/common/gen_Doppler_kern.m | 142 ---- .../common/gen_Doppler_lag_kern.m | 314 -------- .../TFD toolbox JOT/common/gen_lag_kern.m | 123 --- .../hr_functions/TFD toolbox JOT/dec_tfd.m | 154 ---- .../decimated_TFDs/dec_di_gdtfd.m | 194 ----- .../decimated_TFDs/dec_li_gdtfd.m | 200 ----- .../decimated_TFDs/dec_nonsep_gdtfd.m | 229 ------ .../decimated_TFDs/dec_sep_gdtfd.m | 241 ------ .../TFD toolbox JOT/full_TFDs/di_gdtfd.m | 157 ---- .../TFD toolbox JOT/full_TFDs/li_gdtfd.m | 190 ----- .../TFD toolbox JOT/full_TFDs/nonsep_gdtfd.m | 196 ----- .../TFD toolbox JOT/full_TFDs/sep_gdtfd.m | 199 ----- .../hr_functions/TFD toolbox JOT/full_tfd.m | 144 ---- .../TFD toolbox JOT/load_curdir.m | 13 - .../pics/decimated_TFDs_examples.png | Bin 146865 -> 0 bytes .../pics/full_TFDs_examples.png | Bin 203040 -> 0 bytes .../utils/check_dec_params_seq.m | 79 -- .../TFD toolbox JOT/utils/dispEE.m | 9 - .../TFD toolbox JOT/utils/dispVars.m | 26 - .../TFD toolbox JOT/utils/disp_bytes.m | 25 - .../TFD toolbox JOT/utils/fold_vector_full.m | 40 - .../TFD toolbox JOT/utils/fold_vector_half.m | 34 - .../TFD toolbox JOT/utils/gen_LFM.m | 29 - .../utils/get_analytic_signal.m | 76 -- .../TFD toolbox JOT/utils/get_window.m | 176 ----- .../TFD toolbox JOT/utils/isreal_fn.m | 11 - .../TFD toolbox JOT/utils/padWin.m | 97 --- .../hr_functions/TFD toolbox JOT/utils/vtfd.m | 149 ---- .../ppg/preprocessing/preprocessing_imu.m | 15 - .../ppg/preprocessing/preprocessing_ppg.m | 13 - 84 files changed, 11517 deletions(-) delete mode 100644 docs/matlab_scripts/ppg/1-2-3_signal_quality.m delete mode 100644 docs/matlab_scripts/ppg/1-4_HR_estimation.m delete mode 100644 docs/matlab_scripts/ppg/2-3_signal_quality_dbpd_update.m delete mode 100644 docs/matlab_scripts/tremor/main_tremor_eScience.m delete mode 100644 src/paradigma/ppg/classifier/LR_PPG_quality.pkl delete mode 100644 src/paradigma/ppg/classifier/LR_model.mat delete mode 100644 src/paradigma/ppg/feat_extraction/acc_feature.m delete mode 100644 src/paradigma/ppg/feat_extraction/peakdet.m delete mode 100644 src/paradigma/ppg/feat_extraction/ppg_features.m delete mode 100644 src/paradigma/ppg/glob_functions/extract_hr_segments.m delete mode 100644 src/paradigma/ppg/glob_functions/extract_overlapping_segments.m delete mode 100644 src/paradigma/ppg/glob_functions/jsonlab/AUTHORS.txt delete mode 100644 src/paradigma/ppg/glob_functions/jsonlab/ChangeLog.txt delete mode 100644 src/paradigma/ppg/glob_functions/jsonlab/LICENSE_BSD.txt delete mode 100644 src/paradigma/ppg/glob_functions/jsonlab/LICENSE_GPLv3.txt delete mode 100644 src/paradigma/ppg/glob_functions/jsonlab/README.txt delete mode 100644 src/paradigma/ppg/glob_functions/jsonlab/examples/.svn/entries delete mode 100644 src/paradigma/ppg/glob_functions/jsonlab/examples/.svn/text-base/demo_jsonlab_basic.m.svn-base delete mode 100644 src/paradigma/ppg/glob_functions/jsonlab/examples/.svn/text-base/demo_ubjson_basic.m.svn-base delete mode 100644 src/paradigma/ppg/glob_functions/jsonlab/examples/.svn/text-base/example1.json.svn-base delete mode 100644 src/paradigma/ppg/glob_functions/jsonlab/examples/.svn/text-base/example2.json.svn-base delete mode 100644 src/paradigma/ppg/glob_functions/jsonlab/examples/.svn/text-base/example3.json.svn-base delete mode 100644 src/paradigma/ppg/glob_functions/jsonlab/examples/.svn/text-base/example4.json.svn-base delete mode 100644 src/paradigma/ppg/glob_functions/jsonlab/examples/.svn/text-base/jsonlab_basictest.matlab.svn-base delete mode 100644 src/paradigma/ppg/glob_functions/jsonlab/examples/.svn/text-base/jsonlab_selftest.m.svn-base delete mode 100644 src/paradigma/ppg/glob_functions/jsonlab/examples/.svn/text-base/jsonlab_selftest.matlab.svn-base delete mode 100644 src/paradigma/ppg/glob_functions/jsonlab/examples/.svn/text-base/jsonlab_speedtest.m.svn-base delete mode 100644 src/paradigma/ppg/glob_functions/jsonlab/examples/demo_jsonlab_basic.m delete mode 100644 src/paradigma/ppg/glob_functions/jsonlab/examples/demo_ubjson_basic.m delete mode 100644 src/paradigma/ppg/glob_functions/jsonlab/examples/example1.json delete mode 100644 src/paradigma/ppg/glob_functions/jsonlab/examples/example2.json delete mode 100644 src/paradigma/ppg/glob_functions/jsonlab/examples/example3.json delete mode 100644 src/paradigma/ppg/glob_functions/jsonlab/examples/example4.json delete mode 100644 src/paradigma/ppg/glob_functions/jsonlab/examples/jsonlab_basictest.matlab delete mode 100644 src/paradigma/ppg/glob_functions/jsonlab/examples/jsonlab_selftest.m delete mode 100644 src/paradigma/ppg/glob_functions/jsonlab/examples/jsonlab_selftest.matlab delete mode 100644 src/paradigma/ppg/glob_functions/jsonlab/examples/jsonlab_speedtest.m delete mode 100644 src/paradigma/ppg/glob_functions/jsonlab/jsonopt.m delete mode 100644 src/paradigma/ppg/glob_functions/jsonlab/loadjson.m delete mode 100644 src/paradigma/ppg/glob_functions/jsonlab/loadubjson.m delete mode 100644 src/paradigma/ppg/glob_functions/jsonlab/mergestruct.m delete mode 100644 src/paradigma/ppg/glob_functions/jsonlab/savejson.m delete mode 100644 src/paradigma/ppg/glob_functions/jsonlab/saveubjson.m delete mode 100644 src/paradigma/ppg/glob_functions/jsonlab/varargin2struct.m delete mode 100644 src/paradigma/ppg/glob_functions/sample_prob_final.m delete mode 100644 src/paradigma/ppg/glob_functions/synchronization.m delete mode 100644 src/paradigma/ppg/glob_functions/tsdf_scan_meta.m delete mode 100644 src/paradigma/ppg/hr_functions/Long_TFD_JOT.m delete mode 100644 src/paradigma/ppg/hr_functions/PPG_TFD_HR.m delete mode 100644 src/paradigma/ppg/hr_functions/TFD toolbox JOT/.gitignore delete mode 100644 src/paradigma/ppg/hr_functions/TFD toolbox JOT/CHANGELOG.md delete mode 100644 src/paradigma/ppg/hr_functions/TFD toolbox JOT/LICENCE.md delete mode 100644 src/paradigma/ppg/hr_functions/TFD toolbox JOT/README.md delete mode 100644 src/paradigma/ppg/hr_functions/TFD toolbox JOT/README.pdf delete mode 100644 src/paradigma/ppg/hr_functions/TFD toolbox JOT/common/gen_Doppler_kern.m delete mode 100644 src/paradigma/ppg/hr_functions/TFD toolbox JOT/common/gen_Doppler_lag_kern.m delete mode 100644 src/paradigma/ppg/hr_functions/TFD toolbox JOT/common/gen_lag_kern.m delete mode 100644 src/paradigma/ppg/hr_functions/TFD toolbox JOT/dec_tfd.m delete mode 100644 src/paradigma/ppg/hr_functions/TFD toolbox JOT/decimated_TFDs/dec_di_gdtfd.m delete mode 100644 src/paradigma/ppg/hr_functions/TFD toolbox JOT/decimated_TFDs/dec_li_gdtfd.m delete mode 100644 src/paradigma/ppg/hr_functions/TFD toolbox JOT/decimated_TFDs/dec_nonsep_gdtfd.m delete mode 100644 src/paradigma/ppg/hr_functions/TFD toolbox JOT/decimated_TFDs/dec_sep_gdtfd.m delete mode 100644 src/paradigma/ppg/hr_functions/TFD toolbox JOT/full_TFDs/di_gdtfd.m delete mode 100644 src/paradigma/ppg/hr_functions/TFD toolbox JOT/full_TFDs/li_gdtfd.m delete mode 100644 src/paradigma/ppg/hr_functions/TFD toolbox JOT/full_TFDs/nonsep_gdtfd.m delete mode 100644 src/paradigma/ppg/hr_functions/TFD toolbox JOT/full_TFDs/sep_gdtfd.m delete mode 100644 src/paradigma/ppg/hr_functions/TFD toolbox JOT/full_tfd.m delete mode 100644 src/paradigma/ppg/hr_functions/TFD toolbox JOT/load_curdir.m delete mode 100644 src/paradigma/ppg/hr_functions/TFD toolbox JOT/pics/decimated_TFDs_examples.png delete mode 100644 src/paradigma/ppg/hr_functions/TFD toolbox JOT/pics/full_TFDs_examples.png delete mode 100644 src/paradigma/ppg/hr_functions/TFD toolbox JOT/utils/check_dec_params_seq.m delete mode 100644 src/paradigma/ppg/hr_functions/TFD toolbox JOT/utils/dispEE.m delete mode 100644 src/paradigma/ppg/hr_functions/TFD toolbox JOT/utils/dispVars.m delete mode 100644 src/paradigma/ppg/hr_functions/TFD toolbox JOT/utils/disp_bytes.m delete mode 100644 src/paradigma/ppg/hr_functions/TFD toolbox JOT/utils/fold_vector_full.m delete mode 100644 src/paradigma/ppg/hr_functions/TFD toolbox JOT/utils/fold_vector_half.m delete mode 100644 src/paradigma/ppg/hr_functions/TFD toolbox JOT/utils/gen_LFM.m delete mode 100644 src/paradigma/ppg/hr_functions/TFD toolbox JOT/utils/get_analytic_signal.m delete mode 100644 src/paradigma/ppg/hr_functions/TFD toolbox JOT/utils/get_window.m delete mode 100644 src/paradigma/ppg/hr_functions/TFD toolbox JOT/utils/isreal_fn.m delete mode 100644 src/paradigma/ppg/hr_functions/TFD toolbox JOT/utils/padWin.m delete mode 100644 src/paradigma/ppg/hr_functions/TFD toolbox JOT/utils/vtfd.m delete mode 100644 src/paradigma/ppg/preprocessing/preprocessing_imu.m delete mode 100644 src/paradigma/ppg/preprocessing/preprocessing_ppg.m diff --git a/docs/matlab_scripts/ppg/1-2-3_signal_quality.m b/docs/matlab_scripts/ppg/1-2-3_signal_quality.m deleted file mode 100644 index 0657cf99..00000000 --- a/docs/matlab_scripts/ppg/1-2-3_signal_quality.m +++ /dev/null @@ -1,379 +0,0 @@ -%% Main script to perform signal quality assessment of wearable PPG -% This script uses both PPG and accelerometer and performs the following -% steps: -% 1. Loading all metadata of PPG and IMU - get all metafiles and find pairs and do pairwise synchronization -% 2. Query on data availability + synchronization -% 3. Loading relevant segment sensor data using tsdf wrapper (start for loop over synchronized segment indices) -% 4. Synchronize the data (correct indices etc) -% 5. Data preprocessing -% 6. Feature extraction -% 7. Classification - combine after this - - -% Architecture overview -% The script implements the following steps: -% 1. IMU and PPG preprocessing -% 2. IMU and PPG feature extraction -% 3. Signal quality assessment - -%% Initalization -% Setting data paths + extracting metafilenames already -clearvars; close all; clc -addpath(genpath('..\..\..\paradigma-toolbox')) % Add git repository to the path -addpath(genpath("..\..\..\tsdf4matlab")) % Add wrapper to the path - -unix_ticks_ms = 1000.0; -fs_ppg = 30; % Establish the sampling rate desired for resampling PPG --> now chosen to be fixed on 30 Hz -fs_imu = 100; % Establish the sampling rate desired for resampling IMU --> now chosen to be fixed on 30 Hz - -raw_data_root = '..\..\..\tests\data\1.prepared_data\'; -ppp_data_path_ppg = [raw_data_root 'PPG\']; -ppp_data_path_imu = [raw_data_root 'IMU\']; - -%% 1. Loading all metadata of PPG and IMU -meta_ppg = tsdf_scan_meta(ppp_data_path_ppg); % tsdf_scan_meta returns metafile struct containing information of all metafiles from all patients in tsdf_dirlist -meta_imu = tsdf_scan_meta(ppp_data_path_imu); - -%% 2. Query on data availability + synchronization -[segment_ppg, segment_imu] = synchronization(meta_ppg, meta_imu); % PPG segment and IMU segment indices corresponding to eachother (where there is overlapping data) -% NOT NEEDED FOR TEST DATA BUT SHOULD BE FUNCTIONALITY IN THE TOOLBOX - -%% 3. Loading relevant segment sensor data using tsdf wrapper --> TO BE ADJUSTED -%%--------Load PPG + IMU data-------%% -n_files_sync = length(segment_ppg); % For test data this is 1 for final application it can be anything and it requires looping through the script - -% for n = 1:n_files_sync --> if there are more segments!! -% end - -n = 1; -meta_path_ppg = meta_ppg(segment_ppg(n)).tsdf_meta_fullpath; -meta_path_imu = meta_imu(segment_imu(n)).tsdf_meta_fullpath; - -[metadata_list_ppg, data_list_ppg] = load_tsdf_metadata_from_path(meta_path_ppg); -[metadata_list_imu, data_list_imu] = load_tsdf_metadata_from_path(meta_path_imu); - -time_idx_ppg = tsdf_values_idx(metadata_list_ppg, 'time'); % added for correctness instead of assuming that the idx is the same for every time we use load_tsdf_metadata_from_path --> or is this unnecessary --> assumption it is different for PPG and IMU!! -time_idx_imu = tsdf_values_idx(metadata_list_imu, 'time'); -values_idx_ppg = tsdf_values_idx(metadata_list_ppg, 'values'); -values_idx_imu = tsdf_values_idx(metadata_list_imu, 'values'); - -t_iso_ppg = metadata_list_ppg{time_idx_ppg}.start_iso8601; -t_iso_imu = metadata_list_imu{time_idx_imu}.start_iso8601; - -datetime_ppg = datetime(t_iso_ppg, 'InputFormat', 'yyyy-MM-dd''T''HH:mm:ssZ', 'TimeZone', 'UTC'); -datetime_imu = datetime(t_iso_imu, 'InputFormat', 'yyyy-MM-dd''T''HH:mm:ssZ', 'TimeZone', 'UTC'); - -tr_ppg = data_list_ppg{time_idx_ppg}; -tr_imu = data_list_imu{time_idx_imu}; - -ts_ppg = posixtime(datetime_ppg) * unix_ticks_ms; % calculate the unix timestamp in ms -ts_imu = posixtime(datetime_imu) * unix_ticks_ms; % calculate the unix timestamp in ms - -t_ppg = tr_ppg + ts_ppg(n); -t_imu = tr_imu + ts_imu(n); - - -v_ppg = data_list_ppg{values_idx_ppg}; -v_imu = data_list_imu{values_idx_imu}; % store data values for every seperate tsdf file in cell -%scale_factors = metadata_list_imu{values_idx_imu}.scale_factors'; - -%% 4. Data synchronization on right indices -fs_ppg_est = 1/median(diff(tr_ppg)); -fs_imu_est = 1/median(diff(tr_imu)); -[ppg_indices, imu_indices] = extract_overlapping_segments(t_ppg, t_imu); % List of two pairs of indices, e.g., [(0, 1000), (1, 2002)] - they might differ depending on the sampling rate - -%%---Update data vectors on synchronized labels---%% -v_ppg = v_ppg(ppg_indices(1):ppg_indices(2)); -v_imu = v_imu(imu_indices(1):imu_indices(2),:); -t_ppg = t_ppg(ppg_indices(1):ppg_indices(2)); -t_imu = t_imu(imu_indices(1):imu_indices(2)); -tr_ppg = tr_ppg(ppg_indices(1):ppg_indices(2)); -tr_imu = tr_imu(imu_indices(1):imu_indices(2)); - -ts_sync = ts_ppg + tr_ppg(1)*unix_ticks_ms; % update ts_sync by the first relative time point containing both PPG and IMU a - -tr_ppg = tr_ppg - tr_ppg(1); % update tr_ppg by the first relative time point containing both PPG and IMU --> should be done after ts_sync is updated -tr_imu = tr_imu - tr_imu(1); % update tr_imu by the first relative time point containing both PPG and IMU - -%% 5. Data preprocessing -%%--Preprocessing both IMU and PPG%% -v_acc_scaled = double(v_imu(:,1:3)); % Extract only the accelerometer channels and multiply them using scale factors! --> now based on indices but preferably on channel names in metadata??? -min_window_length = 30; - -%%----NEEDS TO BE IMPLEMENTED IN FUNCTION!!--%% -if length(v_ppg) < fs_ppg * min_window_length || length(v_acc_scaled) < fs_imu * min_window_length % Only resample, feature calculation and classification on arrays > 30s since these are required for HR(V) analysis later on --> maybe add this to the synchronization - warning('Sample is of insufficient length!') -else - [v_ppg_pre, tr_ppg_pre] = preprocessing_ppg(tr_ppg, v_ppg, fs_ppg); % 2 matrices, one for ppg (Nx1) and for time (Nx1) - [v_acc_pre, tr_acc_pre] = preprocessing_imu(tr_imu, v_acc_scaled, fs_imu); % 2 matrices, one for accel imu (Nx3) and for time (Nx1) -end - -%% 5a. Write TSDF PPG preprocessing output -location = "..\..\tests\data\2.preprocessed_data\ppg"; -data_pre_ppg{1} = tr_ppg_pre; -data_pre_ppg{2} = v_ppg_pre; - -metafile_pre_template = metadata_list_ppg{values_idx_ppg}; - -start_time_iso = datetime(ts_sync/unix_ticks_ms, "ConvertFrom", "posixtime", 'Format', 'dd-MMM-yyyy HH:mm:ss z', 'TimeZone', 'UTC'); -end_time_iso = datetime((ts_sync+tr_ppg_pre(end)*1000)/unix_ticks_ms, "ConvertFrom", "posixtime", 'Format', 'dd-MMM-yyyy HH:mm:ss z', 'TimeZone', 'UTC'); - -metafile_pre_template.start_iso8601 = string(start_time_iso); -metafile_pre_template.end_iso8601 = string(end_time_iso); -metafile_pre_template.ppp_source_protobuf = "WatchData.PPG.Week104.raw"; - -metafile_time = metafile_pre_template; % time vector metadata list as a template and adjust it -metafile_values = metafile_pre_template; - -metafile_time.channels = {'time'}; -metafile_time.units = {'relative_ms'}; -metafile_time.freq_sampling_original = fs_ppg_est; -metafile_time.file_name = 'PPG_time.bin'; - -metafile_values.channels = {'green'}; -metafile_values.units = {'none'}; -metafile_values.freq_sampling_original = fs_ppg_est; -metafile_values.file_name = 'PPG_samples.bin'; - -meta_pre_ppg{1} = metafile_time; -meta_pre_ppg{2} = metafile_values; -mat_metadata_file_name = "PPG_meta.json"; -save_tsdf_data(meta_pre_ppg, data_pre_ppg, location, mat_metadata_file_name) - -%% 5b. Write TSDF PPG preprocessing output -data_pre_acc{1} = tr_acc_pre; -data_pre_acc{2} = v_acc_pre; - -metafile_pre_template = metadata_list_ppg{values_idx_ppg}; - -start_time_iso = datetime(ts_sync/unix_ticks_ms, "ConvertFrom", "posixtime", 'Format', 'dd-MMM-yyyy HH:mm:ss z', 'TimeZone', 'UTC'); -end_time_iso = datetime((ts_sync+tr_acc_pre(end)*unix_ticks_ms)/unix_ticks_ms, "ConvertFrom", "posixtime", 'Format', 'dd-MMM-yyyy HH:mm:ss z', 'TimeZone', 'UTC'); - -metafile_pre_template.start_iso8601 = string(start_time_iso); -metafile_pre_template.end_iso8601 = string(end_time_iso); -metafile_pre_template.ppp_source_protobuf = "WatchData.IMU.Week104.raw"; - -metafile_time = metafile_pre_template; % time vector metadata list -metafile_values = metafile_pre_template; - -metafile_time.channels = {'time'}; -metafile_time.units = {'ms'}; -metafile_time.freq_sampling_original = fs_imu_est; -metafile_time.file_name = 'accelerometer_time.bin'; - -metafile_values.channels = {'acceleration_x', 'acceleration_y', 'acceleration_z'}; -metafile_values.units = {'m/s/s', 'm/s/s', 'm/s/s'}; -metafile_values.freq_sampling_original = fs_imu_est; % Sampling rate in Hz -metafile_values.file_name = 'accelerometer_samples.bin'; - -meta_pre_acc{1} = metafile_time; -meta_pre_acc{2} = metafile_values; -mat_metadata_file_name = "accelerometer_meta.json"; -save_tsdf_data(meta_pre_acc, data_pre_acc, location, mat_metadata_file_name) -%% 6. Feature extraction -tic -% Create loop for 6s epochs with 5s overlap -epoch_length = 6; % in seconds -overlap = 5; % in seconds - -% Number of samples in epoch -samples_per_epoch_ppg = epoch_length * fs_ppg; -samples_per_epoch_acc = epoch_length * fs_imu; - -% Calculate number of samples to shift for each epoch -samples_shift_ppg = (epoch_length - overlap) * fs_ppg; -samples_shift_acc = (epoch_length - overlap) * fs_imu; % Hoe krijg ik mijn segmenten precies gelijk zodat het niet toevallig een error geeft dat 1 langer is dan de ander - -pwelchwin_acc = 3*fs_imu; % window length for pwelch -pwelchwin_ppg = 3*fs_ppg; % window length for pwelch -noverlap_acc = 0.5*pwelchwin_acc; % overlap for pwelch -noverlap_ppg = 0.5*pwelchwin_ppg; % overlap for pwelch - -f_bin_res = 0.05; % the treshold is set based on this binning --> so range of 0.1 Hz for calculating the PSD feature -nfft_ppg = 0:f_bin_res:fs_ppg/2; % frequency bins for pwelch ppg -nfft_acc = 0:f_bin_res:fs_imu/2; % frequency bins for pwelch imu - -features_ppg_scaled = []; -feature_acc = []; -t_unix_feat_total = []; -count = 0; -acc_idx = 1; - -% Load classifier with corresponding mu and sigma to z-score the features -load("LR_model.mat") -mu = LR_model.mu; -sigma = LR_model.sigma; -classifier = LR_model.classifier; % this classifier is only used later at the stage 7 - -% DESCRIBE THE LOOPING OVER 6s SEGMENTS FOR BOTH PPG AND IMU AND CALCULATE FEATURES -for i = 1:samples_shift_ppg:(length(v_ppg_pre) - samples_per_epoch_ppg + 1) - - if acc_idx + samples_per_epoch_acc - 1 > length(v_acc_pre) % For the last epoch, check if the segment for IMU is too short (not 6 seconds), add a check for the last epoch first (if i == last then...) - break - else - acc_segment = v_acc_pre(acc_idx:(acc_idx+samples_per_epoch_acc-1),:); % Extract the IMU window (6seconds) - end - ppg_segment = v_ppg_pre(i:(i + samples_per_epoch_ppg - 1)); % Extract the PPG window (6seconds) - - count = count + 1; - - %%--------Feature extraction + scaling--------%% - % calculate features using ppg_features.m - %features = ppg_features(ppg_segment, fs_ppg); % for now PPG_segment --> name can be adjusted! - - % Scaling using z-score - %features_ppg_scaled(count,:) = normalize(features, 'center', mu, 'scale', sigma); - - % Calculating psd (power spectral density) of imu and ppg - % in the Gait pipeline this is done using the Fourier transformation - % [pxx1,f1] = pwelch(acc_segment,hann(pwelchwin_acc), noverlap_acc, nfft_acc, fs_imu); - [pxx1,f1] = pwelch(acc_segment,hann(pwelchwin_acc), noverlap_acc, 2000, fs_imu); - PSD_imu = sum(pxx1,2); % sum over the three axis - % [pxx2,f2] = pwelch(ppg_segment,hann(pwelchwin_ppg), noverlap_ppg, nfft_ppg, fs_ppg); - [pxx2,f2] = pwelch(ppg_segment,hann(pwelchwin_ppg), noverlap_ppg, 600, fs_ppg); - PSD_ppg = pxx2; % this does nothing, equal to PSD_ppg = pxx2 - - % IMU feature extraction - feature_acc(count,1) = acc_feature(f1, PSD_imu, f2, PSD_ppg); % Calculate the power ratio of the accelerometer signal in the PPG frequency range and store it as a row in the feature matrix (which has only 1 column) - - % time channel - t_unix_feat_total(count,1) = tr_ppg_pre(i)*unix_ticks_ms + t_ppg(1); % Save in absolute unix time ms - acc_idx = acc_idx + samples_shift_acc; % update IMU_idx -end -% at this point we have a matrix with features for PPG (10 column), IMU (1 columns), and a time vector -toc -% THis is stored for later (stage 4) -v_sync_ppg_total(1,1) = ppg_indices(1); % start index --> needed for HR pipeline -v_sync_ppg_total(1,2) = ppg_indices(2); % end index --> needed for HR pipeline -v_sync_ppg_total(1,3) = segment_ppg(1); % Segment index --> needed for HR pipeline --> in loop this is n -v_sync_ppg_total(1,4) = count; % Number of epochs in the segment --> needed for HR pipeline - - -%% 6a. Write TSDF PPG feature extraction output (ppg features) -location = "..\..\tests\data\3.extracted_features\ppg"; -data_feat_ppg{1} = t_unix_feat_total; -data_feat_ppg{2} = single(features_ppg_scaled); - -metafile_pre_template = metadata_list_ppg{values_idx_ppg}; - -start_time_iso = datetime(ts_sync/unix_ticks_ms, "ConvertFrom", "posixtime", 'Format', 'dd-MMM-yyyy HH:mm:ss z', 'TimeZone', 'UTC'); -end_time_iso = datetime((ts_sync+tr_acc_pre(end)*unix_ticks_ms)/unix_ticks_ms, "ConvertFrom", "posixtime", 'Format', 'dd-MMM-yyyy HH:mm:ss z', 'TimeZone', 'UTC'); - -metafile_pre_template.start_iso8601 = string(start_time_iso); -metafile_pre_template.end_iso8601 = string(end_time_iso); -metafile_pre_template.ppp_source_protobuf = "WatchData.PPG.Week104.raw"; - -metafile_time = metafile_pre_template; % time vector metadata list as a template and adjust it -metafile_values = metafile_pre_template; - -metafile_time.channels = {'time'}; -metafile_time.units = {'time_absolute_unix_ms'}; -metafile_time.freq_sampling_original = fs_ppg_est; -metafile_time.file_name = 'features_ppg_time.bin'; - -metafile_values.channels = {'variance', 'mean', 'median', 'kurtosis', 'skewness', 'dominant frequency', 'relative power', 'spectral entropy', 'SNR', 'correlation peak'}; -metafile_values.units = {'none', 'none', 'none', 'none', 'none', 'Hz', 'none', 'none', 'none', 'none'}; -metafile_values.freq_sampling_original = fs_ppg_est; -metafile_values.file_name = 'features_ppg_samples.bin'; - -meta_feat_ppg{1} = metafile_time; -meta_feat_ppg{2} = metafile_values; -mat_metadata_file_name = "features_ppg_meta.json"; -save_tsdf_data(meta_feat_ppg, data_feat_ppg, location, mat_metadata_file_name) - -%% 6b. Write TSDF PPG preprocessing output (accelerometer feature) -location = "..\..\tests\data\3.extracted_features\ppg"; -data_feat_acc{1} = t_unix_feat_total; -data_feat_acc{2} = single(feature_acc); -metafile_pre_template = metadata_list_ppg{values_idx_ppg}; - -start_time_iso = datetime(ts_sync/unix_ticks_ms, "ConvertFrom", "posixtime", 'Format', 'dd-MMM-yyyy HH:mm:ss z', 'TimeZone', 'UTC'); -end_time_iso = datetime((ts_sync+tr_acc_pre(end)*unix_ticks_ms)/unix_ticks_ms, "ConvertFrom", "posixtime", 'Format', 'dd-MMM-yyyy HH:mm:ss z', 'TimeZone', 'UTC'); - -metafile_pre_template.start_iso8601 = string(start_time_iso); -metafile_pre_template.end_iso8601 = string(end_time_iso); -metafile_pre_template.ppp_source_protobuf = "WatchData.IMU.Week104.raw"; - -metafile_time = metafile_pre_template; % time vector metadata list -metafile_values = metafile_pre_template; - -metafile_time.channels = {'time'}; -metafile_time.units = {'time_absolute_unix_ms'}; -metafile_time.freq_sampling_original = fs_imu_est; -metafile_time.file_name = 'feature_acc_time.bin'; - -metafile_values.channels = {'relative power acc'}; -metafile_values.units = {'none'}; -metafile_values.freq_sampling_original = fs_imu_est; % Sampling rate in Hz -metafile_values.file_name = 'feature_acc_samples.bin'; - -meta_feat_acc{1} = metafile_time; -meta_feat_acc{2} = metafile_values; -mat_metadata_file_name = "feature_acc_meta.json"; -save_tsdf_data(meta_feat_acc, data_feat_acc, location, mat_metadata_file_name) -%% 7. Classification - - -threshold_acc = 0.13; % Final threshold -[~, ppg_post_prob] = predict(classifier, features_ppg_scaled); % Calculate posterior probability using LR model, python provides a similar function -ppg_post_prob_HQ = ppg_post_prob(:,1); -acc_label = feature_acc < threshold_acc; % logical (boolean) for not surpassing threshold_acc for imu feature. imu_label is one if we don't suspect the epoch to be disturbed by periodic movements! That is in line with 1 for HQ PPG - -%% 7a. Storage of classification in tsdf, each element is a separate binary file (all but the 4th one include one column) -data_class{1} = int32(t_unix_feat_total/unix_ticks_ms); % 32 bit integer and store it in unix seconds -data_class{2} = single(ppg_post_prob_HQ); % 32 bit float -data_class{3} = int8(acc_label); % 8 bit integer -data_class{4} = int32(v_sync_ppg_total); % 64 bit integer - 4 columns -data_class{5} = single(feature_acc); % 32 bit float - -location = "..\..\tests\data\4.predictions\ppg"; -metafile_pre_template = metadata_list_ppg{values_idx_ppg}; - -start_time_iso = datetime(t_unix_feat_total(1)/unix_ticks_ms, "ConvertFrom", "posixtime", 'Format', 'dd-MMM-yyyy HH:mm:ss z', 'TimeZone', 'UTC'); -end_time_iso = datetime(t_unix_feat_total(end)/unix_ticks_ms, "ConvertFrom", "posixtime", 'Format', 'dd-MMM-yyyy HH:mm:ss z', 'TimeZone', 'UTC'); % Convert the start and end time to ISO8601 format - -metafile_pre_template.start_iso8601 = string(start_time_iso); -metafile_pre_template.end_iso8601 = string(end_time_iso); -%metafile_pre_template.ppp_source_protobuf = "WatchData.IMU.Week104.raw"; -% Contains both IMU and PPG original raw files for classification --> what -% is the most neat thing to do - -metafile_time = metafile_pre_template; % time vector metadata list -metafile_values_ppg = metafile_pre_template; -metafile_values_imu = metafile_pre_template; -metafile_sync = metafile_pre_template; -metafile_values_imu_feat = metafile_pre_template; - -metafile_time.channels = {'time'}; -metafile_time.units = {'time_absolute_unix_ms'}; -metafile_time.file_name = 'classification_sqa_time.bin'; - -metafile_values_ppg.channels = {'post probability'}; -metafile_values_ppg.units = {'probability'}; -metafile_values_ppg.freq_sampling_original = fs_ppg_est; % Sampling rate in Hz -metafile_values_ppg.file_name = 'classification_sqa_ppg.bin'; - -metafile_values_imu.channels = {'accelerometer classification'}; -metafile_values_imu.units = {'boolean_num'}; -metafile_values_imu.freq_sampling_original = fs_imu_est; % Sampling rate in Hz -metafile_values_imu.file_name = 'classification_sqa_imu.bin'; - -metafile_sync.channels = {'ppg start index', 'ppg end index', 'ppg segment index', 'number of windows'}; % Define the channels -metafile_sync.units = {'index', 'index', 'index', 'none'}; -metafile_sync.file_name = 'classification_sqa_sync.bin'; - -metafile_values_imu_feat.channels = {'Relative power'}; -metafile_values_imu_feat.units = {'none'}; -metafile_values_imu_feat.file_name = 'classification_sqa_feat_imu.bin'; -metafile_values_imu_feat.bin_width = 2*f_bin_res; % Save the bin width of the relative power ratio feature - -meta_class{1} = metafile_time; -meta_class{2} = metafile_values_ppg; -meta_class{3} = metafile_values_imu; -meta_class{4} = metafile_sync; -meta_class{5} = metafile_values_imu_feat; - -mat_metadata_file_name = "classification_sqa_meta.json"; -save_tsdf_data(meta_class, data_class, location, mat_metadata_file_name) - -%% 8. Incorporate HR estimation \ No newline at end of file diff --git a/docs/matlab_scripts/ppg/1-4_HR_estimation.m b/docs/matlab_scripts/ppg/1-4_HR_estimation.m deleted file mode 100644 index 8d396c70..00000000 --- a/docs/matlab_scripts/ppg/1-4_HR_estimation.m +++ /dev/null @@ -1,223 +0,0 @@ -%% Main script to perform heart rate estimation of wearable PPG -% This script uses both PPG and accelerometer and performs the following -% steps: -% 1. Loading all metadata of PPG and IMU -% 2. Query on data availability + synchronization -% 3. Loading relevant segment sensor data using tsdf wrapper (start for loop over synchronized segment indices) -% 4. Synchronize the data (correct indices etc) -% 5. Data preprocessing -% 6. Perform pseude-smoothed wigner-ville distribution (PSWVD) on PPG -% 7. Saving the HR estimates in tsdf format - -%% Architecture overview -% The script implements the following steps: -% 1. PPG preprocessing -% 4. HR estimation - -%% Initalization -% Setting data paths + extracting metafilenames already -clearvars; close all; clc -addpath(genpath('..\..\..\paradigma-toolbox')) % Add git repository to the path -addpath(genpath("..\..\..\tsdf4matlab")) % Add wrapper to the path -warning('off','all') % Turn off warnings to improve speed in spwvd especially - -% Setting the data paths -unix_ticks_ms = 1000.0; -fs_ppg = 30; % Establish the sampling rate desired for resampling PPG --> now chosen to be fixed on 30 Hz - -raw_data_root = '..\..\..\tests\data\1.prepared_data\'; -ppp_data_path_ppg = [raw_data_root 'PPG\']; -meta_ppg = tsdf_scan_meta(ppp_data_path_ppg); % tsdf_scan_meta returns metafile struct containing information of all metafiles from all patients in tsdf_dirlist -n_files_ppg = length(meta_ppg); - -sqa_data_path = '..\..\..\tests\data\4.predictions\ppg'; % Set the path to the SQA data -sqa_output_list = dir(fullfile(sqa_data_path, '*_meta.json')); % seperate for the SQA output files - -meta_path_sqa = fullfile(sqa_output_list.folder, sqa_output_list.name); % Get the name of the SQA output file -[metadata_list_sqa, data_list_sqa] = load_tsdf_metadata_from_path(meta_path_sqa); % Load the metadata of the SQA output file - -sync_idx = tsdf_values_idx(metadata_list_sqa, 'sync'); % Get the index of the sync field in the SQA output file -data_sync = data_list_sqa{sync_idx}; % Get the sync data of the SQA output file -data_sync_zeros = all(data_sync == 0, 2); % Find rows containing only zeros --> in updated code this should not be possible anymore -data_sync(data_sync_zeros, :) = []; % Remove rows containing only zeros - -n_segments_sync = size(data_sync,1); % Get the number of segments in the SQA output file - -% Load the classification data -ppg_prob_idx = tsdf_values_idx(metadata_list_sqa, 'ppg'); % Get the index of the ppg field in the SQA output file -ppg_post_prob = data_list_sqa{ppg_prob_idx}; % Get the PPG probability data of the SQA output file - -imu_idx = tsdf_values_idx(metadata_list_sqa, 'sqa_imu'); % Get the index of the imu field in the SQA output file -imu_label = data_list_sqa{imu_idx}; % Get the IMU label data of the SQA output file - -% Calculate start_end indices of the classification corresponding to the -% correct segment --> needed since only number of segments is stored - -% Initialize the start_end_indices array of the classification epochs -for i = 1:length(data_sync(:,4)) - if i == 1 - start_end_indices(i, 1) = 1; - else - start_end_indices(i, 1) = start_end_indices(i-1, 2) + 1; - end - start_end_indices(i, 2) = sum(data_sync(1:i,4)); -end - - -%% Setting some parameters for HR analysis -min_window_length = 10; -min_hr_samples = min_window_length*fs_ppg; -threshold_sqa = 0.5; -fs_ppg_est = []; % Initialize the estimated sampling rate of the PPG - -hr_est_length = 2; %Estimation of HR is per 2 s (implemented in the PPG_TFD_HR function) -hr_est_samples = hr_est_length*fs_ppg; % number of samples - -% Time-frequency distribution parameters -tfd_length = 10; % Length of the epoch to calculate the time-frequency distribution in seconds -kern_type = 'sep'; % sep is the spwvd from the J. O'Toole box;) -win_type_doppler = 'hamm'; win_type_lag = 'hamm'; -win_length_doppler = 1; win_length_lag = 8; -doppler_samples = fs_ppg * win_length_doppler; lag_samples = win_length_lag * fs_ppg; -kern_params = { {doppler_samples, win_type_doppler}, {lag_samples ,win_type_lag} }; - -% Initialze a moving average filter struct -MA = struct; -MA.value = 0; % set MA to 1 if you want a moving average filter over the tfd from WVD and SPWVD to overcome unwanted fundamental frequency switching. -MA.window = 30; % Window size for the filter (order = 30-1) --> is not really necessary to have in the struct but for simplicity it is -MA.FC = 1/MA.window*ones(MA.window,1); % Set the filter coefficients for the MA filter - -v_hr_ppg = []; -t_hr_unix = []; -%% Loop over all synchronized segments -for n = 1:n_segments_sync - ppg_indices = data_sync(n,1:2); % Get the indices of the PPG segment - ppg_segment = data_sync(n,3); % Get the segment number of the PPG segment - - class_start = start_end_indices(n,1); - class_end = start_end_indices(n,2); - - meta_path_ppg = meta_ppg(ppg_segment).tsdf_meta_fullpath; - - [metadata_list_ppg, data_list_ppg] = load_tsdf_metadata_from_path(meta_path_ppg); - - time_idx_ppg = tsdf_values_idx(metadata_list_ppg, 'time'); - values_idx_ppg = tsdf_values_idx(metadata_list_ppg, 'values'); - - - t_iso_ppg = metadata_list_ppg{time_idx_ppg}.start_iso8601; - datetime_ppg = datetime(t_iso_ppg, 'InputFormat', 'yyyy-MM-dd''T''HH:mm:ssZ', 'TimeZone', 'UTC'); - ts_ppg = posixtime(datetime_ppg) * unix_ticks_ms; - - t_ppg = cumsum(double(data_list_ppg{time_idx_ppg})) + ts_ppg; - - tr_ppg = (t_ppg - ts_ppg) / unix_ticks_ms; - - v_ppg = data_list_ppg{values_idx_ppg}; - - clear t_ppg data_list_ppg - - v_ppg = v_ppg(ppg_indices(1):ppg_indices(2)); - - tr_ppg = tr_ppg(ppg_indices(1):ppg_indices(2)); - - ts_sync = ts_ppg + tr_ppg(1) * unix_ticks_ms; - tr_ppg = tr_ppg - tr_ppg(1); - - fs_ppg_est = 1/median(diff(tr_ppg)); - - if length(v_ppg) < fs_ppg * min_window_length % Check if the sample is of sufficient length - warning('Sample is of insufficient length!') - continue - else - [v_ppg_pre, tr_ppg_pre] = preprocessing_ppg(tr_ppg, v_ppg, fs_ppg); - end - clear v_ppg tr_ppg % Clear the redundant variables to free up memory - - % Select the correct classification data - class_ppg_segment = ppg_post_prob(class_start:class_end); - class_acc_segment = imu_label(class_start:class_end); - - % Assign the window-level probabilities to the individual samples - %data_prob_sample = sample_prob_final(class_ppg_segment, fs_ppg, class_acc_segment); - data_prob_sample = sample_prob_final(class_ppg_segment, fs_ppg); - - - sqa_label = []; - - for i = 1:length(data_prob_sample) - if data_prob_sample(i) > threshold_sqa - sqa_label(i,1) = 1; % Assign label 1 --> high-quality - else - sqa_label(i,1) = 0; % Assign low quality - end - end - - [v_start_idx, v_end_idx] = extract_hr_segments(sqa_label, min_hr_samples); - - for i = 1:length(v_start_idx) - - % The things below can be written to a function if desired?? - rel_ppg = v_ppg_pre(v_start_idx(i):v_end_idx(i)); - rel_time = tr_ppg_pre(v_start_idx(i):v_end_idx(i)); - - % Check whether the epoch can be extended by 2 s on both - % sides --> not possible if it is the end of the epoch or - % the start - if v_start_idx(i)<2*fs_ppg || v_end_idx(i)>length(v_ppg_pre)-2*fs_ppg - continue % for now skip these epoch since these are probably an artifact (see example) but this could be relevant to check later on! - end - - rel_ppg_spwvd = v_ppg_pre(v_start_idx(i)-fs_ppg*2:v_end_idx(i)+fs_ppg*2); %extract epoch with two extra seconds at start and end to overcome boundary effects of the WVD/SPWVD function, necessary for the for loop --> also implemented for cwt to make it more or less the same! - hr_est = PPG_TFD_HR(rel_ppg_spwvd, tfd_length, MA, fs_ppg, kern_type, kern_params); %wvd distribution does not require additional parameters for windowing - - %%-----Corresponding HR estimation time array-----&& - if mod(length(rel_ppg),60)~=0 %if segment length is uneven --> substract fs - hr_time = rel_time(1:hr_est_samples:length(rel_ppg)-fs_ppg); - else - hr_time = rel_time(1:hr_est_samples:length(rel_ppg)); - end - %%-------Save output-------%% - t_epoch_unix = hr_time'*unix_ticks_ms + ts_sync; - v_hr_ppg = [v_hr_ppg; hr_est]; - t_hr_unix = [t_hr_unix; t_epoch_unix]; - - end -end - -% Save the hr output in tsdf format -data_hr_est{1} = int32(t_hr_unix/unix_ticks_ms); % 32 bit integer and store it in unix seconds -data_hr_est{2} = single(v_hr_ppg); % 32 bit float - -location = "..\..\tests\data\5.quantification\ppg"; % Location to save the data -mkdir(location) -metafile_pre_template = metadata_list_sqa{time_idx_ppg}; % Copy the metadata template from the sqa time data --> most clean - -if isempty (t_hr_unix) - start_time_iso = datetime(0, "ConvertFrom", "posixtime", 'Format', 'dd-MMM-yyyy HH:mm:ss z', 'TimeZone', 'UTC'); - end_time_iso = datetime(0, "ConvertFrom", "posixtime", 'Format', 'dd-MMM-yyyy HH:mm:ss z', 'TimeZone', 'UTC'); -else - start_time_iso = datetime(t_hr_unix(1)/unix_ticks_ms, "ConvertFrom", "posixtime", 'Format', 'dd-MMM-yyyy HH:mm:ss z', 'TimeZone', 'UTC'); - end_time_iso = datetime(t_hr_unix(end)/unix_ticks_ms, "ConvertFrom", "posixtime", 'Format', 'dd-MMM-yyyy HH:mm:ss z', 'TimeZone', 'UTC'); % Convert the start and end time to ISO8601 format -end -metafile_pre_template.start_iso8601 = string(start_time_iso); -metafile_pre_template.end_iso8601 = string(end_time_iso); - -metafile_time = metafile_pre_template; % time vector metadata list -metafile_values_hr = metafile_pre_template; - -metafile_time.channels = {'time'}; -metafile_time.units = {'time_absolute_unix_s'}; -metafile_time.file_name = 'hr_est_time.bin'; - -metafile_values_hr.channels = {'HR estimates'}; -metafile_values_hr.units = {'min^-1'}; -metafile_values_hr.freq_sampling_original = round(fs_ppg_est, 2); % Sampling rate in Hz of the raw data -metafile_values_hr.file_name = 'hr_est_values.bin'; - - -meta_class{1} = metafile_time; -meta_class{2} = metafile_values_hr; - -mat_metadata_file_name = "hr_est_meta.json"; -% save_tsdf_data(meta_class, data_hr_est, location, mat_metadata_file_name); \ No newline at end of file diff --git a/docs/matlab_scripts/ppg/2-3_signal_quality_dbpd_update.m b/docs/matlab_scripts/ppg/2-3_signal_quality_dbpd_update.m deleted file mode 100644 index 18c105e8..00000000 --- a/docs/matlab_scripts/ppg/2-3_signal_quality_dbpd_update.m +++ /dev/null @@ -1,253 +0,0 @@ -%% Main script to perform feature extraction for the signal quality assessment -% This script uses both PPG and accelerometer and performs the following -% steps: -% 1. Loading the preprocessed PPG and accelerometer data from the -% implementation of the paradigma toolbox -% 2. Feature extraction -% 3. Storing the features - - -% Architecture overview -% The script implements the following steps: -% 2. IMU and PPG feature extraction -% 3. Signal quality assessment - - -%% Initalization -% Setting data paths + extracting metafilenames already -clearvars; close all; clc -addpath(genpath('..\..\..\..\paradigma-toolbox')) % Add git repository to the path -addpath(genpath("..\..\..\..\tsdf4matlab")) % Add wrapper to the path - -unix_ticks_ms = 1000.0; -fs_ppg = 30; % Establish the sampling rate desired for resampling PPG --> now chosen to be fixed on 30 Hz -fs_imu = 100; % Establish the sampling rate desired for resampling IMU --> now chosen to be fixed on 30 Hz - -raw_data_root = '..\..\..\tests\data\2.preprocessed_data\PPG\'; -ppp_data_path_ppg = [raw_data_root 'PPG_new\']; -ppp_data_path_imu = [raw_data_root 'IMU_new\']; - -%% 1. Loading all metadata of PPG and IMU -meta_ppg = tsdf_scan_meta(ppp_data_path_ppg); % tsdf_scan_meta returns metafile struct containing information of all metafiles from all patients in tsdf_dirlist -meta_imu = tsdf_scan_meta(ppp_data_path_imu); - -%% 2. Loading the preprocessed PPG and accelerometer data -meta_path_ppg = meta_ppg.tsdf_meta_fullpath; -meta_path_imu = meta_imu.tsdf_meta_fullpath; -[metadata_list_ppg, data_list_ppg] = load_tsdf_metadata_from_path(meta_path_ppg); -[metadata_list_imu, data_list_imu] = load_tsdf_metadata_from_path(meta_path_imu); - -time_idx_ppg = tsdf_values_idx(metadata_list_ppg, 'time'); -tr_ppg_pre = data_list_ppg{time_idx_ppg}; -values_idx_ppg = tsdf_values_idx(metadata_list_ppg, 'samples'); -v_ppg_pre = data_list_ppg{values_idx_ppg}; - -time_idx_imu = tsdf_values_idx(metadata_list_imu, 'time'); -tr_imu_pre = data_list_imu{time_idx_ppg}; -values_idx_imu = tsdf_values_idx(metadata_list_imu, 'samples'); -v_imu_pre = data_list_imu{values_idx_imu}; - -%% 3. Feature extraction -% Create loop for 6s epochs with 5s overlap -epoch_length = 6; % in seconds -overlap = 5; % in seconds - -% Number of samples in epoch -samples_per_epoch_ppg = epoch_length * fs_ppg; -samples_per_epoch_acc = epoch_length * fs_imu; - -% Calculate number of samples to shift for each epoch -samples_shift_ppg = (epoch_length - overlap) * fs_ppg; -samples_shift_acc = (epoch_length - overlap) * fs_imu; % Hoe krijg ik mijn segmenten precies gelijk zodat het niet toevallig een error geeft dat 1 langer is dan de ander - -pwelchwin_acc = 3*fs_imu; % window length for pwelch -pwelchwin_ppg = 3*fs_ppg; % window length for pwelch -noverlap_acc = 0.5*pwelchwin_acc; % overlap for pwelch -noverlap_ppg = 0.5*pwelchwin_ppg; % overlap for pwelch - -f_bin_res = 0.05; % the treshold is set based on this binning --> so range of 0.1 Hz for calculating the PSD feature -nfft_ppg = 0:f_bin_res:fs_ppg/2; % frequency bins for pwelch ppg -nfft_acc = 0:f_bin_res:fs_imu/2; % frequency bins for pwelch imu - -features_ppg_scaled = []; -feature_acc = []; -t_unix_feat_total = []; -count = 0; -acc_idx = 1; - -% Load classifier with corresponding mu and sigma to z-score the features -load("LR_model.mat") -mu = LR_model.mu; -sigma = LR_model.sigma; -classifier = LR_model.classifier; % this classifier is only used later at the stage 7 - -% DESCRIBE THE LOOPING OVER 6s SEGMENTS FOR BOTH PPG AND IMU AND CALCULATE FEATURES -for i = 1:samples_shift_ppg:(length(v_ppg_pre) - samples_per_epoch_ppg + 1) - - if acc_idx + samples_per_epoch_acc - 1 > length(v_acc_pre) % For the last epoch, check if the segment for IMU is too short (not 6 seconds), add a check for the last epoch first (if i == last then...) - break - else - acc_segment = v_acc_pre(acc_idx:(acc_idx+samples_per_epoch_acc-1),:); % Extract the IMU window (6seconds) - end - ppg_segment = v_ppg_pre(i:(i + samples_per_epoch_ppg - 1)); % Extract the PPG window (6seconds) - - count = count + 1; - - %%--------Feature extraction + scaling--------%% - % calculate features using ppg_features.m - features = ppg_features(ppg_segment, fs_ppg); % for now PPG_segment --> name can be adjusted! - - % Scaling using z-score - features_ppg_scaled(count,:) = normalize(features, 'center', mu, 'scale', sigma); - - % Calculating psd (power spectral density) of imu and ppg - % in the Gait pipeline this is done using the Fourier transformation - [pxx1,f1] = pwelch(acc_segment,hann(pwelchwin_acc), noverlap_acc, nfft_acc, fs_imu); - PSD_imu = sum(pxx1,2); % sum over the three axis - [pxx2,f2] = pwelch(ppg_segment,hann(pwelchwin_ppg), noverlap_ppg, nfft_ppg, fs_ppg); - PSD_ppg = sum(pxx2,1); % this does nothing, equal to PSD_ppg = pxx2 - - % IMU feature extraction - feature_acc(count,1) = acc_feature(f1, PSD_imu, f2, PSD_ppg); % Calculate the power ratio of the accelerometer signal in the PPG frequency range and store it as a row in the feature matrix (which has only 1 column) - - % time channel - t_unix_feat_total(count,1) = tr_ppg_pre(i)*unix_ticks_ms + t_ppg(1); % Save in absolute unix time ms - acc_idx = acc_idx + samples_shift_acc; % update IMU_idx -end -% at this point we have a matrix with features for PPG (10 column), IMU (1 columns), and a time vector - -% THis is stored for later (stage 4) -v_sync_ppg_total(1,1) = ppg_indices(1); % start index --> needed for HR pipeline -v_sync_ppg_total(1,2) = ppg_indices(2); % end index --> needed for HR pipeline -v_sync_ppg_total(1,3) = segment_ppg(1); % Segment index --> needed for HR pipeline --> in loop this is n -v_sync_ppg_total(1,4) = count; % Number of epochs in the segment --> needed for HR pipeline - - -%% 4a. Write TSDF PPG feature extraction output (ppg features) -location = "..\..\tests\data\3.extracted_features\ppg"; -data_feat_ppg{1} = t_unix_feat_total; -data_feat_ppg{2} = single(features_ppg_scaled); - -metafile_pre_template = metadata_list_ppg{values_idx_ppg}; - -start_time_iso = datetime(ts_sync/unix_ticks_ms, "ConvertFrom", "posixtime", 'Format', 'dd-MMM-yyyy HH:mm:ss z', 'TimeZone', 'UTC'); -end_time_iso = datetime((ts_sync+tr_acc_pre(end)*unix_ticks_ms)/unix_ticks_ms, "ConvertFrom", "posixtime", 'Format', 'dd-MMM-yyyy HH:mm:ss z', 'TimeZone', 'UTC'); - -metafile_pre_template.start_iso8601 = string(start_time_iso); -metafile_pre_template.end_iso8601 = string(end_time_iso); -metafile_pre_template.ppp_source_protobuf = "WatchData.PPG.Week104.raw"; - -metafile_time = metafile_pre_template; % time vector metadata list as a template and adjust it -metafile_values = metafile_pre_template; - -metafile_time.channels = {'time'}; -metafile_time.units = {'time_absolute_unix_ms'}; -metafile_time.freq_sampling_original = fs_ppg_est; -metafile_time.file_name = 'features_ppg_time.bin'; - -metafile_values.channels = {'variance', 'mean', 'median', 'kurtosis', 'skewness', 'dominant frequency', 'relative power', 'spectral entropy', 'SNR', 'correlation peak'}; -metafile_values.units = {'none', 'none', 'none', 'none', 'none', 'Hz', 'none', 'none', 'none', 'none'}; -metafile_values.freq_sampling_original = fs_ppg_est; -metafile_values.file_name = 'features_ppg_samples.bin'; - -meta_feat_ppg{1} = metafile_time; -meta_feat_ppg{2} = metafile_values; -mat_metadata_file_name = "features_ppg_meta.json"; -save_tsdf_data(meta_feat_ppg, data_feat_ppg, location, mat_metadata_file_name) - -%% 4b. Write TSDF PPG preprocessing output (accelerometer feature) -location = "..\..\tests\data\3.extracted_features\ppg"; -data_feat_acc{1} = t_unix_feat_total; -data_feat_acc{2} = single(feature_acc); -metafile_pre_template = metadata_list_ppg{values_idx_ppg}; - -start_time_iso = datetime(ts_sync/unix_ticks_ms, "ConvertFrom", "posixtime", 'Format', 'dd-MMM-yyyy HH:mm:ss z', 'TimeZone', 'UTC'); -end_time_iso = datetime((ts_sync+tr_acc_pre(end)*unix_ticks_ms)/unix_ticks_ms, "ConvertFrom", "posixtime", 'Format', 'dd-MMM-yyyy HH:mm:ss z', 'TimeZone', 'UTC'); - -metafile_pre_template.start_iso8601 = string(start_time_iso); -metafile_pre_template.end_iso8601 = string(end_time_iso); -metafile_pre_template.ppp_source_protobuf = "WatchData.IMU.Week104.raw"; - -metafile_time = metafile_pre_template; % time vector metadata list -metafile_values = metafile_pre_template; - -metafile_time.channels = {'time'}; -metafile_time.units = {'time_absolute_unix_ms'}; -metafile_time.freq_sampling_original = fs_imu_est; -metafile_time.file_name = 'feature_acc_time.bin'; - -metafile_values.channels = {'relative power acc'}; -metafile_values.units = {'none'}; -metafile_values.freq_sampling_original = fs_imu_est; % Sampling rate in Hz -metafile_values.file_name = 'feature_acc_samples.bin'; - -meta_feat_acc{1} = metafile_time; -meta_feat_acc{2} = metafile_values; -mat_metadata_file_name = "feature_acc_meta.json"; -save_tsdf_data(meta_feat_acc, data_feat_acc, location, mat_metadata_file_name) -%% 5. Classification - - -threshold_acc = 0.13; % Final threshold -[~, ppg_post_prob] = predict(classifier, features_ppg_scaled); % Calculate posterior probability using LR model, python provides a similar function -ppg_post_prob_HQ = ppg_post_prob(:,1); -acc_label = feature_acc < threshold_acc; % logical (boolean) for not surpassing threshold_acc for imu feature. imu_label is one if we don't suspect the epoch to be disturbed by periodic movements! That is in line with 1 for HQ PPG - -%% 7a. Storage of classification in tsdf, each element is a separate binary file (all but the 4th one include one column) -data_class{1} = int32(t_unix_feat_total/unix_ticks_ms); % 32 bit integer and store it in unix seconds -data_class{2} = single(ppg_post_prob_HQ); % 32 bit float -data_class{3} = int8(acc_label); % 8 bit integer -data_class{4} = int32(v_sync_ppg_total); % 64 bit integer - 4 columns -data_class{5} = single(feature_acc); % 32 bit float - -location = "..\..\tests\data\4.predictions\ppg"; -metafile_pre_template = metadata_list_ppg{values_idx_ppg}; - -start_time_iso = datetime(t_unix_feat_total(1)/unix_ticks_ms, "ConvertFrom", "posixtime", 'Format', 'dd-MMM-yyyy HH:mm:ss z', 'TimeZone', 'UTC'); -end_time_iso = datetime(t_unix_feat_total(end)/unix_ticks_ms, "ConvertFrom", "posixtime", 'Format', 'dd-MMM-yyyy HH:mm:ss z', 'TimeZone', 'UTC'); % Convert the start and end time to ISO8601 format - -metafile_pre_template.start_iso8601 = string(start_time_iso); -metafile_pre_template.end_iso8601 = string(end_time_iso); -%metafile_pre_template.ppp_source_protobuf = "WatchData.IMU.Week104.raw"; -% Contains both IMU and PPG original raw files for classification --> what -% is the most neat thing to do - -metafile_time = metafile_pre_template; % time vector metadata list -metafile_values_ppg = metafile_pre_template; -metafile_values_imu = metafile_pre_template; -metafile_sync = metafile_pre_template; -metafile_values_imu_feat = metafile_pre_template; - -metafile_time.channels = {'time'}; -metafile_time.units = {'time_absolute_unix_ms'}; -metafile_time.file_name = 'classification_sqa_time.bin'; - -metafile_values_ppg.channels = {'post probability'}; -metafile_values_ppg.units = {'probability'}; -metafile_values_ppg.freq_sampling_original = fs_ppg_est; % Sampling rate in Hz -metafile_values_ppg.file_name = 'classification_sqa_ppg.bin'; - -metafile_values_imu.channels = {'accelerometer classification'}; -metafile_values_imu.units = {'boolean_num'}; -metafile_values_imu.freq_sampling_original = fs_imu_est; % Sampling rate in Hz -metafile_values_imu.file_name = 'classification_sqa_imu.bin'; - -metafile_sync.channels = {'ppg start index', 'ppg end index', 'ppg segment index', 'number of windows'}; % Define the channels -metafile_sync.units = {'index', 'index', 'index', 'none'}; -metafile_sync.file_name = 'classification_sqa_sync.bin'; - -metafile_values_imu_feat.channels = {'Relative power'}; -metafile_values_imu_feat.units = {'none'}; -metafile_values_imu_feat.file_name = 'classification_sqa_feat_imu.bin'; -metafile_values_imu_feat.bin_width = 2*f_bin_res; % Save the bin width of the relative power ratio feature - -meta_class{1} = metafile_time; -meta_class{2} = metafile_values_ppg; -meta_class{3} = metafile_values_imu; -meta_class{4} = metafile_sync; -meta_class{5} = metafile_values_imu_feat; - -mat_metadata_file_name = "classification_sqa_meta.json"; -save_tsdf_data(meta_class, data_class, location, mat_metadata_file_name) - -%% 8. Incorporate HR estimation \ No newline at end of file diff --git a/docs/matlab_scripts/tremor/main_tremor_eScience.m b/docs/matlab_scripts/tremor/main_tremor_eScience.m deleted file mode 100644 index 83e2e5e6..00000000 --- a/docs/matlab_scripts/tremor/main_tremor_eScience.m +++ /dev/null @@ -1,254 +0,0 @@ -%% Code for writing TSDF output for the tremor pipeline on a test subject from PPP -% Diogo C. Soriano and Nienke Timmermans -% 20/02/2024 - -clear all; -close all; - -%% Test subject -ppp_pep_userid = '0A0B82C94960D6DCABC1F597EC0BA657F4B0EDC320702BCEE3B6955CE924DE05'; % test subject for eScience -week_id = 104; - -% Set here data location -% Nienke: -% location = "D:\ppp_data\TSDF output\Test"; % location for storing tsdf output -% Diogo: -location = 'Z:\Diogo\Snellius Pipeline\Vedran - CheckPoint\Rest-Tremor---PPP-library\Test'; - -%% Loading the data -addpath(genpath('tsdf4matlab')); % Add tsdf package -addpath(genpath('functions_eScience')); % Add all functions in the subfolder -addpath(genpath('Model')); % Add subfolder with the classifier structures -addpath(genpath('jsonlab')); % Add subfolder with functions to load json file - -% Uncomment for obtaining arm activity classifier based on MFCCs trained -% with PD@Home labels - -% addpath(genpath('Arm activity classifier')); % Add subfolder with the classifier structures -% load('ArmClass.mat'); % Load Arm Activity Classifier - -unix_ticks_ms = 1000.0; - -% Set your path here -% ppp_data_path = ['D:\ppp_data\New Conversion\WatchData.IMU.Week',num2str(week_id)]; % IMU data path -ppp_data_path = ['Z:\Diogo\PPP Sample Data\data\SampleData - eScienceTest\WatchData.IMU.Week',num2str(week_id)]; % IMU data path -meta_segments_list = dir(fullfile(ppp_data_path, ppp_pep_userid, ['WatchData.IMU.Week',num2str(week_id),'.raw_segment*_meta.json'])); % create segment list -meta_filenames = {meta_segments_list.name}; % get names -Nfiles = length(meta_filenames); % get number of files - -bad_quality_threshold_imu = 0.3; - -shift_treshold = 300; % Set shift threshold for determining a segment also as bad quality, threshold is in seconds - -[imu_indices_bq, ~] = bad_quality(strcat(ppp_data_path,'\',ppp_pep_userid), Nfiles, bad_quality_threshold_imu, shift_treshold); - -meta_filenames(imu_indices_bq) = []; % remove bad quality segments from further analysis by removing them in the metafile list which is needed for further analyses - -if ~isempty(meta_filenames) % check if there are good quality segments left - - Nfiles = length(meta_filenames); % get number of files - - t_imu = {}; - v_imu = {}; - scale_factors = []; - - for n = 1:Nfiles - meta_fullpath = fullfile(ppp_data_path, ppp_pep_userid, '/', meta_filenames{n}); - [metadata_list, data_list] = load_tsdf_metadata_from_path(meta_fullpath); - time_idx = tsdf_values_idx(metadata_list, 'time', week_id); - values_idx = tsdf_values_idx(metadata_list, 'samples', week_id); - - t_iso = metadata_list{time_idx}.start_iso8601; - date_time_obj= datetime(t_iso, 'InputFormat', 'dd-MMM-yyyy HH:mm:ss Z', 'TimeZone', 'UTC'); - t_diff_imu{n} = data_list{time_idx}; - ts_imu(n) = posixtime(date_time_obj) * unix_ticks_ms; % calculate the unix timestamp in ms - t_imu{n} = cumsum(double(data_list{time_idx})) + ts_imu(n); - tr_imu{n} = (t_imu{n}-ts_imu(n))/unix_ticks_ms; - fs_est(n) = 1/(mean(diff(tr_imu{n}))); % Check the sampling frequency for each file - inverse of the mean of sampling interval - - v_imu{n} = data_list{values_idx}; % store data values for every seperate tsdf file in cell - scale_factors(n,:) = metadata_list{values_idx}.scale_factors'; - clear data_list; - end - - %% Preprocessing and feature extraction - Fs_aprox = round(mean(fs_est)); % Approximate sampling frequency considering all files - fsvector = [50 100]; % reference sampling rate - [~,ind] = min(abs(Fs_aprox-fsvector)); % Check which sampling rate is closer to the approximate sampling rate obtained - Fs = fsvector(ind); % Stablish a sampling rate from the reference which is closest to the approximate sampling rate - - % Allocating memory - Derivative = []; % Mean absolute derivative values [x,y,z] - PowerAxis = []; % Power within the range [0.5 - 25] Hz - DomTremorPowerAxis = []; % Dominant Power in the tremor range for each axis - PSDTremorFeatures = []; - PSDHighTremorFeatures = []; - MelCepsCoeff = []; - FreqPeak = []; - WinDateTime = []; - PowerArmActv = []; - PowerHighFreq = []; - - TremorProb = []; - TremorHat = []; - RestTremorHat = []; - - v_imu_proc = {}; - t_imu_proc = {}; - - for n = 1:Nfiles - - y_curr_gyro = scale_factors(n,4:6).*double(v_imu{n}(:,4:6)); % Get the gyroscope signals scaled by the respective scaling factors - - % Interpolate the data - sampling frequency adjustment - [t_imu_proc{n}, v_imu_proc{n}] = InterpData(tr_imu{n},y_curr_gyro,Fs,unix_ticks_ms,ts_imu(n)); % pre-processing: interpolate data - - % Save pre-processed data in TSDF - procdata_tsdf{1} = int64(t_imu_proc{n}); - procdata_tsdf{2} = v_imu_proc{n}; - - metafile_template = metadata_list{1}; - - start_time_iso = datetime(t_imu_proc{n}(1)/unix_ticks_ms, "ConvertFrom", "posixtime", 'Format', 'dd-MMM-yyyy HH:mm:ss Z', 'TimeZone', 'UTC'); - end_time_iso = datetime(t_imu_proc{n}(end)/unix_ticks_ms+1, "ConvertFrom", "posixtime", 'Format', 'dd-MMM-yyyy HH:mm:ss Z', 'TimeZone', 'UTC'); - - metafile_template.start_iso8601 = datestr(start_time_iso); - metafile_template.end_iso8601 = datestr(end_time_iso); - metafile_template.freq_sampling_original = Fs_aprox; - metafile_template.freq_sampling_adjusted = Fs; - - metafile_proctime = metafile_template; - metafile_procgyro = metafile_template; - - metafile_proctime.channels = {'time'}; - metafile_proctime.units = {'time_absolute_unix_ms'}; - metafile_proctime.file_name = 'Tremor_preprocessed_time.bin'; - - metafile_procgyro.channels = {'rotation_x','rotation_y','rotation_z'}; - metafile_procgyro.units = {'deg/s','deg/s','deg/s'}; - metafile_procgyro.file_name = 'Tremor_preprocessed_gyro.bin'; - - procmeta_tsdf{1} = metafile_proctime; - procmeta_tsdf{2} = metafile_procgyro; - - mat_metadata_file_name = "Tremor_preprocessed_data.json"; - save_tsdf_data(procmeta_tsdf, procdata_tsdf, location, mat_metadata_file_name); - - %% Extracting the features - % General parameter setting for Configuration structure for feature - % extraction. Other "fixed" feature extraction parameters are set - % within TremorFeature function - - Conf.WindowSizeTime = 4; % Window size of 4 seconds - Conf.Fs = Fs; % Sampling frequency - TypeOfSignal = 'Gy'; % Gyroscope signals - - tic - Features_per_segment = TremorFeaturesAndClassification(Conf,v_imu_proc{n},t_imu_proc{n},TypeOfSignal); % Calculate features - elapsed = toc - % Concatenate features - if istable(Features_per_segment.PSDTremorFeatures) - - WinDateTime = vertcat(WinDateTime, Features_per_segment.WindowIniTime); - - Derivative = vertcat(Derivative, Features_per_segment.Derivatives); - PowerAxis = vertcat(PowerAxis,Features_per_segment.PowerAxis); - DomTremorPowerAxis = vertcat(DomTremorPowerAxis,Features_per_segment.DomTremorPowerAxis); - FreqPeak = vertcat(FreqPeak, Features_per_segment.FreqPeak); - PSDTremorFeatures = vertcat(PSDTremorFeatures, Features_per_segment.PSDTremorFeatures); - PSDHighTremorFeatures = vertcat(PSDHighTremorFeatures, Features_per_segment.PSDHighTremorFeatures); - PowerArmActv = vertcat(PowerArmActv,Features_per_segment.PowerArmActv); - PowerHighFreq = vertcat(PowerHighFreq,Features_per_segment.PowerHighFreq); - MelCepsCoeff = vertcat(MelCepsCoeff, Features_per_segment.MelCepsCoeff); - - % Get Tremor Classification Variables for tsdf writting - TremorProb = vertcat(TremorProb,Features_per_segment.TremorProb); - TremorHat = vertcat(TremorHat,Features_per_segment.TremorHat); - RestTremorHat = vertcat(RestTremorHat,Features_per_segment.RestTremorHat); - - end - end - - % Features that need to be saved for further analysis - - FeaturesTremor = [Derivative PowerAxis DomTremorPowerAxis FreqPeak ... - PSDTremorFeatures PSDHighTremorFeatures PowerArmActv PowerHighFreq MelCepsCoeff]; - - %% Write TSDF output - - % Save data - data_tsdf{1} = int64(WinDateTime); - data_tsdf{2} = TremorProb; - data_tsdf{3} = [int64(TremorHat) int64(RestTremorHat)]; - data_tsdf{4} = FeaturesTremor.Variables; - - % Save metadata - metafile_template = metadata_list{1}; - - start_time_iso = datetime(WinDateTime(1)/unix_ticks_ms, "ConvertFrom", "posixtime", 'Format', 'dd-MMM-yyyy HH:mm:ss Z', 'TimeZone', 'UTC'); - end_time_iso = datetime(WinDateTime(end)/unix_ticks_ms+1, "ConvertFrom", "posixtime", 'Format', 'dd-MMM-yyyy HH:mm:ss Z', 'TimeZone', 'UTC'); - - metafile_template.start_iso8601 = datestr(start_time_iso); - metafile_template.end_iso8601 = datestr(end_time_iso); - metafile_template.freq_sampling_original = Fs_aprox; - metafile_template.freq_sampling_adjusted = Fs; - - metafile_time = metafile_template; - metafile_prob = metafile_template; - metafile_label = metafile_template; - metafile_features = metafile_template; - metafile_imu_proc = metafile_template; - - metafile_time.channels = {'time'}; - metafile_time.units = {'time_absolute_unix_ms'}; - metafile_time.file_name = 'Tremor_time.bin'; - - metafile_prob.channels = {'tremor probability'}; - metafile_prob.units = {'probability'}; - metafile_prob.file_name = 'Tremor_prob.bin'; - - metafile_label.channels = {'tremor label', 'rest tremor label'}; - metafile_label.units = {'boolean','boolean'}; - metafile_label.file_name = 'Tremor_label.bin'; - - metafile_features.channels = FeaturesTremor.Properties.VariableNames'; - metafile_features.units = {'deg/s^2','deg/s^2','deg/s^2','(deg/s)^2','(deg/s)^2','(deg/s)^2','(deg/s)^2','(deg/s)^2','(deg/s)^2',... - 'Hz','(deg/s)^2','Hz','(deg/s)^2','(deg/s)^2','Hz','(deg/s)^2','','','','','','','','','','','','','(deg/s)^2','(deg/s)^2'}; - metafile_features.file_name = 'Tremor_features.bin'; - - % Test plot - TimeVector = datetime(WinDateTime,'ConvertFrom','epochtime',... - 'TicksPerSecond',1e3,'Format','dd-MMM-yyyy HH:mm:ss'); - - figure; - plot(TimeVector,RestTremorHat); - xlabel('Date Time'); - ylabel('Rest Tremor Label'); - title('Rest tremor time-course'); - set(gca,'fontsize',18,'fontweight','bold','linewidth',2); - - meta_tsdf{1} = metafile_time; - meta_tsdf{2} = metafile_prob; - meta_tsdf{3} = metafile_label; - meta_tsdf{4} = metafile_features; - - mat_metadata_file_name = "Tremor_features_meta.json"; - save_tsdf_data({meta_tsdf{1,[1,4]}}, {data_tsdf{1,[1,4]}}, location, mat_metadata_file_name); - - mat_metadata_file_name = "Tremor_predictions_meta.json"; - save_tsdf_data({meta_tsdf{1,[1,2,3]}}, {data_tsdf{1,[1,2,3]}}, location, mat_metadata_file_name); - - % Saving the matlab struct as a check - PPP.ID = ppp_pep_userid; - PPP.Week = week_id; - PPP.Features = FeaturesTremor; - PPP.WinDateTime = WinDateTime; - PPP.ArmActvPower = FeaturesTremor.GyArmActvPower; - PPP.TremorProb = TremorProb; - PPP.TremorHat = TremorHat; - PPP.RestTremorHat = RestTremorHat; - - % Set here your location - % save('Z:\Diogo\Snellius Pipeline\Vedran - CheckPoint\Rest-Tremor---PPP-library\Test\FeatureVector','PPP'); - -end diff --git a/src/paradigma/ppg/classifier/LR_PPG_quality.pkl b/src/paradigma/ppg/classifier/LR_PPG_quality.pkl deleted file mode 100644 index e62af52f34cc39145f0ac12a9f60dac36d45ae62..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 948 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 e%f0@V{Qb_+pbz-`_-}CL>E_Y1 - error('Input argument DELTA must be a scalar'); -end - -if delta <= 0 - error('Input argument DELTA must be positive'); -end - -mn = Inf; mx = -Inf; -mnpos = NaN; mxpos = NaN; - -lookformax = 1; - -for i=1:length(v) - this = v(i); - if this > mx, mx = this; mxpos = x(i); end - if this < mn, mn = this; mnpos = x(i); end - - if lookformax - if this < mx-delta - maxtab = [maxtab ; mxpos mx]; - mn = this; mnpos = x(i); - lookformax = 0; - end - else - if this > mn+delta - mintab = [mintab ; mnpos mn]; - mx = this; mxpos = x(i); - lookformax = 1; - end - end -end \ No newline at end of file diff --git a/src/paradigma/ppg/feat_extraction/ppg_features.m b/src/paradigma/ppg/feat_extraction/ppg_features.m deleted file mode 100644 index 39a8b9b1..00000000 --- a/src/paradigma/ppg/feat_extraction/ppg_features.m +++ /dev/null @@ -1,53 +0,0 @@ -function [FeaturesPPG] = ppg_features(PPG,fs) - % extract features from the PPG signal, per 6sec window (PPG input is a 6sec window of PPG signal) - N_feat = 10; - FeaturesPPG = zeros(1, N_feat); - % Time-domain features - absPPG = abs(PPG); - FeaturesPPG(1) = var(PPG); % Feature 1: variance - FeaturesPPG(2) = mean(absPPG); % Feature 2: mean - FeaturesPPG(3) = median(absPPG); % Feature 3: median - FeaturesPPG(4) = kurtosis(PPG); % Feature 4: kurtosis - FeaturesPPG(5) = skewness(PPG); % Feature 5: skewness - - window = 3*fs; % 90 samples for Welch's method => fr = 2/3 = 0.67 Hz --> not an issue with a clear distinct frequency - overlap = 0.5*window; % 45 samples overlap for Welch's Method - - [P, f] = pwelch(PPG, window, overlap, [], fs); - - % Find the dominant frequency - [~, maxIndex] = max(P); - FeaturesPPG(6) = f(maxIndex); % Feature 6: dominant frequency - - ph_idx = find(f >= 0.75 & f <= 3); % find indices of f in relevant physiological heart range 45-180 bpm - [~, maxIndex_ph] = max(P(ph_idx)); % Index of dominant frequency - dominantFrequency_ph = f(ph_idx(maxIndex_ph)); % Extract dominant frequency - f_dom_band = find(f >= dominantFrequency_ph - 0.2 & f <= dominantFrequency_ph + 0.2); % - FeaturesPPG(7) = trapz(P(f_dom_band))/trapz(P); % Feature 7 = relative power - - - % Normalize the power spectrum - pxx_norm = P / sum(P); - - % Compute spectral entropy - FeaturesPPG(8) = -sum(pxx_norm .* log2(pxx_norm))/log2(length(PPG)); % Feature 8 = spectral entropy --> normalize between 0 and 1! Or should we perform this operation at the min-max normalization! No because the values can come from different lengths! - - % Signal to noise ratio - Signal = var(PPG); - Noise = var(absPPG); - FeaturesPPG(9) = Signal/Noise; % Feature 9 = surrogate of signal to noise ratio - - %% Autocorrelation features - - [acf, ~] = autocorr(PPG, 'NumLags', fs*3); % Compute the autocorrelation of the PPG signal with a maximum lag of 3 seconds (or 3 time the sampling rate) - [peakValues, ~] = peakdet(acf, 0.01); - sortedValues = sort(peakValues(:,2), 'descend'); % sort the peaks found in the corellogram - if length(sortedValues) > 1 - FeaturesPPG(10) = sortedValues(2); % determine the second peak as the highest peak after the peak at lag=0, the idea is to determine the periodicity of the signal - else - FeaturesPPG(10) = 0; % Set at 0 if there is no clear second peak - end - - - - \ No newline at end of file diff --git a/src/paradigma/ppg/glob_functions/extract_hr_segments.m b/src/paradigma/ppg/glob_functions/extract_hr_segments.m deleted file mode 100644 index d4bdbbaa..00000000 --- a/src/paradigma/ppg/glob_functions/extract_hr_segments.m +++ /dev/null @@ -1,37 +0,0 @@ -function [start_idx, end_idx] = extract_hr_segments(label_arr, threshold) -% Function which calculates the switches between high and low quality. It -% calculates the length of the high quality parts and returns the correct -% data indices for every high quality part longer than a specific threshold! -% Input: -% - labelArray: Label array containin of 0 (low-quality) and 1 (high-quality) -% - threshold: minimal required length for HR analysis (f.e. 30s = 30*fs= -% 900 samples - - start_idx = []; - end_idx = []; - - label_arr = [0; label_arr; 0]; % padding to find switches if the label starts or ends with high quality label! - - % Find switches from 0 to 1 - zero_one_switch = find(diff(label_arr) == 1); - - % Find switches from 1 to 0 - one_zero_switch = find(diff(label_arr) == -1); - - % Ensure the lengths are the same - if length(zero_one_switch) ~= length(one_zero_switch) - error('Invalid label array'); - end - - % Calculate switch lengths for label 1 - switch_lengths = one_zero_switch - zero_one_switch; - - % Find switch lengths greater than the threshold - long_switches = find(switch_lengths >= threshold); - - % Assign start and end indices for long switches - for i = 1:length(long_switches) - start_idx(i) = zero_one_switch(long_switches(i)); - end_idx(i) = one_zero_switch(long_switches(i))-1; - end -end \ No newline at end of file diff --git a/src/paradigma/ppg/glob_functions/extract_overlapping_segments.m b/src/paradigma/ppg/glob_functions/extract_overlapping_segments.m deleted file mode 100644 index 6e9d9b02..00000000 --- a/src/paradigma/ppg/glob_functions/extract_overlapping_segments.m +++ /dev/null @@ -1,23 +0,0 @@ -function [ppg_indices, imu_indices] = extract_overlapping_segments(t_unix_ppg, t_unix_imu) - % K.I. Veldkamp, PhD student AI4P, 29-02-24 - % Function to extract indices indicating overlapping data between IMU and - % PPG segment - - % Convert UNIX milliseconds to seconds - ppg_time = t_unix_ppg / 1000; % Convert milliseconds to seconds - imu_time = t_unix_imu / 1000; % Convert milliseconds to seconds - - % Determine the overlapping time interval - start_time = max(ppg_time(1), imu_time(1)); - end_time = min(ppg_time(end), imu_time(end)); - - % Convert overlapping time interval to indices - ppg_start_index = find(ppg_time >= start_time, 1); - ppg_end_index = find(ppg_time <= end_time, 1, 'last'); - imu_start_index = find(imu_time >= start_time, 1); - imu_end_index = find(imu_time <= end_time, 1, 'last'); - - % Extract overlapping segments - ppg_indices = [ppg_start_index, ppg_end_index]; - imu_indices = [imu_start_index, imu_end_index]; - end \ No newline at end of file diff --git a/src/paradigma/ppg/glob_functions/jsonlab/AUTHORS.txt b/src/paradigma/ppg/glob_functions/jsonlab/AUTHORS.txt deleted file mode 100644 index 9dd3fc7b..00000000 --- a/src/paradigma/ppg/glob_functions/jsonlab/AUTHORS.txt +++ /dev/null @@ -1,41 +0,0 @@ -The author of "jsonlab" toolbox is Qianqian Fang. Qianqian -is currently an Assistant Professor at Massachusetts General Hospital, -Harvard Medical School. - -Address: Martinos Center for Biomedical Imaging, - Massachusetts General Hospital, - Harvard Medical School - Bldg 149, 13th St, Charlestown, MA 02129, USA -URL: http://nmr.mgh.harvard.edu/~fangq/ -Email: or - - -The script loadjson.m was built upon previous works by - -- Nedialko Krouchev: http://www.mathworks.com/matlabcentral/fileexchange/25713 - date: 2009/11/02 -- François Glineur: http://www.mathworks.com/matlabcentral/fileexchange/23393 - date: 2009/03/22 -- Joel Feenstra: http://www.mathworks.com/matlabcentral/fileexchange/20565 - date: 2008/07/03 - - -This toolbox contains patches submitted by the following contributors: - -- Blake Johnson - part of revision 341 - -- Niclas Borlin - various fixes in revision 394, including - - loadjson crashes for all-zero sparse matrix. - - loadjson crashes for empty sparse matrix. - - Non-zero size of 0-by-N and N-by-0 empty matrices is lost after savejson/loadjson. - - loadjson crashes for sparse real column vector. - - loadjson crashes for sparse complex column vector. - - Data is corrupted by savejson for sparse real row vector. - - savejson crashes for sparse complex row vector. - -- Yul Kang - patches for svn revision 415. - - savejson saves an empty cell array as [] instead of null - - loadjson differentiates an empty struct from an empty array diff --git a/src/paradigma/ppg/glob_functions/jsonlab/ChangeLog.txt b/src/paradigma/ppg/glob_functions/jsonlab/ChangeLog.txt deleted file mode 100644 index 07824f5c..00000000 --- a/src/paradigma/ppg/glob_functions/jsonlab/ChangeLog.txt +++ /dev/null @@ -1,74 +0,0 @@ -============================================================================ - - JSONlab - a toolbox to encode/decode JSON/UBJSON files in MATLAB/Octave - ----------------------------------------------------------------------------- - -JSONlab ChangeLog (key features marked by *): - -== JSONlab 1.0 (codename: Optimus - Final), FangQ == - - 2015/01/02 polish help info for all major functions, update examples, finalize 1.0 - 2014/12/19 fix a bug to strictly respect NoRowBracket in savejson - -== JSONlab 1.0.0-RC2 (codename: Optimus - RC2), FangQ == - - 2014/11/22 show progress bar in loadjson ('ShowProgress') - 2014/11/17 add Compact option in savejson to output compact JSON format ('Compact') - 2014/11/17 add FastArrayParser in loadjson to specify fast parser applicable levels - 2014/09/18 start official github mirror: https://github.com/fangq/jsonlab - -== JSONlab 1.0.0-RC1 (codename: Optimus - RC1), FangQ == - - 2014/09/17 fix several compatibility issues when running on octave versions 3.2-3.8 - 2014/09/17 support 2D cell and struct arrays in both savejson and saveubjson - 2014/08/04 escape special characters in a JSON string - 2014/02/16 fix a bug when saving ubjson files - -== JSONlab 0.9.9 (codename: Optimus - beta), FangQ == - - 2014/01/22 use binary read and write in saveubjson and loadubjson - -== JSONlab 0.9.8-1 (codename: Optimus - alpha update 1), FangQ == - - 2013/10/07 better round-trip conservation for empty arrays and structs (patch submitted by Yul Kang) - -== JSONlab 0.9.8 (codename: Optimus - alpha), FangQ == - 2013/08/23 *universal Binary JSON (UBJSON) support, including both saveubjson and loadubjson - -== JSONlab 0.9.1 (codename: Rodimus, update 1), FangQ == - 2012/12/18 *handling of various empty and sparse matrices (fixes submitted by Niclas Borlin) - -== JSONlab 0.9.0 (codename: Rodimus), FangQ == - - 2012/06/17 *new format for an invalid leading char, unpacking hex code in savejson - 2012/06/01 support JSONP in savejson - 2012/05/25 fix the empty cell bug (reported by Cyril Davin) - 2012/04/05 savejson can save to a file (suggested by Patrick Rapin) - -== JSONlab 0.8.1 (codename: Sentiel, Update 1), FangQ == - - 2012/02/28 loadjson quotation mark escape bug, see http://bit.ly/yyk1nS - 2012/01/25 patch to handle root-less objects, contributed by Blake Johnson - -== JSONlab 0.8.0 (codename: Sentiel), FangQ == - - 2012/01/13 *speed up loadjson by 20 fold when parsing large data arrays in matlab - 2012/01/11 remove row bracket if an array has 1 element, suggested by Mykel Kochenderfer - 2011/12/22 *accept sequence of 'param',value input in savejson and loadjson - 2011/11/18 fix struct array bug reported by Mykel Kochenderfer - -== JSONlab 0.5.1 (codename: Nexus Update 1), FangQ == - - 2011/10/21 fix a bug in loadjson, previous code does not use any of the acceleration - 2011/10/20 loadjson supports JSON collections - concatenated JSON objects - -== JSONlab 0.5.0 (codename: Nexus), FangQ == - - 2011/10/16 package and release jsonlab 0.5.0 - 2011/10/15 *add json demo and regression test, support cpx numbers, fix double quote bug - 2011/10/11 *speed up readjson dramatically, interpret _Array* tags, show data in root level - 2011/10/10 create jsonlab project, start jsonlab website, add online documentation - 2011/10/07 *speed up savejson by 25x using sprintf instead of mat2str, add options support - 2011/10/06 *savejson works for structs, cells and arrays - 2011/09/09 derive loadjson from JSON parser from MATLAB Central, draft savejson.m diff --git a/src/paradigma/ppg/glob_functions/jsonlab/LICENSE_BSD.txt b/src/paradigma/ppg/glob_functions/jsonlab/LICENSE_BSD.txt deleted file mode 100644 index 32d66cbc..00000000 --- a/src/paradigma/ppg/glob_functions/jsonlab/LICENSE_BSD.txt +++ /dev/null @@ -1,25 +0,0 @@ -Copyright 2011-2015 Qianqian Fang . All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, are -permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, this list of - conditions and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, this list - of conditions and the following disclaimer in the documentation and/or other materials - provided with the distribution. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ''AS IS'' AND ANY EXPRESS OR IMPLIED -WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS -OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF -ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -The views and conclusions contained in the software and documentation are those of the -authors and should not be interpreted as representing official policies, either expressed -or implied, of the copyright holders. diff --git a/src/paradigma/ppg/glob_functions/jsonlab/LICENSE_GPLv3.txt b/src/paradigma/ppg/glob_functions/jsonlab/LICENSE_GPLv3.txt deleted file mode 100644 index 210f625a..00000000 --- a/src/paradigma/ppg/glob_functions/jsonlab/LICENSE_GPLv3.txt +++ /dev/null @@ -1,699 +0,0 @@ -=============================================================================== -= JSONlab = -= An open-source MATLAB/Octave JSON encoder and decoder = -=============================================================================== - -Copyright (C) 2011-2015 Qianqian Fang - -------------------------------------------------------------------------------- - -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 3 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, see . - ------------------------------------------------------------------------- - - - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - 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 3 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, see . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. diff --git a/src/paradigma/ppg/glob_functions/jsonlab/README.txt b/src/paradigma/ppg/glob_functions/jsonlab/README.txt deleted file mode 100644 index 20688898..00000000 --- a/src/paradigma/ppg/glob_functions/jsonlab/README.txt +++ /dev/null @@ -1,394 +0,0 @@ -=============================================================================== -= JSONLab = -= An open-source MATLAB/Octave JSON encoder and decoder = -=============================================================================== - -*Copyright (C) 2011-2015 Qianqian Fang -*License: BSD or GNU General Public License version 3 (GPL v3), see License*.txt -*Version: 1.0 (Optimus - Final) - -------------------------------------------------------------------------------- - -Table of Content: - -I. Introduction -II. Installation -III.Using JSONLab -IV. Known Issues and TODOs -V. Contribution and feedback - -------------------------------------------------------------------------------- - -I. Introduction - -JSON ([http://www.json.org/ JavaScript Object Notation]) is a highly portable, -human-readable and "[http://en.wikipedia.org/wiki/JSON fat-free]" text format -to represent complex and hierarchical data. It is as powerful as -[http://en.wikipedia.org/wiki/XML XML], but less verbose. JSON format is widely -used for data-exchange in applications, and is essential for the wild success -of [http://en.wikipedia.org/wiki/Ajax_(programming) Ajax] and -[http://en.wikipedia.org/wiki/Web_2.0 Web2.0]. - -UBJSON (Universal Binary JSON) is a binary JSON format, specifically -optimized for compact file size and better performance while keeping -the semantics as simple as the text-based JSON format. Using the UBJSON -format allows to wrap complex binary data in a flexible and extensible -structure, making it possible to process complex and large dataset -without accuracy loss due to text conversions. - -We envision that both JSON and its binary version will serve as part of -the mainstream data-exchange formats for scientific research in the future. -It will provide the flexibility and generality achieved by other popular -general-purpose file specifications, such as -[http://www.hdfgroup.org/HDF5/whatishdf5.html HDF5], with significantly -reduced complexity and enhanced performance. - -JSONLab is a free and open-source implementation of a JSON/UBJSON encoder -and a decoder in the native MATLAB language. It can be used to convert a MATLAB -data structure (array, struct, cell, struct array and cell array) into -JSON/UBJSON formatted strings, or to decode a JSON/UBJSON file into MATLAB -data structure. JSONLab supports both MATLAB and -[http://www.gnu.org/software/octave/ GNU Octave] (a free MATLAB clone). - -------------------------------------------------------------------------------- - -II. Installation - -The installation of JSONLab is no different than any other simple -MATLAB toolbox. You only need to download/unzip the JSONLab package -to a folder, and add the folder's path to MATLAB/Octave's path list -by using the following command: - - addpath('/path/to/jsonlab'); - -If you want to add this path permanently, you need to type "pathtool", -browse to the jsonlab root folder and add to the list, then click "Save". -Then, run "rehash" in MATLAB, and type "which loadjson", if you see an -output, that means JSONLab is installed for MATLAB/Octave. - -------------------------------------------------------------------------------- - -III.Using JSONLab - -JSONLab provides two functions, loadjson.m -- a MATLAB->JSON decoder, -and savejson.m -- a MATLAB->JSON encoder, for the text-based JSON, and -two equivallent functions -- loadubjson and saveubjson for the binary -JSON. The detailed help info for the four functions can be found below: - -=== loadjson.m === -
-  data=loadjson(fname,opt)
-     or
-  data=loadjson(fname,'param1',value1,'param2',value2,...)
- 
-  parse a JSON (JavaScript Object Notation) file or string
- 
-  authors:Qianqian Fang (fangq nmr.mgh.harvard.edu)
-  created on 2011/09/09, including previous works from 
- 
-          Nedialko Krouchev: http://www.mathworks.com/matlabcentral/fileexchange/25713
-             created on 2009/11/02
-          François Glineur: http://www.mathworks.com/matlabcentral/fileexchange/23393
-             created on  2009/03/22
-          Joel Feenstra:
-          http://www.mathworks.com/matlabcentral/fileexchange/20565
-             created on 2008/07/03
- 
-  $Id: loadjson.m 452 2014-11-22 16:43:33Z fangq $
- 
-  input:
-       fname: input file name, if fname contains "{}" or "[]", fname
-              will be interpreted as a JSON string
-       opt: a struct to store parsing options, opt can be replaced by 
-            a list of ('param',value) pairs - the param string is equivallent
-            to a field in opt. opt can have the following 
-            fields (first in [.|.] is the default)
- 
-            opt.SimplifyCell [0|1]: if set to 1, loadjson will call cell2mat
-                          for each element of the JSON data, and group 
-                          arrays based on the cell2mat rules.
-            opt.FastArrayParser [1|0 or integer]: if set to 1, use a
-                          speed-optimized array parser when loading an 
-                          array object. The fast array parser may 
-                          collapse block arrays into a single large
-                          array similar to rules defined in cell2mat; 0 to 
-                          use a legacy parser; if set to a larger-than-1
-                          value, this option will specify the minimum
-                          dimension to enable the fast array parser. For
-                          example, if the input is a 3D array, setting
-                          FastArrayParser to 1 will return a 3D array;
-                          setting to 2 will return a cell array of 2D
-                          arrays; setting to 3 will return to a 2D cell
-                          array of 1D vectors; setting to 4 will return a
-                          3D cell array.
-            opt.ShowProgress [0|1]: if set to 1, loadjson displays a progress bar.
- 
-  output:
-       dat: a cell array, where {...} blocks are converted into cell arrays,
-            and [...] are converted to arrays
- 
-  examples:
-       dat=loadjson('{"obj":{"string":"value","array":[1,2,3]}}')
-       dat=loadjson(['examples' filesep 'example1.json'])
-       dat=loadjson(['examples' filesep 'example1.json'],'SimplifyCell',1)
-
- -=== savejson.m === - -
-  json=savejson(rootname,obj,filename)
-     or
-  json=savejson(rootname,obj,opt)
-  json=savejson(rootname,obj,'param1',value1,'param2',value2,...)
- 
-  convert a MATLAB object (cell, struct or array) into a JSON (JavaScript
-  Object Notation) string
- 
-  author: Qianqian Fang (fangq nmr.mgh.harvard.edu)
-  created on 2011/09/09
- 
-  $Id: savejson.m 458 2014-12-19 22:17:17Z fangq $
- 
-  input:
-       rootname: the name of the root-object, when set to '', the root name
-         is ignored, however, when opt.ForceRootName is set to 1 (see below),
-         the MATLAB variable name will be used as the root name.
-       obj: a MATLAB object (array, cell, cell array, struct, struct array).
-       filename: a string for the file name to save the output JSON data.
-       opt: a struct for additional options, ignore to use default values.
-         opt can have the following fields (first in [.|.] is the default)
- 
-         opt.FileName [''|string]: a file name to save the output JSON data
-         opt.FloatFormat ['%.10g'|string]: format to show each numeric element
-                          of a 1D/2D array;
-         opt.ArrayIndent [1|0]: if 1, output explicit data array with
-                          precedent indentation; if 0, no indentation
-         opt.ArrayToStruct[0|1]: when set to 0, savejson outputs 1D/2D
-                          array in JSON array format; if sets to 1, an
-                          array will be shown as a struct with fields
-                          "_ArrayType_", "_ArraySize_" and "_ArrayData_"; for
-                          sparse arrays, the non-zero elements will be
-                          saved to _ArrayData_ field in triplet-format i.e.
-                          (ix,iy,val) and "_ArrayIsSparse_" will be added
-                          with a value of 1; for a complex array, the 
-                          _ArrayData_ array will include two columns 
-                          (4 for sparse) to record the real and imaginary 
-                          parts, and also "_ArrayIsComplex_":1 is added. 
-         opt.ParseLogical [0|1]: if this is set to 1, logical array elem
-                          will use true/false rather than 1/0.
-         opt.NoRowBracket [1|0]: if this is set to 1, arrays with a single
-                          numerical element will be shown without a square
-                          bracket, unless it is the root object; if 0, square
-                          brackets are forced for any numerical arrays.
-         opt.ForceRootName [0|1]: when set to 1 and rootname is empty, savejson
-                          will use the name of the passed obj variable as the 
-                          root object name; if obj is an expression and 
-                          does not have a name, 'root' will be used; if this 
-                          is set to 0 and rootname is empty, the root level 
-                          will be merged down to the lower level.
-         opt.Inf ['"$1_Inf_"'|string]: a customized regular expression pattern
-                          to represent +/-Inf. The matched pattern is '([-+]*)Inf'
-                          and $1 represents the sign. For those who want to use
-                          1e999 to represent Inf, they can set opt.Inf to '$11e999'
-         opt.NaN ['"_NaN_"'|string]: a customized regular expression pattern
-                          to represent NaN
-         opt.JSONP [''|string]: to generate a JSONP output (JSON with padding),
-                          for example, if opt.JSONP='foo', the JSON data is
-                          wrapped inside a function call as 'foo(...);'
-         opt.UnpackHex [1|0]: conver the 0x[hex code] output by loadjson 
-                          back to the string form
-         opt.SaveBinary [0|1]: 1 - save the JSON file in binary mode; 0 - text mode.
-         opt.Compact [0|1]: 1- out compact JSON format (remove all newlines and tabs)
- 
-         opt can be replaced by a list of ('param',value) pairs. The param 
-         string is equivallent to a field in opt and is case sensitive.
-  output:
-       json: a string in the JSON format (see http://json.org)
- 
-  examples:
-       jsonmesh=struct('MeshNode',[0 0 0;1 0 0;0 1 0;1 1 0;0 0 1;1 0 1;0 1 1;1 1 1],... 
-                'MeshTetra',[1 2 4 8;1 3 4 8;1 2 6 8;1 5 6 8;1 5 7 8;1 3 7 8],...
-                'MeshTri',[1 2 4;1 2 6;1 3 4;1 3 7;1 5 6;1 5 7;...
-                           2 8 4;2 8 6;3 8 4;3 8 7;5 8 6;5 8 7],...
-                'MeshCreator','FangQ','MeshTitle','T6 Cube',...
-                'SpecialData',[nan, inf, -inf]);
-       savejson('jmesh',jsonmesh)
-       savejson('',jsonmesh,'ArrayIndent',0,'FloatFormat','\t%.5g')
- 
- -=== loadubjson.m === - -
-  data=loadubjson(fname,opt)
-     or
-  data=loadubjson(fname,'param1',value1,'param2',value2,...)
- 
-  parse a JSON (JavaScript Object Notation) file or string
- 
-  authors:Qianqian Fang (fangq nmr.mgh.harvard.edu)
-  created on 2013/08/01
- 
-  $Id: loadubjson.m 436 2014-08-05 20:51:40Z fangq $
- 
-  input:
-       fname: input file name, if fname contains "{}" or "[]", fname
-              will be interpreted as a UBJSON string
-       opt: a struct to store parsing options, opt can be replaced by 
-            a list of ('param',value) pairs - the param string is equivallent
-            to a field in opt. opt can have the following 
-            fields (first in [.|.] is the default)
- 
-            opt.SimplifyCell [0|1]: if set to 1, loadubjson will call cell2mat
-                          for each element of the JSON data, and group 
-                          arrays based on the cell2mat rules.
-            opt.IntEndian [B|L]: specify the endianness of the integer fields
-                          in the UBJSON input data. B - Big-Endian format for 
-                          integers (as required in the UBJSON specification); 
-                          L - input integer fields are in Little-Endian order.
- 
-  output:
-       dat: a cell array, where {...} blocks are converted into cell arrays,
-            and [...] are converted to arrays
- 
-  examples:
-       obj=struct('string','value','array',[1 2 3]);
-       ubjdata=saveubjson('obj',obj);
-       dat=loadubjson(ubjdata)
-       dat=loadubjson(['examples' filesep 'example1.ubj'])
-       dat=loadubjson(['examples' filesep 'example1.ubj'],'SimplifyCell',1)
-
- -=== saveubjson.m === - -
-  json=saveubjson(rootname,obj,filename)
-     or
-  json=saveubjson(rootname,obj,opt)
-  json=saveubjson(rootname,obj,'param1',value1,'param2',value2,...)
- 
-  convert a MATLAB object (cell, struct or array) into a Universal 
-  Binary JSON (UBJSON) binary string
- 
-  author: Qianqian Fang (fangq nmr.mgh.harvard.edu)
-  created on 2013/08/17
- 
-  $Id: saveubjson.m 440 2014-09-17 19:59:45Z fangq $
- 
-  input:
-       rootname: the name of the root-object, when set to '', the root name
-         is ignored, however, when opt.ForceRootName is set to 1 (see below),
-         the MATLAB variable name will be used as the root name.
-       obj: a MATLAB object (array, cell, cell array, struct, struct array)
-       filename: a string for the file name to save the output UBJSON data
-       opt: a struct for additional options, ignore to use default values.
-         opt can have the following fields (first in [.|.] is the default)
- 
-         opt.FileName [''|string]: a file name to save the output JSON data
-         opt.ArrayToStruct[0|1]: when set to 0, saveubjson outputs 1D/2D
-                          array in JSON array format; if sets to 1, an
-                          array will be shown as a struct with fields
-                          "_ArrayType_", "_ArraySize_" and "_ArrayData_"; for
-                          sparse arrays, the non-zero elements will be
-                          saved to _ArrayData_ field in triplet-format i.e.
-                          (ix,iy,val) and "_ArrayIsSparse_" will be added
-                          with a value of 1; for a complex array, the 
-                          _ArrayData_ array will include two columns 
-                          (4 for sparse) to record the real and imaginary 
-                          parts, and also "_ArrayIsComplex_":1 is added. 
-         opt.ParseLogical [1|0]: if this is set to 1, logical array elem
-                          will use true/false rather than 1/0.
-         opt.NoRowBracket [1|0]: if this is set to 1, arrays with a single
-                          numerical element will be shown without a square
-                          bracket, unless it is the root object; if 0, square
-                          brackets are forced for any numerical arrays.
-         opt.ForceRootName [0|1]: when set to 1 and rootname is empty, saveubjson
-                          will use the name of the passed obj variable as the 
-                          root object name; if obj is an expression and 
-                          does not have a name, 'root' will be used; if this 
-                          is set to 0 and rootname is empty, the root level 
-                          will be merged down to the lower level.
-         opt.JSONP [''|string]: to generate a JSONP output (JSON with padding),
-                          for example, if opt.JSON='foo', the JSON data is
-                          wrapped inside a function call as 'foo(...);'
-         opt.UnpackHex [1|0]: conver the 0x[hex code] output by loadjson 
-                          back to the string form
- 
-         opt can be replaced by a list of ('param',value) pairs. The param 
-         string is equivallent to a field in opt and is case sensitive.
-  output:
-       json: a binary string in the UBJSON format (see http://ubjson.org)
- 
-  examples:
-       jsonmesh=struct('MeshNode',[0 0 0;1 0 0;0 1 0;1 1 0;0 0 1;1 0 1;0 1 1;1 1 1],... 
-                'MeshTetra',[1 2 4 8;1 3 4 8;1 2 6 8;1 5 6 8;1 5 7 8;1 3 7 8],...
-                'MeshTri',[1 2 4;1 2 6;1 3 4;1 3 7;1 5 6;1 5 7;...
-                           2 8 4;2 8 6;3 8 4;3 8 7;5 8 6;5 8 7],...
-                'MeshCreator','FangQ','MeshTitle','T6 Cube',...
-                'SpecialData',[nan, inf, -inf]);
-       saveubjson('jsonmesh',jsonmesh)
-       saveubjson('jsonmesh',jsonmesh,'meshdata.ubj')
-
- - -=== examples === - -Under the "examples" folder, you can find several scripts to demonstrate the -basic utilities of JSONLab. Running the "demo_jsonlab_basic.m" script, you -will see the conversions from MATLAB data structure to JSON text and backward. -In "jsonlab_selftest.m", we load complex JSON files downloaded from the Internet -and validate the loadjson/savejson functions for regression testing purposes. -Similarly, a "demo_ubjson_basic.m" script is provided to test the saveubjson -and loadubjson pairs for various matlab data structures. - -Please run these examples and understand how JSONLab works before you use -it to process your data. - -------------------------------------------------------------------------------- - -IV. Known Issues and TODOs - -JSONLab has several known limitations. We are striving to make it more general -and robust. Hopefully in a few future releases, the limitations become less. - -Here are the known issues: - -# 3D or higher dimensional cell/struct-arrays will be converted to 2D arrays; -# When processing names containing multi-byte characters, Octave and MATLAB \ -can give different field-names; you can use feature('DefaultCharacterSet','latin1') \ -in MATLAB to get consistant results -# savejson can not handle class and dataset. -# saveubjson converts a logical array into a uint8 ([U]) array -# an unofficial N-D array count syntax is implemented in saveubjson. We are \ -actively communicating with the UBJSON spec maintainer to investigate the \ -possibility of making it upstream -# loadubjson can not parse all UBJSON Specification (Draft 9) compliant \ -files, however, it can parse all UBJSON files produced by saveubjson. - -------------------------------------------------------------------------------- - -V. Contribution and feedback - -JSONLab is an open-source project. This means you can not only use it and modify -it as you wish, but also you can contribute your changes back to JSONLab so -that everyone else can enjoy the improvement. For anyone who want to contribute, -please download JSONLab source code from it's subversion repository by using the -following command: - - svn checkout svn://svn.code.sf.net/p/iso2mesh/code/trunk/jsonlab jsonlab - -You can make changes to the files as needed. Once you are satisfied with your -changes, and ready to share it with others, please cd the root directory of -JSONLab, and type - - svn diff > yourname_featurename.patch - -You then email the .patch file to JSONLab's maintainer, Qianqian Fang, at -the email address shown in the beginning of this file. Qianqian will review -the changes and commit it to the subversion if they are satisfactory. - -We appreciate any suggestions and feedbacks from you. Please use iso2mesh's -mailing list to report any questions you may have with JSONLab: - -http://groups.google.com/group/iso2mesh-users?hl=en&pli=1 - -(Subscription to the mailing list is needed in order to post messages). diff --git a/src/paradigma/ppg/glob_functions/jsonlab/examples/.svn/entries b/src/paradigma/ppg/glob_functions/jsonlab/examples/.svn/entries deleted file mode 100644 index e9863ff8..00000000 --- a/src/paradigma/ppg/glob_functions/jsonlab/examples/.svn/entries +++ /dev/null @@ -1,368 +0,0 @@ -10 - -dir -461 -svn://svn.code.sf.net/p/iso2mesh/code/trunk/jsonlab/examples -svn://svn.code.sf.net/p/iso2mesh/code - - - -2014-12-19T22:17:17.588936Z -458 -fangq - - - - - - - - - - - - - - -786e58fb-9377-0410-9ff7-e4ac0ac0635c - -example3.json -file - - - - -2015-01-03T04:20:29.256062Z -e6b003f8ee84d86aba88e14c01b07fc7 -2012-02-28T19:02:09.069024Z -358 -fangq - - - - - - - - - - - - - - - - - - - - - -256 - -example4.json -file - - - - -2015-01-03T04:20:29.260062Z -a4b38b1880e47cbb0769142ba91fc794 -2011-11-20T23:24:44.699088Z -328 -fangq - - - - - - - - - - - - - - - - - - - - - -500 - -demo_jsonlab_basic.m -file - - - - -2015-01-03T04:20:29.260062Z -5d259fcb8b5162c33794139a0c938e9b -2014-09-15T18:59:36.423526Z -437 -fangq - - - - - - - - - - - - - - - - - - - - - -6414 - -jsonlab_basictest.matlab -file - - - - -2015-01-03T04:20:29.260062Z -5d6e43bb6d4444a496e29f17ec57dd5e -2014-12-19T22:17:17.588936Z -458 -fangq - - - - - - - - - - - - - - - - - - - - - -9973 - -jsonlab_selftest.m -file - - - - -2015-01-03T04:20:29.260062Z -b3c2fb061defb8ccb6d30c4c08da26ce -2014-11-18T20:53:31.695652Z -450 -fangq - - - - - - - - - - - - - - - - - - - - - -995 - -demo_ubjson_basic.m -file - - - - -2015-01-03T04:20:29.252062Z -47b39a73fb8a3027f2d57964fb6a71ed -2014-09-17T04:09:49.677992Z -438 -fangq - - - - - - - - - - - - - - - - - - - - - -6517 - -jsonlab_selftest.matlab -file - - - - -2015-01-03T04:20:29.252062Z -141fc287d6f343f00f7b966dc0d6a28f -2014-11-23T17:37:18.671649Z -454 -fangq - - - - - - - - - - - - - - - - - - - - - -4131 - -jsonlab_speedtest.m -file - - - - -2015-01-03T04:20:29.256062Z -0d4adef6414ffa3958fa3df0503a28b7 -2011-10-24T22:58:20.295860Z -319 -fangq - - - - - - - - - - - - - - - - - - - - - -675 - -example1.json -file - - - - -2015-01-03T04:20:29.256062Z -5867f865b1708e5c9eb3a22211ffc914 -2011-10-11T22:30:21.329885Z -310 -fangq - - - - - - - - - - - - - - - - - - - - - -436 - -example2.json -file - - - - -2015-01-03T04:20:29.256062Z -ef38b0c11d9f8eed7e016fbf9d21de38 -2011-10-11T22:30:21.329885Z -310 -fangq - - - - - - - - - - - - - - - - - - - - - -583 - diff --git a/src/paradigma/ppg/glob_functions/jsonlab/examples/.svn/text-base/demo_jsonlab_basic.m.svn-base b/src/paradigma/ppg/glob_functions/jsonlab/examples/.svn/text-base/demo_jsonlab_basic.m.svn-base deleted file mode 100644 index 43d70665..00000000 --- a/src/paradigma/ppg/glob_functions/jsonlab/examples/.svn/text-base/demo_jsonlab_basic.m.svn-base +++ /dev/null @@ -1,180 +0,0 @@ -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% Demonstration of Basic Utilities of JSONlab -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -rngstate = rand ('state'); -randseed=hex2dec('623F9A9E'); -clear data2json json2data - -fprintf(1,'\n%%=================================================\n') -fprintf(1,'%% a simple scalar value \n') -fprintf(1,'%%=================================================\n\n') - -data2json=pi -savejson('',data2json) -json2data=loadjson(ans) - -fprintf(1,'\n%%=================================================\n') -fprintf(1,'%% a complex number\n') -fprintf(1,'%%=================================================\n\n') - -clear i; -data2json=1+2*i -savejson('',data2json) -json2data=loadjson(ans) - -fprintf(1,'\n%%=================================================\n') -fprintf(1,'%% a complex matrix\n') -fprintf(1,'%%=================================================\n\n') - -data2json=magic(6); -data2json=data2json(:,1:3)+data2json(:,4:6)*i -savejson('',data2json) -json2data=loadjson(ans) - -fprintf(1,'\n%%=================================================\n') -fprintf(1,'%% MATLAB special constants\n') -fprintf(1,'%%=================================================\n\n') - -data2json=[NaN Inf -Inf] -savejson('specials',data2json) -json2data=loadjson(ans) - -fprintf(1,'\n%%=================================================\n') -fprintf(1,'%% a real sparse matrix\n') -fprintf(1,'%%=================================================\n\n') - -data2json=sprand(10,10,0.1) -savejson('sparse',data2json) -json2data=loadjson(ans) - -fprintf(1,'\n%%=================================================\n') -fprintf(1,'%% a complex sparse matrix\n') -fprintf(1,'%%=================================================\n\n') - -data2json=data2json-data2json*i -savejson('complex_sparse',data2json) -json2data=loadjson(ans) - -fprintf(1,'\n%%=================================================\n') -fprintf(1,'%% an all-zero sparse matrix\n') -fprintf(1,'%%=================================================\n\n') - -data2json=sparse(2,3); -savejson('all_zero_sparse',data2json) -json2data=loadjson(ans) - -fprintf(1,'\n%%=================================================\n') -fprintf(1,'%% an empty sparse matrix\n') -fprintf(1,'%%=================================================\n\n') - -data2json=sparse([]); -savejson('empty_sparse',data2json) -json2data=loadjson(ans) - -fprintf(1,'\n%%=================================================\n') -fprintf(1,'%% an empty 0-by-0 real matrix\n') -fprintf(1,'%%=================================================\n\n') - -data2json=[]; -savejson('empty_0by0_real',data2json) -json2data=loadjson(ans) - -fprintf(1,'\n%%=================================================\n') -fprintf(1,'%% an empty 0-by-3 real matrix\n') -fprintf(1,'%%=================================================\n\n') - -data2json=zeros(0,3); -savejson('empty_0by3_real',data2json) -json2data=loadjson(ans) - -fprintf(1,'\n%%=================================================\n') -fprintf(1,'%% a sparse real column vector\n') -fprintf(1,'%%=================================================\n\n') - -data2json=sparse([0,3,0,1,4]'); -savejson('sparse_column_vector',data2json) -json2data=loadjson(ans) - -fprintf(1,'\n%%=================================================\n') -fprintf(1,'%% a sparse complex column vector\n') -fprintf(1,'%%=================================================\n\n') - -data2json=data2json-1i*data2json; -savejson('complex_sparse_column_vector',data2json) -json2data=loadjson(ans) - -fprintf(1,'\n%%=================================================\n') -fprintf(1,'%% a sparse real row vector\n') -fprintf(1,'%%=================================================\n\n') - -data2json=sparse([0,3,0,1,4]); -savejson('sparse_row_vector',data2json) -json2data=loadjson(ans) - -fprintf(1,'\n%%=================================================\n') -fprintf(1,'%% a sparse complex row vector\n') -fprintf(1,'%%=================================================\n\n') - -data2json=data2json-1i*data2json; -savejson('complex_sparse_row_vector',data2json) -json2data=loadjson(ans) - -fprintf(1,'\n%%=================================================\n') -fprintf(1,'%% a structure\n') -fprintf(1,'%%=================================================\n\n') - -data2json=struct('name','Think Different','year',1997,'magic',magic(3),... - 'misfits',[Inf,NaN],'embedded',struct('left',true,'right',false)) -savejson('astruct',data2json,struct('ParseLogical',1)) -json2data=loadjson(ans) - -fprintf(1,'\n%%=================================================\n') -fprintf(1,'%% a structure array\n') -fprintf(1,'%%=================================================\n\n') - -data2json=struct('name','Nexus Prime','rank',9); -data2json(2)=struct('name','Sentinel Prime','rank',9); -data2json(3)=struct('name','Optimus Prime','rank',9); -savejson('Supreme Commander',data2json) -json2data=loadjson(ans) - -fprintf(1,'\n%%=================================================\n') -fprintf(1,'%% a cell array\n') -fprintf(1,'%%=================================================\n\n') - -data2json=cell(3,1); -data2json{1}=struct('buzz',1.1,'rex',1.2,'bo',1.3,'hamm',2.0,'slink',2.1,'potato',2.2,... - 'woody',3.0,'sarge',3.1,'etch',4.0,'lenny',5.0,'squeeze',6.0,'wheezy',7.0); -data2json{2}=struct('Ubuntu',['Kubuntu';'Xubuntu';'Lubuntu']); -data2json{3}=[10.04,10.10,11.04,11.10] -savejson('debian',data2json,struct('FloatFormat','%.2f')) -json2data=loadjson(ans) - -fprintf(1,'\n%%=================================================\n') -fprintf(1,'%% invalid field-name handling\n') -fprintf(1,'%%=================================================\n\n') - -json2data=loadjson('{"ValidName":1, "_InvalidName":2, ":Field:":3, "项目":"ç»å¯†"}') - -fprintf(1,'\n%%=================================================\n') -fprintf(1,'%% a 2D cell array\n') -fprintf(1,'%%=================================================\n\n') - -data2json={{1,{2,3}},{4,5},{6};{7},{8,9},{10}}; -savejson('data2json',data2json) -json2data=loadjson(ans) % only savejson works for cell arrays, loadjson has issues - -fprintf(1,'\n%%=================================================\n') -fprintf(1,'%% a 2D struct array\n') -fprintf(1,'%%=================================================\n\n') - -data2json=repmat(struct('idx',0,'data','structs'),[2,3]) -for i=1:6 - data2json(i).idx=i; -end -savejson('data2json',data2json) -json2data=loadjson(ans) - -rand ('state',rngstate); - diff --git a/src/paradigma/ppg/glob_functions/jsonlab/examples/.svn/text-base/demo_ubjson_basic.m.svn-base b/src/paradigma/ppg/glob_functions/jsonlab/examples/.svn/text-base/demo_ubjson_basic.m.svn-base deleted file mode 100644 index 0c35433a..00000000 --- a/src/paradigma/ppg/glob_functions/jsonlab/examples/.svn/text-base/demo_ubjson_basic.m.svn-base +++ /dev/null @@ -1,180 +0,0 @@ -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% Demonstration of Basic Utilities of JSONlab -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -rngstate = rand ('state'); -randseed=hex2dec('623F9A9E'); -clear data2json json2data - -fprintf(1,'\n%%=================================================\n') -fprintf(1,'%% a simple scalar value \n') -fprintf(1,'%%=================================================\n\n') - -data2json=pi -saveubjson('',data2json) -json2data=loadubjson(ans) - -fprintf(1,'\n%%=================================================\n') -fprintf(1,'%% a complex number\n') -fprintf(1,'%%=================================================\n\n') - -clear i; -data2json=1+2*i -saveubjson('',data2json) -json2data=loadubjson(ans) - -fprintf(1,'\n%%=================================================\n') -fprintf(1,'%% a complex matrix\n') -fprintf(1,'%%=================================================\n\n') - -data2json=magic(6); -data2json=data2json(:,1:3)+data2json(:,4:6)*i -saveubjson('',data2json) -json2data=loadubjson(ans) - -fprintf(1,'\n%%=================================================\n') -fprintf(1,'%% MATLAB special constants\n') -fprintf(1,'%%=================================================\n\n') - -data2json=[NaN Inf -Inf] -saveubjson('specials',data2json) -json2data=loadubjson(ans) - -fprintf(1,'\n%%=================================================\n') -fprintf(1,'%% a real sparse matrix\n') -fprintf(1,'%%=================================================\n\n') - -data2json=sprand(10,10,0.1) -saveubjson('sparse',data2json) -json2data=loadubjson(ans) - -fprintf(1,'\n%%=================================================\n') -fprintf(1,'%% a complex sparse matrix\n') -fprintf(1,'%%=================================================\n\n') - -data2json=data2json-data2json*i -saveubjson('complex_sparse',data2json) -json2data=loadubjson(ans) - -fprintf(1,'\n%%=================================================\n') -fprintf(1,'%% an all-zero sparse matrix\n') -fprintf(1,'%%=================================================\n\n') - -data2json=sparse(2,3); -saveubjson('all_zero_sparse',data2json) -json2data=loadubjson(ans) - -fprintf(1,'\n%%=================================================\n') -fprintf(1,'%% an empty sparse matrix\n') -fprintf(1,'%%=================================================\n\n') - -data2json=sparse([]); -saveubjson('empty_sparse',data2json) -json2data=loadubjson(ans) - -fprintf(1,'\n%%=================================================\n') -fprintf(1,'%% an empty 0-by-0 real matrix\n') -fprintf(1,'%%=================================================\n\n') - -data2json=[]; -saveubjson('empty_0by0_real',data2json) -json2data=loadubjson(ans) - -fprintf(1,'\n%%=================================================\n') -fprintf(1,'%% an empty 0-by-3 real matrix\n') -fprintf(1,'%%=================================================\n\n') - -data2json=zeros(0,3); -saveubjson('empty_0by3_real',data2json) -json2data=loadubjson(ans) - -fprintf(1,'\n%%=================================================\n') -fprintf(1,'%% a sparse real column vector\n') -fprintf(1,'%%=================================================\n\n') - -data2json=sparse([0,3,0,1,4]'); -saveubjson('sparse_column_vector',data2json) -json2data=loadubjson(ans) - -fprintf(1,'\n%%=================================================\n') -fprintf(1,'%% a sparse complex column vector\n') -fprintf(1,'%%=================================================\n\n') - -data2json=data2json-1i*data2json; -saveubjson('complex_sparse_column_vector',data2json) -json2data=loadubjson(ans) - -fprintf(1,'\n%%=================================================\n') -fprintf(1,'%% a sparse real row vector\n') -fprintf(1,'%%=================================================\n\n') - -data2json=sparse([0,3,0,1,4]); -saveubjson('sparse_row_vector',data2json) -json2data=loadubjson(ans) - -fprintf(1,'\n%%=================================================\n') -fprintf(1,'%% a sparse complex row vector\n') -fprintf(1,'%%=================================================\n\n') - -data2json=data2json-1i*data2json; -saveubjson('complex_sparse_row_vector',data2json) -json2data=loadubjson(ans) - -fprintf(1,'\n%%=================================================\n') -fprintf(1,'%% a structure\n') -fprintf(1,'%%=================================================\n\n') - -data2json=struct('name','Think Different','year',1997,'magic',magic(3),... - 'misfits',[Inf,NaN],'embedded',struct('left',true,'right',false)) -saveubjson('astruct',data2json,struct('ParseLogical',1)) -json2data=loadubjson(ans) - -fprintf(1,'\n%%=================================================\n') -fprintf(1,'%% a structure array\n') -fprintf(1,'%%=================================================\n\n') - -data2json=struct('name','Nexus Prime','rank',9); -data2json(2)=struct('name','Sentinel Prime','rank',9); -data2json(3)=struct('name','Optimus Prime','rank',9); -saveubjson('Supreme Commander',data2json) -json2data=loadubjson(ans) - -fprintf(1,'\n%%=================================================\n') -fprintf(1,'%% a cell array\n') -fprintf(1,'%%=================================================\n\n') - -data2json=cell(3,1); -data2json{1}=struct('buzz',1.1,'rex',1.2,'bo',1.3,'hamm',2.0,'slink',2.1,'potato',2.2,... - 'woody',3.0,'sarge',3.1,'etch',4.0,'lenny',5.0,'squeeze',6.0,'wheezy',7.0); -data2json{2}=struct('Ubuntu',['Kubuntu';'Xubuntu';'Lubuntu']); -data2json{3}=[10.04,10.10,11.04,11.10] -saveubjson('debian',data2json,struct('FloatFormat','%.2f')) -json2data=loadubjson(ans) - -fprintf(1,'\n%%=================================================\n') -fprintf(1,'%% invalid field-name handling\n') -fprintf(1,'%%=================================================\n\n') - -json2data=loadubjson(saveubjson('',loadjson('{"ValidName":1, "_InvalidName":2, ":Field:":3, "项目":"ç»å¯†"}'))) - -fprintf(1,'\n%%=================================================\n') -fprintf(1,'%% a 2D cell array\n') -fprintf(1,'%%=================================================\n\n') - -data2json={{1,{2,3}},{4,5},{6};{7},{8,9},{10}}; -saveubjson('data2json',data2json) -json2data=loadubjson(ans) % only savejson works for cell arrays, loadjson has issues - -fprintf(1,'\n%%=================================================\n') -fprintf(1,'%% a 2D struct array\n') -fprintf(1,'%%=================================================\n\n') - -data2json=repmat(struct('idx',0,'data','structs'),[2,3]) -for i=1:6 - data2json(i).idx=i; -end -saveubjson('data2json',data2json) -json2data=loadubjson(ans) - -rand ('state',rngstate); - diff --git a/src/paradigma/ppg/glob_functions/jsonlab/examples/.svn/text-base/example1.json.svn-base b/src/paradigma/ppg/glob_functions/jsonlab/examples/.svn/text-base/example1.json.svn-base deleted file mode 100644 index be0993ef..00000000 --- a/src/paradigma/ppg/glob_functions/jsonlab/examples/.svn/text-base/example1.json.svn-base +++ /dev/null @@ -1,23 +0,0 @@ - { - "firstName": "John", - "lastName": "Smith", - "age": 25, - "address": - { - "streetAddress": "21 2nd Street", - "city": "New York", - "state": "NY", - "postalCode": "10021" - }, - "phoneNumber": - [ - { - "type": "home", - "number": "212 555-1234" - }, - { - "type": "fax", - "number": "646 555-4567" - } - ] - } diff --git a/src/paradigma/ppg/glob_functions/jsonlab/examples/.svn/text-base/example2.json.svn-base b/src/paradigma/ppg/glob_functions/jsonlab/examples/.svn/text-base/example2.json.svn-base deleted file mode 100644 index eacfbf5e..00000000 --- a/src/paradigma/ppg/glob_functions/jsonlab/examples/.svn/text-base/example2.json.svn-base +++ /dev/null @@ -1,22 +0,0 @@ -{ - "glossary": { - "title": "example glossary", - "GlossDiv": { - "title": "S", - "GlossList": { - "GlossEntry": { - "ID": "SGML", - "SortAs": "SGML", - "GlossTerm": "Standard Generalized Markup Language", - "Acronym": "SGML", - "Abbrev": "ISO 8879:1986", - "GlossDef": { - "para": "A meta-markup language, used to create markup languages such as DocBook.", - "GlossSeeAlso": ["GML", "XML"] - }, - "GlossSee": "markup" - } - } - } - } -} diff --git a/src/paradigma/ppg/glob_functions/jsonlab/examples/.svn/text-base/example3.json.svn-base b/src/paradigma/ppg/glob_functions/jsonlab/examples/.svn/text-base/example3.json.svn-base deleted file mode 100644 index b7ca9411..00000000 --- a/src/paradigma/ppg/glob_functions/jsonlab/examples/.svn/text-base/example3.json.svn-base +++ /dev/null @@ -1,11 +0,0 @@ -{"menu": { - "id": "file", - "value": "_&File", - "popup": { - "menuitem": [ - {"value": "_&New", "onclick": "CreateNewDoc(\"\"\")"}, - {"value": "_&Open", "onclick": "OpenDoc()"}, - {"value": "_&Close", "onclick": "CloseDoc()"} - ] - } -}} diff --git a/src/paradigma/ppg/glob_functions/jsonlab/examples/.svn/text-base/example4.json.svn-base b/src/paradigma/ppg/glob_functions/jsonlab/examples/.svn/text-base/example4.json.svn-base deleted file mode 100644 index 66deeafb..00000000 --- a/src/paradigma/ppg/glob_functions/jsonlab/examples/.svn/text-base/example4.json.svn-base +++ /dev/null @@ -1,34 +0,0 @@ -[ - { - "sample" : { - "rho" : 1 - } - }, - { - "sample" : { - "rho" : 2 - } - }, - [ - { - "_ArrayType_" : "double", - "_ArraySize_" : [1,2], - "_ArrayData_" : [1,0] - }, - { - "_ArrayType_" : "double", - "_ArraySize_" : [1,2], - "_ArrayData_" : [1,1] - }, - { - "_ArrayType_" : "double", - "_ArraySize_" : [1,2], - "_ArrayData_" : [1,2] - } - ], - [ - "Paper", - "Scissors", - "Stone" - ] -] diff --git a/src/paradigma/ppg/glob_functions/jsonlab/examples/.svn/text-base/jsonlab_basictest.matlab.svn-base b/src/paradigma/ppg/glob_functions/jsonlab/examples/.svn/text-base/jsonlab_basictest.matlab.svn-base deleted file mode 100644 index d51ba96c..00000000 --- a/src/paradigma/ppg/glob_functions/jsonlab/examples/.svn/text-base/jsonlab_basictest.matlab.svn-base +++ /dev/null @@ -1,662 +0,0 @@ - - < M A T L A B > - Copyright 1984-2007 The MathWorks, Inc. - Version 7.4.0.287 (R2007a) - January 29, 2007 - - - To get started, type one of these: helpwin, helpdesk, or demo. - For product information, visit www.mathworks.com. - ->> >> >> >> >> >> >> >> >> -%================================================= ->> % a simple scalar value ->> %================================================= - ->> >> -data2json = - - 3.1416 - ->> -ans = - -[3.141592654] - - ->> -json2data = - - 3.1416 - ->> >> -%================================================= ->> % a complex number ->> %================================================= - ->> >> >> -data2json = - - 1.0000 + 2.0000i - ->> -ans = - -{ - "_ArrayType_": "double", - "_ArraySize_": [1,1], - "_ArrayIsComplex_": 1, - "_ArrayData_": [1,2] -} - - ->> -json2data = - - 1.0000 + 2.0000i - ->> >> -%================================================= ->> % a complex matrix ->> %================================================= - ->> >> >> -data2json = - - 35.0000 +26.0000i 1.0000 +19.0000i 6.0000 +24.0000i - 3.0000 +21.0000i 32.0000 +23.0000i 7.0000 +25.0000i - 31.0000 +22.0000i 9.0000 +27.0000i 2.0000 +20.0000i - 8.0000 +17.0000i 28.0000 +10.0000i 33.0000 +15.0000i - 30.0000 +12.0000i 5.0000 +14.0000i 34.0000 +16.0000i - 4.0000 +13.0000i 36.0000 +18.0000i 29.0000 +11.0000i - ->> -ans = - -{ - "_ArrayType_": "double", - "_ArraySize_": [6,3], - "_ArrayIsComplex_": 1, - "_ArrayData_": [ - [35,26], - [3,21], - [31,22], - [8,17], - [30,12], - [4,13], - [1,19], - [32,23], - [9,27], - [28,10], - [5,14], - [36,18], - [6,24], - [7,25], - [2,20], - [33,15], - [34,16], - [29,11] - ] -} - - ->> -json2data = - - 35.0000 +26.0000i 1.0000 +19.0000i 6.0000 +24.0000i - 3.0000 +21.0000i 32.0000 +23.0000i 7.0000 +25.0000i - 31.0000 +22.0000i 9.0000 +27.0000i 2.0000 +20.0000i - 8.0000 +17.0000i 28.0000 +10.0000i 33.0000 +15.0000i - 30.0000 +12.0000i 5.0000 +14.0000i 34.0000 +16.0000i - 4.0000 +13.0000i 36.0000 +18.0000i 29.0000 +11.0000i - ->> >> -%================================================= ->> % MATLAB special constants ->> %================================================= - ->> >> -data2json = - - NaN Inf -Inf - ->> -ans = - -{ - "specials": ["_NaN_","_Inf_","-_Inf_"] -} - - ->> -json2data = - - specials: [NaN Inf -Inf] - ->> >> -%================================================= ->> % a real sparse matrix ->> %================================================= - ->> >> -data2json = - - (1,2) 0.6557 - (9,2) 0.7577 - (3,5) 0.8491 - (10,5) 0.7431 - (10,8) 0.3922 - (7,9) 0.6787 - (2,10) 0.0357 - (6,10) 0.9340 - (10,10) 0.6555 - ->> -ans = - -{ - "sparse": { - "_ArrayType_": "double", - "_ArraySize_": [10,10], - "_ArrayIsSparse_": 1, - "_ArrayData_": [ - [1,2,0.6557406992], - [9,2,0.7577401306], - [3,5,0.8491293059], - [10,5,0.7431324681], - [10,8,0.3922270195], - [7,9,0.6787351549], - [2,10,0.03571167857], - [6,10,0.9339932478], - [10,10,0.6554778902] - ] - } -} - - ->> -json2data = - - sparse: [10x10 double] - ->> >> -%================================================= ->> % a complex sparse matrix ->> %================================================= - ->> >> -data2json = - - (1,2) 0.6557 - 0.6557i - (9,2) 0.7577 - 0.7577i - (3,5) 0.8491 - 0.8491i - (10,5) 0.7431 - 0.7431i - (10,8) 0.3922 - 0.3922i - (7,9) 0.6787 - 0.6787i - (2,10) 0.0357 - 0.0357i - (6,10) 0.9340 - 0.9340i - (10,10) 0.6555 - 0.6555i - ->> -ans = - -{ - "complex_sparse": { - "_ArrayType_": "double", - "_ArraySize_": [10,10], - "_ArrayIsComplex_": 1, - "_ArrayIsSparse_": 1, - "_ArrayData_": [ - [1,2,0.6557406992,-0.6557406992], - [9,2,0.7577401306,-0.7577401306], - [3,5,0.8491293059,-0.8491293059], - [10,5,0.7431324681,-0.7431324681], - [10,8,0.3922270195,-0.3922270195], - [7,9,0.6787351549,-0.6787351549], - [2,10,0.03571167857,-0.03571167857], - [6,10,0.9339932478,-0.9339932478], - [10,10,0.6554778902,-0.6554778902] - ] - } -} - - ->> -json2data = - - complex_sparse: [10x10 double] - ->> >> -%================================================= ->> % an all-zero sparse matrix ->> %================================================= - ->> >> >> -ans = - -{ - "all_zero_sparse": { - "_ArrayType_": "double", - "_ArraySize_": [2,3], - "_ArrayIsSparse_": 1, - "_ArrayData_": null - } -} - - ->> -json2data = - - all_zero_sparse: [2x3 double] - ->> >> -%================================================= ->> % an empty sparse matrix ->> %================================================= - ->> >> >> -ans = - -{ - "empty_sparse": { - "_ArrayType_": "double", - "_ArraySize_": [0,0], - "_ArrayIsSparse_": 1, - "_ArrayData_": null - } -} - - ->> -json2data = - - empty_sparse: [] - ->> >> -%================================================= ->> % an empty 0-by-0 real matrix ->> %================================================= - ->> >> >> -ans = - -{ - "empty_0by0_real": { - "_ArrayType_": "double", - "_ArraySize_": [0,0], - "_ArrayData_": null - } -} - - ->> -json2data = - - empty_0by0_real: [] - ->> >> -%================================================= ->> % an empty 0-by-3 real matrix ->> %================================================= - ->> >> >> -ans = - -{ - "empty_0by3_real": { - "_ArrayType_": "double", - "_ArraySize_": [0,3], - "_ArrayData_": null - } -} - - ->> -json2data = - - empty_0by3_real: [0x3 double] - ->> >> -%================================================= ->> % a sparse real column vector ->> %================================================= - ->> >> >> -ans = - -{ - "sparse_column_vector": { - "_ArrayType_": "double", - "_ArraySize_": [5,1], - "_ArrayIsSparse_": 1, - "_ArrayData_": [ - [2,3], - [4,1], - [5,4] - ] - } -} - - ->> -json2data = - - sparse_column_vector: [5x1 double] - ->> >> -%================================================= ->> % a sparse complex column vector ->> %================================================= - ->> >> >> -ans = - -{ - "complex_sparse_column_vector": { - "_ArrayType_": "double", - "_ArraySize_": [5,1], - "_ArrayIsComplex_": 1, - "_ArrayIsSparse_": 1, - "_ArrayData_": [ - [2,3,-3], - [4,1,-1], - [5,4,-4] - ] - } -} - - ->> -json2data = - - complex_sparse_column_vector: [5x1 double] - ->> >> -%================================================= ->> % a sparse real row vector ->> %================================================= - ->> >> >> -ans = - -{ - "sparse_row_vector": { - "_ArrayType_": "double", - "_ArraySize_": [1,5], - "_ArrayIsSparse_": 1, - "_ArrayData_": [ - [2,3], - [4,1], - [5,4] - ] - } -} - - ->> -json2data = - - sparse_row_vector: [0 3 0 1 4] - ->> >> -%================================================= ->> % a sparse complex row vector ->> %================================================= - ->> >> >> -ans = - -{ - "complex_sparse_row_vector": { - "_ArrayType_": "double", - "_ArraySize_": [1,5], - "_ArrayIsComplex_": 1, - "_ArrayIsSparse_": 1, - "_ArrayData_": [ - [2,3,-3], - [4,1,-1], - [5,4,-4] - ] - } -} - - ->> -json2data = - - complex_sparse_row_vector: [1x5 double] - ->> >> -%================================================= ->> % a structure ->> %================================================= - ->> >> -data2json = - - name: 'Think Different' - year: 1997 - magic: [3x3 double] - misfits: [Inf NaN] - embedded: [1x1 struct] - ->> -ans = - -{ - "astruct": { - "name": "Think Different", - "year": 1997, - "magic": [ - [8,1,6], - [3,5,7], - [4,9,2] - ], - "misfits": ["_Inf_","_NaN_"], - "embedded": { - "left": true, - "right": false - } - } -} - - ->> -json2data = - - astruct: [1x1 struct] - ->> >> -%================================================= ->> % a structure array ->> %================================================= - ->> >> >> >> >> -ans = - -{ - "Supreme Commander": [ - { - "name": "Nexus Prime", - "rank": 9 - }, - { - "name": "Sentinel Prime", - "rank": 9 - }, - { - "name": "Optimus Prime", - "rank": 9 - } - ] -} - - ->> -json2data = - - Supreme_0x20_Commander: {[1x1 struct] [1x1 struct] [1x1 struct]} - ->> >> -%================================================= ->> % a cell array ->> %================================================= - ->> >> >> >> >> -data2json = - - [1x1 struct] - [1x1 struct] - [1x4 double] - ->> -ans = - -{ - "debian": [ - [ - { - "buzz": 1.10, - "rex": 1.20, - "bo": 1.30, - "hamm": 2.00, - "slink": 2.10, - "potato": 2.20, - "woody": 3.00, - "sarge": 3.10, - "etch": 4.00, - "lenny": 5.00, - "squeeze": 6.00, - "wheezy": 7.00 - }, - { - "Ubuntu": [ - "Kubuntu", - "Xubuntu", - "Lubuntu" - ] - }, - [10.04,10.10,11.04,11.10] - ] - ] -} - - ->> -json2data = - - debian: {{1x3 cell}} - ->> >> -%================================================= ->> % invalid field-name handling ->> %================================================= - ->> >> -json2data = - - ValidName: 1 - x0x5F_InvalidName: 2 - x0x3A_Field_0x3A_: 3 - x0xE9A1B9__0xE79BAE_: 'ç»å¯†' - ->> >> -%================================================= ->> % a 2D cell array ->> %================================================= - ->> >> >> -ans = - -{ - "data2json": [ - [ - [ - 1, - [ - 2, - 3 - ] - ], - 7 - ], - [ - [ - 4, - 5 - ], - [ - 8, - 9 - ] - ], - [ - 6, - 10 - ] - ] -} - - ->> -json2data = - - data2json: {{1x2 cell} [2x2 double] [6 10]} - ->> >> -%================================================= ->> % a 2D struct array ->> %================================================= - ->> >> -data2json = - -2x3 struct array with fields: - idx - data - ->> >> -ans = - -{ - "data2json": [ - [ - { - "idx": 1, - "data": "structs" - }, - { - "idx": 2, - "data": "structs" - } - ], - [ - { - "idx": 3, - "data": "structs" - }, - { - "idx": 4, - "data": "structs" - } - ], - [ - { - "idx": 5, - "data": "structs" - }, - { - "idx": 6, - "data": "structs" - } - ] - ] -} - - ->> -json2data = - - data2json: {{1x2 cell} {1x2 cell} {1x2 cell}} - ->> >> >> >> \ No newline at end of file diff --git a/src/paradigma/ppg/glob_functions/jsonlab/examples/.svn/text-base/jsonlab_selftest.m.svn-base b/src/paradigma/ppg/glob_functions/jsonlab/examples/.svn/text-base/jsonlab_selftest.m.svn-base deleted file mode 100644 index 27aee244..00000000 --- a/src/paradigma/ppg/glob_functions/jsonlab/examples/.svn/text-base/jsonlab_selftest.m.svn-base +++ /dev/null @@ -1,27 +0,0 @@ -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% Regression Test Unit of loadjson and savejson -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -for i=1:4 - fname=sprintf('example%d.json',i); - if(exist(fname,'file')==0) break; end - fprintf(1,'===============================================\n>> %s\n',fname); - json=savejson('data',loadjson(fname)); - fprintf(1,'%s\n',json); - fprintf(1,'%s\n',savejson('data',loadjson(fname),'Compact',1)); - data=loadjson(json); - savejson('data',data,'selftest.json'); - data=loadjson('selftest.json'); -end - -for i=1:4 - fname=sprintf('example%d.json',i); - if(exist(fname,'file')==0) break; end - fprintf(1,'===============================================\n>> %s\n',fname); - json=saveubjson('data',loadjson(fname)); - fprintf(1,'%s\n',json); - data=loadubjson(json); - savejson('',data); - saveubjson('data',data,'selftest.ubj'); - data=loadubjson('selftest.ubj'); -end diff --git a/src/paradigma/ppg/glob_functions/jsonlab/examples/.svn/text-base/jsonlab_selftest.matlab.svn-base b/src/paradigma/ppg/glob_functions/jsonlab/examples/.svn/text-base/jsonlab_selftest.matlab.svn-base deleted file mode 100644 index 17e2d4b8..00000000 --- a/src/paradigma/ppg/glob_functions/jsonlab/examples/.svn/text-base/jsonlab_selftest.matlab.svn-base +++ /dev/null @@ -1,144 +0,0 @@ - - < M A T L A B > - Copyright 1984-2007 The MathWorks, Inc. - Version 7.4.0.287 (R2007a) - January 29, 2007 - - - To get started, type one of these: helpwin, helpdesk, or demo. - For product information, visit www.mathworks.com. - ->> >> >> >> >> =============================================== ->> example1.json -{ - "data": { - "firstName": "John", - "lastName": "Smith", - "age": 25, - "address": { - "streetAddress": "21 2nd Street", - "city": "New York", - "state": "NY", - "postalCode": "10021" - }, - "phoneNumber": [ - { - "type": "home", - "number": "212 555-1234" - }, - { - "type": "fax", - "number": "646 555-4567" - } - ] - } -} - -{"data": {"firstName": "John","lastName": "Smith","age": 25,"address": {"streetAddress": "21 2nd Street","city": "New York","state": "NY","postalCode": "10021"},"phoneNumber": [{"type": "home","number": "212 555-1234"},{"type": "fax","number": "646 555-4567"}]}} - -=============================================== ->> example2.json -{ - "data": { - "glossary": { - "title": "example glossary", - "GlossDiv": { - "title": "S", - "GlossList": { - "GlossEntry": { - "ID": "SGML", - "SortAs": "SGML", - "GlossTerm": "Standard Generalized Markup Language", - "Acronym": "SGML", - "Abbrev": "ISO 8879:1986", - "GlossDef": { - "para": "A meta-markup language, used to create markup languages such as DocBook.", - "GlossSeeAlso": [ - "GML", - "XML" - ] - }, - "GlossSee": "markup" - } - } - } - } - } -} - -{"data": {"glossary": {"title": "example glossary","GlossDiv": {"title": "S","GlossList": {"GlossEntry": {"ID": "SGML","SortAs": "SGML","GlossTerm": "Standard Generalized Markup Language","Acronym": "SGML","Abbrev": "ISO 8879:1986","GlossDef": {"para": "A meta-markup language, used to create markup languages such as DocBook.","GlossSeeAlso": ["GML","XML"]},"GlossSee": "markup"}}}}}} - -=============================================== ->> example3.json -{ - "data": { - "menu": { - "id": "file", - "value": "_&File", - "popup": { - "menuitem": [ - { - "value": "_&New", - "onclick": "CreateNewDoc(\"\"\")" - }, - { - "value": "_&Open", - "onclick": "OpenDoc()" - }, - { - "value": "_&Close", - "onclick": "CloseDoc()" - } - ] - } - } - } -} - -{"data": {"menu": {"id": "file","value": "_&File","popup": {"menuitem": [{"value": "_&New","onclick": "CreateNewDoc(\"\"\")"},{"value": "_&Open","onclick": "OpenDoc()"},{"value": "_&Close","onclick": "CloseDoc()"}]}}}} - -=============================================== ->> example4.json -{ - "data": [ - { - "sample": { - "rho": 1 - } - }, - { - "sample": { - "rho": 2 - } - }, - [ - [1,0], - [1,1], - [1,2] - ], - [ - "Paper", - "Scissors", - "Stone" - ] - ] -} - -{"data": [{"sample": {"rho": 1}},{"sample": {"rho": 2}},[[1,0],[1,1],[1,2]],["Paper","Scissors","Stone"]]} - ->> >> =============================================== ->> example1.json -{SUdata{SU firstNameSUJohnSUlastNameSUSmithSUageiSUaddress{SU streetAddressSU 21 2nd StreetSUcitySUNew YorkSUstateSUNYSU -postalCodeSU10021}SU phoneNumber[{SUtypeSUhomeSUnumberSU 212 555-1234}{SUtypeSUfaxSUnumberSU 646 555-4567}]}} -=============================================== ->> example2.json -{SUdata{SUglossary{SUtitleSUexample glossarySUGlossDiv{SUtitleCSSU GlossList{SU -GlossEntry{SUIDSUSGMLSUSortAsSUSGMLSU GlossTermSU$Standard Generalized Markup LanguageSUAcronymSUSGMLSUAbbrevSU ISO 8879:1986SUGlossDef{SUparaSUHA meta-markup language, used to create markup languages such as DocBook.SU GlossSeeAlso[SUGMLSUXML]}SUGlossSeeSUmarkup}}}}}} -=============================================== ->> example3.json -{SUdata{SUmenu{SUidSUfileSUvalueSU_&FileSUpopup{SUmenuitem[{SUvalueSU_&NewSUonclickSUCreateNewDoc(""")}{SUvalueSU_&OpenSUonclickSU OpenDoc()}{SUvalueSU_&CloseSUonclickSU -CloseDoc()}]}}}} -=============================================== ->> example4.json -{SUdata[{SUsample{SUrhoi}}{SUsample{SUrhoi}}[[$i#U ->> \ No newline at end of file diff --git a/src/paradigma/ppg/glob_functions/jsonlab/examples/.svn/text-base/jsonlab_speedtest.m.svn-base b/src/paradigma/ppg/glob_functions/jsonlab/examples/.svn/text-base/jsonlab_speedtest.m.svn-base deleted file mode 100644 index 4990fba0..00000000 --- a/src/paradigma/ppg/glob_functions/jsonlab/examples/.svn/text-base/jsonlab_speedtest.m.svn-base +++ /dev/null @@ -1,21 +0,0 @@ -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% Benchmarking processing speed of savejson and loadjson -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -datalen=[1e3 1e4 1e5 1e6]; -len=length(datalen); -tsave=zeros(len,1); -tload=zeros(len,1); -for i=1:len - tic; - json=savejson('data',struct('d1',rand(datalen(i),3),'d2',rand(datalen(i),3)>0.5)); - tsave(i)=toc; - data=loadjson(json); - tload(i)=toc-tsave(i); - fprintf(1,'matrix size: %d\n',datalen(i)); -end - -loglog(datalen,tsave,'o-',datalen,tload,'r*-'); -legend('savejson runtime (s)','loadjson runtime (s)'); -xlabel('array size'); -ylabel('running time (s)'); diff --git a/src/paradigma/ppg/glob_functions/jsonlab/examples/demo_jsonlab_basic.m b/src/paradigma/ppg/glob_functions/jsonlab/examples/demo_jsonlab_basic.m deleted file mode 100644 index 43d70665..00000000 --- a/src/paradigma/ppg/glob_functions/jsonlab/examples/demo_jsonlab_basic.m +++ /dev/null @@ -1,180 +0,0 @@ -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% Demonstration of Basic Utilities of JSONlab -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -rngstate = rand ('state'); -randseed=hex2dec('623F9A9E'); -clear data2json json2data - -fprintf(1,'\n%%=================================================\n') -fprintf(1,'%% a simple scalar value \n') -fprintf(1,'%%=================================================\n\n') - -data2json=pi -savejson('',data2json) -json2data=loadjson(ans) - -fprintf(1,'\n%%=================================================\n') -fprintf(1,'%% a complex number\n') -fprintf(1,'%%=================================================\n\n') - -clear i; -data2json=1+2*i -savejson('',data2json) -json2data=loadjson(ans) - -fprintf(1,'\n%%=================================================\n') -fprintf(1,'%% a complex matrix\n') -fprintf(1,'%%=================================================\n\n') - -data2json=magic(6); -data2json=data2json(:,1:3)+data2json(:,4:6)*i -savejson('',data2json) -json2data=loadjson(ans) - -fprintf(1,'\n%%=================================================\n') -fprintf(1,'%% MATLAB special constants\n') -fprintf(1,'%%=================================================\n\n') - -data2json=[NaN Inf -Inf] -savejson('specials',data2json) -json2data=loadjson(ans) - -fprintf(1,'\n%%=================================================\n') -fprintf(1,'%% a real sparse matrix\n') -fprintf(1,'%%=================================================\n\n') - -data2json=sprand(10,10,0.1) -savejson('sparse',data2json) -json2data=loadjson(ans) - -fprintf(1,'\n%%=================================================\n') -fprintf(1,'%% a complex sparse matrix\n') -fprintf(1,'%%=================================================\n\n') - -data2json=data2json-data2json*i -savejson('complex_sparse',data2json) -json2data=loadjson(ans) - -fprintf(1,'\n%%=================================================\n') -fprintf(1,'%% an all-zero sparse matrix\n') -fprintf(1,'%%=================================================\n\n') - -data2json=sparse(2,3); -savejson('all_zero_sparse',data2json) -json2data=loadjson(ans) - -fprintf(1,'\n%%=================================================\n') -fprintf(1,'%% an empty sparse matrix\n') -fprintf(1,'%%=================================================\n\n') - -data2json=sparse([]); -savejson('empty_sparse',data2json) -json2data=loadjson(ans) - -fprintf(1,'\n%%=================================================\n') -fprintf(1,'%% an empty 0-by-0 real matrix\n') -fprintf(1,'%%=================================================\n\n') - -data2json=[]; -savejson('empty_0by0_real',data2json) -json2data=loadjson(ans) - -fprintf(1,'\n%%=================================================\n') -fprintf(1,'%% an empty 0-by-3 real matrix\n') -fprintf(1,'%%=================================================\n\n') - -data2json=zeros(0,3); -savejson('empty_0by3_real',data2json) -json2data=loadjson(ans) - -fprintf(1,'\n%%=================================================\n') -fprintf(1,'%% a sparse real column vector\n') -fprintf(1,'%%=================================================\n\n') - -data2json=sparse([0,3,0,1,4]'); -savejson('sparse_column_vector',data2json) -json2data=loadjson(ans) - -fprintf(1,'\n%%=================================================\n') -fprintf(1,'%% a sparse complex column vector\n') -fprintf(1,'%%=================================================\n\n') - -data2json=data2json-1i*data2json; -savejson('complex_sparse_column_vector',data2json) -json2data=loadjson(ans) - -fprintf(1,'\n%%=================================================\n') -fprintf(1,'%% a sparse real row vector\n') -fprintf(1,'%%=================================================\n\n') - -data2json=sparse([0,3,0,1,4]); -savejson('sparse_row_vector',data2json) -json2data=loadjson(ans) - -fprintf(1,'\n%%=================================================\n') -fprintf(1,'%% a sparse complex row vector\n') -fprintf(1,'%%=================================================\n\n') - -data2json=data2json-1i*data2json; -savejson('complex_sparse_row_vector',data2json) -json2data=loadjson(ans) - -fprintf(1,'\n%%=================================================\n') -fprintf(1,'%% a structure\n') -fprintf(1,'%%=================================================\n\n') - -data2json=struct('name','Think Different','year',1997,'magic',magic(3),... - 'misfits',[Inf,NaN],'embedded',struct('left',true,'right',false)) -savejson('astruct',data2json,struct('ParseLogical',1)) -json2data=loadjson(ans) - -fprintf(1,'\n%%=================================================\n') -fprintf(1,'%% a structure array\n') -fprintf(1,'%%=================================================\n\n') - -data2json=struct('name','Nexus Prime','rank',9); -data2json(2)=struct('name','Sentinel Prime','rank',9); -data2json(3)=struct('name','Optimus Prime','rank',9); -savejson('Supreme Commander',data2json) -json2data=loadjson(ans) - -fprintf(1,'\n%%=================================================\n') -fprintf(1,'%% a cell array\n') -fprintf(1,'%%=================================================\n\n') - -data2json=cell(3,1); -data2json{1}=struct('buzz',1.1,'rex',1.2,'bo',1.3,'hamm',2.0,'slink',2.1,'potato',2.2,... - 'woody',3.0,'sarge',3.1,'etch',4.0,'lenny',5.0,'squeeze',6.0,'wheezy',7.0); -data2json{2}=struct('Ubuntu',['Kubuntu';'Xubuntu';'Lubuntu']); -data2json{3}=[10.04,10.10,11.04,11.10] -savejson('debian',data2json,struct('FloatFormat','%.2f')) -json2data=loadjson(ans) - -fprintf(1,'\n%%=================================================\n') -fprintf(1,'%% invalid field-name handling\n') -fprintf(1,'%%=================================================\n\n') - -json2data=loadjson('{"ValidName":1, "_InvalidName":2, ":Field:":3, "项目":"ç»å¯†"}') - -fprintf(1,'\n%%=================================================\n') -fprintf(1,'%% a 2D cell array\n') -fprintf(1,'%%=================================================\n\n') - -data2json={{1,{2,3}},{4,5},{6};{7},{8,9},{10}}; -savejson('data2json',data2json) -json2data=loadjson(ans) % only savejson works for cell arrays, loadjson has issues - -fprintf(1,'\n%%=================================================\n') -fprintf(1,'%% a 2D struct array\n') -fprintf(1,'%%=================================================\n\n') - -data2json=repmat(struct('idx',0,'data','structs'),[2,3]) -for i=1:6 - data2json(i).idx=i; -end -savejson('data2json',data2json) -json2data=loadjson(ans) - -rand ('state',rngstate); - diff --git a/src/paradigma/ppg/glob_functions/jsonlab/examples/demo_ubjson_basic.m b/src/paradigma/ppg/glob_functions/jsonlab/examples/demo_ubjson_basic.m deleted file mode 100644 index 0c35433a..00000000 --- a/src/paradigma/ppg/glob_functions/jsonlab/examples/demo_ubjson_basic.m +++ /dev/null @@ -1,180 +0,0 @@ -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% Demonstration of Basic Utilities of JSONlab -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -rngstate = rand ('state'); -randseed=hex2dec('623F9A9E'); -clear data2json json2data - -fprintf(1,'\n%%=================================================\n') -fprintf(1,'%% a simple scalar value \n') -fprintf(1,'%%=================================================\n\n') - -data2json=pi -saveubjson('',data2json) -json2data=loadubjson(ans) - -fprintf(1,'\n%%=================================================\n') -fprintf(1,'%% a complex number\n') -fprintf(1,'%%=================================================\n\n') - -clear i; -data2json=1+2*i -saveubjson('',data2json) -json2data=loadubjson(ans) - -fprintf(1,'\n%%=================================================\n') -fprintf(1,'%% a complex matrix\n') -fprintf(1,'%%=================================================\n\n') - -data2json=magic(6); -data2json=data2json(:,1:3)+data2json(:,4:6)*i -saveubjson('',data2json) -json2data=loadubjson(ans) - -fprintf(1,'\n%%=================================================\n') -fprintf(1,'%% MATLAB special constants\n') -fprintf(1,'%%=================================================\n\n') - -data2json=[NaN Inf -Inf] -saveubjson('specials',data2json) -json2data=loadubjson(ans) - -fprintf(1,'\n%%=================================================\n') -fprintf(1,'%% a real sparse matrix\n') -fprintf(1,'%%=================================================\n\n') - -data2json=sprand(10,10,0.1) -saveubjson('sparse',data2json) -json2data=loadubjson(ans) - -fprintf(1,'\n%%=================================================\n') -fprintf(1,'%% a complex sparse matrix\n') -fprintf(1,'%%=================================================\n\n') - -data2json=data2json-data2json*i -saveubjson('complex_sparse',data2json) -json2data=loadubjson(ans) - -fprintf(1,'\n%%=================================================\n') -fprintf(1,'%% an all-zero sparse matrix\n') -fprintf(1,'%%=================================================\n\n') - -data2json=sparse(2,3); -saveubjson('all_zero_sparse',data2json) -json2data=loadubjson(ans) - -fprintf(1,'\n%%=================================================\n') -fprintf(1,'%% an empty sparse matrix\n') -fprintf(1,'%%=================================================\n\n') - -data2json=sparse([]); -saveubjson('empty_sparse',data2json) -json2data=loadubjson(ans) - -fprintf(1,'\n%%=================================================\n') -fprintf(1,'%% an empty 0-by-0 real matrix\n') -fprintf(1,'%%=================================================\n\n') - -data2json=[]; -saveubjson('empty_0by0_real',data2json) -json2data=loadubjson(ans) - -fprintf(1,'\n%%=================================================\n') -fprintf(1,'%% an empty 0-by-3 real matrix\n') -fprintf(1,'%%=================================================\n\n') - -data2json=zeros(0,3); -saveubjson('empty_0by3_real',data2json) -json2data=loadubjson(ans) - -fprintf(1,'\n%%=================================================\n') -fprintf(1,'%% a sparse real column vector\n') -fprintf(1,'%%=================================================\n\n') - -data2json=sparse([0,3,0,1,4]'); -saveubjson('sparse_column_vector',data2json) -json2data=loadubjson(ans) - -fprintf(1,'\n%%=================================================\n') -fprintf(1,'%% a sparse complex column vector\n') -fprintf(1,'%%=================================================\n\n') - -data2json=data2json-1i*data2json; -saveubjson('complex_sparse_column_vector',data2json) -json2data=loadubjson(ans) - -fprintf(1,'\n%%=================================================\n') -fprintf(1,'%% a sparse real row vector\n') -fprintf(1,'%%=================================================\n\n') - -data2json=sparse([0,3,0,1,4]); -saveubjson('sparse_row_vector',data2json) -json2data=loadubjson(ans) - -fprintf(1,'\n%%=================================================\n') -fprintf(1,'%% a sparse complex row vector\n') -fprintf(1,'%%=================================================\n\n') - -data2json=data2json-1i*data2json; -saveubjson('complex_sparse_row_vector',data2json) -json2data=loadubjson(ans) - -fprintf(1,'\n%%=================================================\n') -fprintf(1,'%% a structure\n') -fprintf(1,'%%=================================================\n\n') - -data2json=struct('name','Think Different','year',1997,'magic',magic(3),... - 'misfits',[Inf,NaN],'embedded',struct('left',true,'right',false)) -saveubjson('astruct',data2json,struct('ParseLogical',1)) -json2data=loadubjson(ans) - -fprintf(1,'\n%%=================================================\n') -fprintf(1,'%% a structure array\n') -fprintf(1,'%%=================================================\n\n') - -data2json=struct('name','Nexus Prime','rank',9); -data2json(2)=struct('name','Sentinel Prime','rank',9); -data2json(3)=struct('name','Optimus Prime','rank',9); -saveubjson('Supreme Commander',data2json) -json2data=loadubjson(ans) - -fprintf(1,'\n%%=================================================\n') -fprintf(1,'%% a cell array\n') -fprintf(1,'%%=================================================\n\n') - -data2json=cell(3,1); -data2json{1}=struct('buzz',1.1,'rex',1.2,'bo',1.3,'hamm',2.0,'slink',2.1,'potato',2.2,... - 'woody',3.0,'sarge',3.1,'etch',4.0,'lenny',5.0,'squeeze',6.0,'wheezy',7.0); -data2json{2}=struct('Ubuntu',['Kubuntu';'Xubuntu';'Lubuntu']); -data2json{3}=[10.04,10.10,11.04,11.10] -saveubjson('debian',data2json,struct('FloatFormat','%.2f')) -json2data=loadubjson(ans) - -fprintf(1,'\n%%=================================================\n') -fprintf(1,'%% invalid field-name handling\n') -fprintf(1,'%%=================================================\n\n') - -json2data=loadubjson(saveubjson('',loadjson('{"ValidName":1, "_InvalidName":2, ":Field:":3, "项目":"ç»å¯†"}'))) - -fprintf(1,'\n%%=================================================\n') -fprintf(1,'%% a 2D cell array\n') -fprintf(1,'%%=================================================\n\n') - -data2json={{1,{2,3}},{4,5},{6};{7},{8,9},{10}}; -saveubjson('data2json',data2json) -json2data=loadubjson(ans) % only savejson works for cell arrays, loadjson has issues - -fprintf(1,'\n%%=================================================\n') -fprintf(1,'%% a 2D struct array\n') -fprintf(1,'%%=================================================\n\n') - -data2json=repmat(struct('idx',0,'data','structs'),[2,3]) -for i=1:6 - data2json(i).idx=i; -end -saveubjson('data2json',data2json) -json2data=loadubjson(ans) - -rand ('state',rngstate); - diff --git a/src/paradigma/ppg/glob_functions/jsonlab/examples/example1.json b/src/paradigma/ppg/glob_functions/jsonlab/examples/example1.json deleted file mode 100644 index be0993ef..00000000 --- a/src/paradigma/ppg/glob_functions/jsonlab/examples/example1.json +++ /dev/null @@ -1,23 +0,0 @@ - { - "firstName": "John", - "lastName": "Smith", - "age": 25, - "address": - { - "streetAddress": "21 2nd Street", - "city": "New York", - "state": "NY", - "postalCode": "10021" - }, - "phoneNumber": - [ - { - "type": "home", - "number": "212 555-1234" - }, - { - "type": "fax", - "number": "646 555-4567" - } - ] - } diff --git a/src/paradigma/ppg/glob_functions/jsonlab/examples/example2.json b/src/paradigma/ppg/glob_functions/jsonlab/examples/example2.json deleted file mode 100644 index eacfbf5e..00000000 --- a/src/paradigma/ppg/glob_functions/jsonlab/examples/example2.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "glossary": { - "title": "example glossary", - "GlossDiv": { - "title": "S", - "GlossList": { - "GlossEntry": { - "ID": "SGML", - "SortAs": "SGML", - "GlossTerm": "Standard Generalized Markup Language", - "Acronym": "SGML", - "Abbrev": "ISO 8879:1986", - "GlossDef": { - "para": "A meta-markup language, used to create markup languages such as DocBook.", - "GlossSeeAlso": ["GML", "XML"] - }, - "GlossSee": "markup" - } - } - } - } -} diff --git a/src/paradigma/ppg/glob_functions/jsonlab/examples/example3.json b/src/paradigma/ppg/glob_functions/jsonlab/examples/example3.json deleted file mode 100644 index b7ca9411..00000000 --- a/src/paradigma/ppg/glob_functions/jsonlab/examples/example3.json +++ /dev/null @@ -1,11 +0,0 @@ -{"menu": { - "id": "file", - "value": "_&File", - "popup": { - "menuitem": [ - {"value": "_&New", "onclick": "CreateNewDoc(\"\"\")"}, - {"value": "_&Open", "onclick": "OpenDoc()"}, - {"value": "_&Close", "onclick": "CloseDoc()"} - ] - } -}} diff --git a/src/paradigma/ppg/glob_functions/jsonlab/examples/example4.json b/src/paradigma/ppg/glob_functions/jsonlab/examples/example4.json deleted file mode 100644 index 66deeafb..00000000 --- a/src/paradigma/ppg/glob_functions/jsonlab/examples/example4.json +++ /dev/null @@ -1,34 +0,0 @@ -[ - { - "sample" : { - "rho" : 1 - } - }, - { - "sample" : { - "rho" : 2 - } - }, - [ - { - "_ArrayType_" : "double", - "_ArraySize_" : [1,2], - "_ArrayData_" : [1,0] - }, - { - "_ArrayType_" : "double", - "_ArraySize_" : [1,2], - "_ArrayData_" : [1,1] - }, - { - "_ArrayType_" : "double", - "_ArraySize_" : [1,2], - "_ArrayData_" : [1,2] - } - ], - [ - "Paper", - "Scissors", - "Stone" - ] -] diff --git a/src/paradigma/ppg/glob_functions/jsonlab/examples/jsonlab_basictest.matlab b/src/paradigma/ppg/glob_functions/jsonlab/examples/jsonlab_basictest.matlab deleted file mode 100644 index d51ba96c..00000000 --- a/src/paradigma/ppg/glob_functions/jsonlab/examples/jsonlab_basictest.matlab +++ /dev/null @@ -1,662 +0,0 @@ - - < M A T L A B > - Copyright 1984-2007 The MathWorks, Inc. - Version 7.4.0.287 (R2007a) - January 29, 2007 - - - To get started, type one of these: helpwin, helpdesk, or demo. - For product information, visit www.mathworks.com. - ->> >> >> >> >> >> >> >> >> -%================================================= ->> % a simple scalar value ->> %================================================= - ->> >> -data2json = - - 3.1416 - ->> -ans = - -[3.141592654] - - ->> -json2data = - - 3.1416 - ->> >> -%================================================= ->> % a complex number ->> %================================================= - ->> >> >> -data2json = - - 1.0000 + 2.0000i - ->> -ans = - -{ - "_ArrayType_": "double", - "_ArraySize_": [1,1], - "_ArrayIsComplex_": 1, - "_ArrayData_": [1,2] -} - - ->> -json2data = - - 1.0000 + 2.0000i - ->> >> -%================================================= ->> % a complex matrix ->> %================================================= - ->> >> >> -data2json = - - 35.0000 +26.0000i 1.0000 +19.0000i 6.0000 +24.0000i - 3.0000 +21.0000i 32.0000 +23.0000i 7.0000 +25.0000i - 31.0000 +22.0000i 9.0000 +27.0000i 2.0000 +20.0000i - 8.0000 +17.0000i 28.0000 +10.0000i 33.0000 +15.0000i - 30.0000 +12.0000i 5.0000 +14.0000i 34.0000 +16.0000i - 4.0000 +13.0000i 36.0000 +18.0000i 29.0000 +11.0000i - ->> -ans = - -{ - "_ArrayType_": "double", - "_ArraySize_": [6,3], - "_ArrayIsComplex_": 1, - "_ArrayData_": [ - [35,26], - [3,21], - [31,22], - [8,17], - [30,12], - [4,13], - [1,19], - [32,23], - [9,27], - [28,10], - [5,14], - [36,18], - [6,24], - [7,25], - [2,20], - [33,15], - [34,16], - [29,11] - ] -} - - ->> -json2data = - - 35.0000 +26.0000i 1.0000 +19.0000i 6.0000 +24.0000i - 3.0000 +21.0000i 32.0000 +23.0000i 7.0000 +25.0000i - 31.0000 +22.0000i 9.0000 +27.0000i 2.0000 +20.0000i - 8.0000 +17.0000i 28.0000 +10.0000i 33.0000 +15.0000i - 30.0000 +12.0000i 5.0000 +14.0000i 34.0000 +16.0000i - 4.0000 +13.0000i 36.0000 +18.0000i 29.0000 +11.0000i - ->> >> -%================================================= ->> % MATLAB special constants ->> %================================================= - ->> >> -data2json = - - NaN Inf -Inf - ->> -ans = - -{ - "specials": ["_NaN_","_Inf_","-_Inf_"] -} - - ->> -json2data = - - specials: [NaN Inf -Inf] - ->> >> -%================================================= ->> % a real sparse matrix ->> %================================================= - ->> >> -data2json = - - (1,2) 0.6557 - (9,2) 0.7577 - (3,5) 0.8491 - (10,5) 0.7431 - (10,8) 0.3922 - (7,9) 0.6787 - (2,10) 0.0357 - (6,10) 0.9340 - (10,10) 0.6555 - ->> -ans = - -{ - "sparse": { - "_ArrayType_": "double", - "_ArraySize_": [10,10], - "_ArrayIsSparse_": 1, - "_ArrayData_": [ - [1,2,0.6557406992], - [9,2,0.7577401306], - [3,5,0.8491293059], - [10,5,0.7431324681], - [10,8,0.3922270195], - [7,9,0.6787351549], - [2,10,0.03571167857], - [6,10,0.9339932478], - [10,10,0.6554778902] - ] - } -} - - ->> -json2data = - - sparse: [10x10 double] - ->> >> -%================================================= ->> % a complex sparse matrix ->> %================================================= - ->> >> -data2json = - - (1,2) 0.6557 - 0.6557i - (9,2) 0.7577 - 0.7577i - (3,5) 0.8491 - 0.8491i - (10,5) 0.7431 - 0.7431i - (10,8) 0.3922 - 0.3922i - (7,9) 0.6787 - 0.6787i - (2,10) 0.0357 - 0.0357i - (6,10) 0.9340 - 0.9340i - (10,10) 0.6555 - 0.6555i - ->> -ans = - -{ - "complex_sparse": { - "_ArrayType_": "double", - "_ArraySize_": [10,10], - "_ArrayIsComplex_": 1, - "_ArrayIsSparse_": 1, - "_ArrayData_": [ - [1,2,0.6557406992,-0.6557406992], - [9,2,0.7577401306,-0.7577401306], - [3,5,0.8491293059,-0.8491293059], - [10,5,0.7431324681,-0.7431324681], - [10,8,0.3922270195,-0.3922270195], - [7,9,0.6787351549,-0.6787351549], - [2,10,0.03571167857,-0.03571167857], - [6,10,0.9339932478,-0.9339932478], - [10,10,0.6554778902,-0.6554778902] - ] - } -} - - ->> -json2data = - - complex_sparse: [10x10 double] - ->> >> -%================================================= ->> % an all-zero sparse matrix ->> %================================================= - ->> >> >> -ans = - -{ - "all_zero_sparse": { - "_ArrayType_": "double", - "_ArraySize_": [2,3], - "_ArrayIsSparse_": 1, - "_ArrayData_": null - } -} - - ->> -json2data = - - all_zero_sparse: [2x3 double] - ->> >> -%================================================= ->> % an empty sparse matrix ->> %================================================= - ->> >> >> -ans = - -{ - "empty_sparse": { - "_ArrayType_": "double", - "_ArraySize_": [0,0], - "_ArrayIsSparse_": 1, - "_ArrayData_": null - } -} - - ->> -json2data = - - empty_sparse: [] - ->> >> -%================================================= ->> % an empty 0-by-0 real matrix ->> %================================================= - ->> >> >> -ans = - -{ - "empty_0by0_real": { - "_ArrayType_": "double", - "_ArraySize_": [0,0], - "_ArrayData_": null - } -} - - ->> -json2data = - - empty_0by0_real: [] - ->> >> -%================================================= ->> % an empty 0-by-3 real matrix ->> %================================================= - ->> >> >> -ans = - -{ - "empty_0by3_real": { - "_ArrayType_": "double", - "_ArraySize_": [0,3], - "_ArrayData_": null - } -} - - ->> -json2data = - - empty_0by3_real: [0x3 double] - ->> >> -%================================================= ->> % a sparse real column vector ->> %================================================= - ->> >> >> -ans = - -{ - "sparse_column_vector": { - "_ArrayType_": "double", - "_ArraySize_": [5,1], - "_ArrayIsSparse_": 1, - "_ArrayData_": [ - [2,3], - [4,1], - [5,4] - ] - } -} - - ->> -json2data = - - sparse_column_vector: [5x1 double] - ->> >> -%================================================= ->> % a sparse complex column vector ->> %================================================= - ->> >> >> -ans = - -{ - "complex_sparse_column_vector": { - "_ArrayType_": "double", - "_ArraySize_": [5,1], - "_ArrayIsComplex_": 1, - "_ArrayIsSparse_": 1, - "_ArrayData_": [ - [2,3,-3], - [4,1,-1], - [5,4,-4] - ] - } -} - - ->> -json2data = - - complex_sparse_column_vector: [5x1 double] - ->> >> -%================================================= ->> % a sparse real row vector ->> %================================================= - ->> >> >> -ans = - -{ - "sparse_row_vector": { - "_ArrayType_": "double", - "_ArraySize_": [1,5], - "_ArrayIsSparse_": 1, - "_ArrayData_": [ - [2,3], - [4,1], - [5,4] - ] - } -} - - ->> -json2data = - - sparse_row_vector: [0 3 0 1 4] - ->> >> -%================================================= ->> % a sparse complex row vector ->> %================================================= - ->> >> >> -ans = - -{ - "complex_sparse_row_vector": { - "_ArrayType_": "double", - "_ArraySize_": [1,5], - "_ArrayIsComplex_": 1, - "_ArrayIsSparse_": 1, - "_ArrayData_": [ - [2,3,-3], - [4,1,-1], - [5,4,-4] - ] - } -} - - ->> -json2data = - - complex_sparse_row_vector: [1x5 double] - ->> >> -%================================================= ->> % a structure ->> %================================================= - ->> >> -data2json = - - name: 'Think Different' - year: 1997 - magic: [3x3 double] - misfits: [Inf NaN] - embedded: [1x1 struct] - ->> -ans = - -{ - "astruct": { - "name": "Think Different", - "year": 1997, - "magic": [ - [8,1,6], - [3,5,7], - [4,9,2] - ], - "misfits": ["_Inf_","_NaN_"], - "embedded": { - "left": true, - "right": false - } - } -} - - ->> -json2data = - - astruct: [1x1 struct] - ->> >> -%================================================= ->> % a structure array ->> %================================================= - ->> >> >> >> >> -ans = - -{ - "Supreme Commander": [ - { - "name": "Nexus Prime", - "rank": 9 - }, - { - "name": "Sentinel Prime", - "rank": 9 - }, - { - "name": "Optimus Prime", - "rank": 9 - } - ] -} - - ->> -json2data = - - Supreme_0x20_Commander: {[1x1 struct] [1x1 struct] [1x1 struct]} - ->> >> -%================================================= ->> % a cell array ->> %================================================= - ->> >> >> >> >> -data2json = - - [1x1 struct] - [1x1 struct] - [1x4 double] - ->> -ans = - -{ - "debian": [ - [ - { - "buzz": 1.10, - "rex": 1.20, - "bo": 1.30, - "hamm": 2.00, - "slink": 2.10, - "potato": 2.20, - "woody": 3.00, - "sarge": 3.10, - "etch": 4.00, - "lenny": 5.00, - "squeeze": 6.00, - "wheezy": 7.00 - }, - { - "Ubuntu": [ - "Kubuntu", - "Xubuntu", - "Lubuntu" - ] - }, - [10.04,10.10,11.04,11.10] - ] - ] -} - - ->> -json2data = - - debian: {{1x3 cell}} - ->> >> -%================================================= ->> % invalid field-name handling ->> %================================================= - ->> >> -json2data = - - ValidName: 1 - x0x5F_InvalidName: 2 - x0x3A_Field_0x3A_: 3 - x0xE9A1B9__0xE79BAE_: 'ç»å¯†' - ->> >> -%================================================= ->> % a 2D cell array ->> %================================================= - ->> >> >> -ans = - -{ - "data2json": [ - [ - [ - 1, - [ - 2, - 3 - ] - ], - 7 - ], - [ - [ - 4, - 5 - ], - [ - 8, - 9 - ] - ], - [ - 6, - 10 - ] - ] -} - - ->> -json2data = - - data2json: {{1x2 cell} [2x2 double] [6 10]} - ->> >> -%================================================= ->> % a 2D struct array ->> %================================================= - ->> >> -data2json = - -2x3 struct array with fields: - idx - data - ->> >> -ans = - -{ - "data2json": [ - [ - { - "idx": 1, - "data": "structs" - }, - { - "idx": 2, - "data": "structs" - } - ], - [ - { - "idx": 3, - "data": "structs" - }, - { - "idx": 4, - "data": "structs" - } - ], - [ - { - "idx": 5, - "data": "structs" - }, - { - "idx": 6, - "data": "structs" - } - ] - ] -} - - ->> -json2data = - - data2json: {{1x2 cell} {1x2 cell} {1x2 cell}} - ->> >> >> >> \ No newline at end of file diff --git a/src/paradigma/ppg/glob_functions/jsonlab/examples/jsonlab_selftest.m b/src/paradigma/ppg/glob_functions/jsonlab/examples/jsonlab_selftest.m deleted file mode 100644 index 27aee244..00000000 --- a/src/paradigma/ppg/glob_functions/jsonlab/examples/jsonlab_selftest.m +++ /dev/null @@ -1,27 +0,0 @@ -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% Regression Test Unit of loadjson and savejson -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -for i=1:4 - fname=sprintf('example%d.json',i); - if(exist(fname,'file')==0) break; end - fprintf(1,'===============================================\n>> %s\n',fname); - json=savejson('data',loadjson(fname)); - fprintf(1,'%s\n',json); - fprintf(1,'%s\n',savejson('data',loadjson(fname),'Compact',1)); - data=loadjson(json); - savejson('data',data,'selftest.json'); - data=loadjson('selftest.json'); -end - -for i=1:4 - fname=sprintf('example%d.json',i); - if(exist(fname,'file')==0) break; end - fprintf(1,'===============================================\n>> %s\n',fname); - json=saveubjson('data',loadjson(fname)); - fprintf(1,'%s\n',json); - data=loadubjson(json); - savejson('',data); - saveubjson('data',data,'selftest.ubj'); - data=loadubjson('selftest.ubj'); -end diff --git a/src/paradigma/ppg/glob_functions/jsonlab/examples/jsonlab_selftest.matlab b/src/paradigma/ppg/glob_functions/jsonlab/examples/jsonlab_selftest.matlab deleted file mode 100644 index 17e2d4b8..00000000 --- a/src/paradigma/ppg/glob_functions/jsonlab/examples/jsonlab_selftest.matlab +++ /dev/null @@ -1,144 +0,0 @@ - - < M A T L A B > - Copyright 1984-2007 The MathWorks, Inc. - Version 7.4.0.287 (R2007a) - January 29, 2007 - - - To get started, type one of these: helpwin, helpdesk, or demo. - For product information, visit www.mathworks.com. - ->> >> >> >> >> =============================================== ->> example1.json -{ - "data": { - "firstName": "John", - "lastName": "Smith", - "age": 25, - "address": { - "streetAddress": "21 2nd Street", - "city": "New York", - "state": "NY", - "postalCode": "10021" - }, - "phoneNumber": [ - { - "type": "home", - "number": "212 555-1234" - }, - { - "type": "fax", - "number": "646 555-4567" - } - ] - } -} - -{"data": {"firstName": "John","lastName": "Smith","age": 25,"address": {"streetAddress": "21 2nd Street","city": "New York","state": "NY","postalCode": "10021"},"phoneNumber": [{"type": "home","number": "212 555-1234"},{"type": "fax","number": "646 555-4567"}]}} - -=============================================== ->> example2.json -{ - "data": { - "glossary": { - "title": "example glossary", - "GlossDiv": { - "title": "S", - "GlossList": { - "GlossEntry": { - "ID": "SGML", - "SortAs": "SGML", - "GlossTerm": "Standard Generalized Markup Language", - "Acronym": "SGML", - "Abbrev": "ISO 8879:1986", - "GlossDef": { - "para": "A meta-markup language, used to create markup languages such as DocBook.", - "GlossSeeAlso": [ - "GML", - "XML" - ] - }, - "GlossSee": "markup" - } - } - } - } - } -} - -{"data": {"glossary": {"title": "example glossary","GlossDiv": {"title": "S","GlossList": {"GlossEntry": {"ID": "SGML","SortAs": "SGML","GlossTerm": "Standard Generalized Markup Language","Acronym": "SGML","Abbrev": "ISO 8879:1986","GlossDef": {"para": "A meta-markup language, used to create markup languages such as DocBook.","GlossSeeAlso": ["GML","XML"]},"GlossSee": "markup"}}}}}} - -=============================================== ->> example3.json -{ - "data": { - "menu": { - "id": "file", - "value": "_&File", - "popup": { - "menuitem": [ - { - "value": "_&New", - "onclick": "CreateNewDoc(\"\"\")" - }, - { - "value": "_&Open", - "onclick": "OpenDoc()" - }, - { - "value": "_&Close", - "onclick": "CloseDoc()" - } - ] - } - } - } -} - -{"data": {"menu": {"id": "file","value": "_&File","popup": {"menuitem": [{"value": "_&New","onclick": "CreateNewDoc(\"\"\")"},{"value": "_&Open","onclick": "OpenDoc()"},{"value": "_&Close","onclick": "CloseDoc()"}]}}}} - -=============================================== ->> example4.json -{ - "data": [ - { - "sample": { - "rho": 1 - } - }, - { - "sample": { - "rho": 2 - } - }, - [ - [1,0], - [1,1], - [1,2] - ], - [ - "Paper", - "Scissors", - "Stone" - ] - ] -} - -{"data": [{"sample": {"rho": 1}},{"sample": {"rho": 2}},[[1,0],[1,1],[1,2]],["Paper","Scissors","Stone"]]} - ->> >> =============================================== ->> example1.json -{SUdata{SU firstNameSUJohnSUlastNameSUSmithSUageiSUaddress{SU streetAddressSU 21 2nd StreetSUcitySUNew YorkSUstateSUNYSU -postalCodeSU10021}SU phoneNumber[{SUtypeSUhomeSUnumberSU 212 555-1234}{SUtypeSUfaxSUnumberSU 646 555-4567}]}} -=============================================== ->> example2.json -{SUdata{SUglossary{SUtitleSUexample glossarySUGlossDiv{SUtitleCSSU GlossList{SU -GlossEntry{SUIDSUSGMLSUSortAsSUSGMLSU GlossTermSU$Standard Generalized Markup LanguageSUAcronymSUSGMLSUAbbrevSU ISO 8879:1986SUGlossDef{SUparaSUHA meta-markup language, used to create markup languages such as DocBook.SU GlossSeeAlso[SUGMLSUXML]}SUGlossSeeSUmarkup}}}}}} -=============================================== ->> example3.json -{SUdata{SUmenu{SUidSUfileSUvalueSU_&FileSUpopup{SUmenuitem[{SUvalueSU_&NewSUonclickSUCreateNewDoc(""")}{SUvalueSU_&OpenSUonclickSU OpenDoc()}{SUvalueSU_&CloseSUonclickSU -CloseDoc()}]}}}} -=============================================== ->> example4.json -{SUdata[{SUsample{SUrhoi}}{SUsample{SUrhoi}}[[$i#U ->> \ No newline at end of file diff --git a/src/paradigma/ppg/glob_functions/jsonlab/examples/jsonlab_speedtest.m b/src/paradigma/ppg/glob_functions/jsonlab/examples/jsonlab_speedtest.m deleted file mode 100644 index 4990fba0..00000000 --- a/src/paradigma/ppg/glob_functions/jsonlab/examples/jsonlab_speedtest.m +++ /dev/null @@ -1,21 +0,0 @@ -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% Benchmarking processing speed of savejson and loadjson -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -datalen=[1e3 1e4 1e5 1e6]; -len=length(datalen); -tsave=zeros(len,1); -tload=zeros(len,1); -for i=1:len - tic; - json=savejson('data',struct('d1',rand(datalen(i),3),'d2',rand(datalen(i),3)>0.5)); - tsave(i)=toc; - data=loadjson(json); - tload(i)=toc-tsave(i); - fprintf(1,'matrix size: %d\n',datalen(i)); -end - -loglog(datalen,tsave,'o-',datalen,tload,'r*-'); -legend('savejson runtime (s)','loadjson runtime (s)'); -xlabel('array size'); -ylabel('running time (s)'); diff --git a/src/paradigma/ppg/glob_functions/jsonlab/jsonopt.m b/src/paradigma/ppg/glob_functions/jsonlab/jsonopt.m deleted file mode 100644 index 4b541d33..00000000 --- a/src/paradigma/ppg/glob_functions/jsonlab/jsonopt.m +++ /dev/null @@ -1,32 +0,0 @@ -function val=jsonopt(key,default,varargin) -% -% val=jsonopt(key,default,optstruct) -% -% setting options based on a struct. The struct can be produced -% by varargin2struct from a list of 'param','value' pairs -% -% authors:Qianqian Fang (fangq nmr.mgh.harvard.edu) -% -% $Id: loadjson.m 371 2012-06-20 12:43:06Z fangq $ -% -% input: -% key: a string with which one look up a value from a struct -% default: if the key does not exist, return default -% optstruct: a struct where each sub-field is a key -% -% output: -% val: if key exists, val=optstruct.key; otherwise val=default -% -% license: -% BSD or GPL version 3, see LICENSE_{BSD,GPLv3}.txt files for details -% -% -- this function is part of jsonlab toolbox (http://iso2mesh.sf.net/cgi-bin/index.cgi?jsonlab) -% - -val=default; -if(nargin<=2) return; end -opt=varargin{1}; -if(isstruct(opt) && isfield(opt,key)) - val=getfield(opt,key); -end - diff --git a/src/paradigma/ppg/glob_functions/jsonlab/loadjson.m b/src/paradigma/ppg/glob_functions/jsonlab/loadjson.m deleted file mode 100644 index 45166380..00000000 --- a/src/paradigma/ppg/glob_functions/jsonlab/loadjson.m +++ /dev/null @@ -1,566 +0,0 @@ -function data = loadjson(fname,varargin) -% -% data=loadjson(fname,opt) -% or -% data=loadjson(fname,'param1',value1,'param2',value2,...) -% -% parse a JSON (JavaScript Object Notation) file or string -% -% authors:Qianqian Fang (fangq nmr.mgh.harvard.edu) -% created on 2011/09/09, including previous works from -% -% Nedialko Krouchev: http://www.mathworks.com/matlabcentral/fileexchange/25713 -% created on 2009/11/02 -% François Glineur: http://www.mathworks.com/matlabcentral/fileexchange/23393 -% created on 2009/03/22 -% Joel Feenstra: -% http://www.mathworks.com/matlabcentral/fileexchange/20565 -% created on 2008/07/03 -% -% $Id: loadjson.m 460 2015-01-03 00:30:45Z fangq $ -% -% input: -% fname: input file name, if fname contains "{}" or "[]", fname -% will be interpreted as a JSON string -% opt: a struct to store parsing options, opt can be replaced by -% a list of ('param',value) pairs - the param string is equivallent -% to a field in opt. opt can have the following -% fields (first in [.|.] is the default) -% -% opt.SimplifyCell [0|1]: if set to 1, loadjson will call cell2mat -% for each element of the JSON data, and group -% arrays based on the cell2mat rules. -% opt.FastArrayParser [1|0 or integer]: if set to 1, use a -% speed-optimized array parser when loading an -% array object. The fast array parser may -% collapse block arrays into a single large -% array similar to rules defined in cell2mat; 0 to -% use a legacy parser; if set to a larger-than-1 -% value, this option will specify the minimum -% dimension to enable the fast array parser. For -% example, if the input is a 3D array, setting -% FastArrayParser to 1 will return a 3D array; -% setting to 2 will return a cell array of 2D -% arrays; setting to 3 will return to a 2D cell -% array of 1D vectors; setting to 4 will return a -% 3D cell array. -% opt.ShowProgress [0|1]: if set to 1, loadjson displays a progress bar. -% -% output: -% dat: a cell array, where {...} blocks are converted into cell arrays, -% and [...] are converted to arrays -% -% examples: -% dat=loadjson('{"obj":{"string":"value","array":[1,2,3]}}') -% dat=loadjson(['examples' filesep 'example1.json']) -% dat=loadjson(['examples' filesep 'example1.json'],'SimplifyCell',1) -% -% license: -% BSD or GPL version 3, see LICENSE_{BSD,GPLv3}.txt files for details -% -% -- this function is part of JSONLab toolbox (http://iso2mesh.sf.net/cgi-bin/index.cgi?jsonlab) -% - -global pos inStr len esc index_esc len_esc isoct arraytoken - -if(regexp(fname,'[\{\}\]\[]','once')) - string=fname; -elseif(exist(fname,'file')) - fid = fopen(fname,'rb'); - string = fread(fid,inf,'uint8=>char')'; - fclose(fid); -else - error('input file does not exist'); -end - -pos = 1; len = length(string); inStr = string; -isoct=exist('OCTAVE_VERSION','builtin'); -arraytoken=find(inStr=='[' | inStr==']' | inStr=='"'); -jstr=regexprep(inStr,'\\\\',' '); -escquote=regexp(jstr,'\\"'); -arraytoken=sort([arraytoken escquote]); - -% String delimiters and escape chars identified to improve speed: -esc = find(inStr=='"' | inStr=='\' ); % comparable to: regexp(inStr, '["\\]'); -index_esc = 1; len_esc = length(esc); - -opt=varargin2struct(varargin{:}); - -if(jsonopt('ShowProgress',0,opt)==1) - opt.progressbar_=waitbar(0,'loading ...'); -end -jsoncount=1; -while pos <= len - switch(next_char) - case '{' - data{jsoncount} = parse_object(opt); - case '[' - data{jsoncount} = parse_array(opt); - otherwise - error_pos('Outer level structure must be an object or an array'); - end - jsoncount=jsoncount+1; -end % while - -jsoncount=length(data); -if(jsoncount==1 && iscell(data)) - data=data{1}; -end - -if(~isempty(data)) - if(isstruct(data)) % data can be a struct array - data=jstruct2array(data); - elseif(iscell(data)) - data=jcell2array(data); - end -end -if(isfield(opt,'progressbar_')) - close(opt.progressbar_); -end - -%% -function newdata=jcell2array(data) -len=length(data); -newdata=data; -for i=1:len - if(isstruct(data{i})) - newdata{i}=jstruct2array(data{i}); - elseif(iscell(data{i})) - newdata{i}=jcell2array(data{i}); - end -end - -%%------------------------------------------------------------------------- -function newdata=jstruct2array(data) -fn=fieldnames(data); -newdata=data; -len=length(data); -for i=1:length(fn) % depth-first - for j=1:len - if(isstruct(getfield(data(j),fn{i}))) - newdata(j)=setfield(newdata(j),fn{i},jstruct2array(getfield(data(j),fn{i}))); - end - end -end -if(~isempty(strmatch('x0x5F_ArrayType_',fn)) && ~isempty(strmatch('x0x5F_ArrayData_',fn))) - newdata=cell(len,1); - for j=1:len - ndata=cast(data(j).x0x5F_ArrayData_,data(j).x0x5F_ArrayType_); - iscpx=0; - if(~isempty(strmatch('x0x5F_ArrayIsComplex_',fn))) - if(data(j).x0x5F_ArrayIsComplex_) - iscpx=1; - end - end - if(~isempty(strmatch('x0x5F_ArrayIsSparse_',fn))) - if(data(j).x0x5F_ArrayIsSparse_) - if(~isempty(strmatch('x0x5F_ArraySize_',fn))) - dim=data(j).x0x5F_ArraySize_; - if(iscpx && size(ndata,2)==4-any(dim==1)) - ndata(:,end-1)=complex(ndata(:,end-1),ndata(:,end)); - end - if isempty(ndata) - % All-zeros sparse - ndata=sparse(dim(1),prod(dim(2:end))); - elseif dim(1)==1 - % Sparse row vector - ndata=sparse(1,ndata(:,1),ndata(:,2),dim(1),prod(dim(2:end))); - elseif dim(2)==1 - % Sparse column vector - ndata=sparse(ndata(:,1),1,ndata(:,2),dim(1),prod(dim(2:end))); - else - % Generic sparse array. - ndata=sparse(ndata(:,1),ndata(:,2),ndata(:,3),dim(1),prod(dim(2:end))); - end - else - if(iscpx && size(ndata,2)==4) - ndata(:,3)=complex(ndata(:,3),ndata(:,4)); - end - ndata=sparse(ndata(:,1),ndata(:,2),ndata(:,3)); - end - end - elseif(~isempty(strmatch('x0x5F_ArraySize_',fn))) - if(iscpx && size(ndata,2)==2) - ndata=complex(ndata(:,1),ndata(:,2)); - end - ndata=reshape(ndata(:),data(j).x0x5F_ArraySize_); - end - newdata{j}=ndata; - end - if(len==1) - newdata=newdata{1}; - end -end - -%%------------------------------------------------------------------------- -function object = parse_object(varargin) - parse_char('{'); - object = []; - if next_char ~= '}' - while 1 - str = parseStr(varargin{:}); - if isempty(str) - error_pos('Name of value at position %d cannot be empty'); - end - parse_char(':'); - val = parse_value(varargin{:}); - eval( sprintf( 'object.%s = val;', valid_field(str) ) ); - if next_char == '}' - break; - end - parse_char(','); - end - end - parse_char('}'); - -%%------------------------------------------------------------------------- - -function object = parse_array(varargin) % JSON array is written in row-major order -global pos inStr isoct - parse_char('['); - object = cell(0, 1); - dim2=[]; - arraydepth=jsonopt('JSONLAB_ArrayDepth_',1,varargin{:}); - pbar=jsonopt('progressbar_',-1,varargin{:}); - - if next_char ~= ']' - if(jsonopt('FastArrayParser',1,varargin{:})>=1 && arraydepth>=jsonopt('FastArrayParser',1,varargin{:})) - [endpos, e1l, e1r, maxlevel]=matching_bracket(inStr,pos); - arraystr=['[' inStr(pos:endpos)]; - arraystr=regexprep(arraystr,'"_NaN_"','NaN'); - arraystr=regexprep(arraystr,'"([-+]*)_Inf_"','$1Inf'); - arraystr(arraystr==sprintf('\n'))=[]; - arraystr(arraystr==sprintf('\r'))=[]; - %arraystr=regexprep(arraystr,'\s*,',','); % this is slow,sometimes needed - if(~isempty(e1l) && ~isempty(e1r)) % the array is in 2D or higher D - astr=inStr((e1l+1):(e1r-1)); - astr=regexprep(astr,'"_NaN_"','NaN'); - astr=regexprep(astr,'"([-+]*)_Inf_"','$1Inf'); - astr(astr==sprintf('\n'))=[]; - astr(astr==sprintf('\r'))=[]; - astr(astr==' ')=''; - if(isempty(find(astr=='[', 1))) % array is 2D - dim2=length(sscanf(astr,'%f,',[1 inf])); - end - else % array is 1D - astr=arraystr(2:end-1); - astr(astr==' ')=''; - [obj, count, errmsg, nextidx]=sscanf(astr,'%f,',[1,inf]); - if(nextidx>=length(astr)-1) - object=obj; - pos=endpos; - parse_char(']'); - return; - end - end - if(~isempty(dim2)) - astr=arraystr; - astr(astr=='[')=''; - astr(astr==']')=''; - astr(astr==' ')=''; - [obj, count, errmsg, nextidx]=sscanf(astr,'%f,',inf); - if(nextidx>=length(astr)-1) - object=reshape(obj,dim2,numel(obj)/dim2)'; - pos=endpos; - parse_char(']'); - if(pbar>0) - waitbar(pos/length(inStr),pbar,'loading ...'); - end - return; - end - end - arraystr=regexprep(arraystr,'\]\s*,','];'); - else - arraystr='['; - end - try - if(isoct && regexp(arraystr,'"','once')) - error('Octave eval can produce empty cells for JSON-like input'); - end - object=eval(arraystr); - pos=endpos; - catch - while 1 - newopt=varargin2struct(varargin{:},'JSONLAB_ArrayDepth_',arraydepth+1); - val = parse_value(newopt); - object{end+1} = val; - if next_char == ']' - break; - end - parse_char(','); - end - end - end - if(jsonopt('SimplifyCell',0,varargin{:})==1) - try - oldobj=object; - object=cell2mat(object')'; - if(iscell(oldobj) && isstruct(object) && numel(object)>1 && jsonopt('SimplifyCellArray',1,varargin{:})==0) - object=oldobj; - elseif(size(object,1)>1 && ndims(object)==2) - object=object'; - end - catch - end - end - parse_char(']'); - - if(pbar>0) - waitbar(pos/length(inStr),pbar,'loading ...'); - end -%%------------------------------------------------------------------------- - -function parse_char(c) - global pos inStr len - skip_whitespace; - if pos > len || inStr(pos) ~= c - error_pos(sprintf('Expected %c at position %%d', c)); - else - pos = pos + 1; - skip_whitespace; - end - -%%------------------------------------------------------------------------- - -function c = next_char - global pos inStr len - skip_whitespace; - if pos > len - c = []; - else - c = inStr(pos); - end - -%%------------------------------------------------------------------------- - -function skip_whitespace - global pos inStr len - while pos <= len && isspace(inStr(pos)) - pos = pos + 1; - end - -%%------------------------------------------------------------------------- -function str = parseStr(varargin) - global pos inStr len esc index_esc len_esc - % len, ns = length(inStr), keyboard - if inStr(pos) ~= '"' - error_pos('String starting with " expected at position %d'); - else - pos = pos + 1; - end - str = ''; - while pos <= len - while index_esc <= len_esc && esc(index_esc) < pos - index_esc = index_esc + 1; - end - if index_esc > len_esc - str = [str inStr(pos:len)]; - pos = len + 1; - break; - else - str = [str inStr(pos:esc(index_esc)-1)]; - pos = esc(index_esc); - end - nstr = length(str); switch inStr(pos) - case '"' - pos = pos + 1; - if(~isempty(str)) - if(strcmp(str,'_Inf_')) - str=Inf; - elseif(strcmp(str,'-_Inf_')) - str=-Inf; - elseif(strcmp(str,'_NaN_')) - str=NaN; - end - end - return; - case '\' - if pos+1 > len - error_pos('End of file reached right after escape character'); - end - pos = pos + 1; - switch inStr(pos) - case {'"' '\' '/'} - str(nstr+1) = inStr(pos); - pos = pos + 1; - case {'b' 'f' 'n' 'r' 't'} - str(nstr+1) = sprintf(['\' inStr(pos)]); - pos = pos + 1; - case 'u' - if pos+4 > len - error_pos('End of file reached in escaped unicode character'); - end - str(nstr+(1:6)) = inStr(pos-1:pos+4); - pos = pos + 5; - end - otherwise % should never happen - str(nstr+1) = inStr(pos), keyboard - pos = pos + 1; - end - end - error_pos('End of file while expecting end of inStr'); - -%%------------------------------------------------------------------------- - -function num = parse_number(varargin) - global pos inStr len isoct - currstr=inStr(pos:end); - numstr=0; - if(isoct~=0) - numstr=regexp(currstr,'^\s*-?(?:0|[1-9]\d*)(?:\.\d+)?(?:[eE][+\-]?\d+)?','end'); - [num, one] = sscanf(currstr, '%f', 1); - delta=numstr+1; - else - [num, one, err, delta] = sscanf(currstr, '%f', 1); - if ~isempty(err) - error_pos('Error reading number at position %d'); - end - end - pos = pos + delta-1; - -%%------------------------------------------------------------------------- - -function val = parse_value(varargin) - global pos inStr len - true = 1; false = 0; - - pbar=jsonopt('progressbar_',-1,varargin{:}); - if(pbar>0) - waitbar(pos/len,pbar,'loading ...'); - end - - switch(inStr(pos)) - case '"' - val = parseStr(varargin{:}); - return; - case '[' - val = parse_array(varargin{:}); - return; - case '{' - val = parse_object(varargin{:}); - if isstruct(val) - if(~isempty(strmatch('x0x5F_ArrayType_',fieldnames(val), 'exact'))) - val=jstruct2array(val); - end - elseif isempty(val) - val = struct; - end - return; - case {'-','0','1','2','3','4','5','6','7','8','9'} - val = parse_number(varargin{:}); - return; - case 't' - if pos+3 <= len && strcmpi(inStr(pos:pos+3), 'true') - val = true; - pos = pos + 4; - return; - end - case 'f' - if pos+4 <= len && strcmpi(inStr(pos:pos+4), 'false') - val = false; - pos = pos + 5; - return; - end - case 'n' - if pos+3 <= len && strcmpi(inStr(pos:pos+3), 'null') - val = []; - pos = pos + 4; - return; - end - end - error_pos('Value expected at position %d'); -%%------------------------------------------------------------------------- - -function error_pos(msg) - global pos inStr len - poShow = max(min([pos-15 pos-1 pos pos+20],len),1); - if poShow(3) == poShow(2) - poShow(3:4) = poShow(2)+[0 -1]; % display nothing after - end - msg = [sprintf(msg, pos) ': ' ... - inStr(poShow(1):poShow(2)) '' inStr(poShow(3):poShow(4)) ]; - error( ['JSONparser:invalidFormat: ' msg] ); - -%%------------------------------------------------------------------------- - -function str = valid_field(str) -global isoct -% From MATLAB doc: field names must begin with a letter, which may be -% followed by any combination of letters, digits, and underscores. -% Invalid characters will be converted to underscores, and the prefix -% "x0x[Hex code]_" will be added if the first character is not a letter. - pos=regexp(str,'^[^A-Za-z]','once'); - if(~isempty(pos)) - if(~isoct) - str=regexprep(str,'^([^A-Za-z])','x0x${sprintf(''%X'',unicode2native($1))}_','once'); - else - str=sprintf('x0x%X_%s',char(str(1)),str(2:end)); - end - end - if(isempty(regexp(str,'[^0-9A-Za-z_]', 'once' ))) return; end - if(~isoct) - str=regexprep(str,'([^0-9A-Za-z_])','_0x${sprintf(''%X'',unicode2native($1))}_'); - else - pos=regexp(str,'[^0-9A-Za-z_]'); - if(isempty(pos)) return; end - str0=str; - pos0=[0 pos(:)' length(str)]; - str=''; - for i=1:length(pos) - str=[str str0(pos0(i)+1:pos(i)-1) sprintf('_0x%X_',str0(pos(i)))]; - end - if(pos(end)~=length(str)) - str=[str str0(pos0(end-1)+1:pos0(end))]; - end - end - %str(~isletter(str) & ~('0' <= str & str <= '9')) = '_'; - -%%------------------------------------------------------------------------- -function endpos = matching_quote(str,pos) -len=length(str); -while(pos1 && str(pos-1)=='\')) - endpos=pos; - return; - end - end - pos=pos+1; -end -error('unmatched quotation mark'); -%%------------------------------------------------------------------------- -function [endpos, e1l, e1r, maxlevel] = matching_bracket(str,pos) -global arraytoken -level=1; -maxlevel=level; -endpos=0; -bpos=arraytoken(arraytoken>=pos); -tokens=str(bpos); -len=length(tokens); -pos=1; -e1l=[]; -e1r=[]; -while(pos<=len) - c=tokens(pos); - if(c==']') - level=level-1; - if(isempty(e1r)) e1r=bpos(pos); end - if(level==0) - endpos=bpos(pos); - return - end - end - if(c=='[') - if(isempty(e1l)) e1l=bpos(pos); end - level=level+1; - maxlevel=max(maxlevel,level); - end - if(c=='"') - pos=matching_quote(tokens,pos+1); - end - pos=pos+1; -end -if(endpos==0) - error('unmatched "]"'); -end - diff --git a/src/paradigma/ppg/glob_functions/jsonlab/loadubjson.m b/src/paradigma/ppg/glob_functions/jsonlab/loadubjson.m deleted file mode 100644 index b645517c..00000000 --- a/src/paradigma/ppg/glob_functions/jsonlab/loadubjson.m +++ /dev/null @@ -1,528 +0,0 @@ -function data = loadubjson(fname,varargin) -% -% data=loadubjson(fname,opt) -% or -% data=loadubjson(fname,'param1',value1,'param2',value2,...) -% -% parse a JSON (JavaScript Object Notation) file or string -% -% authors:Qianqian Fang (fangq nmr.mgh.harvard.edu) -% created on 2013/08/01 -% -% $Id: loadubjson.m 460 2015-01-03 00:30:45Z fangq $ -% -% input: -% fname: input file name, if fname contains "{}" or "[]", fname -% will be interpreted as a UBJSON string -% opt: a struct to store parsing options, opt can be replaced by -% a list of ('param',value) pairs - the param string is equivallent -% to a field in opt. opt can have the following -% fields (first in [.|.] is the default) -% -% opt.SimplifyCell [0|1]: if set to 1, loadubjson will call cell2mat -% for each element of the JSON data, and group -% arrays based on the cell2mat rules. -% opt.IntEndian [B|L]: specify the endianness of the integer fields -% in the UBJSON input data. B - Big-Endian format for -% integers (as required in the UBJSON specification); -% L - input integer fields are in Little-Endian order. -% -% output: -% dat: a cell array, where {...} blocks are converted into cell arrays, -% and [...] are converted to arrays -% -% examples: -% obj=struct('string','value','array',[1 2 3]); -% ubjdata=saveubjson('obj',obj); -% dat=loadubjson(ubjdata) -% dat=loadubjson(['examples' filesep 'example1.ubj']) -% dat=loadubjson(['examples' filesep 'example1.ubj'],'SimplifyCell',1) -% -% license: -% BSD or GPL version 3, see LICENSE_{BSD,GPLv3}.txt files for details -% -% -- this function is part of JSONLab toolbox (http://iso2mesh.sf.net/cgi-bin/index.cgi?jsonlab) -% - -global pos inStr len esc index_esc len_esc isoct arraytoken fileendian systemendian - -if(regexp(fname,'[\{\}\]\[]','once')) - string=fname; -elseif(exist(fname,'file')) - fid = fopen(fname,'rb'); - string = fread(fid,inf,'uint8=>char')'; - fclose(fid); -else - error('input file does not exist'); -end - -pos = 1; len = length(string); inStr = string; -isoct=exist('OCTAVE_VERSION','builtin'); -arraytoken=find(inStr=='[' | inStr==']' | inStr=='"'); -jstr=regexprep(inStr,'\\\\',' '); -escquote=regexp(jstr,'\\"'); -arraytoken=sort([arraytoken escquote]); - -% String delimiters and escape chars identified to improve speed: -esc = find(inStr=='"' | inStr=='\' ); % comparable to: regexp(inStr, '["\\]'); -index_esc = 1; len_esc = length(esc); - -opt=varargin2struct(varargin{:}); -fileendian=upper(jsonopt('IntEndian','B',opt)); -[os,maxelem,systemendian]=computer; - -jsoncount=1; -while pos <= len - switch(next_char) - case '{' - data{jsoncount} = parse_object(opt); - case '[' - data{jsoncount} = parse_array(opt); - otherwise - error_pos('Outer level structure must be an object or an array'); - end - jsoncount=jsoncount+1; -end % while - -jsoncount=length(data); -if(jsoncount==1 && iscell(data)) - data=data{1}; -end - -if(~isempty(data)) - if(isstruct(data)) % data can be a struct array - data=jstruct2array(data); - elseif(iscell(data)) - data=jcell2array(data); - end -end - - -%% -function newdata=parse_collection(id,data,obj) - -if(jsoncount>0 && exist('data','var')) - if(~iscell(data)) - newdata=cell(1); - newdata{1}=data; - data=newdata; - end -end - -%% -function newdata=jcell2array(data) -len=length(data); -newdata=data; -for i=1:len - if(isstruct(data{i})) - newdata{i}=jstruct2array(data{i}); - elseif(iscell(data{i})) - newdata{i}=jcell2array(data{i}); - end -end - -%%------------------------------------------------------------------------- -function newdata=jstruct2array(data) -fn=fieldnames(data); -newdata=data; -len=length(data); -for i=1:length(fn) % depth-first - for j=1:len - if(isstruct(getfield(data(j),fn{i}))) - newdata(j)=setfield(newdata(j),fn{i},jstruct2array(getfield(data(j),fn{i}))); - end - end -end -if(~isempty(strmatch('x0x5F_ArrayType_',fn)) && ~isempty(strmatch('x0x5F_ArrayData_',fn))) - newdata=cell(len,1); - for j=1:len - ndata=cast(data(j).x0x5F_ArrayData_,data(j).x0x5F_ArrayType_); - iscpx=0; - if(~isempty(strmatch('x0x5F_ArrayIsComplex_',fn))) - if(data(j).x0x5F_ArrayIsComplex_) - iscpx=1; - end - end - if(~isempty(strmatch('x0x5F_ArrayIsSparse_',fn))) - if(data(j).x0x5F_ArrayIsSparse_) - if(~isempty(strmatch('x0x5F_ArraySize_',fn))) - dim=double(data(j).x0x5F_ArraySize_); - if(iscpx && size(ndata,2)==4-any(dim==1)) - ndata(:,end-1)=complex(ndata(:,end-1),ndata(:,end)); - end - if isempty(ndata) - % All-zeros sparse - ndata=sparse(dim(1),prod(dim(2:end))); - elseif dim(1)==1 - % Sparse row vector - ndata=sparse(1,ndata(:,1),ndata(:,2),dim(1),prod(dim(2:end))); - elseif dim(2)==1 - % Sparse column vector - ndata=sparse(ndata(:,1),1,ndata(:,2),dim(1),prod(dim(2:end))); - else - % Generic sparse array. - ndata=sparse(ndata(:,1),ndata(:,2),ndata(:,3),dim(1),prod(dim(2:end))); - end - else - if(iscpx && size(ndata,2)==4) - ndata(:,3)=complex(ndata(:,3),ndata(:,4)); - end - ndata=sparse(ndata(:,1),ndata(:,2),ndata(:,3)); - end - end - elseif(~isempty(strmatch('x0x5F_ArraySize_',fn))) - if(iscpx && size(ndata,2)==2) - ndata=complex(ndata(:,1),ndata(:,2)); - end - ndata=reshape(ndata(:),data(j).x0x5F_ArraySize_); - end - newdata{j}=ndata; - end - if(len==1) - newdata=newdata{1}; - end -end - -%%------------------------------------------------------------------------- -function object = parse_object(varargin) - parse_char('{'); - object = []; - type=''; - count=-1; - if(next_char == '$') - type=inStr(pos+1); % TODO - pos=pos+2; - end - if(next_char == '#') - pos=pos+1; - count=double(parse_number()); - end - if next_char ~= '}' - num=0; - while 1 - str = parseStr(varargin{:}); - if isempty(str) - error_pos('Name of value at position %d cannot be empty'); - end - %parse_char(':'); - val = parse_value(varargin{:}); - num=num+1; - eval( sprintf( 'object.%s = val;', valid_field(str) ) ); - if next_char == '}' || (count>=0 && num>=count) - break; - end - %parse_char(','); - end - end - if(count==-1) - parse_char('}'); - end - -%%------------------------------------------------------------------------- -function [cid,len]=elem_info(type) -id=strfind('iUIlLdD',type); -dataclass={'int8','uint8','int16','int32','int64','single','double'}; -bytelen=[1,1,2,4,8,4,8]; -if(id>0) - cid=dataclass{id}; - len=bytelen(id); -else - error_pos('unsupported type at position %d'); -end -%%------------------------------------------------------------------------- - - -function [data adv]=parse_block(type,count,varargin) -global pos inStr isoct fileendian systemendian -[cid,len]=elem_info(type); -datastr=inStr(pos:pos+len*count-1); -if(isoct) - newdata=int8(datastr); -else - newdata=uint8(datastr); -end -id=strfind('iUIlLdD',type); -if(id<=5 && fileendian~=systemendian) - newdata=swapbytes(typecast(newdata,cid)); -end -data=typecast(newdata,cid); -adv=double(len*count); - -%%------------------------------------------------------------------------- - - -function object = parse_array(varargin) % JSON array is written in row-major order -global pos inStr isoct - parse_char('['); - object = cell(0, 1); - dim=[]; - type=''; - count=-1; - if(next_char == '$') - type=inStr(pos+1); - pos=pos+2; - end - if(next_char == '#') - pos=pos+1; - if(next_char=='[') - dim=parse_array(varargin{:}); - count=prod(double(dim)); - else - count=double(parse_number()); - end - end - if(~isempty(type)) - if(count>=0) - [object adv]=parse_block(type,count,varargin{:}); - if(~isempty(dim)) - object=reshape(object,dim); - end - pos=pos+adv; - return; - else - endpos=matching_bracket(inStr,pos); - [cid,len]=elem_info(type); - count=(endpos-pos)/len; - [object adv]=parse_block(type,count,varargin{:}); - pos=pos+adv; - parse_char(']'); - return; - end - end - if next_char ~= ']' - while 1 - val = parse_value(varargin{:}); - object{end+1} = val; - if next_char == ']' - break; - end - %parse_char(','); - end - end - if(jsonopt('SimplifyCell',0,varargin{:})==1) - try - oldobj=object; - object=cell2mat(object')'; - if(iscell(oldobj) && isstruct(object) && numel(object)>1 && jsonopt('SimplifyCellArray',1,varargin{:})==0) - object=oldobj; - elseif(size(object,1)>1 && ndims(object)==2) - object=object'; - end - catch - end - end - if(count==-1) - parse_char(']'); - end - -%%------------------------------------------------------------------------- - -function parse_char(c) - global pos inStr len - skip_whitespace; - if pos > len || inStr(pos) ~= c - error_pos(sprintf('Expected %c at position %%d', c)); - else - pos = pos + 1; - skip_whitespace; - end - -%%------------------------------------------------------------------------- - -function c = next_char - global pos inStr len - skip_whitespace; - if pos > len - c = []; - else - c = inStr(pos); - end - -%%------------------------------------------------------------------------- - -function skip_whitespace - global pos inStr len - while pos <= len && isspace(inStr(pos)) - pos = pos + 1; - end - -%%------------------------------------------------------------------------- -function str = parseStr(varargin) - global pos inStr esc index_esc len_esc - % len, ns = length(inStr), keyboard - type=inStr(pos); - if type ~= 'S' && type ~= 'C' && type ~= 'H' - error_pos('String starting with S expected at position %d'); - else - pos = pos + 1; - end - if(type == 'C') - str=inStr(pos); - pos=pos+1; - return; - end - bytelen=double(parse_number()); - if(length(inStr)>=pos+bytelen-1) - str=inStr(pos:pos+bytelen-1); - pos=pos+bytelen; - else - error_pos('End of file while expecting end of inStr'); - end - -%%------------------------------------------------------------------------- - -function num = parse_number(varargin) - global pos inStr len isoct fileendian systemendian - id=strfind('iUIlLdD',inStr(pos)); - if(isempty(id)) - error_pos('expecting a number at position %d'); - end - type={'int8','uint8','int16','int32','int64','single','double'}; - bytelen=[1,1,2,4,8,4,8]; - datastr=inStr(pos+1:pos+bytelen(id)); - if(isoct) - newdata=int8(datastr); - else - newdata=uint8(datastr); - end - if(id<=5 && fileendian~=systemendian) - newdata=swapbytes(typecast(newdata,type{id})); - end - num=typecast(newdata,type{id}); - pos = pos + bytelen(id)+1; - -%%------------------------------------------------------------------------- - -function val = parse_value(varargin) - global pos inStr len - true = 1; false = 0; - - switch(inStr(pos)) - case {'S','C','H'} - val = parseStr(varargin{:}); - return; - case '[' - val = parse_array(varargin{:}); - return; - case '{' - val = parse_object(varargin{:}); - if isstruct(val) - if(~isempty(strmatch('x0x5F_ArrayType_',fieldnames(val), 'exact'))) - val=jstruct2array(val); - end - elseif isempty(val) - val = struct; - end - return; - case {'i','U','I','l','L','d','D'} - val = parse_number(varargin{:}); - return; - case 'T' - val = true; - pos = pos + 1; - return; - case 'F' - val = false; - pos = pos + 1; - return; - case {'Z','N'} - val = []; - pos = pos + 1; - return; - end - error_pos('Value expected at position %d'); -%%------------------------------------------------------------------------- - -function error_pos(msg) - global pos inStr len - poShow = max(min([pos-15 pos-1 pos pos+20],len),1); - if poShow(3) == poShow(2) - poShow(3:4) = poShow(2)+[0 -1]; % display nothing after - end - msg = [sprintf(msg, pos) ': ' ... - inStr(poShow(1):poShow(2)) '' inStr(poShow(3):poShow(4)) ]; - error( ['JSONparser:invalidFormat: ' msg] ); - -%%------------------------------------------------------------------------- - -function str = valid_field(str) -global isoct -% From MATLAB doc: field names must begin with a letter, which may be -% followed by any combination of letters, digits, and underscores. -% Invalid characters will be converted to underscores, and the prefix -% "x0x[Hex code]_" will be added if the first character is not a letter. - pos=regexp(str,'^[^A-Za-z]','once'); - if(~isempty(pos)) - if(~isoct) - str=regexprep(str,'^([^A-Za-z])','x0x${sprintf(''%X'',unicode2native($1))}_','once'); - else - str=sprintf('x0x%X_%s',char(str(1)),str(2:end)); - end - end - if(isempty(regexp(str,'[^0-9A-Za-z_]', 'once' ))) return; end - if(~isoct) - str=regexprep(str,'([^0-9A-Za-z_])','_0x${sprintf(''%X'',unicode2native($1))}_'); - else - pos=regexp(str,'[^0-9A-Za-z_]'); - if(isempty(pos)) return; end - str0=str; - pos0=[0 pos(:)' length(str)]; - str=''; - for i=1:length(pos) - str=[str str0(pos0(i)+1:pos(i)-1) sprintf('_0x%X_',str0(pos(i)))]; - end - if(pos(end)~=length(str)) - str=[str str0(pos0(end-1)+1:pos0(end))]; - end - end - %str(~isletter(str) & ~('0' <= str & str <= '9')) = '_'; - -%%------------------------------------------------------------------------- -function endpos = matching_quote(str,pos) -len=length(str); -while(pos1 && str(pos-1)=='\')) - endpos=pos; - return; - end - end - pos=pos+1; -end -error('unmatched quotation mark'); -%%------------------------------------------------------------------------- -function [endpos e1l e1r maxlevel] = matching_bracket(str,pos) -global arraytoken -level=1; -maxlevel=level; -endpos=0; -bpos=arraytoken(arraytoken>=pos); -tokens=str(bpos); -len=length(tokens); -pos=1; -e1l=[]; -e1r=[]; -while(pos<=len) - c=tokens(pos); - if(c==']') - level=level-1; - if(isempty(e1r)) e1r=bpos(pos); end - if(level==0) - endpos=bpos(pos); - return - end - end - if(c=='[') - if(isempty(e1l)) e1l=bpos(pos); end - level=level+1; - maxlevel=max(maxlevel,level); - end - if(c=='"') - pos=matching_quote(tokens,pos+1); - end - pos=pos+1; -end -if(endpos==0) - error('unmatched "]"'); -end - diff --git a/src/paradigma/ppg/glob_functions/jsonlab/mergestruct.m b/src/paradigma/ppg/glob_functions/jsonlab/mergestruct.m deleted file mode 100644 index ce344ad2..00000000 --- a/src/paradigma/ppg/glob_functions/jsonlab/mergestruct.m +++ /dev/null @@ -1,33 +0,0 @@ -function s=mergestruct(s1,s2) -% -% s=mergestruct(s1,s2) -% -% merge two struct objects into one -% -% authors:Qianqian Fang (fangq nmr.mgh.harvard.edu) -% date: 2012/12/22 -% -% input: -% s1,s2: a struct object, s1 and s2 can not be arrays -% -% output: -% s: the merged struct object. fields in s1 and s2 will be combined in s. -% -% license: -% BSD or GPL version 3, see LICENSE_{BSD,GPLv3}.txt files for details -% -% -- this function is part of jsonlab toolbox (http://iso2mesh.sf.net/cgi-bin/index.cgi?jsonlab) -% - -if(~isstruct(s1) || ~isstruct(s2)) - error('input parameters contain non-struct'); -end -if(length(s1)>1 || length(s2)>1) - error('can not merge struct arrays'); -end -fn=fieldnames(s2); -s=s1; -for i=1:length(fn) - s=setfield(s,fn{i},getfield(s2,fn{i})); -end - diff --git a/src/paradigma/ppg/glob_functions/jsonlab/savejson.m b/src/paradigma/ppg/glob_functions/jsonlab/savejson.m deleted file mode 100644 index a86e9ac9..00000000 --- a/src/paradigma/ppg/glob_functions/jsonlab/savejson.m +++ /dev/null @@ -1,475 +0,0 @@ -function json=savejson(rootname,obj,varargin) -% -% json=savejson(rootname,obj,filename) -% or -% json=savejson(rootname,obj,opt) -% json=savejson(rootname,obj,'param1',value1,'param2',value2,...) -% -% convert a MATLAB object (cell, struct or array) into a JSON (JavaScript -% Object Notation) string -% -% author: Qianqian Fang (fangq nmr.mgh.harvard.edu) -% created on 2011/09/09 -% -% $Id: savejson.m 460 2015-01-03 00:30:45Z fangq $ -% -% input: -% rootname: the name of the root-object, when set to '', the root name -% is ignored, however, when opt.ForceRootName is set to 1 (see below), -% the MATLAB variable name will be used as the root name. -% obj: a MATLAB object (array, cell, cell array, struct, struct array). -% filename: a string for the file name to save the output JSON data. -% opt: a struct for additional options, ignore to use default values. -% opt can have the following fields (first in [.|.] is the default) -% -% opt.FileName [''|string]: a file name to save the output JSON data -% opt.FloatFormat ['%.10g'|string]: format to show each numeric element -% of a 1D/2D array; -% opt.ArrayIndent [1|0]: if 1, output explicit data array with -% precedent indentation; if 0, no indentation -% opt.ArrayToStruct[0|1]: when set to 0, savejson outputs 1D/2D -% array in JSON array format; if sets to 1, an -% array will be shown as a struct with fields -% "_ArrayType_", "_ArraySize_" and "_ArrayData_"; for -% sparse arrays, the non-zero elements will be -% saved to _ArrayData_ field in triplet-format i.e. -% (ix,iy,val) and "_ArrayIsSparse_" will be added -% with a value of 1; for a complex array, the -% _ArrayData_ array will include two columns -% (4 for sparse) to record the real and imaginary -% parts, and also "_ArrayIsComplex_":1 is added. -% opt.ParseLogical [0|1]: if this is set to 1, logical array elem -% will use true/false rather than 1/0. -% opt.NoRowBracket [1|0]: if this is set to 1, arrays with a single -% numerical element will be shown without a square -% bracket, unless it is the root object; if 0, square -% brackets are forced for any numerical arrays. -% opt.ForceRootName [0|1]: when set to 1 and rootname is empty, savejson -% will use the name of the passed obj variable as the -% root object name; if obj is an expression and -% does not have a name, 'root' will be used; if this -% is set to 0 and rootname is empty, the root level -% will be merged down to the lower level. -% opt.Inf ['"$1_Inf_"'|string]: a customized regular expression pattern -% to represent +/-Inf. The matched pattern is '([-+]*)Inf' -% and $1 represents the sign. For those who want to use -% 1e999 to represent Inf, they can set opt.Inf to '$11e999' -% opt.NaN ['"_NaN_"'|string]: a customized regular expression pattern -% to represent NaN -% opt.JSONP [''|string]: to generate a JSONP output (JSON with padding), -% for example, if opt.JSONP='foo', the JSON data is -% wrapped inside a function call as 'foo(...);' -% opt.UnpackHex [1|0]: conver the 0x[hex code] output by loadjson -% back to the string form -% opt.SaveBinary [0|1]: 1 - save the JSON file in binary mode; 0 - text mode. -% opt.Compact [0|1]: 1- out compact JSON format (remove all newlines and tabs) -% -% opt can be replaced by a list of ('param',value) pairs. The param -% string is equivallent to a field in opt and is case sensitive. -% output: -% json: a string in the JSON format (see http://json.org) -% -% examples: -% jsonmesh=struct('MeshNode',[0 0 0;1 0 0;0 1 0;1 1 0;0 0 1;1 0 1;0 1 1;1 1 1],... -% 'MeshTetra',[1 2 4 8;1 3 4 8;1 2 6 8;1 5 6 8;1 5 7 8;1 3 7 8],... -% 'MeshTri',[1 2 4;1 2 6;1 3 4;1 3 7;1 5 6;1 5 7;... -% 2 8 4;2 8 6;3 8 4;3 8 7;5 8 6;5 8 7],... -% 'MeshCreator','FangQ','MeshTitle','T6 Cube',... -% 'SpecialData',[nan, inf, -inf]); -% savejson('jmesh',jsonmesh) -% savejson('',jsonmesh,'ArrayIndent',0,'FloatFormat','\t%.5g') -% -% license: -% BSD or GPL version 3, see LICENSE_{BSD,GPLv3}.txt files for details -% -% -- this function is part of JSONLab toolbox (http://iso2mesh.sf.net/cgi-bin/index.cgi?jsonlab) -% - -if(nargin==1) - varname=inputname(1); - obj=rootname; - if(isempty(varname)) - varname='root'; - end - rootname=varname; -else - varname=inputname(2); -end -if(length(varargin)==1 && ischar(varargin{1})) - opt=struct('FileName',varargin{1}); -else - opt=varargin2struct(varargin{:}); -end -opt.IsOctave=exist('OCTAVE_VERSION','builtin'); -rootisarray=0; -rootlevel=1; -forceroot=jsonopt('ForceRootName',0,opt); -if((isnumeric(obj) || islogical(obj) || ischar(obj) || isstruct(obj) || iscell(obj)) && isempty(rootname) && forceroot==0) - rootisarray=1; - rootlevel=0; -else - if(isempty(rootname)) - rootname=varname; - end -end -if((isstruct(obj) || iscell(obj))&& isempty(rootname) && forceroot) - rootname='root'; -end - -whitespaces=struct('tab',sprintf('\t'),'newline',sprintf('\n'),'sep',sprintf(',\n')); -if(jsonopt('Compact',0,opt)==1) - whitespaces=struct('tab','','newline','','sep',','); -end -if(~isfield(opt,'whitespaces_')) - opt.whitespaces_=whitespaces; -end - -nl=whitespaces.newline; - -json=obj2json(rootname,obj,rootlevel,opt); -if(rootisarray) - json=sprintf('%s%s',json,nl); -else - json=sprintf('{%s%s%s}\n',nl,json,nl); -end - -jsonp=jsonopt('JSONP','',opt); -if(~isempty(jsonp)) - json=sprintf('%s(%s);%s',jsonp,json,nl); -end - -% save to a file if FileName is set, suggested by Patrick Rapin -if(~isempty(jsonopt('FileName','',opt))) - if(jsonopt('SaveBinary',0,opt)==1) - fid = fopen(opt.FileName, 'wb'); - fwrite(fid,json); - else - fid = fopen(opt.FileName, 'wt'); - fwrite(fid,json,'char'); - end - fclose(fid); -end - -%%------------------------------------------------------------------------- -function txt=obj2json(name,item,level,varargin) - -if(iscell(item)) - txt=cell2json(name,item,level,varargin{:}); -elseif(isstruct(item)) - txt=struct2json(name,item,level,varargin{:}); -elseif(ischar(item)) - txt=str2json(name,item,level,varargin{:}); -else - txt=mat2json(name,item,level,varargin{:}); -end - -%%------------------------------------------------------------------------- -function txt=cell2json(name,item,level,varargin) -txt=''; -if(~iscell(item)) - error('input is not a cell'); -end - -dim=size(item); -if(ndims(squeeze(item))>2) % for 3D or higher dimensions, flatten to 2D for now - item=reshape(item,dim(1),numel(item)/dim(1)); - dim=size(item); -end -len=numel(item); -ws=jsonopt('whitespaces_',struct('tab',sprintf('\t'),'newline',sprintf('\n'),'sep',sprintf(',\n')),varargin{:}); -padding0=repmat(ws.tab,1,level); -padding2=repmat(ws.tab,1,level+1); -nl=ws.newline; -if(len>1) - if(~isempty(name)) - txt=sprintf('%s"%s": [%s',padding0, checkname(name,varargin{:}),nl); name=''; - else - txt=sprintf('%s[%s',padding0,nl); - end -elseif(len==0) - if(~isempty(name)) - txt=sprintf('%s"%s": []',padding0, checkname(name,varargin{:})); name=''; - else - txt=sprintf('%s[]',padding0); - end -end -for j=1:dim(2) - if(dim(1)>1) txt=sprintf('%s%s[%s',txt,padding2,nl); end - for i=1:dim(1) - txt=sprintf('%s%s',txt,obj2json(name,item{i,j},level+(dim(1)>1)+1,varargin{:})); - if(i1) txt=sprintf('%s%s%s]',txt,nl,padding2); end - if(j1) txt=sprintf('%s%s%s]',txt,nl,padding0); end - -%%------------------------------------------------------------------------- -function txt=struct2json(name,item,level,varargin) -txt=''; -if(~isstruct(item)) - error('input is not a struct'); -end -dim=size(item); -if(ndims(squeeze(item))>2) % for 3D or higher dimensions, flatten to 2D for now - item=reshape(item,dim(1),numel(item)/dim(1)); - dim=size(item); -end -len=numel(item); -ws=struct('tab',sprintf('\t'),'newline',sprintf('\n')); -ws=jsonopt('whitespaces_',ws,varargin{:}); -padding0=repmat(ws.tab,1,level); -padding2=repmat(ws.tab,1,level+1); -padding1=repmat(ws.tab,1,level+(dim(1)>1)+(len>1)); -nl=ws.newline; - -if(~isempty(name)) - if(len>1) txt=sprintf('%s"%s": [%s',padding0,checkname(name,varargin{:}),nl); end -else - if(len>1) txt=sprintf('%s[%s',padding0,nl); end -end -for j=1:dim(2) - if(dim(1)>1) txt=sprintf('%s%s[%s',txt,padding2,nl); end - for i=1:dim(1) - names = fieldnames(item(i,j)); - if(~isempty(name) && len==1) - txt=sprintf('%s%s"%s": {%s',txt,padding1, checkname(name,varargin{:}),nl); - else - txt=sprintf('%s%s{%s',txt,padding1,nl); - end - if(~isempty(names)) - for e=1:length(names) - txt=sprintf('%s%s',txt,obj2json(names{e},getfield(item(i,j),... - names{e}),level+(dim(1)>1)+1+(len>1),varargin{:})); - if(e1) txt=sprintf('%s%s%s]',txt,nl,padding2); end - if(j1) txt=sprintf('%s%s%s]',txt,nl,padding0); end - -%%------------------------------------------------------------------------- -function txt=str2json(name,item,level,varargin) -txt=''; -if(~ischar(item)) - error('input is not a string'); -end -item=reshape(item, max(size(item),[1 0])); -len=size(item,1); -ws=struct('tab',sprintf('\t'),'newline',sprintf('\n'),'sep',sprintf(',\n')); -ws=jsonopt('whitespaces_',ws,varargin{:}); -padding1=repmat(ws.tab,1,level); -padding0=repmat(ws.tab,1,level+1); -nl=ws.newline; -sep=ws.sep; - -if(~isempty(name)) - if(len>1) txt=sprintf('%s"%s": [%s',padding1,checkname(name,varargin{:}),nl); end -else - if(len>1) txt=sprintf('%s[%s',padding1,nl); end -end -isoct=jsonopt('IsOctave',0,varargin{:}); -for e=1:len - if(isoct) - val=regexprep(item(e,:),'\\','\\'); - val=regexprep(val,'"','\"'); - val=regexprep(val,'^"','\"'); - else - val=regexprep(item(e,:),'\\','\\\\'); - val=regexprep(val,'"','\\"'); - val=regexprep(val,'^"','\\"'); - end - val=escapejsonstring(val); - if(len==1) - obj=['"' checkname(name,varargin{:}) '": ' '"',val,'"']; - if(isempty(name)) obj=['"',val,'"']; end - txt=sprintf('%s%s%s%s',txt,padding1,obj); - else - txt=sprintf('%s%s%s%s',txt,padding0,['"',val,'"']); - end - if(e==len) sep=''; end - txt=sprintf('%s%s',txt,sep); -end -if(len>1) txt=sprintf('%s%s%s%s',txt,nl,padding1,']'); end - -%%------------------------------------------------------------------------- -function txt=mat2json(name,item,level,varargin) -if(~isnumeric(item) && ~islogical(item)) - error('input is not an array'); -end -ws=struct('tab',sprintf('\t'),'newline',sprintf('\n'),'sep',sprintf(',\n')); -ws=jsonopt('whitespaces_',ws,varargin{:}); -padding1=repmat(ws.tab,1,level); -padding0=repmat(ws.tab,1,level+1); -nl=ws.newline; -sep=ws.sep; - -if(length(size(item))>2 || issparse(item) || ~isreal(item) || ... - isempty(item) ||jsonopt('ArrayToStruct',0,varargin{:})) - if(isempty(name)) - txt=sprintf('%s{%s%s"_ArrayType_": "%s",%s%s"_ArraySize_": %s,%s',... - padding1,nl,padding0,class(item),nl,padding0,regexprep(mat2str(size(item)),'\s+',','),nl); - else - txt=sprintf('%s"%s": {%s%s"_ArrayType_": "%s",%s%s"_ArraySize_": %s,%s',... - padding1,checkname(name,varargin{:}),nl,padding0,class(item),nl,padding0,regexprep(mat2str(size(item)),'\s+',','),nl); - end -else - if(numel(item)==1 && jsonopt('NoRowBracket',1,varargin{:})==1 && level>0) - numtxt=regexprep(regexprep(matdata2json(item,level+1,varargin{:}),'^\[',''),']',''); - else - numtxt=matdata2json(item,level+1,varargin{:}); - end - if(isempty(name)) - txt=sprintf('%s%s',padding1,numtxt); - else - if(numel(item)==1 && jsonopt('NoRowBracket',1,varargin{:})==1) - txt=sprintf('%s"%s": %s',padding1,checkname(name,varargin{:}),numtxt); - else - txt=sprintf('%s"%s": %s',padding1,checkname(name,varargin{:}),numtxt); - end - end - return; -end -dataformat='%s%s%s%s%s'; - -if(issparse(item)) - [ix,iy]=find(item); - data=full(item(find(item))); - if(~isreal(item)) - data=[real(data(:)),imag(data(:))]; - if(size(item,1)==1) - % Kludge to have data's 'transposedness' match item's. - % (Necessary for complex row vector handling below.) - data=data'; - end - txt=sprintf(dataformat,txt,padding0,'"_ArrayIsComplex_": ','1', sep); - end - txt=sprintf(dataformat,txt,padding0,'"_ArrayIsSparse_": ','1', sep); - if(size(item,1)==1) - % Row vector, store only column indices. - txt=sprintf(dataformat,txt,padding0,'"_ArrayData_": ',... - matdata2json([iy(:),data'],level+2,varargin{:}), nl); - elseif(size(item,2)==1) - % Column vector, store only row indices. - txt=sprintf(dataformat,txt,padding0,'"_ArrayData_": ',... - matdata2json([ix,data],level+2,varargin{:}), nl); - else - % General case, store row and column indices. - txt=sprintf(dataformat,txt,padding0,'"_ArrayData_": ',... - matdata2json([ix,iy,data],level+2,varargin{:}), nl); - end -else - if(isreal(item)) - txt=sprintf(dataformat,txt,padding0,'"_ArrayData_": ',... - matdata2json(item(:)',level+2,varargin{:}), nl); - else - txt=sprintf(dataformat,txt,padding0,'"_ArrayIsComplex_": ','1', sep); - txt=sprintf(dataformat,txt,padding0,'"_ArrayData_": ',... - matdata2json([real(item(:)) imag(item(:))],level+2,varargin{:}), nl); - end -end -txt=sprintf('%s%s%s',txt,padding1,'}'); - -%%------------------------------------------------------------------------- -function txt=matdata2json(mat,level,varargin) - -ws=struct('tab',sprintf('\t'),'newline',sprintf('\n'),'sep',sprintf(',\n')); -ws=jsonopt('whitespaces_',ws,varargin{:}); -tab=ws.tab; -nl=ws.newline; - -if(size(mat,1)==1) - pre=''; - post=''; - level=level-1; -else - pre=sprintf('[%s',nl); - post=sprintf('%s%s]',nl,repmat(tab,1,level-1)); -end - -if(isempty(mat)) - txt='null'; - return; -end -floatformat=jsonopt('FloatFormat','%.10g',varargin{:}); -%if(numel(mat)>1) - formatstr=['[' repmat([floatformat ','],1,size(mat,2)-1) [floatformat sprintf('],%s',nl)]]; -%else -% formatstr=[repmat([floatformat ','],1,size(mat,2)-1) [floatformat sprintf(',\n')]]; -%end - -if(nargin>=2 && size(mat,1)>1 && jsonopt('ArrayIndent',1,varargin{:})==1) - formatstr=[repmat(tab,1,level) formatstr]; -end - -txt=sprintf(formatstr,mat'); -txt(end-length(nl):end)=[]; -if(islogical(mat) && jsonopt('ParseLogical',0,varargin{:})==1) - txt=regexprep(txt,'1','true'); - txt=regexprep(txt,'0','false'); -end -%txt=regexprep(mat2str(mat),'\s+',','); -%txt=regexprep(txt,';',sprintf('],\n[')); -% if(nargin>=2 && size(mat,1)>1) -% txt=regexprep(txt,'\[',[repmat(sprintf('\t'),1,level) '[']); -% end -txt=[pre txt post]; -if(any(isinf(mat(:)))) - txt=regexprep(txt,'([-+]*)Inf',jsonopt('Inf','"$1_Inf_"',varargin{:})); -end -if(any(isnan(mat(:)))) - txt=regexprep(txt,'NaN',jsonopt('NaN','"_NaN_"',varargin{:})); -end - -%%------------------------------------------------------------------------- -function newname=checkname(name,varargin) -isunpack=jsonopt('UnpackHex',1,varargin{:}); -newname=name; -if(isempty(regexp(name,'0x([0-9a-fA-F]+)_','once'))) - return -end -if(isunpack) - isoct=jsonopt('IsOctave',0,varargin{:}); - if(~isoct) - newname=regexprep(name,'(^x|_){1}0x([0-9a-fA-F]+)_','${native2unicode(hex2dec($2))}'); - else - pos=regexp(name,'(^x|_){1}0x([0-9a-fA-F]+)_','start'); - pend=regexp(name,'(^x|_){1}0x([0-9a-fA-F]+)_','end'); - if(isempty(pos)) return; end - str0=name; - pos0=[0 pend(:)' length(name)]; - newname=''; - for i=1:length(pos) - newname=[newname str0(pos0(i)+1:pos(i)-1) char(hex2dec(str0(pos(i)+3:pend(i)-1)))]; - end - if(pos(end)~=length(name)) - newname=[newname str0(pos0(end-1)+1:pos0(end))]; - end - end -end - -%%------------------------------------------------------------------------- -function newstr=escapejsonstring(str) -newstr=str; -isoct=exist('OCTAVE_VERSION','builtin'); -if(isoct) - vv=sscanf(OCTAVE_VERSION,'%f'); - if(vv(1)>=3.8) isoct=0; end -end -if(isoct) - escapechars={'\a','\f','\n','\r','\t','\v'}; - for i=1:length(escapechars); - newstr=regexprep(newstr,escapechars{i},escapechars{i}); - end -else - escapechars={'\a','\b','\f','\n','\r','\t','\v'}; - for i=1:length(escapechars); - newstr=regexprep(newstr,escapechars{i},regexprep(escapechars{i},'\\','\\\\')); - end -end diff --git a/src/paradigma/ppg/glob_functions/jsonlab/saveubjson.m b/src/paradigma/ppg/glob_functions/jsonlab/saveubjson.m deleted file mode 100644 index ab47c70f..00000000 --- a/src/paradigma/ppg/glob_functions/jsonlab/saveubjson.m +++ /dev/null @@ -1,504 +0,0 @@ -function json=saveubjson(rootname,obj,varargin) -% -% json=saveubjson(rootname,obj,filename) -% or -% json=saveubjson(rootname,obj,opt) -% json=saveubjson(rootname,obj,'param1',value1,'param2',value2,...) -% -% convert a MATLAB object (cell, struct or array) into a Universal -% Binary JSON (UBJSON) binary string -% -% author: Qianqian Fang (fangq nmr.mgh.harvard.edu) -% created on 2013/08/17 -% -% $Id: saveubjson.m 460 2015-01-03 00:30:45Z fangq $ -% -% input: -% rootname: the name of the root-object, when set to '', the root name -% is ignored, however, when opt.ForceRootName is set to 1 (see below), -% the MATLAB variable name will be used as the root name. -% obj: a MATLAB object (array, cell, cell array, struct, struct array) -% filename: a string for the file name to save the output UBJSON data -% opt: a struct for additional options, ignore to use default values. -% opt can have the following fields (first in [.|.] is the default) -% -% opt.FileName [''|string]: a file name to save the output JSON data -% opt.ArrayToStruct[0|1]: when set to 0, saveubjson outputs 1D/2D -% array in JSON array format; if sets to 1, an -% array will be shown as a struct with fields -% "_ArrayType_", "_ArraySize_" and "_ArrayData_"; for -% sparse arrays, the non-zero elements will be -% saved to _ArrayData_ field in triplet-format i.e. -% (ix,iy,val) and "_ArrayIsSparse_" will be added -% with a value of 1; for a complex array, the -% _ArrayData_ array will include two columns -% (4 for sparse) to record the real and imaginary -% parts, and also "_ArrayIsComplex_":1 is added. -% opt.ParseLogical [1|0]: if this is set to 1, logical array elem -% will use true/false rather than 1/0. -% opt.NoRowBracket [1|0]: if this is set to 1, arrays with a single -% numerical element will be shown without a square -% bracket, unless it is the root object; if 0, square -% brackets are forced for any numerical arrays. -% opt.ForceRootName [0|1]: when set to 1 and rootname is empty, saveubjson -% will use the name of the passed obj variable as the -% root object name; if obj is an expression and -% does not have a name, 'root' will be used; if this -% is set to 0 and rootname is empty, the root level -% will be merged down to the lower level. -% opt.JSONP [''|string]: to generate a JSONP output (JSON with padding), -% for example, if opt.JSON='foo', the JSON data is -% wrapped inside a function call as 'foo(...);' -% opt.UnpackHex [1|0]: conver the 0x[hex code] output by loadjson -% back to the string form -% -% opt can be replaced by a list of ('param',value) pairs. The param -% string is equivallent to a field in opt and is case sensitive. -% output: -% json: a binary string in the UBJSON format (see http://ubjson.org) -% -% examples: -% jsonmesh=struct('MeshNode',[0 0 0;1 0 0;0 1 0;1 1 0;0 0 1;1 0 1;0 1 1;1 1 1],... -% 'MeshTetra',[1 2 4 8;1 3 4 8;1 2 6 8;1 5 6 8;1 5 7 8;1 3 7 8],... -% 'MeshTri',[1 2 4;1 2 6;1 3 4;1 3 7;1 5 6;1 5 7;... -% 2 8 4;2 8 6;3 8 4;3 8 7;5 8 6;5 8 7],... -% 'MeshCreator','FangQ','MeshTitle','T6 Cube',... -% 'SpecialData',[nan, inf, -inf]); -% saveubjson('jsonmesh',jsonmesh) -% saveubjson('jsonmesh',jsonmesh,'meshdata.ubj') -% -% license: -% BSD or GPL version 3, see LICENSE_{BSD,GPLv3}.txt files for details -% -% -- this function is part of JSONLab toolbox (http://iso2mesh.sf.net/cgi-bin/index.cgi?jsonlab) -% - -if(nargin==1) - varname=inputname(1); - obj=rootname; - if(isempty(varname)) - varname='root'; - end - rootname=varname; -else - varname=inputname(2); -end -if(length(varargin)==1 && ischar(varargin{1})) - opt=struct('FileName',varargin{1}); -else - opt=varargin2struct(varargin{:}); -end -opt.IsOctave=exist('OCTAVE_VERSION','builtin'); -rootisarray=0; -rootlevel=1; -forceroot=jsonopt('ForceRootName',0,opt); -if((isnumeric(obj) || islogical(obj) || ischar(obj) || isstruct(obj) || iscell(obj)) && isempty(rootname) && forceroot==0) - rootisarray=1; - rootlevel=0; -else - if(isempty(rootname)) - rootname=varname; - end -end -if((isstruct(obj) || iscell(obj))&& isempty(rootname) && forceroot) - rootname='root'; -end -json=obj2ubjson(rootname,obj,rootlevel,opt); -if(~rootisarray) - json=['{' json '}']; -end - -jsonp=jsonopt('JSONP','',opt); -if(~isempty(jsonp)) - json=[jsonp '(' json ')']; -end - -% save to a file if FileName is set, suggested by Patrick Rapin -if(~isempty(jsonopt('FileName','',opt))) - fid = fopen(opt.FileName, 'wb'); - fwrite(fid,json); - fclose(fid); -end - -%%------------------------------------------------------------------------- -function txt=obj2ubjson(name,item,level,varargin) - -if(iscell(item)) - txt=cell2ubjson(name,item,level,varargin{:}); -elseif(isstruct(item)) - txt=struct2ubjson(name,item,level,varargin{:}); -elseif(ischar(item)) - txt=str2ubjson(name,item,level,varargin{:}); -else - txt=mat2ubjson(name,item,level,varargin{:}); -end - -%%------------------------------------------------------------------------- -function txt=cell2ubjson(name,item,level,varargin) -txt=''; -if(~iscell(item)) - error('input is not a cell'); -end - -dim=size(item); -if(ndims(squeeze(item))>2) % for 3D or higher dimensions, flatten to 2D for now - item=reshape(item,dim(1),numel(item)/dim(1)); - dim=size(item); -end -len=numel(item); % let's handle 1D cell first -if(len>1) - if(~isempty(name)) - txt=[S_(checkname(name,varargin{:})) '[']; name=''; - else - txt='['; - end -elseif(len==0) - if(~isempty(name)) - txt=[S_(checkname(name,varargin{:})) 'Z']; name=''; - else - txt='Z'; - end -end -for j=1:dim(2) - if(dim(1)>1) txt=[txt '[']; end - for i=1:dim(1) - txt=[txt obj2ubjson(name,item{i,j},level+(len>1),varargin{:})]; - end - if(dim(1)>1) txt=[txt ']']; end -end -if(len>1) txt=[txt ']']; end - -%%------------------------------------------------------------------------- -function txt=struct2ubjson(name,item,level,varargin) -txt=''; -if(~isstruct(item)) - error('input is not a struct'); -end -dim=size(item); -if(ndims(squeeze(item))>2) % for 3D or higher dimensions, flatten to 2D for now - item=reshape(item,dim(1),numel(item)/dim(1)); - dim=size(item); -end -len=numel(item); - -if(~isempty(name)) - if(len>1) txt=[S_(checkname(name,varargin{:})) '[']; end -else - if(len>1) txt='['; end -end -for j=1:dim(2) - if(dim(1)>1) txt=[txt '[']; end - for i=1:dim(1) - names = fieldnames(item(i,j)); - if(~isempty(name) && len==1) - txt=[txt S_(checkname(name,varargin{:})) '{']; - else - txt=[txt '{']; - end - if(~isempty(names)) - for e=1:length(names) - txt=[txt obj2ubjson(names{e},getfield(item(i,j),... - names{e}),level+(dim(1)>1)+1+(len>1),varargin{:})]; - end - end - txt=[txt '}']; - end - if(dim(1)>1) txt=[txt ']']; end -end -if(len>1) txt=[txt ']']; end - -%%------------------------------------------------------------------------- -function txt=str2ubjson(name,item,level,varargin) -txt=''; -if(~ischar(item)) - error('input is not a string'); -end -item=reshape(item, max(size(item),[1 0])); -len=size(item,1); - -if(~isempty(name)) - if(len>1) txt=[S_(checkname(name,varargin{:})) '[']; end -else - if(len>1) txt='['; end -end -isoct=jsonopt('IsOctave',0,varargin{:}); -for e=1:len - val=item(e,:); - if(len==1) - obj=['' S_(checkname(name,varargin{:})) '' '',S_(val),'']; - if(isempty(name)) obj=['',S_(val),'']; end - txt=[txt,'',obj]; - else - txt=[txt,'',['',S_(val),'']]; - end -end -if(len>1) txt=[txt ']']; end - -%%------------------------------------------------------------------------- -function txt=mat2ubjson(name,item,level,varargin) -if(~isnumeric(item) && ~islogical(item)) - error('input is not an array'); -end - -if(length(size(item))>2 || issparse(item) || ~isreal(item) || ... - isempty(item) || jsonopt('ArrayToStruct',0,varargin{:})) - cid=I_(uint32(max(size(item)))); - if(isempty(name)) - txt=['{' S_('_ArrayType_'),S_(class(item)),S_('_ArraySize_'),I_a(size(item),cid(1)) ]; - else - if(isempty(item)) - txt=[S_(checkname(name,varargin{:})),'Z']; - return; - else - txt=[S_(checkname(name,varargin{:})),'{',S_('_ArrayType_'),S_(class(item)),S_('_ArraySize_'),I_a(size(item),cid(1))]; - end - end -else - if(isempty(name)) - txt=matdata2ubjson(item,level+1,varargin{:}); - else - if(numel(item)==1 && jsonopt('NoRowBracket',1,varargin{:})==1) - numtxt=regexprep(regexprep(matdata2ubjson(item,level+1,varargin{:}),'^\[',''),']',''); - txt=[S_(checkname(name,varargin{:})) numtxt]; - else - txt=[S_(checkname(name,varargin{:})),matdata2ubjson(item,level+1,varargin{:})]; - end - end - return; -end -if(issparse(item)) - [ix,iy]=find(item); - data=full(item(find(item))); - if(~isreal(item)) - data=[real(data(:)),imag(data(:))]; - if(size(item,1)==1) - % Kludge to have data's 'transposedness' match item's. - % (Necessary for complex row vector handling below.) - data=data'; - end - txt=[txt,S_('_ArrayIsComplex_'),'T']; - end - txt=[txt,S_('_ArrayIsSparse_'),'T']; - if(size(item,1)==1) - % Row vector, store only column indices. - txt=[txt,S_('_ArrayData_'),... - matdata2ubjson([iy(:),data'],level+2,varargin{:})]; - elseif(size(item,2)==1) - % Column vector, store only row indices. - txt=[txt,S_('_ArrayData_'),... - matdata2ubjson([ix,data],level+2,varargin{:})]; - else - % General case, store row and column indices. - txt=[txt,S_('_ArrayData_'),... - matdata2ubjson([ix,iy,data],level+2,varargin{:})]; - end -else - if(isreal(item)) - txt=[txt,S_('_ArrayData_'),... - matdata2ubjson(item(:)',level+2,varargin{:})]; - else - txt=[txt,S_('_ArrayIsComplex_'),'T']; - txt=[txt,S_('_ArrayData_'),... - matdata2ubjson([real(item(:)) imag(item(:))],level+2,varargin{:})]; - end -end -txt=[txt,'}']; - -%%------------------------------------------------------------------------- -function txt=matdata2ubjson(mat,level,varargin) -if(isempty(mat)) - txt='Z'; - return; -end -if(size(mat,1)==1) - level=level-1; -end -type=''; -hasnegtive=(mat<0); -if(isa(mat,'integer') || isinteger(mat) || (isfloat(mat) && all(mod(mat(:),1) == 0))) - if(isempty(hasnegtive)) - if(max(mat(:))<=2^8) - type='U'; - end - end - if(isempty(type)) - % todo - need to consider negative ones separately - id= histc(abs(max(mat(:))),[0 2^7 2^15 2^31 2^63]); - if(isempty(find(id))) - error('high-precision data is not yet supported'); - end - key='iIlL'; - type=key(find(id)); - end - txt=[I_a(mat(:),type,size(mat))]; -elseif(islogical(mat)) - logicalval='FT'; - if(numel(mat)==1) - txt=logicalval(mat+1); - else - txt=['[$U#' I_a(size(mat),'l') typecast(swapbytes(uint8(mat(:)')),'uint8')]; - end -else - if(numel(mat)==1) - txt=['[' D_(mat) ']']; - else - txt=D_a(mat(:),'D',size(mat)); - end -end - -%txt=regexprep(mat2str(mat),'\s+',','); -%txt=regexprep(txt,';',sprintf('],[')); -% if(nargin>=2 && size(mat,1)>1) -% txt=regexprep(txt,'\[',[repmat(sprintf('\t'),1,level) '[']); -% end -if(any(isinf(mat(:)))) - txt=regexprep(txt,'([-+]*)Inf',jsonopt('Inf','"$1_Inf_"',varargin{:})); -end -if(any(isnan(mat(:)))) - txt=regexprep(txt,'NaN',jsonopt('NaN','"_NaN_"',varargin{:})); -end - -%%------------------------------------------------------------------------- -function newname=checkname(name,varargin) -isunpack=jsonopt('UnpackHex',1,varargin{:}); -newname=name; -if(isempty(regexp(name,'0x([0-9a-fA-F]+)_','once'))) - return -end -if(isunpack) - isoct=jsonopt('IsOctave',0,varargin{:}); - if(~isoct) - newname=regexprep(name,'(^x|_){1}0x([0-9a-fA-F]+)_','${native2unicode(hex2dec($2))}'); - else - pos=regexp(name,'(^x|_){1}0x([0-9a-fA-F]+)_','start'); - pend=regexp(name,'(^x|_){1}0x([0-9a-fA-F]+)_','end'); - if(isempty(pos)) return; end - str0=name; - pos0=[0 pend(:)' length(name)]; - newname=''; - for i=1:length(pos) - newname=[newname str0(pos0(i)+1:pos(i)-1) char(hex2dec(str0(pos(i)+3:pend(i)-1)))]; - end - if(pos(end)~=length(name)) - newname=[newname str0(pos0(end-1)+1:pos0(end))]; - end - end -end -%%------------------------------------------------------------------------- -function val=S_(str) -if(length(str)==1) - val=['C' str]; -else - val=['S' I_(int32(length(str))) str]; -end -%%------------------------------------------------------------------------- -function val=I_(num) -if(~isinteger(num)) - error('input is not an integer'); -end -if(num>=0 && num<255) - val=['U' data2byte(swapbytes(cast(num,'uint8')),'uint8')]; - return; -end -key='iIlL'; -cid={'int8','int16','int32','int64'}; -for i=1:4 - if((num>0 && num<2^(i*8-1)) || (num<0 && num>=-2^(i*8-1))) - val=[key(i) data2byte(swapbytes(cast(num,cid{i})),'uint8')]; - return; - end -end -error('unsupported integer'); - -%%------------------------------------------------------------------------- -function val=D_(num) -if(~isfloat(num)) - error('input is not a float'); -end - -if(isa(num,'single')) - val=['d' data2byte(num,'uint8')]; -else - val=['D' data2byte(num,'uint8')]; -end -%%------------------------------------------------------------------------- -function data=I_a(num,type,dim,format) -id=find(ismember('iUIlL',type)); - -if(id==0) - error('unsupported integer array'); -end - -% based on UBJSON specs, all integer types are stored in big endian format - -if(id==1) - data=data2byte(swapbytes(int8(num)),'uint8'); - blen=1; -elseif(id==2) - data=data2byte(swapbytes(uint8(num)),'uint8'); - blen=1; -elseif(id==3) - data=data2byte(swapbytes(int16(num)),'uint8'); - blen=2; -elseif(id==4) - data=data2byte(swapbytes(int32(num)),'uint8'); - blen=4; -elseif(id==5) - data=data2byte(swapbytes(int64(num)),'uint8'); - blen=8; -end - -if(nargin>=3 && length(dim)>=2 && prod(dim)~=dim(2)) - format='opt'; -end -if((nargin<4 || strcmp(format,'opt')) && numel(num)>1) - if(nargin>=3 && (length(dim)==1 || (length(dim)>=2 && prod(dim)~=dim(2)))) - cid=I_(uint32(max(dim))); - data=['$' type '#' I_a(dim,cid(1)) data(:)']; - else - data=['$' type '#' I_(int32(numel(data)/blen)) data(:)']; - end - data=['[' data(:)']; -else - data=reshape(data,blen,numel(data)/blen); - data(2:blen+1,:)=data; - data(1,:)=type; - data=data(:)'; - data=['[' data(:)' ']']; -end -%%------------------------------------------------------------------------- -function data=D_a(num,type,dim,format) -id=find(ismember('dD',type)); - -if(id==0) - error('unsupported float array'); -end - -if(id==1) - data=data2byte(single(num),'uint8'); -elseif(id==2) - data=data2byte(double(num),'uint8'); -end - -if(nargin>=3 && length(dim)>=2 && prod(dim)~=dim(2)) - format='opt'; -end -if((nargin<4 || strcmp(format,'opt')) && numel(num)>1) - if(nargin>=3 && (length(dim)==1 || (length(dim)>=2 && prod(dim)~=dim(2)))) - cid=I_(uint32(max(dim))); - data=['$' type '#' I_a(dim,cid(1)) data(:)']; - else - data=['$' type '#' I_(int32(numel(data)/(id*4))) data(:)']; - end - data=['[' data]; -else - data=reshape(data,(id*4),length(data)/(id*4)); - data(2:(id*4+1),:)=data; - data(1,:)=type; - data=data(:)'; - data=['[' data(:)' ']']; -end -%%------------------------------------------------------------------------- -function bytes=data2byte(varargin) -bytes=typecast(varargin{:}); -bytes=bytes(:)'; diff --git a/src/paradigma/ppg/glob_functions/jsonlab/varargin2struct.m b/src/paradigma/ppg/glob_functions/jsonlab/varargin2struct.m deleted file mode 100644 index 43c27af4..00000000 --- a/src/paradigma/ppg/glob_functions/jsonlab/varargin2struct.m +++ /dev/null @@ -1,40 +0,0 @@ -function opt=varargin2struct(varargin) -% -% opt=varargin2struct('param1',value1,'param2',value2,...) -% or -% opt=varargin2struct(...,optstruct,...) -% -% convert a series of input parameters into a structure -% -% authors:Qianqian Fang (fangq nmr.mgh.harvard.edu) -% date: 2012/12/22 -% -% input: -% 'param', value: the input parameters should be pairs of a string and a value -% optstruct: if a parameter is a struct, the fields will be merged to the output struct -% -% output: -% opt: a struct where opt.param1=value1, opt.param2=value2 ... -% -% license: -% BSD or GPL version 3, see LICENSE_{BSD,GPLv3}.txt files for details -% -% -- this function is part of jsonlab toolbox (http://iso2mesh.sf.net/cgi-bin/index.cgi?jsonlab) -% - -len=length(varargin); -opt=struct; -if(len==0) return; end -i=1; -while(i<=len) - if(isstruct(varargin{i})) - opt=mergestruct(opt,varargin{i}); - elseif(ischar(varargin{i}) && i then based on ppg_prob alone! -end - -epoch_length = 6; % in seconds -overlap = 5; % in seconds - -% Number of samples in epoch -samples_per_epoch = epoch_length * fs; - -% Calculate number of samples to shift for each epoch -samples_shift = (epoch_length - overlap) * fs; -n_samples = (length(ppg_prob) + overlap) * fs; -data_prob = zeros(n_samples,1); - -prob_array = ppg_prob; -imu_array = imu_label; - -for i = 1:n_samples - start_idx = ceil((i-(samples_per_epoch-samples_shift))/fs); %start_idx for the non starting and ending epochs is equal to ceil((data idx - n_overlap)/fs) - end_idx = ceil(i/fs); - - %%-----Correct for first and last 6s epochs (those have less than 6 epochs to calculate labels and prob)-----%% - if start_idx < 1 - start_idx = 1; % The first 5 epochs indices start at 1 - elseif end_idx>length(prob_array) - end_idx = length(prob_array); % The last 5 epochs indices end at the last label - end - - prob = prob_array(start_idx:end_idx); - label_imu = imu_array(start_idx:end_idx); - data_prob(i) = mean(prob); - data_label_imu(i) = int8(mean(label_imu) >= 0.5); % Perform majority voting -end - -data_prob(data_label_imu==0) = 0; % Set prob to zero if majority voting of IMU is 0 - -end \ No newline at end of file diff --git a/src/paradigma/ppg/glob_functions/synchronization.m b/src/paradigma/ppg/glob_functions/synchronization.m deleted file mode 100644 index 46560685..00000000 --- a/src/paradigma/ppg/glob_functions/synchronization.m +++ /dev/null @@ -1,76 +0,0 @@ -function [segment_ppg_total, segment_imu_total] = synchronization(ppg_meta, imu_meta) -% K.I. Veldkamp, PhD student AI4P, 29-02-24 -% This function checks data availability between PPG and IMU and returns -% the synchronized indices - -% Convert start and end times to datetime objects -ppg_start_time = datetime({ppg_meta.start_iso8601}', 'InputFormat', 'yyyy-MM-dd''T''HH:mm:ssZ', 'Format', 'yyyy-MM-dd''T''HH:mm:ss', 'TimeZone', 'UTC'); -imu_start_time = datetime({imu_meta.start_iso8601}', 'InputFormat', 'yyyy-MM-dd''T''HH:mm:ssZ', 'Format', 'yyyy-MM-dd''T''HH:mm:ss', 'TimeZone', 'UTC'); -ppg_end_time = datetime({ppg_meta.end_iso8601}', 'InputFormat', 'yyyy-MM-dd''T''HH:mm:ssZ', 'Format', 'yyyy-MM-dd''T''HH:mm:ss', 'TimeZone', 'UTC'); -imu_end_time = datetime({imu_meta.end_iso8601}', 'InputFormat', 'yyyy-MM-dd''T''HH:mm:ssZ', 'Format', 'yyyy-MM-dd''T''HH:mm:ss', 'TimeZone', 'UTC'); - -% Create a time vector covering the entire range -time_vector_total = datetime(min([imu_start_time; ppg_start_time]), 'Format', 'yyyy-MM-dd HH:mm:ss'):seconds(1):datetime(max([imu_end_time; ppg_end_time]), 'Format', 'yyyy-MM-dd HH:mm:ss'); - -% Initialize variables -data_presence_ppg = zeros(size(time_vector_total)); -data_presence_ppg_idx = zeros(size(time_vector_total)); -data_presence_imu = zeros(size(time_vector_total)); -data_presence_imu_idx = zeros(size(time_vector_total)); - -% Mark the segments of PPG data with 1 -for i = 1:length(ppg_start_time) - indices = time_vector_total >= ppg_start_time(i) & time_vector_total < ppg_end_time(i); - data_presence_ppg(indices) = 1; - data_presence_ppg_idx(indices) = i; -end - -% Mark the segments of IMU data with 1 -for i = 1:length(imu_start_time) - indices = time_vector_total >= imu_start_time(i) & time_vector_total < imu_end_time(i); - data_presence_imu(indices) = 1; - data_presence_imu_idx(indices) = i; -end - -% Find the indices where both PPG and IMU data are present -corr_indices = find(data_presence_ppg == 1 & data_presence_imu == 1); - -% Find the start and end indices of each segment -corr_start_end = []; -start_idx = corr_indices(1); -for i = 2:length(corr_indices) - if corr_indices(i) - corr_indices(i-1) > 1 - end_idx = corr_indices(i-1); - corr_start_end = [corr_start_end; start_idx, end_idx]; - start_idx = corr_indices(i); - end -end - -% Add the last segment -if ~isempty(corr_indices) - corr_start_end = [corr_start_end; start_idx, corr_indices(end)]; -end - -% Extract the synchronized indices for each segment -segment_ppg_total = []; -segment_imu_total = []; -for i = 1:size(corr_start_end,1) - start_idx = corr_start_end(i,1); - end_idx = corr_start_end(i,2); - segment_ppg = unique(data_presence_ppg_idx(start_idx:end_idx))'; - segment_imu = unique(data_presence_imu_idx(start_idx:end_idx))'; - if length(segment_ppg) > 1 & length(segment_imu) == 1 - segment_ppg_total = [segment_ppg_total; segment_ppg]; - segment_imu_total = [segment_imu_total; segment_imu*ones(length(segment_ppg),1)]; - elseif length(segment_ppg) == 1 & length(segment_imu) > 1 - segment_ppg_total = [segment_ppg_total; segment_ppg*ones(length(segment_imu),1)]; - segment_imu_total = [segment_imu_total; segment_imu]; - elseif length(segment_ppg) == length(segment_imu) - segment_ppg_total = [segment_ppg_total; segment_ppg]; - segment_imu_total = [segment_imu_total; segment_imu]; - else - continue - end -end - -end \ No newline at end of file diff --git a/src/paradigma/ppg/glob_functions/tsdf_scan_meta.m b/src/paradigma/ppg/glob_functions/tsdf_scan_meta.m deleted file mode 100644 index ff4eed77..00000000 --- a/src/paradigma/ppg/glob_functions/tsdf_scan_meta.m +++ /dev/null @@ -1,22 +0,0 @@ -function tsdf = tsdf_scan_meta(tsdf_data_full_path) -% K.I. Veldkamp, PhD student AI4P, 29-02-24 -% For each given TSDB directory, transcribe TSDF metadata contents to SQL -% table --> function specific for toolbox data structure -tsdf = []; -irow = 1; - -meta_list = dir(fullfile(tsdf_data_full_path, '*_meta.json')); -meta_filenames = {meta_list.name}; - -jsonobj = {}; -for n = 1:length(meta_filenames) - tsdb_meta_fullpath = fullfile(tsdf_data_full_path, meta_filenames{n}); - jsonstr = fileread(tsdb_meta_fullpath); - jsonobj{n} = loadjson(jsonstr); - tsdf(irow).tsdf_meta_fullpath = tsdb_meta_fullpath; - tsdf(irow).subject_id = jsonobj{n}.subject_id; - tsdf(irow).start_iso8601 = jsonobj{n}.start_iso8601; - tsdf(irow).end_iso8601 = jsonobj{n}.end_iso8601; - irow = irow + 1; -end - diff --git a/src/paradigma/ppg/hr_functions/Long_TFD_JOT.m b/src/paradigma/ppg/hr_functions/Long_TFD_JOT.m deleted file mode 100644 index e55d080c..00000000 --- a/src/paradigma/ppg/hr_functions/Long_TFD_JOT.m +++ /dev/null @@ -1,38 +0,0 @@ -%% Implementation using the toolbox of J. O'Toole - -% Only the essential code is used. The function nonsep_gdtfd is code from -% the toolbox of J. O'Toole: Copyright © 2014, John M. O Toole, University College Cork. All rights reserved. -function HR_smooth_tfd = Long_TFD_JOT(rel_ppg_tfd, MA, fs, kern_type, kern_params) - -tfd = nonsep_gdtfd(rel_ppg_tfd, kern_type, kern_params); % for now the wigner ville distribution but one could also use the smoothed pseudo WVD --> returns matrix of size NxN - -if MA.value == 1 - input = tfd'; - tfd = filtfilt(MA.FC,1,input); - tfd = tfd.'; -end - -%%----- Get time and frequency axis for tfd-----%% -[~,M]=size(tfd); -Ntime=size(tfd,1); - -ntime=1:Ntime; ntime=ntime./fs-1/fs; % time array -ntime=round(ntime, 10); % to overcome floating point inconsistencies -Mh=ceil(M); -k=linspace(0,0.5,Mh); -k=k.*fs; % frequency array - -%%---Estimate HR using same approach as for given tfd----%% -[~, k_idx] = max(tfd, [], 1); - - -count = 0; - -for i = 2:2:length(rel_ppg_tfd)/fs-4 % starting at 2 and ending at length -4 to discard the first and last 2 sec of the WVD which are influenced by boundary effects - count = count + 1; - rel_wvd_idx = ntime>=i & ntime then based on ppg_prob alone! - end - - edge_add = 4; % adding an additional 4 sec (2 s to both sides) to overcome boundary effects/discontinuities of the WVD, in SPWVD this effect is already diminished due to a double kernel function - epoch_length = tfd_length + edge_add; - segment_length = (length(rel_ppg_tfd)-edge_add*fs)/fs; % substract the 4 added sec to obtain the original segment length - - if segment_length > epoch_length - n_segments = floor(segment_length/tfd_length); %% Dit moet aangepast worden!! - else - n_segments = 1; % for HR segments which are shorter than 30 s due to uneven start and end of the segment which can make the segment 28 s if 1 s is substracted - end - - ppg_segments = cell(n_segments,1); - - for i = 1:n_segments % Split segments in 30 s PPG epochs - - if i ~= n_segments - ppg_segments{i} = rel_ppg_tfd(1 + (i-1)*tfd_length*fs: (i*tfd_length+edge_add)*fs); - - else - - ppg_segments{i} = rel_ppg_tfd(1 + (i-1)*tfd_length*fs:end); - - end - - end - - HR_smooth_tfd = []; - - for j = 1:n_segments % Calculate the HR - ppg = ppg_segments{j}; - HR_tfd = Long_TFD_JOT(ppg, MA, fs, kern_type, kern_params); - HR_smooth_tfd = [HR_smooth_tfd; HR_tfd]; - end - \ No newline at end of file diff --git a/src/paradigma/ppg/hr_functions/TFD toolbox JOT/.gitignore b/src/paradigma/ppg/hr_functions/TFD toolbox JOT/.gitignore deleted file mode 100644 index 6b4d9904..00000000 --- a/src/paradigma/ppg/hr_functions/TFD toolbox JOT/.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -todo_list.org -full_TFDs/full_gdtfd_testing_version.m -notes_decimated_GDTFD_algorithms.org -docs_pdf_readme/ diff --git a/src/paradigma/ppg/hr_functions/TFD toolbox JOT/CHANGELOG.md b/src/paradigma/ppg/hr_functions/TFD toolbox JOT/CHANGELOG.md deleted file mode 100644 index 08c603ff..00000000 --- a/src/paradigma/ppg/hr_functions/TFD toolbox JOT/CHANGELOG.md +++ /dev/null @@ -1,23 +0,0 @@ -# Change Log -All notable changes to this project will be documented in this file. Project started -2014-04-22 but this log started 2017-05-30, after version 0.2.3. More details can be found -in the git logs. - - -## unreleased -### Changed -- implemented modified-B distribution in 'nonsep' section, - e.g. tf=full_tfd(x,'nonsep',{'mb',0.01}); but is better to use lag-independent version, - i.e. tf=full_tfd(x,'LI,{length(x)-1,'cosh',0.01}); -### Removed -### Fixed -- input argument (Ntime) when calling LI kernel from full_tfd.m (was incorrectly passing - Nfreq) -- bug fix in `gen_lag_kern.m` and `gen_Doppler_kern.m` for windows `gauss`, `cosh`, `tukey` as -default value was 0; now use Matlab will use default value -- missing `shiftWin` function (centres window) in `gen_lag_kern.m` and -`gen_Doppler_kern.m` (only used if 5 parameters in window cell); now added -### Added -- this CHANGELOG.md! -- windows: `blackmanharris`, `chebwin`, and `nuttall` (in `get_window.m`) - diff --git a/src/paradigma/ppg/hr_functions/TFD toolbox JOT/LICENCE.md b/src/paradigma/ppg/hr_functions/TFD toolbox JOT/LICENCE.md deleted file mode 100644 index 7cc20295..00000000 --- a/src/paradigma/ppg/hr_functions/TFD toolbox JOT/LICENCE.md +++ /dev/null @@ -1,27 +0,0 @@ -Copyright (c) 2014, John M. O' Toole, University College Cork -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - - Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above copyright notice, this - list of conditions and the following disclaimer in the documentation and/or - other materials provided with the distribution. - - Neither the name of the University College Cork nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/src/paradigma/ppg/hr_functions/TFD toolbox JOT/README.md b/src/paradigma/ppg/hr_functions/TFD toolbox JOT/README.md deleted file mode 100644 index 2a841e4b..00000000 --- a/src/paradigma/ppg/hr_functions/TFD toolbox JOT/README.md +++ /dev/null @@ -1,251 +0,0 @@ -# Fast and Memory-Efficient Algorithms for Quadratic Time–Frequency Distributions - -A collection of M-files to compute time–frequency distributions from the quadratic class -[[1] and [2]](#references). Memory and computational load is limited by controlling the level of over-sampling for the TFD. Oversampling in the TFD is proportional to signal length and bandwidth of the Doppler–lag kernel. Algorithms are optimised to four kernel types: nonseparable, separable, lag-independent, and Doppler-independent kernels. - -Also included are algorithms to compute decimated, or sub-sampled, TFDs. Again, these -algorithms are specific to the four kernel types but compute approximate TFDs by a process -of decimatation. - -Requires Matlab or Octave (programming environments). - -Latest version available at [memeff_TFDs homepage](http://otoolej.github.io/code/memeff_TFDs/). - - -# Contents -- [quick start](#quick-start) -- [description](#description) -- [files](#files) -- [computational load](#computational-load) -- [requirements](#requirements) -- [test computer setup](#test-computer-setup) -- [licence](#licence) -- [references](#references) -- [contact](#contact) - - -# quick start -First, add paths using the `load_curdir` function: -```matlab - >> load_curdir; -``` - -# description - -There are two sets of TFD algorithms: one set computes oversampled TFDs and the other -set computes decimated (sub-sampled or undersampled) TFDs. The first set, for computing -oversampled TFDs, has four algorithms for specific kernel types, namely the -- non-separable kernel, -- separable kernel, -- Doppler-independent (DI) kernel, -- and lag-independent (LI) kernel. - -The function to generate these oversampled TFDs is `full_tfd.m`. The following -examples, using a test signal, illustrates usage: - -```matlab - % generate test signal: - N=512; - x=gen_LFM(N,0.1,0.3) + gen_LFM(N,0.4,0.04); - - % nonseparable kernel (Choi-Williams kernel): - tf=full_tfd(x,'nonsep',{'cw',10}); - figure(1); clf; vtfd(tf,x); - - % separable kernel: - tf=full_tfd(x,'sep',{{51,'hann'},{101,'hann'}},256,256); - figure(2); clf; vtfd(tf,x); - - % Doppler-independent kernel: - tf=full_tfd(x,'DI',{101,'hann'},[],256); - figure(3); clf; vtfd(tf,x); - - % lag-independent kernel: - tf=full_tfd(x,'LI',{51,'hann'},256,[]); - figure(4); clf; vtfd(tf,x); -``` -![Examples of oversampled TFDs](pics/full_TFDs_examples.png) -Type `help full_tfd` for more details. - -Likewise, the algorithms for decimated TFDs are specific to the four kernel types. The -function `dec_tfd` computes the decimated TFDs, as the following examples show: - -```matlab - N=1024; Ntime=64; Nfreq=128; - a=2; b=2; - ni=[100:2:900]; ki=[150:2:850]; - - x=gen_LFM(N,0.1,0.3)+gen_LFM(N,0.4,0.1); - - % non-separable kernel: - c=dec_tfd(x,'nonsep',{'cw',100},N,N,a*4,b*4); - figure(1); clf; vtfd(c,x); - - % separable kernel: - c=dec_tfd(x,'sep',{{51,'hann'},{101,'hann'}},Ntime,Nfreq,a,b); - figure(2); clf; vtfd(c,x); - - % Doppler-independent kernel: - c=dec_tfd(x,'DI',{101,'hann'},N,Nfreq,ni,b); - figure(3); clf; vtfd(c,x,1,ni); - - % lag-independent kernel: - c=dec_tfd(x,'LI',{51,'hann'},Ntime,N,a,ki); - figure(4); clf; vtfd(c,x,1,[],ki./(N*2)); -``` -![Examples of decimated TFDs](pics/decimated_TFDs_examples.png) - -Type `help dec_tfd` for more details on this function. - - -# files -All Matlab files (.m files) have a description and an example in the header. To read this -header, type `help ` in Matlab. Directory structure is as follows: -``` -├── common # directory: files to generate kernel functions -├── decimated_TFDs # directory: files to generate decimated TFD for the 4 kernel types -├── dec_tfd.m # file: compute decimated TFDs -├── full_tfd.m # file: compute oversampled TFDs -├── full_TFDs # directory: files to generate oversampled TFD for the 4 kernel types -├── LICENCE.md # file: licence file -├── load_curdir.m # file: adds paths for matlab/octave -├── README.md # file: this README file -└── utils # directory: miscellaneous files -``` - - -# computational load - -The computational load is measured in terms of the number of FFTs required to compute the -TFD. Memory load is measured as the total memory required to compute and store the -TFD. The real-valued signal (i.e. input signal) is of length N. - -Computational load for the oversampled TFDs (using `full_tfd.m`) is as follows for the -four kernel types: - -| kernel-type | computational load | memory (real-valued points) | -|---------------|------------------------------|-----------------------------| -| non-separable | 3N²/2 logâ‚‚ N | N² | -| LI | NNtime/2 logâ‚‚ Ntime | Ntime × N | -| DI | NNfreq/2 logâ‚‚ Nfreq | N × Nfreq | -| separable | Pâ‚•(N logâ‚‚N +Ntime logâ‚‚Ntime) | Ntime × Nfreq | -| | + NtimeNfreq/2 logâ‚‚ Nfreq | | - -assuming the FFT of length-N signal requires Nlogâ‚‚N computations and using the notation: - -| symbol | explanation | -|--------|-------------------------------------------------------------| -| N | length of signal | -| Ntime | length of TFD in time direction | -| Nfreq | length of TFD in frequency direction | -| Pâ‚• | Pâ‚• = P/2, where P is the length of the lag window | - -And for the decimated TFDs (using `dec_tfd.m`): - -| kernel-type | computational load | memory (real-valued points) | grid | -|---------------|------------------------------|-----------------------------|----------| -| non-separable | N²/2 logâ‚‚ N + LJ/2 logâ‚‚ J | L × J | Ï[an,bn] | -| LI | VLtime/2 logâ‚‚ Ltime | Ltime × V | Ï[an,káµ¢] | -| DI | UJfreq/2 logâ‚‚ Jfreq | U × Jfreq | Ï[náµ¢,bk] | -| separable | JfreqN/2 logâ‚‚N | Ltime × Jfreq | Ï[an,bn] | -| | + LtimeJfreq logâ‚‚ LtimeJfreq | | | - -using the extra notation: - -| symbol | explanation | -|--------|-------------------------------------------------------------| -| U | length of sequence náµ¢ {náµ¢ for 1<=i<=U}, U<=N and 0<=náµ¢<=N-1 | -| V | length of sequence káµ¢ {káµ¢ for 1<=i<=V}, V<=N and 0<=káµ¢<=N-1 | -| J | N/b, b is decimation integer in frequency direction | -| L | N/a, a is decimation integer in time direction | -| Jfreq | Nfreq/b, b is decimation integer in frequency direction | -| Ltime | Ntime/a, a is decimation integer in time direction | - - -# requirements -Either Matlab (R2012 or newer, -[Mathworks website](http://www.mathworks.co.uk/products/matlab/)) or Octave (v3.6 or -newer, [Octave website](http://www.gnu.org/software/octave/index.html), with the -'octave-signal' add-on package). - - -# test computer setup -- hardware: Intel(R) Xeon(R) CPU E5-1603 0 @ 2.80GHz; 8GB memory. -- operating system: Ubuntu GNU/Linux x86_64 distribution (Trusty Tahr, 14.04), with Linux - kernel 3.13.0-27-generic -- software: Octave 3.8.1 (using Gnuplot 4.6 patchlevel 4), with 'octave-signal' toolbox - and Matlab (R2009b, R2012a, and R2013a) - ---- - -# licence - -``` -Copyright (c) 2014, John M. O' Toole, University College Cork -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - - Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above copyright notice, this - list of conditions and the following disclaimer in the documentation and/or - other materials provided with the distribution. - - Neither the name of the University College Cork nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -``` - - -# references - -1. J.M. O' Toole and B. Boashash, “Memory Efficient Algorithms for Quadratic TFDsâ€, - Chapter 6.6; in Time–Frequency Signal Processing and Analysis: A - Comprenhensive Reference, Second Edition, Academic Press, pp. 374–385, 2016 (ISBN: 9780123984999). - -2. J.M. O' Toole and B. Boashash, "Fast and memory-efficient algorithms for computing - quadratic time–frequency distributions", Applied and Computational Harmonic Analysis, - vol. 35, no. 2, pp. 350–358, 2013. - -3. J.M. Oʼ Toole, M. Mesbah, and B. Boashash, “Improved discrete definition of quadratic - time–frequency distributions,†IEEE Transactions on Signal Processing, vol. 58, - Feb. 2010, pp. 906-911. - -4. J.M. O' Toole, M. Mesbah, and B. Boashash, "A New Discrete Analytic Signal for Reducing - Aliasing in the Discrete Wigner-Ville Distribution", IEEE Transactions on Signal - Processing, vol. 56, no. 11, pp. 5427-5434, Nov. 2008. - -5. J.M. Oʼ Toole, M. Mesbah, and B. Boashash, “Algorithms for discrete quadratic - time–frequency distributions,†WSEAS Transactions on Signal Processing, vol. 4, - May. 2008, pp. 320-329. - - ---- - -# contact - -John M. O' Toole - -Neonatal Brain Research Group, -Irish Centre for Maternal and Child Health Research [(INFANT)](https://www.infantcentre.ie/), -Department of Paediatrics and Child Health, -Cork University Hospital, -University College Cork, -Ireland - -- email: jotoole -AT- ucc DOT ie - diff --git a/src/paradigma/ppg/hr_functions/TFD toolbox JOT/README.pdf b/src/paradigma/ppg/hr_functions/TFD toolbox JOT/README.pdf deleted file mode 100644 index 10dfaed6a583727af05fb23ee41cb0bf96688add..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 457441 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≷)BS>*4U?o7b38W{G9eoDoK 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 zft e)^oO({%TIB!CP+hrJV7mbq)g>g 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

i_!beA@Hj^>J%CH& zD}e#08gR^W7S!(_B$K2oAs%e@B(cRL=}J(>{wXPC^;saa*$5EYmWRn0yit5JlcyUe zb3FHvI@iy)cPv%+!b=}h%!1NV>v5K-iK5RGYIv8w@Sq0bjfrSQxqcJ?THKGi(M6Qu zD9d7&qf-wF>0C-=MVlS;a>{GP!IhrY$}>xXLyZC_&!f++U)5M z3_%z#$Qpav>^2d0s;Uk7aTKua*O2-Q5Oo=IJKRL#=+91hGn9u8{wC>Hb zzJFoAt&%L7Y-#N7AG@5(>n|hCDJNbE<2GNNOC;MmP;4qCo!sSxoNvW9muZ0jn;_q_ zzIx)qhW2r8nH9~YKXioEujJYp2??6(lqjW%8?4{Bg(Wm0&0fBa87Kks2Z9FWW*$(2 zScH8=i)jznw0^$hm-YU-`8q-D;hPb3$J6=agiVy+a-IwM0aDI^dI;6d$XYB>%5^Q) zV)Iw&t#1+dUsfCY%QnAdFaHnC6W<~o;2c%QccJM4bhQ-y2B}hl784W8k@dNMGHK!P z&ZCZY)3%3#EgIU7vmDPZC-l%EFaB^v*`kP@U7Df|A)ijMJg;vr3>ePBp~PiF7jeF3 zSdD>Rb!k)-sJ9C$6IqOVdVMbYQ zX&;>{V(lP`ecB77lW(D;5Zbe$*16SR(7H`S$vUml(R1e+&oE|2Y0=6m2SS$VtSnjs z=g79%2^JO>;=Dgc?!{;i_Jk#xtfUeM6X4;-KJ5ZVW+qy9FSfja!c$+p)q3)$;NzLD zHMEHTd@BU|GrJ#GE zP#_Nh%+x-()!f4u_U19(Oq91H4&G`koxX_e$Z2VgFQs3>ZUENBWDu83fH)Ng>-5&B zk=bqPcrU=KYB1x)oTwx^U3W9~^1Z3`e8hEd;M}jVRNQ$YNs~0}w<-(Wy9rg>!O)pd z_>|QGv8qw)%1yKYENsvJAYjqLx_EuPs4r{t5|kVKV3W*l3w=fR;54e{?1}<-?dB#~ z-a&MN=`eudZme769lWMRhPgO9CnaJA77+Al=;!kRNhV1y z<(FyuJlz`K4;}*n81V~ffTnH@e+c^&)}kPD!8oc|XIpfkD>rH+T9UvuBB-@!2SqI# zC&qpkS{sLggncqdsh^i|BCRFnX#lby<*NsZ;8v^+QUx|jMxX@aHmD2-W~W7a`|l0Y zX<1Kplb|BJ-K7qAQFs|{0POclZ~bdmNq<(z#_C|&*<5>q*Pz`-o2|P?JrE8~@!=6- zKb=TRAXSt@9B{ko7fBTxQ9q^n;mSEEOs+#iFgU!^BzhJPbgF5k?Ck!63%LD)TEwK-fT;k#ns2CJ@~g%Q z?(K=PbxZF>HX+^%(EOIhwnNH1w$F-&UVm$PKGv`k{r@5Qe(@C^Z*6qcc3#j*f@>%I zBl_Z7#E9gB5P-XXT|O0@zX-(iz}O%g8=z<8HBA3Za(grsdMJcUy<25eORWTpc173I zT+8>)ED{+8-4h=^i?9CxyhV0Smi_zN{RJ+?fch78Zv3J?pM3(zk~X=U^)_qIAHS1& z`MCNqZ@q5gWajv}?_tUH-IY8^FWKI{)s($+tGVFV9U!3}xsH`x*MCq~Hu~5%yXqYttnZ^aC z-Gg@~3W7vC?wejmJ#fHN+c|^dq$izhG-vkN(O1>JzZ5yV${*PGiW1O>JPJRU6dwfk1_4%=3S zE<}WV?^P5ErRFyUsFV5mEpac1|K$(*QY!`CH%*25ZMItOMDc$4&YuMfo^!r@qh2$+ zF=S%%{;lMsXLDJ8-QiAMsIaCr%=Yo+`q=d7iM5uWA7;C1OFQQi*y&>R(40MXoUZEp zVk)667bJ(8Zh`sNUnSxAfENsmj}HgwM8`q)RTZa>ed}K`#TsFic1^pYIDl{f;Q1fS zP58MY5Q6}wj7$X*pI@(l z)+EwD_c5Q|&f*z!3!;o0O8Wm~{7s{#i31zQ(fY&3J8rXKcM$g@QBk}`-MbBD*q z#-^rheAEfAwJUy_47t(iH>C{Ue})w&MoAl?J2q5e?;+7W%`guo7+E=Z%Bb!P>-+(F ztrDchIH(m$=P~#%p(;Fb|F;TI9i2FNVK1K{{$>Xed`1M_{>2uTd&Hh@=o;%8`eUcc zv*Eb}&E#jWR})V?@4x!qm~2$4lCYVEL7ThZ3!b`wo`s$~0x~PtCPan=9;Xj9d;lntqLgor z+rHBHyP=Wg;#HX7Plz--{@hq2#YE-`M>0fDpD+QoKc$b0b4%ek_Dy)o?#f(XHV8~1 z5)+_cmM5Q=>sWLR-qw0jA28fduo z;{a4R_71X(({rW7!ltj^lfBQG`Vu|_yQLz6>g(HP``xdbZ~bBG;$>oUF2T&8l7bZ# z3vzN~Uy%D_-h&F{ zHD!yF1e2TXFkB!l_p+lE7b%a&i%$N&;V-}4!Pc{L?oX@lZ{^fA{y5fhQ#BD-GcufH9iALQi%*k@lV zSI%a0b`GxxnnX8zD3q1AY(Ju2yQ|~d&R8lx9add=9U|9ouL$)+oi38%wj&iTHIqfi zGVnP~Oa-BvvpYxDR|&&~UBa17vk$JER+nF3cS5RpF6zdtYnyUf*7?6(!S^rfh^D0A z`+fY)Z}Juw!IG*u3J*78aSsJ;BWg*QS98)A{#lDG7)V6XIeLG6NP^8*;IIaasv6qmVMi zAk33HAq}l~7y=ar&r7`N+^g_OFD<3GvX?`4eG>$JsKGwO+aXn?gs=cYW*>ps(Eue$kHU;C_O+E%qN^4Me0Ch`SKZV;>R;?^-R>_aHp_-{ZSkaiNg&9c4%XIX103ZQ!Z;0ftmu( zXDP=6z!i|5^aT1>jr&1~mB1tZr=IAXjO-saI7%?hN8-S+YdDR9Ic`h>r;@qFImp!U zG)+W#wH(1H2n=0X+14m0=0fSibMoHA>%^dhX-=%p8g`z2t^Ae-Nt<#;mP%eGrmMXJ zn($X9+DU;&%=?S>QySmiz&wcqiqipL=I4D(9f+aFAC!5)Z$2F{5{;bbYO3I$&(QnhFzwD;{9n9V032-GY#!{d?nsG45ea}B(+HaCsf}VEYijP_ z4*9_Y&~`URSnZK2EPE^6p{!~Cm4zK8b8Oxp$S%}!pi;Z^BY8X-=YmtmNF?;xpG$~j zx~O^c*o7(;W=F0k^0-YynotX@o~ZPkA=jU%hOvyWxpS`JGO(V0?COZ9hOUw8gnrQ9 zbokfJXK4TU_v*v@xto?x&80(R32o#QQ zJg;H6)N~|#xdo}S2}jQlvpF0r><5Vf?I81uUk=q|8cHj7)`{fjqM(1c!L6syj!p*x zy*JetuGnGEUo*z3>I;;hO@BGIBql&x`4S;RZg;902$aEn(j~WKrFym6!PZYfnOMFb zM?IjS60`MTeDCJS4B`vt)8V1zV+RGXM)TJe9@*bJcXq6Y+qir~Um_=q+Cc#)i8BTD8c}TBm=&`vv1HlM-a zZs!}Ix`PA(^w_w|R_8Buk`E~bR?G}8z@SY$CQ~UM7Vp=5s47^nkiLNl`4NcHf&ry1 z#y7FPQk<95KcV-%_KMg2Xzs^gueLb@2APv&&pe)N=a{p0YfGSO(k}3FNZyVlZB?#V z7yD_&RN*^;)t%a2P7PHb{1m|;%HJy@t)E2lhC$O#0WXNY8FLWy`G^-t2K={1RZE*_ zyQ^6uQjl;=g4qQ}2sA&{5#y-C5xj2nb-wx?U(spf#M(c~?SuDc;+eUxyHeSiFQ11P z`vr2`c4LeKa^^7l+Io+K$An z;mUHd_4Bo%D*W<`fVWD@F`kwMi5@7c357dcvE%*OJ6m0u_i^8yYWm`>LXDa|fG)wS zNUmj-}#V7{|t_WV;o>|@0|Zv z$wByeClLDDk@(^IO@;9%O+k2At#N;st?f}MxWh*5!#kKJ{iDijw>T^g!O!)KPQsV? zU%i|{vI)Ejuax0Ok?dna_v3k`f_PbQ@MSat!Y-9g;11>4;X{^_c+gr>(R2o zt1yMT8E~?Pg>Z}Cf24(dw;r<#!)Ze72b9cle*)bAfus~Z<+B#mztM#88sH=XAj%{# zESn0{`tO%vb>{alY6iD&2QcY4f`eL3{y9~4$w2K~Gv;WUqDy;A9>$wl3$(`p+;~R` z>5P2HWFYxV5vp$_iK>%~j{C2jX`(~?%i3>`zj^7PkkaCH+kp4eILlB`nefpM`)5}V zZ;L-raLOB6rfxpz*|8jClCkv|_N5+=H{p21$IyNMujBsu>vPfvC~4>p?!VASrM{3F zm|)gVR5dQM)))2WS!*@fsAo?u?IHWu@&)3dzICzHz8~Iv`ldNvNcN~Ig6+VLPhOFw zEN(3I=bin=bv|p~lVjwl2iRpVoqP8-mKHY{&VdOO*YVH`$&c`Tn|W$LJ6C)%0glYI zhipgJ1T-~Tm+7rpnPy&~TNUcQ^X~SK1&hs0+94}|8Tjb~v=awCM=4PCXkJjmVWxNf ztp>N&Fzg*!r0f5^0zuUIMYpaJ(%`2%(BAAigbOPzB*zSovNvq#PH>byPxSNRHqhG7 z3FT~K^30@N6{daaNys^YoMD{i&m8&Or#dEVb#{wz%f7bkm@w2nf!x9ubKz=WW#Do7 zfRC$;e>c6y^Se=@&|@Cs{M?4mHiR2!9=m5oZRbh(!#nbFL8F8!?=$kCC3`M9zqqI1 z4%qsbzX2+F756NI%k&KT>tv;&w$DJrcKjkQZyTSV^{zDQyLj~lD0;V6ebLmU9`nUx z!MogIytmfi%d4hk2M4VE+2^&ZA4jm1FQ?lhYwA}n(}`E7+x|SJnA9igmyM2xnGQUd z(Liy?Ra@ZV)#Ztoi$8iRtFFdsAYIUWJ&Iqerpf9$2q2CHdMI1o`Uzi@6;Z;&oGcX% zXSMz1%5s1$U8#N@M>vaHIgm$D$UP!@yUlC2PDtAU%zJUay9+ z{}rO18PveF#r($OPNj!3$nxe{?jBaE@BX9tDz*}IAk*_3*w*Q)rawldHvRrZMP#I)wkAr$vuL4N zVyxT(kp1iTmpEvPru+L_+*!*H(Ch{Ak8bws!{w?v`@X{TbzKEf^P?oxIRd@*uZd{m zSw&7Sy0sr7rLpzz6dUWy5!)mo3Me;SOA}L5xvMP?Oi%B-pHKi1m!r!~ResBV#M2*F zHhHU>yOhS%&-@gh$gBMWaEsRd0bX!;e4mBFJhau7T3&AQud$krsSnDd|4~O0|@w6l@ijEMuF<*6@@mK-+44sE~ywjPi%#4jLEzeA!BZBkm z0d0`7NQOF>RO==ZocW(Tl`HH=+`ziqEdqbA`#&~k4H@#6bwiTwWFz&Db)y(MO{?*j zbu-Z}4sH@xJ*g0!68V&B;0_L(_ai0L_^AXN6+W7K^jtlGx&rKHWhI9xlJ%Q-IBRSQ zGcoa7dh>3!Cy95;dhk_6WyKhH?vM3KMn)UA*f<5hq0tYAI4~LGi{duV->X~}H7es1 z6VIMIbj{kBU$!QG)8>B+UG89wN=eCYg05POALS6@z3ith*?$5xA5O?K-8RKue%RJW z%6Zk?f*I&C5k9)F;P=bwEqtiD1L!=QCrEgJM<1RKcyZx0519pik>r7@Uh{G039F27 zy!kpE&7^J?_WJwwXxxP{RWALN@&Z+vX+10ciJgqrkey#fA`e2KaY!Mc*Bu!ajd{`T zOR5Xz{#`k-pYn0QyU?|znnW6HE1I`9PWL|5r?I)PsHo7wt8KZ1p5G=-yvl5$qQ0zV zODM7AA=~p8FUFxYNq?%Tw#Dt?ys?+Uj2K&tuJ9I6vVrF1l!oS=V7_J6Ztu^(+uo5` zaJD~-Wd0!Zq)Wnwi6bg}7E7(jtM`P2Eaza!v+ka(Z9Ehnm;G6P%jynH5DOalbE-1Vq+ ztx)B~#qy|Qf^^pf0-&Jh_WE(CpiYi>kc8N^+i}~IU%}iWIbSf+1_yN$%YNwSq~LfOiem~1mqmI&GRnM#NVSyN21uVa^W zD%tn3uamtQ*~c~vzcaYM_wRY`=XqW){}i9|Ip;dp^1j~J^*Lw0CuEji+EA$DIH_s! zv`fJe7Bf)?QbC-L%AzFUMPj>3s)!!v>vCvuar`^xcQ)A*7M4HK2LqFubRag_-ybIQYm>yk)p1)8GkkB7N`Nkd%EHxkh8sNDA>{i$urxVyFPoo9ddl zx@BM~Vk}lPN4{En{k%nkI+xGl3CE4w7={vkbxI!iiu^sFqFMsqy-u?7W}OPrxpTlA zW|#y(fRYWk6`K~3#>{Z?Gu^6b!C2?s&(GIH*q_HEqRUJDJhjrVZk}VNzgWuUHaVMO zK6U?C_n0FcLgLx)&#wb%8S&ew-PW{GZA(I3hzQzv^Q9;au>xgo%74!%hi>LU;!)vQ z%bpV299+9~!j0OwG*lhik3W{e51aBbHRy8Rh9mUBp_^90+dE^A0U!(s$MvzY^44`+ zs4X~8A(!4+wtqf1Ur=Fm5(Kv|FCxhuTH;9rj-K|PqsZyY1j~#qiFEtB%(lBhs0ADb z^ODi?cn4z>+k>W&#S!bYV+2mX(e_k!k|52 zJv7$2sjX-uhCV;ftJb-i5vWJLqB)E7Gw$WzDx<26BGb4}5A~|p{gSL!n4=r8V_ODN z_K0Hh<|B0i9T-G(as1WQV#&X>&W8Q%(!JM;$`DM1r(=lTF0G08J?)6KLgaQm@)s(a zSQxGP#x=*Vxam6T4`V&(43TnAd{G2V(@&~1r6NmW;JJ`0W>#J@C;gtmZTjRSikbmU zx@vTStUbHgXD;Ob-sei^NAKwt5Bb+4BkFsnOeQ@CWst+?b4(UARW=piI%vZC`qBlL z(aJ853C)?+p*r%_?yO}-tMles(B{7SS$eLlp@9!)-5@rE?BnHMRr#~#pQ@k{Q@Uxr z&(;bvGp*M+7i3>#uQW8u@N2q>ix(S%13@=>puI6s7dU2BAX#1aq4!4G2m2gyawk|< z8mh_?b8>5pAf ze=lIca-`a4xh}*Sh%gipJr$oVnS_Y;yr!4tN6wCRO_bO&fTD3ca#yzpobfWF3hc&- zUF|$00%LHKa$Y80a`p>f1Y55?IJr?=`S8xZ=`}3a(1o0NVijyQp!lcs`KHlFasc@1 z1V6Iw1`aj-sgn1P-pzF|u*f~T`UuH7GXt}9W1!t6#kbj%%E*Xs8T3J2VDLXr;E6Z0 zX0~a?#$UTNE*}TNvSz;(HvhDzS7Q50(o=An0HQZs$xG5!K*srxwvmz1-Mh8mbRuv} zjY3%4z^-b>ju9xH-$j>YneWQN6AOgTW*NtG-swh2d{5GlL;RbA9$D zh^-pGl7)8Iw_f}ln9L4GU3z1$}bges=XpBR9Q9U#%BPsvq+e>Yg6s@ZC6N zz!|c2eaXhoI{XY~zc^FAGno;=Ptdvu*_>jA`#2Dr%iBYJb__-=Q5?6Ne=h>o_?!L0 zj$E;qjcczRu4E;NAxo$U;*RW!UhlPiv|=|fWS^f$%bIi>@w=bGCQYsv``5h{6<5xG z&OtJv1j{jlhx3}f>_7yudT1I z4}}I`pV`~n+uG)!(de9h0+6HLuC*2W+OgD~twUJ6E2D#Jv#YMK( z~jcHEPB)VPfnd;ktOI1#&(P#b0SzQXu5l_3r|}UqcG; zxy_GOI?Zeuxm9nC)xTe`FGae|KGK@5} zP1dtLX_W(fE=PYHn$C`=kR3^f4g`EG6OSx4ParP zL*>~#Jly~qM>e@pC3W5=a)Qwn6qV$r<$rFMeSZmI_6d|{7RXe-IE1PT27Gl zSnkh%5NA9dxOQQJv$)23&Kq)eg$6ZJws671Cj`My>(L!S zD`d?UrUEI;OPTY$H$+$T%8g~MaIn%uc(|SLSGH%spk^~t6OvVK?S!iw?(TlrUG>vM zxUl95hu2@x?nXrv!q{fJA2~Bx#knw2WInd^%Td3UPd(RN ztVg;VUA{%=X=~f{x5wRbvM?|(02!znT6 z4M(g_jJnlop|f7?1S zS+Azf6;l)J!1>gZ{f*0W0nlt*XQcodPWg-TEKsp62OWUW4qQQT*m~ zJLA8=2b&d8;$qcLa29e03dXV2_)~$xbj8zf{!tnI)ZNp#Ow2Qsi_d1NLg?$7uO)ui zl9p+fw!e0sWTr6|9zW5PO1?kR*7ivcT3wwLp?BTdx|Clt{-y^E%AbXDfMk9BdT}*J zUE9s9CsQea-WHtS(fRc*W@}_&x*ZjI#Ky)3*MFUQwGe!jD;Q=8eeU_=m!=RbsoNxf zivjwOW7HUtUTKDVbu>Woxpbaq3y*-)MaFdwmjcf;jp3^Jwrzjs4OWt9x9-HX?0iqO~Pl7 z=Ch#3)0I>dL(eIHpJag9o)TGlG8BT`pdO5Kd(GK5I3jX$ATN>RZla`;W=UhZ`O3fS zUSEuDt^wR7nEop4fxb?0*Mir{_;m946-s=EjFttE^t-dVK6UCT?Xd6>domGBU5&4Q zocDiE|A#sx90~a>`48)!cXv7w{$o)Tga6p!xbvWI)x{!tn$CRuZLXNIcbD6&zb~a9 zevnbVBa~CO)3auz(YkuR1ekg*5vQqd`HfnqsFitReEa>}fPi76zoUzcjEg=yi~g%} zX!_m1QQ>*P@qP1yiia6ftK>yiSzVUUSR^_*2az{gb zJQH~`Q1_k^8q12F_C#pO2a*hg^s^gUTJDgusX5%g2v3r;TZcl$jsHHX%=~%l&%jT9 zOY{{S^nnTV0SpQo%1d2-)Yc)W#EB~NZgpi`9{*fx0lvZQMwmrWOr*kX0pvbwbDRsy zCCR8-w*ump!BLd4pWR)HaP2`Wk)U%vde0{bnt<7kdb~W#Yy5}=up+5SNzqJ0`++4aO_-OCjv#!hCRdF{R##h=Q zp$WYmP6*ICKya12fe7YouM5UE>XIgewr4Gi%PLd@X0&{McHLzi)t5_hg{2}x#SzI$ z`gfn!Jv1JMdgfaAwaG;GW{aRi?Q5M1qr+;7LzmJyCxqddeR(GIAgNT9v@G~9`8aIU(7F)@TuyA zpUBk=#i86Ct<7-xk_uF@{oaOnLCAOf^&aD@*3T_`-!hiP3c97sD}pKSN>oXpx?!|bf%>e7&# zJqBkrx_f-XDIY8|&H~pJ;Q7FsZLN?#n}i&W&yHwsGOideHSa=L47bM_&u|!sqQ{`* zCS;FLQe`<)SxHIm+HDgB1qBf;{w(MR2MDc4Pf*H}`rs=q>%=c7Zc_4N21Y0U=*LDr5hb zw!O02Q_WyCE|dK3o^`$E$A$H($$85tGzAK$Y+4F`M?`PMWJQ|FyGR@S5hIZdIw{=I z@>W3CaSD)9_OEN`mSYIfX#qDF>-ALZh9Y-3spYq5Y!~D!(o$Ke zIy@G?_jS0VkoOl(f-;NY2wK5MKq*Nx+7x1Ax$4jzfXz1ra`e*kSo-|&NnLPTON*+S z>)HaueY$15a`-dC<5sBr4cEqTscnR${v#*vy8t9f038>N74&z#X8Z*yK$Ts^)gQB9Ahqk=o)E2`-Sp18Wl$7yWrmn6B z0nGG1qeG3>v>uRI?UBH{DLqp?E-w5s)(qk;MlgAA>~IR-C#Goq&R2e+)#aY8mm%1C z{g&(4zm|BJ?+AUal1r#FggyUYuu=1>PSw^bxS!@#U4wMJ;}b@z%N+~9V$#521J8C) zOj_>Kdff?F2knW5i+5KSAFskF*{h4-eG0ZO{PSq!&bVFVptMGgg@rT8pr5Tbro|n< znbEFguu->tt1zugtDA-z+fG9WzA_#ZG>9!&eFYhc)c^|zajh%rUG?BLiFq~%5H}|T-{7${so<47v$2-4r=f3#rm~@8U z7nHf0Ja4zoAu_-c1;l`(A>r>6MZeO8g!{c8s1u;M{{@$RQj5F|M~KdUgtD@Ube!?r zP+#%|9e!Ne!4#E?70**pj`bCHDg-2=SnE)})>V`;c zy@!=|)YY55g|qE{7a0idNcpc!E^jxu!Kr7F`q)2AGk^cJm8^A|)>A1Z|H^(D0qHC$ z%jU~FWvJ3r#VEKLtbLUDPQQlp^owNUS=F)_9zN9LitLl*3qvD&=aFdNr1=8B$(9iE zBiu2EcM291>8+f8m~=O5jN!!12e~fEV4feqJP*FZ&HAs?BJcjK3dz0N>XIPk_Tt)@ z@z1h1J|}0+w(qF-$RUMe3JU6*yTw91x?(<_o;mmoJbqr!gj|X9_5C=yqDvOjElfa{+X&AY3#wus zjL{zJEkO45~e@ul91-C3dR3IHb^!*YS`Ou+59MpJ~6WmWTDgStUHVgs&E7X_B z`{wiwz5A4_QwRGFANq0~F$dj^xPw@=0qs&YnB`eH#8eDYc(EBy?rDG`@iwpEo?B7h zhoFc}A^0W%idf3RY|vtew3x*;TFCC&3Vf$lWOrC(XBe`*iCjz(+4U76594-2cgApA z10v+V?b~G3Cd2ONtk!M|j?4htZNu!kAqluG8RQm@oPnINC(j|b?00gIv-aDqn4P}e zI?PhvPAifO-?G_lTESRX*MgacA>N!;oPHNbEQCD+cRO~?z+sJ;(|8vl+xD-n*9wrE zSr}4Q$-B*F%yu(o;~i#W1+u$hC$eIRT(d-y(vT#6=2J0mzLA)b?aO zWM_#1vFMB2nZxb0xmB;U+9Ost$w|nkRX@P3%BMs3$fWPJZU(T&cipRX|9cp*u^WknJ%BgOjlB zJAd1Eh+4ZuEpoS(f&FzLgh|?DPVP5ho3HmKskSGghAIWp8O0MHMN}c+FCvanRN&1p z+yC{4m>zStwr_qwFLeLg5Ez#fo5jH)Jnc#Dr`23!FjAP;z6Qa=5VJHu<38B_$0JnW zm5q{nub&*1f0xADzpR5%t+38Jr;>wBt_da4tv@@1*2R{3{(Ck8O;Hw>3d_+HSAZTvMY z8o+I*ad2)c6!`fH&${i}?@n1N4h|vLL`d6GySR_L>%WlX-On3cyA@*?5{7lBdDm&3 ze^;djxrABR+1xGJn%SM558aI!LGC~nb_y|rRp_H*Y!i)8 zPBM%<`u^U}qd#kY>c;g2E)*~I zT>L!dPD?%d4tcVYG}AHQhpd@f%L}f5dh=zC?ErbqI?o~)G(-VxbU z^(6-1($M3f-;Dw|$K-yZoda8gpzMn8r7FWbqL3eqWu?Z&Q%As&%c^+h*?114oBaid zbvjjuG;cB|7X96#z0c9(cHPu@YNApVp^S*RUyf6oz?{O)bh*VW}#%1 z3mcQ2B*jg=)p3kQc)a(Em0j;OAQUTLnR&?5?z4{+UGu{ctjwCvOJ#8BTa_zkYcu(n zBtoCN##|yt>V}dp)0br9sZqMM%B9A2FinGn% zQen}@hUdbck$x9Z4eCFu)Z$G+d}Lj%G)cxu_m=>*U>#s-wS;=YJ2~*w?|4J&zEvuc zY)?^4@^sQ9FL}@%DGK|!U71PGe7Dcnts+08u!VeE?b{{1TfM}ext z2+L4Ds)}*RLFD5vtveFf@K!`w16a^)rmC9_N42-aIMGj})_(dCuGN~h{;UHwkM z^d8pUCjJbT0Z-i&-ZkHCMBTx9*AkTOSBdm2Xpll96H zrl~T5(fx9!Om@9Ni>h}DiP~U!n8^;7RsnK({sSp`Jay9h&#v|y()ACFt5rz0Y-jd# zC1Ua_nIq6+APR;Av$}+$?ZT(6S8vE`m9>m!5$e5TeTh1^N=RFGeK%0@_#?}wX6~N=Jv7Y)haprU+W-GF6sY$# z_Nf55Md(XKTbO61;vKMeSC4zWK@sIH%NyzY6j!~Lt%A}t)~Qvqd>;L@^{f8+Z3Aq3 zC0kRbm?DXreEXK;V3o(8i}xHhfp)R)#g5<)iA1mKHi8|}bjqZtx4PQNsCB2%RNd92 z8(wJF>z_V@#i@AY7Ll(VS2MtdwpraK`E-_D#C`Jv{sk9=pDUQpeZIc@U&a#?iDbG~ z5r!}y|B#Hbo1C^!xYB!RQx%fJH(hbzlDQgWW&Vj!yw3k2rBf+5lYG`QqNZVpA?{jp zx#U7)0=~*IHFyvcBhc=miy9SzX+$9|TQkn5UIh-RNZT^fx71vM$Y&D8KB`=p zPrXT*+8xWMu;8={9B!oPK>bBu$Q`~5c)HK;&8~Z!!rm&lZJOS)8b#ZL(T|5al+9j^ zWSAAk=f2*wXo)s_odXl^eQQ8RYN4>pA|#4s~_a{vC>Q)m2FpHE0ViVLlh>Ag<4*^4#Awny3qWe=K4UggYF-+h_+7#TINzdRRU(PY6C} z;3hYvFd1c+PT3@L%AVSHs|6nrwEPiA=|NFemL$D%Qug(coyOx)6_H#%k4PK$j;MBvr#d+s7cMsiB$3So zy+*F=@YOB712fSkhs15g*Kj{Ae1a8%Y|34HVD*_S9 zUwY*fzSR67J}tdOWt4AjCLQr$E^A@pvV0Yko}fg^i4|4@&aY9Lcg0NhF3qiEcv-`I z!GGB|#|Xsq-Hxi7OZwh(&Q6d+#kqr#x12aVn9)lLUl7L*H|G2B)A;T|qhP zjF)u6z}$Q!yD7>LdM*^{#(f;+-4mp+x@+?W)F!a+2<)rD!uI2{9yKMnH9fZ$RB!Nf4e`&bk~2>djX=qBY4&>fKO+h zDo!rpTSelj1BdvD=yhrO?!Y%spke0SvwgzX+cc{EWI?Pddio`k^={CL_d~CrW{j68 z1~f~NTYX?XMu{|~QaUha5olEBQi45s?4C-;HxfoS{;qau5^QfXwb7tIHOd!&zUQXk!vRWUnmU;bAqf{1XV@##}POko>A z{##Xi^=W(z8zEh?*0+qhu21h-A2G}AEYR~;nS{%*!+0no2r~dy<9sX{xyj2(Lx1g1 z?qKZ&2M$RKIHcERAC6oRRmEsbbjikg-6o}wFUoB&oV|O&qPpPmJqHjt8JbGONM=7x zXQpd6CVoxe_D6Cp{3SdgZG;C~^YLJ7t@kj_~|&w zMZPm1gIJSmD4`glHw&Ttfxzi%@=qy3-i1?08io@LGJ*=YO$b+)WVTlY6Eag8wWRLV zWcp%k@#wtuOmR%6wA8q*TlJi@B)Z!BK04gRap--;jm*J3-=8})a!{f5uQ;zI5z}=E zxnc-B@#pr5V@3yN6G~+3+_-op!w((bhOaWZ-8L#THN?K7v9%N8+PD zXWEYw!bz_OL$y5Oav*;%H7)*pW%!pVlNjOO<-Jwo9u$U{_Nl)jog{KiB^c7p;_?I* z+ph8-!#@r=u@_0y06>@eWDS!F$xXJ)Va76CvqEo(-zU&|hG@Mu$yuD-+E~(^Z7O?t z6#F919(h5FvSWWnuVY05S@CXD8eKykb19i^A?`!mWG=CNF%21rtlTv&rx_5Ii|QAbU@9{HkMS_St|CWP>jC{w1JLpZ$FT~TT%R=ZMx><3!|P{j#q}rnm&1HXgM&PW6Ti;W&(0{nA&=OWAV0+O2S^NpJ<(90gu}A7hRO?Y|NnJYKI9O^IB$y1z6@%X zxJ&xMM+vUms+*}vnv+Weu*+DH$h$zgI*|Zf%fv5Je5W^ybuunWO2htNMiD^tZMjWh zcSO}ounSAE(5Hd5tXKxSuY>|^4Ppl>7s!ymhhv*M(2-kVH7)xdt5bTepQC2}YOnti z82C@H#R4T*+<(i-(|7ahhWUls$3?FRR5}yq4QihJ*lu)*{x&iEAUA1Y5K3vxbC0JQaq#~9?DQ26}evvVHbx|f1fF<<|c7=yU_u>;}3L%x#C$w<8q zuV}&$Be9`z7j!zf$-gf%XuKK|hi#?n&R#(*7#c(_rr!IUe5&NR5d|p!-CK_pMm8LA z9?KAPptG|d5C%Oex>R^-sgr*GmwLHOh-no?fwBqW@+Z2X5%z?LG~Oju%v?c&t7N-z+5Wy_*Qnm#- zZDEKPY$$ONfB9zrrmWvetk3B5+g0>uxJqy(*SYueQHnOp{`VCL>X8OuEcmum9`bJ{ zkQ8ht8%PpAJS~N~&updJbHl(@XBV4Ox@S-SR9B#E^e=~f;gdm*z8Wz9|Yyk~8zmQv;JvpHUMIWUJ+ z>RG?D1DEF?y`%wJsqqhaYBfhSKXq;crYf532OLkZ5{y%;iijdj=*nly zI49m^xgXmr*|U&wxx-uRXC%mhfFIJJK=O^Cx18dXwfz`8F!BVf{pM9T%w-e+^e16` z^}1>89jI%F_nGHBROw=GdZ9fpqdnWun-*^b1vP<)ggYrPRfq@C0r(a?watMwWC69R z;kU>+5{|e||E#AQFGftmtcLrNjsztQ@wb9*`vC`)mB%TO*T^kiUvKQWp1Z#o;wWnT z*!BRboyRWxi0!kg;bX%x)P;NQWOrRVxp74snN)o;GdUcQNvwFn#giS0O#xZTRZ5mp z%`;BjO3~mv$$d+B;7@FR(eO(yM1}O@0!JK2-$~af|JcDAevQ*t(NgZKAAEa1ok@MV zLh+{eDH$vJ?HcVxJQPeqZ+{Xghw!Djv$G|nrKk4^Y|gD#eR2qabSX$?mFATy zW?4`bfI=ZQ0>!_aKLfF%#{=(M{O_<})|fV^NcwSe@~w;sz^GBn8ti=O!EDa*RC*-7 z1lChRsaybCM0ST>6tm;T+MinTou)7Afmq6g@ybJPO5b~kBkSfx~ll-Rce+^?;X9-s;^~{5o7wzXuGM}S!mi-V_q>MyOYN~HMR9Dw_%5B5ic^pRPinV}RQ_J@@l z%xYI*o(=gPgj&)hzG^wpRwt0?3#cWJv!}GS^=y9tO0j;>n1&pWCGzco_6Zjr^IUPVcSnfA<6vhRC{vILnS**tYj0 z`pWM6fF|`6xV(}e2l}*1DAB8^?Z*1i>k^sYx~NC=s#WH2_q^eBgn$r3)hnr;o?xKo zS|r;tG4)-PhSUy2q=zW%>{0~aiD!^P$()mi_jjq6huqSh9*2Ix#!tQ+d%bg*;d^(w zlj|QR>%UuKirJ{eR2bvXqa0U`ck9XTC zRU|2J9JmNo5D#GEZN02&5Rl+UOq>TeZRB^<(b3fbp|tg;u7I9%A#-5=HR!P-X@Rmq z3t*htByv%C#FjPYYtkX_HMGbM-<2OXcfG!K?qEJyWUlv@{er%j>C4XUyEiV6HhEN> zcP()tYg_lyFk-dcp+__Ri%f2Vf)R7t=6yHVsJzg%0nXC)o$Wr?!UdU7bo;$Q6<2uX zh=ya}roLb2{xtcV@RkVm?jtTNScc0rg6Vxk-QdrNLknA03qo+XTxUOG>-%t|5V@t| zgRBh5AxVGMm;u|#dG&zTzY&9AsH<#H&%h|(kG+|93{NcwcoE|l3%<~PJ-KeNw^OrO z3}QIO>oQY-5C&rBE<)+=#g^Cm6EFvoCE(B6 ztd=N<{y!czC?@KP=}L%$0_b%iTZO*6uqiE{M{~G!?SMsqR)6VJ0-(}f02Cb5%G!&e z3I_o&fp|~rvfl;DE7?Esi{R4aq2&szrmB#euP9Zbz3BbvE4fG-)Z!SJ_DZ+E1OS$u z=2vdjc?;qotn&3&{AlH!LB&W~$esqfj2wyxi`mm6tKk3i<7`ii0Le39U`F{3xp~{Ot*>{bpW+o<=mynu%9Kxik zHBwO`lqTePaLVi{UC2ehp+u*ifp2GwXKIH6YDZT(L|yV(cKS_7nh`(e`cl_r$y=_7 z?=Y+Hgl(F3y4GENFSqUWO=4`GnwyqC61{d(u{J`BfD>qYeJNLugag!hyRmJ?6W4L!vwkuY}*cIf& z)`9e(IY|{`iO%zyO>A4|P9sae74l4vQZ}DN*?f_gh7q!Wj>b!UBb)A**Mkd`@lvMu zX@okDgZFBH_)^iw;iwI-#CkEToIl1Uc^Sm%)IBQmNV-I$E-wH;zC)bR2b<}qhH;_G zx>?GCr@qGvK0yjtoO9jcz%m^l3}iQIfu4ST`yZtHKRqr4bOEXqmq8KQa>F@CJy)5& ziQf=aMkA}L*N#WLlt4eDn39_W9?J!no%lAtYgL~nAKYKkz4*Lg8gk(;LO(pgW;jeQaXg9dlXQ>{3Yee~d zwTunR>SNv>(X#+Np6KI`q&<5J7XXktl=?;@1FboY^<%#!OJ}EdFpgqcRNf z_~nL6W?RP@ns|9oQ?c%(VSAbd>=~C&2u=-0Oc#6Db;p!~dI~VDQpCUWWOQh@`t@Ya z3)-to%v8f4`CmylqTMC7&L2BR$&BS{gZ8=<7=R}@N(mxipCdwv6_10|Q}GR{LvzuG&sZ>o+e8aS#6d;q@frcOD9l1QN> zsZL4Nl_nGiqKa8PVDdjC!%L#Nb1Znt-xIX)sxYOhP9+&yiqE4Y`n(k8VEc>=6t461 zXeeITVTNt14V76K;t)SHHEW+WzOxfM(BdilXT4mFXJEIl3CQ|QO54p_3Zu-j_rUvP{B}s z)hqjDRKjr9dkop~>LheD<`UgcB65c`?*zly3t8V;dP zH$}vpjAH#-X?{(&%fan0=adyOfw0 zd(|m}M6xoV3VpaJsVqgCZer1tB06O%ptsB1!UWr%85~!93~(|`$!d_x%P+Ylc|i^z z{gt8!d#UsOw1KVMDCEIg!bDreJH|()Z7BU-s*sLOL{ig$my!-21v1&HLRMgxBic^j z`*xSJyEwXxUW2L0fsTzs`-uba-P3#@)P!B3@jX5-yeOF{!~FQ%Lw29bOcHXMckeLI zM*GsGfMMi$cEKNg%$iiY2FAocmJ^AN&$d8XyD!OFG$S28JgJk?16<~Z3+$;a_CTe`?_r<`mVHvEJ zbyfI&GST}hGpC+Aaw0~2HRg6WLbJw`-PF}F48b!LiEwgLp1OxwORv7XlzC4G+r!l} zkhr-59XFbxl98XAY#L<7amEn;qU;k8XKm2@ja?TK`wCe-Zy9`<#tDpX<9oh}(1^1V zatyF!{m;zTW1dpufcSWjCMk9qF1RN>b8M6*lM=lT2G#e$HLppa8? zH9Ajk?ar@sxwTfj8Jc^!IBk*;${=sT<%(-4S9(%D{z*!5!Q=@JR-voHt`ZxdS%-nh zb7}jnd*e1l``%*w-9l1rc6{VM=DX()STxI`AZIu~t>ex z7kKohb-`=~y{$&S&Yk|AfM=(zT*4dvRj>3-ATCUSEZvo^yw$352WV-Bq^dtYlC zT1vo@dk3E+BeQB9yuR%)uAa}8%deIloOO!GY=&lui#{?zCXM@X|C9PlJ%Ood!2BFE zAPuh`39V|=k5|3E5l)S@{{$*6H>=#j_clsK;w(^%EK2MEI=p$A6KLfzgD4YVdaoX3 zub$w0go08{)eD2i0O!$C;jg#XM~2G?2lfXK0V+i?St-!VQS33D(lMzdSmbht^h$2& zijth7Uf;}JV2k{FwCA3^?mKRZ8S+vJ1mjkl=d(M9>;#)+^>eSefxPN5yZ%_y ziK1QP71X8V7;(@MF{4LnK zSbk1?UtK-?bNsM}+g)S1iIaG6hb;-P3^tmvgr(#!vYp;Q<#<3x34j~3ab+4CYLA_}hOX-JbfFMSLR8)>V2Mrb<&1wPb7QnJss!Tj^TRx0IRchEYr|mtu1J z7?|?vJ){6?trF99_QutNNN~nn;MP>BsHUc#vID~3+X6@+Q?p(RzoYOrJ>kw zEism2So%i`0r}}9h^FR4sitOBsssbvA>@b6j=m#anTI&9sNHuJz^|2b$N+#ZVHoxK?fpJD;VG_u@`^15Ar8uZ%qX0yGA*NY87+P}K{2?8S*dERq=a;nGo{8y=LO0A-wI|b#b0Re|_fvR7TUw-y1Aeyer z3`J95yG)V+?HtXX2HL(P^>SQ9G#%Mu{HF!(*Hzi4;|czN|9LifUDky_2U6x6#R0mh zRGlfPHRBbH!@30r;4`kcBXB)#4b45 z_AIM$yCkFf+UQC~8L#v0gWb+-Ki7RkDtY_AiKQR~cO^IT4bgWhTv=1D3aaC+p*N&L zf8t>ZJX^~v)}AKzETu*5ZJSlEV#Pj^WBXEFOdWtK_%45UuWa2!NXGq)QG-AJ1$ejV zT0vFbG|kB~%`LQM;X^g+^$QtTt@0nKzi;5=uX7twNSp{4<{YW$?K$>cveSeO9@ulY*K*-&)FWzu`C_MNkhOTZ-Ex zg2red91NW{ZqT7i-TM8%E(J z7xK#f4;g_btA(}SG%HP3#w<~JFyJlEfL8LmBt009%B;ls54Wo`K-tgw2xW0<2Snwc zGf`6ajrur4I;fEwlenLtFoJz|gfM`S9Gux~$dzX;Q;sR#MP8E4)=|>3#II*8S+u&P zLg2XH8Jl%BS8+p|H%`o34UNV@{G>u$^E>@}I?JjqY77o_mQ+a=%sS`z&Lnv*x56h1 z<1orBJxgA#82kEws`&G`osGOT9NEKkTgvX$x6Z+UvbGPI6SqM}%G%l(Hm`PQzB@V3 z;b+jV9M%%OOT+YRm!1z<^=t0rB`9_WyDH2l3ng7R^{Ld7%E*vXg)RI+PPrh?Ya;RHm~pjO~^{idps}uk@MiI3V5+07XeB z17rS zqz05@BL9`2DMz;Ns~(^mC@R-52Mqhc4P3`t!9jnbFN@kmXQ02_sC50_rq7k~c*WPG zV?4b^r|SOIj>@Vd58a2M2RU1*ZXVI77XNTGZ+{AaKWr*qt#loq=T{I2;9K_bDIi9K z7LA%+2e@g^mhNmC@8?jr_hb98<}|i_J5H6B(af#K;9pdmk#f8kH2PLKaf|D1q28MN zijOSTK7vv}*m^&Fz?x8JrNJh-WcOgjqvN1V(lHLhOI7Aoaa1dDawW=BvKo=W`R{8g*u_Am+Wz%{+f6ku5Qy20G z#XagKrl3e{t0|$<%z56inWy#eX_axSOukECDwIAW3PPyV@SDnDzIB3OF9V2fGzP5X z9jD;b)3Z01iLhkOWUiUNCj@lut@sL^eG^Yb2~3cR;FW|H%(AENG!U+CE}&=Nj+6or zMYh=qp5eZW`_-tAEh)H5jmZh+qm|(5G|4K9kM{8`IFo|+-X&H(elc!`{dNOUs6!X4cXu_YuM!E z>+PlaA%oP~J{-y?Znj@+eY1>iZmwoi)Fmz4QEgq>r%XHd_xC6MG3iJ-p)M;8IJuDM zW$LjpJJV`)&8hAqYDK3r(@^h}vd{%RTSi}0&X&>m_#PwJfIPc&m?{JGmQ7R4xi||$ zx(-cig9>`IL0UhEy-?xyKmZoX0&v@rzU$Tw&y0@%$fOK(f87Pac|>rkRrsploB;`2A+pSr!%^|re-XxEAd1rfKGo%MR zhHsPX515uVw&K=wnUHr)Z7%@$TD230J7s`I3|%u)H?RUwfb?4oiqTvIE`T$S{VDq% zP%3tRI+0{$FzO-nlf--}aftJf0ykQcGy5U9MH=U_2N=t7 zO76GBu)YpasL-Lh@ZoF2>3Kd|B|cZ7G-yJ@LjZE-<*TS1wFkI0rC!t(VAYmH|74ES ziuxl4}MZsMHH*kZA z4k)4~kxmMrNNmKDVr-QTfo=yvN^_sMPD5NYTJom; zF{H5~A-6Qo?VY^-11C!q9}%PDUyMD32#-L+<7ZmhG7L6SM#+rImWMYxysW1TcbH_m zc7=D=Qp>0<)uoEI3G)GZ{F#Om$y6_wjoD@9^RO-)KoLSbsT>{r2-T{I^(Ua>-<{Hm zR>-E7_w4XYDmgNrOm_MbM=Y-z?0n|Evo=+>m;IF?7L43JkmU!Qi#G?d`m4YPsTDn} z#0B95rSDij?E_joOFrH_CC2iOl)-i|SAOnHcEVk{cRE%Xr{K14yOeGD%ub`bhF!$x zAlR`z#@Wp%2(k$-qZt5cafnx20oT9>{e1?on;vm#8oU*MqOu+Q@mr-1ENtdNMyal0 zHEhkptoaQTGMB2`K=m1=(w=RTf0sC^wewG+^(@s6k{=|6ys%?$8_U)mquku)?c!u}i}k`ifrP?UDv zwSlDI8TEY6W2`cw1Pj70{$VKJO$lWvzdV)Tu{VZHZ^8yAfY%)0WiF&9Z4Clw-8+)C z`UhYHjr^7jI7%(bU-FEEzktM(H08E{30S99Ybw{&b92%CKd1TA{`B;^&z>$ z7WXx?QFvbukD2*}z!b*yVWz7#{@PR0t@NV}+z%06_x}MLEp%8QT_18mxEQD1_)@-7FnhjO z;S6S@X7S=T_&HD{0+ z`84-#bAq6sa!~ufPMq2vq|Fc2wl*5^^L) zGyAVQ^3S7Wy#rt^jKLID8O z9uL-Pgb6~EJ}0Im*^aIz6gUAk;9QVf*HD6^EH_FN?)Ou=W5c! zG8%&6yr{}pQuQjyY}?ygo@KJdn{ys>qYKuaf^U%z$b4CiT`#=M=$@~3)FoTxA$Bt(JhjLg?+wf?*lMu~NJJXE3E&hqcu*T- zSrLjV231h1gKGt1p`n@BNR?2X*I?kL^U-CF#|W{=ywIf0SftWDEwWG$29*|rtba7a z+Lo+Sbs$bdC!@O3UA}sIQ%@pwO#2WC(h1z3t62?P!T`cs(;@vKcb&RIq_(h;{g&`D z2t%yeR^oq77n!WyD7GhwLQXTt`6hHLXSn!5IW|5c;eR{!LWU465Y}?&>{l3H=OsXPfnhe#Yi4scekF{M_n$? zKBvV*pZm98^Lq(WXw{OA${>2i3;bH`c?oulM9d8Ne4lYW$P}&t+%R15>1%csWb)@r zwH!LA!DDulcQ5mi@B60pQu0H$Q5l6BRz{siFkyd$U7y51W6 z3~8g6K9DwxUPLJ%Jqg<5Q9$+^T{@I++5atm!O72?9sBifN zKXPX3aa+el$xm0-6o_SwFE%{Ve1Rq@0l-)`$@Bd0gb$r-WxO)u@MUgEQ?P-^b+%kAeL$Z0NLdBfouY7 zXVO-UKQXuP@70y()SO2nV3|Ubp~E8NB5A~ATDe!LD-GH=MoPXVf<W#K3I*Ix#}C_A+N z7$M4M4smrVAOAozIpt?WU{3qt# zTDDgRtOM$M=F zrvX<4azSUVZ*8Z89@YT*;wz##5mdv?Ob8kb2TCzE2XZ4x-^=2i#3SSW7GS{BM<=f~tg%INw7uWvVl10RWHvTAPUV4 z7q4f)RdezyZI+8rlsgJ!zMc#rL|SBxte`e=c~tov&X83iGJ5kq>`F@ z43ORI70?LpLT#%2%~9_8b=kRD#v0NJpo&KusCYp1 z2yh$yi8kzLR6WJX-XOXEL30b>OiOgzId&h~rk>QKIL-HB!JbS`jN{Yvx1-6TxEzxW zvGOLUK&3Q@>Nav=^nZ>wZ0?>q_VJH%*j4#77IC8CCYauxM9plK$rmEZ5 z0TTI^r^CEajRy^l66ALV9{8R4ujw)DjNdB^B-b!}H}ScLO+tVND_dXr!>tm87q=+H zc=CA(_hL8HCRoWuDu^Qivg;0Ihl~B^$SWYpM!m34S@^SOQVgf$QBj9JhL#elm@Mf_ zF}1w(mz%NNf*75(u$it?u>wECKd76l6s)J|J<0|?->(mlKpCAAMypDGajAGV+hhD3 zr+3JS)J*}*Ar^ky77zt6I+W-Zj$0cpDVT2bHx0&*!X3r#S`NMgx=Np99|rmN>HUwH z2rEiU8)P|oWci&^&)MAPGv&Qm^T9}2R}v=*f8SyI%R+E@`8pU0+`M$?=IPuG#!*r% zj_@YppVES!8i!D55brJqZ2bs``_`)qNKtvr7I9jt9}SZEwV0d)zNdewtOxYxXBw$v z$p_&0p@e-xM(WZneBXePHEB^of*d{QlMQS=&ht`}A&O$%NQUNLa@Kl+B|9)79 zubWuCKAE*EKwNjzt*H#j;FURT0sSyRlnOFQEXykc z6b>UNOHatIuaTDEnXzsdkIztvOQAT<9N%@q2;*FcK5``a!`9;OEn=34IHSjHIcwoHyLA zbUhhS{KPdh?OM=Ja0p(X{UHre+K^EFL~65+eQ$j>sZKoaO2Uu)h-P;)w zLO6T6rVvW0NhxB4X@_o1@zy^Qt&zeLp3{<1oR-5_@c;7Qm7Cx?)R}RX3QSS~Z;{gk`Oi=UY8QA1&olhU zaw8J_JfLQ)fvnzf-R{!?wZ%8_wlq$5gZF=~@xedPc=SGl-DjG16!X!x8-H+rgHKwr zU#=Spl=BX@1hmMq}HL?)`k$1hXMqj*xv(}PlzcKT*7#AY`eB`5Jn z+;_Xy7U+dJm+v=Lx3lzsNiPcI(As!HwbKf9h zr^>efHv6-_H-#I>6%wiF9(Rqq*=cYCSX?Bs|Hf-wz;=o|<%iQNsr_q_6a4&5=g`5o zm`Qm2)Gowk7M4@kAu?ch@l(D#RwKLRohHpOn|&W2w!Yl^>yC@17B8hMfWUOGome4a{ zh-u;?Gz|tr9Q(I}iSSPK>4t`YnDaZ84VBaL7|E^P$^;&VApJ)hqZ{@u?{Z#S`tlMy zc<)f^+&P0*t+&1sx&X>%D9w(a^tI>LMhd;i$H2R+q^~OMQ(acmhLFS8vYz*{j(E9K zi0W@?4C)UvV<;Yw+8SY04ZJpm9hCPI1(GFoby9k@4<*V=4s%0L`t#+L$6V>BzJeYH zvQfwYtwQS$N*6I3m&r>7FziGpuKNV7@ka=Y$)o&bA^r^aEU*t4;0%_!<=MW$5#{*M zV?;Rrgfzh+t{uYVB&JtF$;SZ>4hHX@ys%?Da3=xFlH@OW)qlNDy(aI)3y>!Un{x&@ z;(9j*uFK<(_umf2#a%c|v9S>5+pc6UQ$d|)WY6#k!ar^HapjAA(|1_PmA3Gcyi+Eo zFla7_R(qpo~Rc#`FU+0J>>ALDk+sOVj^up3zKfT%Y?_89P+3>N86XF z(vNsRFrx4$&wyA+VLNZCZ4tBWP5u*jcx{hG%4tMN+N{sbjNcCAZK_pQwR>O+8Gr2cr?eEF7nF0C<%Oq_SYF(Zx7-4be@C8#qqB zj~=R6EjhlApvo;G4F3nmKm#`eEn>NGjsf;C%}&0I+A6G+%rQdgFCo z<_aFsOWNSRh{<@^y0*aJ_VJ{<*`MbI%qn%w}0OgmH@~jB! z%_uBDV%C<0*0sMWfJzCs_Y->WL5Q212)}rha1{PQ7OxDoiUfX*KqPXb(Icq-<m^1ZNB#pYqiN5 zn_dwiRLBmX9;~42iXl@6KiR}XkjXRl)R2Kz;vgE2R7O=@Cw{#pZm6f>B7@($*LA=1 z1!U+#BW(Zpd7wH*sCx2ONm+TQ!#ClPQA$kov4e#HjHV!K7bxJBGW2qquud;r+C0hI zbw32P&;{wtSS&u<}30><1)| zriYS-j+epC<1dQBG3?!5t&1mznt*JD`2}zhBF_c&FSNfV2OT=98$W`EdpM{hE|!gYLGwW(*BA*gS>8vZoq-6&2jBzu%;ZrSAtIl1vwG zU6KNIC4YCh5jns#eAAR?g<5Ao!+z)Ofl`r^deEmYk6K{vqUtcfi`5#A|B%N0Wq}>Z z2VT9~ic>#j{yU8qxI(PHHt1g%7eIq?Spg&(`R{-4!G_B*H0clKIoKXht|mYh>IGy|WEn&vXujkpDR$`k0+UhEgimB;S@g76oY zUQeM<17}?4W7pxJ9}oIZ5f@4U-i`IRs3QSB1RsY>1&o$<{ zelh4pR?pc?40A~OOMAzi z#)|Z9IKXlo3M{}*31s|0=T&4v4LW zf-gCx&Li9&he@#VY`+S= zI*&3WS$9}BNt#oRpH}L$eS0O>sT3+QFWZJ67>x;D9kaAUu>^31Av3K&Xl)q^(xump zQVEgdT8L24Xzx1*i9l*^f+!PUA%n(c`#p**Ka2y;&C_|-#X0eDj@aUawJl&U_5qaq zt!^Nr=C7vFXCjZfqDJJ;Y2jO5=^17-948yqh%_(UU`tG?swNfeY+?h6j=h3?mLC(3 z5Y(PBq^jQ2fc=t8VM*b_JqW@8;OVlu`M6a$cX6JUAsCQz-QkJKhbrwpzOsv*Lj58q zSHo@8fnvWg1S$3uAKyE8@9xjhU-IW(rC9bmm!K{|*KvQCVq749emLWIP=C3i#$L&B z3-20iz$41BS!_^q|4!#->$n%sQL9x>HC1wS2ZEH#M~)$4ppV$*#SZ;qor~ep6hxy}a z^;0NaFjJLJI*?_X^r$}S=}fWeR2gw0S}&xtDmobI;ARB@**%K>dIH|k6<h?Xx= z20gGT^7C2Cs%g{&9RabcA>V|Pb$d0FqJ5sIr< z#EaKukNC?uZE$>SSb@9b-%z{3j9^S&D+`o-Si7{m^@Cy=O*iYL2B37(@DA8nufe)l z#5edK2Lo1m8&eAjOcc`L%{x~K#E)hDPA3niS1(ewM*F_`ZWCU)g-l&A6eH zhb%nVd!E@spUD8sm6sHz><9Z#UNAs0J*SO%>I#Rvg1w>n8v=h z76Sv7`4|(!9P$eQ<#PUsC!n{-)51qrBnFhK(v3QU3?qwuHuwLJQA<4>GJ6+!!$Rmv&tgPK?F2JC zwCPR26G(wB`G&Q*$a$lzh?1ZWP+yQ&xQZn}=;R0*RnrWd8dx-RPjTEH6)m<6DGnKN{Z38o)(#YV>n<+?1Ph=B>TH@BM@EvNQhEc%UW0^qN`; zNY0DhNKGPE$7c<=a^G~t3{1JNdpbwG*kBEEy3l;fQ;ihIhnP9Pk4=oV*(cgiXe(g< zr%VeU+;p>1GhTvSW2K!ynR9ui^B65=Ah?YCf!K`7+;H(13bAh8=(g zo3nRfN*#$IT34HX4Z zi+M2S=^M0`#h z@V@AU8kw)^=PRekMHmhoO3)p-UG+ok&WY@9N>^sW%B}KiPO>^c58q5RIhu;H|IFIrvh>bR zzttuHgxgp4vX4Ozh{npq*iWF54b{z7))A7jk8uM4;8n%>P6SzN8!qHhSZcR5X`_I* ztrS$3ph+E@>G}#rWmTu(&1&#Afcv>^Y%(F2>$WB)4mCbYp*qA@QKdVR_lx{9t)pyI z8576r$QC`)7*sKO$E$w`m(z zeUivG53E-1HQJn$v!iqhHv$LH4v7B=-8gjDcT*e=6fqwC`1fBhcbIaI2QCRlEs(qm zr1Kf9p5bDwbBD!_LLDv*d$3v;cV}8JfhMUG-}h?@WoE-5fCUhJp4nQ~V$o0Vh5J~> zy*e0D)XM|v=>)8wnHflg0j}KxWp&UJg5=Six^jS7EcjZk_|!NPNQCso8xs`=Ez3Im%v?AG&Wlg^@z^SgOu`qk2z;kB)p+s** z)80}bQzsMCA)kdV#v?Ups8VJ&#V_wi{awbmI?$hs25F`^e^HvERX1A;{k-M{xVfr} z{W6(O671n$q{%#3=%MbH(OO679M5sZ2cu1DJ_rfNfXBEpw@6?8?Nw6pR(KD`kC&H>7z z1to;}+k)i85$DXL*LVk42;&A&&@s$V8LAj<(5K-Bib-{>3ep6;({!*`yyC6IVtUdU zM!d|znE|i$d^%SL5p+IiS2nr^6{5a@R)Iv1{P6ynu;_h^IH1iDgVv4U^5`iWdVtoQ zzECQc`ze`T8ndeTTAxa?(ah2lg2moP1yOn2M1AE{=qGY0rE70tW^&OwmFYRdEPHY_ z)M9=Adb2gprj8Z0eE4x2pG&${IYO==?Nr58yQqANK&L;c{V~G#!LDcg?k6xr#_pFcKUtug{nSZ1O+~m14~eI=HQeMRSe|`Omy86S)6#=cZwWJ09%hS z1*+gLWNV{Qw?S|2RVL~$4@och0nXvn*^c3@vj@bMf1KVw=hV+iaNrJOBSs?(^&GoI?jEwP9+(UY0ZsBP@3K?Y7;|BT6diH+Sn*|G-OYEsN!85Zd-$A>2WN2!AwmM!m;E`-L1D=r45=Mvny}_amZujXt@un z5z+6g&NdV?6Z#w2rXN+&z(5Pm-lSTUN7dr1XW@Q~?t7p8q~4;-m$N|LsC^qW82(Q~ zDTh-*fuYl7zsDyht>VDdCSAzL`6(&QrGfw04{vxeXSiRZk5zT$RRVDxPcNOa-u8yn z(}P7ZUI!h2_5%h7#iM8h&QXxF9`ug74Q_;PcK?DtTEB&REo&fuxXSJ1s<6PwQ*}JX zy0>!K|2Lfk+94+KP~35jSVM}7((kAsQ-4|v>f1eRe175uu8k%Gl=`XkV%@uut!#$q z`%*!HOzEd5g~cWh1EUlx_}-|?7diaV3(8m`y`4t@hzbJCN$}i7Qj4xy+km+|%EMma zP9aW1pyQ%6<&dgw-?T!n*!}r|=E%soJ9(J%VIZ-&%A3B_X*o26+F)1&Dov(myO#RT zd{{wWN4a)x0p0hY*>D55jRC$awa48>m7YmxGCL-J;zerviK_JFH-`z*{V8ok9Zac7 z;qNH{>&5;Z}2IEErz-G}_6I`O81xBU@7nqh9=xN-^S-C+nJouCz zja4A0QxGvz%V>7BaowOkGQ6@Hb-{~_Y|xX3qt z;(_554EP|L`<(`T-QrDg(hQ6evp|Hkn++0j|yxdaM>NXvMv8*T+eABsvNKSOvl1NJ)T~ zlhl(iXUVWxtDuZiPiC==$N>sI~C9?#%rYnW$&n5Kki{4C$E)>q{GZ88u=O z33ZT2$J+G{Cmrkyz|N4AWk;;Zqv%Th*YeYV0Fr|)v*v;ENmo8OVKS~DX{Cig^GB}7 z2CtQ)-MX74OCi>o{BY{*LRUif_~(>PfF<=wW$HSE5$Wnz8Eobpmb8bn?3aoGW;43( zxgQSXk3%vGapem7{Fp}b$WH0o?K?Nu5xJcy;UUFLW#gXQhD`G^(D;t#x(2rqbE4Yb4a+1t9-6KYh_&tAg!tjtgA51;~vF^5RWYuzf9Xm2f7M!3osUDYfnH%A zICq5*Zo|y|l;p?`TCa*~@L8c?_kEE5ugy&;2)nT#LC!`L;*^5cegw$5c*o$}mjo08 z+ulr#fhEsIR)a;Kkl85iai3zB-_11a4(M9yrwoOSyvI=vw#!Su?BuBGDtA`kPBr5F z50eGG5;|Oq)C;3Q+DP4UF$xLqL??7ld>%DjYSfB46WP=KSqu(2NE8$j1I_6Ne96-8%rgJ0SL*sANT$zZ3YTERp*DqXkX4w53%IA=+Tm%X9q70jhU?aJwZevhS2|TbFB{*D`a|R z*#Rr@xPTDt)pSf-GNM>TznD1Gd2Jzec}@WZnwk3y*ns~HtK<362o2p`Qm>Zu$LJND zR`bWHEe{=7840)bN7p#)Lmy``Xyx*|AeDbz9u=eQRWI={ce4m9^^<}0!ScO+@ibQZ zaT7FbRw|WASD?*n95&c{?;&!4YqDp>qdGfU--k-Lud-t!?`x3(*ZwAYKts7If?1g4 zfL38Sn?-YAF!GJf@Q;o^uBK-}LxMp2dY}Rdd?QclGfZi6Z2+fNYh^L~`;VBS>q&|B z)mr=6c3q`6$T($iwTF&R8!9_ungU>zKPjsxULs20EyQ~WHGIMa=H;^!$_JI7Dx-`s z0}0KhO~QohZwk_k?BJi1a|zGjjt{~LuhZlB@t_*6VM@?$!;Bf}!z^nVU~3*S+MkBJ2DcEojj3&B;ae`*<9q`2#>!?to0 zA0`H7VnO9#IsP)&0DDRVVJmfG;vQI<#-EwB#VqZqu~j3nB_11Mu|nU2V2?Ll#eOo- z7%sQ$v9JAd(MN{D%KDA2J&PZ+X(?vysUCTbo9mq7@4L$gy<|5$umkSk#WbTYBZ;HK zyMVrPJ$wqa6m2v6y=whcHlGHp@Cm%odXFY>!;Vx$ID36e-)9e1B|&hAYwbA_k4idK zpv|?duArrT`W5Ttnj^;rdwNF3yltr7-q-zB-H~CXoM3sMlxHBEM{hu<%h5rUE4p;9 zfUvr4qG#*ZE{7qiS>YfYp{*a&+sPgInP#-Cf=b50cT}X)n2y-1I3fh z^Xf?Ck!zu7is!e$2j0WL@7q#v#~+;qzyGE5dz@EjiX-^{7av1ei67x3S46!F_QW1} z5LP4j0nBtt4X@m@3lIH_1#Fb$Op>V*?u|4i?&(_> zq`3oH(fBl|?19hEs<(;x<!NF>gjwy!k$sY6}nK*!0te|~7mdqh>LY5BO(&0Z0UsFaT9V%g`X1jGW_4!>sn zctw&&$izk2Pgf78mX34i_ZUlHRJl~8Qr*0)cfQp-N42vx_N&Uqyr50z$5++(mL9&T zCN&mtI?7wO%xLLk@5HQ3SQP-~Y2g`y(~3IA}+gs^_p-2#;Rybkr78Z_%a9fDStI z8!waLC|?j6%lY@#>)NPQKyD z=;-Ls5LYykh=S2$p?IJX$=1k+A8;P__6;)@>H%ZIm4Dx((d;Z)$H^Q;q2|UmT?Uv+ z=N07VD5P8{qZVG~D<4-0HxWJ98&0*uy-{YjFfWeY2xj68FD&<y#lmZz?1-^0jVtjjF01;>3=;czBb zEwoDHfNatVxOI}qT@?%5s@K3LNO?ZQ&`|yFzl}5mC%=fZ5fjU1eEl#_%dzugl539) zQ}blb7v)L&qA&7_sMVP+Zi0zm7*Uw987&Vm1pjN%ccyY0??v*6S)9zXog%XsJ!UJ? z%pnG+ce$~9_uouU$R}Ql_}En4OsB4G3&#_Neh!Pifkbn`-8iRa-4;{>K=B}p_=C8H z!4}^Q|E)hFI&{~9_-r~!%*snv+hZNHCuG{g3Lo=I>oHsSs3x}P?il0H2n!223=Ml- z=4Lk}Bk%r}T%^8oCrP{obvw(%bk38Z@WNk~-+}8;3|B;10(lRGzUwRauDh)9okI?~ ztdUgy^HXinT}jfgrq7@6oFbmi!3St36%LImhLMLA9&3wnYJ2rIsiRd_w;vOrENG!T zZZC8?jmb8BiCG}1{F=025H+7qQ#ZI8N6%8F8La@-s3oG^`7ypMKI%zlGH4uzLZArR z7#gvE&Nh>S5YBEvCGFfoFX*UEm>d*x&?a1siI?f%NE@s3qliK-3kC%+k+amjeg!n$ z>i{&&)j@lC;*uEm*_*x{y1~n4k?~Xya^f5AWy1*0E-n^tkzU}f_CvY-dzmtr=*me) zZ9Q5AP79}{n(`s10JlBv$MpCuvMGc?121!B3rNg`2i3+xk&{ev zkW%=w6Q5ti3pb%`z<%hbod(j}XU=mj2PxX~xd4sLNJ6UPb7{bLx0122-NX>x)Qm*7 zL=?JJ8Q<)jb%2{WQ1fWt$1kYHSac;iaS~MGML*yI{eWzm`<|l&YJ{0f5jEMOtJJDH zu3-+3DjW*oGwQUK5YYHEkA@`)7$~9yEjl>}$tK{^#2D9~02=aOBm18^X!kSb%!)Js z{jancUYO1nj>dlVAyq_u19~mYxcVE!K2T#Dyx$ilR{k>A+ zA_RzDcW%DfNiSt#t~(dH3>0o;Bza_EYxETh<(?mDM%~*TYWM_6S5VfW0LLN_^zIn2 z&1$-`7@ZJPQ$MoF93X^mJLE~K9JDu218KeO%R^{Itdm9~H?U**kw|b*KnXVdW8$Y^ z1jEW_;M^45#JHD6FuF6XU#Io}$Loyn=OMYCGux(_LC+Y7xv3bldv zIG#3^A{WY)Hr5bG)0Q@N5mCv%F31m##*CJnd7(*-9=gNk-_Y2ZBrmX6Y*jiM=3rL+ z7r5zHWeCj<+SeDrUfzj9uH~=6xe1A2QJe%`qiTI#LdYetWL%&(7>Q2yo;Oe(nPd;} z3+w`EMz7Li3TI*4+{1zqYWy!LLt1i@ymGk&hQs8d4kuZtU% zAYl6V1PPZs4#KF%YRBg!e|~5RmMXs8ZoufAjcQOrc><3!EgIMxm-6`HN1Y#GTyfkM z!g*ClmfrmJU)BnIvGD8Pjzt$F_eCPN!7jffq5uo(?|+MiUAK~cO_tIK7g%j4PpK|7 z8wyPkf^I|Wl{BMst&vE6C2XJO2YYj+4&8CMfMzENEMvm9AOx)REoN7aVvM<}lP`P3 z=a=OoI{y~|D2Z*2bang<K@#bltw0tyc-^; zKkx6smLf`#1AdLLaxmsY8K4+eul0jlHVqC1+36imC7QY{8|NBPLJ*!SeX{u&8eB{f zWm4aMjS#@85sBQ=YYjwW8-p)Kp%IRb8W|fLJ!Bk!&VsWh|4&LU@;p zbUG&{8@`=lQ3#Br^2W?q=a+%p1X|}wH9CH8G{Wc$&V6&qSPj20KW}4en;`8a1tWwo zNI3uc>%(uE$s8|@F^)u=>^@NY5py576#;8J1bUYrdc1@c18y$D&oJQZ=mTHG)_?(4 z?ywTm*7Y_X7{z&qLZRJ~1=XHsJ;erTHMv8qXg2&KdbEHds&XSc64{k_gIf_bGBT2k zt8iWz>g?=HQ;J?eW9$7XFJ8Q;h@#zBjApdT``7O&jL=$^lZ$I}$<4$C2E+?%gTvah z8FA1arjL#+l+dfdER3tP}j!FU+#XMIN^(K0jE705*3k9b)HL1Zhy|2A5a@5#bS_!i^W}UMxuhv?1*NlRJS+~o?Ka35D zKz6oHqto$}S+(y*l zGUi!YQ4t5e4l&xUgjzY{A#(ltzKaJugOplrp*iTY8qo3tj4(RH<_#A40S4R$o46Eu z{7BD}x&GWZ5yab#DYf|;mw5{lGL}bN$GTpDk7(Nf1qP%c3ZbimKYFiYY?zQcjWXH- z@7&Kt?RiW|8*a^J=U4Bnw0U_=1;VN~cUHUh7NS(83Al++>1r43=tzYN_IufCEfG`Y z#;AKKVyxO}PP-Zw3L2@~ArLbXOF-4(rl+UBiI5!uckn^+(#)rFa03IXxWR`6{tR55W;9VP*_vi#Zp3IBs(l1J1D|Fzy6w5FXoz0`ng~o3#PJo_YQ52D zxh*)MvD)~^52ih$>~m|DB<6Nzj!zxTjcuWSAxx}E_yq)*`Iw=9NlKEy?wQ+JJhfyN z;Nufv-v5sTCTnH$)ZBp?CTnB-)cmfwDZ|E@eXphmA zsr5X2QiQ#Ga%=q6S3wfXn_}z_8@$y6>ThW$R&EQDyyaUHc>P-C=~4^v+oJ<7IF9Da zEKN_AMg%sr6wZmt%O}4hq2~U^art59O$CK_XKPL9DoL}8gbK?{!pJJ<0_*%bY&xHw zHjR`K((lZ4rx?y@5n=F{auVKlTwa;9wwIR+I~%o>_4bN?QXXq4aiFkuOrJUNOs7oF zt&Gac@57U??64#!^DWqPicwSyNy$7zaP_1n)OK(5bMc^c4mp%eD`>`k?q2(C{A(y%f-UhnA~rvBjpKKH?oVk(G?abGlTNbtpWHuvlmxe zC`oLM3YcP!Ewb6)Jx<5@)#D@2V}6RBim$8WHwxvc#+?>h?!B^_@;*%+my;b=>6g>+ z-02PzR!+ID5KjE|hzm(W&au_I;jdSZXj6Xh+@akJ7QlqQvTannQ$)x5IbUJM2Nw6M z{xa|I4L;jPr;4U=j^T43nnvUU!j)c<`|#A8W@|`4lB!6p53QtME;>EHW9#!1 z%JcQTi)UY+R9wI5C!+60!sMpD^%tE!MK`U?U)-GE1{O-MH=Ig)ZhOjG`<3DlDPf~V zs^;ny%t`GZuEQ?g!;Dx~y791IGG5OvF@Fkek~lg;_lacU_?fUb=euq=Fh0p!h_&sv zz4$W8RTV)T`HX`rWq$ESRTJm2j>qzjSdFRm>8sEDHW|jx_ETy;3%c`~#IJ}(it9Ve zQoqNy7wKtPkK=tu&hfd?e`!5>Oz?i8*vv8mgBKV$(a&W$d=?bPn}_tw@*j zCl3Y%d$H+xYj92|PJnJ1`%Y zQj&63x}kcAk{Va;>O>)@K~+LwYtbq=(BOl>GS3dT9{W7}bEjjjvx4@2 zAm^Ux_TsucEeA{QsETjU?Uq*}Gw1WjU@hDx66VyqD>tM(-Mt@QyyO@#98C)IP|H}L z->u<0^>meJ>L*pWcU<+ccbV5jns19b8-BmzIFQ@ckKFd{Q`sp|j=o;ZK%G15_Cm~E zW~;OOK6=R^!A@M~g3lQ$wYTA^bMO8Nv+3=)nUd^MRd)r}5j_{vZ!8$G?!vgaVN9A= zj^i|-VyirL`e)%a(c(7O7}4Q=;kQmPA3 z;Rd3nYSsIK=D5#^I^RPetQ2kdxS}~%jb8hYUew}T`=$Yt_Hyw6=#L@|p4TSu?pa4} z53GuD-3;A!!WcJs^qChMr)>`5beiD&CbOC75Yib!8?6kz%m3x@Z%v1#2l;ai)<6g9 zb%Tqmd~rcN0f#e_Bl!djz49L>-7|j~6*;@L1vmDVU`6up{Nh9K8@c{}=mciQ|EUug z|FN?E@9Ts;yDc^Z-#a~nXA>p_=1&0$<-Ai8*+RkwU@;xFYA<>nv7?8sxUu%4vIMS9&oexqxkk6LG{fY2lE)&2SB^*baU{IhLIzV` zgxJRaU>~{u5nrR;rbN*mdBGKDU%eJv?mMCz+VjL{AQx$Kh?4CIB#Yqz3ujxS=Qz74 z2A4+z*+m8}5A~BJu%GK9I{p5IZQT^(`X{tsaZbJJisY2$X72Z)XSaL{6|}R%@dpi@ zDDs?S#O}SQ8&i9wXlpVN6b*{iExq0{M<$?ccWzw7Z!!y%! z*MS80DLDeD5ogYfDFZW%!Bssq4;;_BW=dT&AWncgO0h#-Zlt$WcD6b-5BuHpHIkp| zJ8_jHs@$>QoBzJ|HitDg$G{8-Mj?jbY&kj`fY`uc{F3E2EDlI`P~LggL8lG@NW&eABrSrxxj%wB0f@pnC{Qdh zLTNE$+MdLTV89cC4g?Azpja8gwi)*}etv(bA5!?b2MsH0s-us(L9&cpr;5kQtFpkJ zXAm_6;1t`q&;xlr`OC3d%Z}!R2srnh99aF)D^KITL?C_uxG0SK{+1{FjUO}$eXIru zoO3)8wmndZEH=MQo@CACOf8X05csmq z#0faTr9${$rXas5B}lhdlt}Q@wm-Yr(}gcvk63Cr0@MORoN%gGA#a>I*B^R|jM3p9; zof`3Bu;?0O7ByCV(+nb4%zKNF-uArAS(?$@Q}zXSP_5W4Zo_iO_F3m{f!bij1lCS@ zzc9triRKBwhsugmG}jq+OAD{=l(&{0*o_|z%FbP-0$uB3zR}!S8 zij+;<7ggOsCVv}4~#`@`Xj3(g4#9H&=Cd^AF#_ddn;1wbz37&N_Uf%|~S_h?T*4IA>OLft*;0T%C&9kQ`?-Fd9~)-Bu*pEB!9z9@tC zozQ@>YvkZ}0D?&#O#`unK}gDF6%B(@B$6ehCxrt;ab>~MM&%?}ihEjLtZu`t2(Dd> z8sXTcX_nAP;f5Aqu6(;E%<~=)jv{T$9(a_hHL+$z%TTzybwL^F;pF~p7&_BPd z5Ym`YK4h7l+l1%P&X4LYMy>-z=XjUQU3rQ|KMrr7n0h+@D<*r|JJMnmj^Dc@y^qSnkaMf_Po2r&(uoqIQL;-r_nJbY!|m!gr+EF&{XHFcQMS- zL@kiV+R(tz0R^I@zM;-sO%1($VT069Wak#MSiYnso89I+rJMfQU>2vH%BQk0k#6K< zbPey(@cg+0&*%5fU!8B8swS5sk5__uB=ltiAYXWf#8fnX}TEoM0oQM zyf3zS3_*e%#yyV}^BY44Q)m>7DObARKQEX)qneFo;SiWaJ#HWY7K3ObnlM2LgXteO zH8?2Fu6krVG^rs#X5wI%^aS=}q#_&&rJK6>8H8X9Q-pUvhRjJp{%Qa>%Q7It^$>-a ztWofL|5gOpV?8NNygxibnm@cQa`O-b&ap^ImH*v>2h=;BQfd4Kz`TM%bOO<_={a-) zr;%f`adO}fjwlArAO#gLc$Ik>wKOA^=NQP6fZh5A2809@+p;r zGs)insJI%r1nv~yu~$csAHwWdw{u?!aZdNRIGWkMk#U%kg8O`Elc@R>H2$=l=6EuG zXcBZsPs>UTK^s@lIPizbAJ3m{cH7N~6=hbdh3Jc$1Do~S8M)#5xG!`02}Ugs&(A0# zF?+#<;)WL4*XP<^xF<1DJ1h!O{*o~-7A_w|3oc7A1q(+J$dngz{wPv4tSH5L5sZ}x z7=DU=3?$JxlaEWZU_iiRy#|H7BqAD{(!B%Xs#k&3i;L>HJjI%0cg^^YkSD^~GM-YI z-YF6edTJcS3LRaZf}er_`doRv=LZDc+vzDL>W1r_I=^o&+fNV{W1RK&4zY*2UR#w% zQ(~$9VG0ZEDW!!cvDbR6K~0ir$oMz;#}1+z5ikj_-+$z=w0!e?4u4Irl@pS|BBIMMa}%uQd&x6Q<` zH&L3-cFm7vIN_#dELrJ$~?0aLf9Wo?OVYOG4d_m(rU3@dbYgm|Ek@8_;4#HU-&qR18*=% zOYYP}Ir6E>)RPhUM|7J0*hK87N?>KP%ZSY7l?xPn$b2+OQ-6AKKZihjZJy={EV26l2gYcS;RtS4ik~We8D51uI!5 ztASO_gjJR*s{t?+8%a{^7@%5cm(c|N;FYEuO{9(;t6g5v8auWC_VM?7BDjW6-mv2{ z2Z%kw-t$<95yIi^oe2FXGU@}Gz4XZaAG>x!O|TC?)X@gD|C#p~ng9LITK9h?HiG|u zPuxX$ATf&prss^>+u0N;k`W_47XrgROdl;vhIxy}rL4ypp6BI_T4Pq$jhshHqN7_ z9kw+Xx=C-w;>pz|IGaU8y7Zq+X1#Bo%0uMgj5ldBbCvB+fIPFCsUOO>d!1wSR3prx z=8^$?%JB?}K->9hx6ei0XSeiBB;i`PfkSiu+C>;F5>%V2!9?ElhWm~}a2unu#t_D)&5GG3kbf)rRqK)t*erIRN4k+J z1+V(nKSv=UkqKOD;qYj_Ox3QrV42mOLeIvmCGf{`EgaaG`+GZ1m!oxTKPfQszePpi ztLA^qRy0Xx?I?9>?HZ3Z52LdT6awT$Bi`uoxVC(0-LS-6Z|mUUX7iAyK3^1w^ zy=&SdiEiGc=PkCj9k5N~T0T1sV7bf=17dmTe2mqRo zJ`9#W04nbi8o14fagw9sy+hFIiYMps`vjriUatGew_a_e^9>xN3@pF6#-t^xFklO&HS6&9x zq$4=b8@=?yvIqFZg7Z&{db_jt^Z0`U3HUvLX>N6Obp#ajA(Ynwz&L~eGN-I?@_2W* z2k@8A+6(0ub2}sV%ST5zglP6;dM|P&;FnMZ2k^eUulwDu*&(3AyVbr$7~A7<{DXU9 zF%>C~>269whPXV4edyu^4aXk;w7Biv_QS0OUf#gI{KE$c<+thY+p2$XK3EMC)aDVO zg7Vwoj$rsr*a+kX2;}DG9uzDDh^GcPHnJJ};R?vDgFc5Ry|a5zf)Dtmo23J|SHjNc zhroD#4mh}jdj><^fP8(1JiY$~%`cM0l6`cK)?R!1sro zL;i6Gi-xoARSRInMS0_{|Rd29V_y&;_8U z@1x*Xj|WG1-*adVi0`}H{}@vPg>nT8|JAr%%KlYqT+_qR|F9BJ2mHg8TKb6SAOM)+ z6J|d_JZ|vyJo@n~{lcgF^P~C0J^7P-{;Lt6SXy|1=b6d_`@`p%hdez0N*h6T;^E0{ z9?6h-i6Z{p2pIK@(uzD_}eXaWe)uK5i|l|OIO}BmIS?D(ZLU}z5#pm76Anb+nkx zzyR;Bb%9R;vak9F9s$(e@+(T@4Pd+D7Z2dCb%##^vA_C<9l?77{2P>8sQwq@`!;9u zL_ZF_5B3AiOA7c0oA*8q8|wa3g#KOQ`s)0ZHl$=a-nXyh6#Ew_*OBuZ&@I1cSPtnY8f8DXK6!u!mE?RWJwl|3{=d4=~q+^p`U{CF()qDuX$c|Ky zH=)|!Vd*0r`mclR6-=hzTv7%W{MMVJ(WCv*&k1r&Z?%wW1Z?;kep%vs4vAA zQjX$OO-AQ~KQkC+yhe*8rbH}lK>XE$i zxO%7g&KAKc@i|+Oovfb6@vz-PS6C-;y4e~d$Qb^|TZIFkMCX?e|7yS$c)wED-@s@> zu_>0s%u^&p+2g=bDd4%UrpvWSvMmro#1YkLSh0 zcdHd9L7y&Vtuv)hSUuf&Y2z6>w~?IbPjftrpcwi^nvBHRw_ArYSSMqdGS6Mes;QB z$7)YKHOl`C1tr#g#?4o#JYfN)|l3DOG zjIUI`I(W`pj1_&;MR)B8ezmUjg5O<*=T~F2y~0Fd{TyAFQHy2iIDuY|A)Se5VQZsc z(&obccyvS{HzAqFp}F7TmSQe!$*!Gh*gEzRsP~RmH|wlkvmf`Y9_gvrHT! z@Y~&=#WHQDBnD&PiO>=PW@hRVe6<78&?4tVDUpl5@udir`YaCwX%t~z(BUl5a;J2` zdcU{+b9kPDfeE9+=n}ac92G3Ew0mQNXQ*SG^pu{s7qrsAv>ktH8lR{o z)a;3GU=GbE3U|ar#p!T>IC3zg(aS_{y%5}e2c#Beu;+lTj@=8dB!1IJPLCD<|K(Y< zHD(y8g|o{onI5&w#kY~*JGSpAoi5BJE7s#qrHNbx9go7s3rX`)pRPaJdj}p#z|7Ao z@f9f>aHu@CG27a`+d(8RKFshp%Rlg6FL6l~lg*^P0PRRgE!35nt&tC$^xRY9zPqSZ zUuYUfL-s3YFcjFdJ`&nE{FZ3!j!yRVd*CGD#x$?8WxlXw&&XfM-x7jHU-%HZbQdu6 zu@K4_+M$gGh2|g=gHID(^MPPf6TVla&^1TdI7y5F$&{!yj-d>9lBplPU)4aH!9SXF z)e1a6s#LL7g(N=vCdCC_AT5vjS+ew%dSQCq2%=)pC{1yTI~CAE%9Av0WpTnen-V0l zwX#CnLP(Mp#i;iHgy)5Il?k|nx(VF-i3XBlj@%)tnJKXSmy$~TcMvHCRT70oloJ|R zqA2^WwG}`CHW~J+9_ld=`EQAV=l*maUNrh$^OJWY4r#kR?`FqX|#REIh&$SSE~G4srNZ;IVxiFPgcI+hWhU2 zIgqviO96W(jdTyFz%OlF!pI}mfPRDFy6Aj5wnJAsII_>F@rL;!P>-rQiAg$&ln~y7 z+nX5OHiwxD^1-7i|A^;~BuetUBz)#al{-Ijgj|7kvXWwT@=%=&l}a!$UG; zCNBq`G(lYz%QW_~_p*Jq=ICaN&x5t(QTbF&*j)xON(vN7`%sC#HgEW4G1!k#h$O=b zBS7nw)32EQ&#Lq*6{7wGpFg%6X0ui=q}lH?91}irD)RTMj6YvI z=naz~iW)Rk4{eZIV$eZPm0K9hl{7=ZMy9mj5KFlY2wd}EhlalJC(=*xwnIS(oqCOM z1#o+eMa;`ifMPf;f2*GoiR}?Xp=#I^X=hRLdq9t1(msr##5u?z)I`5(K8sYm`9DB= zpqX;y!#1&TT(EA^gr6IPSb0^$h6s-uf9ohQjZu1^?|e=(=rtsv0?aHX{F9-ORRw zSiWKVOi{1u>XRhuSX2^WL=>WX!zyWyT8~U&i(c%GTp%#D8vQMffcf`X0mlnUE#rVL zVRSkG+vhZjjoS(kJ8w#FST}Lwk)HDvlG&PIN{~k1vveZsggm~tw?V$pPAN;65jvHw z@(72;0R+i3mXQOpg5_oz$L)maAD5L=L+@Obh&L|_5DI@7TS?C7M5O3DfYC%YN*|-q zeXIsYGap30XDX{V9uelc2%j!RI4oy6$6)4U%0dK64@ys^)8b`ienF~C*?F#$!By}JeaAbbs{!+Nt$NVI*Zc% zlaEy7quSs~3wAe$#z);dFljloPYUZw-V%CW+Uv^zzC*;$M^o1(`Ta^H!jY!cUM1)_ zp5dgG#>nAm1)3>XLZv203cM5Ohmv@*anpK5vZ#XelU%|cbduMfIF;-PqVb0$xXp{T(3bMLlEIL`6Pg9*$%(MpPBPF8%u4n` ze~-k$O-{#2^67{(W!Kvd+$QXLx|Nbe4qG@t zYgYMQ^DpY=3v`I;9w}9Z?}($sFE=Z~Dfc!hp8~vB-yIC5zf;>~G_%I--kA4sw!f>+ z^9~!RtT_#<_jplh>MgpQvVvVc#HJ!uS=Lv2QjJq*$`ApsLuH?5AZK0Eu_fiuwKYJ4 z!|tbe;GqRo3}c6y)r=Gmy9$Ird$p9e4PkPQ*&o15tCfJ z#b7p)$YY$-STnPo^U8MJ_I@!ZN1uhA;<8B1_TLTIX*frHox@nu+ra09vLQgQ$n38tWPZZIJ zgIYtnSc5Cu%2awpdx4+U$*$WpqDsDv3ke6t% zL{RuULjCLn!~cA)(`HOm!+Tgd2Z1X#N|N@+?vxcYxX1Zmhr#iP{K~yF8=&9fH%0fz ztSF+vPgDtMh)mu^t5_+n17gG&?SKXzD(602g@%`dOqDNia`w6>n42aJPwR@d4Rh52 zUUJ$iv^3ffp-Y~a9*y)~lY|lpgS^>M5C?K+llGs1FV4q4pegHK*FxB7-Tu?n9ZOe> zDg;o?+a@xkSuMkXO^;dFumN1Gz4e)le~J#iP#X4r?9Xjk*qGc{$FZ5>d)TdewH}BZ zANJ*+lkiT1JWQUQzQmp`qq!(O?iFCCX$7};R8~-BToz;fSj4AgAA%}BVe~0IA7i_2 zKXw&Y`^cZ=xec^rMZEmb+xQdVw}wk$F8fb zYV@FOl%zKZtmHxgneI+`QW$&pM0GRn1^0BDo)UK8&=4ySVcdPYJQT@KBcTiR=)Ft4R5nA1fr z

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 -%------------------------------------------------------------------------------- -function [G1,Q,Ntime,G1_pad]=gen_Doppler_kern(win_params,N,Ntime) -if(nargin<3 || isempty(Ntime)), Ntime=[]; end - - -DBplot=0; - - -%--------------------------------------------------------------------- -% 1. make sure parameters are ok -%--------------------------------------------------------------------- -Q=win_params{1}; -% window length can not be greater than N: -if(Q>N) - warning('length of g2 too long: chopping down length N'); - Q=N; -end -% force window length to be odd-value: -if(Q/2==fix(Q/2)) - Q=Q-1; - warning(['Forcing Q to be odd. Q is now Q=',num2str(Q)]); -end -Qh_floor=floor(Q/2); - - -l=length(win_params); -if( l<2 ) - error('Need at least two window parameters'); -end -if(isempty(Ntime)), Ntime=Q+1; end - -if(Ntime<(Q+1)) - warning('Ntime is too short: increasing length to (Q+1)'); - Ntime=Q+1; -end - -% force Ntime to be even -if(rem(Ntime,2)), - Ntime=Ntime+1; - warning(['Forcing Ntime to be even. Ntime is now Ntime=',num2str(Ntime)]); -end - - - -%--------------------------------------------------------------------- -% 2. call function to generate window -%--------------------------------------------------------------------- -win_type=win_params{2}; -if( l>=3 ) win_extra_param=win_params{3}; else, win_extra_param=[]; end -if( l>3 ) win_dft_param=win_params{4}; else, win_dft_param=1; end - - -% if define in Doppler domain: -if(win_dft_param==1) - G1=get_window(Q,win_type,win_extra_param); - G1=G1(:); - - G1_pad=padWin(G1,Ntime); - - -else - % or defining window in the time-domain: - g1=get_window(Q,win_type,win_extra_param,0); - g1=padWin(g1,N); - G1_length=N; - - G1=real( fft(g1) ); - G1=G1./G1(1); - Ntime=N; Q=N; -end - - -%--------------------------------------------------------------------- -% 3. [OPTIONAL] post-process window -%--------------------------------------------------------------------- -% a. if normalizing window: -if(length(win_params)>4) - if(strcmpi(win_params{5},'y')==1) - G1=G1./sum(G1); - end -end - -% b. if (time) reversing window -if(length(win_params)>5 ) - G1=shiftWin(G1); - G1_pad=shiftWin(G1_pad); -end - - -if(DBplot) - figure(20); clf; hold all; - if(exist('G1_pad','var')) - subplot(211); plot(G1_pad); - end - subplot(212); plot(real(G1)); -end - - - - -function w=shiftWin(w) -%--------------------------------------------------------------------- -% shift window to centre -%--------------------------------------------------------------------- -w=circshift(w(:),ceil(length(w)/2)); diff --git a/src/paradigma/ppg/hr_functions/TFD toolbox JOT/common/gen_Doppler_lag_kern.m b/src/paradigma/ppg/hr_functions/TFD toolbox JOT/common/gen_Doppler_lag_kern.m deleted file mode 100644 index a6571061..00000000 --- a/src/paradigma/ppg/hr_functions/TFD toolbox JOT/common/gen_Doppler_lag_kern.m +++ /dev/null @@ -1,314 +0,0 @@ -%------------------------------------------------------------------------------- -% gen_Doppler_lag_kern: Doppler--lag kernel (for GDTFD definition) -% -% Syntax: kern=gen_Doppler_lag_kern(kern_type,kern_params,N) -% -% Input: -% kern_type = { 'wvd' | 'swvd' | 'pwvd' | 'sep' | 'cw' | 'mb'} -% wvd - kernel for Wigner-Ville distribution -% swvd - kernel for smoothed Wigner-Ville distribution -% (lag-independent kernel) -% pwvd - kernel for pseudo Wigner-Ville distribution -% (Doppler-independent kernel) -% sep - kernel for separable kernel (combintation of SWVD and PWVD) -% cw - kernel for Choi-Williams distribution -% mb - kernel for Modified-B distribution -% -% kern_params = cell of kernel parameters: -% wvd - {} -% swvd - {win_length,win_type,[win_param],[Doppler_or_time]} -% e.g. {11,'hamm',0,1} -% the parameter Doppler_or_time is either -% 0 = to define window in the time-domain -% 1 = to define window in the Doppler-domain -% pwvd - {win_length,win_type,[win_param]} -% e.g. {200,'cosh',0.1} -% sep - { {win1_length,win1_type,[win1_param]}, -% {win2_length,win2_type,[win2_param]} -% where win1 is the Doppler window and win2 is the lag window. -% e.g. { {11,'hamm'}, {200,'cosh',0.1} } -% cw - {sigma_parameter} -% mb - {beta_parameter} in the range 1 -%------------------------------------------------------------------------------- -function g=gen_Doppler_lag_kern(kern_type,kern_params,N,lag_index,G1) -if(nargin<3), error('need 3 input arguments'); end -if(nargin<4 || isempty(lag_index)), lag_index=[]; end -if(nargin<5 || isempty(G1)), G1=[]; end - - - -DBplot=0; - -lag_sample=2; -doppler_sample=1/N; - -if(isempty(lag_index)) - lag_index=1:N; - g=zeros(N); -else - g=zeros(N,1:length(lag_index)); -end - - - -if(~iscell(kern_params)) - tmp_params{1}=kern_params; - kern_params=tmp_params; -end - -g=get_kern(g,lag_index,kern_type,kern_params,doppler_sample,lag_sample,N,G1); - - -% All kernels are real valued. -g=real(g); - -if(DBplot) - figure(1); clf; - if(length(lag_index)==1) - plot( g ); - else - mesh( fftshift(g) ); - end - xlabel('lag'); ylabel('Doppler'); - title('Separable kernel'); -end - - - - -function g=get_kern(g,lag_index,kernel_type,kernel_params,doppler_sample_rate, ... - lag_sample_rate,N,G1) -%--------------------------------------------------------------------- -% generate the kernels for a given sample rate -%--------------------------------------------------------------------- -if(nargin<8 || isempty(G1)), G1=[]; end - -[Nd,Nl]=size(g); -l=length(kernel_params); - - -switch kernel_type - - case {'wvd'} - g(:,:)=1; - - - %--------------------------------------------------------------------- - % Smoothed Wigner-Ville (Lag Independent (LI) kernel) - % g(l/NT,mT) = W(l/NT) - %--------------------------------------------------------------------- - case 'swvd' - - if( l<2 ) - error('Need at least two window parameters for SWVD'); - end - win_length=kernel_params{1}; - win_type=kernel_params{2}; - win_param=0; win_param2=1; - if( l>=3 ) win_param=kernel_params{3}; end - if( l>=4 ) win_param2=kernel_params{4}; end - - - G1=get_window(win_length,win_type,win_param); - G1=padWin(G1,Nd); - - - % Define window in the time-domain (this is the usual practice): - % But could also define in the doppler-domain. - if( win_param2==0 ) - G1=fft(G1); - G1=G1./G1(1); - end - - if( isreal_fn(ifft(G1))==0 ) - warning('Window function g1(t) is NOT real valued.'); - end - - for m=1:Nl - g(:,m) = G1; - end - - - %--------------------------------------------------------------------- - % Pseudo-Wigner-Ville (Doppler Independent (DI) kernel) - % g(l/NT,mT) = g2(mT) - %--------------------------------------------------------------------- - case 'pwvd' - - if( l<2 ) - error('Need at least two window parameters for PWVD'); - end - P=kernel_params{1}; - win_type=kernel_params{2}; - win_param=0; win_param2=0; - if( l>2 ) win_param=kernel_params{3}; end - if( l>3 ) win_param2=kernel_params{4}; end - - g2=get_window(P,win_type,win_param,win_param2); - - g2=padWin(g2(:),N); - g2=g2(lag_index); - - if( Nd==Nl && isreal_fn(fft(g2))==0 ) - warning('Window function G2(f) is NOT real valued.'); - end - - for l=0:Nd-1 - g(l+1,:)=g2; - end - - %--------------------------------------------------------------------- - % Seperable Kernel - % - % g(l/NT,mT) = G1(l/NT)g2(mT) - % - %--------------------------------------------------------------------- - case { 'sep', 'sep-full' } - - if(l<2) - error('Need at least two windows parameters.'); - end - - g1=get_kern(g,lag_index,'swvd',kernel_params{1},doppler_sample_rate,lag_sample_rate,N); - g2=get_kern(g,lag_index,'pwvd',kernel_params{2},doppler_sample_rate,lag_sample_rate,N); - g=g1.*g2; - - - %--------------------------------------------------------------------- - % Choi-Williams - % - % g(l/NT,mT) = exp( -(2 pi m l/N)^2/ sigma ) - % - %--------------------------------------------------------------------- - case {'cw', 'choi-williams', 'choi-will'} - - if(l>=1) - sigma=kernel_params{1}; - else - sigma=11; - end - Ndh=ceil(Nd/2); - Nlh=ceil(Nl/2); - - - % if just at one-lag index: - if(length(lag_index)==1) - g(1)=1; - m=lag_index-1; - if(m==(N-1)) - g(:)=0; - elseif(m==0) - g(:)=1; - else - if(m>ceil(N/2)) m=N-m; end - - const = ((2*pi)^2)/sigma; - u=1:Ndh-1; - u1=u.*doppler_sample_rate; m1=m*lag_sample_rate; - - g(u+1) = exp( -const.*(u1.*m1).^2 ).'; - g(Nd-u+1)=g(u+1); - end - - % or for the whole thing: - else - g(1,1:Nl)=1; g(1:Nd,1)=1; - - const = ((2*pi)^2)/sigma; - u=1:Ndh-1; - for m=1:Nlh-1 - - u1=u.*doppler_sample_rate; m1=m*lag_sample_rate; - g(u+1,m+1)=exp( -const.*(u1.*m1).^2 ).'; - - g(Nd-u+1,m+1)=g(u+1,m+1); - g(u+1,Nl-m+1)=g(u+1,m+1); - g(Nd-u+1,Nl-m+1)=g(u+1,m+1); - end - end - - %--------------------------------------------------------------------- - % Product kernel (sometimes called a RID kernel) - % - % g(l/NT,2mT)=H(l2m/N) - %--------------------------------------------------------------------- - case { 'prod', 'RID', 'product' } - - % NOT WORKING: -% $$$ if(length(lag_index)==1) -% $$$ m=lag_index; -% $$$ -% $$$ g(1)=1; -% $$$ if(m==N) -% $$$ g(:)=0; -% $$$ else -% $$$ if(m>ceil(N/2)) m=N-m; end -% $$$ -% $$$ u=1:floor(Nd/2); -% $$$ im=mod(u*m,length(G1)); -% $$$ -% $$$ g(u+1)=G1(im+1); -% $$$ g(Nd-u+1)=g(u+1); -% $$$ end -% $$$ else -% $$$ keyboard; -% $$$ if(isempty(G1)) -% $$$ [d,d2,d3,G1]=gen_Doppler_kern(kernel_params,N,N); -% $$$ end -% $$$ Ndh=ceil(Nd/2); Nlh=ceil(Nl/2); -% $$$ g=zeros(Nd,Nl); -% $$$ -% $$$ g(1,1:Nl)=G1(1); g(1:Nd,1)=G1(1); -% $$$ -% $$$ u=1:Ndh-1; -% $$$ for m=1:Nlh-1 -% $$$ g(u+1,m+1)=G1( mod(u.*m,N)+1 ); -% $$$ -% $$$ % $$$ g(Nd-u+1,m+1)=g(u+1,m+1); -% $$$ % $$$ g(u+1,Nl-m+1)=g(u+1,m+1); -% $$$ % $$$ g(Nd-u+1,Nl-m+1)=g(u+1,m+1); -% $$$ end -% $$$ -% $$$ end - - - %--------------------------------------------------------------------- - % Modified-B (a specific SWVD or LAG INDEPENDENT kernel) - % - % G(nT,mT) = cosh^{-2*beta}(n) (defined in time--lag domain) - %--------------------------------------------------------------------- - case { 'mb', 'modified-b' } - - G1=get_kern(g,lag_index,'swvd',{N-1,'cosh',kernel_params{1}}, ... - doppler_sample_rate,lag_sample_rate,N); - - for m=1:Nl - g(:,m) = G1; - end - - - otherwise - error(['Unknown kernel type: ' kernel_type]); - -end - diff --git a/src/paradigma/ppg/hr_functions/TFD toolbox JOT/common/gen_lag_kern.m b/src/paradigma/ppg/hr_functions/TFD toolbox JOT/common/gen_lag_kern.m deleted file mode 100644 index 00b201de..00000000 --- a/src/paradigma/ppg/hr_functions/TFD toolbox JOT/common/gen_lag_kern.m +++ /dev/null @@ -1,123 +0,0 @@ -%------------------------------------------------------------------------------- -% gen_lag_kern: smoothing window for Lag-kernel g2[m]; provides some checking of -% the parameters -% -% Syntax: [g2,P,Ph_floor,Nfreq]=gen_lag_kern(win_params,N,Nfreq) -% -% -% Input: -% win_params - cell of {win_length,win_type,[win_param],[lag_or_freq]} -% e.g. {11,'hamm',0,1} -% the parameter lag_or_freq is either: -% 0 = to define window in the lag-domain -% 1 = to define window in the frequency-domain -% N - lenght of signal -% Nfreq - number of sample points in the frequency direction -% -% Output: -% g2 - lag kernel g_2(2mT) -% P - length of g2 (as may have changed) -% Ph_floor - floor(P/2) -% Nfreq - Nfreq (as may have changed) -% -% See also: GEN_DOPPLER_KERN, GEN_DOPPLER_LAG_KERN, GET_WINDOW, PADWIN -% -% Example: -% g2=get_lag_kernel({61,'hann'},128,512); -% - -% John M. O' Toole, University College Cork -% Started: 16-04-2014 -% -% last update: Time-stamp: <2021-08-24 17:42:46 (otoolej)> -%------------------------------------------------------------------------------- -function [g2,P,Ph_floor,Nfreq]=gen_lag_kern(win_params,N,Nfreq) -if(nargin<3 || isempty(Nfreq)), Nfreq=[]; end - - -DBplot=0; - - -%--------------------------------------------------------------------- -% 1. make sure parameters are ok -%--------------------------------------------------------------------- -P=win_params{1}; -% window length can not be greater than N: -if(P>N) - warning('length of g2 too long: chopping down length N'); - P=N; -end -% force window length to be odd-value: -if(P/2==fix(P/2)) - P=P-1; - warning(['Forcing P to be odd. P is now P=',num2str(P)]); -end -Ph_floor=floor(P/2); - - -l=length(win_params); -if( l<2 ) - error('Need at least two window parameters'); -end - -if(isempty(Nfreq)), Nfreq=P+1; end - -if(Nfreq<(P+1)) - warning('Nfreq is too short: increasing length to (P+1)'); - Nfreq=P+1; -end - -if(rem(Nfreq,2)) - Ntime=Ntime+1; - warning(['Forcing Ntime to be even. Ntime is now Ntime=',num2str(Ntime)]); -end - - -%--------------------------------------------------------------------- -% 2. call function to generate window -%--------------------------------------------------------------------- -win_type=win_params{2}; -if( l>=3 ) win_extra_param=win_params{3}; else, win_extra_param=[]; end -if( l>3 ) win_dft_param=win_params{4}; else, win_dft_param=0; end - - -g2=get_window(P,win_type,win_extra_param,win_dft_param); -g2=g2(:); - -g2_pad=padWin(g2,Nfreq); - - -%--------------------------------------------------------------------- -% 3. [OPTIONAL] post-process window -%--------------------------------------------------------------------- -% a. if normalizing window: -if(length(win_params)>4) - if(strcmpi(win_params{5},'y')==1) - g2=g2./sum(g2); - end -end - -% b. if (time) reversing window -if(length(win_params)>5 ) - g2=shiftWin(g2); - g2_pad=shiftWin(g2_pad); -end - - -if(DBplot) - figure(20); clf; hold all; - subplot(211); plot(g2_pad); - subplot(212); plot(g2); -end - - -function w=shiftWin(w) -%--------------------------------------------------------------------- -% shift window to centre -%--------------------------------------------------------------------- -w=circshift(w(:),ceil(length(w)/2)); - - - - - diff --git a/src/paradigma/ppg/hr_functions/TFD toolbox JOT/dec_tfd.m b/src/paradigma/ppg/hr_functions/TFD toolbox JOT/dec_tfd.m deleted file mode 100644 index f12f5c16..00000000 --- a/src/paradigma/ppg/hr_functions/TFD toolbox JOT/dec_tfd.m +++ /dev/null @@ -1,154 +0,0 @@ -%------------------------------------------------------------------------------- -% dec_tfd: Generate decimated (or sub-sampled) time-frequency distributions -% -% Syntax: tf=dec_tfd(x,kern_type,kern_params,Ntime,Nfreq,time_dec,freq_dec) -% -% Inputs: -% x = input signal (either real-valued signal of length-N or -% complex-valued analytic signal of length-2N) -% -% kern_type = kernel type, either nonseparable, separable, Doppler-independent -% (DI) or lag-independent (LI): { 'nonsep' | 'sep' | 'DI' | 'LI' } -% -% kern_params = kernel parameters; different depending on kernel type -% -% if nonseparable kernel, then form: { kern_name, kern_param} -% e.g. tf=full_tfd( x, 'nonsep', { 'cw', 100 } ); -% -% if Doppler-independent kernel, then of the form: -% { window_length, window_type, [window_parameter (optional)] } -% e.g. tf=full_tfd( x, 'DI', {101,'hann'} ); -% -% if lag-independent kernel, then of the form: -% { window_length, window_type, [window_parameter (optional)] } -% e.g. tf=full_tfd( x, 'LI', {101,'cosh',0.01} ); -% -% if separable kernel, then of the form: { doppler_window, lag_window } -% where doppler_window is of the form: { window_length, window_type, -% [window_parameter (optional)] }; same format for lag window -% e.g. tf=full_tfd( x, 'sep', { {101, 'cosh', 0.05}, {101,'hann'} } ); -% -% Ntime = over-sampling in the time direction; only applicable for separable -% and lag-independent kernels -% -% Nfreq = over-sampling in the frequency direction; only applicable for separable -% and Doppler-independent kernels -% -% time_dec = decimation factor in the time domain; for the Doppler-independent kernel -% this value can be either a vector or a scalar; for all other kernel types this -% value is an integer scalar a. -% -% freq_dec = decimation factor in the frequency domain; for the lag-independent kernel -% this value can be either a vector or a scalar; for all other kernel types this -% value is an integer scalar b. -% -% Outputs: -% tf - time-frequency distribution of size (a/N) x (b/N) (non-separable kernel), -% or (a/Ntime) x (b/Nfreq) (separable kernel), -% or U x (b/Nfreq) (Doppler-independent kernel, U is length of time_dec vector), -% or (a/Ntime) x V (lag-independent kernel, V is length of freq_dec vector) -% -% See also: DEC_NONSEP_GDTFD, DEC_SEP_GDTFD, DEC_LI_GDTFD, DEC_DI_GDTFD -% -% Example: -% N=1024; Ntime=64; Nfreq=128; -% a=2; b=2; -% ni=[100:2:900]; ki=[150:2:850]; -% -% x=gen_LFM(N,0.1,0.3)+gen_LFM(N,0.4,0.1); -% -% % non-separable kernel: -% c=dec_tfd(x,'nonsep',{'cw',100},N,N,a*4,b*4); -% figure(1); clf; vtfd(c,x); -% -% % separable kernel: -% c=dec_tfd(x,'sep',{{51,'hann'},{101,'hann'}},Ntime,Nfreq,a,b); -% figure(2); clf; vtfd(c,x); -% -% % Doppler-independent kernel: -% c=dec_tfd(x,'DI',{101,'hann'},N,Nfreq,ni,b); -% figure(3); clf; vtfd(c,x,1,ni); -% -% % lag-independent kernel: -% c=dec_tfd(x,'LI',{51,'hann'},Ntime,N,a,ki); -% figure(4); clf; vtfd(c,x,1,[],ki./(N*2)); - -% John M. O' Toole, University College Cork -% Started: 23-07-2014 -% -% last update: Time-stamp: <2019-06-05 17:05:19 (otoolej)> -%------------------------------------------------------------------------------- -function tf=dec_tfd(x,kern_type,kern_params,Ntime,Nfreq,time_dec,freq_dec) -if(nargin<2 || isempty(kern_type)), kern_type='sep'; end -if(nargin<3 || isempty(kern_params)), kern_params={{51,'hann'},{101,'hann'}}; end -if(nargin<4 || isempty(time_dec)), time_dec=[]; end -if(nargin<5 || isempty(freq_dec)), freq_dec=[]; end -if(nargin<6 || isempty(Ntime)), Ntime=[]; end -if(nargin<7 || isempty(Nfreq)), Nfreq=[]; end - - -% set to 1 if want to see how much memory is used: -DBmem=0; - - -kern_type=lower(kern_type); -switch kern_type - case { 'nonsep', 'ns', 'nonseparable', 'non-separable', 'non-sep' } - %--------------------------------------------------------------------- - % 1. Non-separable kernel; Doppler-lag form: g[l,m] - %--------------------------------------------------------------------- - nonsep_params=[]; - if(~iscell(kern_params)) - nonsep_name=kern_params; - else - nonsep_name=kern_params{1}; - if(length(kern_params)>1) - nonsep_params=kern_params{2}; - end - end - - tf=dec_nonsep_gdtfd(x,nonsep_name,nonsep_params,time_dec,freq_dec); - - - case { 'sep', 'separable' } - %--------------------------------------------------------------------- - % 2. separable kernel; Doppler-lag form: G1[l]g2[m] - %--------------------------------------------------------------------- - if(~iscell(kern_params) | (iscell(kern_params) & length(kern_params)<2) ) - error(['separable kernel parameters should be of the form: ' ... - '{ {dopp_win_length,dopp_win_name}, {lag_win_length,lag_win_name} }']); - end - - tf=dec_sep_gdtfd(x,kern_params{1},kern_params{2},time_dec,freq_dec,Ntime,Nfreq); - - - case { 'di', 'doppler-independent', 'dopp.-indep', 'dopp-indep', 'pwvd', 'p-wvd' } - %--------------------------------------------------------------------- - % 3. Doppler-independent kernel: Doppler-lag form: g2[m] - %--------------------------------------------------------------------- - if(~iscell(kern_params)) - error(['Doppler-independent kernel parameters should be of the form: ' ... - '{win_length,win_name}']); - end - - tf=dec_di_gdtfd(x,kern_params,time_dec,freq_dec,Nfreq); - - - case { 'li', 'lag-independent', 'lag-indep', 'swvd', 's-wvd' } - %--------------------------------------------------------------------- - % 4. Lag-independent kernel: Doppler-lag form: G1[l] - %--------------------------------------------------------------------- - if(~iscell(kern_params)) - error(['lag-independent kernel parameters should be of the form: ' ... - '{win_length,win_name}']); - end - - tf=dec_li_gdtfd(x,kern_params,time_dec,freq_dec,Ntime); - - otherwise - warning('kern_type should be either: nonsep, sep, DI, or LI'); - tf=[]; -end - - -if(DBmem), s=whos; fprintf('total memory used: mem=%s\n',disp_bytes(sum([s.bytes]))); end diff --git a/src/paradigma/ppg/hr_functions/TFD toolbox JOT/decimated_TFDs/dec_di_gdtfd.m b/src/paradigma/ppg/hr_functions/TFD toolbox JOT/decimated_TFDs/dec_di_gdtfd.m deleted file mode 100644 index 2332e143..00000000 --- a/src/paradigma/ppg/hr_functions/TFD toolbox JOT/decimated_TFDs/dec_di_gdtfd.m +++ /dev/null @@ -1,194 +0,0 @@ -%------------------------------------------------------------------------------- -% dec_di_gdtfd: decimated Doppler-independent kernel TFD Ï[náµ¢,bk], where b is an -% integer value and náµ¢ is the set náµ¢ ={ náµ¢ | 1≤i≤U }, with 0≤nᵢ≤N-1 -% -% Syntax: tfd=dec_di_gdtfd(x,lag_win_params,time_dec,freq_dec,Nfreq) -% -% Inputs: -% x = input signal (either real-valued signal of length-N or -% complex-valued analytic signal of length-2N) -% -% lag_win_params = lag window parameters in cell form: -% {win_length,win_type,win_param,lag_or_not} where -% - win_length is the sample length of the window -% - win_type is the type of window -% - [optional] win_param is the parameter of the window -% - [optional] lag_or_not is either 0 (define window in the lag -% domain, which is the default) or 0 (define window the frequency domain) -% e.g. {121, 'hamm'}; {121, 'tukey', 0.2}; {127,'cosh',0.01,0} -% -% time_dec = decimation factor a in the time domain; a/Ntime is integer -% freq_dec = decimation factor b in the frequency domain; b/Nfreq is integer -% -% Nfreq = frequency oversampling value; must be greater than length of lag window -% -% See also: DI_GDTFD, GET_ANALYTIC_SIGNAL, GEN_LAG_KERN, FFT -% -% Outputs: -% tfd = U x (b/Nfreq) time–frequency distribution -% -% Example: -% N=1024; Nfreq=128; ni=[100:4:900]; b=2; -% x=gen_LFM(N,0.1,0.3)+gen_LFM(N,0.4,0.1); -% -% c=dec_di_gdtfd(x,{101,'hann'},ni,b,Nfreq); -% vtfd(c,x,1,ni); - - -% John M. O' Toole, University College Cork -% Started: 23-04-2014 -% -% last update: Time-stamp: <2014-07-23 16:22:59 (otoolej)> -%------------------------------------------------------------------------------- -function tfd=dec_di_gdtfd(x,lag_win_params,time_dec,freq_dec,Nfreq) -if(nargin<2 || isempty(lag_win_params)), lag_win_params={101,'hamm'}; end -if(nargin<3 || isempty(time_dec)), time_dec=[]; end -if(nargin<4 || isempty(freq_dec)), freq_dec=1; end -if(nargin<5 || isempty(Nfreq)), Nfreq=[]; end - -DBplot=0; -DBmem=0; -DBtest=0; -DBtime=0; -DBverbose=0; - - -if(DBtime), time_start=tic; end -%--------------------------------------------------------------------- -% 1. convert real-valued signal to analytic signal of length 2N -%--------------------------------------------------------------------- -[z,N2,N,Nh]=get_analytic_signal(x); - - -%--------------------------------------------------------------------- -% 2. generate time--lag signal function (for positive-lag values only) -%--------------------------------------------------------------------- -[g2,P,Ph_floor,Nfreq]=gen_lag_kern(lag_win_params,N,Nfreq); -Nh=ceil(Nfreq/2); -Ph=ceil(P/2); - - -% check decimation parameters and return as sequence: -if(length(freq_dec)>1) - error('Frequency decimation parameter should be scalar'); -end -[n_seq,U]=check_dec_params_seq(time_dec,N,'time',0); -[k_seq,J,freq_dec]=check_dec_params_seq(freq_dec,Nfreq,'frequency',1); -Jh=ceil(J/2); J_extend=2*Jh+2; - - -if(DBmem), s=whos; fprintf('start: mem=%s\n',disp_bytes(sum([s.bytes]))); end -tfd=zeros(U,J_extend); -if(J~=Nfreq) - m_real=1:Jh+1; m_imag=(J_extend-Jh):(J_extend); -else - m_real=1:Ph; m_imag=(J-Ph+1):J; -end - - - -m=0:(Ph-1); mb=1:(Ph-1); -for in=1:U - n=n_seq(in); - inp=mod(n+m,N2); inn=mod(n-m,N2); - - if(J~=Nfreq) - % need to fold signal function (for decimation in frequency-direction): - K_time_slice=zeros(1,Nfreq); - K_time_slice(m+1)=g2(m+1).*z(inp+1).*conj( z(inn+1) ); - K_time_slice(Nfreq-mb+1)=conj(K_time_slice(mb+1)); - - R_fold=fold_vector_half(K_time_slice,J,Jh,freq_dec); - else - % or if not then do as usual: - K_time_slice(m+1)=g2(m+1).*z(inp+1).*conj( z(inn+1) ); - - R_fold=K_time_slice; - end - - tfd(in,m_real)=real( R_fold ); - tfd(in,m_imag)=imag( R_fold ); -end - -if(DBmem), s=whos; fprintf('K: mem=%s\n',disp_bytes(sum([s.bytes]))); end - - -%------------------------------------------------------------------------- -% 3. Expand R for positive and negative lag values and DFT back to -% time--frequency domain -%------------------------------------------------------------------------- -if(J~=Nfreq) - m=0:Jh; mb=1:(Jh-1); -else - m=0:(Ph-1); mb=1:(Ph-1); -end - - -for n=0:2:(U-2) - R_even_half=complex(tfd(n+1,m_real),tfd(n+1,m_imag)); - R_odd_half =complex(tfd(n+2,m_real),tfd(n+2,m_imag)); - - R_tslice_even=zeros(1,J); R_tslice_odd=zeros(1,J); - R_tslice_even(m+1)=R_even_half(m+1); - R_tslice_odd(m+1) =R_odd_half(m+1); - R_tslice_even(J-mb+1)=conj( R_even_half(mb+1) ); - R_tslice_odd(J-mb+1) =conj( R_odd_half(mb+1) ); - - tfd_time_slice=fft( R_tslice_even+j.*R_tslice_odd ); - - tfd(n+1,1:J)=real(tfd_time_slice); - tfd(n+2,1:J)=imag(tfd_time_slice); -end - -% one extra FFT if U is odd: -if(rem(U,2)) - R_even_half=complex(tfd(U,m_real),tfd(U,m_imag)); - R_tslice_even=zeros(1,J); - R_tslice_even(m+1)=R_even_half(m+1); - R_tslice_even(J-mb+1)=conj( R_even_half(mb+1) ); - tfd_time_slice=fft( R_tslice_even ); - - tfd(U,1:J)=real(tfd_time_slice); -end -tfd=tfd(:,1:J); - -if(DBmem), s=whos; fprintf('end: mem=%s\n',disp_bytes(sum([s.bytes]))); end - -scale_factor=1/Nfreq; -tfd=tfd.*scale_factor; - -if(DBtime), dispVars( toc(time_start) ); end - - -%--------------------------------------------------------------------- -% END; testing and plotting -%--------------------------------------------------------------------- -if(DBtest) - if(DBtime), time_start=tic; end - tfd_test=full_gdtfd_testing_version(x,'pwvd',{P,lag_win_params{2:end}}); - if(DBtime), dispVars( toc(time_start) ); end - - if(Nfreq==N) - dispEE(tfd_test(n_seq+1,k_seq+1),tfd); - else - b=N/Nfreq; - if( b==floor(b) ) - dispEE(tfd_test(n_seq+1,(b.*k_seq)+1),tfd./b); - end - end - -end -if(DBverbose) - fprintf('size=%dx%d; max=%g; total energ:%d\n', size(tfd,1), size(tfd,2), max(tfd(:)), ... - sum(tfd(:))); -end -if(DBplot) - figure(1); clf; - vtfd(tfd,real(x(1:N))); - - figure(9); clf; hold all; - subplot(211); hold all; plot(sum(tfd')'); plot( abs(z(1:N)).^2 ); - subplot(212); hold all; plot(sum(tfd')' - abs(z(n_seq+1)).^2 ); -end - - diff --git a/src/paradigma/ppg/hr_functions/TFD toolbox JOT/decimated_TFDs/dec_li_gdtfd.m b/src/paradigma/ppg/hr_functions/TFD toolbox JOT/decimated_TFDs/dec_li_gdtfd.m deleted file mode 100644 index c7c9d405..00000000 --- a/src/paradigma/ppg/hr_functions/TFD toolbox JOT/decimated_TFDs/dec_li_gdtfd.m +++ /dev/null @@ -1,200 +0,0 @@ -%------------------------------------------------------------------------------- -% dec_li_gdtfd: decimated lag-independent kernel TFD Ï[an,káµ¢], where a is an integer -% value and káµ¢ is the set káµ¢ ={ káµ¢ | 1≤i≤V }, with 0≤kᵢ≤N-1 -% -% Syntax: tfd=dec_li_gdtfd(x,dopp_win_params,time_dec,freq_dec,Ntime) -% -% Inputs: -% x = input signal (either real-valued signal of length-N or -% complex-valued analytic signal of length-2N) -% -% dopp_win_params = Doppler window parameters in cell form: -% {win_length,win_type,win_param,Doppler_or_not} where -% - win_length is the sample length of the window -% - win_type is the type of window -% - [optional] win_param is the parameter of the window -% - [optional] Doppler_or_not is either 1 (define window in the Doppler -% domain, which is the default) or 0 (define window in the time domain) -% e.g. {121, 'hamm'}; {121, 'tukey', 0.2}; {127,'cosh',0.01,0} -% -% time_dec = decimation factor a in the time domain; a/Ntime is integer -% freq_dec = decimation factor b in the frequency domain; b/Nfreq is integer -% -% Ntime = time oversampling value; must be greater than length of Doppler window -% -% Outputs: -% tfd = (a/Ntime) x V time–frequency distribution -% -% See also: LI_GDTFD, GET_ANALYTIC_SIGNAL, GEN_DOPPLER_KERN, FFT -% -% Example: -% N=1024; Ntime=64; a=2; ki=[150:4:850]; -% x=gen_LFM(N,0.1,0.3)+gen_LFM(N,0.4,0.1); -% -% c=dec_li_gdtfd(x,{51,'hann'},a,ki,Ntime); -% vtfd(c,x,1,[],ki./(N*2)); - -% John M. O' Toole, University College Cork -% Started: 23-04-2014 -% -% last update: Time-stamp: <2014-07-23 16:19:59 (otoolej)> -%------------------------------------------------------------------------------- -function tfd=dec_li_gdtfd(x,dopp_win_params,time_dec,freq_dec,Ntime) -if(nargin<2 || isempty(dopp_win_params)), dopp_win_params={51,'hann'}; end -if(nargin<3 || isempty(time_dec)), time_dec=1; end -if(nargin<4 || isempty(freq_dec)), freq_dec=1; end -if(nargin<5 || isempty(Ntime)), Ntime=[]; end - - -DBplot=0; -DBmem=0; -DBtest=0; -DBtime=0; -DBverbose=0; - - -if(DBtime), time_start=tic; end -%--------------------------------------------------------------------- -% 1. convert real-valued signal to analytic signal of length 2N -%--------------------------------------------------------------------- -[z,N2,N,Nh]=get_analytic_signal(x); - - -%--------------------------------------------------------------------- -% 2. generate time--lag signal function (for positive-lag values only) -%--------------------------------------------------------------------- -[G1,Q,Ntime]=gen_Doppler_kern(dopp_win_params,N,Ntime); -Qh=ceil(Q/2); - - -% check decimation parameters and return as sequence: -if(length(time_dec)>1) - error('Frequency decimation parameter should be scalar'); -end -[n_seq,L,time_dec]=check_dec_params_seq(time_dec,Ntime,'time',1); -[k_seq,V]=check_dec_params_seq(freq_dec,N,'frequency',0); -Lh=ceil(L/2); L_extend=2*Lh+2; - - -if(DBmem), s=whos; fprintf('start: mem=%s\n',disp_bytes(sum([s.bytes]))); end -tfd=zeros(L_extend,V); -if(L~=Ntime) - l_real=1:(Lh+1); l_imag=(L_extend-Lh):L_extend; -else - l_real=1:Qh; l_imag=(L-Qh+1):L; -end - - -Z=fft(z); -l=0:(Qh-1); lb=1:(Qh-1); -for ik=1:V - k=k_seq(ik); - inp=mod(k+l,N2); inn=mod(k-l,N2); - inpN=mod(k+l+N,N2); innN=mod(k-l-N,N2); - - if(L~=Ntime) - K_doppler_slice=zeros(1,Ntime); - K_doppler_slice(l+1)=G1(l+1).*( Z(inp+1).*conj( Z(inn+1) ) + ... - Z(inpN+1).*conj( Z(innN+1) ) ); - K_doppler_slice(Ntime-lb+1)=conj( K_doppler_slice(lb+1) ); - - R_fold=fold_vector_half(K_doppler_slice./2,L,Lh,time_dec); - else - - K_doppler_slice=G1(l+1).*( Z(inp+1).*conj( Z(inn+1) ) + ... - Z(inpN+1).*conj( Z(innN+1) ) ); - - R_fold=K_doppler_slice; - end - - tfd(l_real,ik)=real( R_fold ); - tfd(l_imag,ik)=imag( R_fold ); -end - - -if(DBmem), s=whos; fprintf('K: mem=%s\n',disp_bytes(sum([s.bytes]))); end - - - -%------------------------------------------------------------------------- -% 3. Expand R for positive and negative lag values and DFT back to -% time--frequency domain -%------------------------------------------------------------------------- -if(L~=Ntime) - l=0:Lh; lb=1:(Lh-1); -else - l=0:(Qh-1); lb=1:(Qh-1); -end - -for k=0:2:(V-2) - R_even_half=complex(tfd(l_real,k+1),tfd(l_imag,k+1)); - R_odd_half =complex(tfd(l_real,k+2),tfd(l_imag,k+2)); - - R_tslice_even=zeros(L,1); R_tslice_odd=zeros(L,1); - R_tslice_even(l+1)=R_even_half(l+1); - R_tslice_odd(l+1) =R_odd_half(l+1); - R_tslice_even(L-lb+1)=conj( R_even_half(lb+1) ); - R_tslice_odd(L-lb+1) =conj( R_odd_half(lb+1) ); - - tfd_freq_slice=ifft( R_tslice_even+j.*R_tslice_odd ); - - tfd(1:L,k+1)=real(tfd_freq_slice); - tfd(1:L,k+2)=imag(tfd_freq_slice); -end - -% one extra FFT if V is odd -if(rem(V,2)) - R_even_half=complex(tfd(l_real,V),tfd(l_imag,V)); - - R_tslice_even=zeros(L,1); - R_tslice_even(l+1)=R_even_half(l+1); - R_tslice_even(L-lb+1)=conj( R_even_half(lb+1) ); - - tfd_freq_slice=ifft( R_tslice_even ); - - tfd(1:L,V)=real(tfd_freq_slice); -end -tfd=tfd(1:L,:); - -if(DBmem), s=whos; fprintf('tfd (end): mem=%s\n',disp_bytes(sum([s.bytes]))); end - - -if(time_dec==1) - scale_factor=1/(2*N); -else - scale_factor=1/(N*time_dec); -end -tfd=tfd.*scale_factor; - -if(DBtime), dispVars( ['time: ' num2str(toc(time_start))] ); end - - -%--------------------------------------------------------------------- -% END; testing and plotting -%--------------------------------------------------------------------- -if(DBtest) - if(DBtime), time_start=tic; end - tfd_test=full_gdtfd_testing_version(x,'swvd',{Q,dopp_win_params{2:end}}); - if(DBtime), dispVars( ['testing time: ' num2str(toc(time_start))] ); end - if(Ntime==N) - dispEE(tfd_test(n_seq+1,k_seq+1),tfd); - else - a=N/Ntime; - if( a==floor(a) ) - dispEE(tfd_test((a.*n_seq)+1,k_seq+1),tfd./a); - end - end -end -if(DBverbose) - fprintf('size=%dx%d; max=%g; total energ:%d\n', size(tfd,1), size(tfd,2), max(tfd(:)), ... - sum(tfd(:))); -end -if(DBplot) - figure(1); clf; - vtfd(tfd,real(x(1:N))); - - figure(9); clf; hold all; - Z=fft(z); - subplot(211); hold all; plot(sum(tfd)); plot( abs(Z(1:N)).^2./(2*N) ); - subplot(212); hold all; plot(sum(tfd)' - abs(Z(k_seq+1)).^2./(2*N) ); -end diff --git a/src/paradigma/ppg/hr_functions/TFD toolbox JOT/decimated_TFDs/dec_nonsep_gdtfd.m b/src/paradigma/ppg/hr_functions/TFD toolbox JOT/decimated_TFDs/dec_nonsep_gdtfd.m deleted file mode 100644 index da41ecea..00000000 --- a/src/paradigma/ppg/hr_functions/TFD toolbox JOT/decimated_TFDs/dec_nonsep_gdtfd.m +++ /dev/null @@ -1,229 +0,0 @@ -%------------------------------------------------------------------------------- -% dec_nonsep_gdtfd: decimated TFD with non-separable kernel Ï[an,bk], where a,b are -% integer values -% -% -% Syntax: tfd=dec_nonsep_gdtfd(x,kern_type,kern_params,time_dec,freq_dec) -% -% Inputs: -% x = input signal (either real-valued signal of length-N or -% complex-valued analytic signal of length-2N) -% -% kern_type = { 'wvd' | 'swvd' | 'pwvd' | 'sep' | 'cw' | 'mb' } -% wvd - Wigner-Ville distribution -% swvd - Smoothed Wigner-Ville distribution -% (lag-independent kernel) -% pwvd - Pseudo Wigner-Ville distribution -% (Doppler-independent kernel) -% sep - Separable-kernel distribution -% (combintation of SWVD and PWVD) -% mb - Modified-B distribution -% cw - Choi-Williams distribution -% -% kern_params = cell of kernel parameters: -% wvd - {} -% swvd - {win_length,win_type,[win_param]} -% e.g. {11,'hamm'} -% pwvd - {win_length,win_type,[win_param]} -% e.g. {200,'cosh',0.1} -% sep - { {win1_length,win1_type,[win1_param]}, -% {win2_length,win2_type,[win2_param]} } -% where win1 is the doppler window and win2 is the -% lag window, e.g. { {11,'hamm'}, {200,'cosh',0.1} } -% mb - {beta_parameter} in the range 1 -%------------------------------------------------------------------------------- -function tfd=dec_nonsep_gdtfd(x,kern_type,kern_params,time_dec,freq_dec) -if(nargin<2 || isempty(kern_type)), kern_type='cw'; end -if(nargin<3 || isempty(kern_params)), kern_params=10; end -if(nargin<4 || isempty(time_dec)), time_dec=1; end -if(nargin<5 || isempty(freq_dec)), freq_dec=1; end - - -DBplot=0; -DBmem=0; -DBtest=0; -DBtime=0; -DBverbose=0; - - -if(DBtime), time_start=tic; end -%--------------------------------------------------------------------- -% 1. convert real-valued signal to analytic signal of length 2N -%--------------------------------------------------------------------- -[z,N2,N,Nh]=get_analytic_signal(x); - -% if product-kernel then generate window now: -G1=get_prod_kernel(kern_type,kern_params,N); - - -%--------------------------------------------------------------------- -% 2. check decimation parameters -%--------------------------------------------------------------------- -if(length(time_dec)>1 || length(freq_dec)>1) - error('Frequency and time decimation parameters should be scalar'); -end -[n_seq,L,time_dec]=check_dec_params_seq(time_dec,N,'time',1); -[k_seq,J,freq_dec]=check_dec_params_seq(freq_dec,N,'frequency',1); -Jh=ceil(J/2); J_extend=2*Jh+2; - -if(DBmem), s=whos; fprintf('start: mem=%s\n',disp_bytes(sum([s.bytes]))); end - -tfd=zeros(L,J_extend); -m_real=1:Jh+1; m_imag=(J_extend-Jh):(J_extend); - -if(DBmem), s=whos; fprintf('declare TFD: mem=%s\n',disp_bytes(sum([s.bytes]))); end - - -%--------------------------------------------------------------------- -% 3. generate time--lag signal function (for positive-lag values only) -%--------------------------------------------------------------------- -n=0:N-1; mb=1:Jh-1; -for m=0:Jh - - %------------------------------------ - % Fold in the lag direction - %------------------------------------ - af_lag_slice=zeros(N,1); - for p=0:freq_dec-1 - mmod=(p*J+m); - g_lag_slice=gen_Doppler_lag_kern(kern_type,kern_params,N,mmod+1); - - if(mmod<=Nh) - inp=mod(n+mmod,N2); inn=mod(n-mmod,N2); - K_lag_slice=z(inp+1).*conj(z(inn+1)); - else - inp=mod(n+N-mmod,N2); inn=mod(n-N+mmod,N2); - K_lag_slice=conj(z(inp+1)).*z(inn+1); - end - - af_lag_slice=af_lag_slice + fft(K_lag_slice).*g_lag_slice; - end - - %------------------------------------ - % Fold in the Doppler direction - %------------------------------------ - af_lag_fold=fold_vector_full(af_lag_slice,L,time_dec); - - %------------------------------------ - % DFT the lag slice to the time--lag - % domain. - %------------------------------------ - R_lag_slice=ifft(af_lag_fold); - tfd(:,m_real(m+1))=real(R_lag_slice); - tfd(:,m_imag(m+1))=imag(R_lag_slice); -end - - -if(DBmem), s=whos; fprintf('R: mem=%s\n',disp_bytes(sum([s.bytes]))); end - -%------------------------------------------------------------------------- -% 4. Expand R for positive and negative lag values and DFT back to -% time--frequency domain -%------------------------------------------------------------------------- -m=0:Jh; mb=1:(Jh-1); -for n=0:2:(L-2) - R_even_half=complex(tfd(n+1,m_real),tfd(n+1,m_imag)); - R_odd_half =complex(tfd(n+2,m_real),tfd(n+2,m_imag)); - - R_tslice_even=zeros(J,1); R_tslice_odd=zeros(J,1); - R_tslice_even(m+1)=R_even_half(m+1); - R_tslice_odd(m+1) =R_odd_half(m+1); - R_tslice_even(J-mb+1)=conj( R_even_half(mb+1) ); - R_tslice_odd(J-mb+1) =conj( R_odd_half(mb+1) ); - - tfd_time_slice=fft( R_tslice_even+j.*R_tslice_odd ); - - tfd(n+1,1:J)=real(tfd_time_slice); - tfd(n+2,1:J)=imag(tfd_time_slice); -end - - -% one extra FFT if L is odd: -if(rem(L,2)) - R_even_half=complex(tfd(L,m_real),tfd(L,m_imag)); - - R_tslice_even=zeros(J,1); - R_tslice_even(m+1)=R_even_half(m+1); - R_tslice_even(J-mb+1)=conj( R_even_half(mb+1) ); - - tfd_time_slice=fft( R_tslice_even+j.*R_tslice_odd ); - - tfd(L,1:J)=real(tfd_time_slice); -end - -tfd=tfd(:,1:J); - -if(DBmem), s=whos; fprintf('end: mem=%s\n',disp_bytes(sum([s.bytes]))); end - -scale_factor=1/N; -tfd=tfd.*scale_factor; - -if(DBtime), dispVars( toc(time_start) ); end - - -%--------------------------------------------------------------------- -% END; testing and plotting -%--------------------------------------------------------------------- -if(DBtest) - if(DBtime), time_start=tic; end - tfd_test=full_gdtfd_testing_version(x,kern_type,kern_params); - if(DBtime), dispVars( toc(time_start) ); end - - dispEE(tfd_test(n_seq+1,k_seq+1),tfd); -end -if(DBverbose) - fprintf('size=%dx%d; max=%g; total energ:%d\n', size(tfd,1), size(tfd,2), max(tfd(:)), ... - sum(tfd(:))); -end -if(DBplot) - figure(1); clf; - vtfd(tfd,real(x(1:N))); - - figure(9); clf; hold all; - subplot(211); hold all; plot(sum(tfd')'); plot( abs(z(1:N)).^2 ); - subplot(212); hold all; plot(sum(tfd')' - abs(z(n_seq+1)).^2 ); - - figure(10); clf; hold all; - Z=fft(z); - subplot(211); hold all; plot(sum(tfd)); plot( abs(Z(1:N)).^2./(2*N) ); - subplot(212); hold all; plot(sum(tfd)' - abs(Z(k_seq+1)).^2./(2*N) ); -end - - - -function G1=get_prod_kernel(tfd_type,tfd_params,N) -%--------------------------------------------------------------------- -% Generate window for product-kernel -%--------------------------------------------------------------------- - -if( strcmp(tfd_type,'RID')==1 || strcmp(tfd_type,'prod')==1 || ... - strcmp(tfd_type,'product')==1 ) - -% $$$ % oversample the window: -% $$$ L_dopp=N*N2; - - G1=gen_Doppler_kern(tfd_params,N); - G1=real(G1); -else - G1=[]; -end diff --git a/src/paradigma/ppg/hr_functions/TFD toolbox JOT/decimated_TFDs/dec_sep_gdtfd.m b/src/paradigma/ppg/hr_functions/TFD toolbox JOT/decimated_TFDs/dec_sep_gdtfd.m deleted file mode 100644 index 99fb4ed8..00000000 --- a/src/paradigma/ppg/hr_functions/TFD toolbox JOT/decimated_TFDs/dec_sep_gdtfd.m +++ /dev/null @@ -1,241 +0,0 @@ -%------------------------------------------------------------------------------- -% dec_sep_gdtfd: Decimated TFD with separable kernel of the form g[l,m]=G1[l]g2[m]. For -% efficient implement define windows G1[l] and g2[m] as band-limited functions. -% -% TFD is decimated with integer factors a,b as Ï[an,bk] -% -% Syntax: tfd=dec_sep_gdtfd(x,dopp_win_params,lag_win_params,time_dec,freq_dec,Ntime,Nfreq) -% -% Inputs: -% x = input signal (either real-valued signal of length-N or -% complex-valued analytic signal of length-2N) -% -% dopp_win_params = Doppler window parameters in cell form: -% {win_length,win_type,win_param,Doppler_or_not} where -% - win_length is the sample length of the window -% - win_type is the type of window -% - [optional] win_param is the parameter of the window -% - [optional] Doppler_or_not is either 1 (define window in the Doppler -% domain, which is the default) or 0 (define window in the time domain) -% e.g. {121, 'hamm'}; {121, 'tukey', 0.2}; {127,'cosh',0.01,0} -% -% lag_win_params = lag window parameters in cell form: -% {win_length,win_type,win_param,lag_or_not} where -% - win_length is the sample length of the window -% - win_type is the type of window -% - [optional] win_param is the parameter of the window -% - [optional] lag_or_not is either 0 (define window in the lag -% domain, which is the default) or 1 (define window the frequency domain) -% e.g. {121, 'hamm'}; {121, 'tukey', 0.2}; {127,'cosh',0.01,0} -% -% time_dec = decimation factor a in the time domain; a/Ntime is integer -% freq_dec = decimation factor b in the frequency domain; b/Nfreq is integer -% -% Nfreq = frequency oversampling value; must be greater than length of lag window -% Ntime = time oversampling value; must be greater than length of Doppler window -% -% Outputs: -% tfd = (a/Ntime) x (b/Nfreq) time–frequency distribution -% -% See also: SEP_GDTFD, GET_ANALYTIC_SIGNAL, GEN_LAG_KERN, GEN_DOPPLER_KERN, FFT -% -% Example: -% N=1024; Ntime=64; Nfreq=128; a=1; b=2; -% x=gen_LFM(N,0.1,0.3)+gen_LFM(N,0.4,0.1); -% -% c=dec_sep_gdtfd(x,{51,'hann'},{101,'hann'},a,b,Ntime,Nfreq); -% vtfd(c,x); - -% John M. O' Toole, University College Cork -% Started: 24-04-2014 -% -% last update: Time-stamp: <2014-07-23 15:25:51 (otoolej)> -%------------------------------------------------------------------------------- -function tfd=dec_sep_gdtfd(x,dopp_win_params,lag_win_params,time_dec,freq_dec,Ntime, ... - Nfreq) -if(nargin<2 || isempty(dopp_win_params)), dopp_win_params={51,'hann'}; end -if(nargin<3 || isempty(lag_win_params)), lag_win_params={151,'hann'}; end -if(nargin<4 || isempty(time_dec)), time_dec=1; end -if(nargin<5 || isempty(freq_dec)), freq_dec=1; end -if(nargin<6 || isempty(Ntime)), Ntime=[]; end -if(nargin<7 || isempty(Nfreq)), Nfreq=[]; end - -DBplot=0; -DBmem=0; -DBtest=0; -DBtime=0; -DBverbose=0; - - -if(DBtime), time_start=tic; end -%--------------------------------------------------------------------- -% 1. convert real-valued signal to analytic signal of length 2N -%--------------------------------------------------------------------- -[z,N2,N,Nh]=get_analytic_signal(x); - - -%--------------------------------------------------------------------- -% 2. generate kernel windows and check decimation parameters -%--------------------------------------------------------------------- -[G1,Q,Ntime]=gen_Doppler_kern(dopp_win_params,N,Ntime); -Qh=ceil(Q/2); - -[g2,P,Ph_floor,Nfreq]=gen_lag_kern(lag_win_params,N,Nfreq); -Nh=ceil(Nfreq/2); Ph=ceil(P/2); - - -% check decimation parameters and return as sequence: -if(length(time_dec)>1 || length(freq_dec)>1) - error('Frequency and time decimation parameters should be scalar'); -end -[n_seq,L,time_dec]=check_dec_params_seq(time_dec,Ntime,'time',1); -[k_seq,J,freq_dec]=check_dec_params_seq(freq_dec,Nfreq,'frequency',1); -Jh=ceil(J/2); J_extend=2*Jh+2; P_extend=2*Ph+2; - -if(DBmem), s=whos; fprintf('start: mem=%s\n',disp_bytes(sum([s.bytes]))); end - -tfd=zeros(L,J_extend); -m_real=1:(Jh+1); m_imag=(J_extend-Jh):(J_extend); - -if(DBverbose), - dispVars(N,Ntime,Nfreq,L,J,Jh,J_extend,P,Ph,Q,Qh,P_extend); - dispVars(length(m_real),length(m_imag),m_real(end),m_imag(1)); -end - -if(DBmem), s=whos; fprintf('declare TFD: mem=%s\n',disp_bytes(sum([s.bytes]))); end - - -%--------------------------------------------------------------------- -% 2. generate time--lag signal function (for positive-lag values only) -%--------------------------------------------------------------------- -l=0:(Qh-1); lb=1:(Qh-1); -n=0:N-1; -for m=0:Jh - - %------------------------------------------------------------------------- - % a) Form lag-slice of windowed time-lag function and then fold in - % the lag direction. - %------------------------------------------------------------------------- - R_lag_slice=zeros(N,1); - for p=0:freq_dec-1 - mmod=p.*J+m; - - if(mmod<=Ph) - inp=mod(n+mmod,N2); inn=mod(n-mmod,N2); - i1=mod(n+mmod,N2); i2=mod(n-mmod,N2); - - R_lag_slice=R_lag_slice+z(inp+1).*conj(z(inn+1)).*g2(mmod+1); - elseif(mmod>Nfreq-Ph) - inp=mod(n+Nfreq-mmod,N2); inn=mod(n-Nfreq+mmod,N2); - - R_lag_slice=R_lag_slice+conj(z(inp+1)).*z(inn+1).*g2(P-Nfreq+mmod+1); - end - end - - - %------------------------------------------------------------------------- - % b) DFT to the Doppler--lag domain.. - %------------------------------------------------------------------------- - R_lag_slice=fft(R_lag_slice); - - %------------------------------------------------------------------------- - % c) Multiply by Doppler window G1 - %------------------------------------------------------------------------- - r_lag_slice=zeros(Ntime,1); - r_lag_slice(l+1)=R_lag_slice(l+1).*G1(l+1); - r_lag_slice(Ntime-lb+1)=R_lag_slice(N-lb+1).*G1(Q-lb+1); - - %------------------------------------------------------------------------- - % d) Fold in the Doppler direction - %------------------------------------------------------------------------- - r_lag_fold=fold_vector_full(r_lag_slice,L,time_dec); - - %------------------------------------------------------------------------- - % e) DFT the lag slice to the time--lag domain - %------------------------------------------------------------------------- - r_lag_fold=ifft(r_lag_fold); - - tfd(:,m_real(m+1))=real(r_lag_fold); - tfd(:,m_imag(m+1))=imag(r_lag_fold); -end - - -if(DBmem), s=whos; fprintf('R: mem=%s\n',disp_bytes(sum([s.bytes]))); end - -%------------------------------------------------------------------------- -% 4. Expand R for positive and negative lag values and DFT back to -% time--frequency domain -%------------------------------------------------------------------------- -m=0:Jh; mb=1:(Jh-1); -for n=0:2:(L-2) - R_even_half=complex(tfd(n+1,m_real),tfd(n+1,m_imag)); - R_odd_half =complex(tfd(n+2,m_real),tfd(n+2,m_imag)); - - R_tslice_even=zeros(J,1); R_tslice_odd=zeros(J,1); - R_tslice_even(m+1)=R_even_half(m+1); - R_tslice_odd(m+1) =R_odd_half(m+1); - R_tslice_even(J-mb+1)=conj( R_even_half(mb+1) ); - R_tslice_odd(J-mb+1) =conj( R_odd_half(mb+1) ); - - tfd_time_slice=fft( R_tslice_even+j.*R_tslice_odd ); - - tfd(n+1,1:J)=real(tfd_time_slice); - tfd(n+2,1:J)=imag(tfd_time_slice); -end - -% one extra FFT if L is odd: -if(rem(L,2)) - R_even_half=complex(tfd(L,m_real),tfd(L,m_imag)); - - R_tslice_even=zeros(J,1); - R_tslice_even(m+1)=R_even_half(m+1); - R_tslice_even(J-mb+1)=conj( R_even_half(mb+1) ); - - tfd_time_slice=fft( R_tslice_even+j.*R_tslice_odd ); - - tfd(L,1:J)=real(tfd_time_slice); -end - -tfd=tfd(:,1:J); - -if(DBmem), s=whos; fprintf('end: mem=%s\n',disp_bytes(sum([s.bytes]))); end - -scale_factor=1/Nfreq; -tfd=tfd.*scale_factor; - -if(DBtime), dispVars( toc(time_start) ); end - -%--------------------------------------------------------------------- -% END; testing and plotting -%--------------------------------------------------------------------- -if(DBtest) - if(DBtime), time_start=tic; end - tfd_test=full_gdtfd_testing_version(x,'sep',{dopp_win_params,lag_win_params}); - if(DBtime), dispVars( toc(time_start) ); end - - a=N/Ntime; b=N/Nfreq; - if( a==floor(a) && b==floor(b) ) - dispEE(tfd_test( (a.*n_seq)+1,(b.*k_seq)+1),tfd./(a*b)); - end - -% $$$ figure(100); clf; hold all; -% $$$ k=10; plot(tfd_test(n_seq+1,k_seq(k)+1)); plot(tfd(:,k+1)); -% $$$ keyboard; -end -if(DBverbose) - fprintf('size=%dx%d; max=%g; total energ:%d\n', size(tfd,1), size(tfd,2), max(tfd(:)), ... - sum(tfd(:))); -end -if(DBplot) - figure(1); clf; - vtfd(tfd,real(x(1:N))); - -% $$$ figure(9); clf; hold all; -% $$$ subplot(211); hold all; plot(sum(tfd')'); plot( abs(z(1:N)).^2 ); -% $$$ subplot(212); hold all; plot(sum(tfd')' - abs(z(n_seq+1)).^2 ); -% $$$ -% $$$ figure(10); clf; hold all; -% $$$ Z=fft(z); -% $$$ subplot(211); hold all; plot(sum(tfd)); plot( abs(Z(1:N)).^2./(2*N) ); -% $$$ subplot(212); hold all; plot(sum(tfd)' - abs(Z(k_seq+1)).^2./(2*N) ); -end diff --git a/src/paradigma/ppg/hr_functions/TFD toolbox JOT/full_TFDs/di_gdtfd.m b/src/paradigma/ppg/hr_functions/TFD toolbox JOT/full_TFDs/di_gdtfd.m deleted file mode 100644 index c9b21876..00000000 --- a/src/paradigma/ppg/hr_functions/TFD toolbox JOT/full_TFDs/di_gdtfd.m +++ /dev/null @@ -1,157 +0,0 @@ -%------------------------------------------------------------------------------- -% di_gdtfd: TFD with Doppler-independent (DI) kernel g[l,m]=gâ‚‚[m] -% -% Syntax: tfd=di_gdtfd(x,lag_win_params,Nfreq) -% -% Inputs: -% x = input signal (either real-valued signal of length-N or -% complex-valued analytic signal of length-2N) -% -% lag_win_params = lag window parameters in cell form: -% {win_length,win_type,win_param,lag_or_not} where -% - win_length is the sample length of the window -% - win_type is the type of window -% - [optional] win_param is the parameter of the window -% - [optional] lag_or_not is either 0 (define window in the lag -% domain, which is the default) or 0 (define window the frequency domain) -% e.g. {121, 'hamm'}; {121, 'tukey', 0.2}; {127,'cosh',0.01,0} -% -% Nfreq = frequency oversampling value; must be greater than length of lag window -% -% Outputs: -% tfd = N x Nfreq time-frequency distribution -% -% See also: DEC_DI_GDTFD, GET_ANALYTIC_SIGNAL, GEN_LAG_KERN, FFT -% -% Example: -% N=512; Ntime=256; Nfreq=256; -% x=gen_LFM(N,0.1,0.3)+gen_LFM(N,0.4,0.1); -% -% c=di_gdtfd(x,{51,'hann'},Nfreq); -% vtfd(c,x); - -% John M. O' Toole, University College Cork -% Started: 16-04-2014 -% -% last update: Time-stamp: <2014-07-23 16:31:30 (otoolej)> -%------------------------------------------------------------------------------- -function tfd=di_gdtfd(x,lag_win_params,Nfreq) -if(nargin<2 || isempty(lag_win_params)), lag_win_params={101,'hamm'}; end -if(nargin<3 || isempty(Nfreq)), Nfreq=[]; end - - -DBplot=0; -DBmem=0; -DBcompare=0; -DBtest=0; -DBtime=0; - - -if(DBtime), time_start=tic; end -%--------------------------------------------------------------------- -% 1. convert real-valued signal to analytic signal of length 2N -%--------------------------------------------------------------------- -[z,N2,N,Nh]=get_analytic_signal(x); - - -%--------------------------------------------------------------------- -% 2. generate time--lag signal function (for positive-lag values only) -%--------------------------------------------------------------------- -[g2,P,Ph_floor,Nfreq]=gen_lag_kern(lag_win_params,N,Nfreq); -Nh=ceil(Nfreq/2); -Ph=ceil(P/2); - -if(DBmem), s=whos; fprintf('start: mem=%s\n',disp_bytes(sum([s.bytes]))); end -tfd=zeros(N,Nfreq); -m_real=1:Ph; m_imag=(Nfreq-Ph+1):Nfreq; - -m=0:(Ph-1); -for n=0:N-1 - inp=mod(n+m,N2); inn=mod(n-m,N2); - K_time_slice=g2(m+1).*z(inp+1).*conj( z(inn+1) ); - - tfd(n+1,m_real)=real( K_time_slice ); - tfd(n+1,m_imag)=imag( K_time_slice ); -end - - -if(DBcompare) - K=zeros(N,Nh); - for n=0:N-1 - inp=mod(n+m,N2); inn=mod(n-m,N2); - K(n+1,m+1)=g2(m+1).*z(inp+1).*conj( z(inn+1) ); - end - Ktest=complex(tfd(:,m_real),tfd(:,m_imag)); - dispEE(Ktest,K(:,m+1)); -end -if(DBmem), s=whos; fprintf('K: mem=%s\n',disp_bytes(sum([s.bytes]))); end - - -%------------------------------------------------------------------------- -% 3. Expand R for positive and negative lag values and DFT back to -% time--frequency domain -%------------------------------------------------------------------------- -m=0:(Ph-1); mb=1:(Ph-1); -for n=0:2:N-2 - R_even_half=complex(tfd(n+1,m_real),tfd(n+1,m_imag)); - R_odd_half =complex(tfd(n+2,m_real),tfd(n+2,m_imag)); - - R_tslice_even=zeros(1,Nfreq); R_tslice_odd=zeros(1,Nfreq); - R_tslice_even(m+1)=R_even_half(m+1); - R_tslice_odd(m+1) =R_odd_half(m+1); - R_tslice_even(Nfreq-mb+1)=conj( R_even_half(mb+1) ); - R_tslice_odd(Nfreq-mb+1) =conj( R_odd_half(mb+1) ); - - tfd_time_slice=fft( R_tslice_even+j.*R_tslice_odd ); - - tfd(n+1,:)=real(tfd_time_slice); - tfd(n+2,:)=imag(tfd_time_slice); -end - -if(DBmem), s=whos; fprintf('tfd: mem=%s\n',disp_bytes(sum([s.bytes]))); end - - -if(DBcompare) - Rfull=zeros(N,Nfreq); - Rfull(:,m+1)=K(:,m+1); - Rfull(:,Nfreq-mb+1)=conj( Rfull(:,mb+1) ); - - tfd_test=fft( Rfull.' ).'; - dispEE(tfd_test,tfd); -end - - -if(DBmem), s=whos; fprintf('end: mem=%s\n',disp_bytes(sum([s.bytes]))); end - -scale_factor=1/Nfreq; -tfd=tfd.*scale_factor; - - -if(DBtime), dispVars( toc(time_start) ); end - - -%--------------------------------------------------------------------- -% END; testing and plotting -%--------------------------------------------------------------------- -if(DBtest) - if(DBtime), time_start=tic; end - tfd_test=full_gdtfd_testing_version(x,'pwvd',{P,lag_win_params{2:end}}); - if(DBtime), dispVars( toc(time_start) ); end - if(Nfreq==N) - dispEE(tfd_test,tfd); - else - b=N/Nfreq; - if( b==floor(b) ) - dispEE(tfd_test(:,1:b:end),tfd./b); - end - end -end -if(DBplot) - figure(1); clf; - vtfd(tfd,real(x(1:N))); - - figure(9); clf; hold all; - subplot(211); hold all; plot(sum(tfd')'); plot( abs(z(1:N)).^2 ); - subplot(212); hold all; plot(sum(tfd')' - abs(z(1:N)).^2 ); -end - diff --git a/src/paradigma/ppg/hr_functions/TFD toolbox JOT/full_TFDs/li_gdtfd.m b/src/paradigma/ppg/hr_functions/TFD toolbox JOT/full_TFDs/li_gdtfd.m deleted file mode 100644 index 05589744..00000000 --- a/src/paradigma/ppg/hr_functions/TFD toolbox JOT/full_TFDs/li_gdtfd.m +++ /dev/null @@ -1,190 +0,0 @@ -%------------------------------------------------------------------------------- -% li_gdtfd: TFD with lag-independent (LI) kernel g[l,m]=Gâ‚[l] -% -% Syntax: tfd=li_gdtfd(x,dopp_win_params,Ntime) -% -% Inputs: -% x = input signal (either real-valued signal of length-N or -% complex-valued analytic signal of length-2N) -% -% dopp_win_params = Doppler window parameters in cell form: -% {win_length,win_type,win_param,Doppler_or_not} where -% - win_length is the sample length of the window -% - win_type is the type of window -% - [optional] win_param is the parameter of the window -% - [optional] Doppler_or_not is either 1 (define window in the Doppler -% domain, which is the default) or 0 (define window the time domain) -% e.g. {121, 'hamm'}; {121, 'tukey', 0.2}; {127,'cosh',0.01,0} -% -% Ntime = time oversampling value; must be greater than length of Doppler window -% -% Outputs: -% tfd = Ntime x N time-frequency distribution -% -% See also: DEC_LI_GDTFD, GET_ANALYTIC_SIGNAL, GEN_DOPPLER_KERN, FFT -% -% Example: -% N=10000; Ntime=256; -% x=gen_LFM(N,0.1,0.3)+gen_LFM(N,0.4,0.1); -% -% c=li_gdtfd(x,{51,'hamm'},Ntime); -% vtfd(c,x); -% -% Example: -% -% - -% John M. O' Toole, University College Cork -% Started: 16-04-2014 -% -% last update: Time-stamp: <2014-07-23 15:28:16 (otoolej)> -%------------------------------------------------------------------------------- -function [tfd,G1]=li_gdtfd(x,dopp_win_params,Ntime) -if(nargin<2 || isempty(dopp_win_params)), dopp_win_params={11,'hamm',0,1}; end -if(nargin<3 || isempty(Ntime)), Ntime=[]; end - - -DBplot=0; -DBmem=0; -DBcompare=0; -DBtest=0; -DBtime=0; - -if(DBtime), time_start=tic; end -%--------------------------------------------------------------------- -% 1. convert real-valued signal to analytic signal of length 2N -%--------------------------------------------------------------------- -[z,N2,N,Nh]=get_analytic_signal(x); - - -%--------------------------------------------------------------------- -% 2. generate Doppler--frequency signal function -% (for positive-Doppler values only) -%--------------------------------------------------------------------- -[G1,Q,Ntime]=gen_Doppler_kern(dopp_win_params,N,Ntime); -Nh=ceil(Ntime/2); -Qh=ceil(Q/2); - -Z=fft(z); -if(DBmem), s=whos; fprintf('start: mem=%s\n',disp_bytes(sum([s.bytes]))); end -tfd=zeros(Ntime,N); -l_real=1:Qh; l_imag=(Ntime-Qh+1):Ntime; - - -l=0:(Qh-1); -for k=0:N-1 - inp=mod(k+l,N2); inn=mod(k-l,N2); - inpN=mod(k+l+N,N2); innN=mod(k-l-N,N2); - K_doppler_slice=G1(l+1).*( Z(inp+1).*conj( Z(inn+1) ) + ... - Z(inpN+1).*conj( Z(innN+1) ) ); - - tfd(l_real,k+1)=real( K_doppler_slice )./2; - tfd(l_imag,k+1)=imag( K_doppler_slice )./2; -end - - -% $$$ Ktesting=zeros(N,ceil(N/2)+1); m=0:(ceil(N/2)); -% $$$ for n=0:N-1 -% $$$ inp=mod(n+m,N2); inn=mod(n-m,N2); -% $$$ Ktesting(n+1,m+1)=z(inp+1).*conj( z(inn+1) ); -% $$$ end -% $$$ Kfull=zeros(N); mb=1:(ceil(N/2)-1); -% $$$ Kfull(:,m+1)=Ktesting(:,m+1); -% $$$ Kfull(:,N-mb+1)=conj( Ktesting(:,mb+1) ); -% $$$ -% $$$ Ktest=complex(tfd(l_real,:),tfd(l_imag,:)); -% $$$ kk=fft(fft(Kfull.').'); -% $$$ kk=kk(l+1,:).*2; -% $$$ dispVars(size(kk),size(Ktest)); -% $$$ dispEE(Ktest,kk); -% $$$ figure(10); clf; vtfd(abs(Ktest)); -% $$$ figure(11); clf; vtfd(abs(Ktest-kk)); - -if(DBcompare) - K=zeros(Nh,N); - for k=0:N-1 - inp=mod(k+l,N2); inn=mod(k-l,N2); - inpN=mod(k+l+N,N2); innN=mod(k-l-N,N2); - K(l+1,k+1)=G1(l+1).*( Z(inp+1).*conj( Z(inn+1) ) + ... - Z(inpN+1).*conj( Z(innN+1) ) ); - end - Ktest=complex(tfd(l_real,:),tfd(l_imag,:)); - dispEE(Ktest,K(l+1,:)); -end -if(DBmem), s=whos; fprintf('K: mem=%s\n',disp_bytes(sum([s.bytes]))); end - - - - -%------------------------------------------------------------------------- -% 3. Expand R for positive and negative lag values and DFT back to -% time--frequency domain -%------------------------------------------------------------------------- -l=0:(Qh-1); lb=1:(Qh-1); -for k=0:2:N-2 - R_even_half=complex(tfd(l_real,k+1),tfd(l_imag,k+1)); - R_odd_half =complex(tfd(l_real,k+2),tfd(l_imag,k+2)); - - R_tslice_even=zeros(Ntime,1); R_tslice_odd=zeros(Ntime,1); - R_tslice_even(l+1)=R_even_half(l+1); - R_tslice_odd(l+1) =R_odd_half(l+1); - R_tslice_even(Ntime-lb+1)=conj( R_even_half(lb+1) ); - R_tslice_odd(Ntime-lb+1) =conj( R_odd_half(lb+1) ); - - tfd_time_slice=ifft( R_tslice_even+j.*R_tslice_odd ); - - tfd(:,k+1)=real(tfd_time_slice); - tfd(:,k+2)=imag(tfd_time_slice); -end - -if(DBmem), s=whos; fprintf('tfd: mem=%s\n',disp_bytes(sum([s.bytes]))); end - - - -if(DBcompare) - Rfull=zeros(Ntime,N); - Rfull(l+1,:)=K(l+1,:); - Rfull(Ntime-lb+1,:)=conj( Rfull(lb+1,:) ); - - tfd_test=ifft( Rfull ); - dispEE(tfd_test,tfd); -end - - -if(DBmem), s=whos; fprintf('end: mem=%s\n',disp_bytes(sum([s.bytes]))); end - -scale_factor=1/N; -tfd=tfd.*scale_factor; - -if(DBtime), dispVars( toc(time_start) ); end - - -%--------------------------------------------------------------------- -% END; testing and plotting -%--------------------------------------------------------------------- -if(DBtest) - if(DBtime), time_start=tic; end - tfd_test=full_gdtfd_testing_version(x,'swvd',dopp_win_params); - if(DBtime), dispVars( toc(time_start) ); end - if(Ntime==N) - dispEE(tfd_test,tfd); - else - a=N/Ntime; - if( a==floor(a) ) - dispEE(tfd_test(1:a:end,:),tfd./a); - end - end -end -if(DBplot) - figure(1); clf; - vtfd(tfd,real(x(1:N))); - - figure(9); clf; hold all; - Z=fft(z); - subplot(211); hold all; plot(sum(tfd)); plot( abs(Z(1:N)).^2./(2*N) ); - subplot(212); hold all; plot(sum(tfd)' - abs(Z(1:N)).^2./(2*N) ); -end - - - - diff --git a/src/paradigma/ppg/hr_functions/TFD toolbox JOT/full_TFDs/nonsep_gdtfd.m b/src/paradigma/ppg/hr_functions/TFD toolbox JOT/full_TFDs/nonsep_gdtfd.m deleted file mode 100644 index a5471dd5..00000000 --- a/src/paradigma/ppg/hr_functions/TFD toolbox JOT/full_TFDs/nonsep_gdtfd.m +++ /dev/null @@ -1,196 +0,0 @@ -%------------------------------------------------------------------------------- -% nonsep_gdtfd: Time-frequency distribution (quadratic class) with non-separable kernel -% -% Syntax: [tfd,g]=nonsep_gdtfd(x,kern_type,kern_params) -% -% Inputs: -% x = input signal (either real-valued signal of length-N or -% complex-valued analytic signal of length-2N) -% -% kern_type = { 'wvd' | 'swvd' | 'pwvd' | 'sep' | 'cw' | 'mb' } -% wvd - Wigner-Ville distribution -% swvd - Smoothed Wigner-Ville distribution -% (lag-independent kernel) -% pwvd - Pseudo Wigner-Ville distribution -% (Doppler-independent kernel) -% sep - Separable-kernel distribution -% (combintation of SWVD and PWVD) -% mb - Modified-B distribution -% cw - Choi-Williams distribution -% -% kern_params = cell of kernel parameters: -% wvd - {} -% swvd - {win_length,win_type,[win_param]} -% e.g. {11,'hamm'} -% pwvd - {win_length,win_type,[win_param]} -% e.g. {200,'cosh',0.1 -% sep - { {win1_length,win1_type,[win1_param]}, -% {win2_length,win2_type,[win2_param]} -% where win1 is the doppler window and win2 is the -% lag window, e.g. { {11,'hamm'}, {200,'cosh',0.1} } -% mb - {beta_parameter} in the range 1 -%------------------------------------------------------------------------------- -function tfd=nonsep_gdtfd(x,kern_type,kern_params) -if(nargin<2 || isempty(kern_type)), kern_type='cw'; end -if(nargin<3 || isempty(kern_params)), kern_params=10; end - - -DBplot=0; -DBmem=0; -DBcompare=0; -DBtest=0; -DBtime=0; - - -if(DBtime), time_start=tic; end -%--------------------------------------------------------------------- -% 1. convert real-valued signal to analytic signal of length 2N -%--------------------------------------------------------------------- -[z,N2,N,Nh]=get_analytic_signal(x); - - -%--------------------------------------------------------------------- -% 2. generate time--lag signal function (for positive-lag values only) -%--------------------------------------------------------------------- -if(DBmem), s=whos; fprintf('start: mem=%s\n',disp_bytes(sum([s.bytes]))); end -tfd=zeros(N,N); -m_real=1:Nh; m_imag=(Nh+1):N; - -m=0:(Nh-1); -for n=0:N-1 - inp=mod(n+m,N2); inn=mod(n-m,N2); - K_time_slice=z(inp+1).*conj( z(inn+1) ); - - tfd(n+1,m_real)=real( K_time_slice ); - tfd(n+1,m_imag)=imag( K_time_slice ); -end - -if(DBcompare) - for n=0:N-1 - inp=mod(n+m,N2); inn=mod(n-m,N2); - K(n+1,m+1)=z(inp+1).*conj( z(inn+1) ); - end - Ktest=complex(tfd(:,m_real),tfd(:,m_imag)); - dispEE(Ktest,K); -end - - -if(DBmem), s=whos; fprintf('K: mem=%s\n',disp_bytes(sum([s.bytes]))); end - -% $$$ if(strcmp(kern_type,'wvd')) -% $$$ for n=0:2:N-2 -% $$$ -% $$$ tfd_time_slice=fft( R_tslice_even+j.*R_tslice_odd ); -% $$$ -% $$$ tfd(n+1,:)=real(tfd_time_slice); -% $$$ tfd(n+2,:)=imag(tfd_time_slice); -% $$$ end -% $$$ -% $$$ -% $$$ dispVars('here'); -% $$$ return; -% $$$ end - - -%------------------------------------------------------------------------- -% 3. multiply kernel and signal function in the Doppler-lag domain -%------------------------------------------------------------------------- -for m=0:Nh-1 - g_lag_slice=gen_Doppler_lag_kern(kern_type,kern_params,N,m+1); - - R_lag_slice=ifft( fft( complex(tfd(:,m_real(m+1)),tfd(:,m_imag(m+1))) ).*g_lag_slice ); - - - tfd(:,m_real(m+1))=real( R_lag_slice ); - tfd(:,m_imag(m+1))=imag( R_lag_slice ); -end - -if(DBcompare) - g=gen_Doppler_lag_kern(kern_type,kern_params,N); - R=ifft( fft(K).*g(:,1:Nh) ); - Rtest=complex(tfd(:,m_real),tfd(:,m_imag)); - dispEE(Rtest,R); - clear g; -end - - -if(DBmem), s=whos; fprintf('R: mem=%s\n',disp_bytes(sum([s.bytes]))); end - - - - -%------------------------------------------------------------------------- -% 4. Expand R for positive and negative lag values and DFT back to -% time--frequency domain -%------------------------------------------------------------------------- -m=0:(Nh-1); mb=1:(Nh-1); -for n=0:2:N-2 - R_even_half=complex(tfd(n+1,m_real),tfd(n+1,m_imag)); - R_odd_half =complex(tfd(n+2,m_real),tfd(n+2,m_imag)); - - R_tslice_even=zeros(1,N); R_tslice_odd=zeros(1,N); - R_tslice_even(m+1)=R_even_half(m+1); - R_tslice_odd(m+1) =R_odd_half(m+1); - R_tslice_even(N-mb+1)=conj( R_even_half(mb+1) ); - R_tslice_odd(N-mb+1) =conj( R_odd_half(mb+1) ); - - tfd_time_slice=fft( R_tslice_even+j.*R_tslice_odd ); - - tfd(n+1,:)=real(tfd_time_slice); - tfd(n+2,:)=imag(tfd_time_slice); -end - -if(DBmem), s=whos; fprintf('tfd: mem=%s\n',disp_bytes(sum([s.bytes]))); end - - -if(DBcompare) - Rfull=zeros(N); - Rfull(:,m+1)=R; - Rfull(:,N-mb+1)=conj( Rfull(:,mb+1) ); - - tfd_test=fft( Rfull.' ).'; - dispEE(tfd_test,tfd); -end - -if(DBmem), s=whos; fprintf('end: mem=%s\n',disp_bytes(sum([s.bytes]))); end -tfd=tfd./N; - - -if(DBtime), dispVars( toc(time_start) ); end - -if(DBtest) - if(DBtime), time_start=tic; end - tfd_test=full_gdtfd_testing_version(x,kern_type,kern_params); - if(DBtime), dispVars( toc(time_start) ); end - dispEE(tfd_test,tfd); -end -if(DBplot) - figure(1); clf; - vtfd(tfd,real(x(1:N))); -end - -tfd = tfd'; - - - - - diff --git a/src/paradigma/ppg/hr_functions/TFD toolbox JOT/full_TFDs/sep_gdtfd.m b/src/paradigma/ppg/hr_functions/TFD toolbox JOT/full_TFDs/sep_gdtfd.m deleted file mode 100644 index 6999f19f..00000000 --- a/src/paradigma/ppg/hr_functions/TFD toolbox JOT/full_TFDs/sep_gdtfd.m +++ /dev/null @@ -1,199 +0,0 @@ -%------------------------------------------------------------------------------- -% sep_gdtfd: Time--frequency distribution (quadratic class) with separable kernel of -% the form g[l,m]=Gâ‚[l]gâ‚‚[m] -% -% Syntax: tfd=sep_gdtfd(x,dopp_win_params,lag_win_params,Ntime,Nfreq) -% -% Inputs: -% x = input signal (either real-valued signal of length-N or -% complex-valued analytic signal of length-2N) -% -% dopp_win_params = Doppler window parameters in cell form: -% {win_length,win_type,win_param,Doppler_or_not} where -% - win_length is the sample length of the window -% - win_type is the type of window -% - [optional] win_param is the parameter of the window -% - [optional] Doppler_or_not is either 1 (define window in the Doppler -% domain, which is the default) or 0 (define window the time domain) -% e.g. {121, 'hamm'}; {121, 'tukey', 0.2}; {127,'cosh',0.01,0} -% -% lag_win_params = lag window parameters in cell form: -% {win_length,win_type,win_param,lag_or_not} where -% - win_length is the sample length of the window -% - win_type is the type of window -% - [optional] win_param is the parameter of the window -% - [optional] lag_or_not is either 0 (define window in the lag -% domain, which is the default) or 0 (define window the frequency domain) -% e.g. {121, 'hamm'}; {121, 'tukey', 0.2}; {127,'cosh',0.01,0} -% -% Nfreq = frequency oversampling value; must be greater than length of lag window -% Ntime = time oversampling value; must be greater than length of Doppler window -% -% Outputs: -% tfd = Ntime x Nfreq time-frequency distribution -% -% See also: DEC_SEP_GDTFD, GET_ANALYTIC_SIGNAL, GEN_LAG_KERN, GEN_DOPPLER_KERN, FFT -% -% Example: -% N=10000; Ntime=256; Nfreq=256; -% x=gen_LFM(N,0.1,0.3)+gen_LFM(N,0.4,0.1); -% -% c=sep_gdtfd(x,{51,'hann'},{171,'hann'},Ntime,Nfreq); -% vtfd(c,x); - - -% John M. O' Toole, University College Cork -% Started: 16-04-2014 -% -% last update: Time-stamp: <2019-02-19 15:12:35 (otoolej)> -%------------------------------------------------------------------------------- -function tfd=sep_gdtfd(x,dopp_win_params,lag_win_params,Ntime,Nfreq) -if(nargin<4 || isempty(Ntime)), Ntime=[]; end -if(nargin<5 || isempty(Nfreq)), Nfreq=[]; end - -DBplot=0; -DBmem=0; -DBcompare=0; -DBtest=0; -DBtime=0; - -if(DBtime), time_start=tic; end -%--------------------------------------------------------------------- -% 1. convert real-valued signal to analytic signal of length 2N -%--------------------------------------------------------------------- -[z,N2,N,Nh]=get_analytic_signal(x); - - -%--------------------------------------------------------------------- -% 2. compute lag and Doppler windows -%--------------------------------------------------------------------- -[g2,P,Ph_floor,Nfreq]=gen_lag_kern(lag_win_params,N,Nfreq); -Nh_freq=ceil(Nfreq/2); -Ph=ceil(P/2); -[G1,Q,Ntime,G1_pad]=gen_Doppler_kern(dopp_win_params,N,Ntime); -Nh_time=ceil(Ntime/2); -Qh=ceil(Q/2); - - -%--------------------------------------------------------------------- -% 3. convolve signal function with kernel (multiplication in the -% Doppler--lag domain). Do this in stages to minimise memory -%--------------------------------------------------------------------- -if(DBmem), s=whos; fprintf('start: mem=%s\n',disp_bytes(sum([s.bytes]))); end -tfd=zeros(Ntime,Nfreq); - -if(DBmem), s=whos; fprintf('tfd declare: mem=%s\n',disp_bytes(sum([s.bytes]))); end - -n=0:N-1; l=0:(Qh-1); lb=1:(Qh-1); -for m=0:(Ph-1); - inp=mod(n+m,N2); inn=mod(n-m,N2); - K_lag_slice=g2(m+1).*z(inp+1).*conj( z(inn+1) ); - - K_lag_slice=fft(K_lag_slice); - - R_lag_slice=zeros(Ntime,1); - R_lag_slice(l+1)=K_lag_slice(l+1).*G1(l+1); - R_lag_slice(Ntime-lb+1)=K_lag_slice(N-lb+1).*G1(Q-lb+1); - - R_lag_slice=ifft(R_lag_slice); - - tfd(:,m+1)=real( R_lag_slice ); - tfd(:,m+Nh_freq+1)=imag( R_lag_slice ); -end - -if(DBmem), s=whos; fprintf('R: mem=%s\n',disp_bytes(sum([s.bytes]))); end - - - -if(DBcompare) - K=zeros(N,Nh_freq); - m=0:(Ph-1); - for n=0:N-1 - inp=mod(n+m,N2); inn=mod(n-m,N2); - K(n+1,m+1)=g2(m+1).*z(inp+1).*conj( z(inn+1) ); - end - af=fft(K); - - R=zeros(Ntime,Nh_freq); - for m=0:Ph-1 - R(l+1,m+1)=af(l+1,m+1).*G1(l+1); - R(Ntime-lb+1,m+1)=af(N-lb+1,m+1).*G1(Q-lb+1); - - R(:,m+1)=ifft(R(:,m+1)); - end - Rtest=complex(tfd(:,1:Nh_freq),tfd(:,(Nh_freq+1):end)); - dispEE(R,Rtest); - clear Rtest K af; -end - - -%------------------------------------------------------------------------- -% 4. Expand R for positive and negative lag values and DFT back to -% time--frequency domain -%------------------------------------------------------------------------- -m=0:(Ph-1); mb=1:(Ph-1); -k_real=1:Nh_freq; k_imag=(Nh_freq+1):Nfreq; - -for n=0:2:Ntime-2 - R_even_half=complex(tfd(n+1,k_real),tfd(n+1,k_imag)); - R_odd_half =complex(tfd(n+2,k_real),tfd(n+2,k_imag)); - - R_tslice_even=zeros(1,Nfreq); R_tslice_odd=zeros(1,Nfreq); - R_tslice_even(m+1)=R_even_half(m+1); - R_tslice_odd(m+1) =R_odd_half(m+1); - R_tslice_even(Nfreq-mb+1)=conj( R_even_half(mb+1) ); - R_tslice_odd(Nfreq-mb+1) =conj( R_odd_half(mb+1) ); - - tfd_time_slice=fft( R_tslice_even+j.*R_tslice_odd ); - - tfd(n+1,:)=real(tfd_time_slice); - tfd(n+2,:)=imag(tfd_time_slice); -end - -if(DBmem), s=whos; fprintf('tfd (end): mem=%s\n',disp_bytes(sum([s.bytes]))); end - - -if(DBcompare) - Rfull=zeros(Ntime,Nfreq); - Rfull(:,m+1)=R(:,m+1); - Rfull(:,Nfreq-mb+1)=conj( Rfull(:,mb+1) ); - - tfd_test=fft( Rfull.' ).'; - dispEE(tfd_test,tfd); - clear R test_test; -end - -scale_factor=1/Nfreq; -tfd=tfd.*scale_factor; - - -%--------------------------------------------------------------------- -% END; testing and plotting -%--------------------------------------------------------------------- -if(DBtime), dispVars( toc(time_start) ); end - -if(DBtest) % && Ntime==N && Nfreq==N) - if(DBtime) - dispVars( toc(time_start) ); - time_start=tic; - end - tfd_test=full_gdtfd_testing_version(x,'sep',{dopp_win_params,lag_win_params}); - - if(DBtime), dispVars( toc(time_start) ); end - -% $$$ dispVars( sum(tfd_test(:)), sum(tfd(:)) ); - if(Ntime==N && Nfreq==N) - dispEE(tfd_test,tfd); - else - a=N/Ntime; b=N/Nfreq; - if( a==floor(a) && b==floor(b) ) - dispEE(tfd_test(1:a:end,1:b:end),tfd./(a*b)); - end - end -end -if(DBplot) - figure(1); clf; - vtfd(tfd,real(x(1:N))); -end - - diff --git a/src/paradigma/ppg/hr_functions/TFD toolbox JOT/full_tfd.m b/src/paradigma/ppg/hr_functions/TFD toolbox JOT/full_tfd.m deleted file mode 100644 index a03d0ddc..00000000 --- a/src/paradigma/ppg/hr_functions/TFD toolbox JOT/full_tfd.m +++ /dev/null @@ -1,144 +0,0 @@ -%------------------------------------------------------------------------------- -% full_tfd: -% -% Syntax: tf=full_tfd(x,kern_type,kern_params,Ntime,Nfreq) -% -% Inputs: -% x = input signal (either real-valued signal of length-N or -% complex-valued analytic signal of length-2N) -% -% kern_type = kernel type, either nonseparable, separable, Doppler-independent -% (DI) or lag-independent (LI): { 'nonsep' | 'sep' | 'DI' | 'LI' } -% -% kern_params = kernel parameters; different depending on kernel type -% -% if nonseparable kernel, then form: { kern_name, kern_param} -% e.g. tf=full_tfd( x, 'nonsep', { 'cw', 100 } ); -% -% if Doppler-independent kernel, then of the form: -% { window_length, window_type, [window_parameter (optional)] } -% e.g. tf=full_tfd( x, 'DI', {101,'hann'} ); -% -% if lag-independent kernel, then of the form: -% { window_length, window_type, [window_parameter (optional)] } -% e.g. tf=full_tfd( x, 'LI', {101,'cosh',0.01} ); -% -% if separable kernel, then of the form: { doppler_window, lag_window } -% where doppler_window is of the form: { window_length, window_type, -% [window_parameter (optional)] }; same format for lag window -% e.g. tf=full_tfd( x, 'sep', { {101, 'cosh', 0.05}, {101,'hann'} } ); -% -% Ntime = over-sampling in the time direction; only applicable for separable -% and lag-independent kernels -% -% Nfreq = over-sampling in the frequency direction; only applicable for separable -% and Doppler-independent kernels -% -% Outputs: -% tf = time-frequency distribution of size N x N (nonseparable kernel), -% or Ntime x N (lag-independent kernel), -% or N x Nfreq (Doppler-independent kernel), -% or Ntime x Nfreq (separable kernel) -% -% See also: NONSEP_GDTFD, SEP_GDTFD, LI_GDTFD, DI_GDTFD -% -% Examples: -% N=512; -% x=gen_LFM(N,0.1,0.3) + gen_LFM(N,0.4,0.04); -% -% % nonseparable kernel (Choi-Williams kernel): -% tf=full_tfd(x,'nonsep',{'cw',10}); -% figure(1); clf; vtfd(tf,x); -% -% % separable kernel: -% tf=full_tfd(x,'sep',{{51,'hann'},{101,'hann'}},256,256); -% figure(2); clf; vtfd(tf,x); -% -% % Doppler-independent kernel: -% tf=full_tfd(x,'DI',{101,'hann'},256,[]); -% figure(3); clf; vtfd(tf,x); -% -% % lag-independent kernel: -% tf=full_tfd(x,'LI',{51,'hann'},[],256); -% figure(4); clf; vtfd(tf,x); - - - -% John M. O' Toole, University College Cork -% Started: 11-06-2014 -% -% last update: Time-stamp: <2017-05-30 10:00:46 (otoolej)> -%------------------------------------------------------------------------------- -function tf=full_tfd(x,kern_type,kern_params,Ntime,Nfreq) -if(nargin<2 || isempty(kern_type)), kern_type='sep'; end -if(nargin<3 || isempty(kern_params)), kern_params={{51,'hann'},{101,'hann'}}; end -if(nargin<4 || isempty(Ntime)), Ntime=[]; end -if(nargin<5 || isempty(Nfreq)), Nfreq=[]; end - - -% set to 1 if want to see how much memory is used: -DBmem=1; - - -kern_type=lower(kern_type); -switch kern_type - case { 'nonsep', 'ns', 'nonseparable', 'non-separable', 'non-sep' } - %--------------------------------------------------------------------- - % 1. Non-separable kernel; Doppler-lag form: g[l,m] - %--------------------------------------------------------------------- - nonsep_params=[]; - if(~iscell(kern_params)) - nonsep_name=kern_params; - else - nonsep_name=kern_params{1}; - if(length(kern_params)>1) - nonsep_params=kern_params{2}; - end - end - - tf=nonsep_gdtfd(x,nonsep_name,nonsep_params); - - - case { 'sep', 'separable' } - %--------------------------------------------------------------------- - % 2. separable kernel; Doppler-lag form: G1[l]g2[m] - %--------------------------------------------------------------------- - if(~iscell(kern_params) | (iscell(kern_params) & length(kern_params)<2) ) - error(['separable kernel parameters should be of the form: ' ... - '{ {dopp_win_length,dopp_win_name}, {lag_win_length,lag_win_name} }']); - end - - tf=sep_gdtfd(x,kern_params{1},kern_params{2},Ntime,Nfreq); - - - case { 'di', 'doppler-independent', 'dopp.-indep', 'dopp-indep', 'pwvd', 'p-wvd' } - %--------------------------------------------------------------------- - % 3. Doppler-independent kernel: Doppler-lag form: g2[m] - %--------------------------------------------------------------------- - if(~iscell(kern_params)) - error(['Doppler-independent kernel parameters should be of the form: ' ... - '{win_length,win_name}']); - end - - - tf=di_gdtfd(x,kern_params,Nfreq); - - - case { 'li', 'lag-independent', 'lag-indep', 'swvd', 's-wvd' } - %--------------------------------------------------------------------- - % 4. Lag-independent kernel: Doppler-lag form: G1[l] - %--------------------------------------------------------------------- - if(~iscell(kern_params)) - error(['lag-independent kernel parameters should be of the form: ' ... - '{win_length,win_name}']); - end - - tf=li_gdtfd(x,kern_params,Ntime); - - otherwise - warning('kern_type should be either: nonsep, sep, DI, or LI'); - tf=[]; -end - - -if(DBmem), s=whos; fprintf('total memory used: mem=%s\n',disp_bytes(sum([s.bytes]))); end diff --git a/src/paradigma/ppg/hr_functions/TFD toolbox JOT/load_curdir.m b/src/paradigma/ppg/hr_functions/TFD toolbox JOT/load_curdir.m deleted file mode 100644 index df0fc316..00000000 --- a/src/paradigma/ppg/hr_functions/TFD toolbox JOT/load_curdir.m +++ /dev/null @@ -1,13 +0,0 @@ - -% what directory is this file in? -cur_full_path=mfilename('fullpath'); -cur_fname=mfilename(); -i=findstr(cur_full_path,cur_fname); -cur_dir=cur_full_path(1:(i-1)); - -% add the paths: -addpath( genpath(cur_dir) ); - - -clear cur_full_path cur_fname cur_dir; - diff --git a/src/paradigma/ppg/hr_functions/TFD toolbox JOT/pics/decimated_TFDs_examples.png b/src/paradigma/ppg/hr_functions/TFD toolbox JOT/pics/decimated_TFDs_examples.png deleted file mode 100644 index 6d7ddf496f7685aa0d7a0891405528c801f9f444..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 146865 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

a^+| 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

awiX`Im?tyS{MV| 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%0D{XATH^a5{sv#45DZ;b!_nmO&(-}T3dPn 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 diff --git a/src/paradigma/ppg/hr_functions/TFD toolbox JOT/utils/check_dec_params_seq.m b/src/paradigma/ppg/hr_functions/TFD toolbox JOT/utils/check_dec_params_seq.m deleted file mode 100644 index 3e453e53..00000000 --- a/src/paradigma/ppg/hr_functions/TFD toolbox JOT/utils/check_dec_params_seq.m +++ /dev/null @@ -1,79 +0,0 @@ -%------------------------------------------------------------------------------- -% check_dec_params_seq: Check and return arbitrary set from {k_1,k_2,...,k_J} samples -% could be for n (time) sample points also. -% -% Syntax: k=check_dec_params_seq(dec_param,N,time_freq_str) -% -% Inputs: -% dec_param,N,time_freq_str - -% -% Outputs: -% k - -% -% Example: -% -% - -% John M. O' Toole, University College Cork -% Started: 23-04-2014 -% -% last update: Time-stamp: <2014-04-23 15:36:55 (otoolej)> -%------------------------------------------------------------------------------- -function [k,Nfreq,dec_param]=check_dec_params_seq(dec_param,N,time_freq_str,check_param) -if(nargin<3 || isempty(time_freq_str)), time_freq_str='Frequency'; end -if(nargin<4 || isempty(check_param)), check_param=1; end - - - -%--------------------------------------------------------------------- -% 0. check if parameters are ok: -%--------------------------------------------------------------------- -dec_param=unique(dec_param); - -if(~all(dec_param==fix(dec_param))) - error([time_freq_str ' decimation parameters must be integers.']); -end -if(any(dec_param>=N) || any(dec_param<0)) - error([time_freq_str ' decimation values need to within 0<=k<=N-1']); -end - - -%--------------------------------------------------------------------- -% 1. set parameters: -%--------------------------------------------------------------------- -if(length(dec_param)==1) - % decimation parameter is not a sequence: - if(check_param) - dec_param=check_dec_value(dec_param,N,time_freq_str); - end - k=0:dec_param:N-1; - -elseif(length(dec_param)>1) - k=dec_param; -else - k=0:N-1; -end - - -if(any(k>=N) || any(k<0)) - error([time_freq_str ' decimation values need to within 0<=k<=N-1']); -end -Nfreq=length(k); - - -function dec_param=check_dec_value(dec_param,N,time_freq_str) -%--------------------------------------------------------------------- -% check (or set) that N/a is an integer -%--------------------------------------------------------------------- -if(rem(N,dec_param)) - warning(['N not divisable by ' time_freq_str ' decimation factor. Increasing....']); - while( rem(N,dec_param) ) - dec_param=dec_param+1; - end - disp( ['... decimation factor now=' num2str(dec_param)]); - if(dec_param>=N) - error([time_freq_str ' decimation factor is equal to N. N is prime? Pick smaller ' ... - 'decimation parameter']); - dec_param=1; - end -end diff --git a/src/paradigma/ppg/hr_functions/TFD toolbox JOT/utils/dispEE.m b/src/paradigma/ppg/hr_functions/TFD toolbox JOT/utils/dispEE.m deleted file mode 100644 index 15d7b237..00000000 --- a/src/paradigma/ppg/hr_functions/TFD toolbox JOT/utils/dispEE.m +++ /dev/null @@ -1,9 +0,0 @@ -%% disp error between two matrices .. -function dispEE( a, b ); - -ee = a - b; -diff_re = max( abs(real(ee(:))) ); -diff_im = max( abs(imag(ee(:))) ); -a_name=deblank(inputname(1)); -b_name=deblank(inputname(2)); -fprintf('<< %s - %s = %g + j%g >>\n',a_name,b_name,diff_re,diff_im); diff --git a/src/paradigma/ppg/hr_functions/TFD toolbox JOT/utils/dispVars.m b/src/paradigma/ppg/hr_functions/TFD toolbox JOT/utils/dispVars.m deleted file mode 100644 index 1fc9e5e3..00000000 --- a/src/paradigma/ppg/hr_functions/TFD toolbox JOT/utils/dispVars.m +++ /dev/null @@ -1,26 +0,0 @@ -%------------------------------------------------------------------------------- -% Display variables to standard output -% -% DATE: 07-09-2010 -%------------------------------------------------------------------------------- -function dispVars( varargin ) -% $$$ for i=1:nargin -% $$$ keyboard; -% $$$ varargin{i} -% $$$ end - -str = ''; -for i=1:nargin - if( iscell(varargin{i}) ) - for j=1:length(varargin{i}) - str = [ str ' |' char(inputname(i)) '(' num2str(j) ') =' ... - num2str(varargin{i}{j}) ]; - end - else - - str = strcat(str,' |',char(inputname(i)),'=',num2str(varargin{i})); - end - -end - -disp(str); diff --git a/src/paradigma/ppg/hr_functions/TFD toolbox JOT/utils/disp_bytes.m b/src/paradigma/ppg/hr_functions/TFD toolbox JOT/utils/disp_bytes.m deleted file mode 100644 index 08a47896..00000000 --- a/src/paradigma/ppg/hr_functions/TFD toolbox JOT/utils/disp_bytes.m +++ /dev/null @@ -1,25 +0,0 @@ -function str = disp_bytes(NumBytes) -% BYTES2STR Private function to take integer bytes and convert it to -% scale-appropriate size. -% - -% taken from 'StackOverflow' response, by 'MatlabSorter', 31/1/11 - -scale = floor(log(NumBytes)/log(1024)); -switch scale - case 0 - str = [sprintf('%.0f',NumBytes) ' b']; - case 1 - str = [sprintf('%.2f',NumBytes/(1024)) ' kb']; - case 2 - str = [sprintf('%.2f',NumBytes/(1024^2)) ' Mb']; - case 3 - str = [sprintf('%.2f',NumBytes/(1024^3)) ' Gb']; - case 4 - str = [sprintf('%.2f',NumBytes/(1024^4)) ' Tb']; - case -inf - % Size occasionally returned as zero (eg some Java objects). - str = 'Not Available'; - otherwise - str = 'Over a petabyte!!!'; -end diff --git a/src/paradigma/ppg/hr_functions/TFD toolbox JOT/utils/fold_vector_full.m b/src/paradigma/ppg/hr_functions/TFD toolbox JOT/utils/fold_vector_full.m deleted file mode 100644 index d407016c..00000000 --- a/src/paradigma/ppg/hr_functions/TFD toolbox JOT/utils/fold_vector_full.m +++ /dev/null @@ -1,40 +0,0 @@ -%------------------------------------------------------------------------------- -% fold_vector_full: fold the vector for frequency decimation: -% -% y[n] = y[n] + sum_{p=0}^{a-l} x[pJ+n] -% -% for n=0,1,...,J-1 -% -% which returns DFT{y[n]} = Y[ak] -% -% Syntax: y=fold_vector_full(x,J,a) -% -% Inputs: -% x,J,a - -% -% Outputs: -% y - -% -% Example: -% -% - -% John M. O' Toole, University College Cork -% Started: 23-04-2014 -% -% last update: Time-stamp: <2014-04-23 17:11:54 (otoolej)> -%------------------------------------------------------------------------------- -function y=fold_vector_full(x,J,a) -% Assume that all parameters (J,a) are sane. - -y=zeros(J,1); -x=x(:); - -n=0:J-1; -y(n+1)=x(n+1); -for p=1:a-1 - y(n+1)=y(n+1)+x(p*J+n+1); -end - -% scale by decimation factor: -y=y./a; diff --git a/src/paradigma/ppg/hr_functions/TFD toolbox JOT/utils/fold_vector_half.m b/src/paradigma/ppg/hr_functions/TFD toolbox JOT/utils/fold_vector_half.m deleted file mode 100644 index 37e79b1a..00000000 --- a/src/paradigma/ppg/hr_functions/TFD toolbox JOT/utils/fold_vector_half.m +++ /dev/null @@ -1,34 +0,0 @@ -%------------------------------------------------------------------------------- -% fold_vector_half: Fold vector -% -% y[n] = y[n] + sum_{p=0}^{a-l} x[pJ+n] -% -% for n=0,1,...,Jh -% -% Syntax: y=fold_vector_half(x,J,Jh,a) -% -% Inputs: -% x,J,Jh,a - -% -% Outputs: -% y - -% -% Example: -% -% - -% John M. O' Toole, University College Cork -% Started: 23-04-2014 -% -% last update: Time-stamp: <2014-04-23 14:05:04 (otoolej)> -%------------------------------------------------------------------------------- -function y=fold_vector_half(x,J,Jh,a) -% Assume that all parameters (J,Jh,a) are sane. - -y=zeros(Jh+1,1); -x=x(:); - -n=0:(Jh); -for p=0:a-1 - y(n+1)=y(n+1)+x(p*J+n+1); -end diff --git a/src/paradigma/ppg/hr_functions/TFD toolbox JOT/utils/gen_LFM.m b/src/paradigma/ppg/hr_functions/TFD toolbox JOT/utils/gen_LFM.m deleted file mode 100644 index 0d781f9f..00000000 --- a/src/paradigma/ppg/hr_functions/TFD toolbox JOT/utils/gen_LFM.m +++ /dev/null @@ -1,29 +0,0 @@ -%------------------------------------------------------------------------------- -% Generate a linear frequency modulated (LFM) signal -% -% USE: sig=gen_LFM(N,fstart,fstop,phase) -% -% INPUT: -% N = length of LFM signal -% fstart = starting frequency -% fend = ending frequency -% phase = (optional) phase offset -% -% OUTPUT: -% sig = LFM signal of length-N -% -% EXAMPLE: -% N=256; fstart=0.1; fend=0.4; -% x=gen_LFM(N,fstart,fend); -% plot(x); -%------------------------------------------------------------------------------- -function sig=gen_LFM(N,fstart,fstop,phase) -if(nargin<1 || isempty(N)) N=128; end -if(nargin<2 || isempty(fstart)) fstart=0.1; end -if(nargin<3 || isempty(fstop)) fstop=0.4; end -if(nargin<4 || isempty(phase)) phase=0; end - - - -n=0:N-1; -sig=cos( 2*pi.*(fstart.*n + ((fstop-fstart)/(2*N)).*(n.^2)) + phase ); diff --git a/src/paradigma/ppg/hr_functions/TFD toolbox JOT/utils/get_analytic_signal.m b/src/paradigma/ppg/hr_functions/TFD toolbox JOT/utils/get_analytic_signal.m deleted file mode 100644 index 44879f2d..00000000 --- a/src/paradigma/ppg/hr_functions/TFD toolbox JOT/utils/get_analytic_signal.m +++ /dev/null @@ -1,76 +0,0 @@ -%------------------------------------------------------------------------------- -% get_analytic_signal: analytic signal as per [1] -% -% Syntax: [z,N2,N,Nh]=get_analytic_signal(z) -% -% INPUT: -% s = real-valued signal -% -% OUTPUT: -% z = complex-valued analytic signal -% -% EXAMPLE: -% N=64; f=0.1; N2=2*N; -% s=cos( 2*pi*f.*(0:N-1)); -% z=get_analytic_signal(s); -% plot(1:N2,real(z),1:N2,imag(z)); -% legend('real','imaginary'); -% -% -% [1] J. M. O' Toole, M. Mesbah, and B. Boashash, "A New Discrete Analytic Signal for -% Reducing Aliasing in the Discrete Wigner-Ville Distribution", IEEE Trans. on Signal -% Processing, vol. 56, no. 11, pp. 5427-5434, Nov. 2008. - - -% John M. O' Toole, University College Cork -% Started: 14-04-2014 -% -% last update: Time-stamp: <2016-08-11 17:18:41 (otoolej)> -%------------------------------------------------------------------------------- -function [z,N2,N,Nh]=get_analytic_signal(z) -if(rem(length(z),2)) - warn_str=sprintf(['odd-length signal.\nCurrently, code works for even-length signal ' ... - 'only.\n\nRemoving last sample of the signal to force to ' ... - 'even-length.\n']); - warning(warn_str); - z=z(1:(end-1)); -end - - -if(isreal(z)) - z=gen_analytic(z); -else - warn_str=sprintf(['using complex-valued signal; assuming this is an analytic signal ' ... - 'zero-padded to length-2N?\n\n If unsure, input the real part ' ... - 'of signal only, i.e. real(x)\n'] ); - warning(warn_str); -end -N2=length(z); N=N2/2; Nh=ceil(N/2); - -if(N~=fix(N)) - error('Analytic signal must be length 2N.'); -end - - - -function z=gen_analytic(s1) -%--------------------------------------------------------------------- -% generate the analytic signal (with zero-padding in the time-direction) -%--------------------------------------------------------------------- -s1=real(s1); -N=length(s1); N2=2*N; - -% 1. zero-pad N-point signal to 2N -s1=[s1(:); zeros(N,1)]; -S1=fft(s1); - -% 2. Get analytic signal of 2N-point signal -H=zeros(N2,1); -H([1 N+1])=1; -H(2:N)=2; -z_cb=ifft(S1.*H); - - -% 3. Force the second half of the time-domain signal to zero. -z=[z_cb(1:N); zeros(N,1)]; - diff --git a/src/paradigma/ppg/hr_functions/TFD toolbox JOT/utils/get_window.m b/src/paradigma/ppg/hr_functions/TFD toolbox JOT/utils/get_window.m deleted file mode 100644 index b24fb8b9..00000000 --- a/src/paradigma/ppg/hr_functions/TFD toolbox JOT/utils/get_window.m +++ /dev/null @@ -1,176 +0,0 @@ -%-------------------------------------------------------------------------------- -% General function to calculate a window function (mostly a wrapper for the existing -% window functions). -% -% USE: win = get_window( win_length, win_type, [win_param], [DFT_WINDOW], [Npad] ) -% -% INPUT: -% win_length = length of window -% win_type = type of window: { 'delta' | 'rect' | 'bart' | 'hamm' -% | 'hann' | 'tukey' | 'gauss' | 'cosh' | 'blackmanharris' } -% win_param = (optional) window parameter. -% DFT_WINDOW = (optional) parameter { 0 | 1 }. -% If 1 returns DFT of window. -% Npad = (optional) zero-pad window to length Npad. -% -% OUTPUT: -% win = window -% -% See also: BARTLETT, HANNING, HAMMING, GAUSSWIN, TUKEYWIN, CIRCSHIFT, FFT -% -% EXAMPLE -% N=64; -% win=get_window(N,'tukey',0.4,0,2*N); -% plot(win); - - -% Copyright (C) 2007,2008 John M. O' Toole, The University of Queensland -% -% 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 3 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, see . -%-------------------------------------------------------------------------------- -function win = get_window( win_length, win_type, win_param, DFT_WINDOW, Npad ) -if( nargin<3 ) win_param=[]; end -if( nargin<4 ) DFT_WINDOW=0; end -if( nargin<5 ) Npad=0; end - - -win=get_win(win_length,win_type,win_param,DFT_WINDOW); -win=shift_win(win); - -if(Npad>0) - win=pad_win(win,Npad); -end - - - -function win=get_win(win_length, win_type, win_param, DFT_WINDOW ) -%-------------------------------------------------------------------------------- -% Get the window. Negative indices are first. -%-------------------------------------------------------------------------------- - -switch win_type - case 'delta' - win=zeros(win_length,1); - wh = floor(win_length/2); - win(wh+1)=1; - case 'rect' - win(1:win_length) = 1; - case {'bart', 'bartlett'} - win = bartlett( win_length ); - case {'hamm', 'hamming'} - win = hamming( win_length ); - case {'hann', 'hanning'} - win = hanning( win_length ); - case 'tukey' - % NOTE: seems to be problem with Octave's (v2.9.12) tukeywin.m for N odd. - if(isempty(win_param)) - win = tukeywin( win_length ); - else - win = tukeywin( win_length, win_param ); - end - case 'gauss' - if(isempty(win_param)) - win = gausswin( win_length ); - else - win = gausswin( win_length, win_param ); - end - case 'cosh' - win_hlf = fix( win_length / 2); - - if(isempty(win_param)) - win_param = 0.01; - end - for m = -win_hlf:win_hlf - win(mod(m,win_length)+1) = cosh( m ).^( -2 * win_param ); - end - win = fftshift(win); - case {'blackmanharris', 'bmh'} - win = blackmanharris(win_length, 'symmetric'); - case {'nuttall'} - win = nuttallwin(win_length, 'symmetric'); - case {'dolph', 'chebwin'} - win = chebwin(win_length, win_param); - - otherwise - error(['Unknown window type ' win_type]); -end - - -%--------------------------------------------------------------------- -% If want the DFT of win -%--------------------------------------------------------------------- -if(DFT_WINDOW) - win=circshift(win(:),ceil(win_length/2)); - win=fft(win); - win=circshift(win(:),floor(win_length/2)); -end - - -function w=shift_win(w) -%-------------------------------------------------------------------------------- -% Shift the window so that positive indices are first. -%-------------------------------------------------------------------------------- -N=length(w); -w=circshift(w(:),ceil(N/2)); - - - -function w_pad=pad_win(w,Npad) -%-------------------------------------------------------------------------------- -% -% Pad window to Npad. -% -% Presume that positive window indices are first. -% -% When N is even use method described in [1] -% -% References: -% [1] S. Lawrence Marple, Jr., Computing the discrete-time analytic -% signal via FFT, IEEE Transactions on Signal Processing, Vol. 47, -% No. 9, September 1999, pp.2600--2603. -% -%-------------------------------------------------------------------------------- -w=w(:); -w_pad=zeros(Npad,1); -N=length(w); -Nh=floor(N/2); -if(Npad E ) flag=0; end - - diff --git a/src/paradigma/ppg/hr_functions/TFD toolbox JOT/utils/padWin.m b/src/paradigma/ppg/hr_functions/TFD toolbox JOT/utils/padWin.m deleted file mode 100644 index d2038921..00000000 --- a/src/paradigma/ppg/hr_functions/TFD toolbox JOT/utils/padWin.m +++ /dev/null @@ -1,97 +0,0 @@ -%-------------------------------------------------------------------------------- -% -% Pad window to Npad. -% -% Presume that positive window indices are first. -% -% USE: w_pad=padWin(w,Npad) -% -% INPUT: -% w = window (vector) of length N -% Npad = pad window to length N (Npad>N) -% -% OUTPUT: -% w_pad = window of length N zeropadded to length Npad -% -% -% When N is even use method described in [1] -% -% References: -% [1] S. Lawrence Marple, Jr., Computing the discrete-time analytic -% signal via FFT, IEEE Transactions on Signal Processing, Vol. 47, -% No. 9, September 1999, pp.2600--2603. -% -% -% STARTED: 04-01-2008 - -% Copyright (c) 2010, John M. O' Toole, The University of Queensland -% All rights reserved. -% -% Redistribution and use in source and binary forms, with or without -% modification, are permitted provided that the following -% conditions are met: -% * Redistributions of source code must retain the above -% copyright notice, this list of conditions and the following -% disclaimer. -% * Redistributions in binary form must reproduce the above -% copyright notice, this list of conditions and the following -% disclaimer in the documentation and/or other materials -% provided with the distribution. -% * Neither the name of the The University of Queensland nor the -% names of its contributors may be used to endorse or promote -% products derived from this software without specific prior -% written permission. -% -% THIS SOFTWARE IS PROVIDED BY JOHN M. O' TOOLE ''AS IS'' AND ANY -% EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -% IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -% PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JOHN M. O' TOOLE BE -% LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -% CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT -% OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR -% BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -% LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -% (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE -% USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH -% DAMAGE. -%-------------------------------------------------------------------------------- -function w_pad=padWin(w,Npad) -DB=0; -w=w(:); -w_pad=zeros(Npad,1); -N=length(w); -Nh=floor(N/2); -if(DB) dispVars(N,Npad); end -if(Npad

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