FR 3084760 A1 20200207 FR 1857308 A 20180803 B17216 - DD18730 DESCRIPTION TITRE : Générateur d'une permutation pseudo-aléatoire Domaine technique [0001] La présente description concerne de façon générale les circuits et systèmes électroniques et, plus particulièrement, les circuits utilisant des permutations pseudo-aléatoires de données qu'ils manipulent. [0002] La présente description concerne, plus précisément, un procédé et un circuit de génération de permutations pseudoaléatoires. Technique antérieure [0003] Les permutations pseudo-aléatoires sont notamment utilisées en cryptographie, dans les transmissions et dans l'imagerie, et les systèmes existants sont complexes et encombrant pour des systèmes ayant de fortes contraintes matérielles. Résumé de l'invention [0004] Il existe un besoin pour un mécanisme de génération de séquences de permutations pseudo-aléatoires amélioré, qui soit simple, compact, facile à réaliser et scalable. [0005] Un mode de réalisation pallie tout ou partie des inconvénients des mécanismes connus de génération de séquences de permutations pseudo-aléatoires. [0006] Un mode de réalisation prévoit une solution adaptée à des circuits basse consommation. [0007] Un mode de réalisation prévoit une solution permettant une génération à la volée de la séquence de permutation. [0008] Un mode de réalisation prévoit un procédé de génération d'une séquence de codes numériques pseudoaléatoires permettant la réalisation d'une permutation d'un 2 B17216 - DD18730 premier ensemble de valeurs en un deuxième ensemble de valeurs à partir de codes numériques représentatifs de positions de valeurs du premier ensemble dans le deuxième ensemble, comportant les étapes suivantes : générer, par itération successives, une chaîne de nombres, dits nombres graines, à partir d'un nombre graine initial pseudo-aléatoire par application d'une première fonction d'un nombre graine au nombre graine suivant ; appliquer une deuxième fonction à chaque nombre graine de la chaîne pour obtenir chaque code de position, la deuxième fonction comportant au moins une permutation suivie d'une fonction bijective. [0009] Selon un mode de réalisation, la première fonction est une fonction de génération itérative d'une permutation, le résultat de chaque itération étant appliqué en entrée de la deuxième fonction. [0010] Selon un mode de réalisation, la première fonction est l'incrémentation d'un compteur de n bits initialisé par un nombre aléatoire. [0011] Selon un mode de réalisation, la première fonction et la deuxième fonction sont confondues en une seule, chaque code de position étant obtenu par application de ladite fonction de permutation suivie de ladite fonction bijective au code de position de rang précédent. [0012] Selon un mode de réalisation, le procédé comporte en outre, à chaque itération, un test du résultat de la permutation appliquée au rang précédent pour détecter la présence de codes ne comportant que des états 0 ou une valeur prédéterminée, de préférence que des états 1. [0013] Selon un mode de réalisation, en présence d'un code ne comportant que états 0, le nombre graine soumis à la permutation de rang courant est la valeur prédéterminée. 3 B17216 - DD18730 [0014] Selon un mode de réalisation, en présence de la valeur prédéterminée, le nombre graine soumis à la permutation de rang courant est la valeur nulle. [0015] Selon un mode de réalisation, un premier code de position est sélectionné aléatoirement. [0016] Selon un mode de réalisation, ladite bijection est un code Gray. [0017] Selon un mode de réalisation, dans lequel chaque code de position est un mot de q bits, où q est égal au logarithme de base 2 du nombre de valeurs contenues dans chaque ensemble. [0018] Selon un mode de réalisation, ladite fonction opère une permutation d'un nombre de bits de poids faible avec le même nombre de bits de poids fort, ce nombre de bits étant : un pour un code de quatre ou quinze bits ; deux pour un code de cinq, huit, neuf ou douze bits ; trois pour un code de six bits ; un ou deux pour un code de sept bits ; quatre ou cinq pour un code de onze bits ; et quatre pour un code de quatorze bits. [0019] Un mode de réalisation prévoit un générateur d'une permutation d'un premier ensemble de valeurs en un deuxième ensemble de valeurs, comportant, pour chaque valeur du deuxième ensemble, un circuit de sélection d'une valeur du premier ensemble en fonction d'un code représentatif d'une sélection effectuée pour la valeur précédente du deuxième ensemble. [0020] Selon un mode de réalisation, le générateur est adapté à la mise en oeuvre du procédé de génération d'une séquence de codes numériques pseudo-aléatoires. 4 B17216 - DD18730 [0021] Selon un mode de réalisation, chaque nombre graine de ladite chaîne de nombres graines est contenue dans un registre. [0022] Selon un mode de réalisation, le générateur comporte pour chaque circuit de sélection, un circuit de génération d'un code de position représentatif de la position de la valeur du premier ensemble à placer à la position courante du deuxième ensemble. [0023] Selon un mode de réalisation, chaque circuit de génération comporte un circuit câblé de permutation d'une partie seulement des bits du nombre soumis à la permutation. [0024] Un mode de réalisation prévoit un circuit de traitement d'image par acquisition compressive, comportant au moins un générateur d'une permutation d'un premier ensemble de valeurs en un deuxième ensemble de valeurs. Brève description des dessins [0025] Ces caractéristiques et avantages, ainsi que d'autres, seront exposés en détail dans la description suivante de modes de réalisation particuliers faite à titre non limitatif en relation avec les figures jointes parmi lesquelles : [0026] [Fig. 1] figure 1 représente, de façon très schématique et sous forme de blocs, un exemple d'architecture de capteur d'image à acquisition compressive auquel s'appliquent, à titre d'exemple, les modes de réalisation décrits ; [0027] [Fig. 2] la figure 2 représente, de façon très schématique, un exemple arbitraire illustrant le fonctionnement d'une permutation ; [0028] [Fig. 3] la figure 3 représente, de façon très schématique et sous forme de blocs, un mode de réalisation d'un circuit de permutation pseudo-aléatoire ; B17216 - DD18730 [0029] [Fig. 4] la figure schématique et sous forme 4 représente, de façon très de blocs, un autre mode de réalisation d'un circuit de permutation pseudo-aléatoire ; [0030] [Fig. 5] la figure 5 représente, de façon très schématique et sous forme de blocs, un mode de réalisation d'un bloc de détection de valeur nulle du circuit de permutation pseudo-aléatoire de la figure 4 ; [0031] [Fig. 6] la figure 6 représente, de façon très schématique et sous forme de blocs, un autre mode de réalisation d'un circuit de permutation pseudo-aléatoire ; [0032] [Fig. 7] la figure 7 représente un exemple de réalisation d'un circuit de commutation commandable pour réaliser des permutations ; [0033] [Fig. 8] la figure 8 est un schéma-bloc illustrant un mode de mise en oeuvre d'un procédé de génération de codes de position pour une permutation, basé sur le mode de réalisation de la figure 3 ; et [0034] [Fig. 9] la figure 9 représente, de façon schématique, un mode de réalisation d'un circuit de génération, à la volée, de codes de permutation pour un vecteur de 256 valeurs, basé sur le mode de réalisation de la figure 4. Description des modes de réalisation [0035] De mêmes éléments ont été désignés par de mêmes références dans les différentes figures. En particulier, les éléments structurels et/ou fonctionnels communs aux différents modes de réalisation peuvent présenter les mêmes références et peuvent disposer de propriétés structurelles, dimensionnelles et matérielles identiques. [0036] Par souci de clarté, seuls les étapes et éléments utiles à la compréhension des modes de réalisation décrits ont été représentés et sont détaillés. En particulier, la génération de la graine aléatoire à partir de laquelle sont 6 B17216 - DD18730 calculés les coefficients de la permutation n'a pas été détaillée et toute graine usuelle peut être utilisée. De plus, bien que l'on fasse plus particulièrement référence à un exemple d'application à l'acquisition d'image, les modes de réalisation décrits s'appliquent plus généralement à toute génération de permutations pseudo-aléatoires. [0037] Sauf précision contraire, lorsque l'on fait référence à deux éléments connectés entre eux, cela signifie directement connectés sans éléments intermédiaires autres que des conducteurs, et lorsque l'on fait référence à deux éléments reliés ou couplés entre eux, cela signifie que ces deux éléments peuvent être connectés ou être reliés ou couplés par l'intermédiaire d'un ou plusieurs autres éléments. [0038] Dans la description qui suit, lorsque l'on fait référence à des qualificatifs de position absolue, tels que les termes "avant", "arrière", "haut", "bas", "gauche", "droite", etc., ou relative, tels que les termes "dessus", "dessous", "supérieur", "inférieur", etc., ou à des qualificatifs d'orientation, tels que les termes "horizontal", "vertical", etc., il est fait référence sauf précision contraire à l'orientation des figures. [0039] Sauf précision contraire, les expressions "environ", "approximativement", "sensiblement", et "de l'ordre de" signifient à 10 f près, de préférence à 5 1 près. [0040] La figure 1 représente, de façon très schématique et sous forme de blocs, un exemple d'architecture de capteur d'image à acquisition compressive auquel s'appliquent, à titre d'exemple, les modes de réalisation décrits. [0041] Les méthodes d'acquisition compressive permettent une acquisition et une compression simultanées de l'image en prévoyant, au lieu de lire et numériser une valeur de sortie représentative d'un niveau d'éclairement reçu par chaque 7 B17216 - DD18730 pixel individuellement, d'effectuer une pluralité de mesures non-cohérentes basées chacune sur un support de mesure comportant plusieurs pixels du capteur, par exemple la totalité des pixels du capteur, ou un sous-ensemble de pixels du capteur. Chaque mesure est une somme pondérée des niveaux de luminosité reçus par les différents pixels d'un support de mesure. Les coefficients de pondération sont générés de façon aléatoire ou pseudo-aléatoire. Ces coefficients peuvent être binaires (0 ou 1), ce qui facilite la mise en oeuvre des opérations de sommation pondérée. Pour obtenir un effet de compression, le nombre total de mesures effectuées sur le capteur est inférieur au nombre total de pixels du capteur. Il est ainsi possible de réduire la durée d'acquisition de l'image et donc la consommation électrique liée à l'acquisition, notamment grâce au fait qu'une quantité moins importante de données est lue et numérisée par le capteur. En outre, les traitements de compression dans le domaine numérique, postérieurs à l'acquisition, peuvent être réduits ou supprimés en raison, par exemple, de la forte entropie des mesures générées par l'acquisition compressive. [0042] L'image d'origine peut être reconstruite à partir de l'image compressée et de la matrice des coefficients de pondération utilisés lors de l'acquisition. Cette reconstruction exploite la parcimonie de l'image d'origine dans une base de décomposition particulière, par exemple dans une base en cosinus discrets ou dans une base d'ondelettes. [0043] Les mesures compressées extraites par une acquisition compressive peuvent par exemple être utilisées directement pour des traitements de classification sans avoir besoin de reconstruire l'image d'origine, comme c'est le cas dans l'architecture présentée en figure 1. [0044] Dans l'exemple de la figure 1, un capteur d'image matriciel, par exemple un capteur CMOS, comporte un réseau 8 B17216 - DD18730 matriciel 12 de pixels 122 identiques. La matrice 12 comprend m (par exemple, 256 ou 512) lignes et n (par exemple 256 ou 512) colonnes. Les modes de réalisation décrits ci-après sont bien entendus compatibles avec des matrices de dimensions différentes. [0045] Les pixels 122 du capteur peuvent être quelconques. Il s'agit, par exemple de pixels actifs, c'est-à-dire que chaque pixel comprend un photodétecteur et un amplificateur de sortie actif à base de transistors MOS. La prévision d'un capteur à pixels actifs présente notamment l'avantage de permettre l'acquisition d'images faiblement bruitées par rapport à un capteur à pixels passifs (c'est-à-dire un capteur dans lequel chaque pixel comprend un photodétecteur mais ne comprend pas son propre amplificateur de sortie). [0046] Dans l'exemple de la figure 1, les lignes sont balayées séquentiellement sous commande d'un registre à décalage 14 (SR). La lecture des informations du capteur est effectuée par colonne, chaque colonne fournissant une tension Vj, avec j allant de 0 (VO) à n-1 (Vn-1). Les tensions Vj sont soumises à une permutation pseudo-aléatoire (PRP). Cette permutation est effectuée par un circuit 2 dont des modes de réalisation seront décrits par la suite. Le circuit 2 fournit n tension Vpj (j allant de 0 à n-1) à un modulateur pseudoaléatoire 16 de type sigma-delta (RMEA) traitant les colonnes en parallèle et qui fournit séquentiellement des valeurs numériques binaires Bj (j allant de 0 à n-1) représentatives des niveaux des différentes colonnes à un processeur de traitement numérique 18 (DSP). [0047] Le circuit 2 comporte un circuit 3 de commutateurs effectuant la permutation des colonnes. La permutation des colonnes de la ligne sélectionnée est effectuée par le circuit 3 sous commande d'un générateur 5 (PRG) d'un nombre pseudoaléatoire et d'un signal de séquencement CK. Le générateur 5 9 B17216 - DD18730 fournit un nombre ou code pseudo-aléatoire WO sur un nombre q de bits qui est fonction du nombre n de colonnes à permuter comme on le verra par la suite. [0048] Le convertisseur 16 exploite également un code pseudo- aléatoire fournit par un générateur 17 (PRG) afin d'affecter un -1 (associé à un 0 logique) ou un 1 (associé à un 1 logique) à chaque information reçue du circuit 3 (c'est-à-dire multiplier par -1 ou par 1 chaque tension Vpj). Le générateur 17 fournit donc un code pseudo-aléatoire de n bits. Le générateur 17 est également séquence par le signal CK. [0049] Les n bits Bj générés par le circuit 16 sont traités par le processeur de traitement numérique 18 qui exploite les informations mesurées. [0050] Une particularité de l'architecture de la figure 1 réside principalement dans le circuit 2 de permutation pseudoaléatoire. [0051] La figure 2 représente, de façon très schématique, un exemple arbitraire illustrant le fonctionnement d'une permutation. [0052] La figure 2(a) représente deux vecteurs V ({VO, V1, V2, V3, V4, V5, V6, V7}) et Vp ({VpO, Vpl, Vp2, Vp3, Vp4, Vp5, Vp6, Vp7}) de huit éléments chacun et illustre, par des flèches, une permutation P souhaitée entre ces deux vecteurs. Chaque flèche illustre, pour chaque élément du vecteur V, dans quel élément du vecteur Vp est transférée la valeur de l'élément du vecteur V. [0053] La réalisation, par des moyens matériels ou logiciels d'une telle permutation peut être basées sur une matrice de permutation donnant la correspondance entre les éléments du vecteur V et ceux du vecteur Vp. [0054] La figure 2(b) illustre le contenu d'une telle matrice de permutation M permettant de coder la permutation P de la B17216 - DD18730 figure 2(a). En d'autres termes, le vecteur Vp peut être obtenu en multipliant le vecteur V par la matrice M (M * V = Vp). On considère arbitrairement que les correspondances entre les éléments sont codées par des états "1". Dans l'exemple de la figure 2(b), les colonnes sont associées au vecteur V et les lignes sont associées au vecteur Vp. Ainsi, la première ligne indique le rang (2) de l'élément du vecteur V dont la valeur doit être placée dans l'élément Vp0 du vecteur Vp, c'est-à-dire la position de l'élément V2 dans l'exemple représenté. La deuxième ligne indique le rang (4) de l'élément du vecteur V dont la valeur doit être placée dans l'élément Vpl, et ainsi de suite. La matrice M est donc une matrice carrée de n colonnes et n lignes (ici, n = 8). [0055] Toutefois, en pratique, le codage de la permutation s'effectue en indiquant, pour chaque élément du vecteur Vp de destination, le rang dans le vecteur V où aller chercher la valeur. [0056] La figure 2(c) illustre un tel principe de codage d'une permutation. La matrice de permutation M de la figure 2(b) peut s'exprimer sous la forme d'un vecteur CPos de codes de position {CPos(0), CPos(1), CPos(7)} dont chaque élément est affecté à un élément du vecteur Vp et contient le rang, dans le vecteur V, de la valeur à placer dans cet élément du vecteur Vp. La taille q des éléments du vecteur CPos dépend de la taille n des vecteurs V et Vp (n = 2'q ou q = Log(n)). [0057] Si le fait de passer à des codes de position réduit la taille des données codant la permutation, le nombre de codes à stocker peut vite devenir important, ce qui engendre des contraintes en termes de taille de mémoire de stockage si plusieurs permutations doivent être au préalable stockées en mémoire. [0058] Selon les modes de réalisation décrits, on prévoit un mécanisme de génération à la volée de séquences pseudo- 11 B17216 - DD18730 aléatoires de codes de position. Cette génération se base sur la génération d'une chaine de nombres, dits nombres graines Wj, à partir d'une graine, ou nombre graine initiale WO par l'application itérative d'une première fonction Fl, puis par l'application d'une deuxième fonction F2 à chaque nombre pour générer les codes de la séquence. [0059] Chaque nombre graine est exprimé avec un nombre de bits identique à celui utilisé pour chaque élément du vecteur CPos, c'est-à-dire sur q bits si CPos(j) est exprimé sur q bits. [0060] La deuxième fonction appliquée à chaque nombre graine comprend au moins une opération de permutation suivie d'une fonction bijective. Ainsi, à partir d'un nombre graine Wj, on obtient un code CPos(j) égale à F2(Wj). [0061] La première fonction Fl appliquée à chaque nombre graine Wj (j variant entre 0 à au plus n-2 ou n-1) permet de définir le nombre graine suivant Wj+l, ainsi Wj+1 = Fl(Wj). Différents exemples de fonction Fl sont décrits plus en détails ci-après. Dans un mode de réalisation, particulièrement compacte, la fonction Fl correspond à la fonction F2, avec Wj = CPos(j-1). [0062] Le nombre graine initiale WO est un nombre pseudo- aléatoire pouvant être obtenu à partir d'un générateur de nombre pseudo-aléatoire, ou tout autre moyen. [0063] Les figures 3 et 4 représentent, de façon très schématique et sous forme de blocs, des modes de réalisation d'un circuit 2 (circuit 3 et générateur 5) permettant de générer une séquence pseudo-aléatoire de codes de position et d'appliquer ces codes à un circuit de commutation pour réaliser une permutation pseudo-aléatoire du vecteur V. Dans cet exemple la génération des codes est directement chaînée et F2=Fl. 12 B17216 - DD18730 [0064] On reprend arbitrairement l'exemple de la figure 1 d'une permutation de n tensions Vi en n tensions Vpj. Toutefois, le circuit 2 décrit en relation avec la figure 2 s'applique plus généralement à la permutation de tout vecteur de valeurs d'entrée, V = IVO, Vi, Vn-11, analogiques ou numériques, en un vecteur de valeurs de sortie Vp = {VPO, Vpj, Vpn-1}. [0065] Le circuit 3 illustré en figures 3 et 4 comporte n ou n-1 étages STj (STO, ST1, ..., STn-1) de structure identique. Chaque étage comporte un circuit de commutation 22j (220, 221, ..., 22j, ..., 22n-1) ou Cj (CO, Cl, Cn-1) ayant pour rôle de sélectionner une (et une seule) des n valeurs VO, Vi, Vn-1 du vecteur V à affecter à la valeur Vpj, en fonction d'un code de position CPos(j) (CPos(0), CPos(1), CPos(n-1)). Chaque code de position CPos(j) est un mot de q bits identifiant la position (le rang i) de la valeur Vi dans le vecteur V à sélectionner pour être fournie comme valeur Vpj. Le nombre q de bits des nombres CPos(j) dépend du nombre n de valeurs à permuter. Plus particulièrement q est tel que n = 2'11 (2 puissance n) , ou q = Log2(n). [0066] L'ensemble ou vecteur CPos de codes de position {CPos(0), CPos(1), CPos(n-1)} est tel que chaque circuit de commutation 22j ne sélectionne qu'une valeur Vi et que chaque valeur Vi n'est sélectionnée qu'une seule fois parmi les n circuits 22j. Les n circuits de commutation 22j réalisent la permutation proprement dite. Chaque circuit 22j réalise un changement de position d'une valeur du vecteur V. [0067] La génération des n codes de position CPos(j) doit donc être telle que chaque valeur Vj ne se retrouve qu'une seule fois dans le vecteur de sortie {Vp0, Vpl, Vpj, Vpn-1}. De plus, la permutation réalisée à partir de ces n codes est bijective. 13 B17216 - DD18730 [0068] Selon les modes de réalisation des figures 3 et 4, chaque code CPos(j) sur q bits est généré par l'application d'une fonction PERM (blocs 24j) au code CPos(j-1) de rang précédent suivi d'une fonction bijective BIJ (blocs 26j), par exemple un codage Gray. Le premier mot CPos(0) est par exemple, comme cela est représenté en figure 3, généré à partir du mot WO aléatoire fourni par le générateur pseudo-aléatoire 5. [0069] Dans la réalisation de la figure 3, et en particulier en cas d'utilisation d'un codage Gray pour la fonction bijective, la génération du nombre {0} (tous les bits à 0) par le tirage aléatoire PRG va engendrer que des codes identiques {0} dans la séquence. En effet, l'application d'un codage Gray au nombre (0} fournit le même nombre tout à O. Par conséquent, dans le cas d'un code Gray, tous les codes de positions générés à la suite de l'apparition du nombre (0} vaudront {O}. [0070] Ainsi, dans le mode de réalisation de la figure 3, avec une fonction bijective correspondant à un code de Gray, le code {0} est un code interdit et le générateur 5 utilisé doit être tel qu'il ne fournit pas de code {0}. Ainsi, dans cet exemple il est possible de générer uniquement n-1 valeurs de codes différentes. Ainsi, pour réaliser la transformation du vecteur V en VP, tous deux composées de n signaux, on réalise un câblage fixe d'un des bits, Vn-1 étant dans cet exemple relié directement à Vpn-1. Autrement dit, les n-1 premières valeurs du vecteur V subissent une permutation pseudo-aléatoire et la dernière valeur Vn-1 est toujours recopiée sur Vpn-l. En outre, contrairement au circuit de la figure 4, le circuit de la figure 3 comprend un bloc ST de moins (ici le bloc STn-1). [0071] Pour éviter cette situation, et pouvoir obtenir n codes de position pseudo-aléatoires (et non pas n-1), on va chercher à utiliser le code {O}, Il faut néanmoins ajouter un 14 B17216 - DD18730 dispositif au circuit pour éviter que ce code {0} ne se propage. [0072] La figure 4 représente une variante du mode de réalisation de la figure 3, dans lequel la séquence de permutations générée inclut le nombre {0} et permet donc de générer n permutations. On utilise pour cela des circuits 28 pour détecter au moins le nombre {0} et le remplacer par un autre nombre. Dans l'exemple de la figure 4, on considère que chaque circuit 28j est en amont de la permutation 24j du même étage. Un autre exemple sera décrit ultérieurement en relation avec la figure 9 dans lequel chaque circuit 28j est en aval de la fonction bijective 26j du même étage. Cela ne change rien au fonctionnement comme on le verra en relation avec la figure 9. [0073] Selon ce mode de réalisation, la fonction de permutation 24j ne reçoit pas directement le résultat de la fonction bijective 26j-1 de l'étage précédent (donc le code CPos(j-1)), mais la sortie d'une fonction (bloc 28j) de détection (D) au moins du nombre {0} et de sélection entre le résultat des fonctions bijectives 26j-1 et 26j-2 des deux étages précédents. Le bloc 280 (D') de l'étage STO est différent des autres blocs 28j et reçoit le mot WO et une valeur déterminée arbitrairement et comportant au moins un bit à l'état 1, par exemple le mot {1} composé que d'états 1. Le bloc 281 de l'étage ST1 reçoit la sortie de la fonction bijective 260 et l'entrée du bloc 280, donc le mot WO. [0074] Le rôle de chaque bloc 28j est de détecter la présence du nombre {0} en sortie de la fonction bijective 26j-1 de l'étage précédent STj-1 (ou généré par le générateur 5 pour l'étage STO) afin de le remplacer pour la génération du code CPos(j) courant, par le nombre de l'étage encore précédent STj-2. Ainsi, le nombre {0} est bien utilisé comme code de B17216 - DD18730 position pour l'étage STj-1, mais n'est pas chaînée afin de ne pas arrêter la séquence. [0075] Par ailleurs, afin de garantir que le nombre {0} soit bien présent dans la séquence générée, chaque bloc 28j détecte en outre la présence d'une valeur prédéterminée non nulle, par exemple la valeur {1} (tous les bits à 1), en sortie de l'étage précédent STj-1, afin de le remplacer pour la génération du code CPos(j) courant, par le nombre {0}. Ainsi, le code CPos(j) prend la valeur {0} (la permutation 24 et le code Gray 26 appliqués à un mot tout à 0 donne le même mot). Toutefois, comme le code CPos(j) est {0}, le nombre sélectionné par le bloc 26j+1 de l'étage suivant STj+l sera le nombre prédéterminé (dans cet exemple, 1) de l'étage STj-1. Ainsi, on a intercalé la valeur tout à 0 dans la séquence et on permet l'obtention d'une séquence de n valeurs. [0076] La figure 5 représente un mode de réalisation d'un bloc de détection et de sélection 28j (pour j compris entre 1 et n-1). [0077] Le bloc 28j reçoit, en entrées, les sorties des blocs 24j-1, 26j-1 et 26j-2 et fournit en sortie le nombre à appliquer au bloc 24j. [0078] Chaque bloc 28 comporte deux portes logiques 982 et 984 respectivement destinées à détecter la présence du mot prédéterminé (dans cet exemple le mot {1}) et du mot {0} en sortie du bloc 24j-1. La porte 982 est une porte ET (AND) combinant les q bits du mot fourni par le bloc 24j-1. La porte 984 est une porte ET (AND) combinant l'inverse (inverseur 985) des q bits du mot fourni par le bloc 24j-1. [0079] La sortie de la porte 982 est combinée, par des portes NON-OU 986, avec l'inverse (inverseurs 987) de chacun des bits du mot CPos(j-1) fourni par le bloc 26j-1. Ainsi, si le bit de sortie de la porte 982 est 0, la sortie de chaque porte 16 B17216 - DD18730 986 fournit le bit correspondant du mot CPos(j-1). L'ensemble des portes 986 fournit donc le mot CPos(j-1). Si le bit de sortie de la porte 982 est 1 (c'est-à-dire que l'on est en présence du mot {1}), toutes les portes 986 fournissent un état O. L'ensemble des portes 986 fournit donc le mot {O}, [0080] La sortie de chaque porte 986 est envoyée en entrée d'un multiplexeur deux vers un 988, ou sélecteur, dont l'autre entrée reçoit le bit de rang correspondant du mot CPos(j-2) issu du bloc 26j-2 (ou le mot WO pour le bloc 281). Les sorties des multiplexeurs 988 forment le mot de sortie du bloc 28j appliqué en entrée de la permutation 24j. Tous les multiplexeurs 988 sont commandés par la sortie de la porte 984 et sélectionnent leur première entrée en présence d'un état 0 en sortie de la porte 984. Ainsi, en présence du mot {0} en sortie du bloc 24]-1 (sortie de la porte 984 à l'état 1), le mot fourni en sortie du bloc 28j est le code CPos(]-2). En l'absence du mot {0} en sortie du bloc 24]-1 (sortie de la porte 984 à l'état O) le mot fourni en sortie du bloc 28j est le mot fourni par les portes 986, donc soit le code CPos(]-1), soit le mot {0} selon que l'on est en présence ou non du mot à l'étage ST]-1. [0081] En variante, certaines entrées de la porte 982 sont inversées pour définir une valeur prédéterminée différente du mot {1}. [0082] Pour le premier bloc 280 (D'), la partie de détection du mot {1} est omise. En d'autres termes, seuls la porte 984 (et l'inverseur 985) et les multiplexeurs 988 sont présents. Les premières entrées des multiplexeurs reçoivent les bits du mot WO et les deuxièmes entrées des multiplexeurs des états 1. Le détecteur 984-985) reçoit le mot WO. Ainsi, si le mot WO vaut 0, le bloc 280 fournit le mot {1}. Dans le cas contraire, il fournit le mot WO. 17 B17216 - DD18730 [0083] Le mode de réalisation de la figure 5 n'est qu'un exemple et on pourra utiliser tout autre circuit remplissant la même fonction. [0084] La figure 6 représente un autre mode de réalisation dans lequel les fonctions de permutation PERM et de bijection BIJ d'un étage courant STj ne sont pas appliquées au code de position précédent CPos(j-1). Selon ce mode de réalisation, le mot WO est appliqué à une fonction f (bloc 30j) de génération itérative d'une permutation (correspondant à la fonction Fl susmentionnée). Le résultat de chaque itération de la fonction f est appliqué en entrée de la permutation 24j de rang correspondant. La fonction f est, par exemple, l'incrémentation d'un compteur de n bits initialisé par le nombre aléatoire WO. [0085] Ainsi, la structure des circuits 3 est, quel que soit le mode de réalisation (figure 3, 4 ou 6), une structure dans laquelle les étages STj sont en quelque sorte chaînés, chaque étage STj étant lié à l'étage précédent STj-1 par le code de position CPos(j-1) ou par le nombre ayant servi à générer le code de position de cet étage précédent. [0086] Un avantage d'une telle structure est qu'elle permet une génération des codes de position (donc de la matrice de permutation) à la volée. [0087] Un avantage induit, par rapport à des réalisations usuelles, est qu'il n'est donc pas nécessaire de stocker la matrice de permutation, ce qui représente une économie en termes d'encombrement et de consommation. [0088] Un autre avantage est la simplicité des opérations réalisées pour la génération des codes de position. En particulier, la structure proposée est compatible avec la réalisation de la fonction PERM par câblage et portes logiques. 18 B17216 - DD18730 [0089] La figure 7 représente un exemple de réalisation d'un circuit de commutation commandable 22j de changement de position d'un élément du vecteur V. [0090] Un tel circuit comporte n commutateurs Ki (KO, Kl, Kn-1). Chaque commutateur Kj relie l'entrée du circuit 3 recevant la valeur Vj (VO, V1, Vn-1) à la sortie du circuit 22j fournissant la valeur VPj. Chaque commutateur Kj est commandé par un bit aj (a0, al, ..., an-1) extrait, par un décodeur 724 (DEC) du code CPos(j) de rang j. Le rôle du décodeur 724 est d'interpréter le code CPos(j) dont la valeur est égale au rang i du commutateur Ki à fermer pour réaliser la permutation. [0091] La figure 8 est un schéma-bloc illustrant un mode de mise en oeuvre d'un procédé de génération des codes CPos(j) de position pour une permutation d'après le mode de réalisation de la figure 3. [0092] On commence par générer un nombre pseudo-aléatoire WO sur q bits (bloc 31, PRNG) [0093] On effectue ensuite un traitement en boucle sur toutes les valeurs j de 0 à n-1. Pour cela, on initialise un compteur j (bloc 33, j = 0). Tant que toutes les valeurs de j n'ont pas été traitées (sortie Y d'un bloc 35, j = n ?), on applique (bloc 37, PERM(CPos(j-1)) + BIJ) une permutation prédéfinie PERM des bits du mot pseudo-aléatoire de rang précédent CPos(j-1), suivie d'une fonction bijective BIJ (par exemple un codage Gray), afin d'obtenir le code de position CPos(j). [0094] A chaque itération, on génère de cette façon le code de position suivant CPos(j). Cette opération est répétée (incrémentation du rang j, bloc 39, j=j+1) tant qu'il reste des valeurs j à traiter. Une fois que tous les codes de position ont été traités (sortie Y du bloc 35), le procédé s'arrête (bloc 40, END) pour cette permutation. 19 B17216 - DD18730 [0095] La figure 9 représente, de façon schématique, un mode de réalisation d'un circuit de génération, à la volée, des codes de permutation CPos(j) de valeurs de 256 colonnes. [0096] La représentation de la figure 9 illustre un exemple de contenus de registres Rj contenant les mots représentatifs des codes de position CPos(j). En d'autres termes, le contenu de chaque registre Rj identifie le rang i de la valeur Vi à fournir en tant que valeur VPj. [0097] La figure 9 illustre, par rapport à la figure 4, une variante selon laquelle on considère que le bloc 28 de détection et de sélection de rang j est en sortie de l'étage correspondant, plutôt qu'en entrée. Cela ne modifie en rien le principe de fonctionnement. De plus, en figure 9, l'indice j va de 1 à n (au lieu de 0 à n-1 en figure 4). Dans l'exemple de la figure 9, on suppose que les n étages (1 à n) sont structurellement identiques mais on utilise un bloc D' en amont de l'étage ST1. Dans le mode de réalisation de la figure 4, l'étage STO est différent en ce qu'il contient le bloc D', mais on économise un bloc D dans l'étage n, inutilisé dans le mode de réalisation de la figure 9. [0098] En figure 9, on note Gj le résultat de l'application du code Gray (bloc 26) au résultat, noté PERMj, de la permutation (bloc 24) appliquée en sortie du bloc 28 de l'étage de rang précédent. Pour simplifier, seule une permutation 24 a été représentée. [0099] La figure 9 illustre également un mode de réalisation des bloc D' et D correspondant à la réalisation de la figure 5. [0100] Dans l'exemple de la figure 9, on suppose une permutation entre 256 valeurs (n = 256) et les mots CPos(j) sont donc sur 8 bits (q = 8). Les bits des codes CPos(j) sont notés a(k, j), où k (compris entre 0 et q) désigne le rang du B17216 - DD18730 bit du code CPos(j) et où j désigne le rang de la valeur Vpj du vecteur de sortie {Vpl, Vpj, Vpn}. La notation a(k, j) est notée en figure 9 : [0101] [Math 1] [0102] al [0103] Le mot WO fourni par le générateur 5 (PRG) est soumis au bloc D'. [0104] Ainsi, le mot fourni par le bloc D' et contenu dans le registre RO est : [0105] [Math 2] [0106] { a?, a?, a?, a?, a40, a50, a50, a?} . [0107] L'opération 24 (PERM) appliquée à un mot de rang pour obtenir le mot de rang j+1 consiste à permuter les deux bits de poids fort avec les deux bits de poids faible. [0108] Ainsi, appliqué au contenu du registre RO, on obtient : [0109] [Math 3] [0110] {a?, a?, a?, a?, a?, a50, a?, a?}. [0111] à l'issue de l'étape 24. [0112] Plus généralement, le mot CPos(j) en sortie de permutation de rang j appliqué à la fonction bijective représente le résultat de l'application de la fonction D de rang j-1 et est noté : [0113] [Math 3] [0114]tal -1 a6 j-1 az j-1 a3 J-1 , , J-1 1-1 1-1 1-1 - , as , , ao 7 [0115] L'étape 26 consiste à appliquer une bijection aux bits issus de la permutation PERM pour obtenir le mot CPos(j). Cette opération est, par exemple, l'application d'un code Gray, effectuée par un circuit logique à base de portes 54k 21 B17216 - DD18730 (541, 542, 543, 544, 545, 546, 547) de type OU-Exclusif (avec k allant de 2 à q). Chaque porte 54k combine deux à deux les bits successifs du mot intermédiaire issus de l'étape 24 pour fournir le bit a(k, j), le bit a(0, j) étant simplement le résultat de l'étape 24, soit le contenu du bit a(7, j-1). [0116] Ainsi, les bit a(k, j) du mot CPos(j) valent respectivement : a(0, j) = a(7, j-1), a(1, j) = le résultat de la combinaison OU-Exclusif du bit a(7, j-1) avec le bit a(6, j-1), a(2, j) = le résultat de la combinaison OU-Exclusif du bit a(6, j-1) avec le bit a(2, j-1), a(3, j) = le résultat de la combinaison OU-Exclusif du bit a(2, j-1) avec le bit a(3, j-1), a(4, j) = le résultat de la combinaison OU-Exclusif du bit a(3, j-1) avec le bit a(4, j-1), a(5, j) = le résultat de la combinaison OU-Exclusif du bit a(4, j-1) avec le bit a(5, j-1), a(6, j) = le résultat de la combinaison OU-Exclusif du bit a(5, j-1) avec le bit a(1, j-1), et a(1, j) = le résultat de la combinaison OU-Exclusif du bit a(1, j-1) avec le bit a(0, j-1). [0117] La fonction de permutation 24 illustrée par la figure 9 peut être modifiée selon diverses variantes pourvu de respecter la condition que chaque mot CPos(j) identifie la position d'un état 1 dans une matrice de commutation 22j ou de permutation, et que cette position n'est présente qu'une seule fois parmi les n codes CPos(j). [0118] Un avantage du mécanisme de génération de permutations pseudo-aléatoires décrit est qu'il est compatible avec une réalisation matérielle avec des connexions de sorties d'un registre à l'entrée d'un autre registre et des portes logiques. 22 B17216 - DD18730 [0119] Un autre avantage est que la cellule matérielle de réalisation de la permutation d'un rang est la même pour tous les rangs. Ainsi, dans des applications compatibles avec une génération au fur et à mesure des codes de position, le circuit de permutation peut ne comprendre qu'une seule cellule matérielle réutilisée en boucle. [0120] Un avantage des modes de réalisation décrits est que la permutation est particulièrement simple à réaliser de façon matérielle par des circuits en logique câblée. Une telle réalisation est compatible avec des besoins de rapidité de génération des permutations lorsque celles-ci sont générées à la volée. [0121] Le nombre de bits permutés, c'est-à-dire soumis à l'inversion de position de l'étape 24 dépend de la taille q des mots CPos(j), donc de la taille n des vecteurs de valeurs. Ce nombre doit être respecté afin de préserver la faisabilité d'une génération chaînée des codes de position et garantir une permutation des valeurs V en Vp. [0122] Le tableau ci-dessous résume le nombre de bits (colonnes du tableau 1) de poids faible pouvant être permutés de position à l'étape 24 avec des bits de poids fort du mot, en fonction du nombre q de bits (lignes du tableau 1). Ce tableau a été établi empiriquement. Pour certaines valeurs de q, plusieurs nombres de bits peuvent être permutés. [0123] [Tableaux 1] 1 2 3 4 5 6 7 4 X 5 X 6 X 7 X X 23 B17216 - DD18730 8 9 10 11 X X 12 13 14 X 15 X 16 X [0124] D'autres types de permutations sont envisageables en permutant d'autres bits que les bits de poids fort avec des bits de poids faible, en respectant le critère d'une permutation, à savoir que toutes les valeurs du vecteur d'entrée sont présentes dans le vecteur de sortie. [0125] Un mécanisme de permutation pseudo-aléatoire tels que décrit ci-dessus a de multiples applications. [0126] On peut l'utiliser non seulement dans des applications de traitement d'images, mais également dans des applications cryptographiques, de permutation dans le domaine temporel et, plus généralement, pour toute application où l'on souhaite générer à la volée des permutations pseudo-aléatoires d'un vecteur en un autre vecteur de même taille de façon simple, peu gourmande en surface et en énergie. [0127] Divers modes de réalisation et variantes ont été décrits. L'homme de l'art comprendra que certaines caractéristiques de ces divers modes de réalisation et variantes pourraient être combinées, et d'autres variantes apparaitront à l'homme de l'art. En particulier, le choix de 24 B17216 - DD18730 l'opération de bijection pourra varier. De plus, la première valeur de code de position pourrait ne pas être aléatoire mais être choisie. Cela ne modifie pas le principe de chaînage des codes de position à partir d'une première valeur pour réaliser une permutation, les conditions exposées (nombre de bits de poids forts et faibles permutés) en fonction de la taille des codes restent valables pour garantir une permutation. [0128] Enfin, la mise en oeuvre pratique des modes de réalisation et variantes décrits est à la portée de l'homme REVENDICATIONS1. Procédé de génération d'une séquence de codes numériques pseudo-aléatoires permettant la réalisation d'une permutation (3) d'un premier ensemble de valeurs (V) en un deuxième ensemble de valeurs (Vp) à partir de codes numériques (CPos) représentatifs de positions (j) de valeurs (Vi) du premier ensemble dans le deuxième ensemble, comportant les étapes suivantes : générer, par itération successives, une chaîne de nombres, dits nombres graines, à partir d'un nombre graine initial pseudo-aléatoire (WO) par application d'une première fonction (f ; 24, 26 ; 28, 24, 26) d'un nombre graine au nombre graine suivant ; appliquer une deuxième fonction à chaque nombre graine de la chaîne pour obtenir chaque code de position (CPos(j)), la deuxième fonction comportant au moins une permutation (PERM) suivie d'une fonction bijective (BIJ). 2. Procédé selon la revendication 1, dans lequel la première fonction est une fonction (f) de génération itérative d'une permutation, le résultat de chaque itération étant appliqué en entrée de la deuxième fonction (24, 26). 3. Procédé selon la revendication 2, dans lequel la première fonction (f) est l'incrémentation d'un compteur de n bits initialisé par un nombre aléatoire (W0). 4. Procédé selon la revendication 1 dans lequel la première fonction et la deuxième fonction sont confondues en une seule, chaque code de position (CPos(j)) étant obtenu par application de ladite permutation suivie de ladite fonction bijective au code de position de rang précédent. 26 B17216 - DD18730 5. Procédé selon la revendication 4, comportant en outre, à chaque itération, un test du résultat de la permutation appliquée au rang précédent pour détecter la présence de codes ne comportant que des états 0 ou une valeur prédéterminée, de préférence que des états 1. 6. Procédé selon la revendication 5, dans lequel, en présence d'un code ne comportant que états 0, le nombre graine soumis à la permutation de rang courant (j) est la valeur prédéterminée. 7. Procédé selon la revendication 5 ou 6, dans lequel, en présence de la valeur prédéterminée, le nombre graine soumis à la permutation de rang courant (j) est la valeur nulle. 8. Procédé selon la revendication 4, dans lequel un premier code de position (WO, CPos(0)) est sélectionné aléatoirement. 9. Procédé selon l'une quelconque des revendications 1 à 8, dans lequel ladite bijection est un code Gray. 10. Procédé selon l'une quelconque des revendications 1 à 9 dans lequel chaque code de position (CPos(j)) est un mot de q bits, où q est égal au logarithme de base 2 du nombre (n) de valeurs contenues dans chaque ensemble (V, Vp). 11. Procédé selon l'une quelconque des revendication 1 à 10, dans lequel ladite permutation (PERM) opère une permutation d'un nombre de bits de poids faible avec le même nombre de bits de poids fort, ce nombre de bits étant : un pour un code (CPos) de quatre ou quinze bits ; deux pour un code (CPos) de cinq, huit, neuf ou douze bits ; trois pour un code (CPos) de six bits ; 27 B17216 - DD18730 un ou deux pour un code (CPos) de sept bits ; quatre ou cinq pour un code (CPos) de onze bits ; et quatre pour un code (CPos) de quatorze bits. 12. Générateur d'une permutation d'un premier ensemble de valeurs (V) en un deuxième ensemble de valeurs (Vp), comportant, pour chaque valeur (Vpj) du deuxième ensemble, un circuit (22j) de sélection d'une valeur (Vi) du premier ensemble en fonction d'un code (CPos(j-1)) représentatif d'une sélection effectuée pour la valeur précédente (Vpj-1) du deuxième ensemble. 13. Générateur selon la revendication 12, pour la mise en oeuvre du procédé selon l'une quelconque des revendications 1 à 11. 14. Générateur selon la revendication 13, dans lequel chaque nombre graine de ladite chaîne de nombres graines est contenue dans un registre. 15. Générateur selon l'une quelconque des revendications 12 à 14, comportant, pour chaque circuit de sélection (22j), un circuit de génération d'un code de position (CPos(j)) représentatif de la position de la valeur (V(i)) du premier ensemble à placer à la position courante du deuxième ensemble. 16. Générateur selon la revendication 15, dans lequel chaque circuit de génération comporte un circuit câblé de permutation d'une partie seulement des bits du nombre soumis à la permutation. 17. Circuit de traitement d'image par acquisition compressive, comportant au moins un générateur selon l'une quelconque des revendications 12 à 16.