1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110
| close all
clc
clear
n = 19;
i = 4;
drop = 212;
%% Load des data %%
raw_data = cell(n, i);
for file = 1:n
for subfile = 1:i
path = fullfile('\\teraetu.univ-lyon1.fr\homeetu\p1704319\My Documents\MATLAB\Mémoire\Data CON-TREX\Approche OMT', ...
sprintf('data%d_%d.cxp', file, subfile));
if exist(path, 'file') == 2
data_file = dlmread(path, '\t', drop, 0);
raw_data{file, subfile} = data_file;
end
end
end
%% Détermine les longueurs max et min dans les cellules de raw_data %%
min_length = Inf;
for file = 1:n
for subfile = 1:i
if ~isempty(raw_data{file, subfile})
size_data = size(raw_data{file, subfile}, 1);
min_length = min(min_length, size_data);
end
end
end
max_length = 0;
for file = 1:n
for subfile = 1:i
if ~isempty(raw_data{file, subfile})
column_length = size(raw_data{file, subfile}, 1);
max_length = max(max_length, column_length);
end
end
end
%% Comble les valeurs manquantes dans les colonnes de raw_data avec NaN %%
for file = 1:n
for subfile = 1:i
if ~isempty(raw_data{file, subfile});
current_length = size(raw_data{file, subfile}, 1);
num_values_to_add = max_length - current_length;
if num_values_to_add > 0
raw_data{file, subfile} = padarray(raw_data{file, subfile}, [num_values_to_add, 0], NaN, 'post');
end
end
end
end
for file = 1:n
for subfile = 1:i
if isempty(raw_data{file, subfile})
nan_data = NaN(max_length, 3);
raw_data{file, subfile} = nan_data;
end
end
end
%% Récupère les données de forces dans les cellules de raw_data %%
% Complément des données manquantes par NaN
raw_force = NaN(n * i, max_length);
for file = 1:n
for subfile = 1:i
q = (file - 1) * i + subfile;
raw_force(q, :) = raw_data{file, subfile}(:, 1)';
end
end
force_lifted = NaN(size(raw_force, 1), min_length);
for k = 1:size(raw_force, 1)
force_mean = NaN(1, min_length);
p = round(size(raw_force(k,:), 2) / min_length);
for l = 1:p:(size(raw_force(k,:), 2) - p)
% Calcul de la moyenne sur le segment de longueur p
force_mean(l:l+p-1) = mean(raw_force(k, l:l+p-1), 'omitnan');
end
force_lifted(k, ~isnan(force_mean)) = force_mean(~isnan(force_mean));
end
force_fitted = NaN(size(force_lifted));
for k = 1:size(force_lifted, 1)
p = round(size(force_lifted(k,:), 2) / min_length);
force_fitted(k, 1:p:end) = force_lifted(k, 1:p:end);
end
force_fitted_cleaned = NaN(size(force_fitted, 1), size(force_fitted, 2));
for k = 1:size(force_fitted, 1)
non_nan_indices = ~isnan(force_fitted(k, :));
non_nan_values = force_fitted(k, non_nan_indices);
force_fitted_cleaned(k, 1:numel(non_nan_values)) = non_nan_values;
end
force_fitted_cleaned = force_fitted_cleaned(:, 1:min_length); |
Partager