SÉANCE #1 (TP1)
ANALYSE SPECTRALE
OBJECTIF : Étude des contenus fréquentiels de deux phonèmes prononcés par une voix
humaine. Pour un rappel théorique, voir Annexe.
1 SÉRIE DE FOURIER
1.1 Théorie de base
Soit v(t), un signal périodique de période T. Ce signal peut être exprimé sous forme de série
exponentielle de Fourier :
2π nt
+j
v ( t ) = ∑ n Vn e T
[1.1]
Les coefficients Vn sont donnés par l’expression suivante :
2π nt
1 −j
( )
T T∫
Vn = v t e T
dt [1.2]
L’évaluation des coefficients Vn nous permet de déterminer la composition fréquentielle du signal
périodique v(t).
1.2 Programmation avec MATLAB
1.2.1 Représentation du signal
L’évaluation de l’expression [1.2] par ordinateur implique l’évaluation numérique d’une intégrale
à partir d’une représentation numérique du signal v(t). Cette représentation sera obtenue par la
lecture de K valeurs du signal dans un intervalle de T seconde . A noter :
Ts = T / K
v [ k ] = vc ( kTs )
v(t )
kT
=t = , k 0,1,, K −1
K
v(t)
t
0
T 2T 3T 4T ( K − 1) T T
K K K K K
-2-
1.2.2 Commande « fft »
Le logiciel MATLAB comporte une commande « fft » qui effectue un calcul correspondant à
l’évaluation numérique des coefficients de la série exponentielle de Fourier d’un signal par la
méthode des rectangles. On l’utilisera de la façon suivante :
V=fft(v)
où v est un vecteur de K points représentant le signal v [ n ]
Le vecteur résultant de la fft contient les K coefficients
V [ 0] V [1] V [ K − 1]
Puisque les indices de Matlab commencent par 1 plutôt que 0, les coefficients de Matlab sont listés
comme les valeurs complexes.
V [1] V [ 2] V [ K ] .
Rappel des commande utiles de Matlab :
ginput(2)
save test_1 voix
voix1= load test_1
-3-
2. TRAVAIL À EFFECTUER
2.1 Acquisition du signal
Vous aurez à étudier la composition fréquentielle de deux phonèmes que vous enregistrerez vous-
même à l’aide d’un télephone et chargerez dans l’outil Simulink. Accédez à Simulink
et reproduisez le schéma suivant :
Boîte « From Multimedia File » (librairie DSP System Tool Box/Sources)
Cet élément permet d’importer un fichier audio préenregistré et sauvegardé sur ordi. Fixez les
paramètres suivants :
desired sample time = (elle vous sera précisée au laboratoire)
sample par audio channel =1
Decocher la case inherit sample time from file.
1ère boîte « Digital Filter Design » (librairie DSP System Tool Box / Filtering / Filter
implementation/ Filter Designs)
-4-
Ce filtre IIR coupe les hautes fréquences du signal, contribuant ainsi à réduire le bruit. Fixez les
paramètres suivapnts :
Méthode de design = Butterworth, IIR
Type de filtre = Passe-bas
Ordre = 4
Fréquence de coupure normalisée = 0.25 (correspond à 0.125 × la fréquence d’échantillonnage)
Boîte « Slider Gain » (librairie Simulink / Math Operations)
Cet élément sert à amplifier le signal. Fixez le gain à 5 (à ajuster si vous constatez que cette valeur
ne convient pas). e.g. 0 20 20
2e boîte « Digital Filter Design » (librairie DSP System Tool Box / Filtering / Filter
implementation/ Filter Designs)
Ce filtre IIR passe-haut coupe toute composante continue d-c s’étant infiltrée dans le système.
Fixez les paramètres suivants :
Méthode de design = Butterworth, IIR
Type de filtre = Passe-haut
Ordre = 4
Fréquence de coupure normalisée= 0.005 (correspond à 0.0025 × la fréquence d’échantillonnage)
Boîte « To Multimedia File » (librairie: DSP System Tool Box / Sinks / To multimedia file)
Cet élément sert à enregistrer le signal dans un fichier « .wav ». Fixez les paramètres suivants :
Nom du fichier = voix (ou tout autre nom de votre choix), puis cliquez sur ``Save as`` et enregistrez
dans votre dossier de TP
Précision = 16 bits integer
Audio compress : No.
Si le signal comporte des valeurs en dehors de la marge [-1 +1], celles-ci seront écrêtées avant
d’être enregistrées. Une forte distorsion sera alors présente lorsque le fichier [Link] sera ouvert.
Diminuer adéquatement le gain de la boîte « Slider Gain » permet d’éviter ce problème.
Boîte « Signal To Workspace » (librairie Simulink / Sinks)
Cet élément sert à copier le signal dans MATLAB. Fixez les paramètres suivants :
-5-
Nom de la variable = voix (ou tout autre nom de votre choix)
Nombre maximum de rangées = inf (pour infini ; tous les échantillons seront conservés)
Facteur de décimation = 1
Temps d’échantillonnage = -1
Format de sauvegarde = Array
2-D array concat. Along first dimension.
Pour enregistrer le phonème à analyser, nous vous proposons la procédure suivante :
• Branchez le microphone à l’entrée appropriée de l’ordinateur (Entrée de couleur rose).
• Fixez la durée de la simulation à une seconde (onglet Simulation / Parameters / Solver :
Stop time = 1).
• Juste avant de démarrer l’enregistrement ) , commencez à prononcer un
phonème voisé d’une façon continue (exemple : « haaaaaaaaaaa…ou
hiiiiiiiiiiiiiiiiiiiiiii ») en le maintenant jusqu’à la fin de l’enregistrement (dont
la durée a été fixée à une seconde). Vous pouvez vous amuser à « forcer » votre voix pour
la rendre plus aiguë ou plus grave que sa tonalité habituelle. (Pour les voix très aiguës,
il serait préférable d’augmenter la fréquence de coupure du filtre passe-bas à 0.4 ou 0.5, par
exemple).
Vous pouvez écouter votre enregistrement en faisant jouer le fichier [Link] que Simulink a
produit (si la distorsion est trop forte, c’est que le gain de la boîte « Slider Gain » est trop élevé).
La qualité du signal n’apparaîtra pas très élevée car le filtre passe-bas ne laisse passer que les
basses fréquences du signal (elles sont toutefois suffisantes pour l’analyse).
2.2 Analyse
Dans MATLAB, vous pouvez récupérer la version numérisée de votre phonème dans le vecteur
« voix ». Attention ! Ce vecteur contient plusieurs milliers de points (la liste des variables actives
et leurs dimensions sont données par la commande « whos »). Vous devrez isoler une partie du
signal.
Pour faire afficher les coordonnées d’un point sur une figure cliquer sur Data Cursor et ensuite sur
le point.
-6-
Pour simplifier le traitement on choisira K comme étant le nombre de points dans une seule
période du signal. Commencez par afficher quelques centaines de points (avec par exemple
plot(voix(2000:2600))) pour visualiser les détails du signal et en extraire visuellement
une seule période. Déduire la valeur de K.
Générez le vecteur signal (avec v=voix(6000:6000+K-1), par exemple) qui sera analysé.
Le premier but de ce travail est une comparaison temporelle de trois signaux, à savoir, deux
enregistrements successifs de la voyelle « a », et un enregistrement de la voyelle « i ». Les deux
premiers doivent se ressembler. Le troisième devrait avoir une forme distincte, différente des deux
premiers.
Le deuxième but est d’évaluer la fréquence fondamentale de chacun de ces mêmes trois signaux.
On devrait obtenir la même valeur, ou presque, des deux premiers signaux, et une différente pour
le troisième.
Le troisième but de ce travail est d’effectuer une analyse spectrale du premier signal, ainsi
observant le spectre discret du premier enregistrement de la voyelle « a ». Il serait bien d’afficher
le spectre complet, ainsi que afficher un nombre restreint de coefficients.
Voir et répondre aux questions posées au cahier de charges.
-7-
Annexe : Rappel pour ce TP
Évaluation de la série de Fourier par la fft
M. Corinthios, "Signals, Systems, Transforms and Digital Signal Processing with MATLAB
©", Francis and Taylor CRC Press 2009.
Fig.1
Pour évaluer numériquement la série de Fourier d’un signal continu périodique vc ( t ) de période τ par la fft, voir
Fig. 1, une période est extraite et échantillonnée avec un pas d’échantillonnage Ts ≡ Te . Ceci produit une séquence
v [ n ] tel que
v [ n ] = vc ( nTs )
Voir Fig. 2.
Fig. 2.
-8-
SoitN le nombre d’échantillons dans la période τ . Nous avons les relations
Ts = 1/ f s
où f s est la fréquence d’échantillonnage (en Hz).
=τ NT = s N / fs
1 1 f
La fréquence fondamentale f 0 est par définition f 0= = = s .
τ NTs N
La transformée en z de v [ n ] est
N −1
V ( z ) = ∑ v [ n] z − n
n =0
La transformée de Fourier de v [ n ] est la même transformée en z mais évaluée sur le cercle
unitaire, c.a.d. évaluée sur le cercle dans le plan z de rayon r = 1
jΩ
= z re = e jΩ
Voir Fig. 3.
Fig.3
La transformée de Fourier de v [ n ] est alors
N −1
V ( e jΩ ) = ∑ v [ n ] e − jΩn
n =0
Une relation importante existe entre la fréquence ω dans le domaine continu et la fréquence au
domaine discret qui est l’angle Ω autour du cercle unitaire dans le plan z. En particulier,
Ω =ωTs .
Si par exemple le signal est vc ( t ) = cos ω0t , où ω0 = 1000π r/s, et si la fréquence
d’échantillonnage est f s = 4000 Hz, alors v [=
n ] cos ω0 nT
=s cos Ω0 n , ce qui est une sinusoïde de
fréquence Ω=0 ω0T=s 1000π / 4000= π / 4.
Le sommet spectral d’une telle sinusoïde paraitra donc a un angle Ω=
0 ω0T=
s π /4.
-9-
La transformée discrète de Fourier TDF de v [ n ] est la discrétisation de la transformée de Fourier.
Ceci est fait par l’échantillonnage du cercle unitaire uniformément en N points. On remplace alors
2π
la variable Ω par un multiple du pas d’échantillonnage ∆Ω = , ayant divisé le cercle en N
N
points. Voir Fig. 4 pour le cas N = 16 .
Fig.4
Nous écrivons alors
2π
Ω k = k ∆Ω = k
N
et nous avons ainsi la transformée discrète de Fourier TDF (DFT), (aussi appelée la Série
discrète de Fourier DFS).
j 2Nπ k N −1 2π
− j kn
V [ k ] V=
e ∑ v [ n] e =
N
, k 0, 1, ..., N − 1
n =0
Rappelons que les coefficients de la série de Fourier du signal continu vc ( t ) sont donnés par
2π
1 τ − jn
Vn = ∫ vc ( t ) e τ
dt
τ 0
Après l’échantillonnage de vc ( t ) qui produit la séquence v [ n ] , on notera que la DFT remplace
simplement l’intégration par une somme de rectangles, ce qui donne les coefficients V [ k ] .
L’instruction fft de Matlab calcule la TDF d’une séquence efficacement.
Il est a noter que le spectre de Fourier V [ k ] est la transformée de Fourier échantillonnée, vue en
tournant autour du cercle de l’angle Ω =0 a Ω =2π dans le sens antihoraire. Le début est la valeur
k = 0 qui représente la fréquence zéro. La fin est k= N − 1 qui représente = Ω 2π ( N − 1) / N ≈ 2π
, l’angle qui correspond a la fréquence dans le domaine continu
ω =Ωf s ≈ 2π f s ≡ ωs , c.a.d. la fréquence d’échantillonnage en r/s.
Pareillement, le point k = N / 2 se trouve sur le cercle a Ω =π et correspond dans le domaine
continu a la fréquence ω =Ωf s ≈ π f s ≡ ωs / 2 , c.a.d. la moitié de la fréquence d’échantillonnage.
On pourrait réafficher les coefficients V [ k ] de la TDF pour qu’ils correspondent a
l’échantillonnage du cercle unitaire en allant de Ω = −π a Ω = π en utilisant
l’instruction fftshift, après avoir appelé fft.
- 10 -