upd
This commit is contained in:
		
							parent
							
								
									5c21ab1ca9
								
							
						
					
					
						commit
						0ee877b2fa
					
				
					 2 changed files with 48 additions and 2 deletions
				
			
		| 
						 | 
				
			
			@ -1 +1 @@
 | 
			
		|||
__version__ = '0.1.7'
 | 
			
		||||
__version__ = '0.1.8'
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -3,6 +3,9 @@ import numpy as np
 | 
			
		|||
import pandas as pd
 | 
			
		||||
import pywt
 | 
			
		||||
 | 
			
		||||
import matplotlib.pyplot as plt
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
from scipy.fft import fft, fftfreq
 | 
			
		||||
from scipy.signal import find_peaks, hilbert, butter, filtfilt, correlate, sosfiltfilt
 | 
			
		||||
from scipy.stats import linregress
 | 
			
		||||
| 
						 | 
				
			
			@ -104,6 +107,30 @@ def filter_signal_by_modes(time, signal, num_modes=1, bandwidth_factor=0.1, requ
 | 
			
		|||
    return filtered_signals, dominant_freqs, time_filtered
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def plot_filtered_modes(t, e, e_filtered, e_frequencies, e_time, n_modes):
 | 
			
		||||
 | 
			
		||||
    fig, ax = plt.subplots(nrows=n_modes+1, ncols=2, figsize=(12, 4 * n_modes), gridspec_kw={'width_ratios': [3, 1]})
 | 
			
		||||
     
 | 
			
		||||
    ax[0, 0].plot(t, e)
 | 
			
		||||
    ax[0, 0].set_title('Signal original')
 | 
			
		||||
    ax[0, 0].set_xlabel('Temps (s)')
 | 
			
		||||
    ax[0, 0].set_ylabel('Amplitude')
 | 
			
		||||
    
 | 
			
		||||
    
 | 
			
		||||
    
 | 
			
		||||
    for i in range(n_modes):
 | 
			
		||||
        ax[i+1, 0].plot(e_time, e_filtered[i])
 | 
			
		||||
        ax[i+1, 0].set_title(f'Mode #{i+1} filtré ({e_frequencies[i]:.2f} Hz)')
 | 
			
		||||
        ax[i+1, 0].set_xlabel('Temps (s)')
 | 
			
		||||
        ax[i+1, 0].set_ylabel('Amplitude')
 | 
			
		||||
    
 | 
			
		||||
        ax[i+1, 1].plot(e_time, e_filtered[i])
 | 
			
		||||
        ax[i+1, 1].set_xlim(left=0.5 * e_time.mean(), right=0.5*e_time.mean() + 10/e_frequencies[i])
 | 
			
		||||
    plt.tight_layout()
 | 
			
		||||
    plt.show()
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
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.
 | 
			
		||||
| 
						 | 
				
			
			@ -545,3 +572,22 @@ def analyze_signal_wavelet(time, e_signal, s_signal, freq_rtol=0.01):
 | 
			
		|||
    
 | 
			
		||||
    return res
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def plot_phases(e_time, e_filtered, s_filtered, n_modes, callback=analyze_signal_wavelet):
 | 
			
		||||
    fig, ax = plt.subplots(nrows=n_modes, figsize=(12, 6))
 | 
			
		||||
    
 | 
			
		||||
    
 | 
			
		||||
    for mod in range(n_modes):
 | 
			
		||||
    
 | 
			
		||||
        res = callback(e_time, e_filtered[mod], s_filtered[mod], freq_rtol=0.3)
 | 
			
		||||
    
 | 
			
		||||
        ax[mod].set_title(f'Freq: {e_frequencies[mod]:.3f}, Phase: {res['phase']:.3f}, Delay: {res['delay']:.3f}' )
 | 
			
		||||
        ax[mod].plot(e_time, e_filtered[mod], label='e')
 | 
			
		||||
        ax[mod].plot(e_time, s_filtered[mod], label='s')
 | 
			
		||||
        ax[mod].set_xlim(left=20, right=230)
 | 
			
		||||
    
 | 
			
		||||
        for a in ax:
 | 
			
		||||
            a.legend()
 | 
			
		||||
    
 | 
			
		||||
    plt.tight_layout();
 | 
			
		||||
    plt.show();
 | 
			
		||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue