Vous êtes sur la page 1sur 3

Ondelettes - CNRS - 2005

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.

2 Une introduction rapide à Matlab


Voir annexe...

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.3 Approximation linéaire et non-linéaire


– Écrire une procédure permettant de donner l’approximation linéaire d’un signal en fonction
du nombre n de coefficients conservés.
function R=fourierlin(S,n)
close all;
N=size(S,2);
F=fft(S);
m=N-n;
for i=(N/2-m/2+1):(N/2+m/2)
F(i)=0;
end
R=real(ifft(F));
plot(S)
hold on;
plot(R,’r’)
vecerreur=(S-R).*(S-R);
erreur=sum(vecerreur)
– Écrire une procédure permettant de donner l’approximation non-linéaire d’un signal en
fonction du nombre n de coefficients conservés.
function R=fouriernonlin(S,n)
close all;
N=size(S,2);
F=fft(S);
Ftrie=sort(abs(F));
seuil=Ftrie(N-n);
F=F.*(abs(F)>seuil);
R=real(ifft(F));
plot(S)
hold on;
plot(R,’r’)
vecerreur=(S-R).*(S-R);

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’);

3 Débruitage par filtrage dans une base de Fourier


– Générer un signal régulier par morceaux dégradé par un bruit additif blanc Gaussien.
Calculer son rapport signal/bruit.
>> S=MakeSignal(’Piece-Regular’,1024);
>> N=GWN(1024,1);
>> SN=S+N;
>> plot(SN)
>> SNR(S,SN)

– 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’);

Calculer le rapport signal/bruit résultant.


>> SNR(S,DN)

– Comment obtenir des résultats similaires pour la déconvolution ?

Vous aimerez peut-être aussi