diff --git a/mysignal/__init__.py b/mysignal/__init__.py index a96d65a..641e1a8 100644 --- a/mysignal/__init__.py +++ b/mysignal/__init__.py @@ -1 +1 @@ -__version__ = '0.1.25' +__version__ = '0.1.26' diff --git a/mysignal/phasefreq.py b/mysignal/phasefreq.py index 0a6943a..238fc2b 100644 --- a/mysignal/phasefreq.py +++ b/mysignal/phasefreq.py @@ -254,6 +254,7 @@ def analyze_signal_Hilbert(time, e_signal, s_signal, freq_rtol=0.01): return res + def analyze_signal_sinfit(time, e_signal, s_signal, freq_rtol=0.01): """ Analyzes the dominant frequencies, phase shift, time shift, and periods between two signals e_signal(t) and s_signal(t) from a DataFrame. @@ -360,7 +361,6 @@ def analyze_signal_sinfit(time, e_signal, s_signal, freq_rtol=0.01): return res - def analyze_signal_cross_correlation(time, e_signal, s_signal, freq_rtol=0.01): """ Analyzes signals using cross-correlation method for phase shift calculation (single mode only). @@ -468,7 +468,6 @@ def analyze_signal_cross_correlation(time, e_signal, s_signal, freq_rtol=0.01): return res - def analyze_signal_wavelet(time, e_signal, s_signal, freq_rtol=0.01): """ Analyzes signals using wavelet transform for phase shift calculation (single mode only). @@ -579,13 +578,29 @@ def analyze_signal_wavelet(time, e_signal, s_signal, freq_rtol=0.01): return res -def plot_phases(e_time, e_filtered, e_frequencies, s_filtered, n_modes, callback=analyze_signal_wavelet, output=None): +def get_phases(e_time, e_filtered, e_frequencies, s_filtered, n_modes, callback=analyze_signal_wavelet): + """ + """ + 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, callback=analyze_signal_wavelet, output=None): + """ + """ 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) ax[mod, 0].set_title(f'Freq: {res['freq_e']:.3f}, Phase: {res['phase']:.3f}, Delay: {res['delay']:.3f}' )