%% 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