function [t_red, I_red, U_red] = func2_preprocessData(t, I, U, f)
% Funktion zur Vorverarbeitung experimenteller Messdaten
% - Offset-Kompensation von Strom und Spannung
% - Auswahl der letzten vollständigen Periode
% - Downsampling zur Reduktion der Datenmenge
%
% Eingabe:
%   t: Zeitachse [s]
%   I: Magnetisierungsstrom [A]
%   U: PUC-Spannung [V]
%   f: Anregungsfrequenz [Hz]
%
% Ausgabe:
%   t_red: reduzierte Zeitachse (letzter Zyklus, downsampled)
%   I_red: verarbeiteter Stromsignalverlauf
%   U_red: verarbeiteter Spannungssignalverlauf

    % === Offset-Kompensation ===
    I = I - mean(I);
    U = U - mean(U);

    % === Zeitfenster des letzten vollständigen Zyklus bestimmen ===
    T = 1 / f;                 % Periodendauer [s]
    t_end = t(end);            % Ende des Messzeitraums
    t_start = t_end - T;       % Start des letzten Zyklus

    idx = (t >= t_start) & (t <= t_end);  % Indexvektor für den letzten Zyklus
    t_cut = t(idx);
    I_cut = I(idx);
    U_cut = U(idx);

    % === Downsampling ===
    N_target = 1000;
    factor = floor(length(t_cut) / N_target);
    if factor < 1
        factor = 1;  % falls schon weniger als 1000 Punkte vorhanden
    end

    t_red = t_cut(1:factor:end);
    I_red = I_cut(1:factor:end);
    U_red = U_cut(1:factor:end);
end
