Vous êtes sur la page 1sur 33

Université de La Rochelle 28/01/05

Master 1. Département informatique. Université de La Rochelle

Travaux pratiques de traitement du signal avancé


Durée prévue 4h30.

Filtrage adaptatif

Les méthodes adaptatives en traitement du signal visent la réalisation des opérations d'optimisation
statistique (filtrage optimal, prédiction linéaire, modélisation des signaux) par traitement en ligne des
données. Elles cherchent à optimiser les paramètres caractéristiques des traitements. Elles constituent
actuellement l'un des grands thèmes de la discipline du traitement du signal. Leur succès est dû à la
philosophie qui les sous-tend, qui est de s'appuyer sur le caractère séquentiel de l'acquisition du signal pour
effectuer l'acquisition de manière récursive. L'avantage principal de l'adaptatif est la simplicité des calculs :
quelques incrémentations successives suffisent pour fournir l'optimum.
L'objectif de ce TP est d'aider à comprendre à quoi servent les algorithmes adaptatifs et d'illustrer sur des
applications concrètes leurs intérêts.
Nous nous proposons donc:
– d'exposer les principes de base et les deux principales méthodes qui sous-tendent la multiplicité des
approches que l'on trouve dans la littérature spécialisée; quelques idées simples doivent servir de guide
pour adapter ces méthodes à un besoin spécifique;
– de donner un accès rapide et direct aux algorithmes, leur compréhension par leur utilisation sur un panel
d'applications concrètes.

Michel Ménard

Département Informatique. Master 1. Page 1/33


Université de La Rochelle 28/01/05

Table des matières


1- Le filtrage adaptatif.......................................................................................................................... 4
a- Introduction..................................................................................................................................4
b- Aspect théorique, mise en équation.............................................................................................5
c- Algorithme du gradient, critère LMS...........................................................................................7
d- Algorithme des moindres carrés récursifs, critère des moindres carrés exacts........................... 8
2- Un premier cas d'école: élimination d'une interférence..................................................................10
3- Deuxième cas d'école : extraction d'un signal noyé dans le bruit.................................................. 13
4- Application 1. Téléphone mains libres...........................................................................................16
5- Application 2. Elimination du bruit dans une conduite..................................................................19
6- Application 3. Elimination de l'écho sur une ligne de transmission.............................................. 25
7- Exemple de filtre adaptatif RLS.....................................................................................................31

Bruit moteur
k
p

+
y
x

Département Informatique. Master 1. Page 2/33


Université de La Rochelle 28/01/05

Durée prévue 4,5h.

L'objectif de ce TP est de découvrir et d'étudier des méthodes de traitements de signaux bruités. Nous
étudierons plus particulièrement le cadre du filtrage adaptatif avec notamment les algorithmes LMS et RLS.
Après une description théorique de ces deux algorithmes représentatifs du filtrage adaptatif, nous
aborderons l'étude de deux cas d'écoles et de 3 applications :

– élimination d'une interférence;


mise en place de l'algorithme LMS et réalisation d'un filtre adaptatif. Vous vous appuyerez sur un
programme existant. Seule la partie filtrage est à programmer.

– extraction d'un signal noyé dans du bruit;


il s'agit d'étudier ici la capacité de l'algorithme LMS à s'adapter rapidement à la variation de fréquence
du signal à extraire. Vous adapterez le programme précédent à ce contexte applicatif. Vous comparerez
à la fin du TP le comportement des algorithmes LMS et RLS.

– téléphone mains libres;


en s'appuyant sur les deux cas d'école précédents, vous devrez formaliser vous même le problème et le
programmer.

– élimination du bruit dans une conduite;


la programmation se fera sur simulink et par l'appel de S-fonctions. Celles-ci permettent une
programmation plus souple et sont parfaitement adaptées aux filtres LMS.

– élimination de l'écho sur une ligne de transmission;


même si le contexte semble différent, vous vous apercevrez que le portage du filtrage adaptatif d'une
application à une autre est facile.Vous formaliserez vous même la résolution du problème.

Les algorithmes adaptatifs vous seront utiles par la suite dans le TP de comunication numérique, notamment
pour égaliser un canal binaire symétrique.

Département Informatique. Master 1. Page 3/33


Université de La Rochelle 28/01/05

1- Le filtrage adaptatif.

a- Introduction.
Le filtrage adaptatif représente aujourd'hui une part importante du traitement des signaux aléatoires.
L'évolution des processeurs de traitement du signal « DSP » a rendu leur réalisation aisée, et leur permet
d'agir sur des signaux rapides, à large spectre.

^y(k) e(k)
x(k) Filtre Algorithme de
numérique - mise à jour des
+
coefficients
y(k)

Figure 1

Une de leur application phare consiste en l'élimination d'un bruit dont les caractéristiques évoluent dans le
temps, ce qui n'est pas envisageable avec les structures non adaptatives; c'est à dire pour lesquelles les
coefficients sont figés. Cependant on les rencontre également dans les applications de prédiction de signal
ou d'identification de processus.
Le principe est simple :
Le signal d'erreur (voir figure 1) e(k) est utilisé avec l'entrée x(k) pour mettre à jour les coefficients du filtre.
Autrement dit, le signal x(k) d'entrée du filtre numérique « va servir à produire » une estimé de y(k). Les
coefficients du filtre numériques sont calculés et adaptés pour obtenir une erreur entre y(k) et son estimée la
plus faible possible. L'erreur va donc servir à ajuster ces coefficients.
Les différents types de filtres adaptatifs peuvent être classés selon:
1. l'algorithme utilisé pour le calcul des coefficients,
2. le critère retenu pour l'optimisation,
3. la structure utilisée pour concevoir le filtre numérique.

Bien souvent le critère d'opimisation et l'algorithme sont liés. Les critères et algorithmes les plus
fréquemment rencontrés sont:
– le critère des moindres carrés moyens (LMS) utilisant l'algorithme du gradient,
– le critère de moindre valeur absolue utilisant l'algorithme du signe,
– le critère des moindres carrés exacts utilisant les algorithmes récursifs (RLS).

L'algorithme le plus simple à mettre en oeuvre est sans doute l'algorithme du gradient.

Département Informatique. Master 1. Page 4/33


Université de La Rochelle 28/01/05

b- Aspect théorique, mise en équation.


Notons h(k) le vecteur des n coefficients de la réponse impulsionnelle du filtre numérique.

h(k )  [h0 (k ) h1 (k )  hn 1 (k )]t

x(k) le vecteur des n échantillons du signal d'entrée,


x(k )  [ x(k) x(k  1)  x(k  n  1)]t

et e(k) le signal d'erreur,

e(k )  y (k )  yˆ (k )
e( k )  y ( k )  h t ( k ) x ( k )

L'optimisation consiste à minimiser un critère de coût J(k), choisi comme étant la somme des carrés de
l'erreur (Mean Square Error).
MSE  E[ek2 ]  E[( y k  yˆ k ) 2 ]
 E[ y k2  yˆ k2  2 y k yˆ k ]
 C yy (0)  E[ yˆ k2 ]  2 E[ yk yˆ k ]
n 1
Critère qui peut s'écrire également si l'on fait intervenir yˆ k  h t (k ) x ( k )   hi xk i ; 0k 
i 0

et si on fait apparaître les coefficients de corrélation : E[ x(t ) x(t   )]  C xx ( )


n 1 n 1 n 1
MSE  C yy (0)  E[ hi h j xk i xk  j ]  2 E[ yk  hi xk i ]
i 0 j 0 i 0
n 1 n 1 n 1
MSE  C yy (0)   hi h j C xx (i  j )  2 hi C xy (i )]
i 0 j  0 i 0

On recherche alors le vecteur des coefficients h(k) qui minimise J(k), ce qui revient à annuler la dérivée de J
(k) par rapport au vecteur h(k), soit dJ(k)/dh(k)=0.

n 1 n 1 n 1
MSE  C yy (0)   hi h j C xx (i  j )  2 hi C xy (i )]
i  0 j 0 i 0
n 1 n 1 n 1
MSE  C yy (0)   hi h j C xx (i  j )  2 hi C xy (i )]
i  0 j 0 i 0

MSE n 1
 2 C xx (i  k )hi  2C xy (k ); k  0,1,..., n  1
hk i 0

MSE n 1
 0  2 C xx (i  k ) hi  2C xy (k ); k  0,1,..., n  1
hk i 0

Département Informatique. Master 1. Page 5/33


Université de La Rochelle 28/01/05

Soit sous forme matricielle (on peut ainsi obtenir les coefficients du filtre, hopt):
 xx (k ) h t opt (k )  C xy (k )  0
h t opt (k )   xx1 (k )C xy (k )

Le système à résoudre est donc le suivant :

 C xx (0) C xx (1) C xx (2)  C xx (n  1)   h0   C xy (0) 


 C (1)  
 xx C xx (0) C xx (1)  C xx (n  2)  h1   C xy (1) 
 C xx (2) C xx (1) C xx (0)  C xx (n  3) . h2    C xy (2) 
    
         
 C xx (n  1) C xx (n  2) C xx (n  3)  C xx (0)  hn 1  C xy (n  1)

Cette expression fait apparaître les matrices d'autocorrélation Cxx(k) du signal d'entrée et d'intercorrélation,
Cyx(k), entre le signal d'entrée et le signal de référence. Ces matrices sont de dimensions (n,n).
L'écriture matricielle du vecteur optimum des coefficients est ainsi:

t
hopt   xx1C xy

On recherche une écriture récursive des coefficients permettant d'obtenir le vecteur h(k) à partir du vecteur
obtenu une période d'échantillonnage plus tôt h(k-1).
On obtient l'algorithme LMS en recherchant une écriture récursive des coefficients permettant d'obtenir le
vecteur h(k) à partir du vecteur obtenue une période d'échantillonnage plutôt h(k-1).

e( k )  y ( k )  h t (k  1) x ( k )

 h( k )  h( k  1)  dx( k )e(k )

Où d représente le pas scalaire d'adaptation. e(k) est l'erreur a priori car calculée avec les coefficients de
l'instant d'échantillonnage précédent.
Il ne s'agit plus alors du critère des moindres carrés exacts, mais du critère des moindres carrés moyens.

Département Informatique. Master 1. Page 6/33


Université de La Rochelle 28/01/05

c- Algorithme du gradient, critère LMS.


L'algorithme du gradient se réduit aux équations suivantes :
e(k )  y (k )  h t (k  1) x (k )

 h( k )  h(k  1)  dx(k )e(k )

Choix du scalaire d'adaptation.


On peut montrer que la condition de stabilité sur le scalaire d'adaptation est

2
0d 
n x2
Le choix effectif de d résulte ensuite d'un compromis entre la rapidité d'adaptation, d'autant meilleure que d
est élevé, et la puissance de l'errreur résiduelle également proportionnelle à d.

Choix du scalaire d'adaptation.


On admettra, pour constante de temps la plus faible, donc apportant la convergence la plus rapide du filtre,
l'expression :
 min  nTe
avec:
• n : nombre de coefficients du filtre,
• Te : période d'échantillonnage.

Remarque
Le nom d'algorithme du gradient, associé à ce critère, provient du fait que le gradient du carré de l'erreur est
proportionnel au terme x(k)e(k) :

e 2 (k )
 2 x t e(k )
h(k  1)

Département Informatique. Master 1. Page 7/33


Université de La Rochelle 28/01/05

d- Algorithme des moindres carrés récursifs, critère des moindres


carrés exacts.

La différence essentielle que présente cet algorithme vis à vis de l'algorithme LMS vient du fait qu'il utilise
l'information contenue dans les précédents échantillons du signal d'entrée. Le résultat est une diminution du
temps de convergence par rapport à un filtre adaptatif LMS de même ordre. Par contre, cette amélioration
s'obtient au prix d'une complexité et d'un temps de calcul nettement augmentés.
Nous ne démontrerons pas les résultats suivants (se reporter aux livres de F.Michaut – Méthodes adaptatives
pour le signal, et à celui de M.Mokhtari – Contrôle de processus –). L'objectif de la démonstration est de
mettre à jour la matrice de covariance Cxx-1par récurrence.
L'algorithme récursif des moindres carrés exacts se résume aux équations suivantes:

 ˆ xx1 ( k  1) x ( k )
 g ( k ) 
1  x t (k ) ˆ xx1 ( k  1) x ( k )

 ˆ 1
  xx  ˆ xx ( k  1)  g ( k ) x ( k )  ˆ 1 ( k  1)
1 t
xx

 h ( k )  h ( k  1)  g ( k )[ y ( k )  h ( k  1) x ( k )]
t

 e ( k )  y ( k )  k t ( k  1) x ( k )

Mise en oeuvre
Pour cela, il est nécessaire d'initialiser la matrice xx-1=kI, où I est la matrice identité (n,n) et k un coefficient
assez élevé pour assurer une convergence rapide de l'algorithme.
Si l'on ne dispose pas d'informations a priori sur les coefficients du filtre, ce qui est généralement le cas,
alors h(k)=0. Il suffit ensuite de calculer pour chaque période d'échantillonnage:

Gain d’adaptation

 ˆ 1 ( k  1) x ( k )
 g (k ) 
xx
Matrice d ’autocorrélarion ˆ 1 ( k  1) x ( k )
 1  x ( k )
t
xx
 ˆ 1 ˆ 1 ˆ 1 ( k  1)
 xx   xx ( k  1)  g ( k ) x ( k ) 
t
xx

 h ( k )  h ( k  1)  g ( k )[ y ( k )  h ( k  1) x ( k )]
t
Vecteur des
coefficients e ( k )  y ( k )  k t ( k  1) x ( k )

Erreur a priori

Département Informatique. Master 1. Page 8/33


Université de La Rochelle 28/01/05

Remarques
l'algorithme précédent s'adapte aux signaux stationnaires. Le gain d'adaptation est décroissant et prend
rapidement une faible valeur qui ne permet plus au filtre de s'adapter efficacement aux variations statistiques
du signal d'entrée.
D'autres méthodes sont envisageables quant à l'évolution du gain d'adaptation, afin de satisfaire une
adaptation correcte pour des signaux plus ou moins fortement non stationnaires, elles consistent à faire
intervenir un facteur supplémentaire l appelé facteur d'oubli. Ce coefficient est ainsi appelé car il permet
d'influencer la « mémoire » de l'algorithme. Il pourra être choisi de façon à suivre les variations statistiques
de l'entrée dans le cas non stationnaire : 0<l 1.
L'algorithme récursif des moindres carrés est alors modifié de la façon suivante, qui consiste à calculer pour
chaque période d'échantillonnage:

C xx1 (k )  l1Clxx1: (facteur 1


k  1) dl’oubli )C xx1 (k  1)
x t (kl1.
g (k )(0<
Gain d’adaptation Adaptation correcte pour les signaux plus ou moins fortement
non stationnaire.

 l1 ˆ 1 (k  1) x( k )
 g (k ) 
xx
Matrice d ’autocorrélarion 1 t ˆ xx1 (k  1) x(k )
 1  l x ( k )
 ˆ 1 ˆ xx1 (k  1)  l1 g (k ) x t (k )
ˆ xx1 ( k  1)
 xx  l1

e(k )  y (k )  k ( k  1) x( k )
t
Vecteur des
coefficients h(k )  h(k  1)  g (k )e(k )

Erreur a priori

Choix du facteur d'oubli.


Choix courant Critère minimisé
Facteur d'oubli fixe n 1
l (k )  0.9 à 0.99 l (k )   ln i e(i )
2
l (k )  l  cte
i 0

Facteur d'oubli variable


n 1
l (k )   l (i ) n i e(i )
2
l (k )  Kl (k  1)  1  K K  0.9 à 0.99, l (1)  0.9 à 0.99
i 0

Cas fixe : la coefficient produit une pondération décroissante avec l'ancienneté des échantillons. Ce choix
convient aux variations lentes des caractéristiques du signal d'entrée.
Cas variable : l(k) tend vers 1 pour k élevé, ce qui correspond à une pondération apportée uniquement sur
les échantillons récents. Ce choix convient aux signaux stationnaires et produit une accélération de la
convergence en évitant une décroissance top rapide du gain d'adaptation.

Département Informatique. Master 1. Page 9/33


Université de La Rochelle 28/01/05

2- Un premier cas d'école: élimination d'une interférence.


Soit un signal informatif s(k), bruité par une interférence bo(k) faiblement corrélée avec le signal informatif.
On dispose d'un signal de référence xr(k) fortement corrélé avec bo(k).

x (k )  s(k )  bo cos( 0 k   0 )
bo (k )  b0 cos( 0 k   0 )
x r (k )  b cos( 0 k  )

Le signal xr(k) est utilisé pour produire une image de l'interférence bo, afin de la soustraire à x(k) et obtenir
ainsi s(k). Le rapport signal sur bruit ainsi produit s'en trouve notablement amélioré.

Le filtre adaptatif se comporte comme un filtre réjecteur de fréquence centrale 0


2

x(k) + e(k)
-

y(k)
xr(k)
Filtre adaptatif

L'algorithme de calcul du filtre s'exprime par les équations suivantes:


• Sortie du filtre adaptatif (n coefficients âi. Ce sont les coefficients à déterminer):
n 1
y (k )   aˆ i (k ) x r (k  i )
i 0
• Calcul de l'erreur entre le signal observé (information + bruit)

e( k )  x ( k )  y ( k )

• Mise à jour des n coefficients du filtre adapatif à partir de l'erreur et du signal de référence:

aˆ i (k  1)  aˆ i (k )  dx r (k  i )e(k ) i  [0, n  1]

TRAVAIL A REALISER.
1. Compléter le programme ci-dessous d'élimination d'une interférence; vous devez programmer les
signaux et réaliser la boucle des itérations de calcul du filtre.
2. Relever sur les graphiques le nombre d'itérations nécessaire à l'établissement du régime permanent, ainsi
que le nombre d'échantillons. Faites évoluer le coefficient d'adpatation d.
3. Observer que le filtre rejecteur présente une atténuation maximale de 30 dB ente 60 et 70 rd/s.
4. Faites évoluer les différents paramètres du programme et des signaux. Etudier les autres points
importants du programme : nombre d'itération par période, période d'échantillonnage, fréquence de
l'interférence...

Département Informatique. Master 1. Page 10/33


Université de La Rochelle 28/01/05

Exemples de résultats.

Département Informatique. Master 1. Page 11/33


Université de La Rochelle 28/01/05

% Annulation d'une interférence title('Signal d''entrée x(k) en V')


xlabel('Echantillons');
N=2000; % Nombre d'itérations
n=100; % Ordre du filtre adaptatif figure(2)
k=20; % Nombre de périodes de l'interférence plot(1:N,xr(1:N),'r'), grid
delta=0.005 % Facteur d'adaptation axis([0 2000 -1.2 1.2]);
title('Signal de référence xr(k) en V')
GENERATION DES SIGNAUX. A FAIRE xlabel('Echantillons');
s=0.5*randn(1,N);
figure(3)
plot(1:N-1,y(1:N-1)), grid
% Génération des signaux title('Signal de sortie du filtre y(k) en V')
for i=1:N, xlabel('Echantillons');
b(i)=0.5*sin(pi/3+k*2*pi*i/N);
xr(i)=sin(pi/4+k*2*pi*i/N); figure(4)
x(i)=s(i)+b(i); plot(1:N-1,e(1:N-1),'r'), grid
end title('Signal nettoyé de l''interférence e(k) en V')
xlabel('Echantillons');
h=zeros(N,n); % Tableau des coefficients estimés figure(5)
e=zeros(1,n); % Tableau des erreurs d'estimation plot(1:N,h(1:N,1)), hold on
y=zeros(1,n); % Sortie du filtre plot(1:N,h(1:N,50)), hold off
grid
BOUCLE DES N ITERATION DE CALCUL DU title('Evolution des coefficients h(1) et h(50)')
FILTRE xlabel ('Echantillons')
% Boucle des N itérations de calcul du filtre
for i=n:N-1 figure(6)
for j=1:n plot(1:N-1,s(1:N-1),'b'),hold on
y(1,i)=h(i,j)*xr(i-j+1); % équ. de convolution grid
h(i+1,j)=h(i,j)+delta*xr(i-j+1).*e(1,i-1); % LMS title('Signal information initial')
end xlabel ('Echantillons')
e(1,i)=x(i)-y(1,i); % d'après la figure
% Fonction de transfert
end num=fliplr(h(N,:));
figure(7), sys=tf(num,1,1e-3);
% Tracé des résultats sys1=tf(1,1,1e-3); sys2=feedback(sys1,sys);
bode(sys2), xlabel('Pulsation en rd/s');
figure(1) ylabel('Phase en degrés; Module en dB');
plot(1:N,x(1:N)), grid title('Fonction de transfert synthétisé');

Remarques :
• Un signal aléatoire de variance 0.5 est utilisé comme signal informatif s(k).
• L'interférence sinusoidale s'écrit (k nombre de période de l'interférence, N nombre d'itération) :

 2fk  
b(k )  0.5 sin   
 N 3

• et l'expression du signal de référence est :

 2fk  
x r (k )  sin   
 N 4

Département Informatique. Master 1. Page 12/33


Université de La Rochelle 28/01/05

3- Deuxième cas d'école : extraction d'un signal noyé dans le bruit.


A l'inverse de l'application précédente, le signal informatif est sinusoïdal et se trouve fortement bruité par un
signal aléatoire.
L'information est véhiculée par l'amplitude du signal informatif et l'on dispose, pour signal de référence,
d'un signal sinusoïdale de même fréquence que le signal utile.
Soient les signaux:
x (k )  A0 cos( 0 t   0 )  b(k )
x r (k )  A cos( 0 t  )

où b(k) est le bruit blan additif.


L'ensemble tendant à annuler e(k) et le bruit n'étant pas corrélé avec xr(k), la sortie y(k) doit tendre vers
A0 cos( 0 t  )

TRAVAIL A REALISER.
5. Reprendre le programme précédent et l'adapter à ce nouveau problème. Faites attention les paramètres ne
sont pas nécessairement identiques. Vouc prendrez comme longueur de séquence N=1000, le nombre de
période du signal sinusoidal, 12, et une période d'échantilonnage égale à Te=0.0010.
Indication. Avant toute chose représenter le schéma de principe.
6. Relever sur les graphiques le nombre d'itérations nécessaire à l'établissement du régime permanent, ainsi
que le nombre d'échantillons. Faites évoluer le coefficient d'adpatation d.
7. Vers quel type de filtre doit tendre le filtre adaptatif. Quel est la fréquence du signal sinusoidal ?
8. Faites passer la pulsation du signal sinusoidal à 150 rd/s à partir de l'échantillon N/2=500 ceci afin de
vérifier l'adaptabilité du filtre vis à vis d'un signal informatif non stationnaire. Que constatez-vous ?
Conclure.

% Extraction d'un signal sinusoidal noyé dans un % Boucle des N itérations de calcul du filtre
bruit blanc h=zeros(N+1,n);
e(n)=0;
N=1000; % Longueur de la séquence
n=10; %10 % Ordre du filtre for i=n+1:N
k=12; % Nombre de périodes du sinus y(i)=0;
delta=0.001 % Facteur d'adaptation for j=1:n
Te=1e-3; % Période d'échantillonnage y(i)=y(i)+h(i,j)*xr(1,i-j+1);
h(i+1,j)=h(i,j)+delta*e(i-1)*xr(1,i-j+1);
GENERATION DES SIGNAUX ET CALCUL DU end
FILTRE. A FAIRE
e(i)=x(1,i)-y(i);
% Génération des signaux
end

b=0.8*randn(1,N); % Génération du bruit blanc


% Tracé des résultats
for i=1:N
xr(1,i)=sin(k*2*pi*i/N); % signal référence
figure(1)
% x(1,i)=xr(1,i)+b(i); % entrée filtré
plot(0:N-n,x(1,n:N)), grid
x(1,i)=0.5*sin(k*2*pi*i/N)+b(i); % entrée filtré title('Signal d''entrée x(k) en V')
end xlabel('Echantillons');

Département Informatique. Master 1. Page 13/33


Université de La Rochelle 28/01/05

figure(2) figure(4)
plot(0:N-n,xr(1,n:N),'r'), grid plot(0:N-n,h(n:N,1)), hold on
axis([0 800 -1.2 1.2]); plot(0:N-n,h(n:N,2),'r'), hold off
title('Signal de référence xr(k) en V') grid
xlabel('Echantillons'); title('Evolution des coefficients a(n-1) et a(n-2)')
xlabel('Echantillons');
figure(6)
plot(0:N-n,e(n:N)), hold on % Fonction de transfert du filtre obtenu
title('erreur e(k) en V') figure(5)
xlabel('Echantillons'); numl=fliplr(h(N,:));
sysl=tf(numl,1,Te);
figure(3)
plot(0:N-n,e(n:N)), hold on bode(sysl), hold off
plot(0:N-n,y(n:N)-b(n:N),'g'), hold on xlabel('Pulsation en rd/s');
plot(0:N-n,y(n:N),'r'), hold off ylabel('Phase en degrés; Module en DB');
grid title('Filtre synthétisé');
title('erreur e(k) et sortie y(k) en V')
xlabel('Echantillons');

Département Informatique. Master 1. Page 14/33


Université de La Rochelle 28/01/05

Département Informatique. Master 1. Page 15/33


Université de La Rochelle 28/01/05

4- Application 1. Téléphone mains libres.


On considère le cas d'un téléphone portable accroché au tableau de bord d'un véhicule. Le moteur crée un
bruit p qui se superposera, à un facteur près, à la voix du conducteur qui constitue ne signal x.
Le bruit p est mesuré par un capteur tout près du moteur. Le microphone du téléphone reçoit ainsi le signal
parasité y=x+kp, comme le montre le schéma suivant.

Bruit moteur
k
p

+
y
x

A0 cos( 0 t  )

TRAVAIL A REALISER.
9. Représenter le schéma de principe du filtrage adaptatif permettant d'annuler le bruit du moteur.
10.Reprendre les programmes précédents et adapter les à ce nouveau problème. Faites attention les
paramètres ne sont pas nécessairement identiques. Pour la génération des signaux, utiliser le code ci-
après.

Génération et visualisation des signaux. % Signal parasite


clear all, close all p=(square(20*pi*t)/2)+(0.2*sin(100*pi*t-100));
% Téléphone mains libres figure(2);
t=0:0.0005:1; plot(t,p);
x=sin(sin(20*t).*t*200); axis([0 1 -1.2 1.2])
xlabel('temps', '', 'bruit p du moteur'), grid

% Tracé du signal % Signal bruité


figure(1) figure(3);
plot(t,x) z=x+0.833*p;
axis([0 1 -1.2 1.2]); plot(t,z);
xlabel('temps', '', 'signal x de la voix'), grid xlabel('temps', '', 'signal bruité z=x+0.833p'), grid

Département Informatique. Master 1. Page 16/33


Université de La Rochelle 28/01/05

% Téléphone main libre


clear all, close all % Tracé des résultats
n=100; % Ordre du filtre adaptatif
k=20; % Nombre de périodes de l'interférence figure(1)
delta=0.006 % Facteur d'adaptation plot(1:N,xvoie(1:N)), grid
title('Signal de la voie x(k) non bruitée en V')
% Téléphone mains libres xlabel('Echantillons');
t=0:0.0005:1;
xvoie=sin(sin(20*t).*t*200); figure(2)
plot(1:N,xr(1:N),'r'), grid
% Tracé du signal axis([0 2000 -1.2 1.2]);
%figure(1) title('Bruit de référence p(k) en V')
%plot(t,xvoie) xlabel('Echantillons');
%axis([0 1 -1.2 1.2]);
%xlabel('temps') figure(3)
%ylabel('signal xvoie de la voix'), grid plot(1:N-1,z(1:N-1)), grid
title('Signal voie + bruit moteur en V')
% Signal parasite xlabel('Echantillons');
p=(square(20*pi*t)/2)+(0.2*sin(100*pi*t-100));
%figure(2); figure(4)
%plot(t,p); plot(1:N-1,y(1:N-1)), grid
%axis([0 1 -1.2 1.2]) title('Signal de sortie du filtre (bruit k.p) V')
%xlabel('temps') xlabel('Echantillons');
%ylabel('bruit p du moteur'), grid
figure(5)
% Signal bruité plot(1:N-1,e(1:N-1),'r'), grid
%figure(3); title('Signal nettoyé du bruit du moteur e(k)=xvoie en V')
z=xvoie+0.833*p; xlabel('Echantillons');
z=xvoie+2.833*p;
%plot(t,z); figure(6)
%xlabel('temps') plot(1:N,h(1:N,1)), hold on
%ylabel('signal bruité z=xvoie+0.833p'), grid plot(1:N,h(1:N,50)), hold off
%%%%%%%%%%%%%%%%%%%%%%%%%%%% grid
%%%%%%%%%%%%%%%%%%%%%%%%%%%% title('Evolution des coefficients h(1) et h(50)')
% xlabel ('Echantillons')
N=length(xvoie);
xr=p; % Signal servant de référence
x=z; % Signal bruité % Fonction de transfert
%%%%%%%%%%%%%%%%%%%%%%%%%%%% num=fliplr(h(N,:));
%%%%%%%%%%%%%%%%%%%%%%%%%%%% figure(7), sys=tf(num,1,1e-3);
% sys1=tf(1,1,1e-3); sys2=feedback(sys1,sys);
bode(sys2), xlabel('Pulsation en rd/s');
h=zeros(N,n); % Tableau des coefficients estimés ylabel('Phase en degrés; Module en dB');
e=zeros(1,n); % Tableau des erreurs d'estimation title('Fonction de transfert synthétisé');
y=zeros(1,n); % Sortie du filtre
sound(xvoie)
% Boucle des N itérations de calcul du filtre sound(z)
for i=n:N-1 sound(e)
for j=1:n Réponse fréquentielle du filtre
y(1,i)=h(i,j)*xr(i-j+1);
h(i+1,j)=h(i,j)+delta*xr(i-j+1)*e(1,i-1);
end
e(1,i)=x(i)-y(1,i);
end

Département Informatique. Master 1. Page 17/33


Université de La Rochelle 28/01/05

Département Informatique. Master 1. Page 18/33


Université de La Rochelle 28/01/05

5- Application 2. Elimination du bruit dans une conduite.

Cette application consiste à utiliser un filtre adaptatif pour éliminer le bruit produit par un ventilateur dans
une conduite d'aération. Le ventilateur génère une onde acoustique qui se propage au sein de la conduite,
celle-ci pouvant d'ailleurs amplifier certaines composantes du bruit en entrant en résonance.

Conduite
Micro1 xr(t) Micro2

Ventilateur HP de contre bruit

x(t)
y(t)
Filtre
adaptatif e(t)

Le bruit de conduite est capté par le microphone 1 afin d'être appliqué à l'entrée du filtre adaptatif (voir
figure : signal x(t)). La sortie du filtre y(t) génère le contre bruit visant à annuler le bruit résiduel dans la
conduite. Quant au microphone 2, il capte le bruit résiduel servant à adapter les coefficients du filtre pour
faire tendre e(t) vers zéro.

Modélisation de la conduite.
Le bruit produit par le ventilateur présente une fréquence fondamentale fonction de la vitesse de rotation et
du nombre de pales. Nous allons supposer que le ventilateur tourne à la vitesse de 25tr/s et comporte 6 pales
ce qui correspond à une fréquence fondamentale du bruit à 150 Hz.
Les harmoniques de ce bruit sont générées par passage du signal fondamental au travers d'une fonction non
linéaire « look-up table ». Un terme de gain symbolisera l'atténuation subie par le bruit entre l'emplacement
du microphone 1 et le haut parleur de contre bruit, la fonction « transport delay » symbolisera le temps de
propagation du signal sonore.
Le modèle SIMULINK de l'ensemble est présenté ci-dessous. Le filtre adaptatif est réalisé à l'aide d'une S-
fonction à laquelle nous passerons comme paramètres, la période d'échantillonnage Te, le coefficient d
d'adaptation du filtre et l'ordre n du filtre.

Filtrage LMS, S-fonction lms2.


Le filtre adaptatif met en oeuvre l'algorithme du gradient, le fichier correspondant est nommé lms2.m.
L'étape d'initialisation conditionne à zéro le vecteur d'entrée xe, le vecteur des coefficients h et le scalaire
d'erreur err puis appelle la fonction d'initialisation système.

Département Informatique. Master 1. Page 19/33


Université de La Rochelle 28/01/05

Le calcul du filtre lms se fait selon l'algorithme suivant qui calcule à chaque pas d'échantillonnage Te:
y (k )  h(k  1) x' (k )
h(k )  h(k  1)  de(k ) x(k )

TRAVAIL A REALISER.
11.Effectuer les connexions sur le modèle SIMULINK proposé, conduite.mdl.
12.Dans le fichier lms2, compléter la partie « case 3 ». La sortie de la S-fonction est y(k)=sys=yf.
13.Effectuer la simulation sur une durée de 0.1ms avec les paramètres suivants passés à la S-fonction lms2:
Te=0.1 ms, d 0.0002, n100.
La période d'échantillonnage est choisie relativement faible devant celle du fondamental, afin de prendre
en compte un nombre important d'harmoniques. Le coefficient d'adaptation d est choisi faible pour
minimiser l'erreur résiduelle, en contre partie, la constante de temps d'adaptation du filtre sera élevée ce
qui importe peu du fait que le bruit est stationnaire.
Afficher les résultats de la simulation à l'aide du fichier conduite_1.m
14.Effectuer une simulation avec un bruit composite x(t) formé de la somme de trois signaux:
- un signal composite d'amplitude 2V et de fréquence 150 Hz,
- un signal sinusoidal d'amplitude 1V et de fréquence 300 Hz,
- un signal carré d'amplitude 1 V et de fréquence 1000 Hz.
Conclure en vous aidant de la densité spectrale de puissance de x(t).
Vous utiliserez les programmes : conduite.mdl, conduite.m et lms2.m

Département Informatique. Master 1. Page 20/33


Université de La Rochelle 28/01/05

Programme LMS
% Filtrage adaptatif LMS
% Algorithme du gradient case{1,2,4,9} % Etapes non utilisées
function[sys,x0,str,ts]=lms2(t,x,u,flag,Te,delta,n) sys=[];
global err h xe yf otherwise
error(['Unhandled flag=',num2str(flag)]);
switch flag, end
case 0 % Etape d'initialisation
xe=zeros(1,n); % Fonction d'initialisation
h=zeros(1,n);
err=0; function [sys,x0,str,ts]=Initialisation(Te)
[sys,x0,str,ts]=Initialisation(Te); sizes=simsizes;
case 3 % Etape de calcul de la sortie sizes.NumContStates=0;
xe(1,n)=u(1); sizes.NumDiscStates=0;
yf=0; sizes.NumOutputs=1;
for j=1:n sizes.NumInputs=2;
yf=yf+h(1,j)'*xe(1,n-j+1); sizes.DirFeedthrough=1;
h(1,j)=h(1,j)+delta*err*xe(1,n-j+1); sizes.NumSampleTimes=1;
sys=simsizes(sizes);
end
x0=[];
err=u(2)-yf; str=[];
for j=1:n-1, ts=[Te 0];
xe(1,j)=xe(1,j+1);
end

sys=yf;

Fichier conduite_1.m
% Elimination d'un bruit de conduite f=(0:N-1)/(N*Te);
stem(f(1:50),xf(1:50))
load conduite.mat title('Spectre de xr(t)')
t=Signaux(1,:); xlabel('Frequence en Hz')
xr=Signaux(2,:); ylabel('Amplitude des composantes')
x=Signaux(3,:); figure(6)
xestime=Signaux(4,:); l=length(e);
e=x-xestime; ef=abs(fft(e(1:N),N))*2/N;
stem(f(1:50),ef(1:50))
% Représentation des signaux title('Spectre de e(t)')
figure(1) xlabel('Frequence en Hz')
plot(t,xr), grid ylabel('Amplitude des composantes')
xlabel('Temps'), ylabel('Amplitude en V')
title('Bruit mesuré par le micophone 1, xr(t)') % Densités spectrales de puissance
figure(2) figure(7)
plot(t,x), grid psd(xr,N,1/Te)
xlabel('Temps'), ylabel('Amplitude en V') title('Densité spectrale de puissance de xr(t)')
title('bruit se propageant dans la conduite, x(t)') xlabel('Frequence en Hz')
figure(3) ylabel('Module en dB')
plot(t,xestime), grid figure(8)
xlabel('Temps'), ylabel('Amplitude en V') psd(e(1:N),N,1/Te)
title('Contre bruit xestime(t)') title('Densité spectrale de puissance de e(t)')
figure(4) xlabel('Frequence en Hz')
plot(t,e), grid ylabel('Module en dB')
xlabel('Temps'), ylabel('Amplitude en V')
title('Erreur résiduelle mesurée par le microphone 2') % Puissances des bruits
Px=sum(xf.^2)/4;
% Représentation des spectres normalisés Pe=sum(ef.^2)/4;
figure(5) disp(['Puissance du bruit avant filtrage= 'num2str(Px)]);
N=512; disp(['Puissance du bruit après filtrage= 'num2str(Pe)]);
xf=abs(fft(xr,N))*2/N; disp(['Amélioration d''un facteur 'num2str(Px/Pe)]);

Département Informatique. Master 1. Page 21/33


Université de La Rochelle 28/01/05

Département Informatique. Master 1. Page 22/33


Université de La Rochelle 28/01/05

Exemples de résultats.

Département Informatique. Master 1. Page 23/33


Université de La Rochelle 28/01/05

Département Informatique. Master 1. Page 24/33


Université de La Rochelle 28/01/05

6- Application 3. Elimination de l'écho sur une ligne de transmission.


Cette application consiste à utiliser la particularité que présente le filtrage adaptatif de s'adapter à son
environnement lorsque ses caractéristiques évoluent dans le temps. On l'utilise pour éliminer l'écho produit
sur une ligne de transmission, comme par exemple, une ligne téléphonique.
En effet, du fait de la longueur de la ligne et de son éventuelle désadaptation, un signal émis peut se trouver
en partie renvoyé vers son émetteur, produisant ainsi un phénomène d'écho désagréable.
Les caractéristiques de la ligne et par conséquent ses défauts, sont différents pour chaque liaison effectuée;
l'emploi du filtrage adaptatif pour limiter l'effet de ces défaut semble donc ici parfaitement justifié.

Ligne de transmission
Emetteur A Recepteur B

écho
écho

Recepteur A Emetteur B

Si l'on étudie l'élimination de l'écho produit uniquement dans le sens de communication poste A vers poste B
on peut implanter le filtre adaptatif comme présenté sur le schéma ci-après.

Emetteur A
Ligne de transmission x(t) Recepteur B

x(t)
Echo
Filtre adaptatif k.x(t)
e(t)
-
Recepteur A + Emetteur B
+
y(t)

Le signal x(t) et son écho k.x(t) sont très fortement corrélés. Par contre les signaux de l'émetteur y(t) et
l'écho k.x(t) sont fortement décorrélés si bien que le filtre s'adaptant pour annuler e(t) à partir de la référence
x(t) va faire tendre e(t) vers y(t) atténuant ainsi le signal d'écho présent sur la ligne de retour.
Le calcul du filtre lms se fait selon l'algorithme suivant qui calcule à chaque pas d'échantillonnage Te:

y (k )  h(k  1) x' (k )
h(k )  h(k  1)  de(k ) x(k )

Département Informatique. Master 1. Page 25/33


Université de La Rochelle 28/01/05

Modélisation de la ligne de transmission.


Pour la modélisation de la ligne de transmission on se limite à un retard de transmission dû au délai de
propagation du signal. Le signal d'écho est produit à partir du signal reçu, multiplié par un facteur
d'atténuation. Le délai de transmission est réglé à 10 ms.

TRAVAIL A REALISER.
15.En vous aidant de l'application « élimination du bruit dans une conduite » représenter le modèle
SIMULINK (utiliser le fichier transmission.mdl).
16.Dans le fichier lms1, compléter la partie « case 3 ». La sortie de la S-fonction est y(k)=sys=yf.
17.Effectuer la simulation sur une durée de 0.5s avec les paramètres suivants passés à la S-fonction lms1:
Te=0.000125 ms, d 0.005, n10.
Le signal issu de l'émetteur A est sinusoidal d'amplitude unitaire et de fréquence 300 Hz. La ligne
introduit un retard de 1ms et le signal reçu x(t) produit un écho d'amplitude 0.833 x(t) ajouté au signal de
retour. Le signal issu de l'émetteur B est également sinusoidal d'amplitude unitaire mais de fréquence
1000 Hz.
Afficher les résultats de la simulation à l'aide du fichier echo1.m
18.Analyser les résultats

echo1.m. Permet l'affichage des différents signaux. Dans ada.mat vous devez préciser signaux.
% Elimination d'un bruit de conduite xlabel('temps')
Te=0.00025 ylabel('Amplitudes')
load ada.mat
t=signaux(1,:); figure(2)
xr=signaux(2,:); plot(t(1:floor(1/(10*Te))),xb(1:floor(1/(10*Te)))),
xb=signaux(3,:); hold on
y=signaux(4,:); title('Signal en sortie du filtre xb(t)')
yx=signaux(5,:); xlabel('Temps'), ylabel('Amplitude de xb')
ysortie=signaux(6,:);
l=length(t); figure(3)
plot(t(1:floor(1/(10*Te))),yx(1:floor(1/(10*Te)))),
% Représentation des signaux hold on
title('Signal emetteur + écho =xb(t)+y(t)')
figure(1) xlabel('Temps'), ylabel('Amplitude de xb(t)+y(t)')
plot(t(1:floor(1/(50*Te))),xr(1:floor(1/(50*Te)))),
hold on figure(4)
plot(t(1:floor(1/(50*Te))),y(1:floor(1/(50*Te)))), plot(t(1:floor(1/(20*Te))),ysortie(1:floor(1/
hold off, grid (20*Te))),'r'), hold on
axis([0 0.01 -1.2 1.2])
gtext('xr(t)'),gtext('y(t)') plot(t(1:floor(1/(20*Te))),y(1:floor(1/(20*Te)))),
title('Signaux reçu xr(t) et émis y(t)') hold off,grid

Département Informatique. Master 1. Page 26/33


Université de La Rochelle 28/01/05

Département Informatique. Master 1. Page 27/33


Université de La Rochelle 28/01/05

% Filtrage adaptatif LMS xe(1,j)=xe(1,j+1);


% Algorithme du gradient end

function[sys,x0,str,ts]=lms1(t,x,u,flag,Te,delta,n) sys=yf;
global err h xe yf case{1,2,4,9} % Etapes non utilisées
sys=[];
switch flag, otherwise
case 0 % Etape d'initialisation error(['Unhandled flag=',num2str(flag)]);
xe=zeros(1,n); end
h=zeros(1,n);
err=0; % Fonction d'initialisation
[sys,x0,str,ts]=Initialisation(Te);
function [sys,x0,str,ts]=Initialisation(Te)
case 3 sizes=simsizes;
xe(1,n)=u(1); sizes.NumContStates=0;
yf=0; sizes.NumDiscStates=0;
for j=1:n sizes.NumOutputs=1;
yf=yf+h(1,j)'*xe(1,n-j+1); sizes.NumInputs=2;
h(1,j)=h(1,j)+delta*err*xe(1,n-j+1) sizes.DirFeedthrough=-1;
sizes.NumSampleTimes=1;
end
sys=simsizes(sizes);
x0=[];
err=u(2)-yf; str=[];
ts=[Te 0];
for j=1:n-1,

Département Informatique. Master 1. Page 28/33


Université de La Rochelle 28/01/05

Exemple de résultats.

Département Informatique. Master 1. Page 29/33


Université de La Rochelle 28/01/05

Paramètre d'adaptation = 0.1

Département Informatique. Master 1. Page 30/33


Université de La Rochelle 28/01/05

7- Exemple de filtre adaptatif RLS.

TRAVAIL A REALISER.
19.Reprendre le cas d'école de l'extraction d'un signal noyé dans un bruit. Programmer le filtrage adaptatif
par la méthode RLS décrite dans la section 1d. Vous reprendrez les mêmes conditions sur le nombre
d'itérations, l'ordre du filtre et le nombre de période du signal sinusoidal que dans le cas LMS. On
rappelle ci-dessous les signaux appliqués au filtrage adaptatif.
La matrice d'autocorrélation inverse est initialisée à 10000I; I =matrice d'identité (n,n).
Le vecteur des coeffcients est initalisé à 0.
L'ordre du filtre étudié est de 200, et la fréquence d'échantillonnage de 1ms.
20.Etudier sa capacité à répondre à l'évolution fréquentielle du signal recherchée. Dans la boucle d'itération
rajoutée les lignes suivantes:
tr(1,i)=trace(Cxx);
if tr(1,i)<100
Cxx=100*eye(n)*Cxx/tr(1,i);
Conclure.
On rappelle ci-dessous les signaux appliqués au filtre adaptatif:

x (k )  A0 cos( 0 t   0 )  b(k )
x r (k )  A cos( 0 t  )

où b(k) est le bruit additif blanc.


L'algorithme mise en oeuvre pour réaliser un filtre adaptatif RLS est décrit par les équations suivantes :

Gain d’adaptation

 ˆ xx1 ( k  1) x ( k )

Matrice d ’autocorrélarion  g ( k ) 
1  x t ( k ) ˆ 1 ( k  1) x ( k )
 xx
 ˆ 1 ˆ 1 ˆ 1 ( k  1)
 xx   xx ( k  1)  g ( k ) x ( k ) 
t
xx

 h ( k )  h ( k  1)  g ( k )[ y ( k )  h ( k  1) x ( k )]
t
Vecteur des
coefficients e ( k )  y ( k )  k t ( k  1) x ( k )

Erreur a priori

et y(k) sortie du filtre adaptatif,


x(k) le vecteur ligne, entrée du filtre adaptatif de dimension (1,n).

Département Informatique. Master 1. Page 31/33


Université de La Rochelle 28/01/05

Département Informatique. Master 1. Page 32/33


Université de La Rochelle 28/01/05

% Extraction d'un signal sinusoidal noyé dans un


bruit blanc % Tracé des résultats

N=1000; % Longueur de la séquence figure(1)


n=20; %10 % Ordre du filtre plot(0:N-n,x(1,n:N)), grid
k=12; % Nombre de périodes du sinus title('Signal d''entrée x(k) en V')
delta=0.001 % Facteur d'adaptation xlabel('Echantillons');
Te=1e-3; % Période d'échantillonnage
figure(2)
% Génération des signaux plot(0:N-n,xr(1,n:N),'r'), grid
axis([0 800 -1.2 1.2]);
b=0.8*randn(1,N); % Génération du bruit blanc title('Signal de référence xr(k) en V')
xlabel('Echantillons');
for i=1:N
xr(1,i)=sin(k*2*pi*i/N); % signal référence figure(3)
x(1,i)=0.5*sin(k*2*pi*i/N)+b(i); % entrée plot(0:N-n,e(1,n:N)), hold on
filtré plot(0:N-n,y(1,n:N),'r')
end hold off
grid
% Initialisation title('erreur e(k) et sortie y(k) en V')
xlabel('Echantillons');
Phixxinv=10000*eye(n);
g=zeros(N,n); figure(4)
h=zeros(N,n); plot(0:N-n,h(n:N,1)), hold on
plot(0:N-n,h(n:N,2),'r'), hold off
e=zeros(1,N);
grid
y=zeros(1,N); title('Evolution des coefficients a(n-1) et a(n-2)')
tr=zeros(1,N); xlabel('Echantillons');

% Boucle des N itérations de calcul du filtre % Fonction de transfert du filtre obtenu


figure(5)
for i=n+1:N, numl=fliplr(h(N,:));
g(i,:)=(Phixxinv*xr(i-n+1:i)'/(1+xr(i-n+1:i) sysl=tf(numl,1,Te);
*Phixxinv*xr(i-n+1:i)'))'; bode(sysl), hold off
% Gain d'adaptation xlabel('Pulsation en rd/s');
e(1,i)=x(i)-h(i-1,:)*xr(i-n+1:i)'; % Erreur a priori ylabel('Phase en degrés; Module en DB');
h(i,:)=h(i-1,:)+e(1,i)*g(i,:); % Coefficients title('Filtre synthétisé');
Phixxinv=Phixxinv -g(i,:)'*xr(i-n+1:i)*Phixxinv; %
Matrice corrélation figure(6)
y(1,i)=h(i,:)*xr(i-n+1:i)'; semilogy(0:N-n,tr(n:N))
tr(1,i)=trace(Phixxinv); grid
end title('Trace de la matrice Cxx')
xlabel('Echantillons')

Département Informatique. Master 1. Page 33/33

Vous aimerez peut-être aussi