FR 2891099 A1 20070323 FR 0509677 A 20050922 La présente invention concerne une méthode de compression et décompression audio simple, de grande qualité, ne nécessitant pas beaucoup de calculs et permettant d'atteindre des taux de compression très élevés. Ce codec est optimisé aussi bien pour la voix que pour la musique. Les méthodes les plus répandues actuellement utilisent le codage prédictif linéaire (LPC) dans le domaine temps pour la voix et la transformée en cosinus discrète modifiée (MDCT) dans le domaine des fréquences pour la musique. Le présent codec utilise la transformation de Fourier rapide (FFT) pour la voix et la 10 musique et une décomposition en deux plans basée sur l'énergie. Notes: - Dans le domaine des fréquences, un pic local est un point dont la magnitude est plus grande que celle des points situés à gauche et à droite (points voisins ou points latéraux). Un point est plus grand qu'un autre si sa magnitude est plus grande. L'énergie d'une bande est la somme des carrés des magnitudes des points valides qui la composent. - Le codage de la musique convient aussi à la voix mais est moins optimisé à cause notamment de la prise en compte de la phase qui entraîne le recouvrement nécessaire pour la suppression des effets de bord. C'est pourquoi nous distinguerons deux cas à chaque fois que cela est nécessaire. - Enfin, la musique marche parfaitement avec uniquement des pic locaux et les phases mais il y a généralement une petite perte de qualité. Dans le domaine temps, les échantillons non compressés (PCM) sont convertis en 16 bits et en nombres réels double précision. Le nombre de canaux et la fréquence d'échantillonnage sont respectés. La taille des trames (taille des tampons FFT) dépend de la fréquence d'échantillonnage comme suit: 8 et 11 kHz, fréquences inférieures ou égales à 11 kHz: 256 points par trame. 16 et 22 kHz, fréquences supérieures à 11 kHz et inférieures ou égales à 22 kHz: 512 points par trame. 32, 44 et 48 kHz, fréquences supérieures à 22 kHz et inférieures ou égales à 48 30 kHz: 1024 points par trame. 96 kHz, fréquences supérieures à 48 kHz: 2048 points par trame. 2891099 -2- Une transformation de Fourier rapide est effectuée sur chaque trame pour se ramener dans le domaine des fréquences. Les magnitudes et les phases des points sont calculées. Tous les pics locaux sont déterminés. Le premier et le dernier points ne comptent pas comme des pics locaux. Tous les points de magnitude inférieure à -120 dB (par rapport à la magnitude maximum possible) sont mis à zéro ou ignorés. Enfin, tous les points dont la fréquence réelle est hors de l'intervalle 20 Hz - 22050 Hz sont mis à zéro ou ignorés. Voix: les phases sont ignorées. Tous les points qui ne sont pas des pics locaux sont ignorés. On ne tient pas compte des latéraux. Musique: les phases sont prises en compte. On tient compte de tous les points dans le cas général. On peut ne tenir compte que des pics locaux. Chaque trame est divisée en avant plan constitué des N plus grands points et en arrière plan constitué des M bandes les plus énergétiques. Les bandes sont constituées de tous les points. Ceux qui sont déjà pris en compte dans l'avant plan ou qui ne peuvent pas être pris en compte sont mis à zéro ou ignorés. Il y a un nombre fixe de points par bande. Par exemple pour une décomposition en 64 bandes, il y a: 2 points par bande avec des trames de 256 points (128 points utiles dans le domaine des fréquences, soit la moitié des points). 4 points par bande avec des trames de 512 points. 8 points par bande avec des trames de 1024 points. 8 points par bande avec des trames de 2048 points (la moitié supérieure des points dans le domaine des fréquences n'est pas prise en compte). Les magnitudes des points sont codées avec des valeurs entières à l'aide d'une méthode appropriée et d'une précision souhaitée. Le manque de grande précision pour les magnitudes n'entraîne pas de gros effets sur la qualité du son. Néanmoins, il faut une certaine précision s'il y a recouvrement. Les méthodes et les précisions ne sont pas nécessairement les mêmes pour l'avant plan et l'arrière plan. Deux méthodes de codage des magnitudes sont décrites: le logarithme à base 10 et l'échelle corrigée à base 2 qui permet d'atteindre une grande précision. Avec l'usage du logarithme à base 10 et une précision de n bits, les magnitudes sont codées à l'aide de la formule suivante: Code = 0 pour les points nuls, sinon: Code = (ValeurMaximum * log10 (Magnitude)) / log10 (MagnitudeMaximum). ValeurMaximum = valeur maximum dépendant de la précision n (ValeurMaximum = 2 -1, 255 en 8 bits, 1023 en 10 bits, ...). MagnitudeMaximum = 32767 * Nombre de points par trame. Magnitude = magnitude du point. Le nombre de points par trame est doublé s'il y a recouvrement à 50% (musique). Avec l'échelle corrigée à base 2, les magnitudes sont codées sur 4 à 12 bits. Les quatre premiers bits (bits de poids faible) contiennent un indice de division (idivision) et les autres bits (bits de poids fort) un indice de reste (ireste). Les magnitudes calculées en double précision sont ramenées en 16 bits (en divisant par la moitié du nombre de points par trame). L'échelle corrigée à base 2 permet de coder un nombre réel x tel que 2X soit le plus voisin de la magnitude. La valeur exacte de x vaut: x = log2 (Magnitude) / log2 (2) = logl0 (Magnitude) / logl0 (2) ; L'indice de division est égale à la partie entière de x: idivision = (int)x; L'indice de reste vaut: ireste = (int) ((x - idividion) * ValeurMaximum) ; ValeurMaximum = valeur maximum dépendant de la précision n du reste. (ValeurMaximum = 2 -1, 15 en 4 bits, 63 en 6 bits, 255 en 8 bits, ...). 25 En décodage, x est donné par: x = (double)idivision + ((double)ireste / ValeurMaximum) ; et la magnitude est donnée par: Magnitude = 2X; Contrairement aux magnitudes, les positions doivent être exactes, sinon il y a une forte dégradation de la qualité du son. Pour l'avant plan, il faut choisir une précision permettant d'atteindre tous les points désirés. Par exemple, avec une fréquence d'échantillonnage de 44 kHz, il y a 1024 points par trame dans le domaine temps et 512 points à atteindre dans le domaine des fréquences (le dernier point est ignoré). II faut 9 bits de précision sans recouvrement et 10 bits de précision avec recouvrement. Pour diminuer le nombre de bits dans le codage des positions, on peut utiliser le codage relatif (donner la différence de la position d'un point par rapport à la position du point précédent). Ceci suppose de réordonner les points choisis par rapport à la position et d'intercaler si nécessaire des points de magnitude nulle entre deux points trop éloignés. Il ne faut pas dépasser le nombre maximum de points fixé pour l'avant plan. Si des points n'ont pas pu être pris en compte, il faut les prendre en compte avec l'arrière plan. A cause des pertes possibles si des points sont trop éloignés, le codage relatif des positions est plus adapté au codage de la voix, si le nombre maximum de points de l'avant plan n'est pas assez grand. Pour l'arrière plan, ce sont les positions des bandes qui sont données. A l'intérieur d'une bande, la position n'est pas donnée mais toutes les magnitudes (nulles et non nulles) sont codées. Il faut 6 bits pour transmettre toutes les positions des bandes s'il y a 64 bandes numérotées de 0 à 63. On peut prendre 6 bits par position jusqu'à dix bandes (60 bits maximum) et 64 bits s'il y a plus de dix bandes, chaque bit indiquant la présence ou l'absence d'une bande. Dans ce cas, les bandes doivent être codées par ordre croissant. Il convient également de coder les bandes par ordre croissant dans tous les cas si on met en oeuvre les décimations de manière à ce qu'elles soient le plus contigu possible. Voix: Pour la voix, on n'utilise que les magnitudes des pics locaux (sans les latéraux) et la partie imaginaire seule en décompression. Lors de la décompression, avant l'inverse de la transformation de Fourier rapide (inverse FFT), pour tous les points non nuls, on met à zéro la partie réelle (amplitude des cosinus) et on donne à la partie imaginaire (amplitude des sinus) la valeur de la magnitude décodée. L'utilisation de la partie imaginaire seule permet de réduire les effets de bord tout en gardant la qualité de la voix. Avec un nombre limité de pics locaux et de bandes, il n'y a pas d'effet de bord audible. 2891099 -5 Musique: la musique exige beaucoup de points et / ou de bandes. La prise en compte des phases est nécessaire pour avoir le bon timbre musical mais entraîne des effets de bord s'il n'y a pas de recouvrement. Pour la suppression des effets de bord avec la musique, on utilise une méthode de recouvrement classique permettant une reconstruction parfaite, avec 50% de chevauchement. La fenêtre d'analyse et de synthèse, appliquée dans le domaine temps avant FFT (compression) et inverse FFT (décompression), est la fonction sinus: w(n) = sin ((PI/N) * (n + 0,5) ); avec 0 n varie de 0 à N-1, où N désigne la taille du nouveau tampon FFT. A noter que le recouvrement à 50% entraîne un doublement intermédiaire de la taille des tampons FFT. Avant application de la fenêtre d'analyse et FFT, chaque nouveau tampon FFT est constitué pour moitié gauche d'un tampon initial déjà utilisé et pour moitié droite d'un tampon initial non utilisé. Après inverse FFT et application de la fenêtre de synthèse, chaque moitié gauche est ajoutée à une ancienne moitié droite pour donner le tampon final de même taille que la 20 taille initiale des tampons. Le doublement intermédiaire de la taille des tampons FFT est très coûteux pour le codage de l'arrière plan. Pour l'arrière plan, on peut appliquer un coefficient de réduction compris entre 1 et 2 pour réduire la taille des bandes, le coefficient 1 correspondant à la taille initiale des bandes. Dans le domaine des fréquences, ceci revient à négliger les fréquences supérieures. Si on prend le coefficient 1, on néglige la moitié supérieure des fréquences, les fréquences réelles de l'arrière plan seront comprises en 20 Hz et 11025 Hz. Si on prend le coefficient 1, 5, les fréquences réelles de l'arrière plan seront comprises en 20 Hz et 16537 Hz. Pour l'avant plan, le codage des phases sur 6 à 8 bits (dont 1 bit de signe) donne de bons résultats. On utilisera 8 bits par défaut. Pour l'arrière plan, le codage des phases sur 4 bits (dont 1 bit de signe) convient. Pour l'arrière plan, le codage des phases sur un bit de signe donne de bons résultats et est beaucoup moins coûteux, s'il y a beaucoup de points dans l'avant plan. On utilisera un bit de signe par défaut. La valeur de la phase est donnée par: Phase = dblphase / dblcoeff; I dblphase 1 = valeur absolue de la phase calculée en double précision. dblcoeff = PI / ValeurMaximum. PI = 3,141592654... ValeurMaximum = valeur maximum de la phase (127 en 7 bits, ...). Pour réduire la taille des données dans les bandes retenues, on peut appliquer la décimation simple qui entraîne une légère perte de qualité, ou la décimation double qui entraîne une plus grande perte de qualité. La décimation simple consiste à remplacer deux points consécutifs (une paire de points) par un indicateur d'un bit (point de plus faible magnitude situé à gauche ou à droite) et un point. La décimation simple n'entraîne pas de perte de qualité s'il n'y a que des pics locaux sans latéraux car tous les points non nuls dans les bandes sont des pics locaux précédés ou suivis d'un point nul. La décimation double consiste à remplacer deux paires consécutives de points par la plus grande paire, un indicateur d'un bit supplémentaire (par rapport à la décimation simple) étant nécessaire pour dire si la plus petite paire est à gauche ou à droite. Ces types de décimation conviennent plus particulièrement au codage de la voix. Pour réduire la taille des données dans les bandes retenues, on peut appliquer la Modulation par Impulsion et Codage Différentiel Adaptatif (ADPCM). Le codage des bandes par ADPCM convient plus particulièrement au codage de la musique. Les magnitudes de l'arrière plan sont ramenées en 16 bits signés: 15 bits de valeur (en divisant par la taille intermédiaire des tampons FFT) et un bit de signe (signe de la phase). On applique une compression ADPCM (par exemple IMA ADPCM) pour avoir 2, 3, 4 ou 5 bits par point dont un bit de signe. 2891099 -7- On peut même appliquer la décimation simple et avoir encore de bons résultats: dans ce cas il y a un indicateur d'un bit pour indiquer la position du point de plus faible magnitude, un bit de signe et 1, 2, 3 ou 4 bits de valeur. La décimation simple suivie du codage ADPCM donne une moyenne de 1,5 / 2 / 2,5 et 3 bits par point. A noter les indexes à utiliser pour IMA ADPCM 2, 3, 4 ou 5 bits par point: -1, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 -1, - 1, 2, 4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 -1, -1, -1, -1, 2, 4, 6, 8, -1, -1, -1, -1, -1, -1, -1, -1 -1, -1, -1, -1, -1, -1, -1, -1, 2, 4, 6, 8,10,12,14,16 A noter également qu'il faut utiliser et transmettre la première valeur de la magnitude. Une réalisation pratique peut être faite en prenant un nombre maximum Nmax de points de l'avant plan égal à 256, en prenant un nombre maximum Mmax de bandes de l'arrière plan égal à 64 et en limitant le nombre maximum NCHmax de canaux à 8. On peut laisser le choix du logarithme à base 10 ou de l'échelle corrigée à base 2. Le taux de bits est pris constant. Sans compression additionnelle sans perte, le taux de bits variable n'entraîne pas une diminution notable du taux de bits. Avec recouvrement (prise en compte de la phase), pour les bandes de l'arrière plan, on prend un coefficient de réduction de deux (pas de changement) pour des fréquences d'échantillonnage inférieures ou égales à 11 kHz, un coefficient de réduction de 1,5 pour des fréquences d'échantillonnage supérieures à 11 kHz et inférieures ou égales à 22 kHz, et un coefficient de réduction de 1 (moitié supérieure des fréquences non prise en compte) pour des fréquences d'échantillonnage supérieures à 22 kHz. Dans le cas de la musique et de tous le signaux audio, la prise en compte uniquement des pics locaux est laissée au choix. Elle entraîne généralement une petite perte de qualité, elle n'entraîne aucune modification du taux de bits mais la musique est plus légère. Par défaut, pour la voix, on choisit l'échelle corrigée, on choisit pour l'avant plan 8 pics locaux par trame, la précision des magnitudes sur 4 bits et le codage relatif des positions sur 6 bits; on choisit 4 bandes par trame pour l'arrière plan, la précision des magnitudes sur 4 bits et la décimation simple. Il n'y a ni latéraux ni phases. Ces paramètres donnent une bonne qualité avec les résultats suivants: 16 kHz: taux de compression 1/53, taux de bits 4,7 Kbps par canal. 22 kHz: taux de compression 1/53, taux de bits 6,5 Kbps par canal. Si on choisit 6 pics locaux pour l'avant plan et toujours la décimation simple pour l'arrière plan, on a une bonne qualité avec les résultats suivants: 8 kHz: taux de compression 1/34, taux de bits 3,8 Kbps par canal. 11 kHz: taux de compression 1/34, taux de bits 5,2 Kbps par canal. Par défaut, pour la musique, on choisit l'échelle corrigée à base 2, on choisit pour l'avant plan 22 pics locaux par trame, la précision des magnitudes sur 6 bits et le codage absolu des positions sur 10 bits; on choisit 54 bandes par trame pour l'arrière plan, la précision des magnitudes sur 2 bits de moyenne (décimation simple suivie du codage ADPCM sur 3 bits). Les phases sont codées sur 8 bits pour l'avant plan et sur 1 bit de signe pour l'arrière plan. Ces paramètres donnent une bonne qualité avec les résultats suivants: 44 kHz: taux de compression 1/11, taux de bits 63,7 Kbps par canal. Si on choisit 16 pics locaux pour l'avant plan et 54 bandes, la précision des magnitudes sur 1,5 bit de moyenne (décimation simple suivie du codage ADPCM sur 2 bits), on a les résultats suivants: 44 kHz: taux de compression 1/14, taux de bits 48,2 Kbps par canal. Si on choisit 32 pics locaux pour l'avant plan, 54 bandes pour l'arrière plan et ADPCM sur 3 bits sans décimation, on a les résultats suivants: 44 kHz: taux de compression 1/7, taux de bits 95,4 Kbps par canal. Dans cette réalisation pratique, on met en place la structure suivante pour la lecture ou la transmission des données: En-tête général trame, Entête avant plan, Corps avant plan (positions, puis magnitudes puis phases éventuelles), En-tête arrière plan, Positions bandes, Corps arrière plan (magnitudes ou magnitudes signées). Les pics locaux de l'avant plan sont ordonnés par magnitudes décroisantes avec le codage absolu des positions et par positions croissantes avec le codage relatif des positions. Des compressions vectorielles (non réalisées) peuvent être appliquées à l'arrière plan à la place de la compression ADPCM. Des compressions supplémentaires (non réalisées) sans perte de qualité peuvent être appliquées à l'ensemble, à l'avant plan seul ou à l'arrière plan seul. Ce codec est destiné à toutes les communications vocales bidirectionnelles (voix sur IP ou téléphones portables par exemple), aux diffusions audio (radios sur Internet par exemple) ainsi qu'au stockage des données audio (fichiers sur disque dur par exemple). REVENDICATIONS 1) Méthode de compression et décompression audio caractérisée en ce qu'elle utilise la transformation de Fourier rapide (FFT) pour la voix et la musique et une décomposition en deux plans basée sur l'énergie. 2) Méthode selon la revendication 1, caractérisée en ce que chaque trame est divisée en avant plan constitué des N plus grands points et en arrière plan constitué des M bandes les plus énergétiques. 3) Méthode selon la revendication 1 ou 2, caractérisée en ce que pour la voix, on n'utilise que les magnitudes des pics locaux (sans les latéraux) et la partie imaginaire seule en décompression. 4) Méthode selon la revendication 1 ou 2, caractérisée en ce que pour la suppression des effets de bord avec la musique, on utilise une méthode de recouvrement classique 15 permettant une reconstruction parfaite, avec 50% de chevauchement. 5) Méthode selon la revendication 1, 2 ou 3, caractérisée en ce que pour réduire la taille des données dans les bandes retenues, on peut appliquer la Modulation par Impulsion et Codage Différentiel Adaptatif (ADPCM). 6) Méthode selon la revendication 1, 2 ou 3, caractérisée en ce que pour réduire la taille des données dans les bandes retenues, on peut appliquer la décimation simple qui entraîne une légère perte de qualité, ou la décimation double qui entraîne une plus grande perte de qualité. 7) Méthode selon la revendication 1 ou 2, caractérisée en ce que pour l'arrière plan, on peut appliquer un coefficient de réduction compris entre 1 et 2 pour réduire la taille des bandes. 8) Méthode selon la revendication 1, caractérisée en ce que la taille des trames (taille des tampons FFT) dépend de la fréquence d'échantillonnage. 9) Méthode selon la revendication 1, 2 ou 3, caractérisée en ce que deux méthodes de codage des magnitudes sont décrites: le logarithme à base 10 et l'échelle corrigée à base 2 qui permet d'atteindre une grande précision. 10) Méthode selon la revendication 1, 2 ou 3, caractérisée en ce que pour diminuer le nombre de bits dans le codage des positions, on peut utiliser le codage relatif.