Débruitage de parole par un filtrage de Wiener reposant sur le
Transcription
Débruitage de parole par un filtrage de Wiener reposant sur le
Phelma / SICOM 3A - Projet de Traitement et Filtrage Numérique des Signaux Filtrage de Wiener/LPC Débruitage de parole par un filtrage de Wiener reposant sur le modèle LPC I. Partie théorique I.1. Objectifs du débruitage de parole Le débruitage de parole est un traitement appliqué au signal de parole afin de réduire les effets néfastes d’un environnement bruyant. Il peut s'agir par exemple du bruit ambiant d'un bureau, d'une cafétéria, de la rue, ou de signaux de parole provenant d’autres locuteurs. L'ensemble des bruits générés dans l'habitacle d'une voiture est un exemple d'actualité depuis l'explosion du marché des outils de télécommunications mobiles. Il explique en bonne partie (avec le développement des DSP) le regain d’intérêt actuel considérable que montre le milieu industriel pour des techniques dont les bases théoriques sont relativement anciennes. Les conséquences du bruit sur la parole sont doubles : dégradation de la qualité, c’est-à-dire du caractère naturel et agréable du signal, et dégradation de l'intelligibilité du message. Naturellement, ces deux effets sont souvent liés. Dans cette étude, on s’intéresse au cas relativement simple du débruitage d’un signal de parole parasité par un bruit blanc additif. On se place dans le cas où l’on ne dispose que d’un seul capteur fournissant le signal bruité (il existe des méthodes performantes à plusieurs capteurs). Le débruitage est réalisé en utilisant à la fois un filtre de Wiener et la modélisation du signal par prédiction linéaire, points théoriques que nous allons maintenant développer. I.2. Le filtre de Wiener Le filtre de Wiener est défini comme le filtre fournissant l'estimateur linéaire optimal d'un signal s(n) à partir d'une observation x(n). Le critère d’optimalité est la minimisation de l’erreur quadratique moyenne entre le signal s(n) et le résultat sˆ (n) du filtrage de x(n). Dans notre cas, on a une observation x (n) = s (n) + v(n) , avec s(n) le signal de parole et v(n) le bruit. Le filtre minimisant 2 E (sˆ(n) − s (n) ) est donné dans le domaine fréquentiel par [ ] γ sx (e jθ ) . W (e ) = γ x (e jθ ) jθ γ sx (e jθ ) et γ x (e jθ ) sont respectivement la densité spectrale de puissance interspectre (dspi) du signal s(n) et et de l’observation x(n), et la densité spectrale de puissance (dsp) de l'observation x(n) (voir l’annexe 2). Dans notre étude, le signal et le bruit sont supposés être décorrélés, et le filtre devient alors : 1 Phelma / SICOM 3A - Projet de Traitement et Filtrage Numérique des Signaux W (e jθ ) = Filtrage de Wiener/LPC γ s (e jθ ) . γ s (e jθ ) + γ v (e jθ ) γ s (e jθ ) et γ v (e jθ ) sont respectivement les dsp du signal et du bruit. Il s'agit d'un filtre à phase nulle, donc non-causal, qui possède la propriété essentielle de s’adapter au niveau de bruit. Par exemple, il tend vers un filtre passe-tout lorsque le bruit devient très faible. I.3. Utilisation de la modélisation LPC du signal En traitement de parole, un moyen efficace pour obtenir un filtre numérique d’ordre raisonnable à partir d'une formule utilisant des dsp de signaux est d’utiliser la modélisation par prédiction linéaire (LPC pour Linear Predictive Coding, voir l’annexe 1) pour estimer ces dsp, soit : G2 / N γ s ( e jθ ) ≈ 1+ 2 p ∑a e k =1 − jkθ = G2 / N A(e jθ ) 2 , k p avec A( z ) = 1 + ∑ a k z −k , ak étant appelés « coefficients de prédiction linéaire ». k =1 Par ailleurs nous faisons l’hypothèse que le bruit additif est blanc. Sa dsp est donc égale à une constante (sa variance σ v2 ), et le filtre de Wiener de la section précédente devient γ s (e jθ ) W (e ) = . γ s (e jθ ) + σ v2 jθ Dans notre application, on supposera que σ v2 est connue (par exemple, elle peut être mesurée pendant les silences de parole). Par contre les paramètres de γ s (e jθ ) sont inconnus, puisqu’ils doivent être estimés par prédiction linéaire à partir du signal s(n) non bruité. Dans notre étude, nous pourrons considérer deux cas : 1er cas : γ s (e jθ ) est estimée à partir du signal propre. C’est un cas idéal, non réaliste, mais qui permettra de construire et de tester le filtre de Wiener idéal, auquel on pourra comparer les performances du filtre plus réaliste du 2ème cas. 2ème cas : γ s (e jθ ) est estimée à partir du signal bruité (faute de mieux !) Pour compenser la sousoptimalité de ce choix, Lim et Oppenheim (1979) ont proposé une solution itérative qui consiste à réutiliser le résultat du filtrage pour construire un nouveau filtre de Wiener et réitérer le filtrage. A présent, nous pouvons chercher une fonction de transfert en z dont la réponse fréquentielle (calculée sur le cercle unité) corresponde à la formule de Wiener donnée plus haut, et qui s’écrive sous la forme d’une fraction rationnelle de polynômes en z afin de pouvoir être réalisée sous la 2 Phelma / SICOM 3A - Projet de Traitement et Filtrage Numérique des Signaux Filtrage de Wiener/LPC 2 forme d’un filtre RII récursif. Pour cela, on peut remarquer que A(e jθ ) = A(e jθ ) A(e − jθ ) . Pour obtenir un tel filtre, une solution directe consiste à choisir G2 / N A( z ) A( z −1 ) W ( z) = , G2 / N 2 +σv A( z ) A( z −1 ) soit W ( z) = G 2 / Nσ v2 G 2 / Nσ v2 + A( z ) A( z −1 ) = G 2 / Nσ v2 A1 ( z ) A1 ( z −1 ) , avec A1 ( z ) A1 ( z −1 ) = G 2 / Nσ v2 + A( z ) A( z −1 ) . La dernière équation provient du fait que A( z ) A( z −1 ) est un polynôme symétrique en z dans le sens où les puissances de z ont même coefficient que les puissances de z −1 . L’ajout d’une constante à un polynôme symétrique donne alors un autre polynôme symétrique et donc factorisable sous la forme donnée. Cette expression permet de mieux comprendre l’intérêt du filtrage de Wiener reposant sur le modèle LPC du signal, et correspondant donc à un filtre tout pôle. Un tel filtre permet en effet de décrire les pics de hautes énergie du signal de parole (les formants) : ils correspondent aux pôles du modèle, c’est-à-dire aux racines du polynôme A(z ) . Le filtre de Wiener cherche ainsi à renforcer ces zones énergétiques du signal qui ont été noyées par le bruit. Par rapport aux racines de A(z), les racines de A1 ( z ) sont plus ou moins ramenées vers l’origine par l’influence de G 2 / Nσ v2 . Lorsque le bruit augmente, ce terme diminue et on tend vers les racines de A(z ) , et donc un filtre spectralement bien contrasté. Lorsque le bruit diminue, G 2 / Nσ v2 augmente, les racines de A1 ( z ) convergent vers le centre du cercle unité, et le filtre s’aplatit en conséquence. I.4. Forme causale du filtre Jusqu’ici, W(z) est considéré dans sa forme non-causale, ce qui signifie que le filtrage utilise des échantillons passés et aussi futurs du signal. Dans la pratique, ceci se traduit souvent par un double filtrage forward-backward sur des portions finies de signal (le signal étant fenêtré, voir la section I.5). Pour éviter ce double filtrage, et éventuellement satisfaire l’exigence de (pseudo-) temps réel, on peut rechercher une forme causale pour le filtre. L’obtention de la forme causale exacte de W(z) n’est pas triviale. Elle est décrite par Papoulis (1977) (section 10.3) ou Roberts & Mullis (1987) (section 7.4) et résumée à l'annexe 2 de ce document. Cette procédure aboutit à la formule suivante : Wc1 ( z ) = G 2 B1 ( z ) , Nσ v2 A1 ( z ) 3 Phelma / SICOM 3A - Projet de Traitement et Filtrage Numérique des Signaux Filtrage de Wiener/LPC où B1 (z ) est un polynôme de degré au plus p-1. Une solution plus simple et moins coûteuse consiste à décomposer W(z) comme le simple produit de deux termes causaux et anti-causaux. On retient alors le facteur causal : G / Nσ v2 Wc 2 ( z ) = A1 ( z ) . Notons que cette expression ne repose plus sur un critère exact de minimisation d’erreur quadratique entre le signal filtré sˆ (n) et le signal s(n) (il ne s'agit plus à proprement parlé d'un filtre de Wiener). I.5. Fenêtrage des signaux Dans la pratique, pour tenir compte de la non-stationnarité du signal de parole, le traitement est réalisé sur des fenêtres d'analyse successives d’une durée de l’ordre de quelques dizaines de ms, sur lesquelles le signal est considéré comme stationnaire. On renouvelle le filtre à chaque déplacement de la fenêtre, en prenant garde à assurer une transition bien lisse entre les différentes fenêtres de traitement. Par exemple, le signal complet peut être récupéré en concaténant les différentes trames traitées, avec un recouvrement et une pondération devant vérifier pour tout échantillon n : ∑ w ( n) = 1 , i i wi étant la ième fenêtre d'analyse. Les fenêtres les plus couramment utilisées sont des fenêtres triangulaires ou trapézoïdales. II. Partie pratique La partie pratique se fera sous le logiciel MATLAB. L’implémentation sous MATLAB a deux objectifs principaux. Le premier est d’approfondir et d’illustrer les aspects théoriques de ce projet en exploitant les fonctionnalités de calcul et d’affichage des résultats (numériques et graphiques) de ce bel outil. Le deuxième objectif est de simuler une chaîne complète de débruitage de parole, quasiment en condition réelle d’utilisation dans un système dédié, hormis le temps-réel que ne permet pas Matlab. II.1. Illustration des aspects théoriques Pour illustrer les aspects théoriques, il faudra dans un premier temps bien comprendre ce qui se passe à l’échelle d’une trame de traitement (c’est-à-dire un filtre donné pour traiter une trame de signal donnée). On pourra se concentrer sur une portion bien stationnaire de parole, par exemple, le cœur d’une voyelle, ou encore mieux, sur une voyelle soutenue (d’une durée nettement supérieure à 4 Phelma / SICOM 3A - Projet de Traitement et Filtrage Numérique des Signaux Filtrage de Wiener/LPC une voyelle en condition naturelle d’élocution, afin de pouvoir filtrer cette voyelle par un filtre unique et écouter le résultat). Le travail à réaliser sera de programmer et tester la procédure permettant le calcul des coefficients des différents filtres possibles, et de réaliser et valider le filtrage à l’échelle de cette (grande) trame unique. Les différents points d’études peuvent être : • Comparaison des formes non-causale et causales 1 et 2 (Wc1(z) et Wc2(z)). Du fait de la complexité de la forme causale 1, on donnera la priorité à l’étude de la forme causale 2 en revenant sur la forme 1 si le temps disponible le permet. • Influence du rapport signal sur bruit. • Influence de l’ordre de la LPC. • Comparaison du cas idéal (dsp estimée à partir du signal propre) et réaliste (dsp estimée à partir du signal bruité). • Dans le second cas, implantation de la solution itérative. On peut dans chaque cas, observer à l'oreille et à l'œil (dans les domaines temporel et fréquentiel) les résultats du débruitage. Il est aussi bien sûr essentiel d’observer la réponse en fréquence des filtres. Dans tous les cas, on ne se contentera pas de simples observations, mais il faudra fournir des explications et interprétations des résultats non immédiats. II.2. Filtrage de parole continue Lorsque les aspects théoriques et pratiques seront bien maîtrisés à l’échelle d’une trame, on pourra passer au filtrage de parole continue, qui permettra de mieux se rendre compte à l’écoute des performances de la technique employée. On implémentera le traitement trame par trame, avec renouvellement du filtre sur des fenêtres de signal glissantes de l’ordre de la dizaine de millisecondes. On proposera des solutions pour assurer une transition correcte entre les fenêtres (impliquant notamment le recouvrement). Une fois la chaîne de traitement validée avec des calculs en conditions optimales (virgule flottante « naturelle » de Matlab), on essaiera de simuler au mieux des solutions compatibles avec une implémentation pseudo temps-réel sur DSP, avec une précision de calcul généralement limitée (on pourra se baser sur les connaissances du cours/BE de DSP). Dans cet esprit, on pourra approfondir les points suivants : • Simulation du calcul et de l’implémentation du filtre en virgule fixe. • Etude de l'influence du nombre de bits utilisé pour le codage des coefficients. • Simulation de la mise à l’échelle des coefficients des filtres : les coefficients calculés par MATLAB n'ont pas de contraintes d'échelle à l’inverse de ce qui se passe généralement dans un DSP à virgule fixe. 5 Phelma / SICOM 3A - Projet de Traitement et Filtrage Numérique des Signaux Filtrage de Wiener/LPC • Etude de la structure de réalisation du filtre, et approximation du filtre de Wiener RII par une version RIF. II.3. Pour aller plus loin Si le temps disponible le permet, on pourra aller plus loin dans l’étude du débruitage de parole, en implémentant des filtres de Wiener basés sur la représentation spectrale par FFT plutôt que par LPC, et implémenter le filtrage dans ce domaine FFT. Demander à l’enseignant le cas échéant ! II.4. Matlab pour les nuls Voici quelques fonctions et programmes utiles pour mener à bien le filtrage et sa validation. La liste est non-exhaustive, sachant que la commande la plus importante sous MATLAB est help. filter – Filtrage numérique mono-dimensionnel causal filtfilt – Filtrage numérique mono-dimensionnel non-causal freqz – Réponse en fréquence de filtre numérique impz – Réponse impulsionnelle de filtre numérique randn – Génération d’un bruit blanc gaussien lpc – Calcul de coefficients de prédiction linéaire hamming – Fenêtre de Hamming conv – Produit de convolution / multiplication de polynômes residuez – Décomposition en fraction rationnelles simples (pour le calcul du filtre causal 1) soundsc – Restitution des signaux par la carte son II.5. Manipulation de signaux Les signaux de parole utilisés sous MATLAB seront enregistrés et stockés dans des fichiers au format « .wav » pouvant être chargés par MATLAB avec la fonction wavread. L’enregistrement se fera avec un microphone relié à la carte son du PC et par l’intermédiaire d’un logiciel d’acquisition, par exemple le « Magnétophone » Windows. La manipulation de ce logiciel est très simple mais elle ne doit pas dispenser de prendre les précautions minimales pour un enregistrement. Notamment, le niveau d’enregistrement devra être réglé suffisamment fort pour quantifier correctement le signal tout en évitant la saturation. Faire attention aussi au choix des paramètres de base : fréquence d’échantillonnage et quantification adaptée à la parole, mode mono (stéréo inutile ici). Le bruit blanc sera simulé avec la fonction randn (voir aussi rand). 6 Phelma / SICOM 3A - Projet de Traitement et Filtrage Numérique des Signaux Filtrage de Wiener/LPC III. Quelques points pratiques Le projet comporte 28 heures de TP, partagées en 7 séances de 4 heures. Vingt heures seront encadrées et 8 heures seront en libre-service (c’est-à-dire non encadrées). Dans ce dernier cas, la salle MISTI et son matériel seront sous la responsabilité d’un étudiant volontaire ou à défaut désigné ! Pensez à faire des sauvegardes de votre travail après chaque séance (si vous travaillez sur votre disque, pas de problème ; si vous travaillez en local, le système d’exploitation Windows XP ne garantit pas la protection de vos fichiers). L’évaluation du travail se fera par un compte-rendu synthétique du travail, complété par une présentation orale suivie de questions. Ces points seront précisés/confirmés par la suite. Références Sur la théorie du filtrage de Wiener : D. Baudois, C. Servière, & A. Silvent (1989), Algorithmes adaptatifs et soustraction de bruit, Traitement du Signal, vol. 6, No. 5, 1989, p. 391-497. A. Papoulis (1977), Signal Analysis, McGraw-Hill, New-York (section 10). Sur la version itérative du filtre de Wiener à base de modèle LPC : J.S. Lim, & A.V. Oppenheim (1979), Enhancement and bandwidth compression of noisy speech, Proc. IEEE, vol. 67, No. 12, pp. 1586-1604. (voir notamment la section V.A.) J.S. Lim (1983), Speech Enhancement, Prentice-Hall, Englewood Cliffs, New Jersey.) J.H. Hansen, & M.A. Clements (1991), Constrained iterative speech enhancement with application to speech recognition, IEEE Trans. Acoust. Speech & Signal Processing, vol. 39, No. 4, pp. 795-805. Sur un exemple d’implantation du filtre de Wiener pour les radiocommunications mobiles : R. Le Bouquin (1996), Enhancement of noisy speech signals: Application to mobile radio communications, Speech Communication, vol. 18, pp. 3-19. Sur la modélisation par prédiction linéaire : J.D. Markel, & A.H.Jr. Gray (1976), Linear Prediction of Speech, Springer-Verlag, New-York. J. Makhoul (1975), Linear prediction : a tutorial review, Proc. IEEE, vol. 63, No. 4, pp. 561-580. Sur la version causale du filtre de Wiener : A. Papoulis (1977), Signal Analysis, McGraw-Hill, New-York (section 10.3). R.A. Roberts, C.T. Mullis, Digital signal processing, Addison-Wesley, 1987 (section 7.4). 7 Phelma / SICOM 3A - Projet de Traitement et Filtrage Numérique des Signaux Filtrage de Wiener/LPC ANNEXE 1 : bref rappel de la modélisation d’un signal de parole par prédiction linéaire La modélisation d’un signal de parole par prédiction linéaire d’ordre p consiste à estimer le signal par une combinaison linéaire de ses p échantillons passés, soit p sˆ (n) = − ∑ a s(n − i ) . i i =1 L’algorithme de Durbin-Levinson permet d’obtenir le jeu de coefficients ai qui minimise l’énergie de l’erreur de prédiction e(n) = s (n) − sˆ(n) sur une fenêtre d’analyse donnée de N échantillons s(n). Cette erreur est aussi le résultat du filtrage de s(n) par le filtre A(z) avec p A( z ) = 1 + ∑ ai z −i . i =1 Dans le domaine des z, on peut noter E ( z ) = A( z ) S ( z ) . A(z) est un filtre blanchisseur, c’est-à-dire qu’il tend à rendre le spectre de e(n) en sortie le plus plat possible. A l’inverse on a : S ( z) = E(z) G = U (z) . A( z ) A( z ) (On normalise e(n) en u(n) et G est le gain prenant en compte l’énergie de e(n) sur la fenêtre d’analyse). Le signal de parole peut donc être considéré comme le résultat d'un processus de couplage source-filtre entre une excitation u(n) de spectre plat unitaire et un filtre H(z) modélisant l’influence du conduit vocal : G H ( z) = . p 1 + ∑ ai z −i i =1 Cette modélisation source-filtre est exploitée en codage. Par exemple, l’excitation u(n) peut être modélisée pour la synthèse du signal par un bruit blanc centré réduit dans le cas des sons non-voisés ou un train d’impulsion unité périodique dans le cas des sons voisés. En analyse spectrale, la modélisation du conduit vocal en filtre tout-pôles permet de décrire correctement l'enveloppe spectrale du signal de parole lorsque z parcours le cercle unité alors que l'excitation contient les informations sur la structure fine du signal. C’est pourquoi un bon estimateur de la dsp du signal en terme d’enveloppe spectrale est donné par : G2 / N γ s (e jθ ) = 1+ 2 p ∑ a k e − jkθ k =1 8 = G2 / N A(e jθ ) 2 . Phelma / SICOM 3A - Projet de Traitement et Filtrage Numérique des Signaux Filtrage de Wiener/LPC ANNEXE 2 : Forme causale du filtre de Wiener Un moyen simple et efficace pour retrouver la formule du filtre de Wiener consiste à considérer le principe d'orthogonalité du filtrage optimal : l'erreur entre le signal s(n) et son estimé sˆ (n) résultat du filtrage de l’observation x(n) par w(k) doit être orthogonale aux observations x(n − m) pour tout m, soit : +∞ E s (n) − ∑ w(k ) x(n − k ) x(n − m) = 0 , k = −∞ ou encore : Rsx (m) − +∞ ∑ w(k ) R x (m − k ) = 0 . k = −∞ Rsx (m) est l’intercorrélation entre le signal et l’observation, et R x (m) est l’autocorrélation de l’observation. Cette dernière équation étant valable pour tout m, sa transformée en z donne : γ sx ( z ) − W ( z )γ x ( z ) = 0 , d’où le filtre de Wiener : W ( z) = γ sx ( z ) . γ x (z) Ce filtre est non-causal. Dans le cas causal, on introduit dans l'équation aux inter/autocorrélations à la fois une contrainte (w(k) causale) et une "relaxation": l’équation ne doit être vérifiée que pour les échantillons passés, c’est-à-dire les indices m positifs. On a alors : +∞ Rsx (m) − ∑ w(k ) R x (m − k ) = u (m) , k =0 ou bien : γ sx ( z ) − W ( z )γ x ( z ) = U ( z ) , avec u(m) une fonction quelconque anti-causale et U(z) sa transformée en z. La solution est fournie par la démarche suivante. On notera par un + une fonction correspondant à la transformée en z d’une fonction causale et par un – une fonction correspondant à la transformée en z d’une fonction anti-causale. D'abord, on factorise γ x (z ) sous la forme : γ x ( z) = F + ( z) F − ( z) (par exemple en factorisant et séparant les pôles et zéros intérieurs et extérieurs au cercle unité). Ensuite, on forme le quotient γ sx ( z ) / F − ( z ) et on l'exprime comme une somme (par exemple en passant par une décomposition en éléments simples) : γ sx ( z ) − F (z) = G + ( z) + G − ( z) . 9 Phelma / SICOM 3A - Projet de Traitement et Filtrage Numérique des Signaux Filtrage de Wiener/LPC Le filtre de Wiener causal est alors donné par W ( z) = G + ( z) F + ( z) . Pour s'en persuader, il suffit de replacer ce résultat dans l’équation γ sx ( z ) − W ( z )γ x ( z ) = U ( z ) , et de vérifier que U(z) correspond à une fonction anti-causale. Vérifiez ce résultat et appliquez ce raisonnement au filtre de Wiener causal dans notre application à base de modèle LPC ! 10