diff --git a/mysignal/__init__.py b/mysignal/__init__.py index 692b2b8..13b519b 100644 --- a/mysignal/__init__.py +++ b/mysignal/__init__.py @@ -1 +1 @@ -__version__ = '0.1.27' +__version__ = '0.1.28' diff --git a/mysignal/phasefreq.py b/mysignal/phasefreq.py index c4cd9c9..fd7f2d8 100644 --- a/mysignal/phasefreq.py +++ b/mysignal/phasefreq.py @@ -4,7 +4,7 @@ import pandas as pd import pywt import matplotlib.pyplot as plt - +from joblib import Parallel, delayed from scipy.fft import fft, fftfreq from scipy.signal import find_peaks, hilbert, butter, filtfilt, correlate, sosfiltfilt @@ -578,20 +578,38 @@ def analyze_signal_wavelet(time, e_signal, s_signal, freq_rtol=0.01): return res -def get_phases(e_time, e_filtered, e_frequencies, s_filtered, n_modes, callback=analyze_signal_wavelet): +def get_phases(e_time, e_filtered, s_filtered, n_modes, callback=analyze_signal_wavelet, n_jobs=-2): """ """ - res = [] - for mod in range(n_modes): + def process_mode(mod, callback, e_time, e_filtered, s_filtered): + """Fonction à exécuter en parallèle pour chaque mode""" output = callback(e_time, e_filtered[mod], s_filtered[mod], freq_rtol=0.3) - res.append({ - 'mode': mod, - 'freq': output['freq_e'], - 'phase': output['phase'], - 'delay': output['delay'] - }) - return pd.DataFrame(res) + return { + 'mode': mod, + 'freq': output['freq_e'], + 'phase': output['phase'], + 'delay': output['delay'] + } + + results = Parallel(n_jobs=n_jobs)( + delayed(process_mode)(mod, callback, e_time, e_filtered, s_filtered) + for mod in range(n_modes) + ) + + return pd.DataFrame(results) + +# res = [] +# +# for mod in range(n_modes): +# output = callback(e_time, e_filtered[mod], s_filtered[mod], freq_rtol=0.3) +# res.append({ +# 'mode': mod, +# 'freq': output['freq_e'], +# 'phase': output['phase'], +# 'delay': output['delay'] +# }) +# return pd.DataFrame(res) def plot_phases(e_time, e_filtered, e_frequencies, s_filtered, n_modes, df, output=None): @@ -601,8 +619,6 @@ def plot_phases(e_time, e_filtered, e_frequencies, s_filtered, n_modes, df, outp fig, ax = plt.subplots(nrows=n_modes, ncols=2, figsize=(12, 2 * n_modes), gridspec_kw={'width_ratios': [3, 1]}) for mod in range(n_modes): - res = callback(e_time, e_filtered[mod], s_filtered[mod], freq_rtol=0.3) - freq = df[df['mode'] == mod].get('freq') phase = df[df['mode'] == mod].get('phase') delay = df[df['mode'] == mod].get('delay')