FR 2961938 A1 20111230 FR 1002674 A 20100625 INRIA 117.FRD Synthétiseur numérique audio amélioré L'invention concerne la synthèse numérique audio en temps réel. Plus particulièrement, l'invention s'applique dans les domaines qui nécessitent de réaliser une modification spectrale d'un signal audio en temps réel, par exemple dans les prothèses auditives, les jeux vidéos, la sonorisation d'espaces, etc. Depuis le milieu des années 1980, des solutions ont été recherchées pour permettre de reconstruire un signal audio à partir de son spectre d'amplitude. Pour cela, ces méthodes se basent sur l'utilisation de la transformée de Fourier à court terme (Short-Term Fourier Transform en anglais ou STFT) dans des conditions précises. Ces méthodes présentent néanmoins plusieurs désavantages. Le premier est qu'elles nécessitent de travailler sur tout le signal, ce qui empêche de fonctionner en temps réel. De plus, ces méthodes sont basées sur une réduction itérative non bornée qui présente un coût de calcul important. L'invention vient améliorer la situation. A cet effet, l'invention propose un synthétiseur numérique audio, comprenant : * une mémoire d'entrée pour recevoir une suite de données numériques représentatives du spectre d'amplitude d'un signal audio, sur des fenêtres temporelles consécutives et chevauchantes, * un calculateur, agencé pour recevoir en entrée un jeu de données numériques d'esquisse d'une fenêtre courante comprenant en début de fenêtre des données extrapolées d'amplitude, et des valeurs nulles pour le reste de la fenêtre, et pour établir en réponse une représentation numérique de la transformée de Fourier discrète complexe de ce jeu, * un composeur, agencé pour combiner l'entrée du spectre d'amplitude associé à la fenêtre courante considérée et la représentation numérique déterminée par le calculateur, et pour appeler le calculateur avec les données résultantes pour établir une représentation numérique de la transformée de Fourier discrète complexe inverse correspondante, ce qui fournit un jeu de données numériques estimées, relatives à la fenêtre courante considérée, et * un additionneur, pour cumuler sélectivement les données numériques estimées qui correspondent à un même temps. Dans ce synthétiseur : * le composeur est agencé pour calculer un jeu de données numériques auxiliaires, en prenant le jeu de données numériques estimées courant, divisé par une fonction de fenêtre sur chaque fenêtre temporelle, 10 * l'additionneur est agencé pour ajouter le jeu de données numériques estimées courant multiplié par la fonction de fenêtre à la valeur précédente du cumul, * un extrapolateur est agencé pour calculer le jeu de données numériques d'esquisse pour une fenêtre courante à partir du jeu de données numériques auxiliaires de la fenêtre précédente multiplié sélectivement par le carré de la fonction de fenêtre. 15 D'autres caractéristiques et avantages de l'invention apparaîtront mieux à la lecture de la description qui suit, tirée d'exemples donnés à titre illustratif et non limitatif, tirés des dessins sur lesquels : - la figure 1 représente un exemple de mise en oeuvre d'un synthétiseur selon l'invention, 20 et - la figure 2 représente un diagramme de flux des opérations mises en oeuvre par le synthétiseur de la figure 1. La description détaillée est augmentée de l'annexe A, qui donne la formulation de 25 certaines formules mathématiques mises en oeuvre dans le cadre de l'invention. Cette annexe est mise à part dans un but de clarification, et pour faciliter les renvois. Elle est partie intégrante de la description, et pourra donc non seulement servir à mieux faire comprendre la présente invention, mais aussi contribuer à sa définition, le cas échéant. 30 Les dessins et la description ci-après contiennent, pour l'essentiel, des éléments de caractère certain. Ils pourront donc non seulement servir à mieux faire comprendre la présente invention, mais aussi contribuer à sa définition, le cas échéant. La figure 1 représente un synthétiseur audio 100 selon l'invention. Le synthétiseur 100 comprend un extrapolateur 110, un calculateur 120, un composeur 130, et un additionneur 140. En fonctionnement, le synthétiseur 100 reçoit en entrée des données numériques 150 (ci-après notées Fi(c))) représentatives du spectre d'amplitude d'un signal audio. Les données numériques 150 sont traitées par le synthétiseur 100, et sont retournées sous la forme de données numériques de signal audio 160. Comme cela apparaîtra avec la figure 2, le synthétiseur 100 travaille sur des fenêtres temporelles consécutives et chevauchantes. Dans l'exemple décrit ici, ces fenêtres portent sur un nombre U de trames dans le signal audio que l'on cherche à resynthétiser. Chaque trame comprend N échantillons dont les L derniers sont extrapolés. L est choisi dans l'exemple décrit ici comme un diviseur de la taille N de la STFT. De manière préférée, N est un multiple de 4L. Le synthétiseur audio 100 fonctionne sur la base d'une boucle, dans laquelle une trame est extrapolée à chaque itération. Le synthétiseur 100 opère conformément au diagramme de flux de la figure 2. Dans une première opération 200, la synthèse audio est initialisée au moyen d'une fonction Init(). La fonction Init() prépare les variables et paramètres qui vont être utilisés dans la synthèse et leur assigne des valeurs d'origine. Dans l'exemple décrit ici, la fonction Init() est réalisée par le composeur 130. Ces variables et paramètres sont : - N le nombre d'échantillons de la transformée de Fourier, N est aussi le nombre d'échantillons de chaque trame, - L le nombre d'échantillons extrapolés par itération, 30 - U le nombre d'itérations, - xo(n) = 0 pour n compris entre 0 et N-l. À chaque itération, un signal xi(n) est calculé, qui sert de données auxiliaires à l'extrapolation de l'itération suivante, - s(n) = 0 pour n compris entre 0 et U*L+N-1, où s(n) est le signal resynthétisé, 25 - le compteur i est initialisé à 0. Une fois que toutes les variables ont été initialisées, la boucle de resynthèse commence en 210 avec l'incrémentation du compteur i. Ensuite, un test sur la valeur du compteur i dans une opération 220 peut déclencher une opération 230 de sortie de boucle si l'ensemble des trames ont été traitées. Dans le cas contraire, des données d'esquisse y(n) sont calculées dans une opération 240 au moyen d'une fonction Ext(). La fonction Ext() est dans l'exemple décrit ici réalisée par l'extrapolateur 110. La fonction Ext() utilise comme argument les données auxiliaires xi_1(n). Pour toutes les itérations, les données auxiliaires xi_1(n) sont calculées à l'itération précédente, sauf pour la première, où xo(n) est calculé par la fonction Irait(). Pour chaque n variant entre 0 et N-L-1, la fonction Ext() définit y(n) comme le produit des données x;4(n+L) par le carré d'une fonction de fenêtrage H(n) selon la formule donnée en (10) dans l'annexe A. Pour chaque n variant entre N-L et N-1, la fonction Ext() définit y(n) égal à 0. Ensuite, le calculateur 120 est appelé dans une opération 250 pour calculer la transformée de Fourier discrète de y(n) au moyen d'une fonction DFT(). Le résultat de cette fonction est stocké dans des données Y(w) où w varie entre 0 et N-1, selon la formule (20) de l'annexe A. Le composeur 130 est alors appelé dans une opération 260 pour combiner les données Y(w) avec des données Fi(w) pour produire des données Z(w), au moyen d'une fonction Comp(). 30 Les données Fi(w) sont des données de spectre d'amplitude du signal à resynthétiser correspondant à la trame de l'itération courante. Dans l'exemple décrit ici, les données Fi(w) sont calculées par STFT du signal à resynthétiser, en utilisant la fonction H(n) comme fonction fenêtre. 4 20 25 La fonction Comp() combine les données Y(w) avec des données Fi(w) en appliquant le module Fi(w) aux données Y(w). Ainsi, dans les données Z(w), la phase des données d'esquisse y(n) est préservée, et l'énergie de la trame à resynthétiser est réintroduite. Dans l'exemple décrit ici, les données Fi(w) sont reçues en entrée. Cependant, le synthétiseur 100 pourrait comprendre un spectromètre audio pour calculer ces coefficients et les fournir au composeur 130. Le synthétiseur peut également comprendre un composant placé entre le spectromètre et 10 la mémoire d'entrée propre à modifier les données numériques représentatives du spectre d'amplitude en entrée, et à transmettre les données de spectre d'amplitude modifiées à la mémoire d'entrée. Ce composant peut appliquer un algorithme ou filtre quelconque de prétraitement du 15 spectre d'amplitude, dans le cadre par exemple d'une transformation du type voix oesophagienne vers voie laryngée. Les données Z(w) sont alors renvoyées au calculateur 120 dans une opération 270. Dans cette opération, le calculateur 120 exécute une fonction IDFT() qui réalise l'inverse de 20 l'opération 250, et stocke le résultat dans des données z(n), selon la formule (30) de l'annexe A. Le composeur 130 est alors rappelé dans une opération 280 pour calculer les données auxiliaires xi(n) pour l'itération suivante. Cette opération est réalisée au moyen d'une 25 fonction Rest() qui reçoit les données z(n) en entrée, et qui les divise par la fonction de fenêtre H(n). Enfin, le signal resynthétisé s(n) est enfin calculé dans une opération 290 au moyen d'une fonction Add(), puis la boucle reprend en 210. La fonction Add() est réalisée par 30 l'additionneur 140, et reçoit comme arguments les données z(n) et le compteur i. La fonction Add() ajoute alors les données z(n) multipliées par la fonction de fenêtre H(n) aux données resynthétisées d'indice s(i*L+n), selon la formule (40) de l'annexe A. Comme cela a été mentionné en introduction, le domaine de la resynthèse à partir du spectre d'amplitude est un domaine qui est mal connu et difficilement compris. Ce domaine fait appel à la maîtrise des transformées de Fourier à court terme (STFT), dont le sens physique n'est pas toujours maîtrisé. Bien que les phénomènes en cause ne soient pas entièrement compris, il est possible d'en donner une explication au moins partielle, comme on le verra maintenant. Chaque itération permet d'extrapoler les L échantillons d'une trame courante. Comme 10 ces échantillons sont à la suite des trames précédentes, les données auxiliaires xi_1(n) contiennent donc déjà une grande partie du signal. C'est pour cela que les données auxiliaires xi_i(n) sont d'abord décalées vers la gauche de L indices, et les L derniers éléments sont laissés nuls. Ensuite, les données d'esquisse 15 qui servent au calcul des données de resynthèse sont multipliées par la fonction de fenêtre H(n) au carré. La fonction de fenêtre utilisée dans l'exemple décrit ici est une fenêtre de Hamming normalisée, dont la formule est donnée en (50) dans l'annexe A. De fait, l'opération 250 est une STFT modifiée, parce que c'est le carré de la fonction de 20 fenêtre qui est appliqué au lieu de la fonction fenêtre. C'est pour cela que les données z(n) sont divisées par la fonction de fenêtre H(n) pour donner les données auxiliaires xi(n) dans l'opération 280. Les multiplications et division par la fonction de fenêtre ne sont pas faites au hasard. En 25 effet, on pourrait penser supprimer la division de l'opération 280 et faire une multiplication simple dans l'opération 240 au lieu d'une multiplication par le carré. Mais cela serait ne pas tenir compte du fait que la multiplication de l'opération 250 est faite sur des x1_1(n) décalés par rapport à ceux de l'opération 280. Et ce détail est crucial, 30 car cela permet d'utiliser un signal xi(n) qui est une sorte de vision "idéalisée" du signal audio_ resynthétisé. À l'inverse, les données resynthétisées s(n) sont fenêtrées par rapport aux données z(n). Cela est réalisé afin d'obtenir un effet de lissage de type chevauchement et addition5 (overlap-add en anglais ou OLA), et permet de limiter les discontinuités au niveau des extrémités des trames. L'annexe A et ces explications ne sont pas qu'une suite de formules mathématiques 5 théoriques. Ainsi, le Demandeur a dans un premier temps utilisé une formule (50) avec une multiplication simple au lieu de la multiplication par le carré. Les expérimentations ne donnant pas satisfaction, ses recherches l'ont mené à l'utilisation du carré de cette fenêtre. Cela est avantageux car la multiplication par le 10 carré de la fonction de fenêtre assure la normalisation et économise une étape de calcul. D'autres fonctions pourraient être utilisées pour la fonction de fenêtre, comme une fenêtre de Hann normalisée ou une autre fenêtre normalisée. L'utilisation de la fenêtre normalisée est importante car celle-ci permet d'une part le lissage des données 15 resynthétisées s(n) sans qu'il soit nécessaire d'autre part de normaliser ces dernières à la fin de la resynthèse. En effet, sans lissage, des artefacts apparaîtraient aux frontières des trames. Et sans fenêtre normalisée, il faudrait tenir compte de tous les éléments produits pour 20 normaliser, ce qui empêcherait une application temps réel. Annexe A 0 . N-L n)= N -Ln (10) Yw -2 III -W ,71 *e N (20) 2 .titi .rt ô-1Z() * e (30) = s * L + n = s L+ n) + () ~I ) (40) 0.54- 0.46* cos (50) 4*O.542+243.462 REVENDICATIONS1. Synthétiseur numérique audio, comprenant : * une mémoire d'entrée pour recevoir une suite de données numériques (Fi(w)) représentatives du spectre d'amplitude d'un signal audio, sur des fenêtres temporelles consécutives et chevauchantes, * un calculateur (120), agencé pour recevoir en entrée un jeu de données numériques d'esquisse (y(n)) d'une fenêtre courante comprenant en début de fenêtre des données extrapolées d'amplitude, et des valeurs nulles pour le reste de la fenêtre, et pour établir en réponse une représentation numérique (Y(w)) de la transformée de Fourier discrète complexe de ce jeu, * un composeur (130), agencé pour combiner l'entrée de spectre d'amplitude (Fi(w)) associée à la fenêtre courante considérée et la représentation numérique (Y(w)) déterminée par le calculateur, et pour appeler le calculateur (120) avec les données résultantes pour établir une représentation numérique de la transformée de Fourier discrète complexe inverse correspondante, ce qui fournit un jeu de données numériques estimées (z(n)), relatives à la fenêtre courante considérée, et * un additionneur (140), pour cumuler sélectivement les données numériques estimées (z(n)) qui correspondent à un même temps, caractérisé en ce que : * le composeur (130) est agencé pour calculer un jeu de données numériques auxiliaires (x;(n)), en prenant le jeu de données numériques estimées (z(n)) courant, divisé par une fonction de fenêtre (H(n)) sur chaque fenêtre temporelle, * l'additionneur (140) est agencé pour ajouter le jeu de données numériques estimées (z(n)) courant multiplié par la fonction de fenêtre (H) à la valeur précédente du cumul, et en ce qu'il comprend un extrapolateur (110) agencé pour calculer le jeu de données numériques d'esquisse (y(n)) pour une fenêtre courante à partir du jeu de données numériques auxiliaires (x;_I(n)) de la fenêtre précédente multiplié sélectivement par le carré de la fonction de fenêtre. 2. Synthétiseur selon la revendication 1, dans lequel l'extrapolateur (110) calcule le jeu de données numériques d'esquisse (y(n)) pour une fenêtre courante par décalage à gauche de L échantillons du jeu de données numériques auxiliaires (x;_i(n)) de la fenêtreprécédente, avec mise à zéro des L derniers échantillons du jeu décalé, puis par multiplication terme à terme par le carré de la fonction de fenêtre. 3. Synthétiseur selon la revendication 1 ou 2, dans lequel la fonction de fenêtre (H) 5 comprend une fonction fenêtre de Hamming normalisée. 4. Synthétiseur selon l'une des revendications 1 à 3, comprenant en outre un spectromètre agencé pour calculer une suite de données numériques (Fi(w)) représentatives du spectre d'amplitude d'un signal audio en entrée, et pour transmettre 10 ces données à la mémoire d'entrée. 5. Synthétiseur selon la revendication 4, comprenant un composant placé entre le spectromètre et la mémoire d'entrée propre à modifier les données numériques représentatives du spectre d'amplitude en entrée, et à transmettre les données de spectre 15 d'amplitude modifiées à la mémoire d'entrée.