Implantation d'un filtre FIR-FX-LMS sur FPGA pour l'annulation de Bruit Acoustique : Différence entre versions

De Wiki de Projets IMA
Ligne 27 : Ligne 27 :
 
== '''Tableau de bord''' ==
 
== '''Tableau de bord''' ==
  
===Semaine 1 : du 18/01 au 24/01 ===
+
===Semaine 1 : du 11/01 au 17/01 ===
 
====Etude théorique du filtre FIR avec adaptation par l'algorithme FX-LMS====
 
====Etude théorique du filtre FIR avec adaptation par l'algorithme FX-LMS====
 
1) Le filtre FIR
 
1) Le filtre FIR
Ligne 88 : Ligne 88 :
  
 
Il va à présent nous falloir décrire ces équations dans notre FPGA.
 
Il va à présent nous falloir décrire ces équations dans notre FPGA.
 +
 +
 +
===Semaine 2 : du 18/01 au 24/01 ===
 +
====Simulation du filtre sous Matlab====
 +
 +
Pour simuler notre filtre, nous allons coder les équations de notre filtre dans Matlab en appliquant des signaux théoriques. Le code va se décomposer en deux parties : la première partie permettra de simuler notre filtre en virgule flottante, c’est-à-dire de garder une précisions maximales sur les chiffres puis la deuxième partie sera de simuler cette fois ci en virgule fixe, cela nous permet d’arrondir nos chiffres en fonction d’un nombre de bit prédéfini. La simulation en virgule fixe nous permet de simuler notre schéma électrique, cela dans le but de générer des fichiers de résultats que nous pourrons comparer avec notre code VHDL grâce à un transfert de fichier.
 +
 +
1) Simulation en virgule flotante
 +
 +
Pour simuler notre système, nous allons utiliser des signaux sinusoïdaux. Les canaux de propagation seront modéliser par des tableaux de coefficients générés aléatoirement par Matlab. Nous allons donc faire

Version du 26 janvier 2016 à 14:26

Cahier des Charges

Présentation générale du projet

Contexte

Les problèmes de bruit acoustiques sont de plus en plus présents en industrie avec de plus en plus de moteurs, de transformateurs, de compresseurs, de ventilateur, etc… La plus part du temps, on utilise des moyens passifs pour réduire le bruit, comme des murs, des enclos, des silencieux… Ces systèmes passifs sont utilisés pour leur forte atténuation de bruit sur une large gamme de fréquence. Cependant, ils sont relativement imposants, coûteux et inefficace dans les basses fréquences.


L'utilisation d'un filtre actif permet de résoudre ces problèmes. En effet, grâce au système de Contrôle Actif du bruit (Active Noise Control – ANC), on peut annuler les bruits primaires en superposant un signal inverse à ce bruit primaire. Ce signal inverse possède la même amplitude avec une opposition de phase. La conception d’un ANC est rapide et efficace, il suffit d’un micro pour recueillir le bruit primaire et d’un haut-parleur pour envoyer l’inverse de ce bruit.

Description du projet

On propose ici de réaliser un filtre actif (ANC) permettant d'annuler une source de bruit. Pour cela, nous utiliserons un filtre numérique de type FIR (Finite Impulse Response) avec une adaptation des coefficients par l'algorithme Filtered X Least Mean Square (FX-LMS). Ce filtre sera implémenté sur FPGA permettant de traiter les données en temps réel.


Objectif

Notre objectif est d'annuler un bruit primaire envoyé par un Haut-parleur grâce à un second Haut parleur : Schéma maquette.PNG

Le Haut-parleur 2 envoi un bruit primaire qui sera déformé par le tube. Le Haut-parleur 1 devra donc envoyé l'inverse du son du Haut-parleur 2 déformé. Le micro 2 permet de récupérer le bruit primaire et le micro 1 permet de récupéré le son déformé moins le son inverse, c'est à dire à notre erreur de notre filtre.

Etapes du Projet

Choix techniques : matériel, logiciels, sources

Tableau de bord

Semaine 1 : du 11/01 au 17/01

Etude théorique du filtre FIR avec adaptation par l'algorithme FX-LMS

1) Le filtre FIR

Un filtre FIR (Finite Impulse Response) est un filtre numérique qui est caractérisé par une réponse basée sur un nombre fini de valeurs du signal d’entrées. Un filtre FIR est décrit par une somme de coefficient multiplié par les valeurs d’entrées. Si 〖x[i]〗_(1≤i≤n) représente les valeurs du signal d'entrée, bk les valeurs des coefficients et 〖y[i]〗_(1≤i≤n) les valeurs du signal de sortie pour n échantillons, alors un filtre FIR se défit par la combinaison linéaire : Equation fir.PNG

2) Algorithme d'adaptation LMS (Least MeanSqare)

Nous allons utiliser un algorithme adaptatif de type LMS (Least MeanSqare). Cet algorithme est le plus utilisé dans le milieu de l’industrie en raison de sa simplicité. Cet algorithme est une approximation de l’algorithme du gradient déterministe. Le principe de cet algorithme est de trouver les coefficients optimums permettant de décrire le système à modéliser. Il commence par mettre tous les coefficients à zéro puis à chaque étape, calcule les nouveaux coefficients en fonction de l’erreur. Si l’erreur est nulle, alors les coefficients modélisent le système. Voici les équations de cet algorithme :

y(n)=w^T (n)×x(n)

e(n)=d(n)-y(n)

w(n+1)=w(n)+ μ×x(n)×e(n)

Avec :

y : signal de sortie du filtre

x : signal d’entrée du filtre

w : les coefficients du filtre

e : l’erreur récupérée

d : le signal désiré

µ : pas d’adaptation de l’algorithme

Schema adaptation lms.PNG

Cet algorithme est très efficace mais ne nous permet pas de modéliser correctement notre système

3) Algorithme d'adaptation FX-LMS

Reprenons notre système :

Schéma canaux.PNG

Sur ce schéma, on retrouve deux canaux de propagation du son. Or l'algorithme LMS ne prend en compte un seul canal de propagation. Nous allons donc utiliser l’algorithme FX-LMS. L’introduction du nouveau canal dans notre algorithme peut être traitée de plusieurs manières. Dans notre cas, nous allons procéder en deux : une estimation du canal S puis une modélisation du canal P. Cette méthode engendre une hypothèse : Le canal S est considéré comme stable et ne change jamais Du coup, on pourra modéliser le canal S avec un premier filtre FIR-LMS en mode identification de système puis on utilisera un filtre FIR-FX-LMS en mode modélisation inverse.

Schema fx-lms1.PNG

La partie verte correspond au domaine acoustique et la partie bleue correspond au domaine électronique, c’est le système que l’on va implanter dans notre FPGA. Le bloc Ŝ(z) correspond à notre canal de propagation S(z) estimé. L’ajout de ce bloc entraine donc une modification de l’équation de l’algorithme :

d(n)=X(n)×P(z)

e(n)=d(n)-S(z)×W(n)×X(n)

W(n+1)=W(n)+ μ ×e(n)×X'(n)

X'(n)= Ŝ(z)×X(n)

Il va à présent nous falloir décrire ces équations dans notre FPGA.


Semaine 2 : du 18/01 au 24/01

Simulation du filtre sous Matlab

Pour simuler notre filtre, nous allons coder les équations de notre filtre dans Matlab en appliquant des signaux théoriques. Le code va se décomposer en deux parties : la première partie permettra de simuler notre filtre en virgule flottante, c’est-à-dire de garder une précisions maximales sur les chiffres puis la deuxième partie sera de simuler cette fois ci en virgule fixe, cela nous permet d’arrondir nos chiffres en fonction d’un nombre de bit prédéfini. La simulation en virgule fixe nous permet de simuler notre schéma électrique, cela dans le but de générer des fichiers de résultats que nous pourrons comparer avec notre code VHDL grâce à un transfert de fichier.

1) Simulation en virgule flotante

Pour simuler notre système, nous allons utiliser des signaux sinusoïdaux. Les canaux de propagation seront modéliser par des tableaux de coefficients générés aléatoirement par Matlab. Nous allons donc faire