Вы находитесь на странице: 1из 16

Calcul de la composition frquentielle du signal audio

Jean-Paul Stromboni, pour les lves SI3,


ncessite un vido projecteur, dure 50mn , octobre 2013

Voici ce que vous devez savoir faire aprs cette sance :

Dfinir le spectre dun signal sinusodal


Dfinir la Transforme de Fourier Discrte (TFD) de taille N
Trouver la TFD des signaux constante et sinusode.
dcrire leffet sur la TFD de la taille du signal et celui de la
fentre de Hamming
Utiliser les fonctions fft(.) et spectrogram(.) de Scilab

T. D. : calculer et interprter spectre et spectrogramme

Savez vous rpondre aux questions suivantes ?


Quelle est linformation donne par le spectre
dun signal audio ?

Quelle est la rsolution frquentielle d'une


FFT de taille N= 32 si fe= 8kHz ?

Pourquoi diviser le spectre d'amplitude par la


taille N de la fentre temporelle ?

Quelle est la priode du spectre d'un signal


audio numrique chantillonn 22050Hz ?

Si on calcule M = 2048 valeurs de la TFD,


prciser les frquences fk si fe=8000Hz :

Quelle est la dure d'une fentre de 1024


chantillons, fe = 44100Hz

Donner la composition frquentielle de x(t)

Pourquoi limiter le calcul du spectre une


fentre de taille N chantillons ?

x(t ) cos (2000 t )


2

Composition frquentielle du signal audio, sance 4 SSII, oct. 2013 - page 1

Composition frquentielle ou spectre


Depuis Joseph Fourier (1768-1830), physicien et
mathmaticien franais, on sait dcomposer une
fonction du temps s(t) quelconque en une somme
de fonctions sinusodales, ou spectre :
Soit s(t), fonction du temps dfinie quelque soit t,
S(f) ci-dessous dtermine le spectre de s(t) :

S ( f ) s (t )e 2ift dt

Inversement, connaissant le spectre S(f) de s(t), on


peut dterminer s(t) :

s (t ) S ( f )e 2ift df

S(f) est une quantit complexe :


Si par exemple s(t) contient la seule frquence f:

s (t ) a f cos(2ft p f )
On aura :

S ( f ) a f et S ( f ) p f

Dans la suite, on se limite au spectre damplitude,


ou spectre :

spectre S ( f )
Composition frquentielle du signal audio, sance 4 SSII, oct. 2013 - page 2

Pour calculer le spectre dun signal discret, on


utilise la Transforme de Fourier Discrte (TFD)
Dfinition de la TFD : pour un signal x(t) chantillonn
la frquence fe, SCILAB calcule le spectre en limitant le
signal une fentre temporelle de N chantillons successifs:

X ( f ) n 0 x(n / f e )e2ifn / fe n0 xn e2ifn / fe


N 1

N 1

N est le nombre dchantillons utiliss


X(f) est le spectre de x(n/fe), n= 0 N-1
X(f) est priodique, la valeur de la priode est fe
|X(f)| est symtrique par rapport la frquence fe/2

Calcul de la TFD : par dfaut, Scilab calcule seulement N


valeurs X(fk) :

f k kfe / N , k 0, N 1

f f k 1 f k

fe
N

N 1

X ( f k ) X k xn e
n 0

(rsolution frquentielle)

2 ink
N

, f k kfe / M , k 0, N 1,

Augmentation de la prcision du calcul de la TFD:


on calcule M > N valeurs, dans lintervalle [0, fe[
Algorithme de F.F.T. (Fast Fourier Transform) : pour
calculer la TFD, Scilab, Matlab, Goldwave, Audacity,
utilisent un algorithme plus rapide : on prend une puissance
de 2 pour N, et on exploite les priodicits et symtries de
lexponentielle complexe de la formule.

Composition frquentielle du signal audio, sance 4 SSII, oct. 2013 - page 3

T.F.D. dun signal constant de taille N chantillons


(reprise du calcul fait en travaux dirigs)

rn x, 0 n N 1

(signal constant ou frquence nulle


ou fentre rectangulaire)

TFD(rn ) R( f ) x n0 e 2in ( f / f e )
N 1

1 e 2iN f / f e
R( f ) x
1 e 2 i f / f e
e i e i
sin( )
2i

e iNf / f e eiNf / f e e iNf / f e


R( f ) x if / f e
e
eif / f e e if / 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 )

spectre de rn

spectre (d'amplitude) de rn

Que valent :
1.
R(0)
2.
R(fe)
3.
R(-fe)
4.
R(fe/N)
5.
La priodicit du dnominateur
6.
La priodicit du numrateur
Composition frquentielle du signal audio, sance 4 SSII, oct. 2013 - page 4

Trac de R(f) (a = 0.75, N = 16, fe = 8kHz)


R( f ) a

sin(Nf / f e )
sin(16f / 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 fentre de taille 16
14

spectre d'amplitude

12
10
8
6
4
2
0

1000

2000

3000
4000
5000
frquenc e (Hz)

6000

7000

8000

Trac de |R(f)| sur une priode :[ 0, fe [


trouver fe/2 ? fe ?
maximum ? en f= ?
Nombre de lobes ? N ?
a=0.75, N=16, fe=8000, M=256
1
spec tre de x=0.75 fentre de taille 16
0.9
0.8

spectre/N

0.7
0.6
0.5
0.4
0.3
0.2
0.1
0

1000

2000

3000
4000
5000
frquenc e (Hz)

6000

7000

8000

Trac de |R(f)|/N :
Retrouver a ? N ? fe ?
Reporter les N valeurs de TFD calcules R(kfe/N), k= 0 N-1
Composition frquentielle du signal audio, sance 4 SSII, oct. 2013 - page 5

Extension la TFD dun signal sinusodal


sn a cos(2nf 0 / f e ), 0 n N 1
e 2in ( f 0 / f e ) e 2in ( f 0 / f e )
sn a cos(2nf 0 / f e ) a
2
TFD( sn ) S ( f ) a n 0 sn e 2nf / f e
N 1

e 2in ( f f 0 ) / f e e 2in ( f f 0 ) / f e
a n 0
2
a ( R( f f 0 ) R( f f 0 )) / 2
N 1

Trac de |S(f)|/N pour : a= 0.5, N=16, fe= 8000 Hz, f0=1000Hz


a=0.5, N=16, fe=8000, f0=1000, M=256
0.35
spectre de x=0.5 fentre de taille 16

spectre d'amplitude /N

0.3

0.25

0.2

0.15

0.1

0.05

1000

2000

3000
4000
5000
frquence (Hz)

6000

7000

8000

Trac de |S(f)|/N
sur une priode
Lire fe
R(f0)
R(fe-f0)
R(fe/N)=R(500)
a
f0
valeurs calcules
par la TFD ?
Si f0=1250Hz, et
N=16,
que prvoir ?

Composition frquentielle du signal audio, sance 4 SSII, oct. 2013 - page 6

Influence de N (fentre rectangulaire)


s= 0.75*cos(2*pi*440*t), D=0.04s, fe=8kHz
fentre 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
0.1
0
0

1000

2000

3000

4000

5000

6000

Lire
f0= 440 Hz
a0=0.75 (~0.8)
fe =
N =32
NTe =
f =250Hz
spectre/N <0.4
M=256 pts
tracs

frquence (Hz)

fentre 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
0.2

Lire :
f0=
a0=
fe =
N=
NTe =
f =
spectre/N =

0.1
0
0

1000

2000

3000

4000

5000

6000

frquence (Hz)

Composition frquentielle du signal audio, sance 4 SSII, oct. 2013 - page 7

Fentre de Hamming et fentre rectangulaire


rn r (nTe ) 1, 0 n N 1

(Rect)

hn h(nTe ) 0.54 0.46 cos(2n /( N 1)), 0 n N 1

(Hamming)

fentre de Hamming N=32


1.5
Hamming
Rect

Pas de fentre (None)


ou fentre rectangle

amplitude

0.5

fentre de Hamming
0
0

0.5

1.5

2.5

3.5

temps (s)

-3

x 10

Comparaison des spectres d'amplitude de ces deux fentres :


N=32, M=256 points calculs, D=N*Te=0.004, deltaf=250
1
Rect
0.9

Hamming

spectre normalis : fftshift( abs (fft)) / N

0.8
0.7

fe=
N=
dure=
fe/N=
fmin=
fmax=

0.6

Hamming
amplMax=0.53
nbLobes= 1
largeur=1000Hz

0.5
0.4
0.3
0.2
0.1
0
-4000

-3000

-2000

-1000

1000

frquence (Hz)

2000

3000

4000

Rectangle
amplMax=1
nbLobes=31
Largeur lobe
central: 500Hz

Composition frquentielle du signal audio, sance 4 SSII, oct. 2013 - page 8

Influence de N avec la fentre de Hamming


s= 0.75*cos(2*pi*440*t), D=0.04s, fe=8kHz
fentre 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

frquence (Hz)

Dessiner la
forme de la
fentre de
Hamming

fentre 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 fentre
rectangulaire

spectre/(N*0.53)

0.4
0.3
0.2
0.1
0
0

1000

2000

3000

4000

5000

6000

7000

8000

frquence (Hz)

Composition frquentielle du signal audio, sance 4 SSII, oct. 2013 - page 9

Calcul et trac du spectre avec Scilab


//dfinition du signal
fe=8000;
t=[0:16000]/fe;
f0=1000; f1=2000; a0=0.5; a1=0.75;
xt=a0*cos(2*%pi*f0*t)+a1*cos(2*%pi*f1*t);
//calcul et trac du spectre
N=256; // taille de la fentre
// avec fentre de Hamming,
xh=xt(1:N).*window('hm',N);
Xhf=fft(xh,-1);
xset("window",3)
clf
plot2d(fk,abs(Xhf/N))
xset("font size",4)
xtitle(["Spectre d''amplitude de xt avec fentre de Hamming, rsolution: ",...
string(fe/N)," Hz, taille=", string(N)]," frquence f(Hz)","|Xhf(f)|/N")
xgrid();

Composition frquentielle du signal audio, sance 4 SSII, oct. 2013 - page 10

Trac du spectrogramme avec Scilab


function [spectre]=spectrogram(y, D, fe)
// fentre de hamming
hamming=window('hm',D);
// calcul du spectre
spectre=[];
N=fix(length(y)/D)-1; //nbre de fentres
for k= 1:N
debut=1+(k-1)*D;
spe=1+abs(fft(y(debut:debut+D-1).*hamming));
spectre=[spectre;20*log10(spe(1:D/2)/D)];
end
fr=[0:D/2-1]*fe/D;
t=(0:N-1)*D/fe;
clf();
xset("colormap", coppercolormap(128))
colorbar(min(spectre),0)
grayplot(t',fr',spectre)
xtitle(["Spectrogramme fentre de taille: ",string(D)], 'temps (s)', 'frquence (Hz) )
endfunction
// spectrogramme avec fentre de Hamming
exec('spectrogram.sce');
spectre=spectrogram(xt,256,fe);

Composition frquentielle du signal audio, sance 4 SSII, oct. 2013 - page 11

Erreur de synchronisation de la TFD


Le signal s est compos de deux frquences 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 si f1 n'est pas


l'une des frquences calcules :
f0=500, f1=550, a=0, a1=0.25

spectre d'amplitude

f1

f1 k

fe
N

1
0
0

2000

4000

6000

8000

frquence (Hz)

2. risque de confusion, si f0 et f1 sont trop proches


f0=500, f1=625, a=0.25, a1=0.25

spectre d'amplitude

5
4
3

f1
f0

f 0 f1

fe
N

1
0
0

2000

4000

6000

8000

frquence (Hz)

Composition frquentielle du signal audio, sance 4 SSII, oct. 2013 - page 12

Exploitation du trac du spectre d'amplitude


sur les tracs suivants, retrouver : fe, N, a0 et f0, la dure
de la fentre temporelle et l'axe de symtrie.
Que vaut M ?
Que vaut f ?
Quelle est la relation entre les tracs ?
fe=8000, N=32, s=0.25*cos(2*pi*500*t)

spectre d'amplitude

5
4
3
2
1
0
0

2000

4000

6000

8000

6000

8000

frquence (Hz)

spectre d'amplitude

4
3

0
0

2000

4000
frquence (Hz)

Composition frquentielle du signal audio, sance 4 SSII, oct. 2013 - page 13

Spectre et spectrogramme (avec Goldwave)


Spectrogramme de s(t), fe=8kHz, f=500Hz, fentre rectangulaire, 30fps

s (t )

0.8
cos(6ft ) cos(10ft ) cos(14ft )
cos(2ft )

2

32
52
72

spectre = composition frquentielle

500 Hz, -28 dB


1500 Hz, -47 dB
2500 Hz, -56 dB
3500 Hz, -62 dB
20*log10(9)=19 dB
20*log10(25)=28 dB
20*log10(49) = 33 dB

Spectrogramme=spectre (temps)
Mettons quon calcule le spectre
30 fois par seconde :
cest donc environ 270
chantillons (8000/30) pour
calculer une TFD,
Et on runit tous ces rsultats avec
le temps en abscisse, cest le
spectrogramme

Composition frquentielle du signal audio, sance 4 SSII, oct. 2013 - page 14

Reprsentation 3D du spectrogramme
pour le signal vocal, on sait que la dure de la fentre
danalyse ne doit pas dpasser 30ms (?)

si fe=8 kHz, cest une fentre de 240 chantillons.


On calcule la TFD de la fentre,
on dplace la fentre et on recommence
On regroupe les rsultats dans un spectrogramme,
en 3D (cf. ci-dessous) ou en 2D (cf. Goldwave)
Quelle est ici la rsolution frquentielle ?

Comment obtenir une fentre de 20ms, sachant que


fe=22050Hz ? Donner la rsolution frquentielle.
Voici le spectrogramme de piano_c3.wav trac par
WaveLab : retrouver les informations de frquence
fondamentale, dure du signal, enveloppe

Composition frquentielle du signal audio, sance 4 SSII, oct. 2013 - page 15

Spectre et spectrogramme avec Audacity

spectre = composition frquentielle

Composition frquentielle du signal audio, sance 4 SSII, oct. 2013 - page 16

Вам также может понравиться