Académique Documents
Professionnel Documents
Culture Documents
TD 1
Matlab, WaveLab et Transformées 1D
C. Dossal , J. Kalifa et E. Le Pennec
1 Matlab et WaveLab
Matlab (Matrix Laboratory) est un environnement conçu pour le calcul matriciel. Il fournit
de grandes facilités pour la manipulation de matrices ou de vecteurs et est donc bien adapté à
la plupart des problèmes du traitement du signal discret. De plus, ses fonctions d’affichage sont
à la fois puissantes et faciles à utiliser.
Matlab possède un langage de programmation dans lequel les opérations matricielles sont
intégrées. Ce langage s’utilise soit en mode interactif, où les commandes sont exécutées dès leur
saisie, soit dans le cadre de programmes ou de scripts préparés à l’avance à l’aide d’un éditeur
de texte.
L’un des intérêts de Matlab est la facilité avec laquelle on peut créer de nouvelles fonction-
nalités et les distribuer ensuite. C’est le cas par exemple de la bibliothèque de fonctions WaveLab.
Celle-ci a été créée à l’initiative de D. Donoho de Stanford pour palier l’absence de fonc-
tionnalités de Matlab dans le domaine des ondelettes. On trouve dans WaveLab des fonctions
permettant d’effectuer les transformées en ondelettes continues, discrètes, dyadiques, les trans-
formations en cosinus locaux, les paquets d’ondelettes et bien d’autres choses encore.
Exercices
2.1 Transformée de Fourier d’un signal discret
– Quelle est la syntaxe de la transformée de Fourier rapide en Matlab ?
>> fft
– Donner un exemple de transformation et de transformation inverse.
>> S=zeros(1,100);
>> S(1,20:50)=ones(1,31);
>> FS=fft(S);
>> Srec=ifft(FS);
1
– Visualiser les différents signaux et les coefficients de Fourier à l’aide de plot.
>> plot(S);
>> plot(FS);
>> plot(abs(FS));
>> plot(Srec);
>> plot(real(Srec));
Quand le vecteur à afficher est complexe plot affiche la partie imaginaire en fonction de la
partie réelle ce qui produit quelques surprises si on ne fait pas attention.
2.2 Spectrogramme
– La transformée de Fourier ne permet pas de visualiser le caractère non stationnaire d’un
signal. Ceci peut-être obtenu en découpant l’interval de temps en morceau est en réalisant
une transformée distincte par intervalle. Étudier comment le programme spectrogram.m
réalise ce principe.
– Utiliser le programme pour étudier le signal sonore sequence.mat.
2
erreur=sum(vecerreur)
– Comparer “visuellement” les erreurs suivant le nombre de coefficients conservés.
– Comparer les erreurs en normes l2 en fonction du nombre de coefficients conservés.
function erreurfourier(S)
close all
N=size(S,2);
F=abs(fft(S));
Ftrie=sort(abs(F));
erreurlin=zeros(1,N/2);
erreurnonlin=zeros(1,N/2);
m=floor(N/2);
for (i=1:(m-1))
erreurlin(m-i)=erreurlin(m-i+1)+2*F(m-i+1)*F(m+1-i);
erreurnonlin(m-i)=erreurnonlin(m-i+1)+Ftrie(2*i-1)*Ftrie(2*i-1)+Ftrie(2*i)*Ftrie(2*i);
end
plot(erreurlin(1:100));
hold on
plot(erreurnonlin(1:100),’r’);
– Utiliser un filtrage idéal linéairement optimal dans une base de Fourier pour supprimer le
bruit.
>> FS=fft(S);
>> R=abs(FS.*FS);
>> DNfour=FS.*(R./(R+1));
>> DN=real(ifft(DNfour));
>> plot(DN)
>> plot(S-DN);
>> hold on
>> plot(N,’r’);