Vous êtes sur la page 1sur 14

ES 101

Rapport de TP

Domitille G IRAULT, Benoît B OERO


avril 2023
Table des matières
Introduction 3

1 Premier TP 3
1.1 Exercice 1 : Filtration d’un signal brouillé . . . . . . . . . . . . . . . . . . . . . . . . 3
1.2 Exercice 2 : Son tournant . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4

2 Deuxième TP 6
2.1 Exercice 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2.2 Exercice 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.3 Exercice 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9

3 Troisième TP 11
3.1 Exercice 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
3.2 Exercice 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12

2
Introduction
Le cours ES101 présente les principaux concepts et outils de traitement numérique du signal.
Afin d’illustrer ces méthodes, nous avons réalisé trois projets qui consistaient à appliquer ces
traitements numériques à des signaux audio dans le but de corriger des défauts qui avaient été
ajoutés à ces derniers.

1 Premier TP
1.1 Exercice 1 : Filtration d’un signal brouillé
Cet exercice consiste à supprimer deux fréquences d’un fichier audio, qui gênent son écoute.
Pour cela, on se propose d’abord de détecter ces deux fréquences puis de filtrer le fichier.
On commence par lire le fichier à l’aide de la fonction audioread : on peut récupérer le
signal dans un tableau de valeurs, ainsi que la fréquence d’échantillonnage Fe.
Grâce à la fonction fft, on peut récupérer la transformée de Fourier du signal et tracer le
gain en dB.

Nous nous sommes restreints aux fréquences allant de 0 à Fe/2 car le signal temporel est
réel donc le spectre est pair. On peut observer 2 pics d’intensité plus importante que le reste du
signal : ces deux pics correspondent aux deux fréquences à supprimer.
Grâce à la fonction max, on peut déterminer ces deux fréquences : 1397 et 5658 Hz.
On se propose donc maintenant de filtrer le fichier audio afin de supprimer ces deux fré-
quences. Pour cela, on peut synthétiser un filtre réjecteur de type RII avec un zéro sur le cercle
correspondant à la fréquence à supprimer et un pôle situé à l’intérieur du cercle pour le même
angle.

3
1 function Y= f i l t r e _ e n c o c h e ( f , Fe , X)
2 n=length (X) ; %longueur du s i g n a l
3 theta= f /Fe * 2 * pi ; %angle du pô l e et du zéro
4 Z=exp (1 i * theta ) ; %zéro
5 P=0.9 * Z ; %pô l e
6 Y=zeros ( 1 ,n) ;
7 f o r i = [ 3 : n]
8 Y ( i ) =X( i ) −2 * r e a l (Z) * X( i −1)+abs (Z) ^2 *X( i −2) +2 * r e a l (P) * Y ( i −1)−abs (P) ^2 * Y ( i −2) ;
9 end

filtre_encoche.m
En appliquant cette fonction au signal de départ, on obtient le spectre suivant :

On remarque bien que les deux fréquences qui gênaient l’écoute du fichier ont été suppri-
mées. De même, à l’écoute, les bourdons sont bien éliminées.

1.2 Exercice 2 : Son tournant


On cherche à fabriquer un signal stéréo avec un effet de mouvement de la source autour du
récepteur en créant un léger décalage entre le signal reçu par l’oreille droite et celui reçu par
l’oreille gauche.
Grâce au fichier Erlk.wav, on récupère un signal x1 qui correspondra à la voie droite, et on
peut créer un autre signal que l’on va décaler d’un certain angle au fur et à mesure.
Sachant que la différence de marche entre les deux oreilles est égale à d si n(θ), cela nous
donne une différence temporelle :

d si n(θ)
τ=
v
avec θ l’angle de la source tournante à un instant donné. Le signal x2 est donc donné par :
³³ τ ´ ´
x2(nTe) ≈ x1 n − ⌊ ⌋ Te
Te

4
On obtient donc le signal de l’autre oreille à l’aide d’un boucle. On peut choisir thetamin et
thetamax en fonction de la rotation que l’on veut faire (par exemple −π/4 et −π/4).

1 Y=zeros (n , 1 ) ;
2 f o r k = [ 1 :n]
3 f = ( k −1) / (n−1) ; %pourcentage de progression
4 tau = d * sin ( theta_min+ f * ( theta_max−theta_min ) ) /v ; %d i f f érence temporelle entre l e s
deux o r e i l l e s
5 Y ( k ) =x1 ( k− f l o o r ( tau /Te ) ) ;
6 end

rotary_bis.m
Enfin, on récupère l’audio formé par [x1 x2] à l’aide de la fonction audiowrite. On obtient
bien un audio qui, écouté à l’aide d’un casque, simule une rotation de la source autour de
l’auditeur.

5
2 Deuxième TP
2.1 Exercice 1
On considère une image dont chaque ligne a été décalée de quelques pixels aléatoirement.

F IGURE 1 – Image "brouillée"

On souhaite retrouver l’image d’origine. Le décalage de chaque ligne étant aléatoire il semble
à priori impossible d’effectuer une telle opération, pourtant les lignes du fichier d’origine ne
sont pas sans rapport les unes avec les autres et c’est de cette observation que nous allons tirer
parti. En effet, deux lignes successives sont corrélées : elles se "ressemblent". Pour mesurer
la "ressemblance" de deux lignes on va utiliser la fonction de correlation entre deux signaux
(A n )n∈‚1,N ƒ et (B n )n∈‚1,N ƒ :

N
A ∗n × B n+k
X
R A,B (k) =
n=1

Cette fonction mesure la ressemblance entre les signaux A et B pour des décalages k ∈ N
donnés. On cherche donc ici à déterminer l’entier k qui maximise la quantité |R A,B (k)|. On
utilise la fonction xcorr de matlab qui renvoit un vecteur dont la k-ième valeur vaut R A,B (k). Il
suffira ensuite de décaler la ligne n + 1 de N − k max pixels vers la gauche en gardant la ligne n
fixe, ce que l’on fait à l’aide de la fonction circshift de matlab qui permet de faire un décalage
circulaire. On code pour cela une fonction decale qui effectue ces opérations, cette fonction est
donnée sur la page suivante.

6
1 function b=decale ( a , b )
2

3 N=length ( a ) ;
4 cor=xcorr ( a , b ) ; %vecteur c o r r e l a t i o n s
5

6 max=0;
7 imax =1;
8 f o r i = 1 : ( 2 * N−1)
9 i f ( cor ( i ) >max)
10 imax= i ;
11 max=cor ( i ) ;
12 end
13 end
14

15 b= c i r c s h i f t ( b , imax−N) ;

decale.m

En utilisant cette fonction sur les lignes du fichier d’origine on récupère l’image suivante :

F IGURE 2 – Image décodée

7
Et en introduisant un décalage supplémentaire de -276 pixels (mesuré à l’aide de Photofiltre)
on a enfin :

F IGURE 3 – Image finale

2.2 Exercice 2
On considère un fichier audio qui a été obtenu à partir du processus suivant : On a prit la
transformée de fourrier du signal d’origine pour en permuter les hautes et basses fréquences.
On a ensuite pris la transformée inverse de ce nouveau spectre pour obtenir le fichier final.
Pour cela on a codé une fonction symetry, donnée ici :

1 function b=symetry ( a )
2

3 N=length ( a ) ;
4 b=zeros ( 1 ,N) ;
5

6 f o r i =1:N
7 b ( i ) =a (N− i +1) ;
8 end

symetry.m

Qui renvoit simplement le symétrique d’un vecteur. On charge ensuite le fichier canal.wav
fournit et on en récupère la fréquence d’échantillonage à l’aide de la fonction audioread, puis
on en prend la transformée de Fourrier à l’aide de la fonction matlab fft consacrée. Il suffit
alors d’échanger les hautes et les basses fréquences de ce spectre. Un extrait du code est fournit
sur la page suivante.

8
1 [ y , Fe ] = audioread ( ’ canal . wav ’ ) ;
2 N=length ( y ) ;
3 p= f l o o r (N/2) ;
4 yT= f f t ( y ) ;
5 yT ( 2 : p−1)=symetry ( yT ( 2 : p−1) ) ;
6 yT (p+1:end ) =symetry ( yT (p+1:end ) ) ;

Ci-après, on fournit les spectres initiaux et finaux. On remarque que les fréquences hautes et
basses ont bien étées échangées.

F IGURE 4 – Spectres avant/après

Il ne reste plus qu’à prendre la transformée de Fourrier inverse à l’aide de la fonction ifft
de matlab, et d’écrire le résultat dans un fichier. Pourtant cela n’est pas si simple : en effet
on s’attend à avoir un signal réel en sortie de la fonction ifft puisque le signal original était
réel. Pourtant le signal que l’on récupère est bel et bien complexe, et pour une raison assez
mystérieuse, peut-être due à des erreurs d’arrondis (précision finie). Pour résoudre ce problème
on ne garde que la partie réelle avant de normaliser le signal, comme démontré ci-dessous.

1 yS= i f f t ( yT ) ;
2 ySr= r e a l ( yS ) ;
3 yS=yS/max( yS ) ; %normalisation

2.3 Exercice 3
Dans cet exercice, on souhaite retrouver les deux signaux originaux qui ont été utilisés
pour créer le signal encode.wav. En récupérant le signal avec audioread, on peut étudier

9
sa transformée de Fourier pour pouvoir comprendre l’opération effectuée. On remarque de
l’apparence du spectre que les deux signaux ont été superposés de façon à ce que les valeurs
d’indices pair correspondent à celle du premier signal et celles d’indice impair du deuxième
signal. En effet comme l’on peut voir sur la première figure ci-dessous, le spectre du signal étudié
ressemble à celui de deux signaux qui ont été accolés, doublement symétrique.
Pour retrouver les deux signaux de départ, il suffit alors de parcourir le signal étudié en
récupérant les indices pair dans un tableau et les indices impairs dans un autre tableau, puis de
créer les fichiers audios correspondant à l’aide de la fonction autowrite.

F IGURE 5 – Spectre du signal étudié puis du spectre aux indices pair et enfin celui aux indices
impairs

Finalement, on obtient de morceaux de pianos distincts à partir de l’audio de départ.

10
3 Troisième TP
3.1 Exercice 1
On dispose d’un fichier audio Pa11.wav dont on doit corriger un écho. L’écho peut être
modélisé par la fonction de transfert :

H (Z ) = 1 + αZ −p 0

où α correspond à un coefficient d’atténuation du signal (il est donc inférieur à 1), et p 0 le retard.
Pour trouver p 0 , on applique xcorr pour observer les pics de correlation. Comme on réalise
l’autocorrélation du signal, on aura un pic principal au centre et deux pics secondaires de part
et d’autre (symétriques) qui témoignent de la présence d’un écho. p 0 correspond à la différence
entre l’indice du pic secondaire et celui du pic principal. On obtient : p 0 = 3418
Pour trouver α, on utilise l’autocorrélation en 0 et en p 0 , dont on connaît les valeurs et qui
dépendent de α. En effet :

r y y (0) = E y 2 (n)
¡ ¢
³¡ ¢2 ´
= E x(n) + αx(n(p 0 )
= E x 2 (n) + 2αE x(n)x(n − p 0 ) + α2 E x 2 (n − p 0 )
¡ ¢ ¡ ¢ ¡ ¢

= r xx (0) + 2α × 0 + α2 r xx (0)

De même :
¡ ¢
r y y (p 0 ) = E y(n)y(n − p 0 )
= E (x(n) + αx(n − p 0 ))(x(n − p 0 ) + αx(n − 2p 0 ))
¡ ¢

= E x(n)x(n − p 0 ) + αE x(n)x(n − 2p 0 ) + αE x 2 (n − p 0 )
¡ ¢ ¡ ¢ ¡ ¢

= 0 + α × 0 + αr xx (0) + α2 × 0

Ainsi on peut poser :


r y y (0) α
γ= =
r y y (p 0 ) 1 + α2
On doit donc résoudre l’équation du second ordre :

1
α2 − α + 1 = 0
γ

Sachant que α est un coefficient d’atténuation, on choisit la solution qui est inférieure à 1.
On obtient donc : p
1 − 1 − 4γ2
α= = 0.6469

Après avoir trouver α et p 0 , il suffit maintenant de corriger l’écho en utilisant l’inverse de la
fonction de transfert caractérisant l’écho : Y = f i l t er ([1], [1 zer os(1, p 0 − 1) al pha], x) Une fois
filtré, on a bien retiré l’écho de l’audio (récupéré grâce à audiowrite).

11
F IGURE 6 – Autocorrélation du signal non filtré puis du signal filtré

3.2 Exercice 2
Pour cet exercice nous disposons de deux fichiers x1.wav et x2.wav qui représentent des
signaux qui ont étés obtenus par le procédé suivant :

x 1 (n) = a 1 s(n) + b 1 w(n)


x 2 (n) = a 2 s(n) + b 2 w(n)

Où s(n) est le signal qu’on se propose de récupèrer, et w(n) est un bruit blanc. Problème : les
coefficients utilsés sont tels que : b 1 >> a 1 et b 2 >> a 2 . Pour accomplir ce miracle, nous allons
recourir à une technique dites d’inversion de puissance. Pour cela on combine les deux signeaux
linéairement :
ϵ(n) = x 1 (n) − ρx 2 (n)
Et on cherche à minimiser la quantité |ϵ(n)|2 en faisant varier ρ ∈ R. Pour trouver le minimum
on calclule la puissance de l’erreur et on cherche à la minimiser :
¢2
E[ϵ2 (n)] = E[ x 1 (n) − ρx n (n) ]
¡

= E[x 12 (n)] − 2 · ρE[x 1 (n)x 2 (n)] + ρ 2 E[x 22 (n)]

On prend ensuite la dérivée par rapport à ρ pour trouver le minimum :

d E[ϵ2 (n)]
= −2 · E[x 1 (n)x 2 (n)] + 2 · ρE[x 22 (n)]

Ce qui nous donne la valeur de ρ qui minimise la puissance de l’erreur :

E[x 1 (n) · x 2 (n)]


ρ= = 0.9475
E[x 22 (n)]

12
On peut visualiser ce minimum en calculant pour plusieurs valeurs de ρ la quantité |ϵ|2 :

F IGURE 7 – Visualisation du la puissance de l’erreur en fonction de ρ

On souhaite désormais montrer que les signaux ϵ(n) et x 2 (n) sont décorrélés. Pour cela on
calcule la fonction de correlation entre les deux signaux :

E[ϵ(n)x 2 (n − k)] = E[(x 1 (n) −2 (n))x 2 (n − k)]


= E[x 1 (n)x 2 (n − k) − ρx 2 (n)x 2 (n − k)]
.
= E[(a 1 s(n) + b 1 w(n)) · (a 2 s(n − k) + b 2 w(n − k))] . .
..
. − ρ · E[(a 2 s(n) + b 2 w(n))(a 2 s(n − k) + b 2 w(n − k))]

Or le bruit blanc est par definition décorrélé de tout signal, ainsi on peut éliminer tous les termes
croisés qui contiennent du bruit :

E[ϵ(n)x 2 (n − k)] = a 1 a 2 E[s(n)s(n − k)] − ρa 22 E[s(n)s(n − k)]

Or on sait expérimentalement que ρ est d’ordre unité, que les coefficients a 1 et a 2 sont très
petits et que le signal s(n) est probablement décorrélé de lui-même, donc cette quantité est
nulle ou presque nulle pour k ̸= 0, ie ϵ(n) et x 2 (n) sont décorrélés.

13
Conclusion
En conlusion, ces trois projets nous ont permis de découvrir de nouveaux outils informa-
tiques de traitements du signal.
Lors du premier TP, nous avons pu filtrer un signal audio qui avait été gêné par deux bourdons
mais aussi créer un signal audio stéréo tournant.
Ensuite dans le deuxième TP, nous avons travailler sur une image dans laquelle on a réaligné
les lignes de pixels, reconstituer un signal dont les hautes et basses fréquences avaient été
inversées et enfin retrouver deux signaux qui avaient été intercalés.
Enfin dans le dernier projet, on a pu retirer un écho d’un signal et retrouver un signal utile
à l’aide de deux signaux constitué de ce signal et d’un bruit, par une technique d’inversion de
puissance

14

Vous aimerez peut-être aussi