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