TP
DET
RAITEMENTN
UMERIQUE DUS
IGNAL1 Introduction à Matlab
Le TP s'effectue au moyen de l'environnement Matlab. Il s'agit d'un langage de programmation disposant d'un certain nombre de fonctions permettant d'accélérer le développement du code.
Vous trouverez à l'ESCPI de nombreux documents concernant Matlab. Quelques rappels sont effectués ci- dessous :
Matlab utilise essentiellement des vecteurs et aucune déclaration des variables n'est nécessaire. Ainsi, la création d'une variable x et son affectation à la valeur 3 s'écrit :
» x=3 x = 3
La création d'un vecteur x de 3 lignes et 1 colonne, initialisé aux valeurs 1,2,3 s'écrit :
» x=[1;2;3]
x =
1 2 3
Les ; servent à délimiter les lignes. La création d'un vecteur avec 1 ligne et 3 colonnes s'écrira :
» x=[1 2 3]
x =
1 2 3
Toutes les opérations arithmétiques : +, *, -, / s'effectuent aussi bien sur des scalaires que sur des vecteurs ou sur des matrices.
On trouve sous Matlab toutes les instructions classiques de type : for, while, if , …
commande Matlab résultat
exemple : syntaxe d'une boucle for calculant la somme des carrés des entiers de 1 à 3 :
» val=0 val =
0
» for i=1:3 val=val+(i^2);
end;
» val val = 14
On notera la mise à la puissance au moyen de l'opérateur ^
Matlab est très efficace lorsqu'il s'agit de manipuler des vecteurs ou des matrices par contre l'emploi de boucles le ralentit énormément. Ainsi l'exemple précédent se "coderait" de manière plus efficace en Matlab de la manière suivante :
» i=1:3 i =
1 2 3
» val=i*i' val = 14
Quelques remarques :
− L'instruction ' permet de transposer un vecteur. Lorsque le vecteur est complexe il s'agit d'une transconjugaison.
− Dans le cas de nombres complexes, on peut utiliser directement i ou j comme racine de -1 (sans s'en être servi auparavant comme variables)
− Pour éviter que Matlab n'affiche les résultats durant les calculs ou les affectations, il faut terminer la ligne par ;
Matlab possède un très grand nombre de fonctions qui vont permettre d'accélérer le développement. La seule difficulté provient du fait qu'il faut au minimum connaître le nom de la fonction. Dès que l'on a le nom la commande help permet d'avoir la syntaxe de la fonction.
Si l'on cherche par exemple à calculer la valeur moyenne d'un signal, on peut programmer soi même le calcul ou utiliser la fonction mean :
initialisation
boucle for
résultat
en entrant juste le nom de la variable, Mtalb fournit sa valeur
création et affectation d'un vecteur ligne comportant les valeurs 1,2,3
produit scalaire
help mean
MEAN Average or mean value.
For vectors, MEAN(X) is the mean value of the elements in X.
For
matrices, MEAN(X) is a row vector containing the mean value of each column. For N-D arrays, MEAN(X) is the mean value of the elements along the first non-singleton dimension of X.
MEAN(X,DIM) takes the mean along the dimension DIM of X.
Example: If X = [0 1 2 3 4 5]
then mean(X,1) is [1.5 2.5 3.5] and mean(X,2) is [1 4]
See also MEDIAN, STD, MIN, MAX, COV.
Quelques unes des principales fonctions dont vous aurez besoin dans ce TP sont :
wavread, wavwrite plot
fft, ifft xcorr
filter, remez, ellip roots
(éventuellement) levinson plus d'autres ...
Les enseignants sont disponibles pour vous aider à trouver une fonction qui pourrait exister mais dont vous ne connaîtriez pas le nom (problème classique avec Matlab).
2 Le sujet
Vous allez devoir proposer et programmer une méthode pour "corriger" un signal audio qui a subi un écho et auquel des signaux brouilleurs (intentionnels dans le cadre de ce TP mais qui pourraient être fortuits dans un cas
"réel") ont été ajoutés.
ATTENTION, vous aller travailler avec un fichier son perturbé qui n'est pas le même pour tous les binômes.
Evitez donc de trop vous inspirer des programmes d'autres groupes.
2.1 Récupération du fichier
L'environnement de travail sera votre compte sous Windows NT4.0
Rapatriez dans votre répertoire de travail le fichier contenant le signal source :
répertoire partagé/terre/[sous promotion (A=1, B=2)][numéro de binôme].wav Branchez votre casque sur la sortie de la carte son de votre PC (à l'arrière du PC)
Ecoutez le signal.
2.2 Suppression des signaux "brouilleurs"
A partir de l'écoute du signal et de l’observation de sa densité spectrale de puissance, vous pouvez déduire et identifier deux fréquences pures qui "brouillent" le signal utile. Supprimez ces porteuses par filtrage.
Attention, ici vous êtes totalement libre pour programmer l'identification automatique ou non des fréquences, le filtrage en temporel ou en fréquentiel, ….
2.3 Suppression de l’écho
Vous pouvez constater à l'oreille que le signal est noyé dans son écho. Pour vous aider, nous vous indiquons que cet écho a été généré synthétiquement par une recopie simple du signal sur lui même avec un coefficient d'affaiblissement. Le retard de l'écho est compris entre 100 et 400 ms. Le coefficient d'affailblissement est compris entre 0 et 1.
Identifiez ces paramètres et supprimez l’écho du signal.
2.4 Amélioration
Discutez et proposez d'autres méthodes pour corriger le signal. Est-il possible de le rendre plus audible par un traitement quelconque.
Il serait par exemple intéressant d'analyser la position des zéros d'un filtre de prédiction linéaire appliqué à ce signal.
Rappel : dans votre rapport on trouvera :
Explication théoriques des traitements que vous proposez pour restaurer le signal.
Schéma de l'enchaînement de ces traitements Qualité de la restauration
Suggestions pour amélioration
Votre programme (sans trop de lignes blanches et avec commentaires succincts mais utiles)