Brevet FR2960726A1 — publié le 20111202

Procédé de transmission de symboles codés, procédé de décodage, produit programme d'ordinateur, moyen de stockage et noeuds correspondants. 1. DOMAINE DE L'INVENTION L'invention concerne une technique de codage distribué dans un réseau maillé, permettant de transmettre un mot de code à un ou plusieurs noeuds destination. Le mot de code comprend des symboles codés, chaque symbole codé étant une combinaison linéaire de symbole source. Les symboles source sont transmis par un ou plusieurs noeuds source. Un symbole peut être un bit, un bloc de bits, un paquet regroupant plusieurs blocs de bits. La génération des symboles codés du mot de code est répartie parmi une pluralité de noeuds du réseau maillé, comprenant par exemple le ou les noeuds source (une combinaison linéaire pouvant être limitée à un seul symbole source) et un ou plusieurs noeuds relais (chaque noeud relais pouvant combiner plusieurs symboles source qu'il reçoit). Dans une variante, tous les symboles codés du mot de code sont générés par les noeuds relais. Cette technique, consistant pour les noeuds relais à émettre un symbole codé qui est une combinaison linéaire des symboles source reçus au lieu de retransmettre un des symboles source qu'ils ont reçus (fonction de routage), est appelée codage réseau (en anglais « network coding »). Elle a été introduite par R. Ahlswede and co. (voir par exemple l'article suivant : R. Ahlswede, N. Cai, S-Y. R. Li, and R. W. Yeung, "Network information flow", IEEE Trans. Inform. Theory, Vol. 46, pp. 1204-1216, July 2000). Très rapidement, de nombreux articles ont démontré l'apport de cette nouvelle technique, notamment en termes de gain en bande passante (augmentation du débit des données) et en termes d'utilisation de la capacité de réseau. Comme détaillé par la suite, elle peut aussi être utilisée pour construire un code correcteur d'erreurs (FEC, pour « Forward Error Correction » en anglais) afin d'optimiser la robustesse du réseau. L'invention s'applique notamment, mais non exclusivement, dans le contexte d'un réseau maillé de type sans fil. 2. ARRIÈRE-PLAN TECHNOLOGIOUE On s'attache plus particulièrement dans la suite de ce document à décrire la problématique existant dans le contexte d'un réseau maillé sans fil, à laquelle ont été confrontés les inventeurs de la présente demande de brevet. L'invention ne se limite bien sûr pas à ce domaine particulier d'application, mais présente un intérêt pour toute technique de codage réseau devant faire face à une problématique proche ou similaire. Comme indiqué plus haut, les noeuds relais sont utilisés pour retransmettre aux noeuds destination les symboles source envoyés par le ou les noeuds source, en offrant une diversité spatiale permettant de faire face aux erreurs de transmissions altérant le réseau. Deux types d'erreurs sont envisageables dans un réseau maillé sans fil : - un premier type correspond aux erreurs dues à des masquages causés par un ou plusieurs obstacles, par exemple par un individu traversant le champ de transmission. Ces d'erreurs sont détectables par le noeud destination, par absence de détection de préambule de trame radio ou en analysant par exemple le niveau de signal radio reçu (RSSI, en anglais « Received Signal Strength Indication ») ou le rapport signal sur bruit (SNR, en anglais « Signal-to-Noise Ratio ») ; - un deuxième type correspond à des erreurs aléatoires dues à la transmission radio même, provoquant des altérations aléatoires des symboles transmis à des positions inconnues. Pour faire face aux erreurs dues à des masquages, une première technique connue consiste à réaliser des transmissions multiples d'un même message original à travers des chemins différents par l'intermédiaire des noeuds relais. L'utilisation des noeuds relais permet de créer une diversité spatiale, la probabilité d'avoir un obstacle sur tous les chemins est ainsi fortement réduite. Dans le cas de transmissions multiples, le noeud destination reçoit plusieurs versions du même message original (on parle ainsi de « copies »), qui sont potentiellement entachées d'erreurs différentes dues à la transmission radio. A partir des ces différentes copies, le noeud destination doit récupérer le message original, sans erreurs. Pour cela, une solution est alors d'utiliser un code de répétition. Malheureusement, le code de répétition a des performances très limitées, d'abord en terme de débit car il induit une forte diminution de la bande passante utile, ensuite en termes de pouvoir de correction qui s'avère bien plus faible que celui d'autres codes correcteurs classiques, tels que par exemple les codes BCH (Bose-Chaudhuri-Hocquenghem) ou Reed-Solomon. Une deuxième technique connue, dite de « code correcteur de réseau » (« network error correction » en anglais), consiste à coder le message original en générant des informations de redondance de façon distribuée parmi les noeuds relais, et transmettre en plusieurs parties le message codé (c'est-à-dire le message résultant du codage du message original) par différents chemins (chaque partie étant générée par un noeud relais différent et empruntant un chemin différent), au lieu d'effectuer des transmissions multiples du même message. Le principal avantage de cette deuxième technique connue est qu'elle affecte de façon modérée la bande passante utile. Un autre avantage est que nous avons maintenant la capacité de construire n'importe quels codes correcteurs en blocs linéaires tels que le code Reed-Solomon ou le code BCH, codes correcteurs très puissants, relativement aux codes à répétition. Inspiré du codage réseau, ce concept de « code correcteur de réseau », aussi appelé « code correcteur distribué », a été introduit dans l'article suivant : N. Cai and R. W. Yeung, "Network Coding and error Correction," IEEE Information Theory Workshop, Bangalore, India, Oct 20-25, 2002. Cet article montre que les codes correcteurs appliqués à un réseau peuvent être vus comme une extension des codes correcteurs classiques point à point. Les résultats classiques de la théorie de l'information ont alors été généralisés, et un noeud destination utilise un décodage classique de code correcteur point à point. Ainsi, dans la deuxième technique connue, le « code correcteur de réseau » est un cas particulier de codage réseau (« network coding »). Dans une variante de la deuxième technique connue, le code distribué (c'est-à- dire le code obtenu par les opérations réalisées par les noeuds relais) n'est pas un code correcteur. Dans cette variante (code distribué non correcteur), le décodage consiste à récupérer les symboles sources par combinaisons linéaires de symboles reçus (alors que dans le cas d'un code correcteur distribué, le décodage consiste à récupérer les symboles sources en utilisant le décodeur associé au code correcteur). On revient maintenant à la deuxième technique de « code correcteur de réseau ». Utilisons la notation classique des codes correcteur en blocs point à point (N, K), où K représente le nombre de symboles source à coder et N le nombre de symboles codés par le code correcteur. Chaque mot de code du code correcteur d'erreurs comprend N premiers symboles codés. Dans un codage distribué avec regroupement de K premiers symboles source (constitués chacun de L seconds symboles source), un ensemble de noeuds relais combinent K premiers symboles sources pour générer et envoyer de manière distribuée un mot de code de N premiers symboles codés (chaque premier symbole codé étant une combinaison linéaire de premiers symboles source, et comprenant L seconds symboles). Le noeud destination reçoit alors tout ou une partie (due aux masquages) du mot de code généré par les noeuds relais, avec éventuellement des erreurs (dues à la transmission radio). Il utilise son décodeur pour récupérer les premiers symboles codés non reçus (appelés aussi effacements) et éventuellement corriger les premiers symboles codés erronés. La taille des premiers symboles source étant de L seconds symboles, l'opération de combinaison est réitérée L fois dans un noeud relais, et l'opération de décodage est réitérée L fois dans un noeud destination. Un nombre L de décodage permet de décoder simultanément K premiers symboles source. Chaque combinaison est le résultat de l'addition de K premier symboles sources après multiplication de chaque premier symbole source par un coefficient prédéfini et fonction de la combinaison choisie. L'ensemble des coefficients multiplicateurs forme la matrice génératrice G du code distribué. La matrice génératrice G possède donc K colonnes et un minimum de N=K+2 lignes si l'on veut pouvoir corriger au moins une erreur. Rappelons que pour un code ayant une capacité de correction de R (R=N-K), si E est le nombre de symboles erronés reçus (erreurs dues à la transmission radio) et F le nombre de symboles effacés (symboles erronés localisés dus aux masquages), alors le décodeur sera capable de retrouver le mot de code d'origine si 2*E+F R. Les noeuds relais ont la charge de créer les combinaisons définies par la matrice génératrice G, chaque noeud relais prend en charge un certain nombre de lignes de G. Un inconvénient de la deuxième technique connue (que le code distribué soit ou non un code correcteur) est qu'elle est sensible aux masquages. En effet, lorsqu'un noeud relais n'a pas reçu tous les premiers symboles source d'un groupe de premiers symboles qu'il doit combiner, alors le noeud relais est dans l'incapacité de réaliser la combinaison prévue. Il ne peut donc transmettre la combinaison de premiers symboles source prévue (c'est-à-dire un des premiers symboles codés du mot de code), même si par ailleurs il a bien reçu certains des premiers symboles source de cette combinaison. Cette situation se produit dès qu'au moins un premier symbole source est manquant, donc chaque fois qu'une condition de masquage entre un noeud source et un noeud relais empêche le noeud relais de recevoir au moins un premier symbole source à combiner. En conséquence, le noeud destination devra positionner un effacement pour chaque combinaison manquante, ce qui diminue la capacité de décodage du code distribué. Ce problème apparaît immanquablement dans un réseau sans fil où les pertes de trames radio sont fréquentes. Cela est d'autant plus critique dans le contexte d'un réseau haut débit utilisant par exemple un canal radio 60GHz. Grâce à une largeur de bande étendue, les systèmes de transmission radio à 60GHz sont particulièrement bien adaptés pour une transmission de données très haut débit, mais une des difficultés de leur mise en oeuvre est le fort taux d'atténuation du signal radio conjugué au faible taux de réflexion sur les obstacles que l'on peut rencontrer dans l'environnement. Ce type de communications radio est donc fortement exposé aux pertes de trames radio. Par ailleurs, certaines applications dites « temps réel », notamment dans le domaine de l'audio et de la vidéo, requièrent un temps de latence très faible n'autorisant pas toujours la mise en place de protocoles de demande de retransmission. Un autre inconvénient de la deuxième technique connue, lorsque le code distribué est un code correcteur, est qu'elle est sensible aux erreurs aléatoires survenant pendant la transmission de données entre un noeud source et un noeud relais. En effet, lorsqu'un noeud relais reçoit un premier symbole source erroné (c'est-à-dire contenant un nombre de seconds symboles erronés supérieur à un seuil), toutes les combinaisons de premiers symboles source générées par le noeud relais avec ce premier symbole source contiendront des seconds symboles erronés aux mêmes positions que dans le premier symbole source. Dans le noeud destination, chaque tentative de décodage réalisée à ces positions erronées, risque d'échouer de par la présence d'un trop grand nombre de seconds symboles erronés. Si le noeud relais est capable de détecter des erreurs dans les premiers symboles source reçus, il devra donc s'abstenir de transmettre plus d'une combinaison d'un groupe de premiers symboles source si au moins un des premiers symboles source est erroné. Dans cette situation, le noeud relais qui doit générer plusieurs combinaisons d'un même groupe de premiers symboles ne sera pas utilisé de façon optimale. Le document de brevet US 7,380,193 décrit l'utilisation d'un code correcteur distribué dans un réseau maillé sans fil comportant un certain nombre de noeuds source, un certain nombre de noeuds relais, chacun recevant des paquets de données provenant de tous les noeuds source, et un noeud destination recevant les données provenant de tous les noeuds source et de tous les noeuds relais. Pour faire face aux erreurs de transmission, les noeuds relais génèrent de la redondance de façon distribuée, la redondance pouvant être par exemple un code Reed-Solomon. Dans ce document de brevet, il est considéré une connectivité complète entre les noeuds source, relais et destination. Il n'est aucunement question d'apporter des solutions en cas de masquage transitoire ou permanent intervenant en cours de fonctionnement du réseau. 3. OBJECTIFS DE L'INVENTION L'invention, dans au moins un mode de réalisation, a notamment pour objectif de pallier ces différents inconvénients de l'état de la technique. Plus précisément, dans au moins un mode de réalisation de l'invention, un objectif est de fournir une technique de codage distribué dans un réseau maillé, permettant d'optimiser les performances du code distribué face aux obstacles et notamment de diminuer l'impact des masquages sur la capacité de décodage. Un autre objectif d'au moins un mode de réalisation de l'invention est de fournir une telle technique permettant, lorsque le code distribué est un code correcteur distribué, de limiter l'impact des erreurs aléatoires survenant pendant la transmission de données entre un noeud source et un noeud relais. Encore un autre objectif d'au moins un mode de réalisation de l'invention est de fournir une telle technique qui n'introduise pas de complexité ni de temps de traitement supplémentaire dans le noeud destination, afin que cette technique soit compatible avec un système de communications avec une contrainte de faible latence (système « temps réel »). Un objectif complémentaire d'au moins un mode de réalisation de l'invention est de fournir une telle technique qui soit simple à mettre en oeuvre et peu coûteuse. 4. EXPOSÉ DE L'INVENTION Dans un mode de réalisation particulier de l'invention, il est proposé un procédé de transmission, à un noeud destination, de M symboles codés d'un mot de code définis chacun, sous la forme d'une combinaison linéaire de symboles source, par une ligne distincte d'une matrice de codage réseau. La matrice de codage réseau comprend N lignes, avec M De façon avantageuse, ledit noeud relais est incapable de générer le symbole codé particulier défini par ladite au moins une ligne qui lui est attribuée si au moins une des conditions suivantes : - au moins un symbole source, nécessaire pour générer ledit symbole codé particulier n'a pas été reçu par ledit noeud relais ; - au moins un symbole source, nécessaire pour générer ledit symbole codé particulier a été reçu par ledit noeud relais avec un niveau de qualité inférieur à un seuil prédéterminé. La vérification de la première condition correspond à la détection d'une situation de masquage. La vérification de la deuxième condition correspond à la détection d'erreurs aléatoires survenant pendant la transmission de données entre un noeud source et le noeud relais. Avantageusement, la matrice de codage réseau est une matrice génératrice d'un code correcteur linéaire (N,K), avec K un nombre de symboles source que le noeud destination doit retrouver à partir des symboles codés. Ainsi, on utilise un code réseau particulier qui est un code correcteur distribué, permettant d'optimiser la robustesse du réseau. Ceci garantit également que les lignes de la matrice d'encodage sont indépendantes les unes de autres, ce qui augmente les chances de décodage. Avantageusement, K = K1 + K2, avec K1 un nombre de symboles source réellement transmis par au moins un noeud source, et K2 un nombre de symboles source virtuels, de valeur nulle et transmis par aucun noeud source, ajoutés pour obtenir un code Maximum Distance Séparable. Ainsi, on obtient un code correcteur distribué MDS, avec une distance minimale de Hamming égale à N-K+1. Les K2 symboles sources virtuels ajoutés ne sont pas réellement émis par un noeud source, ils sont considérés comme émis par un noeud source virtuel. Ils sont de valeur nulle de sorte que ces symboles source virtuels n'interviennent pas dans les combinaisons linéaires effectuées par les noeuds relais. Avantageusement, la matrice génératrice d'un code correcteur linéaire (N,K) est une matrice systématique telle que les K premiers symboles du mot de code sont lesdits K symboles source. Ainsi, l'opération de décodage est simplifiée puisque les K premiers symboles du mot de code correspondent aux K symboles source émis par le ou les noeuds source. Dans un autre mode de réalisation de l'invention, il est proposé un procédé de décodage, par un noeud destination, de M symboles codés d'un mot de code définis chacun, sous la forme d'une combinaison linéaire de symboles source, par une ligne distincte d'une matrice de codage réseau. La matrice de codage réseau comprend N lignes, avec M Dans un autre mode de réalisation de l'invention, il est proposé un produit programme d'ordinateur qui comprend des instructions de code de programme pour la mise en oeuvre du procédé précité (dans l'un quelconque de ses différents modes de réalisation), lorsque ledit programme est exécuté sur un ordinateur. Dans un autre mode de réalisation de l'invention, il est proposé un moyen de stockage lisible par ordinateur, stockant un programme d'ordinateur comprenant un jeu d'instructions exécutables par un ordinateur pour mettre en oeuvre le procédé précité (dans l'un quelconque de ses différents modes de réalisation). Dans un autre mode de réalisation de l'invention, il est proposé un noeud relais adapté pour participer à la transmission, vers un noeud destination, de M symboles codés d'un mot de code définis chacun, sous la forme d'une combinaison linéaire de symboles source, par une ligne distincte d'une matrice de codage réseau. La matrice de codage réseau comprend N lignes, avec M Dans un autre mode de réalisation de l'invention, il est proposé un noeud destination, adapté pour décoder M symboles codés d'un mot de code définis chacun, sous la forme d'une combinaison linéaire de symboles source, par une ligne distincte d'une matrice de codage réseau. La matrice de codage réseau comprend N lignes, avec M Pour faire face aux pertes de trames radio entre les noeuds source et le noeud destination, les trois noeuds relais 140, 150 et 160 relayent les paquets source Sa, Sb et Sb. est composé de trois noeuds source SRC1, SRC2 et SRC3 (référencés 110, 120, 130 respectivement), de trois noeuds relais REL1, REL2 et REL3 (référencés 140, 150, 160 respectivement) et d'un noeud destination DEST (référencé 170). Dans les noeuds relais et le noeud destination, les paquets sont reçus avec une certaine qualité dépendant notamment de la puissance radio reçue, celle-ci étant corrélée entre autre à la puissance émise, aux gains d'antenne de transmission et de réception, à l'orientation des antennes, à la distance entre les noeuds émetteur/récepteur, à la présence d'obstacle et aussi à la réflexion des ondes radios dans l'environnement. Pour faire face aux erreurs aléatoires de transmission, un code correcteur d'erreur produit est implémenté. En premier lieu, chaque paquet source est encodé dans un des noeuds source, selon un premier code correcteur, appelé code correcteur source et qui est par exemple un code Reed-Solomon. En second lieu, les noeuds relais combinent entre eux les trois paquets source Sa, Sb et Sc, afin de créer un second code correcteur qui est un code correcteur distribué. Un paquet peut ici être considéré comme un symbole vis-à-vis du code correcteur distribué. Dans l'exemple de la figure 1, chaque noeud relais transmet trois combinaisons linéaires des trois paquets source Sa, Sb et Sc. Les trois combinaisons de paquets émises par le noeud REL1 sont notées r11, r12, r13 et sont transmises dans la trame radio 145. Les trois combinaisons de paquets émises par le noeud REL2 sont notées r21, r22, r23 et sont transmises dans la trame radio 155. Les trois combinaisons de paquets émises par le noeud REL3 sont notées r31, r32, r33 et sont transmises dans la trame radio 165. Comme détaillé à la figure 3, le second code correcteur est dans cet exemple un code Reed-Solomon qui a pour paramètres N=12 et K=3. On verra par la suite que, dans cet exemple de réalisation, la technique proposée consiste à étendre ce second code de façon à proposer des combinaisons alternatives aux noeuds relais. Le regroupement des trois paquets source constitue un groupe de paquets, et plusieurs groupes de paquets peuvent être gérés simultanément dans le réseau. Dans l'exemple de la figure 1, un seul groupe de trois paquets est constitué. De plus, la valeur du paramètre K=3 n'est en aucun cas limitative, toute autre valeur entière peut être choisie. Le noeud destination 170 reçoit les paquets des noeuds source et les paquets combinés provenant des noeuds relais avec une certaine qualité et applique alors un double décodage symbole par symbole. Un premier décodage selon le code correcteur source est effectué sur chaque paquet reçu (paquet source ou combinaison de paquets), puis un second décodage selon le code correcteur distribué est appliqué sur l'ensemble des paquets du groupe. Ces opérations sont effectuées à chaque supertrame, après réception des trames radio venant des noeuds source SRC1, SRC2, SRC3 et des noeuds relais REL1, REL2, et REL3. Lorsque le second décodage est effectué, si un paquet source ou une combinaison de paquets n'a pas été reçu par le noeud destination, alors une position d'effacement est considérée à la position du symbole correspondant au paquet manquant. La figure 2 illustre un exemple de structure d'une supertrame 200, d'une trame radio 205 et d'un paquet de données 210, dans un mode de réalisation particulier de l'invention et pour le réseau de la figure 1. Les noeuds transmettent leur trame radio 205 selon une séquence prédéfinie et répétée à chaque supertrame. Le noeud source SRC1 émet en premier sa trame radio 115, suivie de la trame radio 125 du noeud source SRC2 et de la trame radio 135 du noeud source SRC3, et enfin des trames radio 145, 155, 165 des noeuds relais REL1, REL2 et REL3 respectivement. La durée de la supertrame 200 est par exemple de lms. Le noeud source SRC1 est arbitrairement désigné comme noeud maître, qui impose le cadencement en émettant sa trame radio 115 en première position dans la supertrame. Les autres noeuds, dits noeuds esclaves, asservissent leur intervalle de temps de transmission en se basant sur l'instant de réception de la trame radio 115. En cas de masquage, un noeud esclave peut se référencer sur la réception d'une trame radio émise par un autre noeud esclave. La trame radio (la référence 205 exprime de manière générique l'une quelconque des références 115, 125, 135, 145, 155 et 165) est constituée de trois champs 211, 212, 213. Le premier champ 211 contient un préambule et un en-tête. Le préambule permet à l'électronique de réception radio de détecter un début de trame radio et de se synchroniser. L'en-tête de la trame radio contient des informations protocolaires comme par exemple l'identifiant du noeud émetteur, le rang de transmission de la trame radio dans la supertrame, la taille de la trame radio. Le second champ 212 contient des paquets sources émis par le noeud. Ces paquets contiennent des données issues des applications productrices qui sont connectées au noeud. Le troisième champ 213 contient les combinaisons de paquets relayés. Dans l'exemple de la figure 1, le second champ 212 est vide pour les noeuds relais, et le troisième champ 213 est vide pour les noeuds source. Un paquet 210 est constitué lui aussi de trois champs 221, 222, 223. Le premier champ 221 est un en-tête permettant à un noeud relais d'indiquer la combinaison de paquets effectuée. La donnée utile contenue dans cet en-tête est donc une valeur qui permet au noeud destination d'ordonner les paquets reçus avant d'effectuer le second décodage selon le code correcteur distribué. Cette information devient pertinente lorsque la combinaison effectuée par le noeud relais n'est pas fixée pour toute la durée d'opération du système. Un code correcteur spécifique peut être appliqué à l'en-tête du paquet pour protéger cette information face aux erreurs de transmission. De façon simple, on peut répéter plusieurs fois la donnée utile. Le second champ 222 contient les données applicatives et le troisième champ 223 constitue la redondance produite par le code correcteur source appliqué aux données du second champ 222. A titre d'exemple, la taille totale du paquet, notée L (taille en symbole), sera de 224 octets avec 4 octets pour l'en-tête, 204 octets de données utiles et 16 octets de redondance. Dans l'exemple de la figure 1, on s'aperçoit que les noeuds relais pourraient transmettre les combinaisons de paquets pendant la même supertrame que celle pendant laquelle ont été émis les paquets source. Cependant, si l'on veut apporter de la flexibilité au système et supporter de nombreuses applications, il faut permettre à un noeud du réseau d'être simultanément source, relais et destination. Par conséquent, il est intéressant d'introduire une latence d'une supertrame entre l'émission d'un paquet source et sa retransmission dans un noeud relais. De plus, cela présente l'avantage de donner du temps aux noeuds relais pour corriger des erreurs aléatoires de transmission avant de combiner les paquets sources. La figure 3 illustre sous forme matricielle les opérations de codage réseau effectuées par les noeuds source et relais de la figure 1, dans un mode de réalisation particulier de l'invention. Les opérations de codage effectuées par les noeuds relais 140, 150, 160 sont décrites respectivement par les équations 301, 302, 303. Chaque noeud relais possède son jeu de neuf coefficients du corps Fq, organisé sous forme de matrice 3*3, et l'opération de codage consiste à multiplier (multiplication et addition dans le corps Fq) cette matrice par la matrice 3*L des paquets source composée des trois lignes de longueur L : Sa, Sb et Sb. Le résultat est une matrice 3*L composée de trois lignes de longueur L. Le noeud relais 140 émet les trois combinaisons r11, r12, r13 (de longueur L) telles que : r11 = allSa+PllSb+l llSc r12 = a12Sa+P12Sb+Y12Sc r13 = a13Sa+P13Sb+/13Sc Le noeud relais 150 émet les trois combinaisons r21, r22, r23 telles que : r21 = a21Sa+P21Sb+/21Sc r22 = a22Sa+P22Sb+Y22Sc r23 - a23Sa+P23Sb+Y23Sc Le noeud relais 160 émet les trois combinaisons r31 , r32, r33 telles que : r31 = a31Sa+P31Sb+'31Sc r32 = a32Sa+P32Sb+y32Sc r33 = a33Sa+P33Sb+Y33Sc Les matrices 3*3 apparaissant respectivement dans les équations 201, 202, 203 seront appelés M1, M2, M3, comme montré dans les équations référencées 311, 312, 313. 20 Dans un mode de réalisation particulier, le code réseau distribué utilisé est un codage systématique : les K=3 premiers symboles du mot de code sont les paquets sources. Ils sont issus des paquets source transmis, sans combinaison, par les noeuds sources, et la matrice 3*3 associée est la matrice identité. L'équation 300 résume l'opération globale du réseau, dans un exemple classique 25 de code réseau. La matrice génératrice G est une matrice 12*3 composée de la matrice identité pour les données source, et de trois sous-matrices 3*3 qui sont attribuées aux trois noeuds relais 140, 150, 160 (ces trois sous-matrices correspondent aux trois matrices M1, M2, M3 discutées plus haut). Cette matrice génératrice G est multipliée par la matrice 30 3*L des paquets source (Sa, Sb et Sb) mentionnée ci-dessus. Le résultat est une matrice 12*L composée des 12 lignes de longueur L : (sl, s2, s3, r11, r12, r13, r21, r22, r23, r31, r32, r33)T, 15 représentant l'intégralité des données transmises par tous les noeuds sources et relais, et reçues (éventuellement avec des erreurs) par le noeud destination 170. Les coefficients de la matrice génératrice G sont choisis de façon qu'elle génère un code Reed-Solomon RS(12,3). Chacune des trois colonnes (1, 0, 0, «Il, a12, a13, a21, a22, a23, a31, a32, a33)T, (0, 1, 0, Nil, P12, P13, P21, P22, P23, P31, P32, P33)T et (0, 0, 1, Y11, Y12, ''13' ''21' Y22, Y23, Y31, Y32, Y33)T sont linéairement indépendantes, et par conséquent, chacune des L colonnes de la matrice (sl, S2, S3 , fil, r12, r13 , r21 , r22, r23, r31 , r32, r33)T constitue elle aussi un mot de code Reed-Solomon RS(12, 3). Un tel code RS(12,3) est capable de corriger E erreurs et F effacements tant que : 2*E+F 9. Dans un mode particulier de réalisation, les paquets source (de longueur L) Sa, Sb et Sc envoyés par les noeuds source 115, 125 et 135 sont eux-mêmes déjà des mots de code Reed-Solomon RS(L,S) avec L=220 et S=204. Un tel code RS(L,S) est capable de corriger E erreurs et F effacements tant que : 2*E+F 16. La combinaison du code RS(12, 3) (codage correcteur distribué) et de ce code RS(L,S) (code correcteur source) forme un code produit, qui possède un pouvoir de correction particulièrement élevé. On note en particulier que les paquets retransmis par les noeuds relais sont des combinaisons linéaires au-dessus du même corps de Galois des mots de code RS(L, S) envoyés par le noeud source, ils sont donc eux-mêmes des mots de code RS(L, S). Tout type de code Reed-Solomon peut être utilisé, ce peut être un code tronqué ou un code raccourci. Les N-K dernières lignes de la matrice génératrice G ne contiennent pas de valeur nulle. En effet, d'une part il est intéressant d'augmenter la redondance des paquets en combinant toujours tous les paquets du groupe. D'autre part, pour ne pas diminuer la distance de Hamming minimale entre deux mots de code, le nombre de valeur nulle dans une colonne de la matrice génératrice G doit être strictement inférieur à K. Comme il y a déjà K-1 valeurs nulles dans les K premières lignes de la matrice génératrice G (sous-matrice identité), cela n'autorise aucune valeur nulle dans les N-K lignes restantes. De retour sur la figure 1, si un obstacle survient entre le noeud relais REL1 140 et le noeud source SRC3 130, alors le noeud relais REL1 140 ne peut plus recevoir le paquet source Sc, et se retrouve dans l'incapacité de produire les combinaisons r11, r12, r13. Le noeud destination DEST 170 positionne des effacements pour les lignes r11, r12, r13. Supposons que le noeud destination soit éloigné des noeuds source et qu'il ne reçoive pas non plus les paquets source Sa, Sb et Sc. On s'aperçoit qu'au total le noeud destination positionne 6 effacements (pour les lignes s1, s2, s3, r11, r12, r13), ce qui ne laisse au code correcteur distribué qu'un pouvoir de correction de 1 erreur (2*1+6 = 8 9 mais 2*2+6 =10>9). Pour améliorer ce pouvoir de correction, et de décodage en général, le principe général de la présente technique consiste à étendre la matrice génératrice G (la matrice génératrice étendue que l'on obtient est notée G') en proposant des combinaisons supplémentaires qui ne nécessitent pas de disposer de tous les paquets source pour réaliser des combinaisons. L'équation 320 résume l'opération globale du réseau, dans un exemple de code réseau selon l'invention. La matrice génératrice étendue G' contient trois lignes supplémentaires r 1,rx2, 1'0 telles que: rx1 = c(,,ISa+P,ÇISb rx2=ax2Sa+1x2Sc rx3 = Px3Sb+Ix3Sc La ligne rxl ne combine que les paquets source Sa et Sb, la ligne rx2 ne combine que les paquets source Sa et Sc, et la ligne rx3 ne combinent que les paquets source Sb et Sc. Ces combinaisons ne sont pas attribuées à un noeud relais en particulier, elles sont choisies lorsqu'un noeud relais n'est pas en mesure de réaliser les combinaisons qu'il doit effectuer par défaut. Le code correcteur distribué devient alors un code Reed-Solomon RS(15,3). Bien entendu, cela suppose ((~~de((~~calculer ((~~de nouveaux coefficients de G : an, a12, a13, a21, a22, a23, a31, a32, a33, P11' P12, P13, P21, P22, P23, P31, P32, P33, Y11' Y12, Y13, Y21, Y22, Y23, Y31, Y32, Y33 deviennent a'11, (1'12, (1'13, a'21, (1'22, (1'23, (1'31, (1'32, (1'33, 11, 12, 13, 21, 22, 13'23, 13'31, 13'32, 13'33, Y'11, Y'12,Y'13,Y'21,Y'22, Y' 23, Y'31,Y'32, Y'33 On remarque que le nombre de valeur nulle dans chaque colonne de la matrice génératrice étendue G' devient égal à 3 alors que le paramètre K du code est également 3. Pour maintenir un code Reed-Solomon, il faudrait un paramètre K égal au moins à 4. L'astuce consiste alors à considérer un paquet source supplémentaire virtuel tel que tous ses symboles sont de valeur nulle. Le code Reed-Solomon obtenu est un code RS(15,4), sachant que le paquet source virtuel est connu d'avance et n'est jamais transmis sur le réseau. L'équation 320 est toujours valable et le code a une capacité de correction maximale de 4 erreurs : 2*4+3 = 11 15-4. En effet, il y a toujours trois effacements au minimum puisque les noeuds source et relais constituent et transmettent au maximum douze lignes sur les quinze possibles au total. C'est une capacité de correction équivalente au RS(12,3) initial (2*4+0=8 12-3). En revenant à la situation de masquage citée précédemment, si le noeud relais REL1 140 n'a pas reçu le paquet source Sc, alors il choisit de retransmettre les lignes s1, s2, et rx1. En conséquence, le noeud destination DEST 170 positionne 6 effacements pour les lignes s3, r11, r12, r13, rx2 et rx3. Le code correcteur distribué peut donc corriger au plus 2 erreurs (2*2+6=10 11). Cela représente une capacité de correction deux fois plus grande que dans le cas du code RS(12,3). Tout ceci n'est possible que si le noeud relais peut indiquer au noeud destination les combinaisons qu'il a choisies pour la retransmission. Le moyen utilisé est par exemple un en-tête spécifique pour chaque paquet. Lorsqu'un noeud source émet un paquet source, la valeur de l'en-tête est nulle. Si un noeud relais réalise les combinaisons prévues par défaut, l'en-tête n'est pas modifié et sa valeur reste nulle. Si le noeud relais choisit une combinaison qui n'est pas celle prévue par défaut, il indique alors dans l'en-tête le numéro de la ligne correspondante dans la matrice génératrice étendue G'. Dans l'exemple ci-dessus, le noeud relais REL1 140 émet : - à la place du paquet r11, un paquet avec une valeur d'en-tête égale à 1 (pour indiquer qu'il a été généré selon la Ère ligne de G'), - à la place du paquet r12, un paquet avec une valeur d'en-tête égale à 2 (pour indiquer qu'il a été généré selon la 2ème ligne de G'), et - à la place du paquet r13, un paquet avec une valeur d'en-tête égale à 13 (pour indiquer qu'il a été généré selon la 13ème ligne de G'). Pour compléter la solution, il devient également possible, dans un noeud relais, de ne pas combiner un paquet source qui est reçu mais contient des symboles erronés. Si le noeud relais a le temps de détecter des erreurs dans un paquet reçu, ou même le temps de tenter de les corriger, alors il est en mesure de déterminer si les paquets à combiner sont erronés ou pas. Pour éviter de dupliquer les erreurs, le noeud relais ne réalise pas de combinaison incluant un paquet erroné (c'est-à-dire possédant un niveau de qualité inférieur à un seuil prédéterminé). Le principal avantage d'étendre la matrice génératrice est d'augmenter la capacité de décodage du code distribué en cas d'erreurs de transmission provoquées par de mauvaises conditions radio (masquages ou erreurs aléatoires). Un autre avantage de cette méthode est qu'elle ne rajoute aucun traitement supplémentaire dans les noeuds source, relais ou destination. La matrice génératrice étendue G' est construite à l'initialisation du système, elle est unique pour tous les noeuds et est utilisée pendant tout le fonctionnement du réseau, quelles que soient les conditions de transmission. La figure 4 présente un dispositif de communication 400 compris dans chacun des noeuds source 110, 120, 130, relais 140, 150, 160 et destination 170 du réseau de la figure 1 (110, 120, 130, 140, 150, 160, 170), dans un mode de réalisation particulier de l'invention. La technique proposée (voir les exemples d'algorithmes décrits ci-après en relation avec les figures 6 et 7) se réalise indifféremment comme un programme exécuté sur une machine de calcul reprogrammable (par exemple un PC, un DSP, ou un microcontrôleur) ou sur une machine de calcul dédiée (par exemple un ensemble de portes logiques comme un FPGA ou un ASIC). On présente maintenant plus en détail la structure et le fonctionnement du dispositif de communication 400. Une unité centrale de calcul (CPU) 410 exécute le code programme implémentant les algorithmes précités, et qui est stocké dans la zone ROM d'une mémoire RAM/ROM (« Read Only Memory » / « Random Access Memory ») 420. Ce code programme permet, quand il est exécuté, de s'interfacer avec un opérateur au travers d'une interface utilisateur 415 pour configurer les différents modules actifs du dispositif 400 : module d'interface applications 405, module encodeur 455, module décodeur 425, module d'interface émetteur radio 430, module d'interface récepteur radio 435. Pour ne pas surcharger la figure, les connections entre ces différents modules et le CPU 410 ne sont pas représentées. La zone ROM de la mémoire RAM/ROM 420 stocke des variables nécessaires pour l'invention, comme par exemple une matrice génératrice d'encodage prédéterminée (correspondant à la matrice génératrice étendue G' ci-dessus). L'interface utilisateur 415 est utilisée afin que l'utilisateur entre les paramètres nécessaires à l'invention et non présents en mémoire, tels que : la capacité de correction R du code distribué si l'utilisateur désire utiliser une autre matrice que celle mémorisée dans la mémoire 420, ou les paramètres des applications supportées (débit entrant, débit sortant). Ces variables sont stockées dans la zone RAM de la mémoire 420. Selon les paramètres utilisateur, le CPU 410 calcule les différentes variables qui sont utilisées par les différents modules telles que : le nombre de paquets à transmettre, à recevoir, à retransmettre, le nombre de groupe de paquets et la constitution de ces groupes, la séquence TDMA, la taille des trames radio, la nature des paquets contenus dans chaque trame radio. Les informations utiles à chaque module sont fournies par le CPU et sont stockées dans des registres propres aux modules. Le dispositif 400 est en relation avec les applications par l'intermédiaire du module interface applications 405. Pour chacun des noeuds source (référencés 110, 120 et 130 sur la figure 1), le module interface applications 405 récupère les données provenant des applications productrices connectées au dispositif 400, et les stocke dans une mémoire d'encodage 460 de type RAM. Pour un noeud destination (référencé 170 sur la figure 1), le module interface applications 405 lit les données applicatives reçues qui sont disponibles dans la mémoire de décodage 465 de type RAM, et les transmet aux applications consommatrices connectées au dispositif 400. Le module décodeur 425 est en charge de décoder les paquets reçus sur l'interface récepteur radio 435 et disponibles dans la mémoire de réception de type RAM 470. Lorsqu'un nouveau paquet est reçu, le module décodeur 425 effectue un décodage de l'en-tête du paquet et un décodage des données utiles selon le code correcteur source. Le résultat est stocké en mémoire de réception 470 à la place du paquet reçu, et est également stocké dans la mémoire de retransmission de type RAM 480 s'il s'agit d'un paquet source. Le module décodeur 425 maintient une table de réception dont un exemple est donné à la figure 5 (voir description détaillée ci-dessous). Cette table renseigne sur l'état courant de chaque ligne de chaque groupe : indication de si la ligne (paquet source ou combinaison) a été reçue et si le décodage selon le code correcteur source a été réalisé avec succès (la ligne ne contient plus d'erreur). Cette table de réception est stockée dans la mémoire de retransmission 480 de façon que le module encodeur 455 puisse aussi y avoir accès en lecture. Lorsque tous les paquets d'une supertrame ont été réceptionnés, le module décodeur 425 effectue le décodage des groupes de paquets selon le code correcteur distribué. Cette opération n'est effectuée que pour les groupes de paquets comportant des données à destination des applications consommatrices connectées au noeud. Les paquets sources décodés sont stockés dans la mémoire de décodage 465. Pour gérer la latence d'une supertrame entre l'émission de paquets sources et leur retransmission, il est nécessaire de doubler certaines mémoires. En effet, la mémoire de décodage 465 doit être doublée avec une utilisation alternée de chaque bloc mémoire. Le premier bloc contient les données issues des paquets sources décodés pendant la supertrame courante, et le second bloc contient les données issues des paquets sources décodés pendant la supertrame précédente. Ces données plus anciennes sont en cours de transfert vers les applications consommatrices et ne doivent pas être écrasées par les nouvelles données. Au début de la supertrame suivante le rôle des blocs s'inverse : le premier bloc contient les données de la supertrame précédente, et le second bloc accueille des données transmises pendant la nouvelle supertrame. De même la mémoire de réception 470 est doublée avec une utilisation alternée de chaque bloc mémoire. Le premier bloc contient les paquets source qui sont reçus pendant la supertrame courante et qui seront décodés selon le code correcteur distribué pendant la supertrame suivante. Le deuxième bloc contient les paquets sources qui ont été reçus pendant la supertrame précédente, et les combinaisons de paquets qui sont reçus pendant la supertrame courante. Les paquets de ce deuxième bloc sont décodés selon le code correcteur distribué pendant la supertrame courante. Enfin, la table de réception doit être également doublée et utilisée de la même façon. Le module encodeur 455 est en charge de construire les paquets à transmettre sur le réseau. En premier lieu, il récupère les données applicatives source contenues dans la mémoire d'encodage 460, il les organise par bloc de taille égale au champ de données utiles 222 d'un paquet (par exemple 204 octets), il encode chaque bloc de données avec le code correcteur source (par exemple RS(220, 204)), il ajoute ensuite un en-tête de valeur nulle, et stocke le tout dans la mémoire de transmission 475. Le nombre de paquets à construire dépend du débit des applications source. En second lieu, le module encodeur 455 construit les combinaisons de paquets à partir des paquets source disponibles dans la mémoire de retransmission 480. Pour cela, il attend la fin de la réception des paquets, consulte la table de réception maintenue par le module décodeur 425, et construit les combinaisons en fonction des informations contenues dans la table de réception. Le résultat est stocké dans la mémoire de transmission 475. Ces opérations ne sont pas très coûteuses en temps de traitement, et peuvent être effectuées durant la supertrame courante. L'interface émetteur radio 430 est chargée de la création des trames, à partir des paquets stockés en mémoire de transmission 475, et de la transmission de ces trames à un dispositif émetteur/récepteur radio 440. Le dispositif émetteur/récepteur radio 440 réalise la modulation du signal qui est émis sur le medium par l'intermédiaire d'une antenne d'émission 445. Pour le côté réception, le signal radio est reçu par l'intermédiaire d'une antenne de réception 450, le signal est démodulé dans le dispositif émetteur/récepteur radio 440 et transmis au module d'interface récepteur radio 435. Ce module 435 est en charge d'extraire les paquets contenus dans les trames et de les stocker en mémoire de réception 470. Chaque réception de paquet est signalée au module décodeur 425 en lui indiquant le groupe et la ligne attendue par défaut. Si le noeud est un noeud esclave, le module interface récepteur radio 435 met également en oeuvre le mécanisme de synchronisation du cycle de supertrame par rapport au noeud maître. La figure 5 présente un exemple de table de réception 500, maintenue par le module décodeur 425 de la figure 4. Comme expliqué précédemment, cette table 500 est divisée en deux blocs 510 et 520 : l'un pour gérer les données de la supertrame courante et l'autre pour gérer les données de la supertrame précédente. Chaque ligne de la table correspond à l'une des lignes d'un groupe de paquets (c'est-à-dire à l'un des symboles codés d'un mot de code du codage distribué). La première ligne de la table correspond à la première ligne du premier groupe, la quinzième ligne correspond à la quinzième ligne du premier groupe. Puisqu'on utilise un code correcteur distribué RS(15,4), les quinze premières lignes correspondent au premier groupe de paquets source, la seizième ligne correspond à la première ligne du second groupe, et ainsi de suite. Pour chaque ligne, on trouve trois champs de renseignement 511, 512, 513 pour le premier bloc, et les trois mêmes champs 521, 522, 523 pour le second bloc. Les champs 511 et 521 représentent un bit de réception, indiquant si le paquet source ou la combinaison de paquets source correspondant à cette ligne a été reçu. Les champs 512 et 522 représentent un bit de décodage, indiquant si le paquet source ou la combinaison de paquets source correspondant à cette ligne a été décodé avec succès selon le code correcteur source. Cette information peut être fournie par le décodeur Reed-Solomon à l'issue de l'opération de décodage. Les champs 513 et 523 représentent plusieurs bits d'adresse (par exemple 16 bits), indiquant l'adresse à laquelle est stocké le paquet source ou la combinaison de paquets source correspondant, en mémoire de réception 470 et en mémoire de retransmission 480. A la fin d'une supertrame, le bloc contenant les données de la supertrame qui se termine est réinitialisé : bit de réception à 0, bit de décodage à 0 et bits d'adresse à 0. La figure 6 décrit l'algorithme exécuté par le module décodeur 425 dans le cas d'un noeud relais ou destination, dans un mode de réalisation particulier de l'invention. Au démarrage, à l'étape 600, le module décodeur 425 est en attente de début de réception de trames radio pour une nouvelle supertrame. A l'étape 602, il procède à une première réception de paquet, selon une indication fournie par le module d'interface récepteur radio 435. Le décodage selon le code correcteur source peut s'effectuer dès cette étape 602, et le paquet décodé (quel que soit le résultat : échec ou succès) est stocké à la même adresse dans la mémoire de réception 470. Dans une étape 604, le module décodeur 425 détermine si le paquet décodé est un paquet source (transmis par un noeud source) ou une combinaison linéaire de paquets sources (c'est-à-dire un paquet résultant d'une combinaison effectuée par un noeud relais). Si le test de l'étape 604 indique un paquet source, alors dans une étape 606 ce paquet est également stocké en mémoire de retransmission 480, et la table de réception correspondante 510 ou 520 est mise à jour. Si le test de l'étape 604 indique qu'il s'agit d'une combinaison linéaire de paquets sources, il est nécessaire de décoder l'en-tête 221 du paquet à l'étape 610 pour connaître la nature de la combinaison reçue. Le test de l'étape 612 renseigne sur la validité de l'en-tête : si l'en-tête n'est pas décodable, le paquet ne sera pas exploité par la suite et on passe directement à l'étape 616 ; si l'en-tête est correct, on passe à l'étape 614 dans laquelle la table de réception 510 ou 520 est mise à jour pour la ligne indiquée par le contenu de l'en-tête du paquet, puis à l'étape 616. Plus précisément, dans l'étape 614, si la ligne avait déjà été reçue auparavant, le module décodeur 425 regarde si la ligne déjà reçue contient des erreurs (champ 512 ou 522 de la table de réception) : - si la ligne déjà reçue est sans erreur, la nouvelle copie reçue est inutile et la table n'est pas modifiée ; - si la ligne déjà reçue contient des erreurs, et si la nouvelle copie reçue est sans erreur, alors la table de réception est mise à jour en conservant la nouvelle copie. Le champ 512 ou 522 indique que la ligne est décodée et le champ 513 ou 523 indique la nouvelle adresse de stockage en mémoire. La ligne reçue auparavant ne sera pas exploitée par la suite ; - si la ligne déjà reçue contient des erreurs, et si la nouvelle copie reçue en contient également, alors la table n'est pas modifiée, on garde la première copie. Dans l'étape 616, le module décodeur 425 teste si toutes les trames reçues ont été traitées. Si ce n'est pas le cas, on retourne à l'étape 602 pour traiter le paquet suivant. Si toutes les trames reçues ont été traitées, alors : - si le noeud dans lequel il est compris est un noeud relais, le module décodeur 425 passe directement à l'étape 624 (décrite ci-après) puis retourne à l'étape initiale 25 600 ; - si le noeud dans lequel il est compris est un noeud destination, le module décodeur 425 effectue les étapes 618 à 622 (décrites ci-après) afin de procéder au second décodage, selon le code correcteur distribué. Dans l'étape 618, le module décodeur 425 prépare le décodage de chaque groupe 30 contenant des paquets source destinés au noeud destination (dans lequel est compris le module décodeur 425). Cette information a été fournie par le CPU 410 à l'initialisation 20 du noeud destination. Le module décodeur 425 consulte la table de réception 510 ou 520 et compte le nombre de lignes reçues pour chaque groupe. Puis une analyse est effectuée en fonction du nombre et des numéros de lignes reçues afin de déterminer les paquets source qui pourront être décodés, ainsi que l'algorithme à utiliser pour le décodage. Si pour un groupe de paquets donné, au moins quatre lignes ont été reçues, alors les trois paquets source vont pouvoir être décodés en utilisant le code correcteur distribué. Si au plus trois lignes ont été reçues, il y a trop d'effacements pour utiliser le code distribué. Il faut alors tenter de retrouver le maximum de paquets par combinaison 10 des lignes reçues. En prenant l'exemple du groupe de paquets de la figure 1, on liste ci-dessous tous les cas pouvant se produire : - si trois lignes ont été reçues : - si les lignes sl, s2 et rxl ont été reçues alors les données des paquets sources Sa et Sb seront transférées aux applications sans traitement supplémentaire, les données du paquet source Sc seront manquantes ; - si les lignes sl, s3 et rx2 ont été reçues alors les données des paquets sources Sa et Sc seront transférées aux applications sans traitement supplémentaire, les données du paquet source Sb seront manquantes ; - si les lignes s2, s3 et rx3 ont été reçues alors les données des paquets sources Sb et Sc seront transférées aux applications sans traitement supplémentaire, les données du paquet source Sa seront manquantes ; - dans tous les autres cas, il faut procéder par résolution de 3 équations à 3 inconnues en utilisant si possible la sous-matrice de G' inversée qui contient les coefficients correspondant aux lignes reçues. Les données de tous les paquets sources Sa et Sb et Sc seront transférées aux applications. - si deux lignes ont été reçues : - si deux des trois lignes sl, s2, s3 ont été reçues alors les données des paquets sources correspondants seront transférées aux applications sans traitement supplémentaire ; 15 20 25 - si les lignes sI et rxl ont été reçues alors le paquet source Sb est récupérable, les données des paquets sources Sa et Sb seront transférées aux applications, les données du paquet source Sc seront manquantes ; - si les lignes sI et rx2 ont été reçues alors le paquet source Sc est récupérable, les données des paquets sources Sa et Sc seront transférées aux applications, les données du paquet source Sb seront manquantes ; - si les lignes s2 et rxl ont été reçues alors le paquet source Sa est récupérable, les données des paquets sources Sa et Sb seront transférées aux applications, les données du paquet source Sc seront manquantes ; - si les lignes s2 et rx3 ont été reçues alors le paquet source Sc est récupérable, les données des paquets sources Sb et Sc seront transférées aux applications, les données du paquet source Sa seront manquantes ; - si les lignes s3 et rxz ont été reçues alors le paquet source Sa est récupérable, les données des paquets sources Sa et Sc seront transférées aux applications, les données du paquet source Sb seront manquantes ; - si les lignes s3 et rx3 ont été reçues alors le paquet source Sb est récupérable, les données des paquets sources Sb et Sc seront transférées aux applications, les données du paquet source Sa seront manquantes. - si une ligne seulement a été reçue et qu'il s'agit d'une des trois lignes sl, s2, s3 alors les données du paquet source correspondant seront transférées aux applications sans traitement supplémentaire. Dans l'étape 620, le module décodeur 425 procède au décodage de chaque groupe de paquets en utilisant le résultat de l'analyse de l'étape précédente 618. Dans le cas où au moins 4 lignes ont été reçues et en cas d'échec du décodage du code correcteur distribué (Reed-Solomon dans notre exemple), alors une indication d'erreur sera transférée aux applications pour les données non décodées. Par exemple, si le décodeur du code correcteur distribué a été en échec à la jème colonne d'un groupe de paquets, alors les données du jème symbole des trois paquets sources seront marquées comme erronées. Il est à noter que si la table de réception 510 ou 520 indique qu'un paquet source avait été reçu et était déjà correctement décodé grâce au code correcteur source, alors on pourra transférer aux applications ce paquet source correct sans tenir compte des échecs de décodage avec le code correcteur distribué. Dans le cas où au plus trois lignes ont été reçues, si un paquet source est reconstitué à partir d'autres lignes reçues, et si le jème symbole est erroné dans une des lignes utilisées pour l'opération, alors le jème symbole sera également erroné dans le paquet source reconstitué. Dans tous les cas, le résultat du décodage est stocké en mémoire de décodage 465, dans une étape 622. Dans l'étape 624, le module décodeur 425, réinitialise la table de réception contenant les données de la supertrame courante : bit de réception à 0, bit de décodage à 0 et bits d'adresse à 0. Enfin, le module décodeur 425 retourne à l'étape initiale 600 d'attente de réception de trames dans la prochaine supertrame. La figure 7 décrit l'algorithme exécuté par le module encodeur 455 dans le cas d'un noeud source ou relais, dans un mode de réalisation particulier de l'invention. Au démarrage, à l'étape 700, le module encodeur 455 est en attente de fin de période de transmission de trames dans une nouvelle supertrame. Lorsque le noeud (noeud source ou relais, dans lequel est compris le module encodeur 455) a terminé de transmettre ses trames, le module encodeur 455 peut construire les paquets qui seront transmis à la supertrame suivante. Il procède d'abord, dans l'étape 702, à la construction des paquets source qu'il doit émettre. Pour cela, il effectue des lectures, dans la mémoire d'encodage 460, des données applicatives et alimente un encodeur, par exemple un encodeur Reed-Solomon(220, 204). Après lecture de données suffisantes pour remplir le champ 222 de données utiles du paquet (ici 204 octets), l'encodeur Reed-Solomon fournit les données de redondance (ici 16 octets). Le module encodeur 455 stocke à l'étape 704 le résultat en mémoire de transmission 475, en ajoutant un en-tête (ici 4 octets) de valeur nulle. Il répète l'opération jusqu'à épuisement des données applicatives ou jusqu'à ce que tous les paquets à transmettre soient remplis. Si les applications n'ont pas fourni assez de données pour remplir tous les paquets, alors le noeud transmet un certain nombre des paquets « vides ». Ce caractère « vide » d'un paquet peut être indiqué par une valeur particulière de l'en-tête, par exemple tous les bits à « 1 » et ce paquet pourra être filtré par exemple dans le module d'interface récepteur radio 435. Si le noeud dans lequel il est compris est un noeud source, le module encodeur 455 retourne directement à l'étape initiale 700. Si le noeud dans lequel il est compris est un noeud relais, le module décodeur 425 effectue les étapes 706 à 718 (décrites ci-après) afin de procéder au second encodage, selon le code correcteur distribué (pour chaque ligne qui lui a été attribuée au sein de la matrice génératrice étendue G', le module décodeur 425 va soit réaliser la ligne prévue, soit réaliser une ligne de remplacement). A l'étape 706, le module encodeur 455 est en attente de fin de période de réception de trames dans la supertrame courante. Lorsque le module encodeur 455 a traité toutes les trames reçues, le module encodeur 455 peut construire les combinaisons de paquets qui seront transmises à la supertrame suivante. Il procède d'abord, dans l'étape 710, à l'analyse de la table de réception 510 ou 520 et repère, pour chaque groupe concerné par une retransmission, les paquets source reçus avec le statut du décodage par le module décodeur 425. Puis il procède, dans l'étape 712, à la détermination de la combinaison à effectuer pour chaque retransmission prévue. En prenant l'exemple du groupe de 20 paquets de la figure 1, on donne ci-dessous une liste de choix de combinaison sachant que d'autres choix sont possibles : - si les trois lignes sl, s2 et s3 ont été reçues et ne contiennent pas d'erreurs, alors les trois combinaisons prévues peuvent être effectuées ; - si les trois lignes ont été reçues, dont une ligne erronée, alors le noeud retransmet les deux lignes reçues non erronées et la combinaison rxl ou rx2 ou rx3 combinant les deux lignes reçues non erronées ; - si les trois lignes ont été reçues avec au moins deux lignes erronées, alors le noeud retransmet les trois lignes sl, s2 et s3 ; - si deux lignes ont été reçues sans erreur et une ligne n'a pas été reçue, alors le noeud retransmet les deux lignes reçues et la combinaison rxl ou rxz ou rx3 combinant les deux lignes reçues ; 25 30 - si deux lignes ont été reçues, dont une ligne erronée, et une ligne n'a pas été reçue, alors le noeud retransmet deux fois la ligne reçue sans erreur et une fois la ligne reçue erronée ; - si deux lignes ont été reçues avec des erreurs et une ligne n'a pas été reçue, alors le noeud retransmet deux fois une des lignes reçues erronées et une fois l'autre ; - si une ligne seulement a été reçue, cette ligne reçue est retransmise trois fois. Une variante pour l'étape 712 consiste à sélectionner plusieurs combinaisons possibles (qui seront construites à l'étape 714) afin de disposer au moment de la transmission d'un choix supplémentaire en fonction des paquets combinés déjà transmis dans la super-trame courante par d'autres noeuds relais. Il s'agira, au préalable d'une transmission de combinaison de paquets, de consulter la table de réception (510 ou 520), et de sélectionner parmi les choix possibles, une combinaison qui n'a pas encore été transmise. Le but est ici de donner au noeud destinataire le plus de chances possibles de recevoir des combinaisons indépendantes les unes des autres. Selon les décisions de l'étape 712, le module encodeur 455 procède aux combinaisons, dans l'étape 714, en utilisant une sous-matrice de la matrice génératrice étendue G'. Dans l'étape 716, l'en-tête de chaque combinaison réalisée est construit en fonction des décisions de l'étape 712. Dans l'étape 718, les combinaisons avec leur en-tête sont stockées en mémoire de transmission. L'adresse de stockage correspond par exemple à l'ordre de transmission du paquet par le noeud. Puis on retourne à l'étape initiale 700 d'attente de fin de période de transmission de trames dans la prochaine supertrame.25 REVENDICATIONS1. Procédé de transmission, à un noeud destination, de M symboles codés d'un mot de code définis chacun, sous la forme d'une combinaison linéaire de symboles source, par une ligne distincte d'une matrice de codage réseau, caractérisé en ce que la matrice de codage réseau comprend N lignes, avec M 2. Procédé selon la revendication 1, caractérisé en ce que N-M lignes de la matrice, autres que lesdites M lignes, ne sont attribuées à aucun noeud et ne combinent chacune qu'une partie des symboles source, et en ce que l'étape (712) consistant à sélectionner une ligne définissant un symbole de remplacement, comprend une étape consistant à sélectionner prioritairement une des N-M lignes non attribuées. 3. Procédé selon l'une quelconque des revendications 1 et 2, caractérisé en ce que l'étape (712) consistant à sélectionner une ligne définissant un symbole de remplacement prend en compte au moins une autre information de remplacement transmise par un autre noeud relais, de sorte que la ligne sélectionnée par le noeud relais est, si possible, différente de la ligne indiquée par ladite au moins une autre information de remplacement. 4. Procédé selon l'une quelconque des revendications 1 à 3, caractérisé en ce que ledit noeud relais est incapable de générer le symbole codé particulier défini par ladite au moins une ligne qui lui est attribuée si au moins une des conditions suivantes :- au moins un symbole source, nécessaire pour générer ledit symbole codé particulier n'a pas été reçu par ledit noeud relais ; - au moins un symbole source, nécessaire pour générer ledit symbole codé particulier a été reçu par ledit noeud relais avec un niveau de qualité inférieur à un seuil prédéterminé. 5. Procédé selon l'une quelconque des revendications 1 à 4, caractérisé en ce que la matrice de codage réseau est une matrice génératrice d'un code correcteur linéaire (N,K), avec K un nombre de symboles source que le noeud destination doit retrouver à partir des symboles codés. 6. Procédé selon la revendication 5, caractérisé en ce que : K = K1 + K2, avec K1 un nombre de symboles source réellement transmis par au moins un noeud source, et K2 un nombre de symboles source virtuels, de valeur nulle et transmis par aucun noeud source, ajoutés pour obtenir un code Maximum Distance Séparable. 7. Procédé selon l'une quelconque des revendications 5 et 6, caractérisé en ce que la matrice génératrice d'un code correcteur linéaire (N,K) est une matrice systématique telle que les K premiers symboles du mot de code sont lesdits K symboles source. 8. Procédé de décodage, par un noeud destination, de M symboles codés d'un mot de code définis chacun, sous la forme d'une combinaison linéaire de symboles source, par une ligne distincte d'une matrice de codage réseau, caractérisé en ce que la matrice de codage réseau comprend N lignes, avec M 9. Produit programme d'ordinateur, caractérisé en ce qu'il comprend des instructions de code de programme pour la mise en oeuvre du procédé selon au moins une des revendications 1 à 7 et/ou le procédé selon la revendication 8, lorsque ledit programme est exécuté sur un ordinateur. 10. Moyen de stockage lisible par ordinateur, stockant un programme d'ordinateur comprenant un jeu d'instructions exécutables par un ordinateur pour mettre en oeuvre le procédé selon au moins une des revendications 1 à 7 et/ou le procédé selon la revendication 8. 11. Noeud relais adapté pour participer à la transmission, vers un noeud destination, M symboles codés d'un mot de code définis chacun, sous la forme d'une combinaison linéaire de symboles source, par une ligne distincte d'une matrice de codage réseau, caractérisé en ce que la matrice de codage réseau comprend N lignes, avec M 12. Noeud destination, adapté pour décoder M symboles codés d'un mot de code définis chacun, sous la forme d'une combinaison linéaire de symboles source, par une ligne distincte d'une matrice de codage réseau, caractérisé en ce que la matrice de codage réseau comprend N lignes, avec M