Vous êtes sur la page 1sur 7

Transformée de Fourier discrète 53

I. BUT DE LA MANIPULATION
Le but de la manipulation est d’étudier la transformée de Fourier en temps discret à l’aide de
Matlab, d’étudier les effets d'une fonction de fenêtrage sur le spectre d'un signal, de
comprendre les méthodes principales d’analyse temps-fréquence et de se familiariser avec
leur utilisation dans des cas concret, comme la détermination d’un numéro de téléphone ou la
vitesse d’un train à partir d’un enregistrement sonore.

II. RAPPELS THEORIQUES


II.1 Fenêtres temporelles
Le traitement d’un signal s(t) impose une durée limitée dans le temps du signal, cela revient à
multiplier le signal temporel par une fenêtre w(t) de durée T. Cette opération s’appelle la
troncature. Le signal tronqué est : str(t) = s(t).w(t). La fenêtre la plus simple est la fenêtre
rectangulaire.
La troncature influence le spectre du signal :
TF[str(t)] = TF[s(t).w(t)] = Str(f) = S(f) * W(f), avec W(f) = T sinc(Tf).
Le spectre est transformé en un spectre composé d’un lobe principal et de multiples lobes
secondaires dû à la fonction sinc(Tf). La largeur du lobe principal, L, agit directement sur la
résolution en fréquence c'est-à-dire la capacité à distinguer deux fréquences proches l’une de
l’autre. Si l’écart fréquentiel Δf = f2 – f1 entre les raies est supérieur à la largeur du lobe
principal, les deux raies seront séparées sur le spectre (figure1). Plus le lobe principal est
étroit meilleure est la résolution.
f1 f1
f2 f2
spectre résultant spectre résultant

L
L
f1 f2 f1 f2

Δf = f2 – f1 Δf = f2 – f1
(a) (b)

Fig.1 Résolution en fréquence


(a) Δf = f2 – f1 > L, le spectre résultant en pointillait permet de retrouver les deux
fréquences f1 et f2. Les deux raies sont séparées.
(b) Δf = f2 – f1 < L, le spectre résultant en pointillait ne permet pas de retrouver les
deux fréquences f1 et f2. Les deux raies ne sont pas séparées.

La hauteur des lobes secondaires agit directement sur la résolution en amplitude c'est-à-dire la
capacité à distinguer des raies spectrales de faibles amplitudes (figure 2). Plus leur hauteur est
grande, plus l’erreur est importante.

Faculté des Sciences et Techniques de Tanger Département de Génie Electrique


54 Transformée de Fourier discrète

Lobe principal Lobe secondaire

f1
f1
f2
f2

f1 f2 f1 f2

(a) (b)

Fig.2 Résolution en amplitude


(a) Le lobe secondaire de f1 en pointillait ne cache pas le lobe principal de f2 en trait continu.
Il ne va pas masquer la fréquence f2.
(b) Le lobe secondaire de f1 en pointillait cache le lobe principal de f2 en trait continu. Il va
masquer la fréquence f2.

La résolution en amplitude (figure 3) est : A =


Si < A, ou en dB A1dB – A2dB < AdB, les deux fréquences se distinguent l’une de l’autre,
avec A1 l’amplitude du signal f1 et A2 celle de f2.
.
Il existe un grand nombre de fonction fenêtre et elles
ont été étudiées par F. J. Harris1. On étudiera les
A fenêtres les plus utilisées : rectangulaire, Hamming,
Hanning, bartlett et Blackman. Chaque fenêtre est
caractérisée par :
L
- la largeur du lobe central L.
- le rapport A entre les maximums du lobe central et des
Fig.3 Spectre d’une fenêtre lobes secondaires.

Sous Matlab, des fonctions calculant les paramètres des fenêtres les plus courants sont
disponibles :
Boxcar pour une fenêtre rectangulaire, bartlett, hamming, hanning, blackman…
Hanning(N) est un vecteur colonne de taille N. Par exemple, hanning(5), retourne les 5
coefficients d’une fenêtre hanning.
>> hanning(5)
ans =
0.2500
0.7500
1.0000
0.7500
0.2500

1
On the use of windows for harmonic analysis with the discrete Fourier transform, F. J. Harris, Proceedings of
the IEEE, vol 66, N° 1, january 1978.
Transformée de Fourier discrète 55

II.2 Spectrogramme
II.2.1 Principe
Le spectrogramme est un diagramme associant à chaque instant τ d’un signal son spectre de
fréquence. C’est une représentation temps-fréquence.
Le spectrogramme représente le carré du module de la transformée de Fourier à court terme
(TFCT).
La TFCT découpe le signal en segment d’analyse au moyen d’une fenêtre w(t) où l’indice τ
représente le positionnement temporel de cette fenêtre. Sur chacune des segments obtenus on
applique la transformée de Fourier classique. τ représente également le positionnement du
spectre correspondant (figure 4). On obtient alors un ensemble de spectres locaux. La
juxtaposition de ces spectres locaux donne l’évolution du spectre en fonction du temps.

x(t) fenêtre w(t-τ2)


fenêtre w(t-τ1) fenêtre w(t-τ5)
signal x(t)

τ1 τ2 τ3 τ4 τ5 temps
chevauchement segment
segment

FFT

f FFT FFT
r FFT FFT
é
q
u
e
n
e
τ1 τ2 τ3 τ4 τ5 temps

Fig4. Principe de la transformée de Fourier à court terme

II.2.2 Spectrogramme avec Matlab


La commande est la suivante :
spectrogram(x, window, noverlap, Nfft, Fs)

Faculté des Sciences et Techniques de Tanger Département de Génie Electrique


56 Transformée de Fourier discrète

x : le signal dont on souhaite trouver le spectrogramme. Par défaut, x est divisé en huit
segments. Chaque segment contient une estimation du contenu fréquentiel de x à court-terme
et localisé dans le temps.
window : décompose le signal en segments et chaque segment a une largeur spécifiée. La
fenêtre définit la largeur de chaque segment en termes d’échantillons.
noverlap : définit le nombre d’échantillons qui se chevauchent entre les segments adjacents.
La valeur de noverlap doit être inférieure à la longueur des segments. La valeur par défaut de
noverlap est la longueur (window)/2.
Nfft : spécifie le nombre de points de fréquence utilisés pour calculer la transformée de
Fourier discrète. Un nombre plus élevé de points de FFT donne une résolution de fréquence
plus élevée et montre des détails fins le long de l’axe des fréquences du spectrogramme.
Fs : La fréquence d’échantillonnage du signal. La valeur par défaut est 1Hz.

II.3 Code DTMF


Un code DTMF (Dual Tone Multi Frequency) est une combinaison de fréquence utilisée pour
la téléphonie. Sur le clavier du téléphone, en appuyant sur une touche, on crée un signal
composé de deux signaux sinusoïdaux de fréquences différentes, comme le montre le
tableau 1.

F(Hz) 1209 1336 1477 1633


697 1 2 3 A
770 4 5 6 B
852 7 8 9 C
941 * 0 # D

Tableau 1 : Code DTMF

La touche 0 sur le clavier correspond donc au doublet (941 Hz, 1336 Hz). Le signal produit
est donc : s(t) = sin(2π 941 t) + sin(2π 1336 t).

III. TRAVAIL A EFFECTUER


III.1 Transformée de Fourier discrète. Zero-padding
1) Calculer la TFD du signal x[n] = [0 1 2 3 4 5 4 3 2 1]. Afficher dans la même fenêtre
graphique le signal x[n] et son spectre.
x = [0 1 2 3 4 5 4 3 2 1];
N = … ;
n = … ;
subplot(…,…,…)
stem(n,x) ;
X = fftshift(fft(x,N));
f = … ;
subplot(…,…,…)
stem (f,abs(X));
hold on
plot(f,abs(X),'r');

2) Le signal xz[n] = [zeros(1,3) x zeros(1,3)], composé du signal x(n] précédent complété par
des zéros de manière à porter la durée totale à 16. Tracer son spectre.
3) Même question si la durée du signal est 32. Quel est l’intérêt d’ajouter des zéros ?
Transformée de Fourier discrète 57

III.2 Etudes des fenêtres temporelles


1) Générer les fenêtres Rectangulaire, Bartlett, Hamming, Hanning, Blackman de longueur
M = 64.

M = 64 ;
hr = boxcar(M) ; plot(hr) ;

2) Compléter le script suivant pour trouver la transformée de Fourier discrète de ces fenêtres
sur N=1024 points fréquentiels. Tracer le module de la transformée de Fourier discrète en
linéaire et en dB.
N = 1024 ;
f = … ;
HR = fft(hr,N) ;
plot… ;
HRdB = 20*log10(abs(HR)) ;
plot… ;

3) Retrouvez les caractéristiques de chaque fenêtre (largeur du lobe principal, atténuation du


lobe secondaire) et étudiez l’influence du nombre de points M de la fenêtre.

III.3 Analyse spectrale d’un signal sinusoïdal


1) Générer un signal composé de la somme de deux sinusoïdes de fréquences f1 = 4883 Hz et
f2 = 4907 Hz, d’amplitudes identiques 1V, échantillonnées à Fe = 1 MHz sur M = 8192
points.
a) Calculer sa transformée de Fourier discrète sur N = 8192 points en considérant
successivement une fenêtre rectangulaire, de Bartlett, de Hanning, de Hamming et enfin de
Blackman. Visualiser les spectres en dB.
M = 8192; Fe = 100000; f1 = 4883; f2 = 4907;
n = 0:M-1;
x = sin(2*pi*(f1/Fe)*n)+ sin(2*pi*(f2/Fe)*n);
N = M;
f = (0:N-1)/N;
xb = x.*boxcar(M)';
X = fft(xb,N);
X = 20*log10(abs(X));
plot(f,X,'k','Linewidth',2),grid;
title('fenêtre rectangulaire')
xlabel('f')
ylabel('WR(f)')

b) Étudier l’effet des différentes fenêtres sur la séparation de ces deux signaux. Que vaut la
taille minimale Mmin théorique pour chaque fenêtre, qui permet de séparer les deux raies ?

2) Générer un signal constitué de deux sinusoïdes de fréquences f1 = 130 Hz et f2 = 300 Hz,


d’amplitudes 1 et 0.01 respectivement, échantillonnées à 1000 Hz sur N = 64 points. Calculer
sa transformée de Fourier discrète sur 1024 points en considérant successivement une fenêtre
rectangulaire, de Bartlett, de Hanning, de Hamming et enfin de Blackman. Conclure quand à
la résolution spectrale offerte par chacune des fenêtres.

Faculté des Sciences et Techniques de Tanger Département de Génie Electrique


58 Transformée de Fourier discrète

III.4 Détermination d’un numéro de téléphone par analyse spectrale


1) a) Chargez le fichier numero, à l’aide de la fonction Matlab audioread :
y = audioread('numero.wav')

b) Tracer l’évolution temporelle du numéro.


N = length(y) ;
Fe =…. ; Te =…. ; t = …. ; plot(t,y) ;

c) Ecoutez le numéro composé en saisissant la commande : sound(y,Fe).


d) Tracer son spectre.
f =… ; Y =fftshift(fft(y)) ; plot(f,abs(Y)).
e) Tracer la représentation temps-fréquence du numéro composé en saisissant la commande :
spectrogram(signal, window, noverlap, Nfft,Fe,'yaxis');

f) En déduire le numéro de téléphone.

III.5 Etude de l’écho et de la réverbération


1) Charger le fichier tp71.
[x,Fe] = audioread('tp71.wav');
Quelle est la fréquence d’échantillonnage ?
2) Tracer le signal x(t) en fonction du temps ainsi que son spectre.
N = length(x);
Te = 1/Fe;
t = … ;
figure(1)
plot(t,x);grid;

3) Utiliser la fonction soundsc pour l’écouter.


4) Pour réaliser l’écho utilisez le système suivant : y[n] = x[n] + αx[n – m], avec α = 0.7 et
m = 24000 échantillons. De combien le signal va être retardé ?
a) Calculer la fonction de transfert du système.
%réalisation du filtre

num = [1 zeros(1,23999) 0.7]; %num : est un vecteur contenant les


coefficints polynomiaux du numérateur. Il faut saisir ces coefficients dans
l’ordre croissant en z-1.

den = [1 zeros(1,24000)]; %den : est un vecteur contenant les coefficients


polynomiaux du dénominateur

%fonction de transfert

sys = tf(num,den,-1) %la fonction de transfert du filtre numérique.


% -1 : fréquence d’échantillonnage non précisée.
Transformée de Fourier discrète 59

%signal filtré

y = filter(num,den,x); %donne la réponse du filtre à une entrée x[n]

figure(2)
plot(t,x);
xlabel('t','FontSize',12);
hold on
plot(t,y-x,'r');grid;

b) Ecouter le signal filtré. Que remarquez-vous ?


c) Tracer la fonction d’autocorrélation du signal filtré y[n].
[c,tau] = xcorr(…);
plot(tau,…);

d) Déterminer de combien d’échantillons est décalé l’écho et le coefficient α ?


5) Pour annuler l’écho, utiliser le système y[n] = x[n] + αy[n – m], avec toujours α = 0.7 et
m = 24000 échantillons.
a) Calculer la fonction de transfert du système.
b) Ecouter le signal filtré.
c) Tracer la fonction d’autocorrélation du signal filtré. Que remarquez-vous ?
6) Maintenant, on va appliquer directement le système y[n] = x[n] + αy[n – m], avec α = 0.7
et m = 24000 échantillons, sur le signal original x(t). Ecouter le son.
7) Déterminer l’équation aux différences du filtre qui permet de récupérer le signal original.
8) Tracer la fonction d’autocorrélation du signal filtré y[n].

Faculté des Sciences et Techniques de Tanger Département de Génie Electrique

Vous aimerez peut-être aussi