This commit is contained in:
2026-05-31 18:53:31 +02:00
parent 818acf844a
commit 8034fc44f2
3 changed files with 10693 additions and 12112 deletions

663
main.typ
View File

@ -35,12 +35,6 @@
#v(1fr)
]
#myslide("Introduction : Communication Numérique")[
#place(center + horizon, dy: 8cm)[
#canal_shannon_intro()
]
]
#myslide("Introduction : Utilisation")[
#align(center + horizon)[
#grid(
@ -85,6 +79,12 @@
]
]
#myslide("Introduction : Communication Numérique")[
#place(center + horizon, dy: 8cm)[
#canal_shannon_intro()
]
]
#myslide("Problématique")[
#place(center + horizon, dy: 8.1cm)[#graphe_tanner_fond(0.9cm, 1.75)]
#place(center + horizon, dy: 7.7cm)[
@ -96,7 +96,6 @@
]
]
#myslide("Plan")[
#grid(
columns: (auto, 1fr),
@ -114,24 +113,30 @@
]
#myslide("Définition : Codes Linéaires en Bloc")[
#place(dy: 2.5cm)[
#definition(titre: [Code $display((n,k) in NN^2)$])[
$cal(C)$ sous-espace vectoriel de dimension $k$ de $FF_2^n$
]
#definition(titre: [Code $display((n,k) in NN^2)$])[
$cal(C)$ sous-espace vectoriel de dimension $k$ de $FF_2^n$
]
#[
#set text(size: 1.1em)
- $k$ : longueur du message original
- $n$ : longueur du mot de code
- $m = n - k$ : nombre de bits de parités
]
#[
#set text(size: 1.1em)
- $k$ : longueur du message original
- $n$ : longueur du mot de code
- $m = n - k$ : nombre de bits de parités
]
#definition(titre: "Encodage")[
$Phi : FF_2^k & -> FF_2^n in cal(L)(FF_2^k, FF_2^n)$
]]
#definition(titre: "Encodage")[
$Phi : FF_2^k & -> FF_2^n in cal(L)(FF_2^k, FF_2^n)$
]
#v(-1.3em)
#align(center + horizon)[
#plongement_schema()
]
]
#myslide("Définition : Matrice Génératrice")[
#v(0.80cm)
#definition(titre: "Matrice Génératrice")[
$G in cal(M)_(k,n)(FF_2)$ dont les lignes sont une base de $cal(C)$
]
@ -139,7 +144,7 @@
#definition(titre: "Encodage")[
Pour un message $u in FF_2^k$ le mot de code $c in cal(C)$ est :
$
c = Phi(u) = u dot.o G
c = Phi(u) = u G
$
]
@ -169,6 +174,7 @@
]
#myslide("Définition : Matrice de Contrôle")[
#v(1.1cm)
#definition(titre: "Matrice de Contrôle")[
// $H = mat(
// P^top, I_(n-k);
@ -187,7 +193,7 @@
#set text(size: 1.2em)
// - $cal(C) = ker(H) = {v in FF_2^n | H dot.o v^top = 0}$
- $cal(C) = ker(H)$ -- $H c^top = 0$ $=>$ $c$ mot de code valide
- $cal(C) = ker(H)$ -- $H c^top = 0$ $=>$ $c in cal(C)$
// - $display(G dot.o H^top = 0)$
@ -201,7 +207,7 @@
]
#[
#set text(size: 1.2em)
- $s = 0 => r space$ mot de code valide
- $s = 0 => r in cal(C)$
- $s != 0$ donne la signature de l'erreur $e$
]
// Possible décodage par syndrome
@ -257,29 +263,27 @@
]
#myslide("Exemple d'un code linéaire")[
#let colp = orange // Partie P (Parité)
#let colu = blue // Partie I (Identité)
#let colp = orange
#let colu = blue
#let cole = red
#set math.mat(delim: "[")
#v(0.4cm)
#v(0.2cm)
#set text(size: 1.1em)
Structure systématique de $H$ :
#v(0.5em)
#v(0.3em)
#align(center)[
#scale(120%)[
#scale(108%)[
#dessiner_matrice($H =$, (
(texte: $P^top$, largeur: 2.0, fond: colp.lighten(90%)),
(texte: $I_3$, largeur: 3.0, fond: colu.lighten(90%)),
))
]
]
#v(0.8em)
#v(0.4em)
Ainsi :
#v(-1.2em)
#align(center)[
#scale(115%)[
#scale(110%)[
$
H = mat(
text(fill: colp, "1"), text(fill: colp, "0"), text(fill: colu, "1"), text(fill: colu, "0"), text(fill: colu, "0");
@ -289,23 +293,21 @@
$
]
]
#v(0.8em)
// Vérification du mot de code $c = mat(text(fill: colp, "1"), text(fill: colp, "1"), text(fill: colu, "1"), text(fill: colu, "0"), text(fill: colu, "1"))$ :
Vérification du mot de code $c = (#text(fill: colp)[1], #text(fill: colp)[1], #text(fill: colu)[1], #text(fill: colu)[0], #text(fill: colu)[1])$ :
#v(0.55em)
Mot de code valide $c = (#text(fill: colp)[1], #text(fill: colp)[1], #text(fill: colu)[1], #text(fill: colu)[0], #text(fill: colu)[1])$ : #h(0.4em) $H c^top = mat(0; 0; 0)$ #h(0.5em) #text(fill: green.darken(20%))[]
#v(-0.5em)
Mot reçu avec #text(fill: cole)[une erreur] : $r = (#text(fill: colp)[1], #text(fill: colp)[1], text(fill: cole, "0"), #text(fill: colu)[0], #text(fill: colu)[1])$
#v(0.4em)
#align(center)[
#scale(115%)[
#scale(110%)[
$
H c^top = mat(
H r^top = mat(
text(fill: colp, "1"), text(fill: colp, "0"), text(fill: colu, "1"), text(fill: colu, "0"), text(fill: colu, "0");
text(fill: colp, "1"), text(fill: colp, "1"), text(fill: colu, "0"), text(fill: colu, "1"), text(fill: colu, "0");
text(fill: colp, "0"), text(fill: colp, "1"), text(fill: colu, "0"), text(fill: colu, "0"), text(fill: colu, "1")
) mat(
text(fill: colp, "1"), text(fill: colp, "1"), text(fill: colu, "1"), text(fill: colu, "0"), text(fill: colu, "1")
)^top
= mat(0; 0; 0)
text(fill: colp, "1"), text(fill: colp, "1"), text(fill: cole, "0"), text(fill: colu, "0"), text(fill: colu, "1")
)^top = mat(1; 0; 0) != mat(0; 0; 0)
$
]
]
@ -334,7 +336,9 @@
$ hat(bold(c)) = arg min_(bold(c) in cal(C)) d_H (bold(r), bold(c)) $
]
- Équivalent à chercher l'erreur $bold(e)$ de poids minimal tel que $bold(H) bold(e)^top = bold(s)$.
#text(size: 21pt)[
- Équivalent à chercher l'erreur $bold(e)$ de poids minimal tel que $bold(H) bold(e)^top = bold(s)$.
]
#v(0.5em)
@ -350,42 +354,92 @@
#definition(titre: [Codes LDPC Réguliers])[
#text(size: 22.97pt)[
Code linéaire en bloc avec une matrice de contrôle $bold(H)$ *clairsemée*.
#align(center)[
#grid(
columns: (auto, 3em, auto),
align: left,
[- Poids de Colonne *$w_c$*], [], [- Poids de Ligne *$w_r$*],
)
]
]
]
- Poids de Colonne *$w_c$*
- Poids de Ligne *$w_r$*
#v(0.5em)
#definition(titre: "Conditions de Faible Densité", accent: black)[
#set align(center)
$w_c << n - k$ #h(2cm) $w_r << n$
#place(center, dx: -290pt, dy: 60pt)[
#text(size: 13pt, style: "italic", fill: luma(160))[
$H in cal(M)_(15, 30)(FF_2)$, $display(R = 1/2)$
]
]
#v(-0.3cm)
#align(center)[
#scale(100%)[#hldpc()]
]
#definition(titre: "Rendement")[
// $ display(R = (n - op("rg")(H)) / n >= 1 - m / n) $
$ display(R = 1 - m / n) $
]
#v(0.0cm)
#grid(
columns: (1fr, 1fr),
column-gutter: 1.75em,
[#definition(titre: "Faible Densité", accent: black)[
#set align(center)
$w_c << m$ #h(1cm) $w_r << n$
]],
[#definition(titre: "Rendement")[
#set align(center)
$R = 1 - m / n$
]],
)
]
#myslide([Matrice de contrôle])[
// #definition(titre: [Code LDPC $(6, 3)$])[
// $m w_r = n w_c$ donc $H in cal(M)_(15, 30)(FF_2)$ et $display(R = 1 - m / n = 1/2)$
// ]
#definition(titre: [Code LDPC $(6, 3)$])[
#v(8pt)
$H in cal(M)_(15, 30)(FF_2)$ et $display(R = 1/2)$
#v(5pt)
]
#v(2cm)
#place(center + horizon, dx: 0cm, dy: 7.3cm)[
#scale(140%)[#hldpc()]
]
]
// #myslide("Définition des Codes LDPC")[
// #v(1.3cm)
// #definition(titre: [Codes LDPC Réguliers])[
// #text(size: 22.97pt)[
// Code linéaire en bloc avec une matrice de contrôle $bold(H)$ *clairsemée*.
// ]
// ]
// #v(0.3em)
// #align(center + horizon)[
// #grid(
// columns: (auto, 3em, auto),
// align: left,
// [• Poids de Colonne *$w_c$*], [], [• Poids de Ligne *$w_r$*],
// )
// ]
// #v(0.5em)
//
// // - Poids de Colonne *$w_c$*
// //
// // - Poids de Ligne *$w_r$*
// //
// // #v(0.5em)
//
// #definition(titre: "Conditions de Faible Densité", accent: black)[
// #set align(center)
// // $w_c << n - k$ #h(2cm) $w_r << n$
// $w_c << m$ #h(2cm) $w_r << n$
// ]
//
// #definition(titre: "Rendement")[
// // $ display(R = (n - op("rg")(H)) / n >= 1 - m / n) $
// $ display(R = 1 - m / n) $
// ]
// ]
//
// #myslide([Matrice de contrôle])[
// // #definition(titre: [Code LDPC $(6, 3)$])[
// // $m w_r = n w_c$ donc $H in cal(M)_(15, 30)(FF_2)$ et $display(R = 1 - m / n = 1/2)$
// // ]
// #definition(titre: [Code LDPC $(6, 3)$])[
// #v(8pt)
// $H in cal(M)_(15, 30)(FF_2)$ et $display(R = 1/2)$
// #v(5pt)
// ]
//
// #v(2cm)
//
// #place(center + horizon, dx: 0cm, dy: 7.3cm)[
// #scale(140%)[#hldpc()]
// ]
// ]
#myslide("De la Matrice aux Équations de Parité")[
#set text(size: 17pt)
@ -471,37 +525,33 @@
// ]
#myslide("L'Entrelacement des Contraintes")[
#v(0.7cm)
#set text(size: 20pt)
#align(center)[
#move(dx: -1.2cm)[
#scale(110%)[#hldpc_triple(row1: 0, row2: 7, row3: 14)]
// #scale(110%)[#hldpc_triple(row1: 0, row2: 9, row3: 14)]
#scale(110%)[#hldpc_col24(row1: 0, row2: 9, row3: 14, col: 24)]
]
]
#v(0.5cm)
- Chaque bit $r_i$ participe à $w_c = 3$ équations distinctes :
#v(0.3cm)
#align(center)[
#block(fill: gray.lighten(95%), inset: 10pt, stroke: 0.5pt + gray, radius: 4pt)[
$
cases(
#text(fill: orange)[$r_7 plus.o r_10 plus.o r_15 plus.o r_22 plus.o bold(r_24) plus.o r_29 &= 0 quad (f_0)$],
#text(fill: green.darken(20%))[$r_0 plus.o r_1 plus.o r_4 plus.o r_9 plus.o r_20 plus.o r_26 &= 0 quad (f_7)$],
#text(fill: blue)[$r_1 plus.o r_3 plus.o r_12 plus.o bold(r_24) plus.o r_25 plus.o r_28 &= 0 quad (f_14)$]
#text(fill: orange)[$r_7 plus.o r_10 plus.o r_15 plus.o r_22 plus.o$ #text(fill: red)[$bold(r_24)$] #text(fill: orange)[$plus.o r_29 &= 0 quad (f_0)$]],
#text(fill: green.darken(20%))[$r_7 plus.o r_13 plus.o r_23 plus.o$ #text(fill: red)[$bold(r_24)$] #text(fill: green.darken(20%))[$plus.o r_25 plus.o r_27 &= 0 quad (f_9)$]],
#text(fill: blue)[$r_1 plus.o r_3 space thick$] #h(0.3pt) #text(fill: blue)[$plus.o r_12 plus.o$ #text(fill: red)[$bold(r_24)$] #text(fill: blue)[$plus.o r_25 plus.o r_28 &= 0 quad (f_14)$]]
)
$
]
]
#v(0.5cm)
- *$r_24$* : Surveillé simultanément par #text(fill: orange)[$f_0$], #text(fill: green.darken(20%))[$f_7$] et #text(fill: blue)[$f_14$].
- Si $forall #tricolor-j in {#text(fill: orange)[$0$], #text(fill: green.darken(20%))[$7$], #text(fill: blue)[$24$]}, space f_(#scale(80%)[#tricolor-j]) = 1$, alors le bit est comme suspect.
- *$r_24$* : Surveillé simultanément par #text(fill: orange)[$f_0$], #text(fill: green.darken(20%))[$f_9$] et #text(fill: blue)[$f_14$].
- Si $forall #tricolor-j in {#text(fill: orange)[$0$], #text(fill: green.darken(20%))[$9$], #text(fill: blue)[$14$]}, space f_(#scale(80%)[#tricolor-j]) = 1$, alors le bit est considéré suspect.
]
#myslide("Graphe de Tanner : Définition")[
#set text(size: 1em)
#definition(titre: [Graphe de Tanner $cal(G)(bold(H))$])[
@ -799,65 +849,6 @@
// ]
]
#myslide("La Topologie de H : Le Girth")[
#set text(size: 20pt)
#definition(titre: "Définition : Le Girth (La Maille)", accent: blue)[
Longueur du plus court cycle dans le graphe de Tanner
]
#v(0.5em)
- Le girth est *pair*
- La valeur minimale est $g = 4$.
#v(1em)
#align(center)[
#block(fill: rgb("#f8fafc"), stroke: 1pt + blue.lighten(50%), inset: 10pt, radius: 5pt)[
Girth élevé $=>$ Meilleure diffusion de l'information.
]
]
#v(2.5em)
#align(center)[
#scale(140%)[
#grid(
columns: (1fr, 1fr),
gutter: -7cm,
[
#schema_girth_4(highlight: false)
#v(0.5em)
#text(size: 0.8em, style: "italic")[Graphe de Tanner]
],
[
#schema_girth_4(highlight: true)
#v(0.5em)
#text(size: 0.8em, fill: red, weight: "bold")[4-Cycle]
],
)
]
]
]
#myslide("Méthode de génération de H")[
#place(center + horizon, dy: 8.1cm)[#graphe_tanner_fond(0.9cm, 1.75)]
#place(center + horizon, dy: 7cm)[
#block(width: 100%)[
#text(size: 1.5em, weight: "bold", fill: black)[
Gallager \
Mackay-Neal \
Progressive Edge-Growth
]
]
]
// #align(center + horizon)[
// #image("src/construction.jpg", width: 50%)
// ]
]
#myslide("Encodage LDPC : Calcul de G")[
#set text(size: 18pt)
@ -1046,37 +1037,48 @@
// ]
]
#myslide([Résultats : Convergence syndrome])[
#align(center)[#convergence_plot(iters, syndrms)]
]
// #myslide([Résultats : Convergence syndrome])[
// #align(center)[#convergence_plot(iters, syndrms)]
// ]
#myslide("Bit-Flipping : Analyse")[
// #myslide("Bit-Flipping : Analyse")[
#myslide("Bit-Flipping : Syndrome et Analyse")[
#place(center + horizon, dx: -2cm, dy: 8cm)[#convergence_plot(iters, syndrms)]
// TODO PARLER DU GIRTH 4 => MAUVAIS
#set text(size: 17pt)
#place(dy: 4.5cm)[
#definition(titre: "Avantages", accent: green.darken(10%))[
#set text(size: 0.88em)
- *Complexité* : simples XOR et compteurs -- $cal(O)(n)$ par itération
// - *Matériel* : idéal FPGA/ASIC, massivement parallélisable
// - *Simplicité* : inventé par Gallager (1962)
]
#definition(titre: "Limite", accent: red)[
#set text(size: 0.88em)
- Ignore la *confiance* du récepteur physique dans le signal
- Un bit reçu à $0.51$ V est traité comme $0$
// - $=>$ Sous-optimal par rapport à la limite de Shannon
#uncover(2)[
#place(dx: 13cm, dy: 1.0cm)[
#scale(100%)[
#definition(titre: "Avantages", accent: green.darken(10%), compact: true)[
#set text(size: 0.88em)
- *Complexité* : XOR et compteurs
- $cal(O)(n)$ par itération
// - *Matériel* : idéal FPGA/ASIC, massivement parallélisable
// - *Simplicité* : inventé par Gallager (1962)
]
]
// #v(0.3em)
// #align(center)[
// #box(fill: rgb("#fff7ed"), stroke: (left: 3pt + orange), inset: (x: 8pt, y: 5pt))[
// #text(
// size: 0.82em,
// )[$arrow$ Nécessite le *Soft-Decision* (Belief Propagation) pour exploiter les niveaux de gris du signal]
// ]
// ]
]
#place(dx: -1.5cm, dy: 1.0cm)[
#scale(100%)[
#definition(titre: "Limite", accent: red, compact: true)[
#set text(size: 0.88em)
- Ignore la *confiance* du récepteur physique
- Un bit reçu à $0.51$ V est traité comme $0$
// - $=>$ Sous-optimal par rapport à la limite de Shannon
// #v(0.3em)
// #align(center)[
// #box(fill: rgb("#fff7ed"), stroke: (left: 3pt + orange), inset: (x: 8pt, y: 5pt))[
// #text(
// size: 0.82em,
// )[$arrow$ Nécessite le *Soft-Decision* (Belief Propagation) pour exploiter les niveaux de gris du signal]
// ]
// ]
]]
]]
]
]
#myslide("Décodage Soft : Le LLR")[
@ -1094,13 +1096,15 @@
$
]
#v(1.3em)
#v(2em)
#align(center)[
#scale(125%)[#schema_llr_droite()]
#move(dx: 1.05cm)[
#scale(160%)[#schema_llr_droite()]
]
]
#v(1em)
#v(1.7em)
// Blocs de légende centrés
#align(center)[
@ -1134,6 +1138,8 @@
#definition(titre: "Information Extrinsèque")[
Exclure l'avis du destinataire pour éviter l'auto-influence
]
#block(
fill: orange.lighten(92%),
stroke: (left: 4pt + orange),
@ -1142,12 +1148,14 @@
width: 100%,
)[
#set text(size: 1.2em)
*Mise à jour CN* \
*Mise à jour* \
#set text(size: 1.1em)
// $ tanh(m_(c arrow v) / 2) = product_(u != v) tanh(m_(u arrow c) / 2) $
$ m_(c arrow v) = 2 tanh^(-1) ( product_(u in cal(N)(c) \\ {v}) tanh(m_(u arrow c) / 2) ) $
]
#place(dx: 5.2cm, dy: -5.2cm)[#scale(170%)[#icon_chk]]
#block(
fill: blue.lighten(92%),
stroke: (left: 4pt + blue),
@ -1156,12 +1164,14 @@
width: 100%,
)[
#set text(size: 1.2em)
*Mise à jour VN* \
*Mise à jour* \
#set text(size: 1.1em)
// $ m_(v arrow c) = L_"canal" + sum_(c' != c) m_(c' arrow v) $
// $ m_(v arrow c) = L_v^((0)) + sum_(c' in cal(N)(v) \\ {c}) m_(c' arrow v) $
$ m_(v arrow c) = L_(v"canal") + sum_(c' in cal(N)(v) \\ {c}) m_(c' arrow v) $
]
#place(dx: 5.2cm, dy: -3.85cm)[#scale(170%)[#icon_var]]
]
#myslide("Sum-Product")[
@ -1184,9 +1194,11 @@
]
#place(right, dx: -4.5cm, dy: 0cm)[
#text(weight: "bold", fill: orange, size: 1.1em * 1.3)[Échange CN]
#text(weight: "bold", fill: orange, size: 1.1em * 1.3)[Échange]
]
#place(dx: 21cm, dy: 0.1cm)[#scale(170%)[#icon_chk]]
#place(right, dx: -1cm, dy: 2.7cm)[
#scale(130%)[
#schema_detailed_cn()
@ -1194,9 +1206,11 @@
]
#place(left, dx: 1.5cm, dy: 9cm)[
#text(weight: "bold", fill: blue, size: 1.1em * 1.3)[Échange VN]
#text(weight: "bold", fill: blue, size: 1.1em * 1.3)[Échange]
]
#place(dx: 5.4cm, dy: 9.15cm)[#scale(170%)[#icon_var]]
#place(left, dx: 1.5cm, dy: 11cm)[
#scale(130%)[
#schema_detailed_vn()
@ -1260,29 +1274,55 @@
#myslide("Min-Sum")[
#set text(size: 15pt)
#grid(
columns: (1fr, 1fr),
gutter: 0.5cm,
definition(titre: "Avantage Matériel", accent: black)[
- *Comparateurs* pour le minimum
- *XOR* pour le produit des signes
#v(0.21cm)
],
definition(titre: "Mise à jour du CN", accent: orange)[
#set text(size: 19pt)
$
m_(c arrow v_i) = product_(j != i) "sgn"(m_(v_j arrow c)) times min_(j != i) |m_(v_j arrow c)|
$
],
)
// #grid(
// columns: (1fr, 1fr),
// gutter: 0.5cm,
// definition(titre: "Avantage Matériel", accent: black)[
// - *Comparateurs* pour le minimum
// - *XOR* pour le produit des signes
// #v(0.21cm)
// ],
// definition(titre: "Mise à jour des CN", accent: orange)[
// #set text(size: 19pt)
// $
// m_(c arrow v_i) = product_(j != i) "sgn"(m_(v_j arrow c)) times min_(j != i) |m_(v_j arrow c)|
// $
// ],
// definition(titre: "Mise à jour des CN", accent: orange)[
// #set text(size: 19pt)
// $
// m_(c arrow v) = product_(u in cal(N)(c) \\ {v}) "sgn"(m_(u arrow c)) times min_(u in cal(N)(c) \\ {v}) |m_(u arrow c)|
// $
// ],
// definition(titre: "Mise à jour des CN", accent: orange)[
// #set text(size: 19pt)
// $
// m_(c arrow v) = & product_(u in cal(N)(c) \\ {v}) "sgn"(m_(u arrow c)) \
// & times min_(u in cal(N)(c) \\ {v}) |m_(u arrow c)|
// $
// ],
// )
#definition(titre: "Avantage Matériel", accent: black, titre_taille: 1.4em)[
- *Comparateurs* pour le minimum
- *XOR* pour le produit des signes
#v(0.21cm)
]
#definition(titre: "Mise à jour des CN", accent: orange, titre_taille: 1.4em)[
#set text(size: 24pt)
$
m_(c arrow v) = product_(u in cal(N)(c) \\ {v}) "sgn"(m_(u arrow c)) times min_(u in cal(N)(c) \\ {v}) |m_(u arrow c)|
$
]
#v(1.5em)
#v(4.5em)
#align(center)[#scale(130%)[#schema_min_sum_complet()]]
#v(0.5em)
#v(-0.5em)
#align(center)[
#text(size: 1.1em, fill: gray.darken(40%), style: "italic")[
Pour les VN : $m_(v arrow c) = L_"canal" + sum_(c' != c) m_(c' arrow v)$
Pour les VN : $display(m_(v arrow c) = L_"canal" + sum_(c' in cal(N)(v) \\ {c}) m_(c' arrow v))$
]
]
]
@ -1343,16 +1383,75 @@
// ]
// ]
#myslide("La Topologie de H : Le Girth")[
#set text(size: 20pt)
#definition(titre: "Définition : Le Girth (La Maille)", accent: blue)[
Longueur du plus court cycle dans le graphe de Tanner
]
#v(0.5em)
- Le girth est *pair*
- La valeur minimale est $g = 4$.
#v(1em)
#align(center)[
#block(fill: rgb("#f8fafc"), stroke: 1pt + blue.lighten(50%), inset: 10pt, radius: 5pt)[
Girth élevé $=>$ Meilleure diffusion de l'information.
]
]
#v(2.5em)
#align(center)[
#scale(140%)[
#grid(
columns: (1fr, 1fr),
gutter: -7cm,
[
#schema_girth_4(highlight: false)
#v(0.5em)
#text(size: 0.8em, style: "italic")[Graphe de Tanner]
],
[
#schema_girth_4(highlight: true)
#v(0.5em)
#text(size: 0.8em, fill: red, weight: "bold")[4-Cycle]
],
)
]
]
]
#myslide("Méthode de génération de H")[
#place(center + horizon, dy: 8.1cm)[#graphe_tanner_fond(0.9cm, 1.75)]
#place(center + horizon, dy: 7cm)[
#block(width: 100%)[
#text(size: 1.5em, weight: "bold", fill: black)[
Gallager \
Mackay-Neal \
Progressive Edge-Growth
]
]
]
// #align(center + horizon)[
// #image("src/construction.jpg", width: 50%)
// ]
]
#myslide("Conclusion")[
#place(center + horizon, dy: 8.1cm)[#graphe_tanner_fond(0.9cm, 1.75)]
#place(center + horizon, dy: 7.7cm)[
#block(width: 100%)[
#text(size: 1.5em, weight: "bold", fill: black)[
QC-LDPC Encodage \
FPGA \
QC-LDPC \
Test réels
Test Réels
]
]
]
@ -1369,101 +1468,78 @@
]
]
#myslide("Définition : Codes Linéaires en Bloc")[
#definition(titre: [Code $display((n,k) in NN^2)$])[
$cal(C)$ sous-espace vectoriel de dimension $k$ de $FF_2^n$
]
#[
#set text(size: 1.1em)
- $k$ : longueur du message original
- $n$ : longueur du mot de code
- $m = n - k$ : nombre de bits de parités
]
#definition(titre: "Encodage")[
$Phi : FF_2^k & -> FF_2^n in cal(L)(FF_2^k, FF_2^n)$
]
#v(-1.3em)
#align(center + horizon)[
#plongement_schema()
]
]
#myslide("Définition : Matrice Génératrice")[
#definition(titre: "Matrice Génératrice")[
$G in cal(M)_(k,n)(FF_2)$ dont les lignes sont une base de $cal(C)$
]
#definition(titre: "Encodage")[
Pour un message $u in FF_2^k$ le mot de code $c in cal(C)$ est :
$
c = Phi(u) = u dot.o G
$
]
#definition(titre: "Forme systématique")[
// TODO : changer [I_k | P] en un graphique jolie avec I et P dans un carré coloré
$
#dessiner_matrice($G =$, ((texte: $I_k$, largeur: 2.2, fond: gray.lighten(75%)), (texte: $P$, largeur: 2.2, fond: gray.lighten(75%))))
// G = mat(
// I_k, P;
// augment: #1,
// delim: "[",
// )
$
]
#[
#set text(size: 1.2em)
// - Pour $u in FF_2^k, space display(u dot.o G = mat(u, u dot.o P; augment: #1, delim: "[",))$
- Pour $u in FF_2^k, space #dessiner_matrice($u dot.o G =$, (
(texte: $u$, largeur: 1.1, fond: gray.lighten(75%)),
(texte: $u dot.o P$, largeur: 3.0, fond: gray.lighten(75%)),
))$
- $P in cal(M)_(k ,n-k)(FF_2)$ matrice de parité\
]
]
#myslide("Définition : Matrice de Contrôle")[
#definition(titre: "Matrice de Contrôle")[
// $H = mat(
// P^top, I_(n-k);
// augment: #1,
// delim: "[",
// )
$
#dessiner_matrice($H =$, (
(texte: $P^top$, largeur: 2.2, fond: gray.lighten(75%)),
(texte: $I_(n-k)$, largeur: 2.2, fond: gray.lighten(75%)),
))
$
]
#[
#set text(size: 1.2em)
- $cal(C) = ker(H) = {v in FF_2^n | H dot.o v^top = 0}$
- $display(G dot.o H^top = 0)$
]
#definition(titre: "Syndrome")[
Pour un vecteur reçu $r = c + e, space s in FF_2^(n - k)$
$
s = H r^top = H c^top + H e^top = 0 + H e^top
$
]
#[
#set text(size: 1.2em)
- Si $s = 0, space r$ est un mot de code valide
- Sinon $s$ donne la signature de l'erreur $e$
]
// Possible décodage par syndrome
]
// #myslide("Définition : Matrice Génératrice")[
// #definition(titre: "Matrice Génératrice")[
// $G in cal(M)_(k,n)(FF_2)$ dont les lignes sont une base de $cal(C)$
// ]
//
// #definition(titre: "Encodage")[
// Pour un message $u in FF_2^k$ le mot de code $c in cal(C)$ est :
// $
// c = Phi(u) = u G
// $
// ]
//
// #definition(titre: "Forme systématique")[
// // TODO : changer [I_k | P] en un graphique jolie avec I et P dans un carré coloré
// $
// #dessiner_matrice($G =$, ((texte: $I_k$, largeur: 2.2, fond: gray.lighten(75%)), (texte: $P$, largeur: 2.2, fond: gray.lighten(75%))))
// // G = mat(
// // I_k, P;
// // augment: #1,
// // delim: "[",
// // )
// $
// ]
//
// #[
// #set text(size: 1.2em)
// // - Pour $u in FF_2^k, space display(u dot.o G = mat(u, u dot.o P; augment: #1, delim: "[",))$
//
// - Pour $u in FF_2^k, space #dessiner_matrice($u G =$, (
// (texte: $u$, largeur: 1.1, fond: gray.lighten(75%)),
// (texte: $u P$, largeur: 3.0, fond: gray.lighten(75%)),
// ))$
//
// - $P in cal(M)_(k ,n-k)(FF_2)$ matrice de parité\
// ]
// ]
//
// #myslide("Définition : Matrice de Contrôle")[
// #definition(titre: "Matrice de Contrôle")[
// // $H = mat(
// // P^top, I_(n-k);
// // augment: #1,
// // delim: "[",
// // )
// $
// #dessiner_matrice($H =$, (
// (texte: $P^top$, largeur: 2.2, fond: gray.lighten(75%)),
// (texte: $I_(n-k)$, largeur: 2.2, fond: gray.lighten(75%)),
// ))
// $
//
// ]
// #[
// #set text(size: 1.2em)
// - $cal(C) = ker(H) = {v in FF_2^n | H v^top = 0}$
//
// - $display(G H^top = 0)$
// ]
//
// #definition(titre: "Syndrome")[
// Pour un vecteur reçu $r = c + e, space s in FF_2^(n - k)$
// $
// s = H r^top = H c^top + H e^top = 0 + H e^top
// $
// ]
// #[
// #set text(size: 1.2em)
// - Si $s = 0, space r$ est un mot de code valide
// - Sinon $s$ donne la signature de l'erreur $e$
// ]
// // Possible décodage par syndrome
// ]
#myslide("Théorie derrière la définition des codes linaires")[
Poser les notations algebriques etc...
@ -1648,4 +1724,3 @@
#myslide("Progressive Edge-growth")[
]