Démo filtrage adaptatif par LMS (Gradient stochastique) sous Python

Поделиться
HTML-код
  • Опубликовано: 26 авг 2024
  • Code Python
    -*- coding: utf-8 -*-
    """
    Created on Wed Nov 16 09:26:42 2022
    @author: Akourgli
    """
    """ LMS : Algorithme du Gradient stochastique : Restauration ‎"""
    import numpy as np
    import matplotlib.pyplot as plt
    import scipy.signal as sp
    fecg=[]; mecg=[];
    """ Lecture des fihiers """
    with open('fecg.txt') as f:
    for i in f: fecg.append(float(i))
    fecg = np.array(fecg)
    with open('mecg.txt') as f:
    for i in f : mecg.append(float(i))
    mecg = np.array(mecg)
    """ Rajout du bruit """
    N=len(mecg); var = 0.01;
    bb=(var**0.5)*np.random.randn(N);
    x=fecg+bb+mecg; #x=x-np.mean(x)
    y=fecg; #y=y-np.mean(y)
    """ Détermination du filtre par LMS """
    Ncoef=7; mu=0.1;
    h = np.zeros(Ncoef) # Initialisation des coeffcients du filtre
    L = len(x) # Longueur du signal
    yest = np.zeros(N) # y(n) estimé
    En = np.zeros(N) # Erreur
    for i in range(Ncoef,L//10):
    X= np.flipud(x[i-Ncoef+1:i+1]); #Prendre X=[x(n),x(n-1),...,x(n-Ncoef+1)))]
    yest[i] = np.dot(h, X)
    En[i] = x[i] - yest[i]
    h = h + mu * En[i] * X
    h = h/sum(abs(h))
    """ Visualisation des résulats"""
    plt.figure(1)
    y_est =sp.lfilter(h,1,x)
    plt.subplot(311); plt.plot(x,'r', label= 'observation'); plt.plot(y,'b', label= 'fecg');plt.grid(); plt.legend()
    plt.subplot(313);plt.plot(En,'g',label='erreur'); plt.grid(); plt.legend()
    plt.subplot(312); plt.plot(y,'b', label= 'fecg'); plt.plot(y_est,'r', label= 'ecg restauré'); plt.legend()
    """---------------------------------------------------------------------"""
    """ Prédiction par LMS """
    mux=0; varx=0.01; N=1000
    bb=mux+np.sqrt(varx)*np.random.randn(N)
    fe=10000 ;Te=1/fe;
    f0= 100;
    t = np.arange(0,N)*Te
    y = 0.5*np.cos(2*np.pi*f0*t)
    x = y + bb
    Ncoef=5; mu=0.2;
    hp = np.zeros(Ncoef) # Initialisation des coeffcients du filtre
    L = len(x) # Longueur du signal
    yest = np.zeros(N) # y(n) estimé
    En = np.zeros(N) # Erreur
    for i in range(Ncoef,L-1):
    X= np.flipud(x[i-Ncoef+1:i+1]); #Prendre X=[x(n),x(n-1),...,x(n-Ncoef+1)))]
    yest[i] = np.dot(hp, X)
    En[i] = x[i] - yest[i]
    hp = hp + mu * En[i] * X
    plt.figure(2); plt.plot(x,'b', label= 'observation'); plt.plot(yest,'r', label= 'estimé')
    plt.plot(En,'g', label= 'Erreur instantanée'); plt.grid(); plt.legend()
    """---------------------------------------------------------------------"""
    """ Identification de système par LMS """
    mux=0; varx=0.1; N=500
    x = mux+np.sqrt(varx)*np.random.randn(N)
    b = np.array([0.65, -0.35, 0.1])
    y = sp.lfilter(b,[1,0],x)
    Ncoef=3; mu=0.6;
    hs = np.zeros(Ncoef) # Initialisation des coeffcients du filtre
    yest = np.zeros(N) # y(n) estimé
    En = np.zeros(N) # Erreur
    for i in range(Ncoef,N-1):
    X= np.flipud(x[i-Ncoef+1:i+1]); #Prendre X=[x(n),x(n-1),...,x(n-Ncoef+1)))]
    yest[i] = np.dot(hs, X)
    En[i] = y[i] - yest[i]
    hs = hs + mu * En[i] * X
    print(hs)
    plt.figure(3); plt.plot(y,'b', label= 'Sortie'); plt.plot(yest,'r', label= 'Sortie estimée')
    plt.plot(En,'g', label= 'Erreur instantanée'); plt.grid(); plt.legend()
    """A faire AR """
    import numpy as np; import scipy.signal as sp; import matplotlib.pyplot as plt
    import sounddevice as snd
    import scipy.io.wavfile as wav
    import scipy.linalg as la;
    def ModeleAR(y,P):
    y=y-np.mean(y)
    R = np.correlate(y,y,mode='full')[len(y)-1:]
    C = la.toeplitz(R[0:P])
    B = -R[1:P+1]
    a = la.inv(C).dot(B)
    a = np.append(1,a)
    sigma_carre = sum(a*R[0:P+1]);
    return a,sigma_carre
    fe,x = wav.read('voyelles.wav')
    snd.play(x, fe)
    1. Lire, afficher et écouter le fichier voyelles.wav
    2. Repérer les 3 parties correspondants aux 3 "A"
    NA=7000
    A1 = x[162400:162400+NA];
    A2 = x[253200:253200+NA]
    A3 = x[340000:340000+NA]
    3. Afficher les 3 "A"
    4. Calculer et afficher leur periodogramme en db
    5. Déterminer le filtre formeur de chaque "A" en utilisant la foncton ModeleAR
    6. Calculer l'erreur quadratique moyenne (MSE) entre les coefficents de chaque A
    from sklearn.metrics import mean_squared_error
    mseA12=mean_squared_error(a1,a2)
    7. Refaire les étape de 2 à 6 pour la lettre "E"
    8. Calculer le MSE entre les 3 "A" et les 3 "E"
    """A faire Restauration par LMS """
    """
    1. Lire l'audio vousavezducourrierenattente.wav dabns une variable y
    2. Créer un signal x composé du signal audio (y) + du bruit blanc
    3. Ecouter pour vérifier la présence du bruit
    4. Centrer les variables y et x
    5. Déterminer par LMS le filtre h en prenant la partie correspondant au silence (mu=0.01 et for i in range(Ncoef,100) )
    6. Inverser et normaliser le filtre h
    7. Filtrer x par le filre
    8. Visualiser les résultats
    9. Ecouter l'audio restauré
    ss=input()
    snd.play(np.int8(y_est), fe)
    """

Комментарии • 18

  • @faridbouachi3177
    @faridbouachi3177 Год назад +1

    Bonjour madame Assia
    merci pour toutes les vidéos que vous mettez en ligne
    Je suis diplômé de l'usthb j'ai finis mes études en 2019 et maintenant je fais mon équivalence en France
    Sachez que votre chaine m'aide beaucoup dans mes études
    Allah ihafdek pour tout le travail que vous faites et passer le bonjour à madame Chelali, madame Ouarezdine, Monsieur Smara, Monsieur Hamidia , Monsieur Farah, Madame Nemmour, Monsieur Mazighi et tous les autres j'ai gardé que de bons souvenirs là-bas allah yafedkoum

    • @assiakourgli
      @assiakourgli  Год назад

      Je n'y manquerai pas.
      Bon courage et beaucoup de succès à venir !

  • @science.20246
    @science.20246 Год назад +1

    merci madame, c'est à la base des codec voip et gsm

    • @assiakourgli
      @assiakourgli  Год назад

      Oui, entre autres pour retrouver les trames perdues.

  • @user-bz7ok9te2n
    @user-bz7ok9te2n Год назад

    Merci bcp madame.
    J'arrive pas à trouver le cours du filtrage adaptatif dans votre chaîne.

    • @assiakourgli
      @assiakourgli  Год назад +1

      Je ne l'ai pas encore enregistré. Je vais le faire incessamment

    • @user-bz7ok9te2n
      @user-bz7ok9te2n Год назад

      @@assiakourgli Merci infiniment

  • @mahdinafa7579
    @mahdinafa7579 Год назад

    merci bcp

  • @CodeurPro-xe4lk
    @CodeurPro-xe4lk Год назад

    Bonjour vos cours sont parfaitement bien expliquer, je n'ai jamais aussi bien compris un cours de ma vie.
    Je voudrais savoir si par hasard ce serait possible d'avoir la correction de votre TD ondelette + Multi-Cadence ?
    Et aussi si c'est possible d'avoir le sujet-corrigé de votre examen 2022-2021!
    Merci pour votre travail !

    • @assiakourgli
      @assiakourgli  Год назад

      Merci bien
      Pour les exos ondelettes et multi cadences, vous les trouverez dans les playlists : ondelettes et Filtrage Multicadences.
      Pour l'examen, j'en ferais une vidéo si le temps le permet. Le corrigé sera mis sur la page perso sinon.

    • @CodeurPro-xe4lk
      @CodeurPro-xe4lk Год назад

      @@assiakourgli Merci infiniment pour ce que vous faite, vous savez que j'avais énormement besoin de mieux comprendre ce cours, grâce a vos cours je suis beaucoup mieux a l'aise avec les notions de multi cadence ainsi que les ondelettes !

    • @assiakourgli
      @assiakourgli  Год назад

      Cela me ravit 😊

  • @saranour2021
    @saranour2021 Год назад

    Salut madame Assia je suis une élève de classe préparatoire et j'essaye d'exécution le code de cette algorithme mais j'ai pas connu les variables d'entrée
    Vous pouvez m'aider puisque c'est urgent pour moi 🙏🙏

    • @assiakourgli
      @assiakourgli  Год назад +1

      Les fichiers se trouvent là perso.usthb.dz/~akourgli/Signaux%20Al%c3%a9atoires%20et%20Processus%20Stochastiques/Fichiers%20pour%20TP/

    • @saranour2021
      @saranour2021 Год назад

      Merci

    • @saranour2021
      @saranour2021 Год назад

      Je m'excuse mais c'est quoi fecg et mecg

    • @assiakourgli
      @assiakourgli  Год назад

      Bonjour
      ce sont des fichiers (.mat) contenant des valeurs numériques. On peut les trouver ici perso.usthb.dz/~akourgli/TAS/TPs/