FR 2733103 A1 19961018 FR 9504401 A 19950412 "Récepteur autoradio muni d'une mémoire pour stocker des éléments de vocabulaire prédéterminés" La présente invention concerne un récepteur autoradio muni d'une mémoire de vocabulaire contenant des descriptions d'éléments de vocabulaire, mémoire dans laquelle chacune des descriptions d'éléments de vocabulaire est adressable à partir d'un code constitué par un nombre désignant un élément de vocabulaire, l'ensemble des nombres désignant les éléments de vocabulaire utiles pour un usager donné constituant une séquence de nombres dans laquelle sont présentes des solutions de continuité entre des groupes de nombres consécutifs, un groupe de nombres consécutifs étant appelé segment. Un tel récepteur autoradio est notamment destiné à recevoir et exploiter des signaux dits RDS/TMC. Il peut délivrer des messages d'information sur la circulation ou destinés au guidage d'un véhicule en inscrivant les messages sur un écran et/ou en les délivrant par synthèse vocale. Un récepteur d'émissions radiophoniques dans lequel sont traités des signaux numériques d'informations de circulation, et qui comprend une mémoire pour transformer les signaux numériques en informations compréhensibles est connu du document EP-A-0 263 332. Selon ce document, la mémoire est subdivisée en sous-ensembles contenant chacun les données d'une partie d'une route, correspondant à une ville rencontrée sur cette partie de route. L'ensemble des codes et des définitions d'éléments de vocabulaire constituent cependant une base de données qui est maintenant prédéfinie et qui groupe les éléments de vocabulaire d'une façon qui ne peut plus être modifiée. Un objet de l'invention est de réduire la taille de la mémoire de vocabulaire du récepteur et aussi d'assurer l'accès le plus rapide possible à un élément de vocabulaire, à partir de son code. A cet effet, le récepteur autoradio selon l'invention est remarquable en ce que les descriptions correspondant aux codes contenus dans les différents segments sont placées bout à bout dans la mémoire de vocabulaire, et le récepteur comporte une mémoire auxiliaire qui contient des données numériques permettant de déterminer pour chaque code la position de la description correspondante dans la mémoire de vocabulaire. L'invention est donc basée sur l'idée de tasser au maximum les groupes dans la mémoire de vocabulaire, malgré la complication introduite par la nécessité d'utiliser un adressage indirect pour accéder à un groupe. Une première manière de gérer la mémoire de vocabulaire est d'utiliser une mémoire auxiliaire qui contient, pour chacun des codes utiles pour un usager donné la position de la description correspondante dans la mémoire de vocabulaire. Une seconde manière de gérer la mémoire de vocabulaire est d'utiliser une mémoire auxiliaire qui contient, pour un segment donné, la plus petite valeur de code comprise dans le segment, la plus grande valeur de code comprise dans le segment, et la position dans la mémoire de vocabulaire de la description correspondant au code situé à une des limites du segment. Avec cette mémoire auxiliaire il suffit, à partir d'une valeur de code donnée, de la comparer tour à tour aux limites des segments successifs trouvés dans la mémoire auxiliaire, pour trouver le segment qui contient la description de l'élément de vocabulaire correspondant à ce code, et dès lors obtenir sa position dans la mémoire de vocabulaire. De préférence, une mémoire dite "d'arbre" contient, pour un segment donné, l'adresse dans la mémoire auxiliaire des données d'un autre segment de la suite des segments, situé pratiquement au milieu de ceux qui sont en dessous du dit segment donné et l'adresse dans cette même mémoire auxiliaire des données d'un autre segment, situé pratiquement au milieu de ceux qui sont au dessus du dit segment donné. Ceci permet d'utiliser un processus en arbre pour la recherche d'un segment, et une recherche plus rapide. Si aucun segment encore à prendre en compte n'existe au dessus ou au dessous du segment donné, la mémoire d'arbre contient un signe spécial pour indiquer ce fait. Avantageusement, la mémoire auxiliaire et la mémoire d'arbre sont une seule et même mémoire. Le récepteur est avantageusement muni d'un lecteur de carte, et la mémoire de vocabulaire et la mémoire auxiliaire sont contenues dans une carte amovible. Ainsi l'appareil est facilement adaptable à des régions différentes, en changeant tout simplement de carte. Ces aspects de l'invention ainsi que d'autres aspects plus détaillés apparaitront plus clairement grâce à la description suivante d'un mode de réalisation constituant un exemple non limitatif. La figure 1 représente schématiquement un récepteur autoradio équipé de l'invention. La figure 2 représente plus en détail la partie concernée par l'invention, et ses connexions avec le reste de l'appareil. Les figures 3 et 4 illustrent deux exemples d'arbres permettant de trouver un segment dans une séquence de nombres désignant les éléments de vocabulaire. Le récepteur de la figure 1 comporte, à partir d'une antenne 1, un dispositif 2 ("tuner") contenant un circuit de syntonisation et un circuit de changement de fréquence, suivi d'un dispositif 3 contenant un amplificateur à fréquence intermédiaire et un démodulateur. Dans le procédé dit RDS ("Radio Data System"), une sous-porteuse FM est modulée par des signaux numériques de données, utiles à la réception des différents émetteurs d'une même chaîne. Un décodeur 13 de messages RDS connu est présent. Dans le cas du procédé connu dit "TMC" (Traffic Message Channel"), des messages d'information sur la circulation sont incorporés dans certains champs numériques des signaux RDS, par exemple: "bouchon trois km avant l'entrée de Paris". Pour traiter les messages TMC, le récepteur comporte un module 14, auquel les données RDS du décodeur 13 sont amenées pour être analysées et éventuellement mémorisées. Pour permettre de délivrer des messages sous forme vocale, ce module 14 est aussi relié à un système amplificateur audio 4 suivi d'un hautparleur 5. Il est relié aussi à un dispositif d'interface entrée/sortie 18 relié à un clavier de commande 12 et à un écran d'affichage 10, par exemple à cristaux liquides. Sur la figure 2, le module 14 comprend un microcontrôleur 7 qui génère des signaux de contrôle et traite les signaux qui sortent des différents dispositifs, auxquels il est relié par un bus d'adresses 15 et par un bus de données 21. En outre il sélectionne et prépare des données numériques définissant des éléments parlés pour un module synthétiseur de parole 20 connu en soi, qui fournit de façon connue les signaux analogiques voulus à l'amplificateur audio 4 suivi du haut- parleur 5. Le module 14 comprend aussi une mémoire volatile 8 dite "RAM", pour le stockage d'une couche logicielle utilisée à un instant donné par le microcontrôleur 7 et aussi pour le stockage provisoire des contenus de champs TMC à traiter, une mémoire permanente 9 pour le stockage de descriptions de vocabulaire fixées une fois pour toutes, et une mémoire 22, 23 constituée d'un lecteur 22 de carte à mémoire et d'une carte à mémoire amovible 23, par exemple de type PCMCIA, dans laquelle sont stockés plus spécialement les descriptions d'éléments de vocabulaire spécifiques correspondant à un usager et/ou à une région donnés. Les messages TMC standard sont constitués de plusieurs champs de données numériques, reçus dans les données RDS, et qui désignent les éléments de vocabulaire à chaque fois par leur code: - un 1er champ, de 11 bits, contient le code d'un élément de vocabulaire décrivant un événement, - un 2e champ, de 16 bits, contient le code d'un élément de vocabulaire définissant le lieu concerné par l'événement en question, - un 3' champ, de 3 bits, contient le code d'un élément de vocabulaire décrivant une extension du lieu concerné, - un 4' champ, de 1 bit, décrivant le sens du trajet concerné, - un 5' champ, de 3 bits, donnant la durée de validité du message, - un 6' champ, de 1 bit, indiquant s'il est recommandé ou non de prendre une déviation. Le contenu de chacun des champs doit être traité de façon à exprimer en clair ce dont il s'agit. Pour cela est prévue une mémoire permanente, dans laquelle sont stockées des informations en clair (sous forme par exemple des codes ASCII des caractères d'un message à afficher), à des adresses correspondant aux différents contenus possibles de chaque champ, ce qui permet de retrouver les informations à partir du contenu d'un champ. Par exemple, le 1ir champ (décrivant un événement), qui comporte 11 bits, est associé à une mémoire qui peut contenir en clair 2048 éléments de vocabulaire (soit 211 éléments de vocabulaire), chacun étant trouvé à l'adresse définie par le contenu du champ. Ces éléments de vocabulaire disent par exemple "bouchon", "travaux", "accident", etc. Ils sont placés dans la mémoire 9. Le 2' champ (décrivant un lieu), qui comporte 16 bits, est associé à une mémoire, dite mémoire des points de localisation, qui peut contenir en clair jusqu'à 65536 éléments de vocabulaire (soit 216 éléments de vocabulaire) qui comprennent des données complètes sur notamment des noms de lieux, leur type, la région à laquelle ils appartiennent, les points suivant et précédent, etc, chaque élément de vocabulaire étant en principe trouvé à une adresse désignée par le contenu du champ. Ces éléments de vocabulaire sont par exemple "Paris", ou "Lille", ou "la sortie 21", etc. Ils sont placés dans la mémoire 23. Dans le 3e champ, différents types d'extensions sont définis. On entend par extension le fait que l'événement considéré s'étend par exemple jusqu'à la localisation suivante. Dans le 4' champ, un bit 0 signifie par exemple "sens Paris - Lille", alors qu'un bit 1 signifierait "sens Lille Paris" (on sait qu'on est sur une liaison entre Paris et Lille par le contenu du champ 2, seul le sens manquait). La nature d'un problème est définie par les informations en clair correspondant à un code contenu dans le champ 1, et l'emplacement o se situe ce problème est défini par les informations correspondant à un code du champ 2. Les codes contenus dans ce champ 2 sont appelés "PL" (Point de Localisation). Ils sont représentés par des nombres, et il y a des solutions de continuité dans la séquence de ces nombres. Par exemple pour définir les points de localisation de la vallée du Rhin, les nombres PL vont de 258 à 264, puis ensuite de 930 à 983, et ainsi de suite. Il est prévu pour décrire chaque point de localisation (chaque nom de lieu) 170 octets de données. Dans le cas de la vallée du Rhin, le plus grand nombre PL est 50004, donc avec une mémoire des points de localisation dans laquelle l'adresse des données décrivant un point de localisation serait le code lui même, il faudrait une capacité de mémoire de 50004 fois 170 octets, soit 8500680 octets. On a pensé à réduire la taille de la mémoire de vocabulaire contenant les descriptions des points de localisation. A cet effet, on considère dans la base de données normalisée les seuls points de localisation qui sont utiles dans une région donnée, et pour lesquels les nombres PL sont consécutifs. Ils forment des groupes dits "segments". Dans la mémoire des points de localisation du récepteur, ces segments sont concaténés, c'est-à-dire mis les uns à la suite des autres sans solution de continuité. Grâce à cette organisation, on peut se contenter d'une mémoire de taille limitée. Avec les segments ainsi concaténés, on pourrait imaginer, pour trouver l'appartenance d'un code à un segment donné, d'utiliser une mémoire auxiliaire qui contienne, pour chacun des 50004 codes possibles (cas de la vallée du Rhin), l'indication directe de la position des données décrivant le point de localisation dans la mémoire de vocabulaire. Dans ce cas, la capacité totale de la mémoire (descriptions des points de localisation + mémoire auxiliaire) serait pour les descriptions des points de localisation: 1285 fois 170 octets, soit 218450 octets, et pour la mémoire auxiliaire: deux octets pour chaque nombre PL de la gamme complète des nombres PL, soit 50004 fois 2 octets = 100008 octets, c'est- à-dire au total 318458 octets seulement, au lieu de 8500680 octets. L'appartenance d'un code à un segment peut aussi être retrouvée avec une mémoire auxiliaire contenant le plus petit et le plus grand nombre PL de chacun des segments, et dans laquelle la position réelle des descriptions correspondant au segment est également indiquée en donnant la position d'une des limites correspondant à ce segment dans la mémoire de vocabulaire, par exemple la position de sa limite inférieure, que l'on appelera "offset". Pour retrouver le segment dans lequel se trouve un nombre PL donné, il faut alors comparer ce nombre PL donné avec le plus petit et le plus grand nombre PL de chaque segment (trouvés dans la mémoire auxiliaire), jusqu'à trouver celui qui contient le nombre PL donné. Pour obtenir l'adresse de la description du point de localisation correspondant à PL dans la mémoire de vocabulaire, il suffit alors d'ajouter à l'offset un déplacement qui est la différence entre le nombre PL donné et le plus petit nombre contenu dans le segment. Dans le cas de la vallée du Rhin déjà exemplifiée plus haut, il y a 196 segments, il faudrait donc dans la mémoire auxiliaire 196 fois 6 octets (2 pour le plus petit nombre du segment, 2 pour le plus grand, et 2 pour la position du segment) soit 1176 octets, avec toujours 218450 octets pour la mémoire des points de localisation, ce qui demanderait au total 219626 octets, au lieu des 318458 octets mentionnés plus haut, mais la détermination d'une adresse est alors un peu plus longue. Néanmoins, il est également possible de diminuer considérablement le temps nécessaire pour l'accès à la description d'un point de localisation. Pour cela on considère l'ordre dans lequel les segments sont rangés dans la mémoire de vocabulaire, ordre basé sur la valeur des nombres PL contenus dans les segments. On dira qu'un second segment est au dessus par rapport à un premier si le plus petit nombre PL du second est plus grand que le plus grand nombre PL du premier. On stocke alors dans un élément de mémoire dit "mémoire d'arbre" des données représentant un arbre par lequel on accède aux segments. En pratique, cela signifie qu'on stocke dans cet élément de mémoire des blocs de données appelés noeuds, qui définissent chacun un segment tout en indiquant l'adresse dans la même mémoire d'arbre, de deux autres noeuds. Par exemple le noeud racine, dit de niveau "0", définit le segment médian c'est-à-dire placé pratiquement au milieu de la séquence des segments, et il indique deux autres noeuds, à savoir: - un premier noeud, dit de niveau "-1", qui définit - un segment placé pratiquement au milieu de la pluralité de segments situés en dessous du dit segment médian, - et à son tour deux autres noeuds, de niveau "-2", - un second noeud, également de niveau "-1", qui définit - un segment placé pratiquement au milieu de la pluralité de segments situés au dessus du dit segment médian, - et à son tour deux autres noeuds, de niveau "-2". Par les mot "pratiquement au milieu", on entend notamment que lorsque le nombre des segments est pair, il n'y a pas de segment rigoureusement au milieu. Quand un code est recherché, sur la base de son nombre PL, il suffit de suivre l'arbre jusqu'à trouver le segment comprenant le nombre PL. La profondeur de l'arbre, c'est-à- dire le nombre maximum d'étapes de recherche pour trouver un segment comprenant un nombre PL donné, est au plus égal au logarithme de base 2 du nombre total de segments contenus dans la mémoire de vocabulaire. La mémoire auxiliaire qui contient pour chaque segment le plus petit et le plus grand nombre PL de chacun des segments, et la position réelle du segment, constitue avantageusement la mémoire d'arbre en ajoutant à chaque fois les adresses de deux autres noeuds. Pour illustrer la manière préférée d'organiser le suivi d'un arbre, la figure 3 représente symboliquement sous la forme d'un rectangle allongé 39 une séquence de nombres PL. Il s'agit de la séquence complète prévue par la normalisation pour l'ensemble de tous les points de localisation possibles: elle comprend donc 65536 positions. Néanmoins dans une base de données concernant un pays, seuls certains point de localisations sont définis. Ils sont groupés en segments 24, 25, 26, 27, 28, 29, 30, 31, représentés hachurés, qui contiennent des codes désignant des point de localisations définis, et il y a des solutions de continuité 32, 33, 34, 35, 36, 37, 38 entre les segments. Le noeud racine (profondeur 0) de l'arbre, correspondant à la référence 227, contient entre autres le nombre le plus petit et le nombre le plus grand du segment 27. La comparaison du nombre PL donné avec ces deux nombres fournit trois possibilités: soit ce nombre est dans le segment 27, et il ne reste plus qu'à calculer l'adresse de la description du point de location comme expliqué plus haut, soit il est à droite sur la figure (nombres plus grands) ou à gauche (nombres plus petits). Au niveau du noeud racine 227 sont également indiquées les adresses dans la mémoire auxiliaire des noeuds médians respectivement au dessous 225 et au dessus 230, ce qui permet de suivre l'arbre, en choisissant l'une ou l'autre de ces adresses selon le résultat de la comparaison. Si le nombre PL est plus grand que le nombre le plus grand du segment 27, le noeud suivant, de profondeur -1, est celui correspondant à la référence 230; il contient le nombre le plus petit et le nombre le plus grand du segment 30. Si le nombre PL est plus petit que le nombre le plus petit du segment 27, le noeud suivant, de profondeur "-1", est celui correspondant à la référence 225; il contient le nombre le plus petit et le nombre le plus grand du segment 25. A nouveau la comparaison du nombre PL donné avec ces deux nombres fournit trois possibilités: soit ce nombre est dans le segment 25, et il ne reste plus qu'à calculer l'adresse de la description du point de location comme expliqué plus haut, soit il est à droite ou à gauche sur la figure. Par exemple, à droite, l'adresse indiquée comme noeud médian suivant par le noeud 225 contient le nombre le plus petit et le nombre le plus grand du segment 26, et un code indiquant qu'on est arrivé au bout de l'arbre. Il en est de même pour les autres segments 24, 28, 31. Dans certains cas, la subdivision de l'arbre en branches conduit à au moins un noeud terminal qui ne correspond pas à un segment: c'est le cas ici pour le "pseudo-segment" 250 à droite du noeud 229; alors un code indique que ce segment est vide, soit au niveau de ce segment, soit plutôt au niveau du noeud amont (229). La figure 4 est destinée à illustrer une variante dans la manière d'organiser le suivi d'un arbre. Elle est basée sur les solutions de continuité entre les segments au lieu des segments, mais elle est plus complexe à mettre en oeuvre que la manière préférée. Le noeud racine (profondeur 0) de l'arbre, correspondant à la référence 135, contient le nombre le plus petit du segment 28 et le nombre le plus grand du segment 27, de part et d'autre de la solution de continuité 35. La comparaison du nombre PL donné avec ces deux nombres aiguille vers la droite (nombres plus grands) de la figure ou vers la gauche (nombres plus petits). Au niveau du noeud racine 135 sont également indiquées les adresses dans la mémoire auxiliaire des noeuds médians respectivement inférieur 133 et supérieur 137, ce qui permet de suivre l'arbre. Si le nombre PL est plus petit que le nombre le plus grand du segment 27, le noeud suivant, de profondeur "-1", correspondant à la référence 133, contient le nombre le plus petit du segment 26 et le nombre le plus grand du segment 25. Si le nombre PL est plus grand que le nombre le plus petit du segment 28, le noeud suivant, de profondeur "-1", correspondant à la référence 137, contient le nombre le plus petit du segment 30 et le nombre le plus grand du segment 29. Au noeud 133, la comparaison du nombre PL donné avec le nombre le plus petit du segment 26 et le nombre le plus grand du segment 25 aiguille vers la droite de la figure ou vers la gauche, et ainsi de suite avec les noeuds de profondeur -2, correspondant aux références 132, 134, 136, 138, dont l'un conduit enfin au segment cherché. Les caractéristiques d'un segment (le plus petit et le plus grand code contenu dans le segment, et l'offset), et les données permettant de trouver dans la même mémoire les noeuds suivants de l'arbre peuvent être empilées dans la même mémoire qui est alors à la fois la mémoire d'arbre et la mémoire auxiliaire. Il faut 10 octets de données pour définir chaque segment dans la mémoire auxiliaire, à savoir: 2 octets pour indiquer le plus petit nombre PL et 2 octets pour indiquer le plus grand nombre PL du segment, 2 octets pour l'offset, et 2 octets pour chacune des deux adresses de segments suivants de l'arbre. Dans le cas de la vallée du Rhin déjà exemplifiée plus haut avec 196 segments, il faut donc dans la mémoire auxiliaire 196 fois 10 octets soit 1960 octets, avec toujours 218450 octets pour la mémoire des points de localisation, ce qui demande au total 220410 octets. L'arbre a une profondeur de huit. Les 220410 octets nécessaires sont à peine plus nombreux que les 219626 octets mentionnés plus haut sans utilisation d'un arbre, alors que l'accès est beaucoup plus rapide avec l'arbre. REVENDICATIONS: 1. Récepteur autoradio muni d'une mémoire de vocabulaire contenant des descriptions d'éléments de vocabulaire, mémoire dans laquelle chacune des descriptions d'éléments de vocabulaire est adressable à partir d'un code constitué par un nombre désignant un élément de vocabulaire, l'ensemble des nombres désignant les éléments de vocabulaire utiles pour un usager donné constituant une séquence de nombres dans laquelle sont présentes des solutions de continuité entre des groupes de nombres consécutifs, un groupe de nombres consécutifs étant appelé segment, caractérisé en ce que les descriptions correspondant aux codes contenus dans les différents segments sont placées bout à bout dans la mémoire de vocabulaire, et le récepteur comporte une mémoire auxiliaire qui contient des données numériques permettant de déterminer pour chaque code la position de la description correspondante dans la mémoire de vocabulaire. 2. Récepteur autoradio selon la revendication 1, caractérisé en ce que la mémoire auxiliaire contient pour chacun des codes utiles pour un usager donné la position de la description correspondante dans la mémoire de vocabulaire. 3. Récepteur autoradio selon l'une des revendications 1 ou 2, caractérisé en ce que la mémoire auxiliaire contient, pour un segment donné, la plus petite valeur de code comprise dans le segment, la plus grande valeur de code comprise dans le segment, et la position dans la mémoire de vocabulaire de la description correspondant au code situé à une des limites du segment. 4. Récepteur autoradio selon la revendication 3, caractérisé en ce qu'une mémoire dite "d'arbre" contient en correpondance avec des données sur un segment, les adresses dans la mémoire auxiliaire de données concernant d'autres segments, parmi ceux qui sont en dessous du dit segment donné et ceux qui sont au dessus du dit segment donné. 5. Récepteur autoradio selon la revendication 4, caractérisé en ce que la mémoire d'arbre contient, pour un segment donné, l'adresse dans la mémoire auxiliaire des données d'un autre segment de la suite des segments, situé pratiquement au milieu de ceux qui sont en dessous du dit segment donné et l'adresse dans cette même mémoire auxiliaire des données d'un autre segment, situé pratiquement au milieu de ceux qui sont au dessus du dit segment donné. 6. Récepteur autoradio selon la revendication 5, caractérisé en ce que, si aucun segment encore à prendre en compte n'existe au dessus ou au dessous du segment donné, la mémoire d'arbre contient un signe spécial pour indiquer ce fait. 7. Récepteur autoradio selon l'une quelconque des revendications 4 à 6, caractérisé en ce que la mémoire auxiliaire et la mémoire d'arbre sont une seule et même mémoire. 8. Récepteur autoradio selon l'une quelconque des revendications précédentes, caractérisé en ce qu'il est muni d'un lecteur de carte, et que la mémoire de vocabulaire et la mémoire auxiliaire sont contenues dans une carte amovible.