FR3007232A1 - METHOD FOR DETECTION AND / OR AUTOMATIC CORRECTION OF ERRORS IN A MULTIPLEXED DATA STREAM - Google Patents

METHOD FOR DETECTION AND / OR AUTOMATIC CORRECTION OF ERRORS IN A MULTIPLEXED DATA STREAM Download PDF

Info

Publication number
FR3007232A1
FR3007232A1 FR1355645A FR1355645A FR3007232A1 FR 3007232 A1 FR3007232 A1 FR 3007232A1 FR 1355645 A FR1355645 A FR 1355645A FR 1355645 A FR1355645 A FR 1355645A FR 3007232 A1 FR3007232 A1 FR 3007232A1
Authority
FR
France
Prior art keywords
data
sample
samples
weight
state
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
FR1355645A
Other languages
French (fr)
Other versions
FR3007232B1 (en
Inventor
Jean Yves Tourneret
Herwig Wendt
Nicolas Dobigeon
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Centre National dEtudes Spatiales CNES
Original Assignee
Centre National dEtudes Spatiales CNES
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Centre National dEtudes Spatiales CNES filed Critical Centre National dEtudes Spatiales CNES
Priority to FR1355645A priority Critical patent/FR3007232B1/en
Publication of FR3007232A1 publication Critical patent/FR3007232A1/en
Application granted granted Critical
Publication of FR3007232B1 publication Critical patent/FR3007232B1/en
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L1/00Arrangements for detecting or preventing errors in the information received
    • H04L1/004Arrangements for detecting or preventing errors in the information received by using forward error control
    • H04L1/0045Arrangements at the receiver end
    • H04L1/0054Maximum-likelihood or sequential decoding, e.g. Viterbi, Fano, ZJ algorithms
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
    • H03M13/37Decoding methods or techniques, not specific to the particular type of coding provided for in groups H03M13/03 - H03M13/35
    • H03M13/39Sequence estimation, i.e. using statistical methods for the reconstruction of the original codes
    • H03M13/41Sequence estimation, i.e. using statistical methods for the reconstruction of the original codes using the Viterbi algorithm or Viterbi processors

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Probability & Statistics with Applications (AREA)
  • Theoretical Computer Science (AREA)
  • Artificial Intelligence (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Error Detection And Correction (AREA)

Abstract

La présente invention porte sur un procédé de détection et/ou de correction automatique d'erreurs dans un flux de données multiplexées. Le flux de données comprend 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 se trouve un échantillon de données appartenant vraisemblablement au canal. Le flux comprend des échantillons de données ordinaires et des glitchs, ce qui provoque un décalage des échantillons de données ordinaires subséquents par rapport aux intervalles. Les glitchs sont identifiés au moyen d'un algorithme de Viterbi. En tant qu'états, associés à chaque échantillon de données, l'algorithme utilise les décalages possibles (c'est-à-dire un décalage d'un intervalle, deux intervalles, etc.) provoqués par des glitchs reçus jusqu'à l'échantillon de données associé. Des transitions autorisées entre états comprennent une première transition, représentant une réception d'un échantillon de données ordinaire, et une deuxième transition, représentant une réception d'un glitch.The present invention relates to a method for automatically detecting and / or correcting errors in a multiplexed data stream. The data stream includes a plurality of interleaved data channels arranged cyclically in frames, each data channel having an assigned slot within each frame, in which there is a sample of data presumably belonging to the channel. The flow includes ordinary data samples and glitches, which causes the subsequent regular data samples to be shifted with respect to the intervals. Glitches are identified using a Viterbi algorithm. As states, associated with each sample of data, the algorithm uses the possible offsets (i.e., one interval offset, two intervals, etc.) caused by glitches received up to the same time. associated data sample. Permitted transitions between states include a first transition, representing a reception of an ordinary data sample, and a second transition, representing a reception of a glitch.

Description

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.Field of the Invention [0001] The present invention generally relates to the detection and / or automatic correction of errors in a multiplexed data stream, i.e. a sequence of samples. of data belonging to a plurality of interleaved channels. Technical Problem [0002] In a data stream containing data samples belonging to cyclically interleaved channels, any additional data sample that may be introduced into the data stream disrupts the periodicity of the interleaving. In the following, the number of intertwined channels will be called Ni ,. A sequence of Nc data samples in the data stream will be called a frame. Ideally, each channel is thus allocated the same interval within each frame, making demultiplexing or deinterleaving a relatively easy task. Samples of additional data, regardless of their source, result not only in outliers (called "glitchs") in the data stream but also in cyclical permutations of the downstream channels of the additional data samples, i.e. say a discrepancy or offset of the data samples that follow the additional data samples relative to the intervals in which they should actually be. An object of the present invention is to provide a method of automatic detection or detection and correction (deletion) of such additional data samples.

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.General Description of the Invention [0005] A method for detecting and / or automatically correcting errors in a multiplexed data stream is proposed. The method includes obtaining (for example, via a physical communication channel or from a memory) a multiplexed data stream containing data samples, the data stream comprising a plurality of data elements. interleaved data channels arranged cyclically in frames, each data channel having an assigned slot within each frame, in which there is a sample of data presumably belonging to the channel. The data samples transported by the data stream include ordinary data samples (each of which can be assigned to one of the interleaved channels) and additional data samples (glitches that can not be assigned to one any of the interleaved channels), which causes a shift of subsequent ordinary data samples with respect to the intervals. According to the present invention, the additional data samples are identified by the execution of a Viterbi algorithm. As so-called "hidden" states, associated with each data sample, the Viterbi algorithm uses the possible offsets (i.e., one interval offset, two intervals, etc.) caused. by additional data samples received up to the associated data sample. Allowed transitions between states include a first transition (i.e., a transition of a first type), representing a reception of an ordinary data sample and, therefore, an offset constancy, and a second transition (i.e., a transition of a second type), representing a reception of an additional data sample and, therefore, an offset increase of one unit (an interval). As will be seen, the glitch detection and / or suppression method exploits precisely the sequential nature of the corruption mechanism (cyclic permutation of the data channels inside the frames, ie say mismatch between the data channels and their assigned intervals respectively due to the presence of glitches) in order to retrieve the ordinary data samples that are actually present in the corrupted data stream and restore the correct channel order. Process embodiments have proven very effective in simulation experiments, in which initial data streams were artificially corrupted: 99.1% to 99.9% of the corrected data accurately matched the original uncorrupted data.

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.An interesting advantage of the method is that it does not require interpolation or extrapolation of data and therefore does not modify the informative content of the data stream. This aspect can be particularly useful in correcting scientific measurements. [0007] Preferably, the method comprises a step in which a corrected multiplexed data stream, which differs from the multiplexed data stream in that it does not contain the identified additional data samples, is produced (and, for example, displayed and / or stored in a computer memory). It is inherent in the Viterbi algorithm that each authorized transition has a weight (or length or cost) associated therewith. According to a preferred embodiment of the method according to the present invention, the weight associated with a first transition (corresponding to the assumption "ordinary data sample received") from a first state to a second state is defined to depend on the difference between the data sample associated with the second state and a presumed direct predicted data sample in the same data channel as the data sample associated with the second state. In addition, the weight associated with a second transition (corresponding to the "additional received data sample" assumption) from a first state to a second state depends on the difference between one or more of the subsequent sample data samples. data associated with the second state and a presumed direct predecessor data sample in the same data channel as the one or more subsequent data samples. The higher the difference, the stronger will be the weight of the corresponding transition. This embodiment of the method thus exploits the fact that local derivatives of data from the same data channel are small, whereas inter-local derivatives of data between two distinct data channels are comparatively high. Consequently, in the absence of a glitch, a transition of the first type will obtain a low weight while a transition of the second type will obtain a stronger weight. Similarly, in the presence of a glitch, a transition of the first type will get a heavy weight while a transition of the second type will get a lower weight. The execution of the Viterbi algorithm comprises the construction of a plurality of paths through the states, each path of the plurality of paths corresponding to a specific sequence of transitions of the first and second types, each path of the plurality of paths having associated therewith a cumulative weight (or length or cost) corresponding to the sum of the weights associated with the first and second transitions constituting the path, and searching for a path of least weight among the plurality of paths. Since one is interested in finding the path with the lowest cumulative weight, at each crossing of two paths, the path with the highest cumulative weight is rejected. Each path of the plurality of paths preferably has associated therewith a sequence of presumed ordinary data samples. The corrected flow of multiplexed data then corresponds to the sequence of data samples associated with the minimum weight path found. According to a preferred embodiment of the method according to the invention, before the execution of the Viterbi algorithm, frames capable of containing at least one additional data sample are identified. The weights associated with the first and second transitions from a first state to a second state may in this case be modified (re-weighted) depending on whether the data sample associated with the second state belongs to a frame identified as likely to contain minus an additional sample of data. A preferred aspect of the present invention relates to a computer program comprising instructions that can be implemented by a processor, which, when executed by a processor, cause the processor to execute a method such as that described here. . Another preferred aspect of the present invention relates to a computing device comprising a processor and a non-volatile memory preferably containing in memory processor-operable instructions which, when executed by the processor, cause the processor to execute a method as described herein. Brief Description of the Drawings [0012] Preferred embodiments of the present invention are hereinafter described, by way of example, with reference to the accompanying drawings in which: Figure 1 is a schematic illustration of a flow of multiplexed data containing an additional data sample which causes subsequent samples to be shifted with respect to their assigned ranges. Figures 2 to 4 are schematic illustrations of the lattice construction using the Viterbi algorithm in a According to a preferred embodiment of the present invention, Figure 5 illustrates the performance of the method according to the present invention. Description of Preferred Embodiments 1. Introduction to MADRAS [0013] In the following, preferred embodiments of the present invention will be illustrated by the example of glitch detection and correction in data from MADRAS, which is a microwave imager embedded on the MEGHA-TROPIQUES satellite. It should be noted, however, that the method according to the present invention can be used for other purposes. The scientific data acquired by MADRAS consist of several hundred acquisitions (or scans) recorded in N, = 11 channels. A set of contiguous sweeps composes a multichannel image. A given 11-channel scan results from the reordering of a single data stream. Each cycle of Nlc data samples corresponds to one pixel of the image and is called a frame. The data stream thus contains a cyclic sequence of 11 ° NF measurements that are sequentially and periodically assigned to the 11 channels, where NF is the number of frames. Due to a malfunction in the communication chain between two electronic devices, this data flow is corrupted. The most frequent mechanism of corruption is such that additional data samples (glitchs) are concatenated to the measurements due to the occurrence of parasitic pulse signals (in the context of MADRAS, this anomaly is called "anomaly of type 1 "). As a result, the data collected contains most of the scientific measurements, but the multiple and random data insertions result in - the presence of additional data samples (glitches) in the data stream, - cyclic permutations of the data. channels after recombination of the data stream due to these additional data. A schematic view of the phenomenon is illustrated in FIG. 1, where for brevity only four channels have been considered (i.e., 15 Nc = 4 in FIG. 1) and the flow of Data 10 is divided into three successive frames 12. Each data channel has its allocated slot within each frame. In Figure 1, the numbers 1 to 4 refer to the data samples belonging to the different data channels. When a glitch (called G) appears in the reserved time slot for channel 3, then this interval receives an outlier (which can not be assigned to any of the data channels), the subsequent interval reserved for channel 2 receives the sample of data belonging to channel 3, the next reserved slot for channel 1 receives the sample of data belonging to channel 2, and the offset (discordance between channels and slots) is propagated to the next frame. The algorithm described below is designed to detect and remove these glitches for each scan individually. Once all the glitches have been removed from a scan, the data contains only the measurements that are recoverable, each data sample being located in its dedicated interval on all the frames. The corrected data is therefore scientifically exploitable. [0018] A second mechanism of frequent corruption (called "type 3 anomaly") is characterized by the observation of erratic values during several frames at the beginning of the scan followed by a single constant value in all the channels for the rest of the time. scanning. If a Type 3 anomaly is detected, the entire scan must be rejected. Type 3 anomalies and other less common types of anomalies will no longer be addressed in this document. According to the present invention, the Viterbi algorithm is used for the detection and suppression of glitches in the multichannel signal. The Viterbi algorithm is used to find the path with minimal cumulative weight through an appropriate lattice. For the application of the Viterbi algorithm, a lattice and the distances (weights) associated with all the branches of this lattice are defined. A trellis is an oriented graph whose nodes are organized in vertical slices (at the same discrete time increment) and each node is connected to at least one node at the previous time increment and at least one node at the level of the next time increment. Given a specific cost function, the solution given by the algorithm is the optimal path through the trellis, that is, the path that has the lowest cost among all of the possible paths at the time. through the lattice from the first moment to the last moment. In the proposed application, the solution path indicates the glitch locations, thus allowing their correction. 2. Type anomaly detection and correction [0020] As indicated above, given a specific cost function, the solution given by the Viterbi algorithm is optimal in the sense that the solution path has the highest cost. weak among all the possible paths through the lattice from a start instant (time 0) to a terminal instant. The application of the Viterbi algorithm to a specific problem therefore requires the design of a lattice and the specification of a suitable metric for its branches. A possible implementation of the Viterbi algorithm for glitch detection and suppression is given below. Further details can be found in the computer pseudocodes at the end of this description. In the following, x (n) denotes the data sample received at the discrete instant n. x (n) can be a regular data sample or an additional data sample (glitch). The set of all sequentially received samples x (n) (measures and glitches) represents the data flow. 2.1. Design of the trellis [0021] As states of the Viterbi algorithm, the possible offsets (i.e., one interval shift, two intervals, etc.) caused by samples of the Viterbi algorithm are used. additional data received up to the associated data sample. The lattice contains NS (? .. Ne) nodes per instant n (i.e. arrival of a sample) which are designated ck; n, with k = 0, NS - 1 for the sake of convenience. The node Ck; n corresponds to the state value in which k (modulo NS-1) glitchs were detected and deleted along the path reaching it (i.e. from the n samples received up to the). Each node ck; n is connected to the nodes ck-1; ri-1 and Ck; n-1, associated with the previous instant, and to the nodes cku, ÷, and ck + 1; n + 1, associated at the next moment. The lattice is "circular" in the sense that the node is connected to the node cNs_I; n-1, and the node cNs_iu is connected to the node + 1. The vertices connecting the 20 nodes are called branches. The branch connecting the nodes ck; n and Ck; n-1 is denoted by v ° k; n, and the branch connecting the nodes Ck; n and ck-tn-i is denoted by v1k; n- Note that the vlku branch , corresponds to the hypothesis "x (n) is a glitch" for the state k, while the branch v ° k; n corresponds to the hypothesis "x (n) is not a glitch" for the state k. 2.2. Viterbi Algorithm Each branch vc) ku, and vlk; n has a weight do (k; n) and a weight di (k; n) assigned to it. A possible definition of the weights do (k; n) and di (k; n) is described in the following subsection. In summary, the Viterbi algorithm removes at all times n all but one of the branches reaching the same Cree * state, so that each state cn: k can be reached by only a single path through the trellis. At time n-1, at each node has been assigned the cumulative weight D (k; n-1) of the branches of the unique path reaching it. ## EQU1 ## denotes the sequence of presumably valid samples encountered on the unique path reaching node ckm_i. In the following, we will use the notation: = [ek (2), xk (nk) l, where nk is the number of likely valid samples received on the path reaching the Ckm-1 node. Note that nk = n-k since k glitchs were detected in state k. If at the node Ck; n, the sum of D (k; n-1) and do (k; n) is smaller than the sum of D (k-1; n1) and di (k; n ), that is, if the hypothesis "x (n) is not a glitch" leads to a smaller cumulative weight D (k; n) than the hypothesis "x (n) is a glitch ": o The branch vlk; n is removed from the lattice and the branch v ° k; n is preserved. o Sample x (n) is accepted as a valid measure (regular data sample) by state ckm. The sequence of all the samples that have been accepted along the unique path reaching the node Ck; n is thus obtained by [2] k; n = x (n)], where [. ,.] is the concatenation operator. In the opposite case, if at the node ckrn, the sum of D (k; n-1) and do (k; n) is greater than the sum of D (k-1; n-1) and of di (k; n), that is, if the hypothesis "x (n) is not a glitch" leads to a higher cumulative weight D (k; n) than the hypothesis "x ( n) is a glitch ": o The branch v ° k; ,, is removed from the lattice and the branch vik; ,, is preserved. o The sample x (n) is not accepted as a valid measure (ordinary data sample) by the state Ck; n. The resulting sequence of valid measurements [2] k; n on the path up to the node Ck; n is thus the same as the sequence of valid measurements reaching the node ck_im -1I1 reik-1; n-1. After receiving the last sample of data x (N), the path through the lattice with the lowest cumulative weight D (k; N) is chosen.

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).Designated by k = arg min (D (k; N)), the corrected data flow is given by the sequence [x] k; 2.3. Branch Metric [0028] The metric assigned to the trellis branches is based on local derivatives of a sample of data x (n) with past and future received data samples. 1) The weight assigned to the branch v ° k; n connecting the nodes ck; r1 and Ck; n-1 is given by the square root of the absolute value of the difference between x (n) and the last valid data sample that is assumed to belong to the same data channel as x (n) that the ckm state has received, namely ek (nk-N1, + 1). As a result: do (k, n) =. \ 11x (n) - xk (nk - +1) (Equation 1) 2) The weight di (k; n) assigned to the branches vikm connecting the nodes Ck; n and Ck-1; n-1 ^ k = 0, ..., Ne-1 is constructed as an average of a subset of the differences between the last valid data samples 2k (nk-Nc + 1 ) on the paths that reach the states Ck; nk = 0, ..., Ne-1, and a Nfuture number of future samples x (n + 1), x (n + 2), x (n + N 1 The subset of differences is given by future / - the smallest 1 truturen differences associated with each state.In the case of MADRAS, the choice Nfuture = 10 proved to be advantageous wp Ar_cl (Equation 2) di (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 = output (i) x (n + j) - Sc (n - +1 lj = (Equation 4) The coefficient WD1 is a normalization factor In this example: WD1 = It should be noted that the weights di (k, n) do not depend on k, that is, ie, they are identical for all the branches v1, [0029] This choice of the weights can be motivated according to the observation that the data in each data channel, considered individually, exhibit a correct behavior in the sense that their local derivative remains within certain limits (which depend on the type of data).

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 < 7(n) < Ce choix est fait si l'échantillon x(n) est très probablement une mesure valide (un échantillon de données ordinaire). Les branches vlk;n sont pénalisées par leur accroissement en termes de poids. En conséquence, la probabilité que x(n) soit accepté en tant qu'échantillon valide est augmentée (en comparaison de l'algorithme qui utilise dl (k, n) au lieu de j1(k,n)). o Cas 7(n) = ° Ce choix est fait s'il est connu que l'échantillon x(n) est un glitch. Le fait que les branches vlk;n recevront un poids nul amène l'algorithme de Viterbi à supprimer les branches vOk:n du treillis. L'échantillon x(n) est détecté comme étant un glitch et n'est pas accepté en tant qu'échantillon valide par aucun état ck;n, quelle que soit la valeur de k. o Cas ° < Y(n) <1 Ce choix est fait s'il est très probable que l'échantillon x(n) soit un glitch. Le poids des branches vlk;n est diminué comparé à l'algorithme qui utilise di(k, n). En conséquence, la probabilité que x(n) soit accepté en tant qu'échantillon valide est diminuée. [0046] L'algorithme de Viterbi pondéré est détaillé dans les algorithmes de pseudocode 6 et 7 à la fin de la description. Il est couplé ici à un algorithme de détection de trames corrompues, par exemple, l'algorithme détaillé à la section 3.2. (algorithmes de pseudocode 3 à 5) avec Mweight = infini (Go). L'algorithme de pseudocode 6 attribue en conséquence un poids y(n) = 'I à tous les échantillons dans des trames qui sont détectées comme étant corrompues et le poids y(n) = co à tous les échantillons dans des trames qui ne sont pas détectées comme étant corrompues. The branches vlk;n sont par conséquent supprimées du treillis des algorithmes de pseudocode 6 et 7 pour tous les échantillons dans des trames qui ne sont pas détectées comme étant corrompues par les algorithmes de pseudocode de détection de trames corrompues 3 à 5. En conséquence, le coût de traitement de l'algorithme de Viterbi est réduit pour des balayages qui sont uniquement faiblement corrompus. De plus, la probabilité de fausse alarme (c'est-à-dire la détection d'un glitch non existant et la suppression d'une mesure valide) est diminuée, en particulier dans des zones où tous les canaux possèdent une dynamique très similaire. [0047] La Figure 5 illustre la performance de l'algorithme de détection et suppression de glitchs selon les algorithmes de pseudocode 6 et 7 sur un ensemble de données synthétiques. Le graphe 14 illustre les données d'origine. Chaque instant (axe x) correspond à une trame. Les données d'origine ont été artificiellement corrompues par l'insertion de glitchs (graphe 16), résultant en une permutation cyclique des canaux de données après chaque glitch. Les données corrompues du graphe 16 ont ensuite été introduites dans le procédé de détection et de suppression de glitchs. Le résultat de la correction est illustré sous la forme du graphe 18. Comme on peut le constater, la correction fonctionne bien : les glitchs sont effectivement supprimés du flux de données corrigé. Il convient de noter que la correction est uniquement appliquée aux trames 37 à 485, dans lesquelles tous les canaux de l'instrument MADRAS contiennent des mesures. [0048] Bien que des modes de réalisation spécifiques aient été décrits dans le détail, les personnes du métier pourront observer que diverses modifications et variantes à ces détails pourraient être élaborées à la lumière des conclusions globales de l'invention. En conséquence, les agencements particuliers décrits sont destinés à être uniquement illustratifs et non limitatifs en ce qui concerne la portée de la présente invention à laquelle il convient d'attribuer l'étendue complète des revendications annexées et de tous équivalents de celles-ci.The weight do (k, n) basically corresponds to the local derivative at the sample x (n) if this sample and the previous one are not glitches. As a result, do (k, n) will be small in the sense that it will not be greater than a normal variation in a given data channel in the absence of a glitch. The branches v1 are weighted on the assumption that x (n) is a glitch. If this assumption is correct, the data after x (n) are shifted to a position within the frame relative to data before x (n). With correction for the applied offset, it can again be expected that the data channels will behave correctly in the above sense. The calculation of di (k, n) is based on the computation of quantities 5k, n (i) corresponding to local derivatives for a number of data channels (Equation 4), where it is assumed that x (n) itself even must be rejected as a glitch. The quantities Esk, r, (1) are sorted in ascending order and only the lower half of these is used to calculate the quantity h (k, n) (Equation 3), which represents a quantity that can be considered as an average local derivative (where the average is taken on the data channels presenting the most correct behavior only). Taking the average only on the lowest quantities Ôk, n (i) reduces the risk that the quantity h (k, n) is denatured due to a large natural variation in a data channel or due to a glitch occurring shortly after x (n) in the data stream. di (k, n) is finally obtained (Equation 2) by calculating the average of the quantities h (k, n), k = 0, ..., Na-1, on the possible states (the different hypotheses for the number of glitches that occurred at this stage). The pseudocode algorithms 1 and 2 at the end of the description implement the Viterbi algorithm described in sections 2.1. to 2.3. Figures 2 to 4 illustrate how the above Viterbi algorithm operates on a data stream with four slots per frame. For illustrative purposes, the branch metric is simplified compared to the example above. The weights of the branches are indicated in the table below: The branches viim, (corresponding to the hypothesis "x (n) is a glitch"), receive o the weight 1 if the sample x (n) is actually a glitch and o the weight 3 if the sample x (n) is actually an ordinary data sample. Branches v ° k; (corresponding to the hypothesis "x (n) is not a glitch") receive o the weight 0 if the sample x (n) is an ordinary data sample and the corresponding state is the correct state, o the weight 2 if the sample x (n) is an ordinary data sample but the corresponding state is erroneous, and o the weight 3 if the sample x (n) is actually a glitch. It should be noted that the metric used here is artificial because in a real-life situation, one would not have prior knowledge of the dynamics of each data channel. At time n = 0, an entire frame was received. Figure 2 illustrates the lattice after receipt of the data sample (ordinary) at time n = 1. The weight of each individual branch is indicated above the respective branch. Cumulative weights are shown above the lattice nodes. The weight of the branch y ° 0.1 is determined by glitch steps glitch i glitch -> i glitch 0 (in the correct state) 2 (in the wrong state) 3 i glitch -> (i + 1 ) ',' d5 glitch 3 1 ---------- 13 the comparison of the data sample x (n = 1) with its predicted predecessor in the same data channel. Since the end node of the branch v ° 0.1 is col, no glitch is considered to have occurred at this stage and the data sample x (n = 1) is therefore compared to the sample of data Nc (in this case 4) time intervals forward, that is to say with x (n = -3). Since x (n = 1) and x (n = -3) actually belong to the same data channel, the do weight (0.1), calculated using Equation 1 above, will be comparatively small. In the case illustrated, this fact is reflected by the fact that the branch vc) 0.1 receives the weight 0, according to the table above. The weight of the v11.1 branch is determined using Equation 2 above. The assumption here is that x (n = 1) is a glitch, but since x (n = 1) is not a glitch, the di (1,1) weight will be comparatively strong. In the case illustrated, this fact is reflected by the fact that the v11.1 branch receives the weight 3. [0034] FIG. 3 illustrates the lattice after receiving the (additional) data sample at the instant n = 2. The weight of the branch v 0.2 is determined by comparing the data sample x (n = 2) with its predicted predecessor in the same data channel. Since the end node of the branch v ° 0.2 is co; 2, no glitch is considered to have occurred at this stage and the data sample x (n = 2) is therefore compared to the data sample four time intervals forward, that is to say at x (n = -2). Since x (n = 2) is actually a gine, the weight do (0,2) will be comparatively strong. In the case illustrated, this fact is reflected by the fact that the branch v (10.2 receives the weight 3. The weight of all the branches v1k, 2 (k = 0, 1, 2, ...) is determined at The hypothesis is that x (n = 2) is a glitch and since this is indeed the case, the weights di (k, 2) will be comparatively small. branches v11,2 and Y12,2 receive the weight 1. The weight of the branch v 1,2 is determined by means of equation 1, ie by the comparison of the data sample x (n = 2) to its presumed predecessor in the same data channel Since the end node is c1,2, a glitch is considered to have occurred at this point, the data sample x (n = 2) is then compared to the data sample I ^ 10 + 1 (here: 5) time intervals forward, ie to x (n = -3). Since x (n = 2) is actually a glitch, the do weight (1,2) will be comparatively strong (weight 3). now to be reached by two different paths. The Viterbi algorithm thus eliminates the path with the highest cumulative weight. Figure 4 illustrates the lattice after receipt of the data sample (ordinary) at time n = 3. The weight of the v 0.3 branch is determined by comparing the data sample x (n = 3) with its predicted predecessor in the same data channel. Since the end node of the branch y ° 0.3 is co; 3, no glitch is considered to have occurred at this stage and the data sample x (n = 3) is therefore compared to the data sample four time intervals forward, that is to say at x (n = -1). Since a glitch has occurred in the meantime at n = 2, there is an unaccounted channel mismatch and the do weight (0.3) will be comparatively high but less than the weight that would be obtained by comparing a glitch to an ordinary data sample (weight 2). The weight of all branches vlk, 3 (k = 0, 1, 2, ...) is determined using equation 2 above. The hypothesis is that x (n = 3) is a glitch, but since x (n = 3) is not actually a glitch, the weights d1 (k, 3) will be comparatively strong. The branches v11,3, v12,3 and v13,3 thus receive the weight 3. The weight of the branch v 1,3 is determined by means of the equation by the comparison of the sample of data x (n = 3) to its predicted predecessor in the same data channel. Since the end node of the branch v ° P, 3 is ci; 3, a glitch is considered to have occurred at this stage. The sample of data x (n = 3) is therefore compared with the data sample N1,4-1 forward time intervals, that is to say at x (n = -2). Since x (n = -2) and x (n = 3) actually belong to the same data channel, the weight do (1,3) will be comparatively small (weight 0). The weight of the branch% / 02.3 is also determined by equation 1 by comparison of the data sample x (n = 3) with its predicted predecessor in the same data channel. Since the end node of the v2.3 branch is c2.3, two glitches are considered to have occurred at this stage. The sample of data x (n = 3) is therefore compared to the sample of data N0 + 2 (here: 6) time intervals forward, ie to x (n = -3 ). Since x (n = -3) and x (n = 3) do not actually belong to the same data channel, the weight d0 (2,3) will be comparatively strong (weight 2). Each of the nodes ci, 3 and C2,3 could now be reached by two different paths. The Viterbi algorithm always removes the path with the highest cumulative weight. While the lattice is constructed, the algorithm retains a trace of the sequences [2] k; n of potentially valid data samples. At the moment n = 2: o [210: 2 = [x (n = 1), x (nz - 2)], o [2] 1, 2 = [x (n = 1)], 10 0 0 [] 2; 2 = [(empty sequence). At time n = 3: o [113 = [x (n = 1), x (n = 2), x (n = 3)], obtained as a concatenation of e10; 2, x (n = 3) )], o [1; 3 = [x (n = 1), x (n = 3)], obtained as the concatenation of [[-] 1; 2, 15 x (n = 3)], o [ 2] 2; 3 = [x (n = 1)], obtained by resuming the sequence of the previous node on the path: [212; 3 = [211; 2 oo re} 3; 3 = [(empty sequence) , obtained by resuming the sequence of the previous node on the path: []] 3; 3 = P12; 2. When the last sample x (N) has been received, the Viterbi algorithm selects the node ck, N, k = 0, 1, ..., Ns, on which the path with the most cumulative weight low happens. Assume that Ckmin, N is this node, the corrected data stream can be produced as [2] kmin, N. For example, if x (n = 3) was the last sample received, the sequence [.i.] 1.3 = [x (n = 1), x (n = 3) would be found as a corrected data stream. )]. 3. Detection of corrupted frames [0038] This section describes an algorithm that allows the detection of frames that potentially contain type 1 anomalies. Similar to the algorithm described in the previous section 2, it uses a metric based on local derivatives to decide if a frame is corrupted or not. However, the metric is built together for all channels in a frame, which adds robustness against false alarms in areas of the scan where the N0 channels take values that are very close to each other. It is designed to work frame by frame and can therefore only be used to detect whether a frame contains a glitch or not and can not solve the problem of whether an individual sample is a glitch or not. 3.1. Metric and Detection Criterion Let m be the index of frames and denote by xr ,,) the samples in this frame, i = 1, ..., N0. The algorithm is based on the following dual metric: 1) Intra-channel differences (between samples of the same data channel i): ô. (i) = - 4:21 Nc Dm 1 = Sm 2 2) inter-channel differences (between channel i and channel samples (i + d;) modulo Nc, where di = 1, ..., N0-1 ): ôn, (i, d,) = x, (,! / ++: '- 1) where [.] = mod (., Nc) 7', '(d,) = Nc Eig,' (1 , d,) 12 [0040] The principle underlying this metric resides in the following observations: o If the frame m and the frame m + 1 do not contain glitches, then the intra-channel differences 6.7 (I ) correspond to the local derivatives of the measurements that are transmitted in channel i, and the inter-channel differences (5.0, d,) to the difference of the measurements transmitted in the interval i to the interval i + di. The sum of intra-channel differences will be small compared to the sum of inter-channel differences. o If the frame m or the frame m + 1 contains ng glitchs, then the intra-channel differences Sm (r) correspond either to the difference of the measurements transmitted in the interval i and the measurements that should have been transmitted in the interval j = i + n9, or unlike the measurements transmitted in the channel i and the value of the glitch. In both cases, the sum of the intra-channel differences will be high. Conversely, the inter-channel differences c5m (i, d,) that satisfy the condition di = ng correspond to the local derivatives of the measurements that must be transmitted in the channel i. Their sum will therefore be small. As a result, glits in a frame m * are considered detected if the following criterion is satisfied: D ',.> Min T', '(d,) The number of glitches in the frame m * can be estimated by : ng (m *)> arg min Tm. (d,) d 3.2. Algorithm for the Detection of Corrupted Frames The algorithm (pseudocode algorithms 3 to 5 at the end of the present description) loops through frames m of a scan. If for the frame m *, the criterion De> minT .. (d,) is satisfied and that consequently glitches are detected: 1) The frame m * is detected as being corrupted and the index of the frame is placed in memory. 2) The frame m * is deleted from the data. Specifically, the frame m * (which is presumed to contain at least one glitch) is rejected, and the frame m * + 1 takes its place, i.e., is now at position m * for the rest of the algorithm for detecting corrupted frames. The channels of all frames m * + 1, m * + 2, ... are permutated circularly by ng (m *). As a result, x # (1L and x '(' L 5 contain measurements from the same data channel and the order of the channels has been restored.) 4) The algorithm continues with the next frame of the data stream. weighted Viterbi combined with detection of corrupted frames [0043] In this section, the Viterbi algorithm described in section 2 is generalized to allow the use of prior information on a specific sample x (n). The generalization is motivated by the fact that, in many cases, most of the samples in a scan are actually valid measurements, if, for example, sample sequences are known to be valid measurements (or, conversely, glitch), this information can be used to improve the performance of the Viterbi algorithm. [0044] The prior information places the algorithm in the form of a factor y (n) which acts as a multiplier for the Viterbi algorithm. s di (k, n) given by equation 2. Instead of di (k, n), then c71 (k, n) is used which is defined as: jn) = Y (n) - d 1 (k, n) [0045] Consequently, the factor y (n) influences the decision according to which the branches v ° k; n or the branches vlk; n must be suppressed at time n. O Case y (n) = co The choice Y (n) c ° is made if the sample x (n) is known to be a valid measure (a sample of ordinary data). Based on this earlier information, the Viterbi algorithm is forced to remove the vik; n branches of the lattice (for all k's) and accept the x (n) sample as a valid measure. o Case 1 <7 (n) <This choice is made if the sample x (n) is most likely a valid measure (a sample of ordinary data). The branches vlk; n are penalized by their increase in terms of weight. As a result, the probability that x (n) is accepted as a valid sample is increased (compared to the algorithm that uses dl (k, n) instead of j1 (k, n)). o Case 7 (n) = ° This choice is made if it is known that the sample x (n) is a glitch. The fact that the vlk; n branches will receive zero weight causes the Viterbi algorithm to remove the vOk: n branches of the trellis. The sample x (n) is detected as a glitch and is not accepted as a valid sample by any state ck; n, regardless of the value of k. o Case ° <Y (n) <1 This choice is made if it is very likely that the sample x (n) is a glitch. The weight of branches vlk; n is decreased compared to the algorithm that uses di (k, n). As a result, the probability that x (n) is accepted as a valid sample is decreased. The weighted Viterbi algorithm is detailed in the pseudocode algorithms 6 and 7 at the end of the description. It is coupled here to a corrupted frame detection algorithm, for example, the algorithm detailed in section 3.2. (pseudocode algorithms 3 to 5) with Mweight = infinite (Go). The pseudocode algorithm 6 accordingly assigns a weight y (n) = 'I to all the samples in frames which are detected as corrupted and the weight y (n) = co to all the samples in frames which are not not detected as corrupted. The branches vlk; n are therefore removed from the lattice of the pseudocode algorithms 6 and 7 for all the samples in frames that are not detected as being corrupted by pseudocode algorithms for detecting corrupted frames 3 to 5. As a result, the processing cost of the Viterbi algorithm is reduced for scans that are only weakly corrupted. In addition, the probability of false alarm (ie the detection of a non-existent glitch and the deletion of a valid measurement) is decreased, especially in areas where all channels have a very similar dynamic . Figure 5 illustrates the performance of the algorithm for detecting and removing glitchs according to pseudocode algorithms 6 and 7 on a set of synthetic data. Graph 14 illustrates the original data. Each moment (x axis) corresponds to a frame. The original data was artificially corrupted by the insertion of glitches (graph 16), resulting in a cyclical permutation of the data channels after each glitch. The corrupted data in graph 16 was then introduced into the glitch detection and removal method. The result of the correction is shown as graph 18. As can be seen, the correction works well: glitches are effectively removed from the corrected data stream. It should be noted that the correction is only applied to frames 37 to 485, in which all channels of the MADRAS instrument contain measurements. Although specific embodiments have been described in detail, those skilled in the art will be able to observe that various modifications and variations to these details could be developed in light of the overall conclusions of the invention. Accordingly, the particular arrangements described are intended to be merely illustrative and not limiting as to the scope of the present invention to which the full scope of the appended claims and any equivalents thereof should be attributed.

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.Algorithm 1 Viterbi Algorithm Part 1: Initialization -Entry CorruptedScan: matrix [11 x Nf] matrix [11x Nf] t> corrupted scan - frames 37-485 -R r> corrected scan - frames 37-485 CorrectedScan: cweight:> cumulative distance of the corrected scan path %% iNITIALIZATION N, 4-11; NOT.

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.) <- 0; di(1 : N.) 4- 0 distances de branche de treillis distances_cum(1: N.) 4- oc; distances_curn(1) 4- 1 t> 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' < disto then > é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 <-1 TabG(1)<- 0; PerrnG(1) 4-- 0 for n = 1 N,- - 3 do do 4-0 for i = 1 -> 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) <- 0; data_c(1 : Ne) <- data_r(1: Nein) for j 1 -> 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)<- dp(j)-1- abs(data_c(i,n) - data_r(i, n 3))" end for di(j) +- (diCe; dp(j) = (dp(jW end for index_of_min(di) ; idp <- indexof_min(dp) if do > di(idi) AND TabC(iG) <n then iG 4- iG +1; TabG(iG)i- n +1 PermG(iG) t idp end if end for iC iG -1; for i = 1 -> 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 <- data_r old_NGindex NGindex for i= 1-> 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% <- 11; N. 4- 2.71r >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 < disto then >é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; cweight211Tc CONST: #channels; # states of the Viterbi algorithm WD1 + - CONST: branch measurement multiplier FUTUR 4- 10 CONST: # future samples in the branch metric do (1: N.) <- 0; di (1: N.) 4- 0 lattice branch distances distances_cum (1: N.) 4- oc; distances_curn (1) 4- 1 t> cumulative distance for each state iast_index (1: N.) 4- N. r> index of the last valid sample received for i = 1 -> Nc do r> place the scan in the vector format and initialize the output data 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 initialize state path vectors for k - = 1 N. do for n = 1 -> N, do sample_received (n, k) 4- scan (n) end for end for dd (1: FUTURE) 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> working variables and buffer memories olddistancescurn (1: N.) 4- 0 oid_last_index (1: N.) 4- 0 following the algorithm 2 30072 32 22 Algorithm 2 Viterbi Algorithm Part 2: Loop main ... continued from algorithm 1 9/0% --- MAIN: SHAPING ON SAMPLE - 910% for n = Ne-F1-NeNf- FUTU R do for k = 1 -> N do> calculate the branch metric of the sample lon n for each state k do (k) abs (data (n) - sample received (k, lastindes (k) - N 1)) 4` dd (1: FUTURE) abs (data (n + 1: n FUTUR) - sample_received (k, last_index (k) - + 1)) i dd 4- sort (dd)> sort in ascending order 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> update state vectors pre_k k - 1 If k = = 0 then pre k N end If dist_ old_distances_curra (k) do (k) D branch distance kk distl old_distances_cum (pre_k) mean (di 1 t> branch distance k-1 k if dist '<disto then> sample considered as a glitch distances_curn (k) 4- disti sample received (:, k) old_sample_received (:, pre k) fast index (k) 4- old lastindez (pre_k) else> sample considered valid distart.ces_cum (k) 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> path with the lowest cumulative distance cweight 4- di stances_curn (sid) D corresponding cumulative distance for i = 1 -4- ./V. do for j = 1 Nf do C orrectedScan (i, j) samplereceived ((j - 1) - N f i, sid) p place the corrected scan in an end for matrix format end for OUTPUT C orr ectedS can; cweight Algorithm 3 Recursive Prototype - Corrupted Scan Input - frames 37 to 485 D weight to be assigned to samples in non-CorruptedScan frames: matrix [11 x N 1] Mweight: CON ST corrupted-Output D tags for frames uncorrupted Fvalid: vector [1 x Nf] Grnetric: vector [1 x 11 - N1] D weight for each sample in CorruptedScan %% - INITIALIZATION CONST: #channels; # states of the Viterbi DCONST algorithm: maximum order of rotation of DCONST channels: corrupted frame neighborhood to be tagged CONST: maximum number of iterations Nc 4- 11 unspecified assumed frame index D beacons for non-corrupted frames NG 4- - 1 weight for each sample 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, RECURRING: DETECTION AND REMOVAL OF CORRUPTED FRAMES RUN t- 1; ITER 0 data r4- CorruptedScan while RUN-1 do ITER ITER + 1 4- DetectRemove (see Algorithm 5) end while %% --BALIZE CORRUPT FRAMES AND ATTRACT WEIGHTS TO VITERBI% ° / 0 4- Your Goose ight ( see Algorithm 6) Fvalid OUTPUT; Gmetric Algorithm 4 Recursive "Prototype" Algorithm: DetectRemove DetectRemove Part% Tc, - DETECTION OF CORRUPT FRAMES iG <-1 TabG (1) <- 0; PerrnG (1) 4-- 0 for n = 1 N, - - 3 do do 4-0 for i = 1 -> 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) <- 0; data_c (1: Ne) <- data_r (1: Nein) for 1 -> 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, ## EQU1 ## ) = (dp (jW end for index_of_min (di); idp <- indexof_min (dp) if do> di (idi) AND TabC (iG) <n then iG 4- iG +1; TabG (iG) i- n + 1 PermG (iG) t idp end if end for iC iG -1; for i = 1 -> iG do TabG (iG) - (- TabG (iG + 1); PermG (iG) 4- Perrne (ie -I- 1) end for %% DELETE CORRUPTED FRAMES 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 <- data_r old_NGindex NGindex for i = 1-> iC do %% initialize counters for this recursion. Loop on the frames: Detection P. calculate the distance calculate the distance i> The frame n + 1 presents a problem - 9'0 ° / 0 new glitchs found r> correct the order of the channels> delete the corrupted frames 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> no new glitches found RUN 4- end if if ITER> = MITER then RUN 4-0 end il 3007232 - 25 Algorithm 5 Algorithm «Prototype Recursive: TagWeight Part TagWeight ° / 0% - SCAN CORRUPT FRAMES 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 it max (1, n - DD); i2 rain (Nf, ra DD - 1) i2) 0 end If end for cyce, - ATTRIBUTE WEIGHTS FOR VITERBI ALGORITHM for n = 1 N1 do for i 1 - + Nc do if Fvalid (n) == 0 then Gmetric ((n - 1) - Nf i) 4-1 Cinetric ((n - 1) - Nf i) 4- Mweight end if end for end to t> mark the corrupted frame e and its neighbors t> tag valid samples Algorithm 6 Weighted Viterbi Algorithm Part 1: Initialization Input CorruptedScan: matrix [11 x Nf] Grnetric: vector [1 x 11 - N1] -Range CorrectedScart: matrix [11 x Nf] cweight: > corrupted scan - 37-485 frames of the branch metric for each sample in CorruptedScan corrected scan - frames 37 to 485 cumulative scan path distance corrected %% INITIALIZATION 910% <- 11; N. 4- 2.71r> CONST: #channels; # states of the Viterbi algorithm PV_Di N / Tr> CONST: branch measurement multiplier FUTUR -4-10> CONST: # future samples in the branch metric do (1: Na) 4- 0; cd1 (1: Na) 4- 0 lattice branch distances distances cum (1: N.) 4- oo; distances_curra (1) 4- 1 cumulative distance for each state last_index (1: Na) 4- N. r 'index of the last valid sample received for i = 1 -> Nc do r' place the scan in the vector format and initialize the output data 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 'initialize state path vectors 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 search for weights 00 If Grnetric (n) then Plum (n) 4- 1 else Plum (n) 4- G end if end for dd (1: FUTURE) 0 ; pre_k 4- 0; distortion 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 ... following algorithm 7> variables Algorithm 7 Algorithm of Viterbi Weighted Viterbi Part 2: Main Boude Following the algorithm 6%. PRINCIPAL: SHAPING ON SAMPLES - ° h.% for 71 - = Nc 4- 1 Nc -N1 - FUTUR do for k = 1 -> N, do r> calculate the branch metric of sample n for transitions k - k do (k) 4- abs (data (n) - sample_received (k, last_index ( k) - No + 1)) to end for if Prune == 0 then for k = 1 -> N. d calculate the branch metric of sample n for transitions k-1 dd (1: FUTURE) 4- abs (data (n + 1: n + FUTUR)) - sarnple received (k, last_index (k) - N + 1)) to dd sort (dd) D sort in ascending order 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> update the state vectors pre k 4-- k - 1 if k == 0 then pre_k N end if disto old_distances_curn (k) do (k) D branch distance kk disti dd distances_cum (pre_k) Grnetric (n) - mea D branch distance k-1 -ek If disti <disto then> sample considered to be a glitch distances_curn (k) dist 'sample_received (:, k) old sarnple_received (:, pre_k) last_index (k) 4- aldjast_index ( pre k) else> sample considered to be valid 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> branches k -1 - k do not exist for k = 1 -> N. do distances_cum (k) 4-- distances cum (k) do (k) Last index (k) weights 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 path with the lowest cumulative distance ctoeight = distances_cum (sid) D distance corresponding cumulative for i = 1 -> N, do for j = 1 -> Nf do Corrected Scan (i, j) samplereceived ((j - 1) - Nfsid) r> set the corrected scan in mn end for matrix format end for OUTPUT CorrectedScdn; cweight

Claims (5)

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é.REVENDICATIONS1. A method for automatically detecting and / or correcting errors in a multiplexed data stream, comprising: obtaining a multiplexed data stream containing data samples, said data stream comprising a plurality of interleaved data channels cyclically arranged in frames, each data channel having an assigned slot within each frame, in which a sample of data, presumably belonging to said channel, is located, said data samples comprising ordinary data samples and samples of additional data, said additional data samples causing a shift of subsequent ordinary data samples from the intervals, and identification of said additional data samples by execution of a Viterbi algorithm, having as states associated with each sample data, possible offsets caused by additional data samples received up to the associated data sample and in which allowed transitions between states comprise a first transition, representing a reception of an ordinary data sample and, therefore, an offset constancy, and a second transition, representing a reception of an additional data sample and, therefore, an incremental shift of one 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.The method of claim 1, comprising generating a corrected multiplexed data stream that differs from the multiplexed data stream in that it does not contain said identified additional data samples. 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 103. The method of claim 1 or 2, wherein each allowed transition has a weight associated therewith, the weight associated with a first transition from a first state to a second dependent state. 4. 154. 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.5. A difference between the data sample associated with said second state and a direct predecessor data sample assumed in the same data channel as said data sample associated with said second state, and the associated weight. at a second transition from a first state to a second state depending on a difference between at least one data sample subsequent to said data sample associated with said second state and a predicted direct data sample in the same data channel as said at least one subsequent data sample. The method of claim 3, wherein said executing said Viterbi algorithm comprises constructing a plurality of paths through said states, each of said plurality of paths corresponding to a specific sequence of first and second transitions, each of said paths of said plurality of paths having associated therewith a cumulative weight corresponding to the sum of the weights associated with the first and second path transitions, and searching for a path of least weight among said plurality of paths. The method of claim 4 when dependent on claim 2, wherein each of said paths of said plurality of paths has associated therewith a sequence of presumed ordinary data samples, and wherein said corrected multiplexed data stream corresponds to the sequence of data samples associated with the minimum weight path found. The method of any one of the preceding claims, wherein prior to performing said Viterbi algorithm, frames capable of containing at least one additional data sample are identified. The method according to claim 6, when dependent on claim 3, wherein the weights associated with said first and second transitions from a first state to a second state are changed according to whether the data sample associated with said second state is or not to a frame identified as being capable of containing at least one additional data sample. A computer program comprising processor operable instructions, which, when executed by a processor, causes said processor to execute a method according to any one of claims 1 to 7. 9. A device computer system comprising a processor and a non-volatile memory preferably containing in memory processor-operable instructions, which, when executed by said processor, cause said processor to execute a method according to any one of the claims 1 to 7.
FR1355645A 2013-06-17 2013-06-17 METHOD FOR DETECTION AND / OR AUTOMATIC CORRECTION OF ERRORS IN A MULTIPLEXED DATA STREAM Active FR3007232B1 (en)

Priority Applications (1)

Application Number Priority Date Filing Date Title
FR1355645A FR3007232B1 (en) 2013-06-17 2013-06-17 METHOD FOR DETECTION AND / OR AUTOMATIC CORRECTION OF ERRORS IN A MULTIPLEXED DATA STREAM

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
FR1355645A FR3007232B1 (en) 2013-06-17 2013-06-17 METHOD FOR DETECTION AND / OR AUTOMATIC CORRECTION OF ERRORS IN A MULTIPLEXED DATA STREAM

Publications (2)

Publication Number Publication Date
FR3007232A1 true FR3007232A1 (en) 2014-12-19
FR3007232B1 FR3007232B1 (en) 2017-02-17

Family

ID=49237334

Family Applications (1)

Application Number Title Priority Date Filing Date
FR1355645A Active FR3007232B1 (en) 2013-06-17 2013-06-17 METHOD FOR DETECTION AND / OR AUTOMATIC CORRECTION OF ERRORS IN A MULTIPLEXED DATA STREAM

Country Status (1)

Country Link
FR (1) FR3007232B1 (en)

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4641327A (en) * 1985-07-09 1987-02-03 Codex Corporation Frame synchronization in trellis-coded communication systems
US6023477A (en) * 1996-12-18 2000-02-08 Ericsson Inc. System and method of time and frequency synchronization in a radiocommunication system

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4641327A (en) * 1985-07-09 1987-02-03 Codex Corporation Frame synchronization in trellis-coded communication systems
US6023477A (en) * 1996-12-18 2000-02-08 Ericsson Inc. System and method of time and frequency synchronization in a radiocommunication system

Also Published As

Publication number Publication date
FR3007232B1 (en) 2017-02-17

Similar Documents

Publication Publication Date Title
EP0996232B1 (en) Method and apparatus for interleaving a sequence of data elements
EP1080432B1 (en) Data acquisition system comprising means for analysing and storing in real time
EP1483693A2 (en) Computer representation of a data tree structure and the associated encoding/decoding methods
US9514505B2 (en) Watermark detection with payload
FR2635207A1 (en) Method and device for processing an analog electrical signal with a view to obtaining a binary signal whose parameters can be analysed which is representative of its significant component
GB2316587A (en) Multiplexing add-compare-select processors in Viterbi dedcoders
WO2010066563A1 (en) Device with datastream pipeline architecture for recognizing and locating objects in an image by detection window scanning
EP1841078A1 (en) Dual channel receiver circuit
FR2885708A1 (en) DEVICE AND METHOD FOR DETERMINING A POSITION OF A BIT ERROR IN A BITS SEQUENCE
FR3007232A1 (en) METHOD FOR DETECTION AND / OR AUTOMATIC CORRECTION OF ERRORS IN A MULTIPLEXED DATA STREAM
FR3100629A1 (en) CAN bus communication
EP2833555B1 (en) Improved method for decoding a corrector code with message passing, in particular for the decoding of LDPC codes or turbo codes
FR2887052A1 (en) GENERIC RADAR ARCHITECTURE
EP0463598A1 (en) Convultional code decoding circuit performing the viterbi algorithm step of memorisation and backtracing of the surviving paths
EP3216213B1 (en) Method for detecting defective pixels
WO2012004321A1 (en) Method of determining at least one parameter of an error correcting code implemented on transmission, corresponding device and computer program
EP3087678B1 (en) Error correction with test of a plurality of lengths for a data frame
FR3094508A1 (en) Data enrichment system and method
WO2006087497A2 (en) Frame-synchronisation method and device
FR2887096A1 (en) Electronic system e.g. radar, architecture, has single synchronization link supplying common synchronization message to sub-modules, and data exchange asynchronous links exchanging messages between two processing nodes
EP0982866B1 (en) Method for convolutional coding and transmission of a stream of packets of digital data, and a method and apparatus for corresponding decoding
EP0769854B1 (en) System enabling correct decoding, in binary message form, of a magnetic code recorded on a magnetic track
EP1901555A1 (en) Image deinterlacing system.
FR2983665A1 (en) METHOD FOR GENERATING A MAXIMIZED LINEAR CORRECTING CODE, METHOD AND DEVICE FOR DECODING A CODE
EP0343083B1 (en) Loss of synchronisation detection device, and its use in a digital transmission network

Legal Events

Date Code Title Description
PLFP Fee payment

Year of fee payment: 3

PLFP Fee payment

Year of fee payment: 4

PLFP Fee payment

Year of fee payment: 5

PLFP Fee payment

Year of fee payment: 6

PLFP Fee payment

Year of fee payment: 7

PLFP Fee payment

Year of fee payment: 8

PLFP Fee payment

Year of fee payment: 9

PLFP Fee payment

Year of fee payment: 10

PLFP Fee payment

Year of fee payment: 11