Transcript Document

Calcul de la composition fréquentielle du signal audio
Jean-Paul Stromboni, pour les élèves SI3,
nécessite un vidéo projecteur, durée 50mn , octobre 2012
Voici ce que vous devez savoir faire après cette séance :





Définir le spectre d’un signal sinusoïdal
Définir la Transformée de Fourier Discrète (TFD) de taille N
Trouver la TFD des signaux constante et sinusoïde.
Mesurer l’effet de la taille du signal de de la fenêtre d’apodisation
Utiliser les fonctions fft(.) et spectrogram(.) de MATLAB
Travaux Dirigés : calculer et exploiter TFD et FFT
Savez vous répondre aux questions suivantes ?
Quelle est l’information donnée par le spectre
d’un signal audio ?
Quelle est la résolution fréquentielle d'une
FFT de taille N= 32 si fe= 8kHz ?
Pourquoi diviser le spectre d'amplitude par la
taille N de la fenêtre temporelle ?
Quelle est la période du spectre d'un signal
audio numérique échantillonné à 22050Hz ?
Si on calcule M = 2048 valeurs de la TFD,
préciser les fréquences fk si fe=8000Hz :
Quelle est la durée d'une fenêtre de 1024
échantillons, à fe = 44100Hz
Donner la composition fréquentielle de x(t)
Pourquoi limiter le calcul du spectre à une
fenêtre de taille N échantillons ?
x(t )  cos (2000t )
2
Composition fréquentielle du signal audio, séance 4 SSII, oct. 2012 - page 1
Composition fréquentielle ou spectre
 Depuis Joseph Fourier (1768-1830), physicien et
mathématicien français, on sait décomposer une
fonction du temps s(t) quelconque en une somme
de fonctions sinusoïdales, ou spectre :
 Soit s(t), fonction du temps définie quelque soit t,
S(f) ci-dessous détermine le spectre de s(t) :

S ( f )   s(t )e2ift dt

 Inversement, connaissant le spectre S(f) de s(t), on
détermine s(t) par :

s(t )   S ( f )e 2ift df

 S(f) est une quantité complexe :
 Si la composante fréquentielle de s(t) à la fréquence
f s’exprime par :
s f (t )  a f  cos(2ft  p f )
 On aura :
a f  S ( f ) et
p f  S ( f )
 Dans la suite de ce cours, on se limite au module
de S(f), c’est-à-dire au spectre d’amplitude :
spectre S ( f )
Composition fréquentielle du signal audio, séance 4 SSII, oct. 2012 - page 2
Matlab, Scilab, Goldwave, utilisent la Transformée
de Fourier Discrète (TFD) pour calculer le spectre
 Définition de la TFD : pour un signal x(t) échantillonné à
la fréquence fe, MATLAB calcule le spectre en limitant le
signal à une fenêtre temporelle de N échantillons :
X ( f )  n 0 x(n / f e )e 2ifn / f e  n 0 xn e 2ifn / f e
N 1




N 1
X(f) est le spectre de x(n/fe),
X(f) est périodique, la valeur de la période est fe
|X(f)| est symétrique par rapport à la fréquence fe/2
la fenêtre de calcul dure NTe (contient N échantillons)
 Calcul de la TFD : en pratique, on calcule seulement N
valeurs de la TFD, les X(fk) pour les seules fréquences fk :

f k  kfe / N , k  0N  1
  f  f k 1  f k 
 X ( fk )  X k 
fe
est la résolution fréquentielle
N
N 1
x
n 0
n
e

2ink
M
, f k  kfe / M , k  0 M  1,
 Note : pour mieux reconstruire la fonction X(f), on peut
calculer et afficher M > N valeurs au lieu de N
 Algorithme de transformée de Fourier rapide (en
anglais Fast Fourier Transform)
 Si N est une puissance de 2, on accélère le calcul du fait
des périodicités et symétries des exponentielles complexes
 Matlab, Scilab, Goldwave, … utilisent l’algorithme de
FFT pour calculer la transformée de Fourier discrète
Composition fréquentielle du signal audio, séance 4 SSII, oct. 2012 - page 3
Calcul de la T.F.D. du signal constant de taille N
 TFD de la fonction constante, du signal de fréquence
nulle, ou de la fenêtre rectangulaire de durée NTe
rn  x, 0  n  N 1
TFD (rn )  R( f )  x  n 0 e 2in ( f / f e )
N 1
1  e 2iN f / f e
R( f )  x 
1  e  2i f / f e
e iNf / f e eiNf / f e  e iNf / f e
R( f )  x  if / f e
e
eif / f e  e if / f e
sin(Nf / f e )
R( f )  x  e i ( N 1) f / f e
sin( f / f e )
R( f )  x 
sin(Nf / f e )
sin(f / f e )
Que valent :
1. R(0)
2. R(fe)
3. R(-fe)
4. R(fe/N)
5. La périodicité du dénominateur
6. La périodicité du numérateur
Composition fréquentielle du signal audio, séance 4 SSII, oct. 2012 - page 4
Analyse d’un exemple : x = 0.75, N = 16, fe = 8kHz
R( f )  x 
sin(Nf / f e )
sin(16f / 8000)
 0.75
sin(f / f e )
sin(f / 8000)
a=0.75, N=16, fe=8000, M=256
16
spec tre de x=0.75 fenêtre de taille 16
14
Tracé sur
une période
[ 0, fe [
spectre d'amplitude
12
10
8
Relation
entre
[0,fe/2] et
[fe/2, fe] ?
6
4
2
0
0
1000
2000
3000
4000
5000
fréquenc e (Hz)
6000
7000
8000
a=0.75, N=16, fe=8000, M=256
1
spec tre de x=0.75 fenêtre de taille 16
Tracé de
spectre/N
entre 0 et fe
0.9
0.8
spectre/N
0.7
0.6
0.5
0.4
0.3
0.2
0.1
0
0
1000
2000
3000
4000
5000
6000
fréquenc e (Hz)
a=0.75, N=16, fe=8000, M=256
7000
8000
1
spec tre de x=0.75 fenêtre de taille 16
0.9
Tracé de
spectre/N :
reporter les N
valeurs
calculées
R(kfe/N),
k= 0 … N-1
0.8
spectre/N
0.7
0.6
0.5
0.4
0.3
0.2
0.1
0
0
1000
2000
3000
4000
5000
fréquenc e (Hz)
6000
7000
8000
Composition fréquentielle du signal audio, séance 4 SSII, oct. 2012 - page 5
TFD du signal sinusoïdal (sans calcul)
sn  x  cos(2nf0 / f e ), 0  n  N 1
e 2in ( f 0 / f e )  e 2in ( f 0 / f e )
sn  x  cos(2nf0 / f e )  a 
2
TFD( sn )  S ( f )  x  n 0 sn e 2nf / f e
N 1
 x  n  0
N 1

e  2in ( f  f 0 ) / f e  e  2in ( f  f 0 ) / f e
2
x
 ( R( f  f 0 )  R( f  f 0 ))
2
Analyser le spectre d’amplitude suivant (où |S(f)| est déjà divisé par N)
a=0.5, N=16, fe=8000, f0=1000, M=256
0.35
spectre de x=0.5 fenêtre de taille 16
Tracé de |S(f)|/N
sur une période
0.3
spectre d'amplitude
0.25
0.2
0.15
0.1
0.05
0
0
1000
2000
3000
4000
5000
fréquence (Hz)
6000
7000
8000
Lire fe
R(f0)
R(fe-f0)
R(fe/N)
a
et f0
Placer les N= 16
valeurs calculées
par la TFD
f0 varie de 100
Hz, que prévoir ?
Composition fréquentielle du signal audio, séance 4 SSII, oct. 2012 - page 6
Influence du nombre N d’échantillons
(fenêtre rectangulaire, ou pas de fenêtre)
s= 0.75*cos(2*pi*440*t), D=0.04s, fe=8kHz
fenêtre rectangle N=32
1
signal s
0.5
0
-0.5
-1
0
0.005
0.01
0.015
0.02
0.025
0.03
0.035
0.04
7000
8000
temps (s)
spectre d'amplitude/N, N=32 M=256
0.4
spectre/N
0.3
0.2
f0=
a0=
fe =
N=
NTe =
f =
spectre/N =
0.1
0
0
1000
2000
3000
4000
5000
6000
fréquence (Hz)
fenêtre rectangle N=256
1
signal s
0.5
0
-0.5
-1
0
0.005
0.01
0.015
0.02
0.025
0.03
0.035
0.04
7000
8000
temps (s)
spectre d'amplitude/N, N=256 M=2048
0.4
spectre/N
0.3
f0=
a0=
fe =
N=
NTe =
f =
spectre/N =
0.2
0.1
0
0
1000
2000
3000
4000
5000
6000
fréquence (Hz)
Composition fréquentielle du signal audio, séance 4 SSII, oct. 2012 - page 7
Influence de la fenêtre de Hamming
r(n)  1, 0  n  N  1
h(n)  0.54  0.46cos(2n /( N  1)),0  n  N  1
fenêtre de Hamming N=32
1.5
Hamming
Rect
amplitude
1
0.5
0
0
0.5
1
1.5
2
2.5
3
3.5
temps (s)
-3
x 10
Comparaison des spectres d'amplitude de ces deux fenêtres :
N=32, M=256 points calculés, D=N*Te=0.004, deltaf=250
1
Rect
0.9
Hamming
spectre normalisé : fftshift( abs (fft)) / N
0.8
0.7
fe=
N=
durée=
fe/N=
fmin=
fmax=
0.6
Hamming
amplMax=
nbLobes=
largeur=
0.5
0.4
0.3
0.2
0.1
0
-4000
-3000
-2000
-1000
0
1000
fréquence (Hz)
2000
3000
4000
Rectangle
amplMax=
nbLobes=
largeur:
Composition fréquentielle du signal audio, séance 4 SSII, oct. 2012 - page 8
Influence de la taille N du signal dans le
cas de la fenêtre de Hamming
s= 0.75*cos(2*pi*440*t), D=0.04s, fe=8kHz
fenêtre de Hamming N=32
1
signal s
0.5
0
-0.5
-1
0
0.005
0.01
0.015
0.02
0.025
0.03
0.035
0.04
7000
8000
temps (s)
spectre d'amplitude/(N*0.53), N=32 M=256
spectre/(N*0.53)
0.4
0.3
f0=
a0=
fe =
N=
NTe =
f =
spectre/N =
0.2
0.1
0
0
1000
2000
3000
4000
5000
6000
fréquence (Hz)
Dessiner la
forme de la
fenêtre de
Hamming
fenêtre de Hamming N=256
1
signal s
0.5
0
-0.5
-1
0
0.005
0.01
0.015
0.02
0.025
0.03
0.035
0.04
temps (s)
spectre d'amplitude/(N*0.53), N=256 M=2048
Comparer au
spectre
obtenu avec
la fenêtre
rectangulaire
spectre/(N*0.53)
0.4
0.3
0.2
0.1
0
0
1000
2000
3000
4000
5000
6000
7000
8000
fréquence (Hz)
Composition fréquentielle du signal audio, séance 4 SSII, oct. 2012 - page 9
Erreur ou problème de synchronisation
On illustre avec le signal s suivant composé d'une
ou de deux fréquences f0 et f1 :
s=a*cos(2*pi*f0*t)+a1*cos(2*pi*f1*t)
1. erreur sur l'amplitude et sur la position de la raie
si f1 n'est pas l'une des fréquences calculées :
f0=500, f1=550, a=0, a1=0.25
spectre d'amplitude
4
3
2
1
0
0
2000
4000
6000
8000
fréquence (Hz)
2. risque de confusion, si les deux composantes de
fréquence sont trop proches
f0=500, f1=625, a=0.25, a1=0.25
spectre d'amplitude
5
4
3
2
1
0
0
2000
4000
6000
8000
fréquence (Hz)
Composition fréquentielle du signal audio, séance 4 SSII, oct. 2012 - page 10
Spectre et spectrogramme (avec Goldwave)
Spectrogramme de s(t), fe=8kHz, f=500Hz, fenêtre rectangulaire, 30fps
s (t ) 
0.8 
cos(6ft ) cos(10ft ) cos(14ft ) 
cos(2ft ) 



2 
 
32
52
72

spectre = composition fréquentielle
Spectrogramme=spectre (temps)
Composition fréquentielle du signal audio, séance 4 SSII, oct. 2012 - page 11
Spectre et spectrogramme avec MATLAB
fe=8000; N=4096;
t=[0:16000]/fe;
s=0.5*cos(2*pi*1000*t)+ 0.75*cos(4000*pi*t);
f=[-N/2:N/2-1]*fe/N;
spec= fftshift(fft(s(1:N)))
plot(f,abs(spec)), grid, figure
spectrogram(s,hamming(N),N/2,N,fe,'yaxis')
colorbar
400
350
300
250
200
150
100
50
0
-5000
0
5000
Noter pour le spectrogramme :
1. la fenêtre utilisée est une fenêtre de Hamming
2. le code de couleurs donnant l’amplitude en dB est à droite
4000
-20
3500
-40
3000
-60
Frequency (Hz)
2500
-80
2000
1500
-100
1000
-120
500
-140
0
0.5
1
1.5
Time
Composition fréquentielle du signal audio, séance 4 SSII, oct. 2012 - page 12
Exploitation du tracé du spectre d'amplitude
 sur les tracés suivants, retrouver : fe, N, a0 et f0, la durée
de la fenêtre temporelle et l'axe de symétrie.
Que vaut M ?
Que vaut f ?
Quelle est la relation entre les tracés ?
spectre d'amplitude
5
4
3
2
1
0
0
2000
4000
6000
8000
6000
8000
fréquence (Hz)
spectre d'amplitude
4
3
2
1
0
0
2000
4000
fréquence (Hz)
Composition fréquentielle du signal audio, séance 4 SSII, oct. 2012 - page 13
Représentation 3D du spectrogramme
 pour le signal vocal, on sait que la durée de la fenêtre
d’analyse ne doit pas dépasser 30ms (?)




si fe=8 kHz, c’est une fenêtre de 240 échantillons.
On calcule la TFD de la fenêtre,
on déplace la fenêtre et on recommence
On regroupe les résultats dans un spectrogramme,
en 3D (cf. ci-dessous) ou en 2D (cf. Goldwave)
 Quelle est ici la résolution fréquentielle ?
 Comment obtenir une fenêtre de 20ms, sachant que
fe=22050Hz ? Donner la résolution fréquentielle.
 Voici le spectrogramme de piano_c3.wav tracé par
WaveLab : retrouver les informations de fréquence
fondamentale, durée du signal, enveloppe …
Composition fréquentielle du signal audio, séance 4 SSII, oct. 2012 - page 14