belief-prop + min-sum

This commit is contained in:
2026-05-10 19:07:36 +02:00
parent 296331096c
commit 22e61fcbd1
3 changed files with 9198 additions and 6417 deletions

195
main.typ
View File

@ -937,6 +937,7 @@
]
#myslide("Bit-Flipping : Analyse")[
// TODO PARLER DU GIRTH 4 => MAUVAIS
#set text(size: 17pt)
#definition(titre: "Avantages", accent: green.darken(10%))[
@ -962,15 +963,199 @@
]
]
#myslide("Soft decoding")[
belief propagation, log ou virgule fixe, explication resultat meilleur
#myslide("Décodage Soft : Le LLR")[
#set text(size: 17pt)
#definition(titre: "Signal", accent: blue.darken(10%))[
On reçoit une valeur $y_i$ (ex: $+4.5$V ou $-0.2$V). Le LLR transforme cette mesure physique en une valeur statistique sans unité.
]
#v(0.6em)
#definition(titre: "Log-Likelihood Ratio (LLR)", accent: black)[
$
L(v_i) = ln(display(frac(P(v_i = 0 | y_i), P(v_i = 1 | y_i))))
$
]
#v(0.6em)
#align(center)[
#scale(125%)[#schema_llr_droite()]
]
#v(1em)
// Blocs de légende centrés
#align(center)[
#grid(
columns: (220pt, 220pt),
gutter: 1cm,
block(fill: blue.lighten(92%), stroke: 1pt + blue, radius: 6pt, inset: 12pt)[
#align(center)[
#text(fill: blue.darken(20%), weight: "bold")[Signe] \
#text(size: 0.85em)[Définit la valeur du bit]
]
],
block(fill: orange.lighten(90%), stroke: 1pt + orange, radius: 6pt, inset: 12pt)[
#align(center)[
#text(fill: orange.darken(20%), weight: "bold")[|Valeur|] \
#text(size: 0.85em)[Confiance dans la décision]
]
],
)
]
]
#myslide("Implementation")[
#myslide("Sum-Product : Belief Propagation")[
#set text(size: 17pt)
#v(-0.4em)
#definition(titre: "Décodage Optimal")[
Échange itératif de croyances (LLR) entre les nœuds du graphe
]
#definition(titre: "Information Extrinsèque")[
Exclure l'avis du destinataire pour éviter l'auto-influence
]
#block(
fill: orange.lighten(92%),
stroke: (left: 4pt + orange),
radius: 4pt,
inset: 18pt,
width: 100%,
)[
#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) $
]
#block(
fill: blue.lighten(92%),
stroke: (left: 4pt + blue),
radius: 4pt,
inset: 18pt,
width: 100%,
)[
#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) $
]
]
#myslide("Sum-Product")[
#set text(size: 16pt)
#place(left, dx: 1.5cm, dy: 0cm)[
#text(weight: "bold", size: 1.1em * 1.3)[Initialisation]
]
#place(left, dx: 1.5cm, dy: 2cm)[
#scale(130%)[
#grid(
columns: 1,
gutter: 0.2cm,
align: horizon,
schema_detailed_init(),
text(size: 0.9em)[$m_(v_j arrow c_i) = L_"canal"$],
)
]
]
#place(right, dx: -4.5cm, dy: 0cm)[
#text(weight: "bold", fill: orange, size: 1.1em * 1.3)[Échange CN]
]
#place(right, dx: -1cm, dy: 2.7cm)[
#scale(130%)[
#schema_detailed_cn()
]
]
#place(left, dx: 1.5cm, dy: 9cm)[
#text(weight: "bold", fill: blue, size: 1.1em * 1.3)[Échange VN]
]
#place(left, dx: 1.5cm, dy: 11cm)[
#scale(130%)[
#schema_detailed_vn()
]
]
#place(right, dx: -3.5cm, dy: 9cm)[
#text(weight: "bold", fill: green, size: 1.1em * 1.3)[Décision Finale]
]
#place(right, dx: -1cm, dy: 11cm)[
#scale(145%)[
#schema_detailed_decision()
]
]
#place(center + horizon, dx: -0.9cm, dy: 8.2cm)[
#scale(115%)[
#cetz.canvas(length: 1cm, {
import cetz.draw: *
let col_iter = gray.darken(50%)
arc(
(0, 0),
radius: 1.8,
start: 150deg,
delta: -300deg,
stroke: (paint: col_iter, thickness: 2pt, cap: "round"),
mark: (end: "stealth", fill: col_iter, size: 0.3),
)
content((1.6, -1), [
#set text(fill: col_iter, weight: "bold", size: 0.8em)
#set align(center)
Itérations\
$i = 1, dots, I_(max)$
])
})
]
]
]
#myslide("Implementation rust")[
]
#myslide("Test")[
#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)|
$
],
)
#v(4.5em)
#align(center)[#scale(130%)[#schema_min_sum_complet()]]
#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)$
]
]
]
#myslide("Test réel")[
Irl hackrf, test de diff de debit avec des paquets
]
@ -999,4 +1184,6 @@
]
#myslide("Maths deriere Belief Propagation")[
]