## Pre-script

    #Script de génération d'un signal EMG bruitée

import numpy as np
from matplotlib import pyplot as plt #ou import matplotlib.pyplot as plt

# Pour fermer toutes les anciennes figures au lancement du script
plt.close('all')

##
def generer_signal_EMG(taille, amplitude_signal, bruit, fs):
    """
    Génère un signal EMG bruité avec deux contractions musculaires.

    Paramètres :
    - taille : int, taille du signal
    - amplitude_signal : float, amplitude du signal EMG
    - bruit : float, amplitude du bruit
    - fs : float, fréquence d'échantillonnage

    Retourne :
    - signal : ndarray (array numpy), signal EMG bruité avec contractions musculaires
    - temps : ndarray (array numpy), échantillons de temps correspondant au signal
    """
    temps = np.arange(0, taille) / fs # création de l'échelle du temps
    signal = np.random.randn(taille) * bruit + amplitude_signal # création du bruit

    # Ajout des contractions musculaires périodiques sous forme d'échelons
    periode_contractions = 1.5  # Période de contraction en seconde
    duree_contractions = 2.0  # Durée des contractions en seconde
    duree_echelon = int(duree_contractions * fs)
    debut_contractions = np.random.choice(np.arange(len(signal) - duree_echelon), size=2, replace=False)
    for debut in debut_contractions:
        signal[debut:debut + duree_echelon] += amplitude_signal/3

    return signal, temps

# Paramètres du signal EMG et du bruit
taille_signal = 2000
amplitude_signal_EMG = 5
bruit = 2
fs = 100  # Fréquence d'échantillonnage en Hz

# Génération du signal EMG bruité
signal_EMG, temps = generer_signal_EMG(taille_signal, amplitude_signal_EMG, bruit, fs)

# Enregistrement du signal EMG dans un fichier .npy
np.save('signal_EMG.npy', signal_EMG)
# Enregistrement du temps dans un fichier .npy
np.save('temps.npy', temps)

# Tracé du signal EMG
plt.figure(figsize=(10, 7)) #contraint la taille de la figure (consistance)
plt.plot(temps, signal_EMG)
plt.xlabel('Temps (s)')
plt.ylabel('Amplitude')
plt.title('Signal EMG bruité avec contractions musculaires')
plt.grid(True)
plt.show()
