Démo filtrage adaptatif par LMS (Gradient stochastique) sous Python
HTML-код
- Опубликовано: 12 сен 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)
"""
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
Je n'y manquerai pas.
Bon courage et beaucoup de succès à venir !
merci madame, c'est à la base des codec voip et gsm
Oui, entre autres pour retrouver les trames perdues.
Merci bcp madame.
J'arrive pas à trouver le cours du filtrage adaptatif dans votre chaîne.
Je ne l'ai pas encore enregistré. Je vais le faire incessamment
@@assiakourgli Merci infiniment
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 !
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.
@@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 !
Cela me ravit 😊
merci bcp
Avec plaisir ☺️
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 🙏🙏
Les fichiers se trouvent là perso.usthb.dz/~akourgli/Signaux%20Al%c3%a9atoires%20et%20Processus%20Stochastiques/Fichiers%20pour%20TP/
Merci
Je m'excuse mais c'est quoi fecg et mecg
Bonjour
ce sont des fichiers (.mat) contenant des valeurs numériques. On peut les trouver ici perso.usthb.dz/~akourgli/TAS/TPs/