Files
FAT-Servo-Load-Test/Matlab/syncronizeDataSets.m
T
2026-09-16 06:25:24 +02:00

104 lines
2.1 KiB
Matlab

%% Datensätze definieren
datasets = {S0,S2,S4,S6,S8,S10};
datasetNames = {'0 kg','2 kg','4 kg','6 kg','8 kg','10 kg'};
%% Parameter
v_threshold = 0.005;
%% Datensätze filtern
for k = 1:length(datasets)
S = datasets{k};
% Bewegungsmaske aus ACTVELO erzeugen
moveMask = abs(S.ACTVELO.y) >= v_threshold;
% Zeit- und Bewegungsvektor
t_vel = S.ACTVELO.t;
moveFlag = double(moveMask);
signals = fieldnames(S);
fprintf('Bearbeite Datensatz %s\n', datasetNames{k});
for n = 1:length(signals)
sig = signals{n};
t = S.(sig).t;
y = S.(sig).y;
% Bewegung auf Zeitbasis interpolieren
keep = interp1( ...
t_vel, ...
moveFlag, ...
t, ...
'nearest', ...
0) > 0;
% Signal filtern
t = t(keep);
y = y(keep);
if isempty(y)
warning('%s in %s enthält nach Filterung keine Daten.', ...
sig, datasetNames{k});
continue
end
% Ursprüngliche Abtastzeit bestimmen
if length(t) > 1
dt = median(diff(t));
else
dt = 0;
end
% Neue lückenlose Zeitachse aufbauen
t_new = (0:length(y)-1)' * dt;
% Zurückschreiben
S.(sig).t = t_new;
S.(sig).y = y;
end
datasets{k} = S;
end
%% Gefilterte Datensätze zurückschreiben
[S0,S2,S4,S6,S8,S10] = datasets{:};
%% Vergleichsplots erzeugen
signals = fieldnames(S0);
for i = 1:length(signals)
signal = signals{i};
figure('Name',signal,'NumberTitle','off');
hold on
grid on
for k = 1:length(datasets)
S = datasets{k};
if isempty(S.(signal).y)
continue
end
plot( ...
S.(signal).t/1000, ...
S.(signal).y, ...
'LineWidth',1.5, ...
'DisplayName',datasetNames{k});
end
xlabel('Zeit [s]');
ylabel(signal,'Interpreter','none');
title(['Vergleich von ' signal], ...
'Interpreter','none');
legend('Location','best');
end