Vous êtes sur la page 1sur 5

Université du Québec à Montréal MIC4220

Département d’Informatique Traitement numérique des signaux

Laboratoire 4: L’analyse spectrale et le filtrage par transformée de Fourier


But

Familiarisation avec la conception et l’usage de la Transformée de Fourier Rapide (TFR, «FFT»


en anglais) en analyse spectrale et comme filtre.

Exercices

I. Usage de la FFT

1. Génération d’un signal de bruit


a. Générer le signal de bruit blanc Gaussien suivant en utilisant le code Matlab:
x = 10*randn([1,4096]); % génère 4096 échantillons
Afficher les 75 premiers échantillons du signal en utilisant la fonction Matlab stem
(Indication : figure; subplot(2,1,1);stem(x(1:75)); obtient-on toujours le
même résultat en répétant l’exécution du programme? Pourquoi?
b. Utiliser la fonction fft de Matlab pour calculer les coefficients de la transformée de Fourier
discrète du signal; afficher l’amplitude du spectre fréquentiel obtenu en assumant que la
fréquence d’échantillonnage est de 8000 Hz. Le code Matlab requis est:
Ak=abs(fft(x))/length(x); % calcul du spectre d’amplitude
fs=8000;
k=0:1:length(x)-1; % Génération de l’indice des fréqu.
f=k*fs/length(x); % conversion en Hz
subplot(2,1,2); plot(f,Ak); % trace du spectre d’amplitude
Utiliser les fonctions axis, xlabel, ylabel et title pour finaliser le tracé. Quelle
fréquence(s) devrait-on voir sur le graphique (fréquence du signal) ? Quelle est la résolution
en fréquence ?
c. Utiliser la fonction sound de Matlab pour écouter le signal généré en utilisant une fréquence
d’échantillonnage de 8000 Hz.
sound(x/max(abs(x)),8000);% joue un son à une fréquence donné
Qu’entend-on? À quelle bande de fréquence est limitée l’oreille?

2. Génération d’une somme de cosinusoïdes numériques


a. Générer trois cosinusoïdes avec les amplitudes et phases suivantes:

1
x1(t) = 10 cos[2π(500)t] ;
x2(t) = 10 cos[2π(1200)t + 0.25 π] ;
x3(t) = 10 cos[2π(1800)t+ 0.5 π] ;
Afficher les trois signaux pour une durée d’environ 0.01 seconde. Chaque signal doit être
échantillonné à une fréquence de 8000 Hz ; vérifier que la phase et l’amplitude de chacun
des trois signaux est correcte (correspond à la formule mathématique). Indication: utiliser
x(0) et max(x) dans Matlab. À quelles notes de musique la plus proche correspondent
ces trois fréquences?
b. Créer un programme qui génère la somme de trois cosinusoïdes en additionnant les trois
cosinusoïdes générées
x(t) + x1(t) + x2 (t) + x3 (t)
Afficher x(t) sur la même période de temps utilisée en a), en utilisant la commande:
subplot(2,1,1);plot(t,x);
Quel est la fréquence d’échantillonnage de x(t)?
c. Utiliser fft pour calculer les coefficients de la transformée de Fourier discrète du signal
précédent; afficher et examiner le spectre du signal x(n) (composantes fréquentielles) en
incluant les légendes. Quelles fréquences apparaissent sur le spectre fréquentiel ? Est-ce que
toutes ces fréquences existent dans le signal temporel non échantillonné? D’où viennent les
nouvelles fréquences? De façon rigoureuse, la bande de fréquence comprise entre fs/2 et fs
devrait se retrouver où dans le spectre fréquentiel?
d. Écouter et comparer les signaux générés en exécutant le code suivant:
sound(x1/max(abs(x1)), 8000);pause
sound(x2/max(abs(x2)), 8000);pause
sound(x3/max(abs(x3)), 8000);pause
sound(x/max(abs(x)), 8000);

3. Génération d’une multiplication de signaux numériques


a. Générer deux signaux cosinusoidaux possédant les amplitudes et phases suivantes:
x1(t) = 10 cos[2π(500)t] ;
x2(t) = 10 cos[2π(1200)t + 0.25 π] ;
Afficher les deux signaux sur un axe des temps de durée 0.01 s ou plus. Chaque signal doit
être échantillonné à une fréquence de 8000 Hz. Indication :
t=0:(1/8000):0.5; figure;
subplot(3,1,1);plot(t,x1); axis([0 0.01 –6 6]);
Utiliser max et mean de Matlab pour déterminer la valeur maximale et la valeur moyenne
quadratique (indication: sqrt(mean(x1.*x1))
b. Créer un vecteur qui est la multiplication des deux cosinusoïdes: y(t) = x1(t) × x2(t)
2
(Indication : y=x1.*x2; % noter le point avant le signe *)
Utiliser le code suivant pour afficher y(t) sur la même période de temps qu’en a) :
subplot(3,1,2);plot(t,y);axis([0 0.01 -6 6]);
c. Utiliser fft pour calculer les coefficients de la transformée de Fourier discrète du signal
précédent ; afficher et examiner le spectre du signal x(n) (composantes fréquentielles) en
incluant les légendes. Quelles fréquences apparaissent sur le spectre fréquentiel ? Montrer
mathématiquement que ces fréquences sont bien celles que l’on doit obtenir.
d. Utiliser sound pour écouter x1, x2 et y avec une fréquence d’échantillonnage de 8 kHz.
4. Traitement d’un signal de parole
a. Charger le fichier de voix we.dat utilisé dans le laboratoire précédent et utiliser la fonction
fft pour calculer les coefficients de la transformée de Fourier discrète du signal ; afficher et
examiner le spectre du signal x(n) (composantes fréquentielles) en incluant les légendes.
Dans quelle bande de fréquences se situe le signal ? S’il y avait un signal à 5000Hz dans le
fichier we.dat, à quelle(s) fréquence(s) apparaitrait-il dans le spectre fréquentiel? Expliquer
la réponse.

3
II. Filtrage avec la FFT
Un signal biomédical est corrompu avec un signal sinusoïdal de bruit de fréquence 60 Hz. On veut
éliminer le bruit du signal capté avant l’enregistrement de ce dernier. La procédure suivie est

Signal Bloc DSP Bloc Signal de


d’entrée d’entrée de sortie sortie
AIC
illustrée par la figure suivante :
Le signal EEG est d’abord échantillonné dans le temps et passé à travers un convertisseur A/N.
Ensuite, le signal numérique obtenu subit un filtrage passe-bas avec une fréquence de coupure de
50 Hz pour éliminer le bruit. Finalement, le signal filtré passe par un convertisseur N/A et un filtre
de reconstruction avant l’enregistrement.
Le filtrage passe-bas consiste à calculer le spectre de Fourier du signal corrompu à l’aide de la
TFR, à modifiant ce spectre afin d’éliminer le bruit à 60 Hz, et à calculer la TFR inverse. La
modification du spectre se fait selon la règle:
 X (  ) si f  45 Hz

Y (  )  X (  ) si 45 Hz  f  60 Hz
 0 autrement

où α=1-(f-45)/15, X(ω) et Y(ω) représentent le spectre de Fourier original et modifié, et f =ω/2π.

On sait que :
- Le signal de départ ne possède pas de composantes de fréquence supérieure à 125Hz
- On veut obtenir un spectre de fréquences avec une résolution minimale de 1 Hz

a. Donner la fréquence d’échantillonnage et le nombre minimum de points requis pour la TFR.


b. Évaluer le nombre d’opérations requises pour effectuer la TFR, le filtrage et la TFR inverse
et discuter de la possibilité de réaliser le système avec la période d’échantillonnage choisie
et un DSP capable de multiplier et d’additionner en 50 ns.
c. Utiliser Matlab pour simuler un signal d’entrée corrompu avec l’équation
s(t=|sin(60t)|+0,4sin(120πt) et tracer son spectre de Fourier.
d. Écrire un programme Matlab pour simuler l’opération du système et vérifier son
fonctionnement en traçant la courbe du signal de sortie.
e. Reprendre le programme précédent en utilisant un filtre :
 X (  ) si f  58 Hz
Y( )  
 0 si f  58 Hz
Comparer le résultat obtenu avec le précédent et expliquer toute différence.

4
Exemple d’utilisation de la TFR avec Matlab :
% On commence par générer un axe des temps de 1024 points et un axe des
% fréquence de 512 points (1024/2). Par la suite, on va générer 4 cycles d'un
% signal de période 1 ms, ce qui implique une période d'échantillonnage
% de .001/256 ou encore une fréquence d'échantillonnage de 256 kHz. L'axe
% des fréquence consiste alors en 512 points qui vont de 0 à 128 kHz (w0=2pi/Te).

t=1/256*(0:1023); % Te=1/256 ms, t=0-4 ms


f=256/1024*(0:511); % f0=256/1024 khz, f=0-256 kHz, on prend seulement la 1ère moitié

% Il faut maintenant générer s1


s1=sin(2*pi*t);
for k=1:1024
if s1(k)<0 s1(k)=0.5; end;
end;

% Ensuite on calcule le spectre de Fourier du signal

S1=fft(s1);
SS1=abs(S1);
subplot(211), plot(t,s1), axis([0 4 -0.5 1]), title('signal');
subplot(212), plot(f(1:20),SS1(1:20)), title('Spectre d''amplitude');
pause

% Le signal est modulé par une porteuse a 20 kHz

phi=s1.*cos(40*pi*t);
PHI=fft(phi);
SPHI=abs(PHI);
subplot(211), plot(t,phi), axis([0 4 -1 1]), title('signal modulé par une porteuse a 20 kHz');
subplot(212), plot(f,SPHI(1:512)), axis([0 128 0 max(SPHI)]), title('Spectre d''amplitude');
pause

% Maintenant, on part le processus de demodulation synchrone (muliplication


% par la porteuse a nouveau, suivi d'un filtrage passe bas)

phi1=phi.*cos(40*pi*t);
PHI1=fft(phi1);
SPHI1=abs(PHI1);
subplot(211), plot(t,phi1), axis([0 4 -1 1]), title('signal demodulé avant filtrage');
subplot(212), plot(f,SPHI1(1:512)), axis([0 128 0 max(SPHI1)]), title('Spectre d''amplitude');
pause

% Un filtre de passe bas pas cher, pas cher


for k=100:900
PHI1(k)=0;
end;

% voici ce que donne le spectre filtré


SPHI2=abs(PHI1);
phi1=2*ifft(PHI1);
subplot(211), plot(f,SPHI2(1:512)), axis([0 128 0 max(SPHI1)]), title('Spectre d''amplitude
filtré');
subplot(212), plot(t,real(phi1)), axis([0 4 -0.5 1]), title('signal temporel correspondant') ;

Vous aimerez peut-être aussi