L'objectif de la segmentation en caractéristiques est d'indexer des segments de son -- ou encore : de poser des étiquettes sur des segments de son -- dont la taille soit de l'ordre de la seconde, ceci principalement dans le but d'aider à la segmentation en notes ou en phones (ou, plus généralement, en zones stables) (voir la partie précédente). D'abord, il s'agit de déterminer quelles fonctions d'observation sont utilisables pour la segmentation en zones stables. Ensuite, pour certaines catégories de sons, il faut calculer certaines fonctions d'observation (l'extraction des fonctions d'observation est la première étape de la segmentation en zones stables) d'une façon différente de la façon utilisée pour les sons << simples >>, c'est-à-dire monophoniques, voisés harmoniques et non modulés.
Nous avons considéré les caractéristiques suivantes :
. Si un vibrato est détecté, nous déterminons ses paramètres (fréquence, amplitude, phase). Voir les chapitres chap:traitvib à chap:fusiovib.
Dans Article:Monta1, une technique basée seulement sur l'énergie est proposée. Dans Article:Jacobs, une sorte d'inventaire (<< survey >>) des méthodes de détection des silences est donnée.
Ce niveau de segmentation concerne donc l'étiquetage de segments de sons avec ces caractéristiques. Cet étiquetage a pour base l'extraction de fonctions d'observation. Certaines de ces fonctions d'observation sont utilisées pour la segmentation en zones stables.
Le cas du vibrato est développé en détails dans le reste de cette partie. Dans les chapitres suivants, nous nous attacherons aux problèmes de la détection du vibrato, de l' estimation de ses paramètres, et de sa suppression sur le trajet de
. L'absence ou la présence de vibrato est l'une des étiquettes définies dans la section sect:seca. Le vibrato posant de grands problèmes quand il s'agit de segmenter en zones stables, nous nous sommes particulièrement intéressé à la résolution de ces problèmes.
Dans Book:Zwicker, pages 63 -- 66, une limite psychoacoustique est donnée. Quand la valeur de l'amplitude
de la modulation est plus petite qu'un certain seuil, elle n'est pas entendue. Il s'agit de ce qui est appelé le seuil différentiel de fréquence. Ce seuil dépend de la fréquence
du son pur (<< pur >> veut dire parfaitement sinusoïdal). Au-dessous de
, il est à peu près indépendant de la fréquence et vaut
. Au-delà de
, il croît à peu près linéairement avec la fréquence
et vaut approximativement
. Mais ce seuil dépend aussi de la fréquence de modulation
: les mesures que nous venons d'indiquer sont valables pour
; il dépend aussi du niveau sonore ; et il vaut pour les sons purs, pas pour les sons complexes (<< complexe >> veut dire composé d'une somme de sinusoïdes, de partiels harmoniques ou non). Nous n'avons donc pas utilisé ce critère pour la prise de décision.
Nous présentons dans le deuxième chapitre (chapitre chap:traitvib) de cette partie le problème du vibrato.
Dans le troisième chapitre (chapitre chap:vibson) de cette partie, les trois méthodes basées sur l'analyse directe des signaux sonores que nous avons implémentées pour détecter le vibrato sont explicitées. Certaines d'entre elles nous permettent d'estimer les paramètres du vibrato.
Dans le quatrième chapitre (chapitre det_vib_f0) de cette partie, les trois méthodes basées sur l'analyse des trajets de
que nous avons implémentées pour détecter le vibrato sont explicitées. Certaines d'entre elles nous permettent d'estimer les paramètres du vibrato.
Dans le cinquième chapitre (chapitre chap:perfvib) de cette partie, nous discutons et comparons les performances de ces méthodes sur des signaux réels.
Nous présentons dans le sixième chapitre (chapitre met_sup_vib) de cette partie la méthode de suppression du vibrato sur le trajet de
(pour l'aide à la segmentation en zones stables notamment) que nous avons utilisée.
Dans le septième chapitre (chapitre chap:fusiovib) de cette partie les techniques de fusion de données utilisées dans le cas du vibrato sont introduites.
Le huitième chapitre (chapitre chap:concvib) de cette partie constitue une conclusion à cette partie.
Nous nous intéressons au vibrato d'abord dans le but de le détecter, puis d' estimer ses paramètres, et enfin de le supprimer sur le trajet de
. Ainsi, il est nécessaire de détecter le vibrato, d'estimer ses paramètres et de le supprimer sur le trajet de
:
) : ceci concerne la détection, et la suppression
Le vibrato détériore en fait les performances des algorithmes de segmentation en zones stables décrits dans la partie part:seg_mon_har. La nécessité de la suppression du vibrato sur le trajet de
réside en ce que son amplitude peut être supérieure à celle du saut de fréquence entre deux notes. Nous donnons sur la figure sivisist un exemple de ce que nous pourrions avoir à l'extrême. Le trajet de
d'un son simulé est présenté. Nous avons modélisé le vibrato par une sinusoïde pure de fréquence
et de phase
. Les deux notes jouées sont un
(
) suivi d'un
(
). L'amplitude du vibrato est
. Pour le modèle de transition en fréquence entre les deux notes utilisé, voir la section ssse:modefre. Nous avons pris
et
.
Quand un vibrato est présent la détection de la transition entre les deux notes (avec la fonction d'observation << valeur absolue de la dérivée de
>> par exemple) devient problématique (voir la figure fig:pourq, page fig:pourq). Nous devons supprimer ce vibrato sur le trajet de
avant de calculer la fonction d'observation.
Mais il est intéressant aussi de pouvoir, pour un extrait sonore, supprimer le vibrato sur le trajet de
, ajouter un autre vibrato sur le trajet de
une fois le vibrato initial supprimé, puis resynthétiser le son avec ce nouveau trajet de
.
Auparavant, il faut déterminer si un vibrato est présent ou non.
Pour une note donnée, le vibrato correspond à une variation quasi périodique de
autour de sa valeur centrale. Cette variation n'est pas forcément sinusoïdale : il faut modéliser le vibrato comme une somme de sinusoïdes (d'harmoniques du vibrato !) dont les amplitudes et les fréquences instantanées varient dans le temps. La fréquence fondamentale du vibrato est en général comprise entre
et
.
Le trémolo correspond à une modulation de l'amplitude de même que le vibrato correspond à une modulation de la fréquence. Il faut le supprimer, lui, sur le trajet de l'énergie. La plupart des méthodes décrites dans cette partie pour résoudre le problème du vibrato sont adaptables au cas du trémolo.
Mais, auparavant, nous allons présenter, dans la section suivante (section sect:modelef0), les modèles du trajet de
quand un vibrato est présent mis en place.
Nous nous intéressons dans cette section à la modélisation du trajet de la fréquence fondamentale
quand un vibrato est présent. La fréquence fondamentale
instantanée à l'instant
s'écrit :
où :
, est la composante continue, représentant la hauteur du son, la note jouée : il s'agit de ce que nous voulons retrouver après suppression du vibrato sur le trajet de
(voir le chapitre met_sup_vib).
, est le nombre d'harmoniques du vibrato pris en compte.
, est l'amplitude instantanée de l'harmonique du vibrato de numéro d'ordre
.
, est la phase instantanée de l'harmonique du vibrato de numéro d'ordre
. Nous avons :
, est la période d'échantillonnage du trajet de
.
, est la fréquence instantanée du premier harmonique du vibrato.
, est un résidu de modélisation.
Dans cet exposé, nous avons essayé d'extraire seulement la << fréquence fondamentale >>
du vibrato[Note : Voir la section sect:harmvib, où nous montrons pour un signal sonore réel que les amplitudes des harmoniques du vibrato de numéros d'ordre supérieurs sont très petites, tellement petites que nous pouvons considérer que ces harmoniques du vibrato sont absents.]. De plus, si nous faisons l'hypothèse que la hauteur du son est stable sur une note, que les paramètres du vibrato (fréquence, amplitude, phase) ne changent pas sur une note, et qu'il n'y a pas de résidu de modélisation, nous avons, pour chaque note :
où
est la phase à l'origine du vibrato ; et l'évolution de la phase du signal
s'écrit :
Alors :
Nous modélisons le saut en fréquence entre deux sinusoïdes de fréquences respectives
et
par :
où
représente le moment où le saut en fréquence a lieu,
la rapidité à laquelle ce saut se fait, et
l'amplitude du saut. Ainsi,
. Quand
tend vers
,
tend vers
; et quand
tend vers
,
tend vers
: ainsi,
passe de
à
. La phase s'écrit :
Pour une somme
de
sinusoïdes harmoniques, la fréquence fondamentale variant comme indiqué ci-dessus, nous avons :
Si, en plus, un vibrato est présent, de fréquence et d'amplitude fixes, nous obtenons :
Avec
(
),
(
),
et
, nous obtenons le trajet de la fondamentale présenté sur la figure aa.
Les variations d'amplitude (modulation, naissance ou mort d'un partiel) sont modélisées dans les
: voir la section ssse:am.
Nous faisons l'hypothèse que l'amplitude de chaque partiel passe de
(amplitude au cours de la première note) à
(amplitude au cours de la seconde note), en s'approchant de 0 au << moment >> de la transition.
et
peuvent être modulés (trémolo). Nous modélisons l'amplitude
de chaque partiel ainsi :
L'amplitude du partiel passe par son minimum entre
et
(donc
est plus grand que
).
représente la rapidité de la chute de la première note, et
la rapidité de l'attaque de la seconde note. Avec
,
,
et
,
,
, nous obtenons le trajet de l'amplitude présenté sur la figure bb.
Considérons une portion de l'extrait de flûte flute.sf. Ce signal a été enregistré en salle anéchoïque, donc la réverbération est nulle : ainsi, la fin d'une note ne se superpose pas au début de la note qui suit. La portion de signal considérée couvre le premier changement de note : nous passons d'un
(
) à un
(
). Elle est donnée sur la figure ffsig. Les figures ffamp1 et ffamp2 présentent respectivement le trajet en fréquence et le trajet en amplitude de la fondamentale pour cette portion du signal. La fréquence de la fondamentale et son amplitude ont été déterminées à partir du spectre d'amplitude calculé sur des fenêtres d'analyse larges de 6 millisecondes, ce qui représente à peu près 2,6 périodes pour la première note et 2,9 pour la seconde. Puisque
, chaque fenêtre d'analyse est large de 192 échantillons. L'échantillon fréquentiel
pour lequel nous avons le maximum du spectre d'amplitude entre
et
est une première estimation de la fréquence fondamentale. La valeur
du spectre d'amplitude pour l'échantillon fréquentiel
est une première estimation de l'amplitude de la fondamentale. Nous faisons passer un polynôme d'ordre 2 par les échantillons fréquentiels de numéros d'ordre
,
et
. L'endroit où sa dérivée s'annule nous donne une estimation plus précise de la fréquence fondamentale, et la valeur de ce polynôme à cet endroit nous donne une estimation plus précise de l'amplitude de la fondamentale.
Nous avons simulé un signal, avec ou sans vibrato, formé de 30 partiels harmoniques dont les amplitudes décroissent en
, où
est le numéro d'ordre des harmoniques. Deux notes se succèdent. Lors de la transition, la fréquence fondamentale passe de
à
. Nous présentons les résultats pour la fonction d'observation << flux spectral calculé avec les spectres d'amplitude >> (voir la partie part:seg_mon_har, sections ssse:deflu et flux_spectres, page ssse:deflu) sur les figures savib1 (trajet de
) et savib2 (trajet du << flux spectral >>) quand aucun vibrato n'est présent, et sur les figures avvib1 (trajet de
) et avvib2 (trajet du << flux spectral >>) quand un vibrato est présent. Nous constatons que la présence d'un vibrato rend le << flux spectral >> inutilisable pour la segmentation en zones stables.
Les paramètres libres pour le << flux spectral >> ont été fixés à
(
seconde) ;
(0,005 seconde) ;
; et la fenêtre de pondération utilisée est celle de Blackman. La fréquence du vibrato est
, son amplitude
et sa phase à l'origine
. Pour le modèle de transition en fréquence utilisé, voir la section ssse:modefre. Nous avons choisi
et
. Le modèle de transition en amplitude décrit dans la section ssse:am n'a pas été utilisé.
Dans le premier cas (pas de vibrato), la fonction d'observation réagit nettement lors de la transition ; dans le second cas (vibrato présent), la fonction d'observation ne réagit pas de façon significative lors de la transition.
Il est intéressant de détecter le vibrato et d'estimer ses paramètres sans passer par le trajet de
. Ceci fait l'objet des méthodes proposées dans ce chapitre. La méthode décrite dans la deuxième section (section vib_mod_spe) de ce chapitre ne permet pas de détecter le vibrato sans extraire ses paramètres. Il est intéressant de détecter la présence de vibrato, sans passer par le trajet de
, mais aussi sans estimer les paramètres du vibrato. Ceci fait l'objet de la méthode présentée dans la troisième section (section vibr) de ce chapitre. La méthode décrite dans la quatrième section (section sect:laroche) de ce chapitre nécessite d'être adaptée pour être utilisée sur des sons réels. La cinquième section (section sect:concchap12) de ce chapitre constitue une conclusion à ce chapitre.
La méthode consiste à minimiser par les moindres carrés la distance -- l'erreur -- entre un spectre complexe calculé par transformée de Fourier pour une portion d'un signal sonore et un spectre complexe calculé en utilisant les estimations des paramètres inconnus de ce signal. Il s'agit de déterminer les valeurs des paramètres inconnus du signal telles que cette distance soit minimale. Ces paramètres, pour le modèle que nous utilisons, sont la partie réelle
de l'amplitude complexe de chaque harmonique (dont le numéro d'ordre est
), la partie imaginaire
de l'amplitude complexe de chaque harmonique, l'excursion
en
du vibrato, la fréquence
en
du vibrato, la phase à l'origine
du vibrato et la fréquence fondamentale
en
.
Nous avons simulé le signal suivant :
Il s'agit donc de la somme d'harmoniques (de numéro d'ordre
,
variant de 1 à 60 ; de fréquences
, avec
; d'amplitudes
et de phases aléatoires uniformément distribuées entre
et
) pour lesquels un vibrato de fréquence
, de phase à l'origine nulle et d'amplitude
, avec
, est présent. Ce signal est échantillonné à
. Il faut remarquer que l'amplitude du vibrato étant
pour l'harmonique de numéro d'ordre
, le signal est à tout moment harmonique.
La longueur du signal est de
seconde. Nous considérons des portions de ce signal larges de 13230 échantillons, soit larges de 0,3 seconde, ce qui est beaucoup eu égard à ce qui est communément utilisé comme taille de fenêtre d'analyse[Note : Voir la note de la page note:sife.], mais ce qui correspond à l'ordre de grandeur des tailles des fenêtres d'analyse utilisées dans le chapitre det_vib_f0 pour la détection du vibrato à partir des trajets des harmoniques du signal. Le pas d'avancement entre deux portions successives est de 100 échantillons. Chacune d'elles est multipliée par la fenêtre de pondération
. Nous calculons le spectre d'amplitude pour chaque portion pondérée. L'instant courant pour chaque fenêtre d'analyse est l'instant
de son centre. Le trajet théorique de la fréquence fondamentale instantanée,
, est obtenu en considérant que
.
La méthode sommaire utilisée pour estimer la fréquence et l'amplitude du
harmonique est la suivante. Le maximum du spectre d'amplitude entre
et
est détecté. L'amplitude de ce
harmonique est égale à l'amplitude de ce maximum. Nous estimons ainsi les amplitudes
des neuf premiers harmoniques. Le produit
(il s'agit d'une version de la moyenne géométrique : voir la section ssec:fushomomul) est calculé. Nous présentons sur la figure amp40 le trajet de
(courbe du haut) et le trajet du produit
(courbe du bas : l'échelle, pour ce produit, n'est pas respectée) obtenus.
Nous constatons que le produit
des amplitudes passe par des maximums quand la fréquence instantanée du premier harmonique (et donc celle de chaque harmonique) passe par des maximums ou des minimums (
), et par des minimums quand sa valeur est voisine de la fréquence fondamentale quand il n'y a pas de vibrato (
).
En observant les spectres d'amplitude (voir les figures evofre et fig_spe_fff), nous constatons que ce sont les harmoniques de numéros d'ordre élevés qui sont les plus distordus : plus leur fréquence augmente, plus leur amplitude décroît et plus la largeur de leur lobe principal s'accroît.
Nous considérons deux cas.
, la fréquence fondamentale passe par un maximum (
: l'évolution de la fréquence au centre de la portion est faible). Nous donnons sur la figure evofre le spectre d'amplitude obtenu.
, la valeur absolue de la dérivée de la fréquence fondamentale passe par un maximum (
: l'évolution de la fréquence au centre de la portion est importante). Nous donnons sur la figure fig_spe_fff le spectre d'amplitude obtenu.
Sont représentés dans les deux cas seulement les 9 premiers harmoniques. Le spectre d'amplitude du signal quand il n'y a pas de vibrato est superposé en trait interrompu dans le second cas (figure fig_spe_fff).
plus petit que le pic obtenu quand il n'y a pas de vibrato. Pour le neuvième harmonique, la différence est de
.
. Pour le neuvième harmonique, elle est de
si nous considérons le maximum du spectre d'amplitude dans la bande de fréquences
et de
si nous considérons la valeur du spectre d'amplitude au centre de cette bande (voir la figure fig_spe_fff : les lobes sont symétriques autour de
et creux au centre).
La différence entre ces deux cas est très nette. Cependant, dans les deux cas, plus nous considérons un harmonique de numéro d'ordre élevé, plus son amplitude est détériorée par le vibrato. De plus, la largeur du pic augmente avec le numéro d'ordre de l'harmonique.
Nous tenterons d'expliquer plus en détail ces phénomènes par la suite. Quand nous prenons des fenêtres d'analyse plus petites les résultats sont les mêmes, seulement le spectre d'amplitude du signal quand il y a du vibrato est moins détérioré globalement : ces phénomènes ne sont plus nettement visibles que sur les harmoniques de numéros d'ordre très élevés : voir la section vibr.
Nous avons modélisé le trajet de la fréquence fondamentale ainsi (voir la section ssec:modsim) :
Ceci correspond à une sinusoïde pure modulée en fréquence. L'évolution de la phase s'écrit :
Nous faisons les hypothèses que la phase du vibrato et que la phase du signal à l'origine (
) sont nulles : ces hypothèse ne sont pas restrictives. Donc le signal s'écrit :
Or, nous avons :
où
est la fonction de Bessel d'ordre
entier.
En identifiant :
et
, nous pouvons écrire :
Ce qui, en sachant que
, s'écrit, après quelques calculs :
La transformée de Fourier
de cette expression se calcule aisément :
Nous considérons une portion du signal, portion multipliée par la fenêtre de pondération
. La transformée de Fourier de la fenêtre de pondération est
.
La transformée de Fourier de cette portion pondérée du signal est alors :
Nous obtenons donc, au lieu d'un pic d'amplitude
ayant la forme de la transformée de Fourier de la fenêtre de pondération, la somme d'une infinité de pics d'amplitude
(il faut cependant noter que les coefficients de Bessel, à
constant, décroissent rapidement avec
croissant) ayant chacun la forme de la transformée de Fourier de la fenêtre de pondération. Ces pics sont séparés de
, et ils sont constructifs ou destructifs les uns entre les autres suivant les phases (c'est-à-dire suivant le signe des coefficients de Bessel).
Mais cela n'explique pas pourquoi ce sont les harmoniques de fréquences élevées qui sont les plus distordus par le vibrato. Nous donnons ci-dessous un élément de réponse.
La fonction génératrice des fonctions de Bessel d'ordre entier
s'écrit :
Donc, si nous posons
, nous avons :
(formule 1)
Or, nous avons, dans notre cas,
, où
est le numéro d'ordre de l'harmonique.
et
sont des constantes. Ainsi
croît linéairement avec le numéro d'ordre de l'harmonique. Et, pour
, la valeur absolue du coefficient de Bessel décroît rapidement avec
.
Ainsi, plus le numéro d'ordre de l'harmonique est élevé, plus il faut additionner de coefficients de Bessel (ordre 0, puis ordre -1 et 1, puis ordre -2 et 2, etc.) pour atteindre, avec la somme précédente (formule 1), une valeur proche de 1. Nous avons calculé cette somme (formule 1) pour différentes valeurs de
. Nous obtenons la courbe fon_gen_bes. En abscisse, nous avons le nombre de coefficients de Bessel pris en compte. La courbe la plus à gauche correspond à
et la plus à droite à
(le pas d'avancement est 2). Donc plus le numéro d'ordre de l'harmonique est élevé, plus son énergie se disperse sur un nombre élevé de pics : ainsi, plus son lobe sera étalé autour de la fréquence centrale, et plus l'amplitude de ce lobe sera faible.
Nous présentons les fonctions de Bessel sur la figure fon_bess.
Bien sûr, cette explication n'est pas suffisante puisque nous n'avons pas tenu compte des phases : ce sont elles qui expliquent les différences qui existent entre les spectres d'amplitude des figures evofre et fig_spe_fff. Des détails supplémentaires et importants sont donnés dans la section vibr.
Pour le moment dans ce chapitre, nous avons modélisé l'évolution de la fréquence d'une sinusoïde modulée en fréquence ainsi :
où
est la fréquence fondamentale << centrale >>,
l'amplitude en
du vibrato, et
la fréquence du vibrato.
Ajoutons à présent à ce modèle une phase à l'origine
pour la fondamentale[Note : Dans cet exposé, la fréquence fondamentale est appelée indifféremment
ou
. La phase de la fondamentale est appelée
ou
. Voir la note de la page page:note.], et une phase à l'origine
pour le vibrato.
s'écrit alors :
et l'évolution de la phase du signal s'écrit :
Nous obtenons :
Si nous considérons un signal formé de
partiels harmoniques modulés par un vibrato, d'amplitudes respectives
et de phases à l'origine respectives
,
variant de
à
, nous avons :
Nous multiplions le signal par une fenêtre de pondération
. La transformée de Fourier de la fenêtre de pondération s'écrit
. La transformée de Fourier de :
est :
La transformée de Fourier du signal
multiplié par la fenêtre de pondération
est alors :
En fait, dans la suite nous allons considérer :
Donc :
Nous allons ici essayer de retrouver les paramètres inconnus du signal en minimisant par les moindres carrés l'erreur quadratique entre un spectre complexe connu et un spectre complexe estimé.
Nous voulons minimiser l'erreur quadratique
entre un vecteur colonne connu
, de taille
, et un vecteur colonne estimé
, contrôlé par
paramètres
. Si les dérivées d'ordre supérieur à
de
par rapport aux
ne sont pas nulles, le problème n'est pas linéaire et
est itérativement minimisée. Nous allons considéré ici ce cas général. Soit
représentant le numéro de l'itération courante. Nous avons :
où l'exposant
représente la transposition-conjugaison. Les autres notations utilisées dans ce chapitre sont : l'exposant
, qui représente la transposition ; l'exposant
, qui représente l'inversion ; l'exposant
, qui représente la conjugaison ; et le soulignement, qui indique que nous sommes en présence d'un vecteur ou d'une matrice.
Nous avons :
Nous posons :
Et :
Alors
, qui est l'inconnue, correspond au pas de descente optimal. Nous le montrons sur la figure figu:pasopt dans le cas où
et
sont des scalaires et
.
Nous avons donc :
Et :
Nous voulons minimiser
, c'est-à-dire annuler sa dérivée :
. Or :
Donc, nous avons :
Nous avons finalement :
Ce processus continue jusqu'à sa convergence (il faut définir un critère de convergence), s'il converge ; ou jusqu'à ce que
, où
est un paramètre libre fixé. Dans cet exposé, nous avons utilisé la seconde condition d'arrêt, avec
de l'ordre de 20.
Ici,
est le spectre complexe obtenu avec la fft, rangé dans un vecteur colonne ;
est le spectre complexe estimé ; et les paramètres
sont :
Nous avons donc
paramètres à déterminer (il est fait l'hypothèse que
est connu).
Il ne nous reste plus qu'à dériver
par rapport à ces paramètres, à donner des formules analytiques pour ces dérivées. Il n'existe pas de formule analytique, ni pour les fonctions de Bessel ni pour leurs dérivées. Cependant, elles sont aisément estimables, avec une grande précision, numériquement.



avec :
et :
Donc :

avec :
Nous donnons dans l'annexe anne:derivfen les dérivées de certaines fenêtres de pondération dans le domaine fréquentiel.


Les simulations ont été faites sous matlab.
Tout d'abord, dans l'exemple qui suit, nous supposons que la fréquence fondamentale
est connue. Nous avons constaté que ce paramètre ralentissait la convergence ou, au pire, la rendait problématique. Dans l'exemple, nous avons pris
. Les valeurs des paramètres à trouver sont rangées dans la première colonne du tableau valfautrou et les valeurs initiales (itération
) de ces paramètres sont rangées dans la deuxième colonne de ce même tableau.
est égale à
.
Nous faisons initialement
d'erreur sur chaque paramètre. La fenêtre de pondération utilisée est celle de blackman. Nous prenons en compte
coefficients de bessel pour chaque sinusoïde (
). Nous avons
seconde (
),
, le nombre de points pour la fft égal à
et nous travaillons avec les
premiers points du spectre complexe des fréquences positives.
Nous calculons l'erreur
sur le paramètre
à l'itération
ainsi :
Donc
d'erreur correspond à
,
à
, puis
à
, etc.
Nous donnons sur la figure figu:moco1 le spectre d'amplitude réel en
sur lequel nous travaillons (l'énergie de la fenêtre de pondération n'étant pas normalisée, nous n'avons pas
pour la première des sinusoïdes, d'amplitude 1), et sur les figures figu:moco2 et figu:moco3 l'erreur
en fonction de
respectivement pour
,
et
, puis pour
,
,
,
,
et
(
correspond aux conditions initiales). Nous constatons que l'algorithme converge vers les bonnes valeurs des paramètres.
En ce qui concerne la présence ou l'absence de vibrato, la décision est prise ainsi :
est comprise entre
and
et
est grand, il y a du vibrato.
Les estimations de
,
et
sont directement obtenues.
La méthode est basée sur l'extraction de caractéristiques (fonctions d'observation) pour des fenêtres d'analyse larges de quelques dizaines de millisecondes, et leur traitement. Cela peut paraître étrange d'utiliser des portions du signal aussi petites, qui sont loin de couvrir une période du vibrato (classiquement, la fréquence du vibrato est d'environ
, donc sa période est de quelques centaines de millisecondes). Cependant, il ne s'agit pas ici de déterminer l'amplitude, la fréquence et la phase du vibrato : nous voulons seulement le détecter, et non déterminer ces paramètres. Notamment, le manque d'information dû au fait que nous utilisons des petites fenêtres d'analyse va se traduire par l'obtention d'une équation à deux variables inconnues de la forme :
, où
est l'amplitude du vibrato (modélisé par une sinusoïde : voir la section ssec:modsim) et
sa fréquence (voir la section cons_vib pour les notations).
En ce qui concerne la modulation de fréquence, une quantité, appelée << bande de Carson >>, est, pratiquement, définie. Lors de la modulation en fréquence d'une porteuse, l'énergie de cette porteuse s'éparpille sur toutes les fréquences du spectre : la transformée de Fourier du signal est la somme d'une infinité de pics décalés de
, correspondant chacun à la transformée de Fourier de la fenêtre de pondération utilisée, et d'amplitudes les coefficients de Bessel (voir la section ssse:for). Cependant, la plus grande partie de l'énergie du spectre (98%) est comprise dans la bande de Carson, qui est centrée sur la fréquence de la porteuse et est égale à :
, où
est l'excursion maximale en fréquence de la modulation et
la fréquence maximale de la modulation. Ainsi, avec nos notations, nous avons, pour le
harmonique :
, qui augmente linéairement avec le numéro d'ordre
de l'harmonique. Avec
,
et
(ce qui correspond à 5% de
), nous avons
à partir de l'harmonique de numéro d'ordre
, donc de fréquence
. Cela veut dire qu'à partir du vingtième harmonique, les lobes dus à deux harmoniques de numéros d'ordre successifs se recouvrent. Notons de plus que dans ce cas
tombe juste dans la bande de fréquence où l'oreille humaine entend le mieux (voir l'annexe anne:attenu). Nous allons tenter de mettre en évidence cette croissance linéaire de la bande de Carson : la méthode décrite dans cette section vibr est basée sur ce principe.
Nous avons vu dans la section vib_mod_spe que la présence d'un vibrato détériore la forme de chaque lobe principal (notamment son amplitude) correspondant à un partiel harmonique du signal. Nous avons vu que cette détérioration est d'autant plus importante que le numéro d'ordre de cet harmonique est élevé. Nous allons de même montrer que, pour un harmonique de numéro d'ordre donné, plus la taille de la fenêtre d'analyse est grande plus cette détérioration est importante. Nous allons essayer de mettre cette détérioration en évidence et de déterminer certaines de ses caractéristiques.
Nous considérons deux fenêtres d'analyse, toutes les deux centrées sur le même instant d'analyse
. La taille de l'une (portion
) a été fixée à
millisecondes et la taille de l'autre (portion
) à
millisecondes : voir la figure viban. Le spectre d'amplitude est calculé pour chacune de ces portions (ces spectres d'amplitudes sont appelés respectivement
et
). Notons que la fenêtre de pondération que nous utilisons est la fenêtre de Blackman.
D'après ce qui a été mentionné ci-dessus, nous pouvons dire que les lobes principaux du spectre d'amplitude
(grande portion) sont plus petits, à cause du vibrato, que les lobes principaux correspondant du spectre d'amplitude
(petite portion), et ce d'autant plus qu'ils correspondront à des harmoniques de numéros d'ordre élevés. Nous avons indiqué qu'il ne s'agit ici ni de déterminer la fréquence fondamentale du signal ni de déterminer les paramètres du vibrato. Aussi, nous allons plutôt raisonner en terme d'enveloppe spectrale. Ainsi : plus la fréquence considérée sera grande, plus la différence entre les deux enveloppes spectrales sera grande.
Nous montrons dans la section suivante (section lin) que, si les harmoniques ont tous la même amplitude (cela veut dire que l'enveloppe spectrale << vraie >>, c'est-à-dire en l'absence de vibrato, est horizontale), cette différence croît linéairement avec la fréquence : cette croissance linéaire (ou du moins quasi linéaire) est ce que nous voulons détecter. Elle nous indiquera sûrement si un vibrato est présent ou non.
Nous pouvons remarquer aussi que les pics correspondant aux lobes dus aux harmoniques non seulement sont plus petits pour le spectre d'amplitude
que pour le spectre d'amplitude
, mais sont en plus décalés en fréquence, et ce d'autant plus que le numéro d'ordre de l'harmonique considéré est grand.
Nous avons tenté dans la section cons_vib d'expliquer pourquoi ce sont les harmoniques de numéros d'ordre supérieurs qui sont les plus détériorés par le vibrato. Nous dîmes que ceci est dû à ce que plus
(
est le numéro d'ordre de l'harmonique) est grand moins les coefficients
d'ordre
grand sont négligeables. Ceci est illustré sur la figure figcoef (avec
et
).
Les amplitudes des harmoniques ont été fixées à la même valeur, soit ici 1. Nous avons pris :
,
,
,
(nous nous plaçons dans le cas le plus défavorable : c'est-à-dire le cas où les lobes sont le plus détériorés) et des phases aléatoires, uniformément réparties entre
et
, pour chacun des harmoniques. La fenêtre de pondération utilisée a été la fenêtre de Blackman (des résultats similaires sont obtenus avec les fenêtres de Hanning et de Hamming). La taille de la fft est
.
Nous vérifions que l'amplitude du lobe principal de chaque harmonique (qui est la somme d'une infinité de fenêtres de pondération dans le domaine fréquentiel d'amplitudes
décalées de
) décroît avec le numéro d'ordre de l'harmonique. Il s'agit d'essayer de déterminer une loi pour cette décroissance. Sur la figure declin nous donnons l'amplitude du maximum du lobe principal des quinze premiers harmoniques en fonction de leur position, et ceci pour plusieurs tailles de fenêtres d'analyse. À cause du vibrato la position du maximum du lobe principal n'est pas tout à fait
. À la limite, si nous prenons une très grande fenêtre d'analyse, le maximum pour le premier harmonique se situe à
ou
(voir la figure figcoef), c'est-à-dire à
; pour le deuxième harmonique autour de
; pour le troisième harmonique autour de
; etc. Et le lobe principal pour chaque harmonique se décompose en plusieurs petits lobes symétriquement disposés (voir la figure fig_spe_fff). Ici, nous utilisons des fenêtres d'analyse de tailles << raisonnables >>, c'est-à-dire de quelques dizaines de millisecondes, de telle façon que la somme des << petits lobes >> nous donne un grand et large lobe, unique, tout du moins pour les premiers harmoniques : dans l'exemple utilisé ici, ceci est vérifié au moins pour les quinze premiers harmoniques.
Nous constatons que, pour une petite fenêtre d'analyse, de taille 20 millisecondes, les amplitudes de tous les harmoniques sont proches de 1 : ainsi, pour la petite fenêtre d'analyse, le vibrato ne détériore pas le spectre d'amplitude. Nous constatons aussi que, pour la grande fenêtre d'analyse, nous obtenons une détérioration à la fois importante et presque linéaire, et les lobes des harmoniques de numéros d'ordre supérieurs ne se décomposent pas encore en plusieurs lobes. D'où le choix des tailles des deux fenêtres d'analyse qui a été fait (voir la section prese)
Le fait que, dans le cas général, l'enveloppe vraie ne soit pas plate et horizontale (ce qui a lieu seulement quand les partiels ont la même amplitude) n'est pas un problème : nous pouvons en effet, dans le cas général, retrouver une croissance quasi linéaire de la différence entre les enveloppes spectrales
et
. Considérons tout d'abord
, l'amplitude de l'harmonique de numéro d'ordre
du spectre d'amplitude
;
, celle du spectre d'amplitude
; et
, l'amplitude vraie de l'harmonique. Alors
croît quasi linéairement avec
. Donc, si nous faisons l'hypothèse que
est très proche de
, ce qui est presque vérifié puisque plus la fenêtre d'analyse est petite moins l'influence du vibrato se fait sentir (voir la figure declin), le problème est résolu. Ceci est montré sur la figure formlin, où nous donnons, sur les courbes en traits pleins,
[Note :
pour << estimée >> :
]. Ici, nous avons un << formant >> situé autour du cinquième harmonique, formant de forme gaussienne. L'amplitude de l'harmonique de numéro d'ordre
est :
, soit :
.
Les amplitudes
sont estimées en utilisant une fenêtre d'analyse de 20 millisecondes prise au centre de la fenêtre d'analyse de 60 millisecondes qui nous donne les
(voir la figure viban). En trait interrompu, nous avons les amplitudes vraies des harmoniques, et les amplitudes trouvées avec la petite fenêtre d'analyse : nous constatons que les deux courbes sont quasi superposées. Pour obtenir les courbes en traits pleins de cette figure formlin, nous avons directement divisé la valeur du maximum de chacun des lobes obtenus pour la grande fenêtre par la valeur du maximum du lobe correspondant obtenu pour la petite fenêtre d'analyse, sans tenir compte des décalages de positions en fréquence de ces maximums selon la fenêtre d'analyse. Dans la suite de l'exposé, nous interpolons linéairement entre ces maximums, pour obtenir les enveloppes spectrales, et ce sont ces enveloppes spectrales que nous comparons, échantillon fréquentiel par échantillon fréquentiel, pour obtenir la courbe
. Ces enveloppes spectrales sont données sur la figure envel pour les différentes fenêtres d'analyse. La fenêtre de pondération utilisée est celle de blackman. La phase (qui est liée à la position des fenêtres d'analyse) du vibrato ici est 0, mais nous obtenons des résultats similaires quelle que soit cette phase : seulement, dans certains cas, les amplitudes
sont un peu moins bien estimées (en fait, au pire, les points de la vraie enveloppe spectrale sont décalés en fréquence : le point en
se retrouve en
) : mais nous retrouvons tout de même une croissance de la différence entre les deux enveloppes spectrales d'allure quasi linéaire. La pente de cette croissance dépend de
et de
.
La technique présentée dans cette section vient de la thèse de Xavier Serra : Thesis:Serra, pages 42 -- 47.
Le problème de l'obtention de l'enveloppe spectrale est un problème compliqué, et ce d'autant plus qu'ici nous nous basons sur les spectres d'amplitude. En effet, puisque nous voulons obtenir la vraie enveloppe spectrale, c'est-à-dire celle qui passe exactement pas les sommets des lobes du spectre d'amplitude correspondant à des sinusoïdes, nous n'utilisons pas la modélisation ar (voir la partie part:seg_mon_har, section flux_ar) ou le cepstre (voir la partie part:seg_mon_har, section ceps) pour obtenir l'enveloppe spectrale. L'idée est de détecter les maximums locaux du spectre d'amplitude (correspondant à des lobes dus chacun à la présence d'un partiel) et d'interpoler (linéairement) entre eux. Bien sûr, les pics parasites (lobes secondaires, bruit...) détériorent énormément les performances de la méthode.
L'algorithme présenté ci-dessous est loin d'être parfait :
. Un creux est un minimum local :
,
il y a un minimum local en l'échantillon fréquentiel de numéro d'ordre
avec
est l'opérateur supérieur ou égal,
est l'opérateur et,
l'opérateur supérieur, et
l'opérateur ou.
Le lissage se fait ainsi :
Cette opération est répétée plusieurs fois sur tout le spectre d'amplitude, jusqu'à la convergence. Cette opération a pour effet d'éliminer certains des plus petits maximums locaux sans toucher aux plus grands. Comme il a déjà été dit, pour les besoins de la méthode il est important de ne pas modifier les plus grands maximums locaux.
et les minimums locaux. Remarquons que le fait de prendre les conditions données ci-dessus plutôt que plus simplement
, n'assure cependant pas encore que nous ne puissions pas avoir deux maximums locaux successifs (ou deux minimums) sans minimum local (ou maximum) intercalé entre eux !
pour que le pic ne soit pas pris en compte.
D'autres algorithmes pour obtenir la vraie enveloppe spectrale sont succintement présentés dans la section ssec:ameenv.
Nous avons vu dans la section calenvspe qu'il n'est pas aisé de déterminer les enveloppes spectrales à partir de la détection des pics du spectre d'amplitude. Les fausses alarmes (pics de bruit ou des lobes secondaires détectés) aussi bien que les détections manquées (pics dus à des sinusoïdes non détectés) détériorent énormément les performances de la méthode. Faisons la remarque qu'ici, dans cette section vibr, en aucun cas, nous ne voulons considérer la forme des lobes obtenus et la comparer à celle du lobe théorique (voir les sections voise_for1, voise_fo2 et voise_fo3), puisque nous considérons que ces lobes sont déformés par les modulations d'amplitude et de fréquence.
Deux spectres d'amplitude sont calculés : l'un pour une << petite >> portion du signal, l'autre pour une << grande >> portion, les deux portions étant centrées au même instant. Les tailles des deux fenêtres d'analyse sont relativement proches. L'idée est que pour les deux spectres d'amplitude :
Et ceci même quand il y a du vibrato, puisque les fenêtres d'analyse ont quasi la même taille.
Alors qu'au contraire :
Il s'agit de sélectionner les maximums locaux qui nous intéressent, c'est-à-dire ceux qui sont quasi identiques, en position et en amplitude, pour les deux spectres d'amplitude. Voir la figure figu:nouvmeth1. Une sinusoïde de fréquence
est présente. Les maximums locaux dans le premier cas (portion large de
seconde) sont repérés par des
et des
; dans le second cas (portion large de
seconde), par des
et des
. Un seul pic est commun : celui qui a lieu vers
.
Ici, nous utilisons exactement la même portion du signal, mais nous la multiplions par deux fenêtres de pondération différentes : l'une étant la fenêtre de Blackman, et l'autre étant la fenêtre de Hanning, par exemple, ou l'une étant une fenêtre sans lobes secondaires (comme la fenêtre de Hanning-Poisson : voir l'annexe ann:poisson). Ainsi, les lobes dus à des sinusoïdes tombent aux mêmes endroits (aux mêmes échantillons fréquentiels) pour les deux spectres d'amplitude et ils ont sensiblement la même amplitude (le vibrato ne changeant ici rien à l'affaire, puisque les fenêtres d'analyse ont la même taille), alors que pas forcément les pics dus aux lobes secondaires ou au bruit. Voir la figure figu:nouvmeth2. Une sinusoïde de fréquence
est présente. Les maximums locaux dans le premier cas (fenêtre de pondération de Blackman) sont repérés par des
et des
; dans le second cas (fenêtre de pondération de Hanning), par des
et des
. Un seul pic est commun : celui qui a lieu vers
.
Pour obtenir de meilleures enveloppes spectrales, des méthodes, notamment basées sur la << Ligne de Partage des Eaux (LPE) >>, méthodes venues de la segmentation des images et de la << morphologie mathématique >> pourraient être utilisées. Ceci n'a pas été testé.
Les premiers tests ont été effectués sur ce signal simulé :
La taille des fft est de
points et les enveloppes spectrales sont calculées entre le 30ème et le 512ème échantillon fréquentiel (c'est-à-dire entre
et
). Les tailles des deux fenêtres d'analyse sont 60 et 20 millisecondes. Pour calculer les enveloppes spectrales, nous n'avons pas utilisé les techniques que nous avons présentées dans la section ssec:ameenv, mais celle donnée dans la section calenvspe.
Nous modélisons la différence :
par une droite (polynôme d'ordre 1)
. S'il y a du vibrato, la pente
doit être positive et grande. Ceci pour plusieurs pas d'analyse consécutifs : nous lissons la valeur de la pente obtenue sur une largeur de
seconde. S'il n'y a pas de vibrato, nous obtenons du bruit : le lissage nous donne une valeur proche de 0. Voir les figures ppf1 (trajet de
pour un signal modulé en fréquence) et ppf2 (moyenne de
en fonction de
).
Le flux entre les deux enveloppes spectrales (normalisé par celle obtenue pour la petite fenêtre d'analyse) doit être grand s'il y a du vibrato, et petit s'il n'y en a pas. La valeur du flux est lissée sur une largeur de 0,3 seconde (soit, ici, une période et demie du vibrato). Le lissage est effectué en filtrant passe-bas. Voir les figures diff1 (trajet du << flux >> pour un signal modulé en fréquence) et diff2 (moyenne du << flux >> en fonction de
).
L'influence du trémolo sur les enveloppes spectrales est très différente de l'influence du vibrato. Ainsi, un signal harmonique, composé de
sinusoïdes, un trémolo étant présent, s'écrit :
Dans le cas de la voix chantée, le trémolo dépendant du vibrato, toutes les fréquences
sont égales, et valent la fréquence du vibrato
. Dans le cas général, ce n'est pas forcément vrai.
Ainsi, le lobe de chaque harmonique se décompose en trois lobes : un en
d'amplitude
, un autre en
d'amplitude
et le dernier en
d'amplitude
. Le lobe principal de chaque harmonique est détérioré indépendamment de ceux des autres harmoniques, et tous les lobes principaux sont élargis d'autant, contrairement à ce qui se passe pour la modulation de fréquence. Si nous considérons les deux fenêtres d'analyse précédentes, de tailles respectives 60 millisecondes et 20 millisecondes :
Ainsi, les influences respectives du vibrato et du trémolo sur les enveloppes spectrales sont différentes.
Pour la segmentation en zones stables (voir le chapitre fo_seg de la partie part:seg_mon_har), nous obtenons de nouvelles fonctions d'observation. Voir les << flux spectraux >> décrits dans la section flux_spec.
Pour avoir la définition du terme << flux spectral >>, voir la section ssse:deflu de la partie part:seg_mon_har, page ssse:deflu. Il est deux versions à cette fonction d'observation (voir la section flux_ar de la partie part:seg_mon_har, page para:defo) :
la << valeur absolue de la dérivée du flux entre le spectre d'amplitude et l'enveloppe spectrale calculés sur une même portion du signal >>.
le << flux entre deux enveloppes spectrales calculées pour deux portions successives, décalées de
échantillons >>.
Voir la section flux_vibra ci-dessus. Nous utilisons directement le trajet
de ce << flux >>, mais avant le lissage.
Quand il y a du vibrato, la différence relative
croît quasi linéairement avec
:
, donc
est grand et positif. La décision est prise ainsi :
et le << flux >> sont grands, il y a du vibrato.
Il est difficile d'obtenir les estimations de
,
et
.
Nous constatons sur les figures figu:detectvib21, figu:detectvib22, fin11 et fin12, obtenues pour des signaux réels, que les deux tests nous donnent les résultats attendus. Cependant, la qualité des enveloppes spectrales est à mettre en cause : << quelques >> pics parasites de temps en temps ne sont pas éliminés. Nous obtenons alors des résultats aberrants, que le lissage tend à éliminer, sans y parvenir forcément.
La méthode est décrite dans la thèse de Laroche (voir Thesis:Laroche).
Nous modélisons le signal
comme la somme de
sinusoïdes complexes dont les amplitudes instantanées sont représentées par des polynômes d'ordre
aux coefficients
complexes. Ainsi, les modulations de fréquence et d'amplitude sont modélisées dans ces coefficients. Nous avons (avec
le signal estimé) :
Avec :
et
le numéro de l'échantillon (la taille du signal est
:
). Nous pouvons réécrire ce signal ainsi :
Nous utilisons les mêmes notations que dans la section ssec:moincar. Pour indiquer que nous sommes en présence d'une matrice et non d'un vecteur, nous utilisons les caractères gras (voir
). Avec (en considérant que
) :
Pour estimer
, nous utilisons les moindres carrés (voir la section ssec:moincar). Ici, le problème est linéaire. Nous voulons minimiser l'erreur quadratique :
Nous obtenons finalement :
Faisons la remarque que la matrice
comprend
lignes et
colonnes, et que le vecteur colonne
comprend
éléments.
Faisons l'hypothèse que
:
et donc :
.
Or,
et nous considérons que
reste petit, donc
. Ainsi :
Or,
et nous considérons que
reste petit, donc
. Ainsi :
et donc :
.
Or,
et nous considérons que
reste petit, donc
.
Et donc :
.
Nous donnons dans la section qui suit quelques résultats de simulations effectuées sous matlab.
Nous avons pris
. Le signal que nous avons simulé est le suivant :
Avec :
et :
Les valeurs de
,
,
,
,
,
,
,
,
et
sont données dans le tableau tabl:vallar.
La taille de la fenêtre d'analyse est
seconde (
). La fréquence instantanée du signal passe de
pour
seconde à
pour
seconde. La partie réelle du signal simulé est présentée sur la figure fig:partreel.
Nous donnons sur les figures fig:ordmod3 et fig:ordmod10 les trajets de
et de
(en haut à gauche), de
(en bas à gauche), de
et de
(en haut à droite), de
(en bas à droite) ; ce respectivement pour
et
, avec
: ceci veut dire que :
L'argument
de
est choisi parmi ces trois mesures
,
et
:
Les trois différences
sont calculées. Si la plus petite a lieu pour l'indice
, nous décidons que
.
Nous calculons l'erreur moyenne ainsi :
Nous donnons sur la figure fig:errmoy cette erreur moyenne en
(
), selon l'ordre
du polynôme utilisé (abscisse) et suivant la fréquence
utilisée pour calculer
. Ainsi, la courbe du haut correspond à
et celle du bas à
. Nous voyons qu'environ
les séparent.
Le problème principal qui se pose quand nous augmentons l'ordre du modèle est que le conditionnement de la matrice
(de taille
, ou dans le cas général
) à inverser devient de plus en plus mauvais, du fait que certaines de ses valeurs sont beaucoup plus grandes que d'autres (comparer
à
). Ainsi l'inversion de cette matrice est plus difficile. Cependant, Laroche s'était limité à l'ordre 3 (page 87 de Thesis:Laroche) : nous pouvons dire que la méthode est efficace même pour des ordres supérieurs. Il suffit pour cela de constater que, pour construire
, à la place d'utiliser
, les numéros d'ordre des échantillons, nous pouvons utiliser
, où
est la période d'échantillonnage du signal en seconde, ou toute autre valeur
, où
est une constante. Ceci nous permet de résoudre en partie les problèmes de conditionnement : par tâtonnement, nous choisissons un
qui nous permet d'inverser correctement la matrice
.
Le problème de la détection du vibrato (modulation de fréquence) et le problème de la détection du trémolo (modulation d'amplitude) peuvent être traités par cette méthode. Ces informations sont contenues dans le vecteur
. Mais nous n'avons pas essayé de << séparer >> les deux influences, de repérer ce qui dans
est dû à un vibrato et ce qui est dû à un trémolo. D'autres influences sont à considérer, comme les glissandos, en amplitude et en fréquence. Il s'agit de construire un critère de décision spécifique pour chaque influence, basé sur l'étude de la << forme >> de
. De plus, au lieu de considérer des signaux complexes, il serait intéressant de plutôt tout réécrire pour des signaux réels ; et il serait intéressant aussi d'étudier la sensibilité de cette méthode au bruit. Il s'agit de perspectives.
Pour détecter le vibrato et estimer ses paramètres à partir de l'analyse directe du son, il existe d'autres méthodes, comme celle de Masri (voir Thesis:Masri, pages 74 - 85). Masri prend en compte la distorsion qu'induit dans la phase du lobe principal une modulation d'amplitude exponentielle, et celle qu'induit une modulation linéaire de fréquence. Ces deux distorsions sont selon Masri séparables.
En ce qui concerne le trémolo, il faudrait réécrire les modèles de signal utilisés par la première et la troisième méthodes décrites dans ce chapitre. La deuxième méthode ne peut pas être adaptée au cas du trémolo.
Les trois méthodes utilisent l'apport des harmoniques de numéros d'ordre supérieurs du signal pour détecter le vibrato.
En ce qui concerne la détection des harmoniques du vibrato, il faut remarquer que pour la première méthode nous aboutissons à un modèle avec des doubles sommes infinies si nous considérons deux harmoniques du vibrato ; qu'il semble difficile d'adapter la deuxième méthode pour ce faire ; et qu'il faudrait réecrire le modèle de signal pour la troisième.
Le signal traité ici est le trajet de
, trajet déterminé par le logiciel
(voir la section ssse:foncf0, page ssse:foncf0). Nous travaillons dans toute la suite avec une fréquence d'échantillonnage pour
de
. Cette fréquence d'échantillonnage est celle qui est utilisée par défaut par les logiciels
et additive.
Les méthodes décrites dans ce chapitre ont été seulement appliquées sur le trajet de la fréquence fondamentale
. L'apport de la prise en compte du vibrato présent sur les harmoniques du signal de numéros d'ordre supérieurs n'a pas été étudié. Il s'agit de perspectives.
Pour améliorer l'estimation des paramètres du vibrato, il faudrait tenir compte de la position des transitions entre notes : il ne faudrait pas que les portions de
analysées chevauchent l'une de ces transitions. Ainsi, il faut noter que le problème de la segmentation en zones stables et celui de l' analyse du vibrato sont indissociables : l'étude du vibrato a pour but d'améliorer les performances de la segmentation ; mais l'étude du vibrato serait facilitée si elle était précédée d'une segmentation efficace.
La méthode décrite dans la deuxième section (section detvib_ar) de ce chapitre est basée sur des techniques classiques d'analyse spectrale, adaptée pour nos besoins. La méthode, simple et robuste, décrite dans la troisième section (section detvib_min_max) de ce chapitre est la seule qui ait été implémentée dans le programme segmentation. La méthode décrite dans la quatrième section (section detvib_analy) vient du traitement de la parole. La cinquième section (section sect:con13) de ce chapitre constitue une conclusion à ce chapitre.
Cette méthode repose sur des procédés classiques de l'analyse spectrale : la transformée de Fourier et la modélisation ar.
La valeur de la fréquence fondamentale du vibrato est en général comprise entre
et
. Quand nous voulons détecter les sinusoïdes d'un signal périodique à partir du spectre d'amplitude calculé avec la fft, la taille de la fenêtre d'analyse doit être d'environ trois fois la période fondamentale de ce signal. Ainsi, dans notre cas, où le signal est le trajet de
, cette taille doit être d'environ 1 seconde, dans le cas le plus défavorable, c'est-à-dire quand
vaut
. Cette taille est trop importante : le signal n'est pas stationnaire sur 1 seconde, ne serait-ce que parce que généralement les notes durent moins d'une seconde. Mais elle est trop petite aussi, puisque cela correspond à une fenêtre d'analyse large de
échantillons, donnant donc après fft une précision fréquentielle de
.
L'idée ici est d'utiliser les coefficients de la modélisation ar pour prédire les valeurs passées et futures de la portion de signal à partir de laquelle ils ont été calculés. Ainsi, nous pouvons et/ou réduire la taille de la fenêtre d'analyse effective (c'est-à-dire dont les échantillons sont du signal utile, c'est-à-dire des échantillons du trajet de
original) et/ou augmenter la précision fréquentielle, ceci tout en ayant encore accès aux informations de phase et d'amplitude instantanées, qui sont des paramètres du vibrato que nous voulons estimer. Sur la figure figu:deesprelin, le synoptique de la méthode est donné.
D'abord, nous avons considéré un son formé de trois notes sur lesquelles un vibrato est présent. Nous avons simulé le trajet de
suivant :
seconde,
,
et
seconde,
,
et
seconde,
,
et
De plus, six harmoniques du vibrato sont ajoutés, ceci pour chaque note. L'amplitude de l'harmonique du vibrato de numéro d'ordre
est égale à
. L'amplitude du vibrato est modulée par un cosinus relevé de période la durée de chaque note. Un bruit normal de variance faible (
) est finalement ajouté.
Pour modéliser les transitions, nous utilisons le modèle décrit dans la section ssse:modefre. Nous avons :
où le terme
modélise les transitions en fréquence et en amplitude du vibrato ; et où :
,
,
,
,
et
. Nous avons :
et :
Les phases
sont des variables aléatoires uniformément réparties entre
et
.
Nous considérons des portions larges de 0,35 seconde (35 échantillons) du signal
. La moyenne de chaque portion est normalisée à 0. Nous modélisons chaque portion moyennée par un processus auto-régressif d'ordre 16 (la méthode de burg est utilisée : voir Article:Marple) et nous prédisons son futur, ainsi que son passé, sur 17 échantillons. Nous obtenons donc un portion large de 69 (35+17+17) échantillons.
Nous présentons sur les figures traf0sisi, pervib1, pervib2 et pervib3 respectivement le signal simulé, le trajet de la fréquence du vibrato obtenue à partir du spectre d'amplitude calculé sur chaque portion moyennée et fenêtrée (la fenêtre de pondération utilisée étant celle de Blackman) large de 35 échantillons (la fréquence du vibrato est égale à la fréquence de l'echantillon fréquentiel pour lequel ce spectre d'amplitude passe par son maximum), le trajet de la fréquence du vibrato obtenue à partir de la densité spectrale de puissance calculée grâce aux coefficients de la modélisation ar (pour la définition de la densité spectrale de puissance, voir la section ssec:autoreg, partie part:seg_mon_har, page ssec:autoreg) pour cette portion, et enfin le trajet de la fréquence du vibrato obtenue à partir du spectre d'amplitude calculé sur chaque portion moyennée et fenêtrée (la fenêtre de pondération utilisée étant celle de Blackman) large de 69 échantillons (c'est-à-dire les prédictions passées et futures étant prises en compte).
Nous voyons que les résultats sont corrects, sauf au moment des transitions. Les moyennes de
sur tout le signal sont respectivement, pour le spectre d'amplitude sans prédiction, la densité spectrale de puissance et le spectre d'amplitude avec prédiction
,
et
(elles valent
,
et
si seulement deux harmoniques du vibrato sont considérés).
Nous donnons ici des résultats similaires à ceux que nous avons donnés dans la section précédente. Cependant, le signal n'a pas été simulé par nous : entre autres, nous ne connaissons ni la fréquence du vibrato, ni le modèle de transition utilisés. Les fichiers proviennent de Peter Desain et de Henkjan Honing, de l'<< Institute for Logic, Language and Computation ( illc) >>, d' Amsterdam (voir Article:Honing). Le trajet de
est échantillonné à
et nous utilisons des portions larges de
seconde. Donc nous calculons la fft avec
échantillons utiles : ceci correspond à à peine plus d'une période du vibrato. Nous utilisons les résultats de la modélisation ar et de la prédiction. L'ordre des modèles est 6. Nous contatons sur les figures figu:f0simu et figu:f0pred que l'algorithme simple que nous utilisons est robuste, c'est-à-dire que le vibrato mesuré n'est pas absurde en comparaison de celui que nous observons << à l'oeil >>, sauf aux moments des transitions, qui posent un problème non résolu : nous voulons extraire le vibrato pour améliorer la segmentation, mais une bonne segmentation améliorerait l'extraction du vibrato.
La décision est prise ainsi :
est grand, il y a du vibrato.
Les estimations des paramètres du vibrato sont faites ainsi :
Un algorithme pour détecter, estimer et aussi supprimer le vibrato est présenté ici. Cet algorithme a été implémenté dans le programme segmentation (voir la partie part:seg_mon_har).
Son principe est le suivant. Le signal est
, avec
. Nous détectons les
maximums locaux
, survenant aux instants
. Un maximum local a lieu en l'instant
si :
D'autres détecteurs de maximums locaux peuvent être utilisés. Par exemple celui-ci (voir la remarque faite dans la section calenvspe, page page:rem, à propos de la possibilité d'avoir deux maximums locaux successifs sans minimum local intermédiaire) :
De la même façon, nous obtenons les
minimums locaux
aux instants
.
Nous interpolons linéairement entre ces maximums pour obtenir une enveloppe supérieure du signal original échantillonnée aux instants
. Nous appelons cette enveloppe
. Nous obtenons l'enveloppe inférieure de la même façon avec les minimums locaux. Nous l'appelons
. Finalement, le signal << trajet de
une fois le vibrato supprimé >>, appelé
, est, à tout instant d'échantillonnage
de
, calculé ainsi :
Nous considérons dans cette section le signal << trajet de
>> dans sa globalité, c'est-à-dire sur tout le son, soit quelques secondes ou dizaines de secondes. Donc, dans un premier temps, tous les maximums locaux du trajet de
sont détectés. La liste listmax de ces maximums est dressée. Le trajet maxinterp est obtenu en interpolant entre ces points. Toutes les distances temporelles entre deux maximums locaux successifs sont calculées, ce qui nous donne la liste distmax.
Dans un deuxième temps, les mêmes traitements sont effectués avec les minimums locaux du trajet de
. Nous obtenons les listes listmin et distmin et le trajet mininterp.
Puis :
seconde et
seconde est estimé (nous obtenons le pourcentage Pmax)
seconde et
seconde est estimé (nous obtenons le pourcentage Pmin)
Une période de vibrato comprise entre
seconde et
seconde correspond à une fréquence du vibrato comprise entre
et
. Quand un vibrato est présent, la plupart des périodes du vibrato sont comprises dans ce petit intervalle, ce qui veut dire que les valeurs des deux variances sont petites et que les valeurs des deux pourcentages sont grandes. Nous pouvons le constater dans le tableau tab:resdet. Les résultats présentés ont été obtenus pour l'extrait de flûte flute.sf, pour lequel il y a quasi absence de vibrato, et pour l'extrait de voix chantée voiceP.sf, pour lequel il y a présence d'un fort vibrato. Ces deux sons sont ceux utilisés dans le chapitre chap:perfvib pour tester les performances des techniques décrites dans cette partie.
Finalement, si un vibrato a été détecté, les distances relatives à tous les instants d'échantillonnage entre le trajet maxinterp et le trajet mininterp sont calculées.
La liste distfreq est formée. Si la moyenne Mfreq
de ces distances relatives est grande, le vibrato est significatif et il est nécessaire de le supprimer.
: moyenne de (maxinterp - mininterp)/(nouveau trajet de
)
La moyenne à chaque instant
du trajet maxinterp et du trajet mininterp nous donne le nouveau trajet de
, c'est-à-dire le << trajet de
sur lequel le vibrato est supprimé >>.
L'amplitude
du vibrato est obtenue en calculant la moyenne de maxinterp - mininterp sur tout le son. La fréquence
du vibrato est obtenue en faisant la moyenne des distmax et des distmin.
L'algorithme général est présenté sur la figure detsupvib, page detsupvib.
Nous avons décrit ci-dessus une méthode pour décider de la présence d'un vibrato et estimer ses paramètres d'un point de vue global, c'est-à-dire en considérant tout le son. Cependant, nous sommes plutôt intéressé par la détection du vibrato d'un point de vue local, c'est-à-dire pour des portions du signal larges de quelques dixièmes de seconde. Nous nous alignons sur l'ordre de grandeur utilisé pour les autres méthodes de détection du vibrato : ainsi, nous prenons des portions larges de
seconde.
Nous comptons le nombre
de maximums locaux par portion.
, pour une portion donnée, le nombre
de maximums locaux présents est égal à 1 ou 2.
, pour une portion donnée, le nombre
de maximums locaux présents est égal à 2 ou 3.
, pour une portion donnée, le nombre
de maximums locaux présents est égal à 3 ou 4.
Nous ne pouvons utiliser ni les variances Vmax et Vmin ni les pourcentages Pmax et Pmin calculés avec aussi peu de points. Soient :
et
respectivement le nombre de maximums et de minimums locaux pour la portion considérée, d'instant central
; et Mfreq
, la moyenne des distances relatives pour cette même portion. L'idée est de construire une fonction d'observation basée sur ces trois mesures. Nous avons utilisé, comme fonction d'observation :
Mfreq
vaut respectivement pour
: