FR 3007232 A1 20141219 FR 1355645 A 20130617 00 72 3 2 Domaine de l'invention [0001] La présente invention porte de manière générale sur la détection et/ou la correction automatique d'erreurs dans un flux de données multiplexées, c'est-à-dire une séquence d'échantillons de données appartenant à une pluralité de canaux entrelacés. Problème technique [0002] Dans un flux de données contenant des échantillons de données appartenant à des canaux entrelacés de manière cyclique, tout échantillon de données supplémentaire qui peut être introduit dans le flux de données perturbe la périodicité de l'entrelacement. [0003] Dans la suite, le nombre de canaux entrelacés sera appelé Ni,. Une séquence de Nc échantillons de données dans le flux de données sera appelée une trame. Dans l'idéal, chaque canal se voit ainsi attribuer le même intervalle à l'intérieur de chaque trame, faisant du démultiplexage ou du désentrelacement une tâche relativement aisée. Des échantillons de données supplémentaires, quelle que soit leur source, résultent non seulement en valeurs aberrantes (appelées "glitchs") dans le flux de données mais également en permutations cycliques des canaux en aval des échantillons de données supplémentaires, c'est-à-dire une discordance ou un décalage des échantillons de données qui suivent les échantillons de données supplémentaires par rapport aux intervalles dans lesquels ils devraient en fait se trouver. [0004] Un objet de la présente invention est de fournir un procédé de détection automatique ou détection et de correction (suppression) de tels échantillons de données supplémentaires. Description générale de l'invention [0005] Un procédé de détection et/ou de correction automatique d'erreurs dans un flux de données multiplexées est proposé. Le procédé comprend l'obtention (par exemple par l'intermédiaire d'un canal de communication physique ou à partir d'une mémoire) d'un flux de données multiplexées 30 contenant des échantillons de données, le flux de données comprenant une 1 pluralité de canaux de données entrelacés organisés de manière cyclique en trames, chaque canal de données possédant un intervalle attribué à l'intérieur de chaque trame, dans lequel intervalle se trouve un échantillon de données appartenant vraisemblablement au canal. Les échantillons de données transportés par le flux de données comprennent des échantillons de données ordinaires (chacun d'eux pouvant être attribué à l'un des canaux entrelacés) et des échantillons de données supplémentaires (glitchs qui ne peuvent pas être attribués à l'un quelconque des canaux entrelacés), ce qui provoque un décalage des échantillons de données ordinaires subséquents par rapport aux intervalles. Selon la présente invention, les échantillons de données supplémentaires sont identifiés par l'exécution d'un algorithme de Viterbi. En tant qu'états (dits "cachés"), associés à chaque échantillon de données, l'algorithme de Viterbi utilise les décalages possibles (c'est-à-dire un décalage d'un intervalle, deux intervalles, etc.) provoqués par des échantillons de données supplémentaires reçus jusqu'à l'échantillon de données associé. Des transitions autorisées entre états comprennent une première transition (c'est-à-dire une transition d'un premier type), représentant une réception d'un échantillon de données ordinaire et, par conséquent, une constance de décalage, et une deuxième transition (c'est-à-dire une transition d'un deuxième type), représentant une réception d'un échantillon de données supplémentaire et, par conséquent, un accroissement de décalage d'une unité (un intervalle). [0006] Comme on pourra l'observer, le procédé de détection et/ou de suppression de glitchs exploite précisément la nature séquentielle du mécanisme de corruption (permutation cyclique des canaux de données à l'intérieur des trames, c'est-à-dire discordance entre les canaux de données et leurs intervalles attribués respectivement du fait de la présence de glitchs) afin de récupérer les échantillons de données ordinaires qui sont effectivement présents dans le flux de données corrompu et restaurer l'ordre de canaux correct. Des modes de réalisation des procédés se sont avérés très efficaces dans des expériences de simulation, dans lesquelles des flux de données initiaux étaient artificiellement corrompus : 99,1% à 99,9% des données corrigées correspondaient précisément aux données initiales non corrompues. Un avantage intéressant du procédé est qu'il n'exige aucune interpolation ou extrapolation de données et par conséquent qu'il ne modifie pas le contenu informatif du flux de données. Cet aspect peut être particulièrement utile dans la correction de mesures scientifiques. [0007] De préférence, le procédé comprend une étape dans laquelle un flux de données multiplexées corrigé, qui diffère du flux de données multiplexées en ce qu'il ne contient pas les échantillons de données supplémentaires identifiés, est produit (et, par exemple, affiché et/ou conservé en mémoire dans une mémoire informatique). [0008] Il est inhérent à l'algorithme de Viterbi que chaque transition autorisée possède un poids (ou longueur ou coût) associé à celle-ci. Selon un mode de réalisation préféré du procédé selon la présente invention, le poids associé à une première transition (correspondant à l'hypothèse : "échantillon de données ordinaire reçu") d'un premier état vers un deuxième état est défini de façon à dépendre de la différence entre l'échantillon de données associé au deuxième état et un échantillon de données prédécesseur direct présumé dans le même canal de données que l'échantillon de données associé au deuxième état. De plus, le poids associé à une deuxième transition (correspondant à l'hypothèse "échantillon de données supplémentaire reçu") d'un premier état vers un deuxième état dépend de la différence entre un ou plusieurs des échantillons de données subséquents à l'échantillon de données associé au deuxième état et un échantillon de données prédécesseur direct présumé dans le même canal de données que les un ou plusieurs échantillons de données subséquents. Plus la différence est élevée, plus fort sera également le poids de la transition correspondante. Ce mode de réalisation du procédé exploite ainsi le fait que les dérivées locales de données provenant du même canal de données sont faibles, tandis que des dérivées inter-locales de données entre deux canaux de données distincts sont comparativement élevées. En conséquence, en l'absence de glitch, une transition du premier type obtiendra un poids faible tandis qu'une transition du deuxième type obtiendra un poids plus fort. De manière similaire, en présence d'un glitch, une transition du premier type obtiendra un poids fort tandis qu'une transition du deuxième type obtiendra un poids plus faible. [0009] L'exécution de l'algorithme de Viterbi comprend la construction d'une pluralité de chemins au travers des états, chaque chemin de la pluralité de chemins correspondant à une séquence spécifique de transitions des premier et deuxième types, chaque chemin de la pluralité de chemins possédant associé à celui-ci un poids cumulé (ou longueur ou coût) correspondant à la somme des poids associés aux première et deuxième transitions constituant le chemin, et la recherche d'un chemin de poids minimal parmi la pluralité de chemins. Puisque l'on est intéressé par la recherche du chemin possédant le poids cumulé le plus faible, à chaque croisement de deux chemins, le chemin avec le poids cumulé le plus fort est rejeté. Chaque chemin de la pluralité de chemins possède de préférence associé à celui-ci une séquence d'échantillons de données présumés ordinaires. Le flux corrigé de données multiplexées correspond alors à la séquence d'échantillons de données associée au chemin de poids minimal trouvé. [0010] Selon un mode de réalisation préféré du procédé selon l'invention, avant l'exécution de l'algorithme de Viterbi, des trames susceptibles de contenir au moins un échantillon de données supplémentaire sont identifiées. Les poids associés aux première et deuxième transitions d'un premier état vers un deuxième état peuvent dans ce cas être modifiés (re-pondérés) selon que l'échantillon de données associé au deuxième état appartient à une trame identifiée comme étant susceptible de contenir au moins un échantillon de données supplémentaire. [0011] Un aspect préféré de la présente invention porte sur un programme informatique comprenant des instructions pouvant être mises en oeuvre par un processeur, qui, lorsqu'elles sont exécutées par un processeur, amènent le processeur à exécuter un procédé tel que celui décrit ici. Un autre aspect préféré de la présente invention concerne un dispositif informatique comprenant un processeur et une mémoire de préférence non volatile contenant en mémoire des instructions pouvant être mises en oeuvre par un processeur, qui, 30072 32 5 lorsqu'elles sont exécutées par le processeur, amènent le processeur à exécuter un procédé tel que celui décrit ici. Description succincte des schémas [0012] Des modes de réalisation préférés de la présente invention sont 5 décrits ci-après, à titre d'exemple, en faisant référence aux schémas annexés dans lesquels : La Figure 1 est une illustration schématique d'un flux de données multiplexées contenant un échantillon de données supplémentaire qui amène des échantillons subséquents à être décalés par rapport à leurs intervalles attribués, 10 Les Figures 2 à 4 sont des illustrations schématiques de la construction d'un treillis au moyen de l'algorithme de Viterbi dans un procédé selon un mode de réalisation préféré de la présente invention, La Figure 5 illustre la performance du procédé selon la présente invention. Description de modes de réalisation préférés 15 1. Introduction à MADRAS [0013] Dans la suite, des modes de réalisation préférés de la présente invention seront illustrés par l'exemple de la détection et de la correction de glitchs dans des données provenant de MADRAS, qui est un imageur hyperfréquence embarqué sur le satellite MEGHA-TROPIQUES. Il convient de 20 noter, cependant, que le procédé selon la présente invention peut faire l'objet d'autres applications. [0014] Les données scientifiques acquises par MADRAS se composent de plusieurs centaines d'acquisitions (ou balayages) enregistrés dans N, = 11 canaux. Un ensemble de balayages contigus compose une image multicanal. 25 Un balayage donné de 11 canaux résulte du réordonnancement d'un flux de données unique. Chaque cycle de Nlc échantillons de données correspond à un pixel de l'image et est appelé une trame. Le flux de données contient ainsi une séquence cyclique de 11°NF mesures qui sont séquentiellement et périodiquement attribuées aux 11 canaux, où NF est le nombre de trames. Du fait d'un dysfonctionnement dans la chaîne de communication entre deux dispositifs électroniques, ce flux de données est corrompu. [0015] Le mécanisme de corruption le plus fréquent est tel que des échantillons de données additionnels (glitchs) sont concaténés aux mesures du fait de l'occurrence de signaux à impulsion parasites (dans le contexte de MADRAS, cette anomalie est appelée "anomalie de type 1"). En conséquence, les données collectées contiennent la plus large part des mesures scientifiques, mais les insertions de données multiples et aléatoires résultent en - la présence d'échantillons de données supplémentaires (les glitchs) dans le 10 flux de données, - des permutations cycliques des canaux après recombinaison du flux de données du fait de ces données supplémentaires. [0016] Une vue schématique du phénomène est illustré à la Figure 1, où, à des fins de concision, seulement quatre canaux ont été considérés (c'est-à-dire 15 Nc = 4 à la Figure 1) et le flux de données 10 est divisé en trois trames successives 12. Chaque canal de données possède son intervalle attribué à l'intérieur de chaque trame. À la Figure 1, les nombres 1 à 4 désignent les échantillons de données appartenant aux différents canaux de données. Lorsqu'un glitch (appelé G) apparaît dans l'intervalle temporel réservé pour le 20 canal 3, cet intervalle reçoit alors une valeur aberrante (qui ne peut pas être attribuée à l'un quelconque des canaux de données), l'intervalle subséquent réservé pour le canal 2 reçoit l'échantillon de données appartenant au canal 3, l'intervalle réservé suivant pour le canal 1 reçoit l'échantillon de données appartenant au canal 2, et le décalage (discordance entre canaux et intervalles) 25 est propagé vers la trame suivante. [0017] L'algorithme décrit ci-dessous est conçu de façon à détecter et supprimer ces glitchs pour chaque balayage individuellement. Une fois que tous les glitchs ont été supprimés d'un balayage, les données contiennent uniquement les mesures qui sont récupérables, chaque échantillon de données 30 étant situé dans son intervalle dédié sur l'ensemble des trames. Les données corrigées sont en conséquence scientifiquement exploitables. [0018] Un deuxième mécanisme de corruption fréquent (dit "anomalie de type 3") est caractérisé par l'observation de valeurs erratiques au cours de plusieurs trames au début du balayage suivies par une valeur unique constante dans tous les canaux pour le reste du balayage. Si une anomalie de type 3 est détectée, la totalité du balayage doit être rejetée. Les anomalies de type 3 et autres types moins fréquents d'anomalies, ne seront plus abordés dans le présent document. [0019] Selon la présente invention, l'algorithme de Viterbi est utilisé pour la détection et la suppression de glitchs dans le signal multicanal. L'algorithme de Viterbi est utilisé pour trouver le chemin avec un poids cumulé minimal au travers d'un treillis approprié. Pour l'application de l'algorithme de Viterbi, un treillis et les distances (poids) associées à toutes les branches de ce treillis sont définis. Un treillis est un graphe orienté dont les noeuds sont organisés en tranches verticales (au niveau du même incrément temporel discret) et chaque noeud est raccordé à au moins un noeud au niveau de l'incrément temporel précédent et au moins un noeud au niveau de l'incrément temporel suivant. Étant donnée une fonction de coût spécifique, la solution donnée par l'algorithme est le chemin optimal au travers du treillis, c'est-à-dire le chemin qui possède le coût le plus faible parmi l'ensemble de tous les chemins possibles au travers du treillis du premier instant au dernier instant. Dans l'application proposée, le chemin solution indique les emplacements de glitchs, permettant ainsi leur correction. 2. Détection et correction d'anomalies de Type [0020] Comme indiqué ci-dessus, étant donné une fonction de coût spécifique, la solution donnée par l'algorithme de Viterbi est optimale dans le sens où le chemin solution possède le coût le plus faible parmi tous les chemins possibles au travers du treillis à partir d'un instant de départ (instant 0) à un instant terminal. L'application de l'algorithme de Viterbi à un problème spécifique exige par conséquent la conception d'un treillis et la spécification d'une métrique appropriée pour ses branches. Une mise en oeuvre possible de l'algorithme de Viterbi de détection et de suppression de glitchs est donnée ci- 300 72 3 2 8 après. D'autres détails supplémentaires peuvent être trouvés dans les pseudocodes informatiques à la fin de cette description. Dans la suite, x(n) désignera l'échantillon de données reçu à l'instant discret n. x(n) peut être un échantillon de données ordinaire ou un échantillon de données supplémentaire 5 (glitch). L'ensemble de tous les échantillons reçus séquentiellement x(n) (mesures et glitchs) représente le flux de données. 2.1. Conception du treillis [0021] En tant qu'états de l'algorithme de Viterbi, on utilise les décalages possibles (c'est-à-dire un décalage d'un intervalle, deux intervalles, etc.) 10 provoqués par des échantillons de données supplémentaires reçus jusqu'à l'échantillon de données associé. Le treillis contient NS (?.. Ne) noeuds par instant n (c'est-à-dire arrivée d'un échantillon) qui sont désignés par ck;n, avec k = 0, NS - 1 à des fins de commodité. Le noeud Ck;n correspond à la valeur d'état dans laquelle k (modulo NS - 1) glitchs ont été détectés et supprimés le long du 15 chemin l'atteignant (c'est-à-dire à partir des n échantillons reçus jusque là). [0022] Chaque noeud ck;n est raccordé aux noeuds ck-1;ri-1 et Ck;n-1, associés à l'instant précédent, et aux noeuds cku,÷, et ck+1;n+1, associés à l'instant suivant. Le treillis est "circulaire" dans le sens où le noeud cou, est raccordé au noeud cNs_ I;n-1, et le noeud cNs_iu, est raccordé au noeud coul+1. Les sommets raccordant les 20 noeuds sont appelés branches. La branche raccordant les noeuds ck;n et Ck;n-1 est désignée par v°k;n, et la branche raccordant les noeuds Ck;n et ck-tn-i est désignée par v1k;n- Notez que la branche vlku, correspond à l'hypothèse "x(n) est un glitch" pour l'état k, tandis que la branche v°k;n correspond à l'hypothèse "x(n) n'est pas un glitch" pour l'état k. 25 2.2. Algorithme de Viterbi [0023] Chaque branche vc)ku, et vlk;n possède un poids do(k; n) et un poids di(k; n) qui lui sont attribués. Une définition possible des poids do(k; n) et di(k; n) est décrite dans la sous-section qui suit. En résumé, l'algorithme de Viterbi supprime à chaque instant n toutes sauf une des branches atteignant le même 30 état cri*, de sorte que chaque état cn:k peut être atteint par uniquement un chemin unique au travers du treillis. [0024] À l'instant n-1, à chaque noeud a été attribué le poids cumulé D(k; n- 1) des branches du chemin unique l'atteignant. r,'-1 L- jk;n-1 désigne la séquence d'échantillons vraisemblablement valides rencontrés sur le chemin unique atteignant le noeud ckm_i. Dans la suite, nous utiliserons la notation : = [ ek(2), xk(nk)l, où nk désigne le nombre d'échantillons vraisemblablement valides reçus sur le chemin atteignant le noeud Ckm-1. Notez que nk = n-k puisque k glitchs ont été détectés à l'état k. [0025] Si au noeud Ck;n, la somme de D(k;n-1) et de do(k; n) est inférieure à la somme de D(k-1; n1) et de di(k; n), c'est-à-dire si l'hypothèse "x(n) n'est pas un glitch" conduit à un poids cumulé plus petit D(k; n) que l'hypothèse "x(n) est un glitch": o La branche vlk;n est supprimée du treillis et la branche v°k;n est conservée. o L'échantillon x(n) est accepté en tant que mesure valide (échantillon de données ordinaire) par l'état ckm. La séquence de tous les échantillons qui ont été acceptés le long du chemin unique atteignant le noeud Ck;n est ainsi obtenue par [2]k;n = x(n)], où [. , .] est l'opérateur de concaténation. [0026] Dans le cas contraire, si au noeud ckrn, la somme de D(k; n-1) et de do(k; n) est supérieure à la somme de D(k-1; n-1) et de di(k; n), c'est-à-dire si l'hypothèse "x(n) n'est pas un glitch" conduit à un poids cumulé plus fort D(k; n) que l'hypothèse "x(n) est un glitch": o La branche v°k;,, est supprimée du treillis et la branche vik;,, est conservée. o L'échantillon x(n) n'est pas accepté en tant que mesure valide (échantillon de données ordinaire) par l'état Ck;n. o La séquence résultante de mesures valides [2]k;n sur le chemin atteignant 25 le noeud Ck;n est ainsi la même que la séquence de mesures valides atteignant le noeud ck_im -1I1 reik-1;n-1. [0027] Après réception du dernier échantillon de données x(N), le chemin au travers du treillis avec le poids cumulé le plus faible D(k; N) est choisi. Désigné par k = arg min (D(k;N)), le flux de données corrigé est donnée par la séquence[x]k; 2.3. Métrique de branche [0028] La métrique attribuée aux branches de treillis est basée sur des dérivées locales d'un échantillon de données x(n) avec des échantillons de données reçus passés et futurs. 1) Le poids attribuée à la branche v°k;n raccordant les noeuds ck;r1 et Ck; n-1 est donné par la racine carrée de la valeur absolue de la différence entre x(n) et le dernier échantillon de données valide qui est supposé appartenir au même canal de données que x(n) que l'état ckm a reçu, à savoir ek(nk-N1,+1). En conséquence : do (k, n) = .\11x(n)- xk (nk - +1) (Equation. 1) 2) Le poids di(k; n) attribué aux branches vikm raccordant les noeuds Ck;n et Ck-1 ;n-1 ^ k = 0, ..., Ne-1 est construit sous la forme d'une moyenne d'un sous-ensemble des différences entre les derniers échantillons de données valides 2k(nk-Nc+1) sur les chemins qui atteignent les états Ck;n k = 0, ..., Ne-1, et un nombre Nfuture d'échantillons futurs x(n+1), x(n+2), x(n+N 1 Le sous-ensemble de différences est donné par future/ - les 1\truturen différences les plus petites associées à chaque état. Dans le cas de MADRAS, le choix Nfuture = 10 s'est avéré être avantageux. wp Ar_cl (Equation. 2) d i(k,n) = 1: h(k,n) , where (Equation. 3) N, k-0 2 Nfid'" / 2 h(k, n) = E Csk n (i) , with Nfuture i=1 iNfuture 1= sorti (i) x(n + j)- Sc(n - +1 lj = (Equation. 4) Le coefficient WD1 est un facteur de normalisation. Dans cet exemple : WD1 = Il convient de noter que les poids di (k,n) ne dépendent pas de k, c'est-à-dire qu'ils sont identiques pour toutes les branches v1, [0029] Ce choix des poids peut être motivé en fonction de l'observation que les données dans chaque canal de données, considéré individuellement, présentent un comportement correct dans le sens où leur dérivée locale demeure à l'intérieur de certaines limites (qui dépendent du type de données). Le poids do(k,n) correspond fondamentalement à la dérivée locale au niveau de l'échantillon x(n) si cet échantillon et le précédent ne sont pas des glitchs. En conséquence, do(k,n) sera faible dans le sens où il ne sera pas supérieur à une variation normale dans un canal de données donné en l'absence de glitch. Lés branches v1 sont pondérées selon l'hypothèse que x(n) est un glitch. Si cette hypothèse est correcte, les données après x(n) sont décalées vers une position à l'intérieur de la trame par rapport à des données avant x(n). Avec la correction pour le décalage appliquée, on peut s'attendre à nouveau que les canaux de données présentent un comportement correct dans le sens ci-dessus. Le calcul de di(k,n) est basé sur le calcul de quantités 5k,n(i) correspondant aux dérivées locales pour un certain nombre de canaux de données (Équation 4), où il est supposé que x(n) lui-même doit être rejeté comme étant un glitch. Les quantités Esk,r,(1) sont triées dans un ordre ascendant et uniquement la moitié inférieure de celles-ci est utilisée pour calculer la quantité h(k,n) (Équation 3), qui représente une quantité qui peut être considérée comme une dérivée locale moyenne (où la moyenne est prise sur les canaux de données présentant le comportement le plus correct uniquement). Le fait de prendre la moyenne uniquement sur les quantités les plus faibles Ôk,n(i) réduit le risque que la quantité h(k,n) soit dénaturée du fait d'une variation naturelle importante dans un canal de données ou du fait d'un glitch se produisant peu de temps après x(n) dans le flux de données. di(k,n) est finalement obtenu (Équation 2) par le calcul de la moyenne des quantités h(k,n), k = 0, ..., Na-1, sur les états possibles (les différentes hypothèses pour le nombre de glitchs qui se sont produits à ce stade). [0030] Les algorithmes de pseudocode 1 et 2 à la fin de la description mettent en oeuvre l'algorithme de Viterbi décrit dans les sections 2.1. à 2.3. [0031] Les Figures 2 à 4 illustrent comment fonctionne l'algorithme Viterbi ci-dessus sur un flux de données avec quatre intervalles par trame. À des fins d'illustration, la métrique de branche est simplifiée par rapport à l'exemple ci-dessus. Les poids des branches sont indiqués dans le tableau ci-après : [0032] Les branches viim, (correspondant à l'hypothèse "x(n) est un glitch") reçoivent o le poids 1 si l'échantillon x(n) est effectivement un glitch et o le poids 3 si l'échantillon x(n) est en réalité un échantillon de données ordinaire. 10 Les branches v°k; (correspondant à l'hypothèse "x(n) n'est pas un glitch") reçoivent o le poids 0 si l'échantillon x(n) est un échantillon de données ordinaire et l'état correspondant est l'état correct, o le poids 2 si l'échantillon x(n) est un échantillon de données ordinaire mais 15 l'état correspondant est erroné, et o le poids 3 si l'échantillon x(n) est en réalité un glitch. Il convient de noter que la métrique utilisée ici est artificielle parce que dans une situation de la vie réelle, on n'aurait pas de connaissance a priori de la dynamique de chaque canal de données. À l'instant n=0, une trame entière a 20 été reçue. [0033] La Figure 2 illustre le treillis après la réception de l'échantillon de données (ordinaire) à l'instant n=1. Le poids de chaque branche individuelle est indiqué au dessus de la branche respective. Les poids cumulés sont illustrés au-dessus des noeuds du treillis. Le poids de la branche y°0,1 est déterminé par pas de glitch branches glitch i glitch -> i glitch 0 (dans l'état correct) 2 (dans l'état erroné) 3 i glitch --> (i+1)','d5 glitch 3 1 ---------- 13 la comparaison de l'échantillon de données x(n=1) à son prédécesseur présumé dans le même canal de données. Puisque le noeud d'extrémité de la branche v°0,1 est col, aucun glitch n'est considéré s'être produit à ce stade et l'échantillon de données x(n=1) est donc comparé à l'échantillon de données Nc (dans ce cas 4) intervalles de temps vers l'avant, c'est-à-dire avec x(n=-3). Puisque x(n=1) et x(n=-3) appartiennent en réalité au même canal de données, le poids do(0,1), calculé au moyen de l'équation 1 ci-dessus sera comparativement faible. Dans le cas illustré, ce fait est reflété par lé fait que la branche vc)0,1 reçoit le poids 0, selon le tableau ci-dessus. Le poids de la branche v11,1 est déterminé au moyen de l'équation 2 ci-dessus. L'hypothèse est ici que x(n=1) est un glitch mais, comme x(n=1) n'est pas un glitch, le poids di(1,1) sera comparativement fort. Dans le cas illustré, ce fait est reflété par le fait que la branche v11,1 reçoit le poids 3. [0034] La Figure 3 illustre le treillis après la réception de l'échantillon de données (supplémentaire) à l'instant n=2. Le poids de la branche v°0,2 est déterminé par la comparaison de l'échantillon de données x(n=2) à son prédécesseur présumé dans le même canal de données. Puisque le noeud d'extrémité de la branche v°0,2 est co;2, aucun glitch n'est considéré s'être produit à ce stade et l'échantillon de données x(n=2) est donc comparé à l'échantillon de données quatre intervalles de temps vers l'avant, c'est-à-dire à x(n=-2). Puisque x(n=2) est en réalité un gine, le poids do(0,2) sera comparativement fort. Dans le cas illustré, ce fait est reflété par le fait que la branche v(10,2 reçoit le poids 3. Le poids de toutes les branches v1k,2 (k=0, 1, 2, ...) est déterminé au moyen de l'équation 2 ci-dessus. L'hypothèse est que x(n=2) est un glitch et puisque ceci est effectivement le cas, les poids di(k,2) seront comparativement faibles. Dans le cas illustré, les branches v11,2 et Y12,2 reçoivent le poids 1. Le poids de la branche v°1,2 est déterminé au moyen de l'équation 1, c'est-à-dire par la comparaison de l'échantillon de données x(n=2) à son prédécesseur présumé dans le même canal de données. Puisque le noeud d'extrémité est c1,2, un glitch est considéré s'être produit à ce stade, l'échantillon de données x(n=2) est donc comparé à l'échantillon de données I^10+1 (ici : 5) intervalles de temps vers l'avant, c'est-à-dire à x(n=-3). Puisque x(n=2) est en réalité un glitch, le poids do(1,2) sera comparativement fort (poids 3). Le noeud 01,2 pourrait maintenant être atteint par deux chemins différents. L'algorithme de Viterbi supprime ainsi le chemin avec le poids cumulé le plus fort. [0035] La Figure 4 illustre le treillis après la réception de l'échantillon de données (ordinaire) à l'instant n=3. Le poids de la branche v°0,3 est déterminé par la comparaison de l'échantillon de données x(n=3) à son prédécesseur présumé dans le même canal de données. Puisque le noeud d'extrémité de la branche y°0,3 est co;3, aucun glitch n'est considéré s'être produit à ce stade et l'échantillon de données x(n=3) est donc comparé à l'échantillon de données quatre intervalles de temps vers l'avant, c'est-à-dire à x(n=-1). Puisqu'un glitch s'est produit entre temps à n=2, il existe une discordance de canal non prise en compte et le poids do(0,3) sera comparativement fort mais inférieur au poids que l'on obtiendrait par la comparaison d'un glitch à un échantillon de données ordinaire (poids 2). Le poids de toutes les branches vlk,3 (k=0, 1, 2, ...) est déterminé au moyen de l'équation 2 ci-dessus. L'hypothèse est que x(n=3) est un glitch, mais puisque x(n=3) n'est pas en réalité un glitch, les poids d1(k,3) seront comparativement forts. Les branches v11,3, v12,3 et v13,3 reçoivent donc le poids 3. Le poids de la branche v°1,3 est déterminé au moyen de l'équation par la comparaison de l'échantillon de données x(n=3) à son prédécesseur présumé dans le même canal de données. Puisque le noeud d'extrémité de la branche v°P,3 est ci;3, un glitch est considéré s'être produit à ce stade. L'échantillon de données x(n=3) est donc comparé à l'échantillon de données N1,4-1 intervalles de temps vers l'avant, c'est-à-dire à x(n=-2). Puisque x(n=-2) et x(n=3) appartiennent en réalité au même canal de données, le poids do(1,3) sera comparativement faible (poids 0). Le poids de la branche %/02,3 est également déterminé au moyen de l'équation 1 par la comparaison de l'échantillon de données x(n=3) à son prédécesseur présumé dans le même canal de 'données. Puisque le noeud d'extrémité de la branche v°2,3 est c2,3, deux glitchs sont considérés s'être produits à ce stade. L'échantillon de données x(n=3) est donc comparé à l'échantillon de données N0+2 (ici : 6) intervalles de temps vers l'avant, c'est-à-dire à x(n=-3). Puisque x(n=-3) et x(n=3) n'appartiennent pas en réalité au même canal de données, le poids d0(2,3) sera comparativement fort (poids 2). Chacun des noeuds ci,3 et C2,3 pourrait maintenant être atteint par deux chemins différents. L'algorithme de Viterbi supprime chaque fois le chemin avec le poids cumulé le plus fort. [0036] Pendant que le treillis est construit, l'algorithme conserve une trace des séquences [2]k;n de échantillons de données vraisemblablement valides. À l'instant n=2 : o [210:2 = [x(n=1), x(nz--2)], o [2]1;2 = [x(n=1)], 10 0 0 [ ]2;2=[ (séquence vide). A l'instant n=3 : o [113 = [x(n=1), x(n=2), x(n=3)], obtenu en tant que concaténation de e10;2, x(n=3)], o[1;3 = [x(n=1), x(n=3)], obtenu en tant que concaténation de [[- ]1;2, 15 x(n=3)], o [2]2;3 = [x(n=1)], obtenu par la reprise de la séquence du noeud précédent sur le chemin : [212;3 = [211;2 o o re}3;3=[ (séquence vide), obtenu par la reprise de la séquence du noeud précédent sur le chemin: [î]3;3 = P12;2. 20 [0037] Lorsque le dernier échantillon x(N) a été reçu, l'algorithme de Viterbi sélectionne le noeud ck,N, k = 0, 1, ..., Ns, sur lequel le chemin avec le poids cumulé le plus faible arrive. Supposons que Ckmin,N soit ce noeud, le flux de données corrigé peut être produit sous la forme [2]kmin,N. Par exemple, si x(n=3) était le dernier échantillon reçu, on trouverait en tant que flux de données 25 corrigé la séquence [.i.]1,3= [x(n=1), x(n=3)]. 3. Détection de trames corrompues [0038] Cette section décrit un algorithme qui permet la détection de trames qui potentiellement contiennent des anomalies de type 1. Similaire à l'algorithme décrit dans la section précédente 2, il utilise une métrique basée sur des dérivées locales afin de décider si une trame est corrompu ou non. Cependant, la métrique est construite conjointement pour tous les canaux dans une trame, ce qui ajoute de la robustesse contre les fausses alarmes dans des zones du balayage où les N0 canaux prennent des valeurs qui sont très proches les unes des autres. Il est conçu de façon à travailler trame par trame et peut en conséquence être uniquement utilisé pour détecter si une trame contient un glitch ou non et ne peut pas résoudre le problème de savoir si un échantillon individuel est un glitch ou non. 3.1. Métrique et critère de détection [0039] Soit m l'indice des trames et désignons par xr,,) les échantillons dans cette trame, i = 1, ..., N0. L'algorithme est basé sur la métrique double suivante : 1) différences intra-canaux (entre échantillons du même canal de données i) : ô. (i) = - 4:21 Nc Dm 1 = Sm 2 2) différences inter-canaux (entre échantillons du canal i et du canal (i+d;) modulo Nc, où di = 1, ..., N0-1) : ôn, (i,d,)= x,(,!/++:'-1) où [.] = mod (., Nc) 7','(d,)= Nc Eig,'(1,d,)12 [0040] Le principe qui sous-tend cette métrique réside dans les observations suivantes : o Si la trame m et la trame m + 1 ne contiennent pas de glitchs, alors les différences intra-canaux 6,7 (I) correspondent aux dérivées locales des mesures qui sont transmises dans le canal i, et les différences inter-canaux (5,0,d,) jusqu'à la différence des mesures transmises dans l'intervalle i l'intervalle i + di. La somme des différences intra-canaux sera faible comparée à la somme des différences inter-canaux. o Si la trame m ou la trame m + 1 contient ng glitchs, alors les différences intra-canaux Sm (r) correspondent soit à la différence des mesures transmises dans l'intervalle i et les mesures qui auraient dû être transmises dans l'intervalle j = i + n9, ou à la différence des mesures transmises dans le canal i et la valeur du glitch. Dans les deux cas, la somme des différences intra-canaux sera élevée. A l'inverse, les différences inter-canaux c5m(i,d,) qui satisfont la condition di = ng correspondent aux dérivées locales des mesures qui doivent être transmises dans le canal i. Leur somme sera en conséquence faible. [0041] En conséquence, des glitchs dans une trame m* sont considérés détectés si le critère suivant est satisfait : D',.> min T','(d,) Le nombre de glitchs dans la trame m* peut être estimé par : ng (m*) > arg min Tm.(d,) d 3.2. Algorithme pour la détection de trames corrompues [0042] L'algorithme (algorithmes de pseudocode 3 à 5 à la fin de la présente description) boucle au travers des trames m d'un balayage. Si pour la trame m*, le critère De > minT.. (d, ) est satisfait et que par conséquent des glitchs sont d détectés : 1) La trame m* est détectée comme étant corrompue et l'indice de la trame est placé en mémoire. 2) La trame m* est supprimée des données. Plus précisément, la trame m* (qui est présumée contenir au moins un glitch) est rejetée, et la 3-007232 18 trame m*+1 prend sa place, c'est-à-dire, est maintenant à la position m* pour la suite de l'algorithme de détection de trames corrompues. Les canaux de toutes les trames m* + 1, m* + 2, ... sont permutés de manière circulaire par ng(m*). En conséquence, x#(1L et x'('L 5 contiennent des mesures provenant du même canal de données et l'ordre des canaux a été rétabli. 4) L'algorithme poursuit avec la trame suivante du flux de données. 3.3. Algorithme de Viterbi pondéré combiné à la détection de trames corrompues 10 [0043] Dans cette section, l'algorithme de Viterbi décrit dans la section 2 est généralisé afin de permettre l'utilisation d'informations antérieures sur un échantillon spécifique x(n). Cette généralisation est motivée par le fait que, dans de nombreux cas, la plupart des échantillons dans un balayage sont en réalité des mesures valides. Si, par exemple, des séquences d'échantillons sont 15 connues être des mesures valides (ou, au contraire, des glitchs), cette information peut être utilisée pour améliorer les performances de l'algorithme de Viterbi. [0044] Les informations antérieures placent l'algorithme sous la forme d'un facteur y(n) qui agit en tant que multiplicateur pour les poids di(k, n) donnés par 20 l'équation 2. Au lieu de di(k, n), on utilise alors c71 (k , n) qui est défini sous la forme : j n) = Y (n) - d 1(k, n) [0045] En conséquence, le facteur y(n) influence la décision selon laquelle les branches v°k;n ou les branches vlk;n doivent être supprimées à l'instant n. 25 o Cas y(n) = co Le choix Y(n) c° est fait si l'échantillon x(n) est connu être une mesure valide (un échantillon de données ordinaire). En fonction de cette information antérieure, l'algorithme de Viterbi est forcé de supprimer les branches vik;n du treillis (pour tous les k) et d'accepter l'échantillon x(n) en tant que mesure valide. o Cas 1 Algorithme 1 Algorithme de Viterbi Partie 1: lnitialisation -Entrée CorruptedScan : matrix [11 x Nf] matrix [11 x Nf] t> balayage corrompu - trames 37 à 485 -Sortie r> balayage corrigé - trames 37 à 485 CorrectedScan : cweight: >distance cumulée du chemin du balayage corrigé %% iNITIALISATION N, 4- 11; N. 211Tc CONST: #canaux ; #états de l'algorithme de Viterbi WD1+- CONST: multiplicateur de mesure de branche FUTUR 4- 10 CONST: #échantillons futurs dans la métrique de branche do(1 : N.) distance cumulée pour chaque état iast_index(1: N.) 4- N. r> indice du dernier échantillon valide reçu for i =1 -> Nc do r> placer le balayage dans le format vecteur et initialiser les données en sortie for j = 1 --> Nf do data((] - 1) - Nf CorruptedScan(i, j) CorrectedScan(i, j) 0 end for end for sarnplereceived(1: (Ni - N,),1 : N.) 4- 0 initialiser les vecteurs de chemin d'état for k -= 1 N. do for n = 1 --> N, do sample_received(n,k) 4- scan(n) end for end for dd(1 : FUTUR) 4- 0; pre_k 4- 0; disto 4- 0; dist]. 0; sid 4- 0; cweight 0 oldsample_received(1: (Nf - N,),1 : N.) 4- 0 >variables de travail et mé- moires tampons olddistancescurn(1: N.) 4- 0 oid_last_index(1: N.) 4- 0 suite à l'algorithme 2 30072 32 22 Algorithme 2 Algorithme de Viterbi Partie 2: boucle principale ... suite de l'algorithme 1 9/0% --- PRINCIPAL : BOUCLER SUR LES ÉCHANTILLONS - 910% for n=Ne-F1-NeNf- FUTU R do for k = 1 --> N do >calculer la métrique de branche de l'échantillon n pour chaque état k do(k) abs(data(n) - sample received(k,lastindes(k) - N 1))4` dd(1 : FUTUR) abs(data(n + 1 : n FUTUR) - sample_received(k,last_index(k) - + 1))i dd 4- sort(dd) >trier dans l'ordre ascendant di(k) for j = 1 FUTU R/2 do di(k) = di(k) +T/VD1 - dd(j)/FUTUR end for end for old_distances_curn 4- distances curn old_lastindez 4- last_index old_sample_received sample received for k = 1-* N do >actualiser les vecteurs d'état pre_k k - 1 If k == 0 then pre k N end If dist° old_distances_curra(k) do(k) D distance de branche k k distl old_distances_cum(pre_k) mean(di 1 t> distance de branche k-1 k if dist' échantillon considéré comme étant un glitch distances_curn(k) 4- disti sample received(:, k) old_sample_received(:, pre k) fast index(k) 4- old lastindez(pre_k) else > échantillon considéré comme étant valide distart.ces_cum(k) disto fast index(k) fast inde-c(k) + 1 sample_received(last_index(k), k) 4- data(n) end If end for end for cre% DECISION sid index_of_rnin(distances curn) `Yo% t> chemin avec la distance cumulée la plus faible cweight 4- di stances_curn(sid) D distance cumulée correspondante for i = 1 -4- ./V. do for j = 1 Nf do C orrectedScan(i, j) samplereceived((j - 1) - N f i, sid) p placer le balayage corrigé dans un end for format matriciel end for SORTIE C orr ectedS can; cweight Algorithme 3 Algorithme « Prototype » Récursif -Entrée D balayage corrompu - trames 37 à 485 D poids à attribuer à des échantillons dans des trames non CorruptedScan : matrix [11 x N 1] Mweight : CON ST corrompues -Sortie D balises pour des trames non corrompues Fvalid : vector [1 x Nf] Grnetric : vector [1 x 11 - N1] D poids pour chaque échantillon dans CorruptedScan %% - INITIALISATION CONST: #canaux ; #états de l'algorithme de Viterbi DCONST: ordre maximum de rotation de canaux DCONST: voisinage de trame corrompue à baliser CONST: nombre maximal d'itérations Nc 4- 11 indice de trames supposées non corrompues D balises pour trames non corrompues NG 4- - 1 poids pour chaque échantillon DD 3 MITER 1- 30 Nr ÷- Nf for n = 1 -> Nf do NGindex(n) n Fvalid(n) +-- 1 for i 1 --> Nc do Grnetric((n - 1) . N1 +i) +>1 end for end for %of, RÉCURSION : DÉTECTION ET SUPPRESSION DE TRAMES CORROMPUES RUN t- 1; ITER 0 data r4- CorruptedScan while RUN-1 do ITER ITER + 1 4- DetectRemove (cf. Algorithm 5) end while %% --BALISER LES TRAMES CORROMPUES ET ATTTRIBUER DES POIDS POUR VITERBI %°/0 4- Ta Oie ight (cf. Algorithm 6) SORTIE Fvalid; Gmetric Algorithme 4 Algorithme « Prototype » Récursif: Partie DetectRemove DetectRemove %Tc, -- DÉTECTION DE TRAMES CORROMPUES iG Nc do do 4- do + abs(data_r(iin) - data_rei,n end for do 4- (do)i` 64(1 Na) 4- 0; dp(1: Na) Na do tmp F datac(1); data_c(1 - 1) data_c(2: Ne); data_c(Ne) trng for = 1 -> N, do di(j) t di(j) abs(data_c(i, n) - data_r(i, n 2))' dp(j) di(idi) AND TabC(iG) iG do TabG(iG)-(-TabG(iG + 1); PermG(iG) 4- Perrne(ie -I- 1) end for %% SUPPRIMER LES TRAMES CORROMPUES if iG > 0 then lor 1 -> iG do old_data_r data_r data r(1 PerrnG(i),TagG(i): 4- old_data_r(Ne - PerrnG(i)-1- 1: Ne,TagG(i): data_r(PerniG(i) + 1 : NeiTagG(i): Ne) +- old_data_r(1: Ne - PermG(i),TagG(i) : Nr) end for old_data_r iC do %% initialiser les compteurs pour cette récursion . Boucler sur les trames: Détection P. calculer la distance calculer la distance i > La trame n + 1 présente un problème - 9'0°/0 nouveau glitchs trouvés r> corriger l'ordre des canaux >supprimer les trames corrompues data r(:, Taga(i)- i +1: Nr - i) aid_data_r(:,TagG(i) + 1: Ni-) NGindex(TagG(i) - i + 1 : Ni- - old NGindex(TagG(i) 1-1: Ni.) end for Ni- 4-- Ni. - e else > pas de nouveaux glitchs trouvés RUN 4- end if if ITER >= MITER then RUN 4-0 end il 3007232 - 25 Algorithme 5 Algorithme « Prototype » Récursif: Partie TagWeight TagWeight °/0% - BALISER LES TRAMES CORROMPUES for n = 1 Nf do valid .4- 0 for k = 1 --> Air do if NGindex(k) n then. vadid 1 end if end for if vaiid==0 then il max(1, n - DD); i2 rain(Nf , ra DD - 1) i2) 0 end If end for cyce, - ATTRIBUER DES POIDS POUR L'ALGORITHME VITERBI for n = 1 N1 do for i 1 --+ Nc do if Fvalid(n) == 0 then Gmetric((n - 1) - Nf i) 4-1 esse Cinetric((n - 1) - Nf i) 4- Mweight end if end for end for t> baliser la trame corrompue et ses voisines t> baliser les échantillons valides Algorithme 6 Algorithme de Viterbi Pondéré Partie 1: Initialisation Entrée CorruptedScan : matrix [11 x Nf] Grnetric : vector [1 x 11 - N1] -Sortie CorrectedScart : matrix [11 x Nf] cweight: >balayage corrompu - trames 37 à 485 r' poids de la métrique de branche pour chaque échantillon dans CorruptedScan r' balayage corrigé - trames 37 à 485 r' distance cumulée du chemin du balayage corrigé %% INITIALISATION 910% CONST: #canaux ; #états de l'algorithme de Viterbi PV_Di N/Tr >CONST: multiplicateur de mesure de branche FUTUR -4-10 >CONST: #échantillons futurs dans la métrique de branche do(1 : Na) 4- 0; cd1(1 : Na) 4- 0 r' distances de branche de treillis distances cum(1 : N.) 4- oo; distances_curra(1) 4- 1 r' distance cumulée pour chaque état last_index(1 : Na) 4- N. r' indice du dernier échantillon valide reçu for i = 1 --> Nc do r' placer le balayage dans le format vecteur et initialiser les données en sortie for j = 1 Nf do data((j - 1) - Nf 0 4-- CorruptedScan(i, j) CorrectedScan(i, j) 0 end for end for sample_received(1 : - N.),1 : Na) 4- 0 r' initialiser les vecteurs de chemin d'état for k = 1 -> Na do for n =1 -> N. do sampie_received(n, k) scan(n) end for end for for n = 1 -> ./\Ç-N1 do r' rechercher des poids 00 If Grnetric(n) then Prune(n) 4- 1 else Prune(n) 4- G end if end for dd(1 : FUTUR) 0; pre_k 4- 0; disto 4- 0; dist1 0; sid 0; cweight 4- 0 old_sarnple_received(1: (N1 - Nc),1 : Ne) 4- 0 old_distances_cum(1 : N5) 4- 0 oldictst_index(1 : Na) 4- 0 ... suite à l'algorithme 7 >variables de travail et mé- moires tampons Algorithme 7 Algorithme de Viterbi Pondéré Partie 2: Boude principale suite de l'algorithme 6 foi.% - PRINCIPAL: BOUCLER SUR LES ÉCHANTILLONS - °h.% for 71 -= Nc 4- 1 Nc -N1 - FUTUR do for k = 1 --> N, do r> calculer la métrique de branche de l'échantillon n pour les transitions k - k do(k) 4- abs(data(n) - sample_received(k,last_index(k) - No + 1))à end for if Prune == 0 then for k = 1 -> N. d calculer la métrique de branche de l'échantillon n pour les transitions k-1 dd(1 : FUTUR) 4- abs(data(n+ 1: n +FUTUR) - sarnple received(k,last_index(k)- N.+ 1))à dd sort(dd) D trier dans l'ordre ascendant d1(k) 4-- 0 for j = 1 FUTUR/2 do di (k) dl (k) WD1 - dd(j)IFUTUR end for end for old distances_cum distances_curn old_last index 4- last_index old_sample_received sample_received for k = 1-* N, do >actualiser les vecteurs d'état pre k 4-- k - 1 if k == 0 then pre_k N end if disto old_distances_curn(k) do(k) D distance de branche k k disti dd distances_cum(pre_k) Grnetric(n) - mea D distance de branche k-1 -e k If disti échantillon considéré comme étant un glitch distances_curn(k) dist' sample_received(:, k) old sarnple_received(:,pre_k) last_index(k) 4- aldjast_index(pre k) else >échantillon considéré comme étant valide distances_curn(k) disto last_index(k) 4- last_index(k) + 1 sarriple_received(last irudex(k),k) 4- da end if end for else I> les branches k-1 - k n'existent pas for k = 1 -> N. do distances_cum(k) 4-- distances cum(k) do(k) Last index(k) lest index(k) + 1 sarnple received(dast_index(k), k) 4- data(n) end for end if end for 94%- DECISION °/0% sid = index of_min(distances cang) D chemin avec la distance cumulée la plus faible ctoeight = distances_cum(sid) D distance cumulée correspondante for i = 1 --> N, do for j = 1 --> Nf do CorrectedScan(i, j) samplereceived((j - 1) - Nfsid) r> placer le balayage corrigé dans mn end for format matriciel end for SORTIE CorrectedScdn; cweight REVENDICATIONS1. Un procédé de détection et/ou de correction automatique d'erreurs dans un flux de données multiplexées, comprenant : l'obtention d'un flux de données multiplexées contenant des échantillons de données, ledit flux de données comprenant une pluralité de canaux de données entrelacés organisés de manière cyclique en trames, chaque canal de données possédant un intervalle attribué à l'intérieur de chaque trame, dans lequel intervalle est situé un échantillon de données appartenant vraisemblablement audit canal, lesdits échantillons de données comprenant des échantillons de données ordinaires et des échantillons de données supplémentaires, lesdits échantillons de données supplémentaires provoquant un décalage d'échantillons de données ordinaires subséquents par rapport aux intervalles, et l'identification desdits échantillons de données supplémentaires par l'exécution d'un algorithme de Viterbi, possédant en tant qu'états associés à chaque échantillon de données, des décalages possibles provoqués par des échantillons de données supplémentaires reçus jusqu'à l'échantillon de données associé et dans lequel des transitions autorisées entre états comprennent une première transition, représentant une réception d'un échantillon de données ordinaire et, par conséquent, une constance de décalage, et une deuxième transition, représentant une réception d'un échantillon de données supplémentaire et, par conséquent, un accroissement de décalage d'une unité. 2. Le procédé selon la revendication 1, comprenant la production d'un flux corrigé de données multiplexées qui diffère du flux de données multiplexées en ce qu'il ne contient pas lesdits échantillons de données supplémentaires identifiés. 3. Le procédé selon la revendication 1 ou 2, dans lequel chaque transition autorisée possède un poids qui lui est associé, le poids associé à une première transition d'un premier état vers un deuxième état dépendant 10 4. 15 5. 20 256. 7. 30 d'une différence entre l'échantillon de données associé audit deuxième état et un échantillon de données prédécesseur direct présumé dans le même canal de données que ledit échantillon de données associé audit deuxième état, et le poids associé à une deuxième transition d'un premier état vers un deuxième état dépendant d'une différence entre au moins un échantillon de données subséquent audit échantillon de données associé audit deuxième état et un échantillon de données prédécesseur direct présumé dans le même canal de données que ledit au moins un échantillon de données subséquent. Le procédé selon la revendication 3, dans lequel ladite exécution dudit algorithme de Viterbi comprend la construction d'une pluralité de chemins au travers desdits états, chacun desdits chemins de ladite pluralité de chemins correspondant à une séquence spécifique de première et deuxième transitions, chacun desdits chemins de ladite pluralité de chemins possédant associé à celui-ci un poids cumulé correspondant à la somme des poids associés aux première et deuxième transitions du chemin, et la recherche d'un chemin de poids minimal parmi ladite pluralité de chemins. Le procédé selon la revendication 4 lorsqu'elle dépend de la revendication 2, dans lequel chacun desdits chemins de ladite pluralité de chemins possède associé à celui-ci une séquence d'échantillons de données présumés ordinaires, et dans lequel ledit flux corrigé de données multiplexées correspond à la séquence d'échantillons de données associée au chemin de poids minimal trouvé. Le procédé selon l'une quelconque des revendications précédentes, dans lequel, avant l'exécution dudit algorithme de Viterbi, des trames susceptibles de contenir au moins un échantillon de données supplémentaire sont identifiées. Le procédé selon la revendication 6, lorsqu'elle dépend de la revendication 3, dans lequel les poids associés auxdites première et deuxième transitions d'un premier état vers un deuxième état sontmodifiées selon que l'échantillon de données associé audit deuxième état appartient ou non à une trame identifiée comme étant susceptible de contenir au moins un échantillon de données supplémentaire. 8. Un programme informatique comprenant des instructions pouvant être mises en oeuvre par un processeur, qui, lorsqu'elles sont exécutées par un processeur, amènent ledit processeur à exécuter un procédé selon l'une quelconque des revendications 1 à 7. 9. Un dispositif informatique comprenant un processeur et une mémoire de préférence non volatile contenant en mémoire des instructions pouvant être mises en oeuvre par un processeur, qui, lorsqu'elles sont exécutées par ledit processeur, amènent ledit processeur à exécuter un procédé selon l'une quelconque des revendications 1 à 7.