[0001] La présente invention concerne un procédé de codage hiérarchique de données sonores
plus particulièrement pour un codage par quantification scalaire.
[0002] Ce codage est adapté notamment pour la transmission et/ou au stockage de signaux
numériques tels que des signaux audiofréquences (parole, musique ou autres).
[0003] La présente invention se rapporte plus particulièrement au codage de formes d'onde
tel que le codage MIC (pour "Modulation par Impulsions Codées") dit PCM (pour
"Pulse Code Modulation") en anglais où chaque échantillon d'entrée est codé individuellement, sans prédiction.
[0004] Le principe général du codage/décodage MIC spécifié par la recommandation UIT-T G.711
1 est tel que décrit en référence à la figure 1. Le signal d'entrée est supposé défini
avec une largeur de bande minimale de [300-3400 Hz] et échantillonné à 8 kHz, avec
une résolution de 16 bits par échantillon (en format dit "MIC linéaire").
[0005] Le codeur MIC 13 comporte un module de quantification Q
MIC 10 qui reçoit en entrée le signal d'entrée S. L'indice de quantification I
MIC en sortie du module de quantification 10 est transmis via le canal de transmission
11 au décodeur 14.
[0006] Le décodeur MIC 14 reçoit en entrée les indices I'
MIC issu du canal de transmission, version éventuellement perturbée par des erreurs binaires
de I
MIC, et réalise une quantification inverse par le module de quantification inverse Q
-1MIC 12 pour obtenir le signal codé S'
Mic.
[0007] Le codage MIC normalisé UIT-T G.711 (ci-après nommé G.711) réalise une compression
de l'amplitude des signaux par une courbe logarithmique avant quantification scalaire
uniforme, ce qui permet d'obtenir un rapport signal à bruit à peu près constant pour
une large dynamique de signaux. Le pas de quantification dans le domaine du signal
original est donc proportionnel à l'amplitude des signaux.
[0008] Les échantillons successifs du signal compressé sont quantifiés sur 8 bits, soit
256 niveaux. Dans le réseau téléphonique commuté (RTC) dit
Public Switched Telephone Network (PSTN) en anglais, ces 8 bits sont transmis à une fréquence de 8 kHz pour donner
un débit de 64 kbits/s.
[0009] Une trame de signal quantifié selon la norme G.711 est constituée d'indices de quantification
codés sur 8 bits. Ainsi, si la quantification inverse est implantée par table, elle
consiste simplement à un pointage par l'indice de l'une des 256 valeurs décodées possibles.
[0010] Pour des raisons de complexité de mise en oeuvre, la compression MIC a été approximée
par une courbe linéaire par segments.
[0011] Deux lois de codages sont définies dans la norme G.711, la loi A utilisée principalement
en Europe et la loi mu (µ) utilisée en Amérique du Nord et au Japon.
[0012] Ces lois de codage permettent d'effectuer sur le signal une compression de l'amplitude
(ou encore "companding" en anglais). L'amplitude du signal est ainsi "compressée"
par une fonction non-linéaire au niveau du codeur, envoyée sur un canal de transmission
et "décompressée" par la fonction inverse au niveau du décodeur. L'intérêt de la compression
d'amplitude est qu'elle permet de transformer la distribution de probabilité de l'amplitude
du signal audio d'entrée en une loi de probabilité quasi-uniforme, sur laquelle on
peut appliquer une quantification scalaire uniforme.
[0013] Les lois de compression d'amplitude sont en général des lois de type logarithmique
qui permettent donc de coder un signal échantillonné avec une résolution de 16 bits
(en format "PCM linéaire") sur 8 bits (en format "PCM" de type loi A ou mu).
[0014] Les 8 bits par échantillon dans G.711 sont répartis de la façon suivante telle que
représenté en 15 à la figure 1:
- 1 bit de signe S (0 pour une valeur négative, 1 sinon), portant la référence sgn sur
la figure 1,
- 3 bits pour indiquer le segment (référence ID-SEG sur la figure 1), l'extrémité de
chaque segment étant donnée par 256*2n pour la loi A et 256*2n-132 pour la loi mu
où n = 0,1,...,7. Le pas de quantification est donc multiplié par 2 quand on passe
sur le segment supérieur (à partir du 2ème segment pour la loi A).
- 4 bits pour indiquer l'emplacement sur le segment, portant la référence ID-POS sur
la figure 1.
[0015] Les derniers 7 bits constituent donc la valeur absolue codée. Dans la suite nous
étudierons d'abord le cas de loi A, puis nous généralisons les résultats pour la loi
mu. Selon la norme G.711 loi A, l'indice final est obtenu en inversant chaque deuxième
bit à partir de bit de poids le plus faible (
Least Significant Bit LSB en anglais). Cette loi de codage permet d'avoir une précision de quantification
scalaire de 12 bits (donc un pas de quantification de 16) quand on est sur les deux
premiers segments, puis la précision diminue de 1 bit quand le numéro de segment augmente
de 1.
[0016] On peut noter qu'il est possible de réaliser la quantification MIC G.711 à partir
d'un signal numérique représenté sur 16 bits en effectuant de simples comparaisons
entre l'amplitude de l'échantillon à coder et les seuils de décision du quantificateur.
L'utilisation d'une dichotomie accélère de façon significative ces comparaisons. Cette
solution nécessite le stockage d'un tableau de 256 entrées, le Tableau 1 ci-après
donne un extrait d'un tel tableau pour la loi A G.711.
Tableau 1 Seuils pour la recherche par dichotomie
N° de l'intervalle |
Seuil inférieur |
Seuil supérieur |
Signe |
Valeur absolue codé |
Indice final |
Valeur quantifiée |
0 |
-32768 |
-31745 |
0 |
127 |
0x2a |
-32256 |
1 |
-31744 |
-30721 |
0 |
126 |
0x2b |
-31232 |
... |
... |
... |
|
|
... |
... |
122 |
-96 |
-81 |
0 |
5 |
0x50 |
-88 |
123 |
-80 |
-65 |
0 |
4 |
0x51 |
-72 |
124 |
-64 |
-49 |
0 |
3 |
0x56 |
-56 |
125 |
-48 |
-33 |
0 |
2 |
0x57 |
-40 |
126 |
-32 |
-17 |
0 |
1 |
0x54 |
-24 |
127 |
-16 |
-1 |
0 |
0 |
0x55 |
-8 |
128 |
0 |
15 |
1 |
0 |
0xd5 |
8 |
129 |
16 |
31 |
1 |
1 |
0xd4 |
24 |
130 |
32 |
47 |
1 |
2 |
0xd7 |
40 |
131 |
48 |
63 |
1 |
3 |
0xd6 |
56 |
132 |
64 |
79 |
1 |
4 |
0xd1 |
72 |
133 |
80 |
95 |
1 |
5 |
0xd0 |
88 |
... |
... |
... |
|
|
... |
... |
254 |
30720 |
31743 |
1 |
126 |
0xab |
31232 |
255 |
31744 |
32767 |
1 |
127 |
0xaa |
32256 |
[0017] Par exemple, un échantillon d'origine du signal S à coder a une amplitude égale à
-75. Par conséquent, cette amplitude est comprise dans l'intervalle [-80, -65] de
la ligne 123 (ou « niveau » 123) du tableau. Le codage de cette information consiste
à délivrer un indice final codé, référencé
I'Mic sur la figure 1 et sur le tableau 1, qui est égal à 0x51. Au décodage, l'opération
de quantification inverse consiste donc à récupérer l'indice
I'Mic = 0x51 et à lui faire correspondre une valeur quantifiée VQ, telle que VQ = -72.
Par conséquent, le décodage affecte à l'amplitude de l'échantillon correspondant,
du signal décodé
S'Mic, cette valeur -72. On relèvera que l'on affecterait cette même valeur VQ = -72 à
tous les échantillons à décoder et dont l'amplitude initiale avait une valeur dans
l'intervalle [-80, -65], soit en tout 16 valeurs possibles dans l'intervalle, ce qui
correspond au pas de quantification ici de 16. En revanche, on relèvera que l'on affecterait
la même valeur VQ = 32256 à tous les échantillons dont l'amplitude initiale était
dans l'intervalle [31744, 32767], soit en tout 1024 valeurs possibles, ce qui correspond
à un pas de quantification de 1024.
[0018] Le rapport signal à bruit (RSB) obtenu par le codage MIC est à peu près constant
(~38 dB) pour une large dynamique de signaux. Le pas de quantification dans le domaine
du signal original est proportionnel à l'amplitude des signaux. Ce rapport signal
à bruit n'est pas suffisant pour rendre le bruit de quantification inaudible sur toute
la bande de fréquences 0-4000 Hz. De plus, pour les signaux de faibles niveaux (qui
sont codés avec le premier segment) le RSB est très mauvais.
[0019] La norme G.711 est généralement considérée comme étant de bonne qualité pour les
applications de téléphonie en bande étroite avec des terminaux limitant la bande à
[300-3400 Hz]. Cependant, la qualité n'est pas satisfaisante quand on utilise G.711
pour d'autres applications comme par exemple pour des terminaux de bonne fidélité
dans la bande [50,4000 Hz] ou pour l'extension hiérarchique en bande élargie du codage
G.711.
[0021] Il existe en effet des méthodes de codage hiérarchique consistant à apporter une
couche d'amélioration déterminée à partir du bruit de codage du codeur G.711. Ce bruit
de codage est alors codé par une technique différente de G.711, lequel constitue la
couche dite de base (ou couche coeur). Une telle méthode de codage hiérarchique est
par exemple décrite dans le document
Y. Hiwasaki, H. Ohmuro, T. Mori, S. Kurihara and A Kataoka. "A G.711 embedded wideband
speech coding for VoIP conferences", IEICE Trans. Inf. & Syst, Vol. E89-D,n°9, September
2006. Ce type de méthode a l'inconvénient d'augmenter de façon très significative de la
complexité au codeur alors que le codage de type MIC est réputée être de faible complexité.
De plus, le bruit de codage MIC étant un bruit blanc, donc non corrélé, le codage
de ce type de bruit est difficile à mettre en oeuvre puisque les techniques de compression
reposent essentiellement sur des propriétés d'extraction de la corrélation du signal
à coder.
[0022] La présente invention offre une solution qui améliore la situation.
[0023] A cet effet, l'invention propose un procédé de codage comme éconcé dans la revendication
1.
[0024] Ainsi, un flux d'amélioration est transmis en même temps que le la trame binaire
d'indices de quantification.
[0025] Ce flux d'extension est déterminé en tirant profit des bits de poids faible qui ne
sont pas utilisé lors du codage. Cette méthode a donc l'avantage de ne pas ajouter
de complexité au codeur et d'apporter l'amélioration de qualité souhaitée en apportant
au décodeur la possibilité d'obtenir une meilleure précision de décodage.
[0026] Dans un mode de réalisation, les bits mémorisés sont les bits de poids le plus fort
parmi les bits qui ne sont pas pris en compte dans la trame binaire d'indices de quantification.
[0027] Tous les bits laissés de coté lors de l'application de la loi de codage logarithmique
ne sont pas forcément repris dans le flux d'extension. Il est ainsi possible de déterminer
un flux d'extension en fonction des besoins en qualité et disponibilité en termes
de débit.
[0028] Dans une variante de réalisation, le nombre de bits pris en compte pour déterminer
le flux d'amélioration est fonction du débit disponible au cours d'une transmission
vers un décodeur.
[0029] Ainsi, le flux d'extension est modulable au cours de la transmission en fonction
du débit disponible.
[0030] L'invention est particulièrement adaptée au cas où l'étape de quantification scalaire
est une quantification de type MIC selon une loi de codage logarithmique de compression
d'amplitude de type A ou de type mu conforme à la norme ITU-T G.711.
[0031] L'invention s'applique également à un procédé de décodage comme éconcé dans la revendication
5..
[0032] Le décodeur qui reçoit des bits d'extension, améliore ainsi la précision de son expansion
ou "décompression" en concaténant les bits d'extension reçus à ceux présents dans
la trame d'indices de quantification reçu du flux de base.
[0033] Dans un mode préféré de réalisation, le procédé comporte en outre une étape d'adaptation
d'une valeur d'arrondi en fonction du nombre de bits d'extension reçu pour obtenir
le signal audio décodé.
[0034] La détection du signal audio codé est ainsi adaptée en fonction du nombre de bits
du flux d'extension.
[0035] L'invention se rapporte également à un codeur audio comme éconcé dans la revendication
7.
[0036] L'invention se rapporte à un décodeur audio comme éconcé dans la revendication 8.
[0037] L'invention vise enfin à un programme informatique comme éconcé dans la revendication
9.
[0038] De même, l'invention vise à un programme informatique comme éconcé dans la revendication
10.
[0039] D'autres caractéristiques et avantages de l'invention apparaîtront plus clairement
à la lecture de la description suivante, donnée uniquement à titre d'exemple non limitatif,
et faite en référence aux dessins annexés, sur lesquels:
- la figure 1 illustre un système de codage/décodage MIC G.711 classique de l'état de
l'art;
- la figure 2 illustre un système de codage/décodage selon l'invention ainsi que les
procédés selon l'invention, mis en oeuvre par les éléments de ce système;
- les figures 3a et 3b représentent les valeurs quantifiées par rapport aux valeurs
d'entrée après application des lois de codage respectives A et mu selon la norme G.711;
- les figures 4 et 5 représentent une comparaison avec et sans mise en oeuvre de l'invention
des valeurs quantifiées par rapport aux valeurs d'entrée après application des lois
de codage A et mu respectivement.
[0040] La figure 2 illustre un système de codage /décodage selon l'invention.
[0041] Un codeur 23 comprend un quantificateur Q
MIC 20 apte à quantifier le signal d'entrée S pour obtenir une trame d'indices de quantification
I
MIC qui est transmis sur le canal de transmission 21 vers un décodeur 24.
[0042] Dans un mode particulier de réalisation, ce codeur est du type codeur MIC et met
en oeuvre une loi de codage de type A ou mu tel que décrit dans la norme G.711.
[0043] La trame d'indices de quantification obtenue est donc représentée en 15 et est conforme
à la trame de type G.711 loi A ou mu.
[0044] Des méthodes d'implémentation des lois de codage A et mu sont proposées dans la norme
G.711. Elles consistent à déterminer l'indice final de quantification par des opérations
simples de basse complexité qui évitent le stockage d'importants tableaux de valeurs.
[0045] Ainsi, le pseudo code représenté dans l'annexe A-10 donne un exemple de mise en oeuvre
de la loi A tel que décrit dans la norme G.711 (avec une approximation linéaire par
morceaux de loi de compression d'amplitude). Une implémentation concrète de ce pseudo
code est également donnée à titre d'exemple dans l'annexe A-10. Cette implémentation
est conforme à la recommandation ITU-T G.191 Sofware Tool Library (STL-2005), chapitre
13 « ITU-T Basic Operators ». Cette recommandation est accessible sur le site Internet
de l'ITU :
http://www.itu.int/rec/T-REC-G.191-200508-I/en
[0046] On voit dans ce pseudo-code que l'indice de quantification sur 8 bits comprend le
bit signe (signe), l'indice du segment (exp) et la position sur le segment (mant).
[0047] Dans une première partie de ce codage, on détermine le bit de signe que l'on met
à la position 0 comme indiqué en 15 sur la figure 1. Ensuite, on cherche la position
du bit de poids le plus fort "pos" et on calcule le numéro de segment que l'on code
sur 3 bits que l'on met à la position 1, 2 et 3 comme représenté en 15 à la figure
1.
[0048] Les 4 bits constituant la position sur le segment sont mis aux positions 4, 5, 6
et 7 comme représenté en 15.
[0049] Il y a toujours un décalage de bits à droite d'au moins 4 bits (x = shift_rignt (x,
pos - 4)) et donc 4 bits perdus;
[0050] On n'utilise donc que les bits de poids le plus fort (
Most Significant Bit MSB en anglais) pour constituer la trame d'indices de quantification. La variable
minimum de la variable "pos" pour le codage selon la loi A est de 8. Il y a donc pour
tous les segments au moins 4 bits de poids plus faible qui sont perdus. La compression
du processus de compression d'amplitude est ainsi effectuée.
[0051] Pour un signal d'entrée d'une résolution de 16 bits par échantillon (en format "PCM
linéaire"), le plus petit pas de quantification est 16, les 4 bits de poids plus faible
étant perdus. Le tableau 2 ci-après donne les seuils et pas de quantification en fonction
de chaque segment pour la G.711 loi A.
Tableau 2 Pas de quantification G.711 loi A
Segment |
Seuil inférieur |
Seuil supérieur |
Pas de quantification |
0 |
0 |
255 |
16 |
1 |
256 |
511 |
16 |
2 |
512 |
1023 |
32 |
3 |
1024 |
2047 |
64 |
4 |
2048 |
4095 |
128 |
5 |
4096 |
8191 |
256 |
6 |
8192 |
16383 |
512 |
7 |
16384 |
32767 |
1024 |
[0052] De la même façon, le décodage peut être mis en oeuvre par des opérations simples
comme l'illustre le pseudo-code et l'implémentation ITU-T STL-2005 représentés dans
l'annexe A-11.
[0053] On peut voir dans ce pseudo code que le signe (signe), le segment (exp) et la valeur
dans le segment (val) sont retrouvés à partir de l'indice de 8 bits (indice). Une
valeur d'arrondi égale à 8 et correspondant à la moitié du pas de quantification utilisé
pour un segment est appliqué pour obtenir la valeur du milieu de l'intervalle de quantification.
Ainsi, l'inversion du processus de compression d'amplitude est effectuée. Les bits
les moins significatifs qui ont été rejetés au codage sont retrouvés ici après approximation.
[0054] La version loi mu de G.711 est similaire à la loi A. La différence principale est
qu'on additionne 128 aux valeurs pour assurer que dans le premier segment le bit 7
est toujours égal à 1 ce qui rend inutile la transmission de ce bit et donc augmente
la précision du premier segment (pas de quantification 8 dans le premier segment contre
16 dans la loi A). Cela permet également un traitement identique de tous les segments.
De plus on additionne 4 (donc 128+4 = 132 au total) pour l'arrondi pour avoir le niveau
0 parmi les valeurs quantifiées (la loi A n'a pas de niveau 0, les plus petites valeurs
sont 8 ou -8). Le prix de cette meilleure résolution dans le premier segment est le
décalage de tous les segments par 132. Le Tableau 3 ci-après donne les seuils et le
pas de quantification en fonction de chaque segment pour la G.711 loi mu.
Tableau 3 Pas de quantification G.711 loi mu
Segment |
Seuil inférieur |
Seuil supérieur |
Pas de quantification |
0 |
0 |
123 |
8 |
1 |
124 |
379 |
16 |
2 |
380 |
891 |
32 |
3 |
892 |
1915 |
64 |
4 |
1916 |
3963 |
128 |
5 |
3964 |
8059 |
256 |
6 |
8060 |
16251 |
512 |
7 |
16252 |
32635 |
1024 |
[0055] Les figures 3a et 3b permettent de comparer la résolution de ces deux lois pour les
512 premières valeurs.
[0056] De la même façon que pour la loi A, une méthode de mise en oeuvre sans stockage de
tableaux de valeurs est donnée par un exemple de pseudo-code d'encodage selon la norme
G.711 loi mu représenté dans l'annexe A-12.
[0057] De la même façon que pour la loi A, on voit dans ce pseudo-code qu'il y a toujours
un décalage de bits à droite d'au moins 3 bits (x = shift-right (x, pos - 4)), la
valeur minimale de « pos » étant 7 pour la loi mu.
[0058] On n'utilise donc que les bits de poids le plus fort (MSB) pour constituer la trame
d'indices de quantification et ainsi effectuer l'étape de compression d'amplitude.
[0059] La valeur minimale de la variable "pos" pour le codage selon la loi mu est de 7 puisque
comme mentionné précédemment dans le cas de la loi mu le premier segment est traité
de même façon que les autres segments. Il y a donc pour tous les segments au moins
3 bits de poids plus faible qui sont perdus.
[0060] Comme pour la loi A, le décodage peut s'effectuer simplement par un algorithme simple,
un exemple est donné en annexe A-13.
[0061] Le codeur 23 selon l'invention tire partie de la méthode de codage selon les lois
A ou mu en mémorisant dans un espace mémoire représenté en 27, une partie des bits
de poids faible qui n'ont pas été pris en compte pour le codage de la trame binaire
d'indices de quantification I
MIC.
[0062] Ainsi, comme mentionné précédemment pour le codage logarithmique selon les lois A
ou mu, au moins 3 bits pour tous les segments peuvent être mémorisées.
[0063] Le nombre de bits perdus par les méthodes de codage selon la loi A ou mu, augmente
avec le numéro du segment, jusqu'à 10 bits pour le dernier segment.
[0064] Le procédé selon l'invention permet de récupérer au moins les bits de poids le plus
fort parmi ces bits perdus.
[0065] Pour déterminer un flux d'amélioration d'un débit de 16 kbit/s, donc de 2 bits par
échantillon, le procédé selon l'invention mémorisera en mémoire 27, les deux bits
de poids forts des bits qui ne sont pas pris en compte dans l'opération de compression
pour déterminer la trame d'indices de quantification.
[0066] Ces bits sont récupérés pour déterminer en 28 par des moyens de détermination du
flux d'extension, le flux d'amélioration I
EXT. Ce flux d'amélioration est ensuite transmis via un autre canal de transmission 25
vers un décodeur 24.
[0067] Ainsi, le décodeur 24 comportant un quantificateur inverse, ici un quantificateur
MIC inverse Q
-1MIC 22, reçoit en parallèle le flux de base I'
MIC et le flux d'amélioration I'
EXT.
[0068] Ces flux I'
MIC et I'
EXT sont des versions éventuellement perturbées par des erreurs binaires de I
MIC et de I
EXT respectivement.
[0069] En cas de réception de ce flux d'amélioration par les moyens de réception 29 du décodeur
24, le décodeur aura alors une plus grande précision sur l'emplacement de l'échantillon
décodé dans le segment. Pour cela, il concatène les bits d'extension aux bits reçus
dans le flux de base I'
MIC par des moyens 30 de concaténation de bits, pour ensuite effectuer une quantification
inverse en 22.
[0070] En effet, l'apport d'un bit supplémentaire permet de multiplier par deux le nombre
de niveaux des segments. Le fait de doubler le nombre de niveaux, augmente aussi le
rapport signal à bruit de 6 dB. Ainsi, pour chaque bit ajouté dans le flux d'amélioration
et reçu au décodeur, le rapport signal à bruit sera augmenté de 6 dB, ce qui augmente
ainsi la qualité du signal décodé sans pour autant augmenter considérablement la complexité
au codeur.
[0071] Dans l'exemple illustré à la figure 2, le flux d'amélioration I
EXT est constitué de deux bits d'extension par échantillon, soit un débit de 16kbit/s.
Ces bits d'extension peuvent être obtenus en faisant un décalage de bits en deux opérations
comme le montre le pseudo code représenté en annexe A-14.
[0072] On peut voir qu'au lieu de décaler en un seul coup les bits par "
pos-4" position pour ne garder que les 5 bits de poids le plus fort, comme c'est le cas
dans le codage selon la loi A, on décale dans un premier temps 2 positions de moins
(donc "pos-6" positions) pour garder les 7 bits de poids le plus fort et on mémorise
en 27 les deux derniers bits. Puis dans une autre étape, on décale encore de deux
bits pour obtenir les 5 bits de poids fort dont le premier bit toujours à 1 est non
transmis. Les 4 autres sont utilisés pour le flux de base.
[0073] Les deux bits mémorisés sont envoyés dans le flux d'extension.
[0074] Comme représenté sur la figure 2, on peut considérer que ces deux bits d'extension
sont le 8
ième et le 9
ième bit du signal compressé.
[0075] Le pseudo code permettant de faire l'ensemble des opérations au codeur pour la loi
A est donné en annexe A-15.
[0076] On voit que les différences par rapport au codage G.711 classique (passages soulignés
et en gras dans l'annexe) sont les étapes de décalage en deux temps comme explicité
précédemment et la prise en compte de ces deux bits mémorisés pour déterminer le flux
d'amélioration "ext" et le transmettre.
[0077] De même pour l'implémentation de la loi mu, le pseudo code correspondant pour le
codage est représenté dans l'annexe A-16.
[0078] On remarque les mêmes différences avec le codage classique que pour le codage selon
la loi A.
[0079] La figure 4 montre une comparaison des valeurs quantifiées par rapport aux valeurs
d'entrée entre la loi A classique (en pointillé) et la loi A avec extension de deux
bits par échantillon (trait continu), pour les 128 premières valeurs.
[0080] De même, la figure 5 montre une comparaison des valeurs quantifiées par rapport aux
valeurs d'entrée entre la loi mu classique (en pointillé) et la loi mu avec extension
de deux bits par échantillon (trait continu), pour les 128 premières valeurs.
[0081] A la réception du flux d'amélioration I'
EXT, le décodeur concatène en 30 les bits d'extension ainsi reçus derrière des bits de
position du flux de base I'
MIC pour effectuer la décompression d'amplitude - ou expansion - qui est l'opération
inverse du processus de compression d'amplitude.
[0082] La prise en compte de ces bits supplémentaires permet ainsi d'obtenir une plus grande
précision de l'emplacement de l'échantillon décodé dans le segment.
[0083] En effet, pour un bit supplémentaire, le segment est divisé en deux. La précision
sur l'emplacement dans le segment de la valeur décodée est alors plus importante.
[0084] La valeur d'arrondi « roundval » qui permet de trouver la valeur du milieu du segment
est aussi adaptée en fonction de nombre bits d'extension reçus.
[0085] L'information du nombre de bits d'extension reçus est par exemple donnée par l'intermédiaire
d'une signalisation externe comme représenté par la flèche 26 sur la figure 2.
[0086] Cette information pourrait également être déduite directement par l'analyse du flux
d'extension.
[0087] Un exemple de décodage prenant en compte ces bits d'extension est donné en annexe
A-17 par les pseudos codes pour la loi A et la loi mu respectivement:
Les différences entre le décodage classique et celui de l'invention (passages soulignés
et en gras dans l'annexe) représentent la prise en compte des bits du flux d'extension
et l'application d'une valeur d'arrondi "roundval".
[0088] Le codeur tel que représenté en figure 2 comporte un processeur de type DSP (pour
"Digital Signal Processor"), non représenté ici, un espace mémoire 27 pour mémoriser
au moins les bits qui serviront à déterminer le flux d'extension.
[0089] Cet espace mémoire 27 peut faire partie d'un bloc mémoire qui comporte en outre une
mémoire de stockage et/ou une mémoire de travail.
[0090] Le moyen de stockage peut comporter un programme informatique comportant des instructions
de code pour la mise en oeuvre des étapes du procédé de codage selon l'invention lorsqu'elles
sont exécutées par le processeur du codeur.
[0091] Le programme informatique peut être également stocké sur un support mémoire lisible
par un lecteur du codeur ou téléchargeable dans l'espace mémoire du codeur.
[0092] Ce codeur met ainsi en oeuvre le procédé selon l'invention comme éconcé dans la revendication
1.
[0093] De même, le décodeur selon l'invention comporte un processeur de type DSP non représenté
ici et est apte à mettre en oeuvre le procédé comme éconcé dans la revendication 5.
[0094] Ce décodeur comporte en outre un moyen de stockage (non représenté), apte à stocker
un programme informatique comportant des instructions de code pour la mise en oeuvre
des étapes du procédé de décodage selon l'invention lorsqu'elles sont exécutées par
le processeur du décodeur.
[0095] Le programme informatique peut être également stocké sur un support mémoire lisible
par un lecteur du décodeur ou téléchargeable dans l'espace mémoire du décodeur.
[0096] L'exemple représenté et expliqué en référence à la figure 2 est donné pour une couche
d'extension de 2 bits par échantillon. Ce procédé est bien évidemment généralisable
pour un autre nombre de bits, par exemple 1, 2, 3 bits ou plus. Le pseudo code correspondant
serait alors comme représenté en annexe A-18.
[0097] Les « ext_bits » LSB de la variable « ext » sont envoyés dans le flux d'amélioration.
[0098] A noter que le terme "pos-4-ext"_bits peut être négatif pour ext_bits > 3 dans les
premiers segments et selon la loi utilisé (A ou mu). Même dans ces conditions le pseudo
code donné fonctionnerait correctement car shift_right(x, -v) = shift_left(x, v).
En d'autres termes, dans le cas où le nombre de bits de poids faible qui ne sont pas
pris en compte dans la trame d'indices de quantification est inférieur au nombre de
bits du flux d'extension, en particulier dans les premiers segments, il suffit de
compléter dans le flux d'extension les bits manquants par des zéros. Ainsi, les bits
de poids le plus fort du flux d'extension seront les bits mémorisés et récupérés selon
l'invention, les bits de poids le plus faible seront mis à 0.
[0099] Pour les segments suivants, le nombre de bits mémorisés augmentant, il ne sera plus
nécessaire de compléter par des zéros.
[0100] De même, l'invention s'applique également dans le cas où au cours de transmission
le débit doit être réduit. Dans le cas où le flux d'extension comporte deux bits,
le bit de poids faible de ce flux d'extension n'est alors plus transmis.
[0101] Le décodeur ne reçoit alors qu'un bit d'extension par échantillon. Le décodeur tel
qu' il est décrit dans le pseudo-code à titre d'exemple fonctionnera correctement
avec cette couche d'extension réduite à un bit par échantillon à condition que le
bit d'extension reçu soit mis dans la variable « ext » à la position 1, le bit de
position 0 de la variable « ext » est alors mis à 0 et la valeur de "roundval" est
adaptée en conséquence.
[0102] La valeur de la variable "roundval" telle qu'utilisé dans les exemples donnés est
donc en fonction du nombre de bits reçus par l'encodeur et de la loi utilisée (A ou
mu). Le tableau 4 ci-après donne la valeur de la variable "roundval" dans les différentes
situations.
Tableau 4 La valeur de la variable "round val" dans différentes configurations
bits d'amélioration reçus par l'encodeur |
0 |
1 |
2 |
3 |
Loi A |
8 |
4 |
2 |
1 |
Loi mu |
4 |
2 |
1 |
0 |
[0103] Cet exemple montre donc un autre avantage de la solution présentée qui est que le
train binaire de la couche d'extension est hiérarchique. Il est donc possible de diminuer
son débit au cours de la transmission.
[0104] Ainsi, si les deux bits sont reçus par le décodeur, l'augmentation du RSB est de
12 dB, si un bit est reçu, l'augmentation du RSB est de 6 dB.
[0105] Bien sur cet exemple est également généralisable, par exemple l'encodeur peut envoyer
4 bits par échantillon dans la couche d'extension et le décodeur peut recevoir 4,
3, 2, 1 ou 0 de ces bits, la qualité du signal décodé sera proportionnelle avec le
nombre de bits d'extension reçus.
[0106] On peut observer dans les pseudo-codes donnés que la complexité additionnelle du
décodage de la couche d'extension est seulement de deux opérations par échantillons
à l'encodeur et 4 opérations par échantillons au décodeur soit ∼0.05 million d'opérations
pondérées par seconde, ou
"Weighted Million Operations per Second" (WMOPS) en anglais, ce qui est négligeable. Cette faible complexité peut être exploitée
dans le cas d'un codage hiérarchique étendant G.711 tout en permettant par exemple
dans des applications de conférence audio de réaliser un mixage
"conventionnel" de faible complexité de flux G.711 ou G.711 étendu selon l'invention, alors que dans
l'article de Hiwasaki un mixage dit
"partiel", impliquant une dégradation de qualité par rapport au mixage conventionnel, est mis
en oeuvre pour limiter la complexité du mixage avec codage G.711 scalable.
[0107] Dans un mode de réalisation alternatif, l'invention sera mise en oeuvre non pas suivant
les algorithmes spécifiés précédemment par pseudo-code mais en pré-calculant et stockant
dans des tables au codeur et/ou au décodeur les niveaux permettant d'obtenir les bits
d'extension. Cette solution a cependant l'inconvénient de nécessiter de plus grande
capacité en mémoire à la fois au codeur et au décodeur pour un gain en complexité
faible.
ANNEXES:
[0108] A-10:
function lin_to_Alaw(input_16bit)
x = input_16bit
signe = 0x80 /*supposing + */
if x < 0
x = ∼x /*abs(x) - 1*/
signe = 0
end
if x > 255 /* 1st bit 1 + 4 saved bits */
pos = cherche_position_bit_1_poids_fort(x) /* 14 >= pos
>= 8 */
exp = shift_left(pos - 7, 4)
x = shift_right(x, pos - 4)
mant = x - 16 /* remove leading 1 */
else
exp = 0
mant = shift_right(x, 4)
end
ind_tmp = signe + exp + mant
indice = xor(ind_tmp, 0x0055) /* toggle odd bits */
return indice /* only 8LSB bits are used */
[0109] Version ITU-T STL-2005 :
short lin_to_Alaw(short input_16bit) {
short x, signe, pos, exp, mant, ind_tmp, indice;
x = input_16bit;
signe = 0x80; /*supposing + */
IF(x < 0)
{
x = s_xor(x, (short)0xFFFF); /*abs(x) - 1*/
signe = 0;
}
IF (sub(x, 255) > 0) /* 1st bit 1 + 4 saved bits */
{
pos = sub(14, norm_s(x)); /* 14 >= pos >= 8 */
exp = shl(sub(pos, 7), 4);
x = shr(x, sub(pos, 4));
mant = sub(x, 16); /* remove leading 1 */
}
ELSE
{
exp = 0;
mant = shr(x, 4);
}
ind_tmp = add(signe, add(exp, mant) );
indice = s_xor(ind_tmp, 0x0055); /* toogle odd bits */
return(indice); /* only 8LSB bits are used */
}
[0110] A-11:
function Alaw_to_lin(indice)
signe = and(indice, 0x80);
y = and(xor(indice, 0x0055), 0x7F) /* without sign */
exp = shift_right(y, 4)
val = shift_left(and(y, 0xF), 4) + 8 /* with rounding */
if exp > 0
val = shift_left(val + 256, exp - 1) /* add leading 1 */
end
if signe == 0 /* sign bit ==0 → negative value */
val = -val
end
return val
[0111] Version ITU-T STL-2005 :
short Alaw_to_lin (short indice)
{
short y, signe, exp, val;
signe = s_and(indice, 0x80);
y = s_and(s_xor (indice, 0x0055), 0x7F); /* without sign */
exp = shr(y, 4);
val = add(shl(s_and(y, 0xF), 4), 8); /* rounding */
if(exp > 0)
{
val = shl(add(val, 256), sub(exp, 1)); /*add leading 1 */
}
if(signe == 0) /* sign bit ==0 'negative value */
{
val = negate(val);
}
return(val);
}
[0112] A-12:
function lin_to_mulaw(input_16bit)
x = input_16bit
signe = 0x80 /* supposing + */
if x > 32635 /* to avoid overflow after adding 132*/
x = 32635
end
if x < -32635
x = -32635
end
if x < 0
x = ∼x /*abs(x) - 1*/
signe = 0x00
end
x = x + 132
/* always 1st bit 1 + 4 saved bits */
pos = cherche_position_bit_1_poids_fort(x) /* 14 >= pos >=
7 */
exp = shift_left(pos - 7, 4)
x = shift_right(x, pos - 4)
mant = x - 16 /* remove leading 1 */
ind_tmp = signe + exp + mant
indice = xor(ind_tmp, 0x007F) /* toggle all bits */
return indice /* only 8LSB bits are used */
[0113] A-13:
function mulaw_to_lin(indice)
signe = and(indice, 0x80);
y = and(xor(indice, 0x00FF), 0x7F) /* without sign */
exp = shift_right(y, 4)
val = shift_left(and(y, 0xF), 3) + 132 /* leading 1 &
rounding */
val = shift_left(val, exp) - 132 /* suppress encoder offset
*/
if signe == 0 /* sign bit ==0 → negative value */
val = -val
end
return val
[0114] A-14:
x = shift_right(x, pos - 6) /* first part of shift*/
ext = and(x, 0x3) /*save last two bits*/
x = shift_right(x, 2) /* finish shift*/
[0115] A-15:
function lin_to_Alaw_enh(input_16bit)
x = input_16bit
signe = 0x80 /*supposing + */
if x < 0
x = ∼x /*abs(x) - 1*/
signe = 0
end
if x > 255 /* 1st bit 1 + 4 saved bits */
pos = cherche_position_bit_1_poids_fort (x) /* 14 >= pos
>= 8 */
exp = shift_left(pos - 7, 4)
x = shift_right(x, pos - 6) /* first part of shift */
ext = and(x, 0x3 /* save last to bits */
x = shift_right(x, 2) /* finish shift */
mant = x - 16 /* remove leading 1 */
else
exp = 0
x = shift_right(x, 2)
ext = and(x, 0x3) /* save last two bits */
x = shift_right(x, 2) /* finish shift */
end
ind_tmp = signe + exp + mant
indice = xor(ind_tmp, 0x0055) /* toggle odd bits */
return indice, ext /* only 8LSB bits are used in indice and
2LSB bits in ext*/
[0116] A-16:
function lin_to_mulaw_enh(input_16bit)
x = input_16bit
signe = 0x80 /* supposing + */
if x > 32635 /* to avoid overflow after adding 132*/
x = 32635
end
if x < -32635
x = -32635
end
if x < 0
x = ∼x /*abs(x) - 1*/
signe = 0x00
end
x = x + 132
/* always 1st bit 1 + 4 saved bits */
pos = cherche_position_bit_1_poids_fort(x) /* 14 >= pos >=
7 */
exp = shift_left(pos - 7, 4)
x = shift_right(x, pos - 6) /* first part of shift */
ext = and(x, 0x3) /* save last two bits */
x = shift_right(x, 2) /* finish shift */
mant = x - 16 /* remove leading 1 */
ind_tmp = signe + exp + mant
indice = xor (ind_tmp, 0x007F) /* toggle all bits */
return indice, ext /* only 8LSB bits are used in indice and
2LSB bits in ext*/
[0117] A-17:
Loi A:
function Alaw_to_lin_enh(indice, ext, roundval)
signe = and(indice, 0x80);
y = and(xor(indice, 0x0055), 0x7F) /* without sign */
exp = shift_right(y, 4)
ext = shift_left(and(ext, 0x03), 2) /* put extension bits in
position 2 & 3 */
val = shift_left(and(y, 0xF), 4) + ext + roundval /* with
rounding */
if exp > 0
val = shift_left(val + 256, exp - 1) /* adding leading 1
*/
end
if signe == 0 /* sign bit ==0 → negative value */
val = -val
end
return val
Loi mu:
function mulaw_to_lin_enh(indice, ext, roundval)
signe = and(indice, 0x80);
y = and(xor(indice, 0x007F), 0x7F) /* without sign */
exp = shift_right(y, 4)
ext = shift_left(and(ext, 0x03), 1) /* put extension bits in
position 1 & 2 */
val = shift_left(and(y, 0xF), 3) + 128 + ext + roundval /*
leading 1 & rounding */
val = shift_left(val, exp) - 132 /* suppress encoder offset
*/
if signe == 0 /* sign bit ==0 → negative value */
val = -val
end
return val
[0118] A-18:
x = shift_right(x, pos - 4 - ext_bits) /* first part of
shift*/
ext = and(x, shift_left(1, ext_bits) -1) /* last ext_bits
bits*/
x = shift_right(x, ext_bits) /* finish shift*/
1. Verfahren zur Codierung durch Skalarquantisierung der Abtastwerte eines digitalen
Audiosignals (S), wobei die Abtastwerte über eine vorbestimmte Anzahl von Bits codiert
werden, um einen Binärrahmen von Quantisierungsindizes (I
MIC) zu erhalten, wobei die Codierung gemäß einem logarithmischen Gesetz zur Amplitudenkompression
durchgeführt wird, wobei eine vorbestimmte Anzahl von niederwertigen Bits des digitalen
Audiosignals im linearen PCM-Format im Arbeitsvorgang der Kompression zum Bilden des
Binärrahmens von Quantisierungsindizes nicht berücksichtigt wird,
dadurch gekennzeichnet, dass es die folgenden Schritte aufweist:
- Speicherung (27) von mindestens einem Teil der niederwertigen Bits, die im Arbeitsvorgang
der Kompression zum Bilden des Binärrahmens von Quantisierungsindizes nicht berücksichtigt
werden,
- Bestimmen (28) eines Verbesserungsflusses (IEXT), der mindestens ein so gespeichertes Bit aufweist.
2. Verfahren nach Anspruch 1, dadurch gekennzeichnet, dass die gespeicherten Bits die höchstwertigen Bits unter den Bits sind, die im Arbeitsvorgang
der Kompression zum Bilden des Binärrahmens von Quantisierungsindizes nicht berücksichtigt
werden.
3. Verfahren nach einem der Ansprüche 1 bis 2, dadurch gekennzeichnet, dass die Anzahl der Bits, die berücksichtigt werden, um den Verbesserungsfluss zu bestimmen,
eine Funktion der Übertragungsgeschwindigkeit ist, die während einer Übertragung an
einen Decodierer verfügbar ist.
4. Verfahren nach einem der Ansprüche 1 bis 3, dadurch gekennzeichnet, dass der Schritt der Skalarquantisierung eine Quantisierung des PCM-Typs gemäß einem logarithmischen
Codierungsgesetz zur Amplitudenkompression des Typs A oder des Typs mu gemäß dem ITU-T-Standard
G.711 ist.
5. Verfahren zum Decodieren eines Binärrahmens von Quantisierungsindizes (I'
MIC), der eine vorbestimmte Anzahl von Bits aufweist, durch einen Schritt der inversen
Quantisierung (22) und gemäß einem logarithmischen Gesetz zur Amplitudenkompression,
dadurch gekennzeichnet, dass es die folgenden Schritte aufweist:
- Empfang (29) eines Verbesserungsflusses (I'EXT), der eines oder mehrere Erweiterungsbits aufweist, die gemäß einem Codierungsverfahren
nach Anspruch 1 bestimmt werden;
- Verkettung (30) der Erweiterungsbits hinter den Bits, die aus dem Binärrahmen stammen,
um ein decodiertes Audiosignal zu erhalten.
6. Decodierungsverfahren nach Anspruch 5, dadurch gekennzeichnet, dass es ferner einen Schritt der Anpassung eines gerundeten Werts in Abhängigkeit von
der empfangenen Anzahl der Erweiterungsbits aufweist, um das decodierte Audiosignal
zu erhalten.
7. Audiocodierer, der ein Modul (20) zur Skalarquantisierung der Abtastwerte eines digitalen
Audiosignals (S) aufweist, wobei die Abtastwerte über eine vorbestimmte Anzahl von
Bits codiert werden, um einen Binärrahmen von Quantisierungsindizes (I
MIC) zu erhalten, wobei die Codierung gemäß einem logarithmischen Gesetz zur Amplitudenkompression
durchgeführt wird, wobei eine vorbestimmte Anzahl von niederwertigen Bits des digitalen
Audiosignals im linearen PCM-Format im Arbeitsvorgang der Kompression zum Bilden des
Binärrahmens von Quantisierungsindizes nicht berücksichtigt wird,
dadurch gekennzeichnet, dass er Folgendes aufweist:
- einen Speicherraum (27), der geeignet ist, mindestens einen Teil der niederwertigen
Bits zu speichern, die im Arbeitsvorgang der Kompression zum Bilden des Binärrahmens
von Quantisierungsindizes nicht berücksichtigt werden,
- Mittel zum Bestimmen (28) eines Verbesserungsflusses (IEXT), der mindestens ein so gespeichertes Bit aufweist.
8. Audiodecodierer, der geeignet ist, einen Binärrahmen von Quantisierungsindizes (I'
MIC), der eine vorbestimmte Anzahl von Bits aufweist, durch ein Modul (22) zur inversen
Quantisierung und gemäß einem logarithmischen Gesetz zur Amplitudenkompression zu
decodieren,
dadurch gekennzeichnet, dass er Folgendes aufweist:
- Mittel (29) zum Empfang eines Verbesserungsflusses, der ein oder mehrere Erweiterungsbits
aufweist, die durch einen Codierer nach Anspruch 7 bestimmt werden;
- Mittel zum Verketten (30) der Erweiterungsbits hinter den Bits, die aus dem Binärrahmen
stammen, um ein decodiertes Audiosignal zu erhalten.
9. Rechnerprogramm, das dazu bestimmt ist, in einem Speicher eines Codierers und/oder
einem Speichermedium gespeichert zu werden, der/das geeignet ist, mit einem Leser
des Codierers zusammenzuwirken, das Codebefehle für die Durchführung der Schritte
des Codierungsverfahrens nach einem der Ansprüche 1 bis 4 aufweist, wenn es durch
einen Prozessor des Codierers ausgeführt wird.
10. Rechnerprogramm, das dazu bestimmt ist, in einem Speicher eines Decodierers und/oder
eines Speichermediums gespeichert zu werden, der/das geeignet ist, um mit einem Leser
des Decodierers zusammenzuwirken, das Codebefehle für die Durchführung der Schritte
des Decodierungsverfahrens nach einem der Ansprüche 5 bis 6 aufweist, wenn es durch
einen Prozessor des Decodierers ausgeführt wird.