This commit is contained in:
2026-05-13 09:20:12 +02:00
parent 86a437d12b
commit 8fd3f47a20
3 changed files with 9328 additions and 8920 deletions

View File

@ -160,19 +160,26 @@
(17, 6), (17, 6),
) )
let darken_ration = 20%
for e in edges { for e in edges {
let vp = vpos.at(e.at(0)) let vp = vpos.at(e.at(0))
let cp = cpos.at(e.at(1)) let cp = cpos.at(e.at(1))
line((vp.at(0), vp.at(1)), (cp.at(0), cp.at(1)), stroke: 0.45pt + rgb("#e0e0e0")) line((vp.at(0), vp.at(1)), (cp.at(0), cp.at(1)), stroke: 0.45pt + rgb("#e0e0e0").darken(darken_ration))
} }
for p in vpos { for p in vpos {
circle((p.at(0), p.at(1)), radius: 0.25, fill: white, stroke: 0.8pt + rgb("#cccccc")) circle((p.at(0), p.at(1)), radius: 0.25, fill: white, stroke: 0.8pt + rgb("#cccccc").darken(darken_ration))
} }
for p in cpos { for p in cpos {
let (x, y) = p let (x, y) = p
rect((x - 0.25, y - 0.25), (x + 0.25, y + 0.25), fill: white, stroke: 0.8pt + rgb("#cccccc")) rect(
(x - 0.25, y - 0.25),
(x + 0.25, y + 0.25),
fill: white,
stroke: 0.8pt + rgb("#cccccc").darken(darken_ration),
)
} }
}) })
} }
@ -992,6 +999,140 @@
}) })
} }
#let hldpc_triple(row1: 0, row2: 9, row3: 14) = {
import cetz.draw
let points = (
(7, 0),
(10, 0),
(15, 0),
(22, 0),
(24, 0),
(29, 0),
(3, 1),
(6, 1),
(18, 1),
(19, 1),
(25, 1),
(27, 1),
(5, 2),
(9, 2),
(13, 2),
(14, 2),
(17, 2),
(28, 2),
(0, 3),
(8, 3),
(11, 3),
(16, 3),
(20, 3),
(26, 3),
(1, 4),
(2, 4),
(4, 4),
(12, 4),
(21, 4),
(23, 4),
(5, 5),
(6, 5),
(8, 5),
(10, 5),
(21, 5),
(29, 5),
(14, 6),
(15, 6),
(16, 6),
(18, 6),
(22, 6),
(28, 6),
(0, 7),
(1, 7),
(4, 7),
(9, 7),
(20, 7),
(26, 7),
(2, 8),
(3, 8),
(11, 8),
(12, 8),
(17, 8),
(19, 8),
(7, 9),
(13, 9),
(23, 9),
(24, 9),
(25, 9),
(27, 9), // Ligne 9 contient 24
(0, 10),
(6, 10),
(15, 10),
(18, 10),
(21, 10),
(26, 10),
(2, 11),
(7, 11),
(10, 11),
(17, 11),
(22, 11),
(27, 11),
(8, 12),
(11, 12),
(14, 12),
(20, 12),
(23, 12),
(29, 12),
(4, 13),
(5, 13),
(9, 13),
(13, 13),
(16, 13),
(19, 13),
(1, 14),
(3, 14),
(12, 14),
(24, 14),
(25, 14),
(28, 14), // Ligne 14 contient 24
)
cetz.canvas(length: 0.35cm, {
let nx = 30
let ny = 15
let col_1 = orange
let col_2 = green.darken(15%)
let col_3 = blue
draw.content((-3.4, -7.5), text(size: 1.6em)[$H =$])
// Fonds de lignes (Highlight)
draw.rect((0, -row1), (nx, -row1 - 1), fill: col_1.lighten(90%), stroke: none)
draw.rect((0, -row2), (nx, -row2 - 1), fill: col_2.lighten(90%), stroke: none)
draw.rect((0, -row3), (nx, -row3 - 1), fill: col_3.lighten(90%), stroke: none)
// Crochets
draw.set-style(stroke: (thickness: 1.2pt))
draw.line((0.5, 0.3), (0, 0.3), (0, -ny - 0.3), (0.5, -ny - 0.3))
draw.line((nx - 0.5, 0.3), (nx, 0.3), (nx, -ny - 0.3), (nx - 0.5, -ny - 0.3))
for (x, y) in points {
let d_col = gray.darken(30%)
let r = 0.15
if y == row1 {
d_col = col_1
r = 0.22
} else if y == row2 {
d_col = col_2
r = 0.22
} else if y == row3 {
d_col = col_3
r = 0.22
}
draw.circle((x + 0.5, -y - 0.5), radius: r, fill: d_col, stroke: none)
}
})
}
// Données de H partagées (mêmes points que hldpc / hldpc_dual) // Données de H partagées (mêmes points que hldpc / hldpc_dual)
#let _h_pts = ( #let _h_pts = (
(7, 0), (7, 0),

17969
main.pdf

File diff suppressed because one or more lines are too long

132
main.typ
View File

@ -35,22 +35,6 @@
#v(1fr) #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("Introduction : Communication Numérique")[ #myslide("Introduction : Communication Numérique")[
#place(center + horizon, dy: 8cm)[ #place(center + horizon, dy: 8cm)[
#canal_shannon_intro() #canal_shannon_intro()
@ -112,6 +96,23 @@
] ]
] ]
#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("Définition : Codes Linéaires en Bloc")[ #myslide("Définition : Codes Linéaires en Bloc")[
#definition(titre: [Code $display((n,k) in NN^2)$])[ #definition(titre: [Code $display((n,k) in NN^2)$])[
$cal(C)$ sous-espace vectoriel de dimension $k$ de $FF_2^n$ $cal(C)$ sous-espace vectoriel de dimension $k$ de $FF_2^n$
@ -411,42 +412,72 @@
#text(size: 1.1em)[- Si $f_j = 1$, un nombre impair de bits a été inversé par le canal.] #text(size: 1.1em)[- Si $f_j = 1$, un nombre impair de bits a été inversé par le canal.]
] ]
// #myslide("L'Entrelacement des Contraintes")[
// #set text(size: 17pt)
//
// #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
//
// #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(
// #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)$],
// #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)
//
// #set align(left)
// #set text(size: 1.1em)
// - *$r_24$* : Surveillé par #text(fill: orange)[$f_0$] et #text(fill: blue)[$f_14$].
// - Si #text(fill: orange)[$f_0 = 1$] et #text(fill: blue)[$f_14 = 1$], $r_24$ est suspect
// ]
#myslide("L'Entrelacement des Contraintes")[ #myslide("L'Entrelacement des Contraintes")[
#set text(size: 17pt) #set text(size: 17pt)
#align(center)[ #align(center)[
#move(dx: -1.2cm)[ #move(dx: -1.2cm)[
#scale(115%)[#hldpc_dual(row1: 0, row2: 14)] #scale(110%)[#hldpc_triple(row1: 0, row2: 7, row3: 14)]
] ]
] ]
#v(1cm) #v(0.5cm)
- Chaque bit $r_i$ participe à $w_c = 3$ équations distinctes :
#set text(size: 1.1em) #v(0.3cm)
- Chaque bit $r_i$ participe à $w_c = 3$ équations distinctes #align(center)[
#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)[ #block(fill: gray.lighten(95%), inset: 10pt, stroke: 0.5pt + gray, radius: 4pt)[
$ $
cases( 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$], #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)$],
#h(4.5cm) #text(size: 20pt)[$bold(dots.v)$], #text(fill: green.darken(20%))[$r_2 plus.o r_8 plus.o r_13 plus.o bold(r_24) plus.o r_26 plus.o r_30 &= 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$] #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)$]
) )
$ $
] ]
] ]
#v(1cm) #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$].
#set align(left) - Si $forall j in {0, 7, 24}, space f_j = 1$, alors le bit est comme suspect.
#set text(size: 1.1em)
- *$r_24$* : Surveillé par #text(fill: orange)[$f_0$] et #text(fill: blue)[$f_14$].
- Si #text(fill: orange)[$f_0 = 1$] et #text(fill: blue)[$f_14 = 1$], $r_24$ est suspect
] ]
@ -704,7 +735,7 @@
// ] // ]
] ]
#myslide("?")[ #myslide("La Contrainte de Somme Nulle")[
#set text(size: 18pt) #set text(size: 18pt)
#definition(titre: "Détection d'Erreur", accent: red)[ #definition(titre: "Détection d'Erreur", accent: red)[
@ -791,8 +822,11 @@
#myslide("Méthode de génération de H")[ #myslide("Méthode de génération de H")[
- Gallager - Gallager
- Mackay - Mackay-Neal
- Progressive Edge-growth - Progressive Edge-growth
#align(center + horizon)[
#image("src/construction.jpg", width: 50%)
]
] ]
#myslide("Encodage LDPC : Calcul de G")[ #myslide("Encodage LDPC : Calcul de G")[
@ -1060,7 +1094,7 @@
#myslide("Sum-Product : Belief Propagation")[ #myslide("Sum-Product : Belief Propagation")[
#set text(size: 17pt) #set text(size: 17pt)
#v(-0.4em) #v(-0.7em)
#definition(titre: "Décodage Optimal")[ #definition(titre: "Décodage Optimal")[
Échange itératif de croyances (LLR) entre les nœuds du graphe Échange itératif de croyances (LLR) entre les nœuds du graphe
@ -1079,7 +1113,8 @@
#set text(size: 1.2em) #set text(size: 1.2em)
*Mise à jour CN* \ *Mise à jour CN* \
#set text(size: 1.1em) #set text(size: 1.1em)
$ tanh(m_(c arrow v) / 2) = product_(u != v) tanh(m_(u arrow c) / 2) $ // $ 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) ) $
] ]
#block( #block(
@ -1092,7 +1127,9 @@
#set text(size: 1.2em) #set text(size: 1.2em)
*Mise à jour VN* \ *Mise à jour VN* \
#set text(size: 1.1em) #set text(size: 1.1em)
$ m_(v arrow c) = L_"canal" + sum_(c' != c) m_(c' arrow v) $ // $ 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) $
] ]
] ]
@ -1256,12 +1293,23 @@
] ]
#myslide("QC-LDPC")[ #myslide("QC-LDPC")[
#align(center + horizon)[
#image("src/construction.jpg", width: 80%)
]
] ]
#myslide("Test réel")[ #myslide("Test réel")[
Transmission hackrf, test de diff de debit avec paquets Transmission hackrf, test de diff de debit avec paquets
Test de transmission d'image avec différent ldpc non opti et opti (H diff etc) Test de transmission d'image avec différent ldpc non opti et opti (H diff etc)
#align(center + horizon)[
#image("src/construction.jpg", width: 80%)
]
]
#myslide("FPGA")[
#align(center + horizon)[
#image("src/construction.jpg", width: 80%)
]
] ]
#[]<fin> #[]<fin>
@ -1291,7 +1339,7 @@
] ]
#myslide("Maths deriere Belief Propagation")[ #myslide("Maths derière Belief Propagation")[
] ]