FR 2728706 A1 19960628 FR 9415409 A 19941221 Description L'invention concerne un circuit d'interpolation pour délivrer des valeurs d'une fonction trigonométrique d'une variable en réponse à des valeurs d'entrée de la variable, la variable d'entrée comprenant, en représentation binaire, un premier champ de bits de poids fort et un second champ de bits de poids faible, le circuit comprenant - un bloc-mémoire chargé par des valeurs de fonction correspondant au premier champ de bits, - et des moyens d'interpolation pour lire les valeurs dans le bloc-mémoire par adressage par le premier champ de bits, lesdites valeurs servant ensuite à calculer des valeurs interpolées à partir du second champ de bits. L'invention concerne également un système de traitement numérique de données ou un synthétiseur numérique de fréquences utilisant un tel circuit. Un domaine particulièrement intéressant d'utilisation de l'invention consiste en la génération de fonctions sinusoïdales. Un premier type d'utilisation consiste en la génération de fonctions sinus/cosinus d'une variable angulaire d'entrée pour le calcul, par exemple, de transformées de Fourier ou de transformées en cosinus discrètes. Cette utilisation se présente dans des systèmes de transmission numérique. Cette génération d'un couple de fonctions sinus-cosinus est également appelée calcul de racines Nième de l'unité. Un second type d'utilisation consiste à générer des signaux sinusoïdaux par synthèse numérique directe de fréquences (Direct Digital Frequency Synthesis - DDFS en langue anglaise). Pour ces applications, réalisées le plus souvent sous forme de circuits intégrés, on cherche à construire un circuit de grande compacité pour lequel l'erreur de restitution de la fonction trigonométrique soit la plus faible possible. Une possibilité pour réduire la complexité et/ou la surface du circuit consiste à procéder à une interpolation entre un nombre limité de valeurs de la fonction. Une possibilité complémentaire consiste à mettre à profit les relations de symétrie des fonctions trigonométriques. I1 est ainsi possible de limiter le calcul des fonctions trigonométriques à une faible portion de la variable angulaire d'entrée, par exemple un seul quadrant, pour en déduire ensuite toutes les valeurs de la fonction dans les autres quadrants. On réduit ainsi fortement l'étendue du circuit. L'interpolation est alors effectuée dans le quadrant sélectionné.Ceci est, par exemple, décrit dans "A 150-MHZ Direct Digital Frequency Synthesizer in 1.25 um CMOS with -90 dBc Spurious Performance" de H.T. NICHOLAS III et H. SAMUELI dans IEEE Journal of Solid-State Circuits, Vol. 26, n 12, Décembre 1991, pages 1959-1969. Ce document décrit une méthode d'interpolation basée sur l'utilisation d'une première mémoire stockant un nombre limité de valeurs de la fonction et sur l'utilisation d'une seconde mémoire stockant des valeurs fines pour affiner les valeurs stockées dans la première mémoire. Il apparait dans ce document qu'une valeur finale interpolée est obtenue en additionnant deux valeurs (une valeur approximative et une valeur fine) ce qui se traduit, en représentation binaire, par une quasi-juxtaposition des deux champs de bits répartis entre les deux mémoires. Un inconvénient de ce type de répartition est que le nombre de bits à stocker dans chaque mémoire, donc la taille des mémoires, et notamment l'étendue du champ de la seconde mémoire, est directement dépendante du nombre de bits de la valeur finale. De plus, les valeurs fines étant indépendantes du champ médian (B) de la variable d'entrée +, un jeu unique de valeurs fines est utilisé quel que soient les valeurs du champ médian. La précision de l'interpolation s en trouve affectée. L'invention consiste à réduire la taille mémoire en interpolant différemment entre les valeurs stockées de la fonction et à assurer une meilleure précision de calcul. Pour cela, les moyens d'interpolation comprennent - des moyens de mémorisation chargés, par adressage par le premier champ de bits, par des coefficients d'interpolation associés respectivement aux valeurs chargées dans le bloc-mémoire, - des moyens pour lire, par adressage par le premier champ de bits, les coefficients d'interpolation dans les moyens de mémorisation, - des moyens de calcul, d'abord pour calculer, pour chaque valeur d'entrée de la variable, une quantité interpolée obtenue en multipliant, par le second champ de bits, le coefficient d'interpolation correspondant à la valeur d'entrée de la variable, puis pour additionner la quantité interpolée avec la valeur de fonction adressée par le premier champ de bits pour délivrer la valeur interpolée. En effectuant le calcul de la quantité interpolée à partir de coefficients d'interpolation, il est possible de stocker des coefficients d'interpolation sur un plus faible nombre de bits (taille mémoire plus faible que dans l'art connu) que lorsque l'on stocke les valeurs interpolées elles-memes car il suffit d'avoir une précision égale ou supérieure au pas de quantification utilisé. De plus, un coefficient d'interpolation peut être commun à plusieurs calculs de valeurs interpolées (comprises par exemple entre deux valeurs consécutives du bloc-mémoire). La taille de la mémoire est à nouveau de ce fait réduite. De cette manière on met à profit le caractère linéaire de l'interpolation effectuée entre deux points. Les coefficients d'interpolation ne dépendent pas d'un seul point mais concernent tout un segment dans lequel on calcule les valeurs interpolées et ceci de manière identique pour tout le segment d'interpolation. Néanmoins, une interpolation spécifique à chaque valeur interpolée est réalisée ce qui fournit un avantage significatif par rapport à l'interpolation effectuée par l'art antérieur cité. Préférentiellement, les valeurs de fonction chargées dans le bloc-mémoire sont, avant chargement, corrigées par des facteurs de correction pour minimiser des erreurs entre la fonction trigonométrique et les valeurs interpolées. On réduit considérablement le bloc-mémoire en stockant des valeurs appartenant à un quadrant d'un cercle trigonométrique. On déduit les valeurs de fonction pour les autres quadrants à partir des valeurs interpolées dans ledit quadrant. Préférentiellement, les valeurs de fonction chargées dans le bloc-mémoire sont des valeurs négatives exprimées en complément à deux. En stockant des valeurs négatives, donc la valeur -1, il est possible, pour un nombre donné de bits, de supprimer l'imprécision, de 1 bit du poids le plus faible, créée par la représentation binaire en complément à 2 de la valeur +1. Ceci peut constituer un avantage particulièrement intéressant dans certaines applications par exemple lorsque les valeurs interpolées sont utilisées comme opérandes dans une multiplication effectuée conformément à l'algorithme de Booth modifié. Les moyens de calcul peuvent comporter un multiplieur/accumulateur pour multiplier le coefficient d'interpolation par le second champ de bits pour obtenir la quantité interpolée. Celle-ci est alors totalisée avec la valeur approchée dans la partie accumulateur du multiplieur/accumulateur pour fournir la valeur interpolée se rapportant à la valeur d'entrée de la variable. Avec un multiplieur/accumulateur intégré on apporte une réduction significative de surface de substrat nécessaire à l'intégration. Ces différents aspects de l'invention et d'autres encore seront apparents et élucidés à partir des modes de réalisation décrits ci-après. L'invention sera mieux comprise à l'aide des figures suivantes données à titre d'exemples non limitatifs qui représentent Figure 1 : un graphique d'une partie agrandie d'une fonction F(0) = cors(0). Figure 2 : un schéma d'un circuit selon l'invention. La figure 1 représente une partie de fonction F(0) = cos(0) connue par un nombre limité de valeurs F(Onk) = cos(0nk) [point A], F(0(n+l)k) = C S(0tnEl)k) [point B], pour des valeurs Onk, 0(n+l)k de la variable 6. Sur le graphique n est l'indice courant N des points A, B..., avec 0 # n # N/k -1, k étant un nombre entier déterminant le facteur d'interpolation, avec #N = 2# et #n = 2# n/N. Lorsqu'une valeur quelconque e nk+i de la variable est présentée en entrée du circuit, celui-ci calcule, par interpolation, une valeur interpolée proche de la valeur F(nk*i) [point C]. Sous cette forme. l'indice i est un indice courant variant de O à k-l afin de différencier k valeurs intermédiaires entre Enk et 0(n+l)k Pour représenter N valeurs de la variable #, il faut log2N bits. Une valeur quelconque #nk+i de la variable est représentée par un mot binaire pour lequel on peut ignorer les deux bits de poids forts du début pour ne considérer que les valeurs appartenant à un seul quadrant. Le mot binaire 13 (figure 2) est formé d'un premier champ 13A comportant des bits de poids fort MSB et d'un second champ 13B comportant des bits de poids faible LSB. Le premier champ MSB peut contenir ou non les deux bits de poids forts différenciant les quadrants. Selon l'invention, l'interpolation est effectuée en exploitant un nombre N/k de valeurs connues de la fonction. Ces N/k valeurs connues sont préférentiellement stockées préalablement dans un bloc-mémoire 142. Les valeurs connues F(Bk) sont celles qui correspondent aux log2N/k bits de poids fort de la variable d'entrée. Pour les N/k valeurs connues de la fonction (points A, B, etc), selon l'invention, on stocke également, préférentiellement dans des moyens de mémorisation 144, N/k coefficients d'interpolation C(0nk). Ceux-ci peuvent être des valeurs de dérivée F'(0nk) de la fonction F(Bnk) Ces valeurs de dérivée peuvent être des valeurs moyennes de dérivée calculées autour de chaque point connu A, B, etc. Préférentiellement, les valeurs des coefficients d'interpolation sont égales à la pente des segments reliant deux points connus consécutifs. Ces valeurs de coefficient d'interpolation peuvent également être formées par des valeurs vraies de dérivée calculées aux points connus A, B, etc. Pour limiter les imprécisions, on stocke dans le blocmémoire 142 des valeurs connues de la fonction préalablement corrigées par des termes correctifs. Le bloc-mémoire stocke donc des valeurs F(Onk) + cor(0nk). Le terme cor(0nk) est préalablement calculé pour chaque point connu pour minimiser l'erreur quadratique moyenne entre les valeurs interpolées et la fonction trigonométrique parfaite. Lorsqu'une valeur d'entrée Onk+i est présentée à l'entrée du circuit, le champ 13A de bits de poids fort adresse (connexion 15) le bloc-mémoire 142 et les moyens de mémorisation 144 - le bloc-mémoire délivre F(Onk) + cor(0nk) constituant la valeur approchée de la valeur interpolée à déterminer (connexion 17), - les moyens de mémorisation délivrent les coefficients d'interpolation C'(0nk) (connexion 16). Considérons le cas où la fonction F(0nk) est une fonction cosinus et où les valeurs de coefficients d'interpolation sont déduites de la pente d'un segment y = a x+b. Ce segment passe au voisinage des deux points connus A et B pour indiquer que des coefficients de corrections interviennent dans le calcul des valeurs interpolées. Une valeur approchée y de cos (0nk+i) [point D] est alors telle que avec 0nk.i = N (nk + i) Os i s k-l Os n s N k Après des manipulations trigonométriques connues, on obtient Pour obtenir une valeur interpolée côs (0nkfi) plus proche de la valeur exacte cos (3nk+i)' on introduit un terme de correction cor (#nk). Cette valeur interpolée est située entre les ordonnées des points D et C. Chaque terme de correction cor (#nk) est déterminé en rendant minimum la somme #(côs #nk+i - cos #nk+i)2 pour 0#i #k-1. La valeur approchée côs(#nk+i) s'écrit alors : Le circuit comprend des moyens de calcul 145, par exemple un multiplieur/accumulateur qui reçoit C' (9) et le champ 13B formé des bits de poids faible de la valeur d'entrée Onk+i. Dans une première étape, les moyens de calcul 145 calculent le résultat partiel C(0nk) i et dans une seconde étape, ils ajoutent ce résultat partiel à la valeur approchée F(9nk) + cor(0nk) pour délivrer la valeur interpolée : F (#nk+1) soit : F(#nk+1) = [C(#nk) . i] + F(#nk) + cor(#nk) Ainsi, il est possible de réduire la taille de la seconde mémoire en ne stockant qu'un nombre limité de valeurs sur un nombre réduit de bits tout en obtenant une précision élevée sur le résultat, ce qui est particulièrement intéressant dans la réalisation de circuits intégrés. Le circuit permet de générer des fonctions trigonométriques, par exemple des fonctions sinus et des fonctions cosinus qui peuvent être utilisées dans un synthétiseur de fréquences réalisant une synthèse numérique directe de fréquences. Il peut également être utilisé dans des systèmes de traitement numérique de données pour générer des fonctions sinus/cosinus mises en oeuvre dans le calcul de transformées de Fourier, ou de transformées en cosinus discrètes, ou d'autres transformées. REVENDICATIONS 1. Circuit d'interpolation pour délivrer des valeurs d'une fonction trigonométrique d'une variable en réponse à des valeurs d'entrée de la variable, la variable d'entrée comprenant, en représentation binaire, un premier champ de bits de poids fort (MSB) et un second champ de bits de poids faible (LSB), le circuit comprenant - un bloc-mémoire (142) chargé par des valeurs de fonction correspondant au premier champ de bits, - et des moyens d'interpolation pour lire les valeurs dans le bloc-mémoire par adressage par le premier champ de bits, lesdites valeurs servant ensuite à calculer des valeurs interpolées à partir du second champ de bits, caractérisé en ce que les moyens d'interpolation comprennent - des moyens (144) de mémorisation chargés, par adressage par le premier champ de bits, par des coefficients d'interpolation associés respectivement aux valeurs chargées dans le bloc-mémoire, - des moyens pour lire (15, 16), par adressage par le premier champ de bits, les coefficients d'interpolation dans les moyens de mémorisation, - des moyens de calcul (145), d'abord pour calculer, pour chaque valeur d'entrée de la variable, une quantité interpolée obtenue en multipliant, par le second champ de bits, le coefficient d'interpolation correspondant à la valeur d'entrée de la variable, puis pour additionner la quantité interpolée avec la valeur de fonction adressée par le premier champ de bits pour délivrer la valeur interpolée. 2. Circuit selon la revendication 1 caractérisé en ce que les valeurs de fonction chargées dans le bloc-mémoire sont, avant chargement, corrigées par des facteurs de correction pour minimiser des erreurs entre la fonction trigonométrique et les valeurs interpolées. 3. Circuit selon les revendications 1 ou 2 caractérisé en ce que les valeurs de fonction chargées dans le bloc-mémoire sont des valeurs négatives exprimées en complément à deux. 4. Circuit selon une des revendications 1 à 3 caractérisé en ce que les moyens de calcul comportent un multiplieur/accumulateur intégré. 5. Synthétiseur numérique de fréquences caractérisé en ce qu'il comprend un circuit selon une des revendications 1 à 4 pour réaliser une synthèse numérique directe de fonctions sinusoïdales. 6. Système de traitement numérique de données caractérisé en ce qu'il comprend un circuit selon une des revendications 1 à 4 pour délivrer des fonctions sinus/cosinus mises en oeuvre dans un calcul de transformée de Fourier, de transformée en cosinus discrète ou d'une autre transformée.