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),
)
let darken_ration = 20%
for e in edges {
let vp = vpos.at(e.at(0))
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 {
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 {
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)
#let _h_pts = (
(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)
]
#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)[
#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")[
#definition(titre: [Code $display((n,k) in NN^2)$])[
$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.]
]
// #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")[
#set text(size: 17pt)
#align(center)[
#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)
- 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%)[
#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$],
#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$]
#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_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 quad (f_14)$]
)
$
]
]
#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
#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 j in {0, 7, 24}, space f_j = 1$, alors le bit est comme suspect.
]
@ -704,7 +735,7 @@
// ]
]
#myslide("?")[
#myslide("La Contrainte de Somme Nulle")[
#set text(size: 18pt)
#definition(titre: "Détection d'Erreur", accent: red)[
@ -791,8 +822,11 @@
#myslide("Méthode de génération de H")[
- Gallager
- Mackay
- Mackay-Neal
- Progressive Edge-growth
#align(center + horizon)[
#image("src/construction.jpg", width: 50%)
]
]
#myslide("Encodage LDPC : Calcul de G")[
@ -1060,7 +1094,7 @@
#myslide("Sum-Product : Belief Propagation")[
#set text(size: 17pt)
#v(-0.4em)
#v(-0.7em)
#definition(titre: "Décodage Optimal")[
Échange itératif de croyances (LLR) entre les nœuds du graphe
@ -1079,7 +1113,8 @@
#set text(size: 1.2em)
*Mise à jour CN* \
#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(
@ -1092,7 +1127,9 @@
#set text(size: 1.2em)
*Mise à jour VN* \
#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")[
#align(center + horizon)[
#image("src/construction.jpg", width: 80%)
]
]
#myslide("Test réel")[
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)
#align(center + horizon)[
#image("src/construction.jpg", width: 80%)
]
]
#myslide("FPGA")[
#align(center + horizon)[
#image("src/construction.jpg", width: 80%)
]
]
#[]<fin>
@ -1291,7 +1339,7 @@
]
#myslide("Maths deriere Belief Propagation")[
#myslide("Maths derière Belief Propagation")[
]