FR 2650926 A1 19910215 FR 8910652 A 19890808 "Procédé; et dispositif de quantification vectorielle de données numériques" La présente invention concerne un procédé de codage de données numériques par quantification vectorielle en vue de les comprimer. Ce procédé s'applique dans des dispositifs de traitement de l'information en général et plus particulièrement pour des données d'image ou de parole, afin de les transmettre avec un débit réduit, ou de les stocker avec une capacité de mémoire réduite. La théorie d'un tel procédé est donnée dans l'ouvrage de T.Berger: "Rate distorsion theory", édité en 1971 chez Prentice Hall Inc. Le point sur les modes de réalisation connus et leurs applications est fait dans l'article de R.M. Gray: 'nectar Quantization", IEEE ASSP magazine, april 1984. Selon ce procédé de quantification vectorielle, les valeurs successives des données. d'entrée sont mises sous forme de blocs appelés vecteurs d'entrée, dont la longueur est déterminée à l'avance. Lors du codage, chaque vecteur d'entrée est codé par l'indice du vecteur qui est le plus proche dudit vecteur d'entrée dans un jeu de vecteurs contenu dans une mémoire, appelée dictionnaire. Lors du décodage, c'est ainsi un vecteur choisi dans le dictionnaire qui sera utilisé pour représenter le vecteur initial. Le nombre de vecteurs dans le dictionnaire est en général petit devant le nombre de vecteurs d'entrée possibles. Par conséquent, le vecteur du dictionnaire le plus proche d'un vecteur d'entrée est en générai à une distance ou "distorsion1 supérieure à zéro, et un grand nombre de vecteurs d'entrée différents sont représentés par le même vecteur du dictionnaire.Ces vecteurs d'entrée différents représentés par un même vecteur du dictionnaire sont des éléments d'un ensemble qui sera appelé "amas". Un procédé de construction du dictionnaire est connu de Y.Linde, A.Buzo, R.n.Gray, "An algorithm for vector quantizer design", IEEE Transactions on Communications COM-28, p84-85 (January 1980). Dans ce procédé, à partir d'un nombre fini de vecteurs d'entrée, dit "ensemble d'apprentissage", et d'un dictionnaire initial qui est choisi de manière arbitraire, on organise une répartition de l'ensemble d'apprentissage en amas, et la représentation de chaque amas par un seul vecteur du dictionnaire, puis on améliore de façon itérative la répartition de l'ensemble d'apprentissage en amas et la représentation de chaque amas par un seul vecteur.Plus précisément, chaque pas d'itération est décomposé en deux phases: -La phase 1, dans laquelle est déterminée, à partir du dictionnaire initial ou du dictionnaire résultant du pas précédent, la composition de chaque amas, puis: -La phase 2, dans laquelle est déterminé un nouveau représentant pour chaque amas, et le dictionnaire est mis à jour par les nouveaux représentants. Ainsi à chaque pas d'itération, une nouvelle représentation est utilisée. Celle-ci entraine en général une nouvelle répartition en amas des vecteurs d'entrée, puisque le changement de représentant a pour conséquence un changement des frontières entre les amas et donc un changement de leur contenu. Ceci sera expliqué plus loin à l'aide des figures. Le dictionnaire résultant après les itérations est ensuite utilisé pour le codage. Dans le procédé décrit par ce document, on choisit comme représentant d'un amas le vecteur correspondant au centre de gravité des vecteurs de -l'amas. Ce procédé a donc pour but de minimiser la distorsion moyenne évaluée sur l'ensemble d'apprentissage. L'inconvénient de cette méthode est que, si la majorité des vecteurs d'un amas est bien représentée par son centre de gravité, il existe en général un certain nombre de vecteurs pour lesquels la distorsion est très grande. Dans une image de télévision, par exemple, cette méthode procure une distorsion faible dans les parties uniformes majoritaires, mais autorise de grandes distorsions pour les parties de poids statistique négligeable, telles que les traits, lignes et autres changements brusques de contraste. Or ces parties appartiennent cependant souvent à des structures de l'avant scène, c'est-à-dire sont porteuses d'une information pertinente dont les défauts sont très perceptibles à l'oeil. L'invention procure un procédé grâce auquel l'apparition de vecteurs particulièremant mal représentés est évitée. Par exemple, dans le cas d'une image, le procédé traite de façon équivalente tous les points d'une image. Ceci est obtenu du fait qu'au lieu de représenter chaque amas par son centre de gravité, minimisant ainsi la distorsion moyenne pour les vecteurs de l'amas, on représente chaque amas par le centre de la plus petite hypersphère incluant tous les vecteurs de l'amas, minimisant ainsi le rayon de ladite sphère, c'est-à-dire la distorsion maximale de l'amas. L'invention a été testée sur des séquences d'images de télévision représentant des scènes détaillées sur un fond quasiment uniforme. On a constaté que le codage des détails de structure de la scène est amélioré. Ledit centre est avantageusement déterminé au cours d'un processus itératif dans lequel le vecteur de l'anars le plus éloigné du vecteur du dictionnaire représentant jusqu'ici l'amas est d'abord déterminé, et ce vecteur le plus éloigné. est ajouté, avec application d'un facteur de pondération, au dit vecteur du dictionnaire qui représentait jusqu'ici l'amas, puis cette séquence est répétée, c'est-à-dire que le vecteur de l'amas qui est le plus éloigné du nouveau vecteur du dictionnaire est à nouveau déterminé et ajouté au vecteur du dictionnaire, et ainsi de suite. Cette manière de procéder itérative a l'avantage d'être simple à mettre en oeuvre et de converger rapidement. Ledit facteur de pondération décroit chaque étape du processus de détermination du centre de l'hypersphère, et le processus est arrêté lorsque le facteur de pondération est devenu inférieur à une valeur prédéterminée. En outre, le facteur de pondération étant appelé a(t) où t est l'indice temporel de l'étape courante dans le processus, a(t) tend vers zéro et la série de terme a(t) tend vers l'infini lorsque t tend vers l'infini. La présente invention concerne également un dispositif codeur adaptatif pour la mise en oeuvre du procédé, qui est notamment remarquable en ce qu'il comporte deux circuits processeurs identiques et des moyens pour fournir un ensemble d'apprentissage tour à tour à chacun d'eux, un des circuits processeurs travaillant en mode d'apprentissage, pendant que. l'autre code une séquence de données sur la base du dictionnaire issu de l'apprentissage précédent, puis les modes de travail des circuits processeurs sont intervertis. Chaque circuit processeur comporte avantag.eusement, pour la formation des amas, des modules communs aux deux fonctions de codage et d'apprentissage , ces modules étant un module de calcul de distances entre vecteurs et un module de dé termination de la plus petite d'entre elles. Ainsi le dispositif est de taille plus réduite. En outre, le module commun de calcul des distances est avantageusement de type neuronal constitué de plusieurs réseaux de neurones en parallèle, ce qui procure une vitesse de calcul suffisante pour le calcul en temps réel. Ce dispositif a l'avantage de permettre non seulement un codage en temps réel mais également un codage adaptatif. L'adaptativité a l'avantage que le dictionnaire est renouvelé souvent, ce qui lui permet d'avoir une taille réduite, évitant ainsi de pénaliser le débit de transmission. La description qui va suivre, en regard des dessins annexés décrivant des exemples non limitatifs fera bien comprendre comment l'invention peut être réalisée. La figure 1. représente un ensemble de codage/décodage dans lequel un procédé de quantification vectorielle est utilisé. La figure 2. illustre un exemple de répartition de vecteurs. La figure 3. illustre la représentation- d'un amas par un seul vecteur. La figure 4. est un organigramme du procédé de construction du dictionnaire. La figure 5. illustre le processus algorithmique de détermination du centre d'une hypersphère. La figure 6. est un schéma de l'architecture globale d'un dispositif codeur adaptatif. La figure 7. illustre par trois schémas l'organisation d'un circuit processeur dans ses trois modes de fonctionnement La figure 8. illustre l'organisation temporelle d'un circuit processeur. La figure 9. représente plus en détail le module 27 des figures 6 à 8. La figure 10. représente plus en détail le module 28 des figures 6 à 8. Dans l'ensemble de codageldécodage de la figure 1., des données d'entrée sont introduites dans un codeur 1. Celuici groupe les données en vecteurs de longueur k, qui sont notés: où Xi est un scalaire représentant une-donnée d'entrée qui devient une composante d'un vecteur Zi, i est l'indice d'un vecteur d'entrée dans un jeu de vecteurs d'entrée en nombre fini (i=1,....,N), k est la longueur des vecteurs d'entrée. Un dictionnaire 2 contient un jeu vecteurs qui sont notés: où ij est l'indice d'un vecteur.du dictionnaire (dans lequel il y a p vecteurs prévus, donc p=1t....,p, avec p N), XP est une composante d'un vecteur du dictionnaire, et k est la longueur des vecteurs. La distorsion d'un vecteur d'entrée d'indice i vis à vis d'un vecteur d'indice ij du dictionnaire est déterminée selon la formule suivante: On appelle ij(i) l'indice du vecteur appartenant au dictionnaire pour lequel la distorsion d'un vecteur d'entrée i (équation 1) est minimale, c'est-à-dire qu'on a: L'ensemble des vecteurs Xi représentés par un même vecteur X# constitue un amas qui est noté: C#=({Xi| (i)= n} n} le nombre de vecteurs d'un amas étant noté Sirl) Le vecteur XAfl est appelé "vecteur représentant" ou "représentant" de Xi. Dans le cas d'un système de transmission, on transmet l'indice (i) sur une ligne de transmission 9 (figure 1). En réception, un décodeur 3 associé à un dictionnaire 4 identique au dictionnaire 2 délivre sur sa sortie 10, pour chaque indice i, le représentant XPti) de Xi. Pour illustrer le procédé, considérons à titre d'exemple le cas de vecteurs à deux dimensions (k=2) qui peuvent donc être représentés graphiquement. La figure 2 montre une répartition en trois amas (q=1, #=2, q=3) qui est organisée avec des représentants ~1, X2, XA3. Pour déterminer de quel amas un vecteur (noté par une croix) fait partie, on trace les médiatrices 12,13,14 des segments de droite reliant l'un à l'autre respectivement les couples de représentants X-X,X-X ,X-X . Ces médiatrices tracent les frontières de chaque amas. Sur la figure 3, un seul amas est représenté. Le point S1 représente le centre de gravité des vecteurs de l'amas, qui était utilisé dans l'art antérieur pour représenter tous les vecteurs de-l'amas. Le vecteur s est mal représenté par ce vecteur S . L'hypersphère la plus petite qui inclut tous les vecteurs de l'amas (ici un cercle, puisqu'il y a deux dimensions) est désignée par (S).Lorsque son centre S2 est utilisé pour représenter tous les vecteurs de l'amas, la distorsion moyenne est plus élevée qu'avec S1 mais la distorsion maximale est minimisée (la distorsion maximale ou distance maximale correspond au rayon de l'hypersphèrel et, dans le cas d'une image, l'attention n'est plus attirée par la mauvaise représentation du vecteur "s". La méthode de construction du dictionnaire est illustrée par la figure 4. Elle part d'un nombre fini de vecteurs d'entrée Xi; i=1,.,.,N, construits dans un élément 11, et d'un dictionnaire 2 dont le contenu est constitué initiale ment de vecteurs XP; p=1, p, qui sont choisis de manière arbitraire. Après cette initialisation, le processus entre dans une itération qui est répétée un certain nombre T1 de fois. Cette itération est controlée par un comptage du temps t1 qui est initialisé par la fonction 7 et incrémenté par la fonction 8. La fonction 5 détermine selon l'équation (2) le représentant X (i) de chaque vecteur faisant partie de l La répartition en amas déterminée par la fonction 5 est reprise par la fonction 6 qui détermine un représentant amélioré pour chaque amas, en déterminant pour chaque amas le centre de la plus petite hypersphère incluant tous les vecteurs Xi qui font partie de C#. Cette détermination du centre d'une hypersphère constitue un processus qui est lui même de nature itérative, l'itération étant controlée par un comptage du temps t2 qui.est initialisé par la fonction 15 et incrémenté par la fonction 16.Pour chaque amas n=1,...p, la fonction 17 détermine nsuite le vecteur Xi(t) faisant partie de l'amas C# et qui est le plus éloigné de Xn(t2): ||Xi(t2)-X#(t2)||= max ||Xj-X#(t2)|| où Xi fait partie-de C'1, Cri étant tour à tour un des p amas déterminés par la fonction 17. X#(t2=1), q=1,...p sont les vecteurs stockés dans le dictionnaire 2 initial. La fonction 18 enfin ajoute ce vecteur le plus éloigné Xi(t2) au vecteur in(t2), avec une pondération, cette addition étant ainsi exprimée par l'équation suivante: Axfl(t2+1) = (1-a(t2))Xn(t2)+ a(t2) Xi(t2) (3) où a(t) est un facteur de pondération qui a les propriétés suivantes: O a(t) + O t t a(t) 4 - t 4 - Une telle suite est par exemple: a(t)=1/t, avec t=1,...Le processus comportant les fonctions 16,17,18 est réitéré un certain nombre de fois. La fonction 19 détermine si l'itération continue ou est terminée, et dans ce cas la fonction 20 met à jour le dictionnaire en y plaçant les valeurs n(T2). On peut démontrer que la fonction 6 engendre un vecteur qui représente suffisamment bien pour chaque amas le centre de ladite hypersphère, au bout de quelques pas d'itération. L'itération est arrêtée à priori après un nombre de pas que l'expérience démontre etre suffisant; par exemple, on peut faire T2=10. La fonction 21 détermine si l'itération des fonctions 7 et 8 continue ou est terminée1 et dans ce cas le contenu du dictionnaire peut dorénavant être utilisé pour le codage, représenté par la fonction 22. Le procédé mis en oeuvre par la fonction 6 est illustré par la figure 5 pour un seul amas. Au temps initial (t2 = 1) le représentant de l'amas est Xn(t2=1). On lui ajoute alors dans la direction du vecteur le plus éloigné Xi(t2=1) le vecteur: a(1)X{n(t2=1) ~ Xi(t2=1)} donnant le vecteur X#(t2=2), auquel on ajoute cette fois, dans la direction du nouveau point le plus éloigné qui est Xi(t2=2), le vecteur: a(2)X{in(t2=2) - Xi(t2=2)} et ainsi de suite. La suite des vecteurs xn converge vers le centre S2 de llhypersphère. Ce procédé peut être mis en oeuvre au moyen d'un circuit processeur numérique de type neuronal afin de réaliser un codage adaptatif. Un tel circuit processeur a ainsi deux types de fonctionnement: soit en apprentissage, soit en codage. Pour permettre un apprentissage adaptatif, deux circuits identiques travail'lent en parallèle. La figure 6 montre les deux circuits processeurs 37 et 38 recevant des séquences d'images de télévision à partir d'une source d'images 39. Un des circuits processeurs travaille en apprentissage sur une image, pendant que l'autre code une séquence d'images sur la base du dictionnaire issu de l'apprentissage réalisé précédemment. Typiquement, pour un apprentissage d'une demi seconde, le circuit en fonctionnement de type codage dispose d'une demi seconde de codage, soit douze images à coder (cas du standard à vingt cinq images par seconde).Puis les deux circuits processeurs intervertissent leur type de fonctionnement. Chaque circuit processeur comprend trois modules principaux, et trois mémoires: -Le module 27 est un calculateur de distances, qui en outre contient la mémoire des vecteurs du dictionnaire. -Le module 28 est un comparateur à quatre entrées qui calcule soit le minimum soit le maximum d'un ensemble de.nombres réels. -Le module 29 est un calculateur itératif des coordonnées du centre de llhypersphère. -La mémoire A contient une image1 et est alimentée soit à fréquence de codage (1/25e sec), soit à fréquence dlapprep- tissage. Elle alimente le module 27. -La mémoire B contient les différents amas, et alimente le module 27 en phase d'apprentissage. -La mémoire C contient le dictionnaire initial et charge le module 27 au début de l'apprentissage. Par rapport aux fonctions décrites à propos de la figure 4, on peut mentionner la correspondance suivante: -La mémoire A correspond à l'élément 11. -La mémoire contenue dans le module 27 correspond à la mémoire 2. -Les modules 27 et 28 alimentés paria mémoire A correspondent à la fonction 5. -Les modules 27 et 28 alimentés par la mémoire B correspondent à la fonction 17. -Le module 29 correspond à la fonction 18. La figure 7 illustre les relations entre les modules selon les modes de fonctionnement: -MODE 1 (figure 7A): Apprentissage en phase 1 (détermination des amas). Les modules 27 et 28 sont en service et la mémoire A alimente le module 27. La sortie du module 28 qui travaille en calcul de minimum charge la mémoire B avec les amas. -MODE 2 (figure 7B): Apprentissage en.phase 2 (calcul du centre de l'hypersphère pour chaque amas). Les modules 27, 28, et 29 sont utilisés. La mémoire B contenant chacun des amas alimente en parallèle le module 2i qui détermine pour chaque amas les distances des vecteurs de l'amas par rapport au représentant. Le module 28 détermine la distance maximale à l'intérieur d'un amas (fonctionnement en calcul de maximum) et les coordonnées du vecteur correspondant chargent le module 29 qui calcule à chaque itération les nouvelles coordonnées du représentant de chaque amas. Les résultats de ces calculs viennent charger la mémoire interne du module 27.. -MODE.3 (figure 7C): Codage utilisant les modules 27 et 28 et la mémoire A qui alimente -séquentiellement le module 27 pour déterminer les distances de chaque vecteur d'entrée aux différents codes, le module 28 déterminant quel code procure la distance minimale (fonctionnement en calcul de minimum). L'index de ce code est alors transmis ou stocké. La figure 8 montre l'organisation correspondant aux compteurs des temps ti et t2. Par rapport à la figure 4, les mises à jour des compteurs correspondent aux fonctions 7, 8, 15, 16 et les tests correspondent aux fonctions 19 et 21. Les différentes étapes sont les suivantes: tel=0 (fonction 7) Le mode de fonctionnement 1 (phase 1 de l'apprentissage) commence en chargeant le dictionnaire initial dans la mémoire du module 27. t2=0 (fonction 15) Quand un cycle de 1a phase 1 est terminé, le circuit processeur passe en mode 2 (phase 2 de.l'apprentissage) et le calcul à l'intérieur d'un amas commence. t2 S'il n'est pas strictement supérieur à T2, -la phase 2 continue. t2=t2+1 (fonction 16) Le compteur du temps t2 est incrémenté et les nouveaux vecteurs du dictionnaire sont calculés dans le module 29 et chargés dans le module 27. t2=T2 (fonction 19) Alors la phase 2 prend fin et c'est le compteur du temps t1 qui doit etre testé. t1 t1=t1+1 (fonction 8) Le compteur du temps t est incrémenté et le module 27 est à nouveau chargé à partir de la mémoire A. t1=T1 (fonction 21) Le circuit processeur passe en mode 3, correspondant au codage et il envoie dans la chaine de communication le nouveau dictionnaire qui servira au décodage. Pour réaliser le module 27 de calcul des distances entre un vecteur d'entrée Zi et l'ensemble des vecteurs codes Xrl, ri=1,.. p on peut donc utiliser un dispositif de calcul en. parallèle de type neuronal, Un tel dispositif est représenté sur la figure 9. Les vecteurs d'entrée notés X, de composantes Xj, j=O,..k-1 sont stockés dans un registre 34 (figure 9). te dispositif comprend quatre parties identiques travaillant en parallèle et les signes de référence ne sont indiqués qu'une fois pour simplifier.Chaque code ri est associé à un vecteur code sn de composantes Xz avec j=O,...k-1 et n=1,...p. Par analogie avec un réseau de neurones, chaque code ri est associé à un processeur que, selon la terminologie actuelle, on appellera neurone q, avec ses entrées j, et les composantes formant, par extension de la terminologie, la matrice synaptique 33. La fonction réalisée par chaque neurone est un calcul de norme. soit. qui est la distance entre un vecteur d'entrée X et un vecteur code 2n. Cette fonction est réalisée par le processeur de soustraction 30, le processeur de multiplication 31, et le processeur de sommation 32. Un exemple numérique concernant la taille des réseaux de neurones et le nombre de réseaux est le suivant: dans un dictionnaire de capacité, oulongueur, p= 2R vecteurs, R bits définissent l'index d'un représentant correspondant à chaque vecteur d'entrée. Si par exemple les vecteurs ont seize dimensions, c'est-à-dire que chaque vecteur d'entrée représente seize pixels, et que le taux de compression est tel qu'il conduit à un débit de h bit par pixel, cela signifie que b bit x 16 pixels = 8 bits seront utilisés pour définir un vecteur code, soit R= 8, et la capacité du dictionnaire est 28= 256, correspondant à 256 neurones.Des réseaux de neurones actuellement en développement peuvent atteindre un niveau d'intégration par puce de 64 neurones à 16 entrées chacun et des coefficients synaptiques de 16 bits. Avec de tels réseaux, il faut quatre puces pour avoir 256 neurones. Quatre neurones calculent quatre distances en parallèle en un pas de temps (200 nS aujourd'hui). Chaque puce est alimentée par un bus 26 de trente deux bits qui charge chaque vecteur d'entrée (chaque vecteur définit 16 pixels, chaque pixel selon 256 ni veaux de gris (8 bits), soit 16 pixels ... 8 bits= 128 bits pour un vecteur) en quatre passes, ce qui ne pénalise pas le temps de calcul. Pour réaliser le module 28 qui calcule, soit un' mi- nimum, soit un maximum, le circuit de la figure 10 possède quatre entrées qui correspondent aux quatre distances sortant du calcul en parallèle dans le module 27 (quatre puces). Ces quatre entrées sont celles d'un quadruple comparateur en parallèle 35 qui indique laquelle est la plus grande ou la plus petite de ces quatre valeurs. il est suivi d'un comparateur séquentiel 36. Pour un dictionnaire à 256 vecteurs, le comparateur 36 doit comparer 64 valeurs puisque le comparateur 35 a réduit de quatre fois le nombre de vecteurs qui restent à comparer. Quand le module 27 travaille en codage ou en apprentissage, phase 1, chacune des quatre valeurs sort de chacune des quatre puces. En mode d'apprentissage, phase 2, les quatre distances sortent d'un seul neurone et sont évaluées pour chaque amas. Le module 29 réaiise de façon banale la fonction arithmétique décrite plus haut (équation 3) et n'a pas besoin d'etre représenté en détail. Le temps de codage est la somme du temps de calcul du module 27 et de celui du module 28, Pour chaque neurone fl, le module 27 calcule la somme (23-xj)2 où le carré est le produit de deux nombres de huit bits. Un réseau du genre mentionné plus haut calcule cette fonction en environ deux microsecondes, ce qui correspond au calcul de quatre distances dans le module 27. Quant au module 28, le temps de comparaison en parallèle de quatre distances est évalué à trois microsecondes. Cela conduit à un temps de base de cinq microsecondes pour les modules 27 et 28. Pour évaluer et comparer 256 distances quatre par quatre, il faut 64 temps de base, soit par conséquent 320 microsecondes par vecteur. Une image normale de télévision divisée en vecteurs de seize pixels a environ 25000 vecteurs, d'où un temps de codage par image d'environ huit secondes. Pour coder en 1/25e de seconde, il faut donc prévoir au plus 200 circuits travaillant en parallèle, soit 800 puces, telles que celles mentionnées plus haut, et cela avec le niveau d'intégration atteint aujourd'hui.. Cette estimation peut éventuellement être réduite d'un facteur allant jusqu'à cinq selon la conception des circuits. Le temps d'apprentissage, lui, se décompose en ses deux phases: la phase 1 dure à peu -près 1/25e de seconde, puisqu'un pas d'itération de cette phase dure le meme temps qu'un codage, et la phase 2 est beaucoup plus courte car il y a beaucoup moins de vecteurs dans chaque amas (mémoire 3) que dans l'image entière (mémoire A). Pour dix itérations, il faut compter à peu près 0,4 seconde. On peut effectivement prévoir un apprentissage toutes les 0,4 sec., mais il est aussi possible de prévoir davantage de systèmes en parallèle Si cette fréquence est jugée insuffisante. Bien entendu, les modes de mise en oeuvre de l'invention ne sont pas limités au dispositif décrit et il est par exemple possible de réaliser la mise en oeuvre au moyens de processeurs conventionnels. Une telle mise en oeuvre est à la porte de l'homme du métier, à partir de la description du procédé. On peut également envisager que l'apprentissage et le codage se fassent de façon continue, et que le circuit processeur n'attende pas d'avoir appris une image entière ou une série d'images pour passer en fonctionnement de type codage, mais qu'il travaille à chaque pas d'itération sur un jeu de vecteurs d'entrée modifié par l'arrivée de nouveaux vecteurs1 ce qui permet d'envoyer le dictionnaire sur la voie de communication sous la forme de ses modifications successives, au lieu de l'envoyer d'un seul tenant. REVENDICATIONS : 1. Procédé de codage de données numériques par quantification vectorielle, selon lequel les valeurs successives des données d'entrée sont mises sous forme de blocs de longueur déterminée appelés vecteurs d'entrée, puis le code utilisé. pour définir un vecteur d'entrée est à chaque fois l'indice du vecteur d'un jeu de vecteurs contenu dans une mémoire, appelée dictionnaire, vis à vis duquel ce vecteur d'entrée présente la plus faible distorsion et, pour établir les valeurs des vecteurs du dictionnaire, à partir d'un nombre fini de vecteurs d'entrée dit ensemble d'apprentissage et d'un dictionnaire initial qui est choisi de manière arbitraire, pour chaque ensemble, appelé amas, de vecteurs d'entrée qui sont représentés par un même vecteur du dictionnaire, un vecteur amélioré est calculé, puis le vecteur correspondant du dictionnaire est remplacé par ce vecteur amélioré, après quoi cette opération est reprise de façon itérative, et le dictionnaire résultant est ensuite utilisé pour le codage, caractérisé en ce que ledit vecteur amélioré représente le centre de la plus petite hypersphère incluant tous les vecteurs de l'amas. 2. Procédé selon la revendication 1, caractérisé en ce que ledit centre est déterminé au cours d'un processus itératif dans lequel le vecteur de l'anars qui est le plus éloigné du vecteur du dictionnaire qui représente jusqu'ici l'amas est d'abord déterminé, et ce vecteur le plus éloigné est ajouté, avec application d'un facteur de pondération, au dit vecteur du dictionnaire qui représentait jusqu'ici l'amas, puis cette séquence est répétée, c'est à dire que le vecteur de l'amas qui est le plus éloigné du nouveau vecteur du dictionnaire est à nouveau déterminé et ajouté au vecteur du dictionnaire, et ainsi de suite. 3. Procédé selon la revendication 2, caractérisé en ce que ledit facteur de pondération décroit à chaque étape du processus de détermination du centre de l'hypersphère, et que ce processus est arreté lorsque le facteur de pondération est devenu inférieur à une valeur prédéterminée. 4. Procédé selon la revendication 3, caractérisé en ce que, le facteur de pondération étant appelé a(t) où t est l'indice temporel de l'étape courante dans le processus, a(t) tend vers zéro et la série de terme a(t) tend vers l'infini lorsque t tend vers l'infini. 5. Dispositif codeur adaptatif pour la mise en oeuvre du procédé selon l'une quelconque des revendications précédentes, caractérisé en ce qu'il comporte deux circuits processeurs'identiques et des moyens pour fournir un ensemble d'apprentissage tour à tour à chacun d'eux, un des circuits processeurs travaillant en mode d'apprentissage, pendant que l'autre code une séquence de données sur la base du dictionnaire issu de l'apprentissage précédent, puis les modes de travail des circuits sont intervertis. 6. Dispositif pour la mise en oeuvre du procédé selon l'une quelconque des revendications 1 à 4, caractérisé en ce que chaque circuit processeur comporte, pour la formation des amas des modules communs aux deux fonctions de codage et d'apprentissage , ces modules étant un module de calcul de distances entre vecteurs et un module de détermination de la plus petite d'entre elles. 7. Dispositif selon la revendication 6, caractérisé en ce que le module commun est de type neuronal. 8. Dispositif selon la revendication 7, caractérisé en ce que le module commun de type neuronal est constitué de plusieurs réseaux de neurones en parallèle. 9. Dispositif selon l'une quelconque des revendications 5 à 8, caractérisé en ce que chaque circuit processeur est constitué essentiellement par trois modules, à savoir un module calculateur de distances associé à une mémoire des vecteurs du dictionnaire, un module comparateur pour calculer soit le minimum soit le maximum d'un ensemble de nombres, et un module de calcul du représentant de chaque amas (centre de l'hypersphère).