diff --git a/mysignal/phasefreq.py b/mysignal/phasefreq.py index 5132712..f07c4d4 100644 --- a/mysignal/phasefreq.py +++ b/mysignal/phasefreq.py @@ -91,7 +91,7 @@ def filter_signal_by_modes(time, signal, num_modes=1, bandwidth_factor=0.1, nyqu return filtered_signals, dominant_freqs, time_filtered -def analyze_signal_Hilbert(time, e_signal, s_signal): +def analyze_signal_Hilbert(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. Uses Hilbert transform method for phase shift calculation (single mode only). @@ -143,8 +143,8 @@ def analyze_signal_Hilbert(time, e_signal, s_signal): freq_s = s_peak_freqs[s_idx] # Check if frequencies match within 1% - if np.abs(freq_e - freq_s) / ((freq_e + freq_s)/2) > 0.01: - raise ValueError("Frequency difference exceeds 1%. Phase shift cannot be determined.") + if np.abs(freq_e - freq_s) / ((freq_e + freq_s)/2) > freq_rtol: + raise ValueError(f"Frequency difference exceeds {freq_rtol*100}%. Phase shift cannot be determined.") # Calculate mean frequency for phase shift calculation mean_freq = (freq_e + freq_s) / 2 @@ -200,7 +200,7 @@ def analyze_signal_Hilbert(time, e_signal, s_signal): return (period_e, period_s, freq_e, freq_s, mean_phase_diff, phase_diff_deg, time_shift) -def analyze_signal_sinfit(time, e_signal, s_signal): +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. Uses curve fitting method for phase shift calculation (single mode only). @@ -252,8 +252,8 @@ def analyze_signal_sinfit(time, e_signal, s_signal): freq_s = s_peak_freqs[s_idx] # Check if frequencies match within 1% - if np.abs(freq_e - freq_s) / ((freq_e + freq_s)/2) > 0.01: - raise ValueError("Frequency difference exceeds 1%. Phase shift cannot be determined.") + if np.abs(freq_e - freq_s) / ((freq_e + freq_s)/2) > freq_rtol: + raise ValueError(f"Frequency difference exceeds {freq_rtol*100}%. Phase shift cannot be determined.") # Calculate mean frequency for phase shift calculation mean_freq = (freq_e + freq_s) / 2 @@ -300,7 +300,7 @@ def analyze_signal_sinfit(time, e_signal, s_signal): -def analyze_signal_cross_correlation(time, e_signal, s_signal): +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). """ @@ -351,8 +351,8 @@ def analyze_signal_cross_correlation(time, e_signal, s_signal): freq_s = s_peak_freqs[s_idx] # Check if frequencies match within 1% - if np.abs(freq_e - freq_s) / ((freq_e + freq_s)/2) > 0.01: - raise ValueError("Frequency difference exceeds 1%. Phase shift cannot be determined.") + if np.abs(freq_e - freq_s) / ((freq_e + freq_s)/2) > freq_rtol: + raise ValueError(f"Frequency difference exceeds {freq_rtol*100}%. Phase shift cannot be determined.") # Calculate mean frequency for phase shift calculation mean_freq = (freq_e + freq_s) / 2 @@ -401,7 +401,7 @@ def analyze_signal_cross_correlation(time, e_signal, s_signal): phase_diff, phase_diff_deg, time_shift) -def analyze_signal_wavelet(time, e_signal, s_signal): +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). """ @@ -452,8 +452,8 @@ def analyze_signal_wavelet(time, e_signal, s_signal): freq_s = s_peak_freqs[s_idx] # Check if frequencies match within 1% - if np.abs(freq_e - freq_s) / ((freq_e + freq_s)/2) > 0.01: - raise ValueError("Frequency difference exceeds 1%. Phase shift cannot be determined.") + if np.abs(freq_e - freq_s) / ((freq_e + freq_s)/2) > freq_rtol: + raise ValueError(f"Frequency difference exceeds {freq_rtol*100}%. Phase shift cannot be determined.") # Calculate mean frequency for phase shift calculation mean_freq = (freq_e + freq_s) / 2