avancée++
This commit is contained in:
415
main.typ
415
main.typ
@ -35,17 +35,21 @@
|
||||
#v(1fr)
|
||||
]
|
||||
|
||||
#myslide("Plan")[
|
||||
#grid(
|
||||
columns: (auto, 1fr),
|
||||
align: horizon,
|
||||
place(center + horizon, dx: 11.8cm, dy: 0.7cm)[#decor_matrice_etoilee()],
|
||||
design_plan((
|
||||
[Introduction], [Codes linéaires], [LDPC],
|
||||
[Codage], [Décodage], [Analyse],
|
||||
))
|
||||
)
|
||||
]
|
||||
#myslide("Plan")[
|
||||
#grid(
|
||||
columns: (auto, 1fr),
|
||||
align: horizon,
|
||||
place(center + horizon, dx: 11.8cm, dy: 0.7cm)[#decor_matrice_etoilee()],
|
||||
design_plan((
|
||||
[Introduction],
|
||||
[Codes linéaires],
|
||||
[LDPC],
|
||||
[Codage],
|
||||
[Décodage],
|
||||
[Analyse],
|
||||
)),
|
||||
)
|
||||
]
|
||||
|
||||
#myslide("Introduction : Communication Numérique")[
|
||||
#place(center + horizon, dy: 8cm)[
|
||||
@ -249,40 +253,40 @@
|
||||
#let colp = orange
|
||||
|
||||
#place(dx: 0cm, dy: 2.0cm)[
|
||||
#set text(size: 1.1em)
|
||||
Enfin
|
||||
#set text(size: 1.1em)
|
||||
Enfin
|
||||
|
||||
$
|
||||
H = #math.mat(
|
||||
(text(fill: colp)[1], text(fill: colp)[0], 1, 0, 0),
|
||||
(text(fill: colp)[1], text(fill: colp)[1], 0, 1, 0),
|
||||
(text(fill: colp)[0], text(fill: colp)[1], 0, 0, 1),
|
||||
augment: 2,
|
||||
)
|
||||
$
|
||||
$
|
||||
H = #math.mat(
|
||||
(text(fill: colp)[1], text(fill: colp)[0], 1, 0, 0),
|
||||
(text(fill: colp)[1], text(fill: colp)[1], 0, 1, 0),
|
||||
(text(fill: colp)[0], text(fill: colp)[1], 0, 0, 1),
|
||||
augment: 2,
|
||||
)
|
||||
$
|
||||
|
||||
#v(0.8em)
|
||||
#v(0.8em)
|
||||
|
||||
Vérification du mot de code $display(c = mat(#text(fill: colu)[1], #text(fill: colu)[1], #text(fill: colp)[1], #text(fill: colp)[0], #text(fill: colp)[1]))$
|
||||
Vérification du mot de code $display(c = mat(#text(fill: colu)[1], #text(fill: colu)[1], #text(fill: colp)[1], #text(fill: colp)[0], #text(fill: colp)[1]))$
|
||||
|
||||
#v(0.8em)
|
||||
#v(0.8em)
|
||||
|
||||
$
|
||||
H c^top = mat(
|
||||
1, 0, 1, 0, 0;
|
||||
1, 1, 0, 1, 0;
|
||||
0, 1, 0, 0, 1
|
||||
) mat(#text(fill: colu)[1], #text(fill: colu)[1], #text(fill: colp)[1], #text(fill: colp)[0], #text(fill: colp)[1])^top
|
||||
= mat(
|
||||
1 plus.o 0 plus.o 1 plus.o 0 plus.o 0;
|
||||
1 plus.o 1 plus.o 0 plus.o 0 plus.o 0;
|
||||
0 plus.o 1 plus.o 0 plus.o 0 plus.o 1
|
||||
)
|
||||
= mat(0; 0; 0)
|
||||
$
|
||||
$
|
||||
H c^top = mat(
|
||||
1, 0, 1, 0, 0;
|
||||
1, 1, 0, 1, 0;
|
||||
0, 1, 0, 0, 1
|
||||
) mat(#text(fill: colu)[1], #text(fill: colu)[1], #text(fill: colp)[1], #text(fill: colp)[0], #text(fill: colp)[1])^top
|
||||
= mat(
|
||||
1 plus.o 0 plus.o 1 plus.o 0 plus.o 0;
|
||||
1 plus.o 1 plus.o 0 plus.o 0 plus.o 0;
|
||||
0 plus.o 1 plus.o 0 plus.o 0 plus.o 1
|
||||
)
|
||||
= mat(0; 0; 0)
|
||||
$
|
||||
]
|
||||
]
|
||||
]
|
||||
]
|
||||
|
||||
// A REMPLACER AVEC DE VRAI DONNE SUR DE VRAI CODE LDPC ET HAMMING PAR EXEMPLE
|
||||
#myslide("Approcher la Limite de Shannon")[
|
||||
@ -300,57 +304,57 @@
|
||||
|
||||
#myslide("Le Mur de la Complexité")[
|
||||
#set text(size: 19pt)
|
||||
#definition(titre: [Décodage par Maximum de Vraisemblance (MDL)], accent: black)[
|
||||
Chercher le mot de code $bold(c) in cal(C)$ le plus probable sachant $bold(r)$ reçu :
|
||||
$ hat(bold(c)) = arg min_(bold(c) in cal(C)) d_H (bold(r), bold(c)) $
|
||||
]
|
||||
#definition(titre: [Décodage par Maximum de Vraisemblance (MDL)], accent: black)[
|
||||
Chercher le mot de code $bold(c) in cal(C)$ le plus probable sachant $bold(r)$ reçu :
|
||||
$ 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)$.
|
||||
|
||||
#v(0.5em)
|
||||
- Équivalent à chercher l'erreur $bold(e)$ de poids minimal tel que $bold(H) bold(e)^top = bold(s)$.
|
||||
|
||||
#definition(titre: "Le Problème du décodage par Syndrome")[
|
||||
NP-Difficile et pour $H$ quelconque : $cal(O)(2^k)$
|
||||
]
|
||||
#v(0.5em)
|
||||
|
||||
- Pour $k=100$ bits, $2^100 approx 10^30$ opérations nécessaires.
|
||||
#definition(titre: "Le Problème du décodage par Syndrome")[
|
||||
NP-Difficile et pour $H$ quelconque : $cal(O)(2^k)$
|
||||
]
|
||||
|
||||
- Pour $k=100$ bits, $2^100 approx 10^30$ opérations nécessaires.
|
||||
]
|
||||
|
||||
#myslide("Définition des Codes LDPC")[
|
||||
#definition(titre: [Formalisation des Codes LDPC Réguliers])[
|
||||
Code linéaire en bloc avec une matrice de contrôle $bold(H)$ est *clairsemée*.
|
||||
]
|
||||
|
||||
- *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$
|
||||
]
|
||||
|
||||
#definition(titre : "Rendement")[
|
||||
$ display(R = (n - op("rg")(H)) / n >= 1 - m / n) $
|
||||
]
|
||||
#definition(titre: [Formalisation des Codes LDPC Réguliers])[
|
||||
Code linéaire en bloc avec une matrice de contrôle $bold(H)$ est *clairsemée*.
|
||||
]
|
||||
|
||||
#myslide([Matrice de contrôle])[
|
||||
#definition(titre : [Code LDPC $(6, 3)$])[
|
||||
- *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$
|
||||
]
|
||||
|
||||
#definition(titre: "Rendement")[
|
||||
$ display(R = (n - op("rg")(H)) / n >= 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)$
|
||||
]
|
||||
|
||||
#v(2cm)
|
||||
|
||||
#place(center + horizon, dx: 0cm, dy: 7.3cm)[
|
||||
#scale(140%)[#hldpc()]
|
||||
#scale(140%)[#hldpc()]
|
||||
]
|
||||
]
|
||||
|
||||
#myslide("De la Matrice aux Équations de Parité")[
|
||||
#set text(size: 17pt)
|
||||
#set text(size: 17pt)
|
||||
|
||||
#let v_space = 2.83cm
|
||||
|
||||
@ -364,12 +368,14 @@
|
||||
[
|
||||
// #set math.mat(gap: 24.5pt)
|
||||
#move(dy: 13.8pt)[
|
||||
$ underbrace(
|
||||
mat(r_0; r_1;#v(v_space);dots.v; r_29; delim: "["),
|
||||
#text()[Mot reçu] r space in space FF_2^30
|
||||
) $
|
||||
]
|
||||
]
|
||||
$
|
||||
underbrace(
|
||||
mat(r_0; r_1; #v(v_space);dots.v; r_29; delim: "["),
|
||||
#text()[Mot reçu] r space in space FF_2^30
|
||||
)
|
||||
$
|
||||
]
|
||||
],
|
||||
)
|
||||
]
|
||||
]
|
||||
@ -387,7 +393,7 @@
|
||||
#set text(size: 1em)
|
||||
#text(fill: orange)[$ f_0 : r_7 plus.o r_10 plus.o r_15 plus.o r_22 plus.o r_24 plus.o r_29 = 0 $]
|
||||
]
|
||||
|
||||
|
||||
#v(0.3cm)
|
||||
#text(size: 1.1em)[- Si $f_j = 1$, un nombre impair de bits a été inversé par le canal.]
|
||||
]
|
||||
@ -395,34 +401,34 @@
|
||||
#myslide("L'Entrelacement des Contraintes")[
|
||||
#set text(size: 17pt)
|
||||
|
||||
#align(center)[
|
||||
#move(dx: -1.2cm)[
|
||||
#scale(115%)[#hldpc_dual(row1: 0, row2: 14)]
|
||||
#align(center)[
|
||||
#move(dx: -1.2cm)[
|
||||
#scale(115%)[#hldpc_dual(row1: 0, row2: 14)]
|
||||
]
|
||||
]
|
||||
]
|
||||
|
||||
#v(1cm)
|
||||
|
||||
#set text(size: 1.1em)
|
||||
- Chaque bit $r_i$ participe à $w_c = 3$ équations distinctes
|
||||
#set text(size: 1.1em)
|
||||
- Chaque bit $r_i$ participe à $w_c = 3$ équations distinctes
|
||||
|
||||
#v(1cm)
|
||||
|
||||
// --- Étage 2 : Système et Décision ---
|
||||
#set align(center + horizon)
|
||||
#scale(115%)[
|
||||
#block(fill: gray.lighten(95%), inset: 10pt, stroke: 0.5pt + gray, radius: 4pt)[
|
||||
$ cases(
|
||||
#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$],
|
||||
|
||||
#h(4.5cm) #text(size : 20pt)[$bold(dots.v)$],
|
||||
|
||||
#h(4.5cm) #text(size: 20pt)[$bold(dots.v)$],
|
||||
#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$]
|
||||
) $
|
||||
]
|
||||
)
|
||||
$
|
||||
]
|
||||
]
|
||||
|
||||
#v(1cm)
|
||||
#v(1cm)
|
||||
|
||||
#set align(left)
|
||||
#set text(size: 1.1em)
|
||||
@ -489,4 +495,229 @@
|
||||
|
||||
]
|
||||
|
||||
#myslide("Graphe de Tanner : Définition")[
|
||||
#set text(size: 1em)
|
||||
#definition(titre: [Graphe de Tanner $cal(G)(bold(H))$])[
|
||||
#set text(size: 0.9em)
|
||||
Graphe bipartite $cal(G) = (#text(fill: blue)[$V$] union.sq #text(fill: orange)[$C$], E)$
|
||||
:
|
||||
#v(4pt)
|
||||
$ (#text(fill: blue)[$v_j$], #text(fill: orange)[$c_i$]) in E space <==> space H_(i,j) = 1 $
|
||||
]
|
||||
|
||||
#v(0.4em)
|
||||
|
||||
#set text(size: 1.1em)
|
||||
#grid(
|
||||
columns: (1.4fr, 1fr),
|
||||
gutter: 1em,
|
||||
[- $#text(fill: blue)[$V$] = {#text(fill: blue)[$v_0$], dots, #text(fill: blue)[$v_(n-1)$]}$ nœuds de *variable*],
|
||||
[- $|E| = n dot #text(fill: blue)[$w_c$] = m dot #text(fill: orange)[$w_r$]$],
|
||||
|
||||
[
|
||||
- $#text(fill: orange)[$C$] = {#text(fill: orange)[$c_0$], dots, #text(fill: orange)[$c_(m-1)$]}$ nœuds de *contrôle*
|
||||
],
|
||||
[- $H tilde.equiv cal(G)$],
|
||||
|
||||
[- $deg(#text(fill: blue)[$v_j$]) = #text(fill: blue)[$w_c$]$],
|
||||
[- $deg(#text(fill: orange)[$c_i$]) = #text(fill: orange)[$w_r$]$],
|
||||
)
|
||||
|
||||
#align(center)[
|
||||
#scale(115%)[
|
||||
#tanner_illustration()
|
||||
]
|
||||
#text(size: 0.8em, style: "italic", fill: gray.darken(20%))[
|
||||
Exemple $n=4, space m=2$
|
||||
]
|
||||
]
|
||||
]
|
||||
|
||||
#myslide("Construction du Graphe : Les Nœuds")[
|
||||
|
||||
#v(1.2em)
|
||||
|
||||
#align(center)[
|
||||
#scale(100%)[
|
||||
// #h_mini_tanner()
|
||||
#grid(
|
||||
columns: (1fr, 1fr),
|
||||
gutter: 1em,
|
||||
|
||||
[#hldpc_dynamic(hl_cols: range(30), show_labels: false, h_show: true)],
|
||||
[#hldpc_dynamic(hl_rows: range(15), show_labels: false, h_show: false)],
|
||||
)
|
||||
]
|
||||
]
|
||||
|
||||
#v(3.5em)
|
||||
|
||||
#align(center)[
|
||||
#scale(180%)[
|
||||
#tanner_canvas(colored: false)
|
||||
]
|
||||
]
|
||||
|
||||
// #v(2.5em)
|
||||
|
||||
// #[
|
||||
// #set text(size: 1.05em)
|
||||
// - Chaque *colonne* $j$ de $bold(H)$ $arrow$ nœud de variable #text(fill: blue, weight: "bold")[$v_j in V$] \ #text(fill: blue)[$n = 30$] nœuds, représentés par des *cercles* ○
|
||||
// - Chaque *ligne* $i$ de $bold(H)$ $arrow$ nœud de contrôle #text(fill: orange, weight: "bold")[$c_i in C$] \ #text(fill: orange)[$m = 15$] nœuds, représentés par des *carrés* □
|
||||
// - Les arêtes seront déterminées par les $1$ de $bold(H)$ — étapes suivantes
|
||||
// ]
|
||||
]
|
||||
|
||||
#myslide("Construction du Graphe : Nœud de Contrôle")[
|
||||
|
||||
#v(1.2em)
|
||||
|
||||
#align(center)[
|
||||
#move(dx: 12.6pt, dy: -1.3pt)[
|
||||
#scale(100%)[
|
||||
#hldpc_dynamic(hl_rows: (0,), show_labels: true, h_show: true)
|
||||
]
|
||||
]
|
||||
]
|
||||
|
||||
#v(3.5em)
|
||||
|
||||
#align(center)[
|
||||
#move(dx: 2.7pt, dy: -13.8pt)[
|
||||
#scale(180%)[
|
||||
#tanner_canvas(hl_row: 0)
|
||||
]
|
||||
]
|
||||
]
|
||||
|
||||
// #v(0.4em)
|
||||
// #[
|
||||
// #set text(size: 1.05em)
|
||||
// - Ligne #text(fill: orange, weight: "bold")[0] de $bold(H)$ : $bold(H)_(0,j) = 1$ pour $j in {7, 10, 15, 22, 24, 29}$
|
||||
// - #text(fill: orange)[$c_0$] est relié à #text(fill: orange)[$v_7, v_10, v_15, v_22, v_24, v_29$] — chaque 1 crée une arête
|
||||
// - $deg(c_0) = 6 = w_r$ — $c_0$ porte l'équation : #text(fill: orange)[$f_0 : r_7 plus.o r_10 plus.o r_15 plus.o r_22 plus.o r_24 plus.o r_29 = 0$]
|
||||
// ]
|
||||
]
|
||||
|
||||
#myslide("Construction du Graphe : Nœud de Variable")[
|
||||
|
||||
#v(1.2em)
|
||||
|
||||
#align(center)[
|
||||
#scale(100%)[
|
||||
#hldpc_dynamic(hl_cols: (10,), show_labels: true, h_show: true)
|
||||
]
|
||||
]
|
||||
|
||||
#v(3.5em)
|
||||
|
||||
#align(center)[
|
||||
#move(dx: -0pt, dy: -39pt)[
|
||||
#scale(180%)[
|
||||
#tanner_canvas(hl_col: 10)
|
||||
]
|
||||
]
|
||||
]
|
||||
// #v(0.15em)
|
||||
// #align(center)[
|
||||
// #grid(
|
||||
// columns: (auto, auto),
|
||||
// column-gutter: 0.7cm,
|
||||
// align: horizon,
|
||||
// [#h_mini_tanner(hl_col: 10)], [#tanner_canvas(hl_col: 10)],
|
||||
// )
|
||||
// ]
|
||||
|
||||
// #[
|
||||
// #set text(size: 1.05em)
|
||||
// - Colonne #text(fill: blue, weight: "bold")[10] de $bold(H)$ : $bold(H)_(i,10) = 1$ pour $i in {0, 5, 11}$
|
||||
// - #text(fill: blue)[$v_10$] est relié aux nœuds de contrôle #text(fill: blue)[$c_0, c_5, c_11$] — participe à *3 équations* de parité
|
||||
// - $deg(v_10) = 3 = w_c$ — chaque bit est surveillé par $w_c$ contraintes indépendantes
|
||||
// ]
|
||||
]
|
||||
|
||||
#myslide("Graphe de Tanner Final")[
|
||||
|
||||
#move(dy: 4.5cm)[
|
||||
#align(center + horizon)[
|
||||
#tanner_canvas(scale: 0.91cm, show_all: true, colored: true, v_c_show: false)
|
||||
]
|
||||
|
||||
#align(center)[
|
||||
#grid(
|
||||
columns: (1fr, 1fr),
|
||||
gutter: 0.45cm,
|
||||
block(
|
||||
fill: blue.lighten(88%),
|
||||
stroke: 0.5pt + blue.lighten(40%),
|
||||
radius: 6pt,
|
||||
inset: (x: 10pt, y: 8pt),
|
||||
width: 100%,
|
||||
)[
|
||||
#place(dx: 47pt, dy: -0pt)[#scale(110%)[#icon_var]] #text(fill: blue, weight: "bold")[ Nœuds de variable] \
|
||||
// $n = 30 quad deg = w_c = 3$
|
||||
],
|
||||
block(
|
||||
fill: orange.lighten(88%),
|
||||
stroke: 0.5pt + orange.lighten(40%),
|
||||
radius: 6pt,
|
||||
inset: (x: 10pt, y: 8pt),
|
||||
width: 100%,
|
||||
)[
|
||||
#place(dx: 47pt, dy: -0pt)[#scale(110%)[#icon_chk]] #text(
|
||||
fill: orange,
|
||||
weight: "bold",
|
||||
)[ Nœuds de contrôle] \
|
||||
// $m = 15 quad deg = w_r = 6$
|
||||
],
|
||||
)
|
||||
]
|
||||
]
|
||||
]
|
||||
|
||||
// HARD DECISION
|
||||
// #myslide("Graphe de Tanner : Utilité")[
|
||||
// #grid(
|
||||
// columns: (1.55fr, 1fr),
|
||||
// column-gutter: 0.5cm,
|
||||
// align: top,
|
||||
// [
|
||||
// #definition(titre: "Support du Passage de Messages")[
|
||||
// Le graphe de Tanner est le *cadre naturel* des algorithmes de décodage itératifs — il rend la structure du code *explicite et locale*
|
||||
// ]
|
||||
//
|
||||
// #v(0.45em)
|
||||
//
|
||||
// #[
|
||||
// #set text(size: 1.05em)
|
||||
// - *Localité* : chaque nœud n'opère qu'avec ses *voisins directs*
|
||||
//
|
||||
// - *Itérations — à chaque tour :*
|
||||
// #pad(left: 0.9em)[
|
||||
// #text(fill: blue, weight: "bold")[V → C :] $v_j$ envoie son estimation (LLR) aux $c_i$ voisins \
|
||||
// #text(fill: orange, weight: "bold")[C → V :] $c_i$ renvoie une correction aux $v_j$ voisins
|
||||
// ]
|
||||
//
|
||||
// - *Convergence* vers le mot de code le plus vraisemblable
|
||||
//
|
||||
// - *Complexité* : $cal(O)(n dot w_c)$ par itération \ vs $cal(O)(2^k)$ pour le MDL — gain *exponentiel*
|
||||
// ]
|
||||
// ],
|
||||
// [
|
||||
// #v(0.6em)
|
||||
// #align(center)[
|
||||
// #bp_diagram()
|
||||
// #v(0.5em)
|
||||
// #set text(size: 0.79em)
|
||||
// #stack(
|
||||
// dir: ttb,
|
||||
// spacing: 0.25em,
|
||||
// [#box(width: 1.3em, height: 2pt, fill: blue)
|
||||
// #h(0.3em) #text(fill: blue, weight: "bold")[$mu_(j arrow i)$ : V → C] (LLR)],
|
||||
// [#box(width: 1.3em, height: 2pt, fill: orange)
|
||||
// #h(0.3em) #text(fill: orange, weight: "bold")[$nu_(i arrow j)$ : C → V] (correction)],
|
||||
// )
|
||||
// ]
|
||||
// ],
|
||||
// )
|
||||
// ]
|
||||
|
||||
Reference in New Issue
Block a user