• Aucun résultat trouvé

Comme dit dans le chapitre 1, la capacité de réparation d’un code LDPC pour le canal à effacements (et de tous les codes linéaires de manière générale) dépend grandement de la matrice génératrice du code, et notamment des degrés (colonnes et lignes, dc et dl) de cette matrice. Or, le code que nous présentons est un code LDPC irrégulier, dont la matrice génératrice dépend d’un ensemble de d nombres premiers entre eux P . Le cardinal de P va directement nous donner le degré par colonne de la matrice génératrice, qui vaudra dc = d + 2. En effet, dc correspond au nombre de paquets sources ou de redondance qui vont contenir l’information d’un paquet source. Or, comme nous l’avons vu précédemment, chaque paquet source est Xoré dans d + 1 paquets de redondance différents, puis est envoyé. Par conséquent, pour chaque paquet source, on va transmettre d + 2 paquets contenant l’information du paquet source, et permettant potentiellement de retrouver sa valeur lors du décodage. L’ensemble P et la longueur du code k nous indique aussi le degré par ligne de notre matrice génératrice : ce degré va varier suivant les lignes de la matrice génératrice, ce qui fait de notre code un code LDPC irrégulier (en opposition aux codes LDPC réguliers, pour lesquels ce degré est constant). Pour un paquet code CPi,j, on aura Xoré k/Pi paquets sources, et on aura donc dr qui variera suivant la ligne de la matrice, avec dr = k/Pi, Pi étant l’élément de P ayant servi à générer le paquet CPi,j.

Les figures suivantes (2.20), (2.21), (2.22), (2.23), (2.24), (2.25), et (2.26), présentent les probabilités de décoder totalement un bloc encodé suivant différents ensembles P . Ici, nous avons choisi des codes tels quel k = (n − k) = Σ(P ) + 1, qui ont donc tous le même rendement R = k/n = k/(k + (n − k)) = k/(2k) = 1/2. Ils peuvent s’interpréter de cette manière : en abscisse, nous faisons varier le nombre d’effacements d’un bloc de 0 à (n − k) inclus. Il n’est en effet pas utile d’étudier la probabilité de décodage d’un bloc quand e > (n − k) puisque celle-ci vaut alors 0.

Ces simulations ont été réalisées suivant la méthode de Monte-Carlo : chaque courbe est le résultat de 1000000 tests consistant en le tirage d’un nombre e (le nombre d’effacements du bloc), puis en l’effacement de e paquets choisis uniformément dans le bloc, puis décodage du bloc. Ainsi, pour chaque valeur de 0 ≤ e ≤ (n − k), on obtient un ratio ∈ [0, 1] en divisant le nombre de succès du décodage par le nombre d’essais effectués pour chaque e, qui tend vers la probabilité de décoder un bloc avec e effacements.

Chapitre 2 : Fauxtraut 2.4 Simulations

Figure 2.20 – Probabilité de décoder totalement un bloc en fonction du nombre d’effacements pour différents P , avec |P | = 2 et k = n − k = Σ(P ) + 1

Il est intéressant d’étudier la figure (2.20), pour laquelle on a utilisé des ensembles P de cardinal 2 : en effet, on voit que la courbe jaune (correspondant à k = 120 et P = [19, 100]) diminue plus rapidement que la courbe verte (correspondant à k = 8 et P = [3, 4]). On remarque que les courbes jaune, orange, bleue et verte correspondent à des codes dont la capacité de correction progresse, et apparemment, un code a une meilleure capacité de correction quand les éléments de P sont proches.

Ceci peut s’expliquer de la manière suivante. Supposons qu’on ait choisi P = [2, 1001] et k = P0 ∗ P1 = 2 ∗ 1001 = 2002, qu’on ait subi un certain nombre d’effacements, et qu’on lance l’algorithme de décodage. Les deux nœuds contraintes correspondant à C2,0 et C2,1 sont le résultat du Xor de 1002 paquets chacun, alors que les nœuds contraintes correspondant à C1001,0, C1001,1, C1001,2,. . .sont le résultat du Xor de 2 paquets. Par conséquent, la probabilité de décoder des paquets avec les nœuds contraintes de C2,0 ou de C2,1 est beaucoup plus faible que de décoder avec un nœud contrainte avec C1001,i.

A contrario, en prenant P = [501, 502] et k = 2002 ≤ P0 ∗ P1, on aura environ la même probabilité de décoder un paquet avec un nœud contrainte de C501,i ou de C502,i : les éléments de P ont ici la même efficacité.

Chapitre 2 : Fauxtraut 2.4 Simulations

Figure 2.21 – Probabilité de décoder totalement un bloc en fonction du nombre d’effacements pour différents P , avec |P | = 3 et k = n − k = Σ(P ) + 1

Figure 2.22 – Probabilité de décoder totalement un bloc en fonction du nombre d’effacements pour différents P , avec |P | = 4 et k = n − k = Σ(P ) + 1

Chapitre 2 : Fauxtraut 2.4 Simulations

Figure 2.23 – Probabilité de décoder totalement un bloc en fonction du nombre d’effacements pour différents P , avec |P | = 5 et k = n − k = Σ(P ) + 1

Figure 2.24 – Probabilité de décoder totalement un bloc en fonction du nombre d’effacements pour différents P , avec |P | = 6 et k = n − k = Σ(P ) + 1.

Chapitre 2 : Fauxtraut 2.4 Simulations

Figure 2.25 – Probabilité de décoder totalement un bloc en fonction du nombre d’effacements pour différents P , avec 2 ≤ |P | ≤ 6 et k = n − k = Σ(P ) + 1

Figure 2.26 – Probabilité de décoder totalement un bloc en fonction du nombre d’effacements pour différents P ayant une mauvaise capacité de correction, avec 2 ≤ |P | ≤ 6 et k = n − k = Σ(P ) + 1. Les échelles ont été modifiées.

Chapitre 2 : Fauxtraut 2.4 Simulations

Figure 2.27 – Probabilité de décoder totalement un bloc en fonction du nombre d’effacements pour différents P , avec k = n − k = Σ(P ) + 1 = 101.

Figure 2.28 – Probabilité de décoder totalement un bloc en fonction du nombre d’effacements pour différents P , avec k = n − k = Σ(P ) + 1 = 1001.

Afin de visualiser l’effet du cardinal de P sur l’efficacité du décodage, nous présentons dans les figures (2.28) et (2.27). Elles représentent des simulations pour lesquelles nous fixons Σ(P ) = 101 ou Σ(P ) = 1001 et de dimension et de longueur k = n − k = 101 (ou 1001), afin d’obtenir un code de rendement R = 1/2 pour différentes valeurs de P . Nous nous sommes assurés que chaque P utilisé contient bien des nombres premiers entre eux deux à deux. En termes de capacité de correction, la probabilité de décoder tous les paquets effacés est de quasiment 100 lorsqu’on a reçu au moins k + 70%(n − k)) paquets pour certains paramétrages. C’est le cas pour k = 1001 et P = [81, 91, 101, 103, 109, 112, 121, 131, 151], visible sur la figure

Chapitre 2 : Fauxtraut 2.4 Simulations

2.28 : le décodage aboutit lorsqu’on a reçu au moins 1300 paquets parmi les 2002 paquets transmis.

Ces figures nous permettent de remarquer que d’une manière générale, plus le cardinal de P est grand, plus le décodage est efficace. Il semble donc exister une relation entre le cardinal de P et la capacité de correction du code. Cependant, on atteint une sorte de plafond d’efficacité à partir d’une certaine valeur de |P | : quand |P | dépasse cette valeur, l’efficacité du décodage progresse peu. Sachant que la complexité de l’encodage et du décodage sont proportionnelles à |P |, il peut donc être intéressant de choisir une relativement petite valeur de |P |, ce qui réduira le nombre de calculs à effectuer, pour une efficacité presque égale à des valeurs de |P | plus grande.

Chapitre 2 : Fauxtraut 2.5 Canal à erreurs et théorème des restes Chinois

2.5 Canal à erreurs et théorème des restes Chinois

Jusqu’à présent, nous avons présenté notre code correcteur, dans le contexte d’une transmis-sion unidirectionnelle sur un canal à effacements. Les paquets transmis ne peuvent pas parvenir au récepteur en mauvais état : ceux qui auraient subi des erreurs sont tout simplement consi-dérés comme effacés (ce qui est rendu possible par l’utilisation du Checksum de nos paquets, des paquets UDP).

Dans cette partie, nous présentons une version modifiée de notre code correcteur, permet-tant de fiabiliser une transmission, non plus sur un canal à effacements, mais sur un canal à erreurs. Nous présentons cette version modifiée de manière "Proof of Concept" : en effet, le cas d’utilisation de notre code correcteur n’étant pas du tout le canal à erreurs mais bien le canal à effacements, nous ne nous sommes donc pas immensément concentrés sur cette version du code. Elle repose néanmoins sur une utilisation habile du théorème des restes Chinois afin de déterminer les indices des paquets erronés avant de les réparer.