Brevet FR2797343A1 — publié le 20010209

PROCEDE ET DISPOSITIF DE DETECTION D'ACTIVITE VOCALE La présente invention concerne les techniques numériques de traitement de signaux de parole. Elle concerne plus particulièrement les techniques faisant appel à une détection d'activité vocale afin d'effectuer des traitements différenciés selon que le signal supporte ou non une activité vocale Les techniques numériques en question relèvent de domaines variés codage de la parole pour la transmission ou le stockage, reconnaissance de la parole, diminution du bruit, annulation d'écho.. Les méthodes de détection d'activité vocale ont pour principale difficulté la distinction entre l'activité vocale et le bruit qui accompagne le signal de parole. Le document W099/14737 décrit un procédé de détection d'activité vocale dans un signal de parole numérique traité par trames successives, dans lequel on procède à un débruitage a priori du signal de parole de chaque trame sur la base d'estimations du bruit obtenues lors du traitement d'une ou plusieurs trames précédentes, et on analyse les variations d'énergie du signal débruité a priori pour détecter un degré d'activité vocale de la trame Le fait de procéder à la détection d'activité vocale sur la base d'un signal débruité a priori améliore sensiblement les performances de cette détection lorsque le bruit environnant est relativement important Dans les méthodes habituellement utilisées pour détecter l'activité vocale, les variations d'énergie du signal (direct ou débruité) sont analysées par rapport à une moyenne à long terme de l'énergie de ce signal, une augmentation relative de l'énergie instantanée suggérant l'apparition d'une activité vocale. Un but de la présente invention est de proposer un autre type d'analyse permettant une détection d'activité vocale robuste au bruit pouvant accompagner le signal de parole Selon l'invention, il est proposé un procédé de détection d'activité vocale dans un signal de parole numérique dans au moins une bande de fréquences, suivant lequel on détecte l'activité vocale sur la base d'une analyse comprenant une comparaison, dans ladite bande de fréquences, de deux versions différentes du signal de parole dont l'une au moins est une version débruitée. Ce procédé peut être exécuté sur toute la bande de fréquence du signal, ou par sous-bandes, en fonction des besoins de l'application utilisant la détection d'activité vocale. L'activité vocale peut être détectée de manière binaire pour chaque bande, ou mesurée par un paramètre variant continûment et pouvant résulter de la comparaison entre les deux versions différentes du signal de parole. La comparaison porte typiquement sur des énergies respectives, évaluées dans ladite bande de fréquences, des deux versions différentes du signal de parole, ou sur une fonction monotone de ces énergies. Un autre aspect de la présente invention se rapporte à un dispositif de détection d'activité vocale dans un signal de parole, comprenant des moyens de traitement de signal agencés pour mettre en #uvre un procédé tel que défini ci-dessus. L'invention se rapporte encore à un programme d'ordinateur, chargeable dans une mémoire associée à un processeur, et comprenant des portions de code pour la mise en oeuvre d'un procédé tel que défini ci-dessus lors de l'exécution dudit programme par le processeur, ainsi qu'à un support informatique, sur lequel est enregistré un tel programme. D'autres particularités et avantages de la présente invention apparaîtront dans la description ci-après d'exemples de réalisation non limitatifs, en référence aux dessins annexés, dans lesquels - - la figure 1 est un schéma synoptique d'une chaîne de traitement de signal utilisant un détecteur d'activité vocale selon l'invention ; - la figure 2 est un schéma synoptique d'un exemple de détecteur d'activité vocale selon l'invention ; - les figures 3 et 4 sont des organigrammes d'opérations de traitement de signal effectuées dans le détecteur de la figure 2, - la figure 5 est un graphique montrant un exemple d'évolution d'énergies calculées dans le détecteur de la figure 2 et illustrant le principe de la détection d'activité vocale ; - la figure 6 est un diagramme d'un automate de détection mis en #uvre dans le détecteur de la figure 2 ; - la figure 7 est un schéma synoptique d'une autre réalisation d'un détecteur d'activité vocale selon l'invention ; - la figure 8 est un organigramme d'opérations de traitement de signal effectuées dans le détecteur de la figure 7 , - la figure 9 est un graphique d'une fonction utilisée dans les opérations de la figure 8 Le dispositif de la figure 1 traite un signal numérique de parole s La chaîne de traitement de signal représentée produit des décisions d'activité vocale #n,j utilisables de façon connue en soi par des unités d'application, non représentées, assurant des fonctions telles que codage de la parole, reconnaissance de la parole, diminution du bruit, annulation d'écho... Les décisions #n,j peuvent comporter une résolution en fréquence (index j), ce qui permet d'enrichir des applications fonctionnant dans le domaine fréquentiel. Un module de fenêtrage 10 met le signal s sous forme de fenêtres ou trames successives d'index n, constituées chacune d'un nombre N d'échantillons de signal numérique De façon classique, ces trames peuvent présenter des recouvrements mutuels Dans la suite de la présente description, on considérera, sans que ceci soit limitatif, que les trames sont constituées de N = 256 échantillons à une fréquence d'échantillonnage Fede 8 kHz, avec une pondération de Hamming dans chaque fenêtre, et des recouvrements de 50 % entre fenêtres consécutives. La trame de signal est transformée dans le domaine fréquentiel par un module 11 appliquant un algorithme classique de transformée de Fourier rapide (TFR) pour calculer le module du spectre du signal. Le module 11 délivre alors un ensemble de N = 256 composantes fréquentielles du signal de parole, notées Sn,f,où n désigne le numéro de la trame courante, et f une fréquence du spectre discret Du fait des propriétés des signaux numériques dans le domaine fréquentiel, seuls les N/2 = 128 premiers échantillons sont utilisés Pour calculer les estimations du bruit contenu dans le signal s, on n'utilise pas la résolution fréquentielle disponible en sortie de la transformée de Fourier rapide, mais une résolution plus faible, déterminée par un nombre # de sous-bandes de fréquences couvrant la bande [0, Fe/2] du signal. Chaque sous-bande i (1 s i bandes peut être uniforme (f(i)-f(i-1) = Fe121) Il peut également être non uniforme (par exemple selon une échelle de barks) Un module 12 calcule les moyennes respectives des composantes spectrales Sn,fdu signal de parole par sous-bandes, par exemple par une pondération uniforme telle que : Ce moyennage diminue les fluctuations entre les sous-bandes en moyennant les contributions du bruit dans ces sous-bandes, ce qui diminuera la variance de l'estimateur de bruit. En outre, ce moyennage permet de diminuer la complexité du système Les composantes spectrales moyennées Sn,i sont adressées à un module 15 de détection d'activité vocale et à un module 16 d'estimation du bruit On note #n,l l'estimation à long terme de la composante de bruit produite par le module 16 relativement à la trame n et à la sous-bande i. Ces estimations à long terme #n,i peuvent par exemple être obtenues de la manière décrite dans W099/14737. On peut aussi utiliser un simple lissage au moyen d'une fenêtre exponentielle définie par un facteur d'oubli ,B Bn,i -,B.Bn~1,i +(1~.B).Sn,i avec #B égal à 1 si le détecteur d'activité vocale 15 indique que la sous-bande i porte une activité vocale, et égal à une valeur comprise entre 0 et 1 sinon. Bien entendu, il est possible d'utiliser d'autres estimations à long terme représentatives de la composante de bruit comprise dans le signal de parole, ces estimations peuvent représenter une moyenne à long terme, ou encore un minimum de la composante Sn,l sur une fenêtre glissante suffisamment longue. Les figures 2 à 6 illustrent une première réalisation du détecteur d'activité vocale 15 Un module de débruitage 18 exécute, pour chaque trame n et chaque sous-bande i, les opérations correspondant aux étapes 180 à 187 de la figure 3, pour produire deux versions débruitées Épi n i - ÊP2,n,i du signal de parole Ce débruitage est opéré par soustraction spectrale non-linéaire La première version ÊP1,n,i est débruitée de façon à ne pas être inférieure, dans le domaine spectral, à une fraction pi, de l'estimation à long terme Sn-'t1 ,i. La seconde version Êp2in>j est débruitée de façon à ne pas être inférieure, dans le domaine spectral, à une fraction 32 de l'estimation à long terme Sn-'t1 ,i' La quantité #1 est un retard exprimé en nombre de trames, qui peut être fixe (par exemple #1 = 1) ou variable Il est d'autant faible qu'on est confiant dans la détection d'activité vocale Les fractions Pli et (i2 (telles que 011 > z21) peuvent être dépendantes ou indépendantes de la sous-bande i. Des valeurs préférées correspondent pour 01, à une atténuation de 10 dB, et pour ss2i à une atténuation de 60 dB, soit p1 ,? 0,3 et p2, 0,001. A l'étape 180, le module 18 calcule, avec la résolution des sous- bandes i, la réponse en fréquence HPn,1 du filtre de débruitage a priori, selon où i2 est un retard entier positif ou nul et a'n,i est un coefficient de surestimation du bruit. Ce coefficient de surestimation a' n,1 peut être dépendant ou indépendant de l'index de trame n et/ou de l'index de sous-bande i Dans une réalisation préférée, il dépend à la fois de n et i, et il est déterminé comme décrit dans le document W099/14737 Un premier débruitage est effectué à l'étape 181 : ÊPn,i = HPn,.Sn,i Aux étapes 182 à 184, les composantes spectrales Êp1ni sont calculées selon Êpinj =max(Êpn,,, Pli Bn-T1,i), et aux étapes 182 à 184, les composantes spectrales Êp25n,i sont calculées selon Ep2,n,i =max(Epn,, , (32i.Bn-2,i. Le détecteur d'activité vocale 15 de la figure 2 comporte un module 19 qui calcule des énergies des versions débruitées du signal Épi ni et Êp2,n,i, respectivement comprises dans m bandes de fréquences désignées par l'index j (1 de imin(j) à imax(j), avec imin(1) = 1, imin(j+1) = imax(j) + 1 pour 1 s j Un module 20 du détecteur d'activité vocale 15 effectue un lissage temporel des énergies E1.n.j et E2,n.J pour chacune des bandes d'index j, ce qui correspond aux étapes 200 à 205 de la figure 4 Le lissage de ces deux énergies est effectué au moyen d'une fenêtre de lissage déterminée en comparant l'énergie E2,n,j de la version la plus débruitée à son énergie lissée précédemment calculée E2>n-i,j . ou à une valeur de l'ordre de cette énergie lissée E2,n-l,j (tests 200 et 201). Cette fenêtre de lissage peut être une fenêtre exponentielle définie par un facteur d'oubli À compris entre 0 et 1. Ce facteur d'oubli peut prendre trois valeurs . l'une . très proche de 0 (par exemple 7 = 0) choisie à l'étape 202 si E2,n,j A E2in-ij, A étant un coefficient plus grand que 1 ; et la troisième 7P comprise entre 0 et Xq (par exemple ,P = 0,98) choisie à l'étape 204 si E2,n-i,j E2,n,j . E2,n-l@j Le lissage exponentiel avec le facteur d'oubli # est ensuite effectué classiquement à l'étape 205 selon Un exemple de variation dans le temps des énergies E1,n,J' E2,n,J et des énergies lissées E1,n,J et E2,n, est représenté sur la figure 5. On voit qu'on arrive à un bon suivi des énergies lissées lorsqu'on détermine le facteur d'oubli sur la base des variations de l'énergie E2,n,j correspondant à la version la plus débruitée du signal Le facteur d'oubli #p permet de prendre en compte les augmentations de niveau du bruit de fond, les diminutions d'énergie étant suivies par le facteur d'oubli #r. Le facteur d'oubli #q très proche de 1 fait que les énergies lissées ne suivent pas les augmentations d'énergies brusques dues à la parole. Le facteur #q reste toutefois légèrement inféneur à 1 pour éviter les erreurs causées par une augmentation du bruit de fond pouvant survenir pendant une assez longue période de parole L'automate de détection d'activité vocale est contrôlé notamment par un paramètre résultant d'une comparaison des énergies E1,n,j et E2,n,j Ce paramètre peut notamment être le rapport dn,j = E,n.lE2,n,j On voit sur la figure 5 que ce rapport dn,j permet de bien détecter les phases de parole (représentées par des hachures) Le contrôle de l'automate de détection peut également utiliser d'autres paramètres, tels qu'un paramètre lié au rapport signal-sur-bruit snrn = E,n,/E1,n,j, ce qui revient à prendre en compte une comparaison entre les énergies E1 nj et É,n,j Le module 21 de contrôle des automates relatifs aux différentes bandes d'index j calcule les paramètres dn,j et snrnj à l'étape 210, puis détermine l'état des automates Le nouvel état #n,j de l'automate relatif à la bande j dépend de l'état précédent n-1 1 de dn,j et de snrn par exemple comme indiqué sur le diagramme de la figure 6 Quatre états sont possibles -#j= 0 détecte le silence, ou absence de parole , #j=2 détecte la présence d'une activité vocale , et les états #j=1 et #j=3 sont des états intermédiaires de montée et de descente Lorsque l'automate est dans l'état de silence (on-1,j = 0), il y reste si d, dépasse un premier seuil a1j, et il passe dans l'état de montée dans le cas contraire Dans l'état de montée (on-1,J = 1), il revient dans l'état de silence si du dépasse un second seuil [alpha]2j;et il passe dans l'état de parole dans le cas contraire Lorsque l'automate est dans l'état de parole (ôn.1 j = 2), il y reste si snr dépasse un troisième seuil a3j, et il passe dans l'état de descente dans le cas contraire Dans l'état de descente (#n-1,j = 3), l'automate revient dans l'état de parole si snrn,j dépasse un quatrième seuil [alpha]4j, et il revient dans l'état de silence dans le cas contraire Les seuils a1j, j' a2J' a3j et au peuvent être optimisés séparément pour chacune des bandes de fréquences j. Il est également possible que le module 21 fasse interagir les automates relatifs aux différentes bandes. En particulier, il peut forcer à l'état de parole les automates relatifs à chacune des sous-bandes dès lors que l'un d'entre eux se trouve dans l'état de parole Dans ce cas, la sortie du détecteur d'activité vocale 15 concerne l'ensemble de la bande du signal Les deux annexes à la présente description montrent un code source en langage C++, avec une représentation des données en virgule fixe, correspondant à une mise en oeuvre de l'exemple de procédé de détection d'activité vocale décrit ci-dessus. Pour réaliser le détecteur, une possibilité est de traduire ce code source en code exécutable, de l'enregistrer dans une mémoire de programme associée à un processeur de traitement de signal approprié, et de le faire exécuter par ce processeur sur les signaux d'entrée du détecteur La fonction a~priori~signal~power présentée en annexe 1 correspond aux opérations incombant aux modules 18 et 19 du détecteur d'activité vocale 15 de la figure 2 La fonction voice~activity~detector présentée en annexe 2 correspond aux opérations incombant aux modules 20 et 21 de ce détecteur Dans l'exemple particulier des annexes, les paramètres suivant ont été employés- -cl 1 ; 22 = 0 ; i1 = 0,3 , (32, =0,001; m = 3 ; A =4,953; Àp = 0,98 , 7q = 0,99999; 7 = 0 ; cil = a2 = a4J = 1,221 ; (x3 = 1,649. Le Tableau # ci-après donne les correspondances entre les notations employées dans la précédente description et dans les dessins et celles employées dans l'annexe. subband i E [subband] Sn,i module ÊPn,i ou #p1,n,i ou ÊP2,n,i param beta~a~pnori1 ss1i param beta~a~pnori2 ss2l vad j-1 param.vad~number m P1 [vad] ~ ~ ~ E1-n',-1 P 1 s[vad] E1,n, j-1 PZ[vad] E2,n,j-1 P2s[vad] E2,n,j-1 DELTA~P Log(A) d Log(dn,j) snr Log(snrn,j) NOISE état de silence ASCENT état de montée SIGNAL état de parole DESCENT état de descente D-NOISE Log(a1j) D~SIGNAL Log(a2j) SNR~SIGNAL Log(a3j) SNR~NOISE Log(a4j) TABLEAU # Dans la variante de réalisation illustrée par la figure 7, le module de débruitage 25 du détecteur d'activité vocale 15 délivre une seule version débruitée #pn,l du signal de parole, pour que le module 26 en calcule l'énergie E2,n,j pour chaque bande j L'autre version dont le module 26 calcule l'énergie est directement représentée par les échantillons non débruités Sn,l Comme précédemment, diverses méthodes de débruitage peuvent être appliquées par le module 25 Dans l'exemple illustré par les étapes 250 à 256 de la figure 8, le débruitage est opéré par soustraction spectrale non-linéaire avec un coefficient de surestimation du bruit dépendant d'une quantité p liée au rapport signal-sur-bruit Aux étapes 250 à 252, un débruitage préliminaire est effectué pour chaque sous-bande d'index i selon S,i = max( Sn,i - a. Bn-1,i; (3.Bn-,;, le coefficient de surestimation préliminaire étant par exemple a = 2, et la fraction (3 pouvant correspondre à une atténuation du bruit de l'ordre de 10 dB. La quantité p est prise égale au rapport S'n,l/Sn,l à l'étape 253 Le facteur de surestimation f (p) de façon non-linéaire avec la quantité p, par exemple comme représenté sur la figure 9. Pour les valeurs de p les plus proches de 0 (p EPn,i = max( Sn,i - f(p) Bn-1", .Bn-1,). Le détecteur d'activité vocale 15 considéré en référence à la figure 7 utilise, dans chaque bande de fréquences d'index j (et/ou en pleine bande), un automate de détection à deux états, silence ou parole Les énergies E1,n,j et E2,n,j calculées par le module 26 sont respectivement celles contenues dans les composantes Sn,i du signal de parole et celles contenues dans les composantes débruitées #pn,l calculées sur les différentes bandes comme indiqué à l'étape 260 de la figure 8 La comparaison des deux versions différentes du signal de parole porte sur des différences respectives entre les énergies Eze, et E2,n,j et un minorant de l'énergie E2,nj de la version débruitée Ce minorant E2min,j peut notamment correspondre à une valeur minimale, sur une fenêtre glissante, de l'énergie E2,n,j de la version débruitée du signal de parole dans la bande de fréquences considérée Dans ce cas, un module 27 stocke dans une mémoire de type premier entré - premier sorti (FIFO) les L valeurs les plus récentes de l'énergie E2,n,j du signal débruité dans chaque bande j, sur une fenêtre glissante représentant par exemple de l'ordre de 20 trames, et délivre les énergies minimales E2m,n,j = min E2n~k j 0#k#L sur cette fenêtre (étape 270 de la figure 8). Dans chaque bande, cette énergie minimale E2min,j sert de minorant pour le module 28 de contrôle de l'automate , ,,........., 2,n,j-2mm,j de détection, qui utilise une mesure M donnée par M j = É2,n,j -E2ml-n,j (étape "1,n,j -E2min,j ,n,j mm,j 280). L'automate peut être un simple automate binaire utilisant un seuil A., dépendant éventuellement de la bande considérée : si M. > Aj, le bit de sortie 8n, du détecteur représente un état de silence pour la bande j, et si Mi Ai, il représente un état de parole. En variante, le module 28 pourrait délivrer une mesure non binaire de l'activité vocale, représentée par une fonction décroissante de Mj. En variante, le minorant E2min,j utilisé à l'étape 280 pourrait être calculé à l'aide d'une fenêtre exponentielle, avec un facteur d'oubli. Il pourrait aussi être représenté par l'énergie sur la bande j de la quantité ss.#n-1,i servant de plancher dans le débruitage par soustraction spectrale. Dans ce qui précède, l'analyse effectuée pour décider de la présence ou de l'absence d'activité vocale porte directement sur des énergies de versions différentes du signal de parole Bien entendu, les comparaisons pourraient porter sur une fonction monotone de ces énergies, par exemple un logarithme, ou sur une quantité ayant un comportement analogue aux énergies selon l'activité vocale (par exemple la puissance). ANNEXE 1 /******************************************************************* ****** * description * NSS module: * signal power before VAD * ******************************************************************* ******/ /* -----* * included files Tfr ~ ~ # # i il i mm , -m m # - # .j # # mi~i~~.m # # m # m # # .j m m 1-1 m m m ## #. m~ m m m m m m m -----*/ #include #include "private. h" /* * private *----------------------------------------------------------------- -----*/ Word32 power(Wordl6 module, Wordl6 beta, Wordl6 thd, Wordl6 val); /*----------------------------------------------------------------- * a~priori~signal~power *------------------------------------------------------------------ -----*/ void a~priori~signal~power ( /* IN */ Wordl6 *E, Wordl6 *internal~state, Wordl6 *max~noise, W ordl6 *long~term~noise, Wordl6 *frequential~scale, /* IN&OUT */ Wordl6 *alpha, /* OUT */ Word32 *P1, Word32 *P2 ) { int vad; for(vad = 0; vad for(subband = start ; subband ≤ stop; subband++) if(param.subband-size(subband) != param.subband~size[start] ) uniform subband = 0; P1[vad] - 0 ; move32(); P2[vad] = 0 ; move32(); test(); if(sub(internal state[vad], NOISE) 0) for(subband = start; subband ≤ stop ; subband++)( Word32 pwr ; Wordl6 shift ; Wordl6 module ; Wordl6 alpha~long~term ; alpha~long~term = shr(max~noise(subband], 2); movel6(); test(); test(); if(sub(alpha~long~term, long~term~noise[ subband]) ≥ 0) { alpha[subband] = Ox7fff; movel6(); alpha~long~term = long~term noise[subband]; movel6(); } else if(sub(max noise[subband), long~term-noise[subban d]) shift = add(param.subband~shift(subband], shl(frequen tial~scale[subband], 1)); movel6(); } pwr = power(module, param.betaa prioril, long~term~nois e[subband], long~term~noise(subband]); pwr = L~shr (pwr, shift); P1[vad] - L~add(Pl[vad], pwr); move32(); pwr = power(module, param.betaa priori2, long~term~nois e[subband], long~term~noise[subband]); pwr = L~shr (pwr, shift);P2[vad] = L~add(P2[vad], pwr); move32(); } } else { for(subband = start ; ≤ stop; subband++) ( Word32 pwr ; Wordl6 shift ; Wordl6 module ; Wordl6 alpha~long~term; alpha~long~term = mult(alpha(subband], long~term~noise[s ubband]); movel6(); module = sub(E[subband], shl (alpha~long~term/ 2)); movel 6 (); if(uniform~subband) { shift = shl(frequential~scale[subband], 1); movel6(): } else { shift = add(param.subband~shift[subband], shl(frequen tial~scale [subband] , 1)); movel6(); } pwr = power(module, param.beta~a~prioril, long~term~nois e[subband], E [subband] ) ; pwr = L~shr (pwr, P1 [vad] - L~add(Pl[vad], pwr); move32(); pwr = power(module, param.beta a priori2, long~term~nois e[subband], E[subband]): pwr = L~shr(pwr, shift); P2[vad] = L~add(P2[vad], pwr); move32 (); } } } } /* * power *------------------------------------------------------------------ ----%/ Word32 power((Wordl6 module, Wordl6 beta, Wordl6 thd, Wordl6 val) { Word32 power; test (); if(sub(module, mult (beta, thd) ) ≤ 0) { Wordl6 hi, lo; power = L~mult(val, val); move32(); L Extract(power, &hi, &lo); power = Mpy~32~16(hi, lo, beta); move32 (); L Extract(power, &hi, &lo); power = Mpy~32~16(hi, lo, beta); move32 (); } else { power = L~mult(module, module); move32(); } return(power); } ANNEXE 2 /* ****************************************************************** ****** * description * NSS module: * VAD * ******************************************************************* ******/ /* * included files *------------------------------------------------------------------ */ #include #include "private.h" #include "simutool.h" /*------------------------------------------------------------------ * private *################################################################## -----*/ #define DELTA~P (1. 6 * 1024) #define DANOISE (. 2 * 1024) #define D~SIGNAL (. 2 * 1024) #define SNR~SIGNAL (.5 * 1024) #define SNR~NOISE (. 2 * 1024) /*# ## ### # # ## ### #################################################### -----* * voice~activity~detector *------------------------------------------------------------------ -----*/ void voice~activity~detector ( /* IN */ Word32 *P1, Word32 *P2, Wordl6 frame~counter, /* IN&OUT */ Word32 *Pls, Word32 *P2s, Wordl6 *internal~state, /* OUT */ Wordl6 *state ) { int vad ; int signal; int noise; signal = 0; movel6(); noise = 1; movel6(); for(vad = 0; vad Wordl6 snr, d ; Wordl6 logPl, logPls; Wordl6 logP2, logP2s; logP2 = logfix(P2[vad]); movel6(); logP2s = logfix(P2s[vad]); movel6(); test(); if(L~sub(P2[vad], P2s[vad]) > 0) { Wordl6 hil, lo1; Wordl6 hi2, lo2; L~Extract(L~sub(P1(vad], Pls[vad]), &hil, &lol);' L~Extract(L~sub(P2[vad], P2s[vad]), &hi2, &lo2); test(); if(sub(sub(logP2, logP2s), DELTA~P) P1s[vad] = L add(P1s[vad], L shr(Mpy~32~16(hil, loi, Ox6 666), 4)); move32(); P2s[vad] =L~add(P2s[vad], L~shr(Mpy-32~16(hi2, lo2, Ox6 666), 4)); move32(); } else { Pls[vad] =L~add(Pls[vad], L~shr(Mpy~32~16(hil, loi, Ox6 8db), 13)); move32(); P2s[vad] =L~add(P2s[vad], L~shr(Mpy~32~16(hi2, lo2, Ox6 8db), 13)); move32(); } } else { Pls[vad] - P1[vad]; move32 (); P2s[vad] = P2[vad]; move32(); } logPl = logfix(P1[vad]); movel6(); logPls = logfix(Pls[vad]); movel6(); d = sub(logPl, logP2); movel6(); snr = subdogPl, logPls); movel6(); ProbeFixl6("d", &d, 1, 1.) ; ProbeFixl6 ("~snr", &snr, 1, 1.); { wordl6 pp ; ProbeFixl6("pl", &logPl, 1, 1.); ProbeFixl6("p2", &logP2, 1, 1.); ProbeFixl6("pls", &logPls, 1, 1.); ProbeFixl6("p2s", &logP2s, 1, 1.) ; pp = logP2 - logP2s; ProbeFixl6("dp", &pp, 1, 1.) ; } test(): if(sub(internal~state[vad], NOISE) == 0) goto LABEL~NOISE; test(); if(sub(internal~state[vad], ASCENT) == 0) goto LABEL~ASCENT; test(); if(sub(internal~state[vad], SIGNAL) == 0) goto LABEL~SIGNAL; test(); if(sub(internal~state[vad], DESCENT) == 0) goto LABEL~DESCENT; LABEL~NOISE: test(); if(sub(d, D~NOISE) internal state[vad] = ASCENT; movel6(); } goto LABEL~END~VAD; LABEL~ASCENT: test(): if(sub(d, D~SIGNAL) internal~state[vad) - SIGNAL; movel6(); signal = 1; movel6(); noise = 0; movel6(); } else { internal~state[vad] = NOISE; movel6(); } goto LABEL~END~VAD; LABEL~SIGNAL: test(); if (sub(snr, SNR~SIGNAL) internal~state[vad) - SIGNAL; movel6(); signal = 1; movel6(); noise = 0; movel6(); } goto LABEL~END~VAD; LABEL END VAD: } *state = TRANSITION; movel6(); test () ; test () ; if (signal != 0) { test(); if(sub(frame~counter, param.init-frame~number) ≥ 0) { for(vad = 0; vad } else if(noise ! = 0) { *state = NOISE; movel6(); } } REVENDICATIONS 1 Procédé de détection d'activité vocale dans un signal de parole numérique (s) dans au moins une bande de fréquences, caractérisé en ce qu'on détecte l'activité vocale sur la base d'une analyse comprenant une comparaison, dans ladite bande de fréquences, de deux versions différentes du signal de parole dont l'une au moins est une version débruitée 2 Procédé selon la revendication 1, dans lequel ladite comparaison porte sur des énergies respectives (E1,n,j' E2,n,), évaluées dans ladite bande de fréquences, des deux versions différentes du signal de parole, ou sur une fonction monotone desdites énergies 3 Procédé selon la revendication 1 ou 2, dans lequel ladite analyse comprend en outre un lissage temporel de l'énergie (E1,n,j) d'une desdites versions du signal de parole, et une comparaison entre l'énergie de ladite version et l'énergie lissée (#1,n,j). 4 Procédé selon la revendication 3, dans lequel la comparaison entre l'énergie de ladite version (E,n,t) et l'énergie lissée (E-)n,j) contrôle les transitions d'un automate de détection d'activité vocale d'un état de parole vers un état de silence, tandis que la comparaison des deux versions différentes du signal de parole contrôle les transitions de l'automate de détection de l'état de silence vers l'état de parole 5 Procédé selon l'une quelconque des revendications 1 à 4, dans lequel les deux versions différentes du signal de parole sont deux versions débruitées par soustraction spectrale non-linéaire, une première des deux versions (#p1,n,l) étant débruitée de façon à ne pas être inférieure, dans le domaine spectral, à une première fraction (ss1i) d'une estimation à long terme (#n,l) représentative d'une composante de bruit comprise dans le signal de parole, et la seconde des deux versions (#p2,n,l) étant débruitée de façon à ne pas être inférieure, dans le domaine spectral, à une seconde fraction (ss2l) de ladite estimation à long terme, plus petite que la première fraction. 6 Procédé selon la revendication 5, dans lequel on effectue un lissage temporel de l'énergie de chacune des deux versions du signal de parole, au moyen d'une fenêtre de lissage déterminée en comparant l'énergie (E2,n,j) de la seconde des deux versions à l'énergie lissée ( E2,n,j ) de la seconde des deux versions 7. Procédé selon la revendication 6, dans lequel la fenêtre de lissage est une fenêtre exponentielle définie par un facteur d'oubli (#) 8 Procédé selon la revendication 7, dans lequel le facteur d'oubli (#) a une valeur (kr) sensiblement nulle lorsque l'énergie (E2,n,) de la seconde des deux versions est inférieure à une valeur de l'ordre de l'énergie lissée (E2,n,j) de la seconde des deux versions. 9 Procédé selon la revendication 8, dans lequel le facteur d'oubli (#) a une première valeur (#q) sensiblement égale à 1 lorsque l'énergie (E2,n,j) de la seconde des deux versions est supérieure à ladite valeur de l'ordre de l'énergie lissée multipliée par un coefficient (#) plus grand que 1, et une seconde valeur (#p) comprise entre 0 et ladite première valeur lorsque l'énergie de la seconde des deux versions est supérieure à ladite valeur de l'ordre de l'énergie lissée et inférieure à ladite valeur de l'ordre de l'énergie lissée multipliée par ledit coefficient 10 Procédé selon l'une quelconque des revendications 5 à 9, dans lequel les première et seconde fractions (ss1l,(32,) correspondent sensiblement à des atténuations de 10 dB et de 60 dB, respectivement. 11 Procédé selon l'une quelconque des revendications 1 à 10, dans lequel la comparaison des deux versions différentes du signal de parole porte sur des différences respectives entre les énergies (E1 nj, E2,n,) de ces deux versions dans ladite bande de fréquences et un minorant (E2min,j) de l'énergie (#2,n,j) de la version débruitée du signal de parole dans ladite bande de fréquences 12. Procédé selon la revendication 11, dans lequel l'une des deux versions différentes du signal de parole est une version non débruitée du signal de parole 13 Dispositif de détection d'activité vocale dans un signal de parole, comprenant des moyens de traitement de signal (15) agencés pour mettre en oeuvre un procédé selon l'une quelconque des revendications 1 à 12. 14 Programme d'ordinateur, chargeable dans une mémoire associée à un processeur, et comprenant des portions de code pour la mise en #uvre d'un procédé selon l'une quelconque des revendications 1 à 12 lors de l'exécution dudit programme par le processeur. 15 Support informatique, sur lequel est enregistré un programme selon la revendication 14