Le problème du vibrato (Segmentation en caractéristiques)

Introduction

1.Segmentation en caractéristiques

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 :

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.

2.Le vibrato

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.

Limite entre << signal avec vibrato >> et << signal sans vibrato >>

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.

Plan de la partie

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.

Le vibrato : présentation du problème

1.Introduction

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 :

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.

2.Modèles utilisés

Modèle complet du vibrato sur une note

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ù :

Modèle simplifié du vibrato sur une note

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 :

est la phase à l'origine du vibrato ; et l'évolution de la phase du signal s'écrit :

Alors :

Modélisation de la transition entre deux notes harmoniques

Pour la fréquence

Nous modélisons le saut en fréquence entre deux sinusoïdes de fréquences respectives et par :

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.

Pour l'amplitude

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.

Un exemple : influence du vibrato sur les performances du flux spectral pour un son simulé

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.

Méthodes de détection du vibrato à partir du son

1.Préambule

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.

2.Méthode basée sur la modélisation du spectre complexe

Introduction

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 .

Influence du vibrato sur le spectre d'amplitude

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.

Pour le premier 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.

Pour le second cas,
à , 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).

Dans le premier cas,
le pic obtenu pour le premier harmonique est plus petit que le pic obtenu quand il n'y a pas de vibrato. Pour le neuvième harmonique, la différence est de .

Dans le second cas,
pour le premier harmonique, la différence est déjà 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.

Explication

Formalisation du problème

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 :

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).

Conséquences

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.

Modélisation plus complète du signal quand un vibrato est présent

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 :

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 :

Les moindres carrés pour le vibrato

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é.

Les moindres carrés

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.

Notre cas

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.

Dérivation par rapport à

Dérivation par rapport à

Dérivation par rapport à

avec :

et :

Donc :

Dérivation par rapport à

avec :

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

Dérivation par rapport à

Dérivation par rapport à

Simulations

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.

Conclusion

En ce qui concerne la présence ou l'absence de vibrato, la décision est prise ainsi :



Les estimations de , et sont directement obtenues.

3.Méthode basée sur la distorsion des enveloppes spectrales

Introduction

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.

La méthode -- Présentation

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.

Forme de la croissance de la différence entre les deux enveloppes spectrales

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)

Influence des amplitudes respectives des harmoniques

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 .

Calcul de l'enveloppe spectrale -- signal << réel >>

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 :

D'autres algorithmes pour obtenir la vraie enveloppe spectrale sont succintement présentés dans la section ssec:ameenv.

Amélioration du calcul de l'enveloppe spectrale

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.

Nouvelle méthode 1

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 .

Nouvelle méthode 2

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 .

Nouvelle méthode 3

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 fonctions d'observation prises en compte

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.

Pente de la droite

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 ).

<< Flux >> entre les deux enveloppes spectrales

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 ).

Une première remarque : le trémolo, son influence

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.

Une seconde remarque : application de la méthode à la segmentation en notes et/ou en phones (ou plus généralement en zones stables)

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.

Méthodes du type << flux spectral >>

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) :

Nouvelle méthode

Voir la section flux_vibra ci-dessus. Nous utilisons directement le trajet de ce << flux >>, mais avant le lissage.

Conclusion

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 :

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.

4.Méthode de Laroche

Présentation

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.

Quelques exemples

Faisons l'hypothèse que :



Nous donnons dans la section qui suit quelques résultats de simulations effectuées sous matlab.

Simulations

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.

5.Conclusion

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.

Méthodes de détection du vibrato à partir du trajet de

1.Préambule

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.

2.Méthode basée sur la prédiction linéaire

Principe de la méthode

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é.

Quelques simulations

Première simulation

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 :

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).

Seconde simulation

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.

Conclusion

La décision est prise ainsi :



Les estimations des paramètres du vibrato sont faites ainsi :

3.Méthode basée sur les minimums et les maximums locaux

La méthode

Principe

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 :

Effets du vibrato -- point de vue global

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 :

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.

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.

Effets du vibrato -- point de vue local

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.

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 :