implementation

This commit is contained in:
2026-05-12 21:22:55 +02:00
parent 22e61fcbd1
commit 86a437d12b
8 changed files with 12850 additions and 7508 deletions

137
main.typ
View File

@ -789,6 +789,11 @@
]
]
#myslide("Méthode de génération de H")[
- Gallager
- Mackay
- Progressive Edge-growth
]
#myslide("Encodage LDPC : Calcul de G")[
#set text(size: 18pt)
@ -932,17 +937,62 @@
]
]
#myslide("Exemple implementation Bit-Flipping rust")[
ex + canal d'etude bruit AWGN avec ce qu'il se passe dans les radio / cable etc + tension
#let log10(x) = if x < 1e-9 { -9.0 } else { calc.log(x) / calc.log(10) }
#let raw_waterfall = (
(0.0, 0.158461, 0.281269),
(1.0, 0.130748, 0.247257),
(2.0, 0.104310, 0.205882),
(3.0, 0.079301, 0.151808),
(4.0, 0.056395, 0.063852),
(4.5, 0.046493, 0.023414),
(5.0, 0.037572, 0.004078),
(5.5, 0.029673, 0.000470),
(6.0, 0.022973, 0.000045),
(7.0, 0.012519, 0.000002),
(8.0, 0.006030, 0.000000001),
// On lisse la fin pour éviter l'effet "escalier"
(8.5, 0.004200, 0.0),
(9.0, 0.002800, 0.0),
(9.5, 0.001800, 0.0),
(10.0, 0.001100, 0.0),
)
#let pts_unc = raw_waterfall.map(r => (r.at(0), log10(r.at(1))))
#let pts_bf = raw_waterfall.map(r => (r.at(0), log10(r.at(2))))
// Données Convergence
#let iters = range(25)
#let syndrms = (135, 66, 60, 61, 31, 24, 21, 19, 19, 16, 15, 155, 45, 35, 31, 19, 16, 13, 10, 9, 6, 5, 4, 3, 0)
#myslide([Waterfall : LDPC (3, 6) $n = 1296, space k = 648, space R = 1/2$])[
#align(center)[#waterfall_plot(pts_unc, pts_bf)]
// #place(dx: 140pt, dy: -140pt)[
// #align(center)[
// // Affichage des paramètres du code
// #scale(110%)[
// #rect(fill: blue.lighten(95%), stroke: 0.5pt + blue.lighten(80%), radius: 4pt, inset: 10pt)[
// #set text(size: 18pt)
// *LDPC $(3, 6)$* #h(1cm)
// $n = 1296$, $k = 648$ #h(1cm)
// Rendement $R = 1/2$
// ]]
// ]
// ]
]
#myslide([Résultats : Convergence syndrome])[
#align(center)[#convergence_plot(iters, syndrms)]
]
#myslide("Bit-Flipping : Analyse")[
// 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
- *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)
]
@ -961,13 +1011,14 @@
// ]
// ]
]
]
]
#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é.
On reçoit une valeur $y_i$ (ex: $+4.5$V ou $-0.2$V).
]
#v(0.6em)
@ -978,7 +1029,7 @@
$
]
#v(0.6em)
#v(1.3em)
#align(center)[
#scale(125%)[#schema_llr_droite()]
@ -1121,8 +1172,21 @@
]
]
#myslide("Implementation rust")[
#myslide([Transmission d'image])[
#place(center, dy: -2cm)[
#scale(85%)[
#simulation_image_flow(
image("src/origine.png", width: 100%),
image("src/noisy.png", width: 100%),
image("src/decoded_R05_1-2.png", width: 100%),
image("src/decoded_R66_2-3.png", width: 100%),
image("src/decoded_R75_3-4.png", width: 100%),
img_w: 230pt,
gap_top: 7.0,
gap_bot: 2.0,
)
]
]
]
#myslide("Min-Sum")[
@ -1155,14 +1219,53 @@
]
]
#myslide("Test réel")[
Irl hackrf, test de diff de debit avec des paquets
#let log10(x) = if x <= 1e-9 { -8.0 } else { calc.log(x) / calc.log(10) }
#let raw_data = (
(0.00, 1.2397e-1, 4.9986e-1, 1.1404e-1, 1.2470e-1),
(0.50, 1.1057e-1, 4.9993e-1, 9.5550e-2, 1.0485e-1),
(1.00, 9.7682e-2, 4.9978e-1, 7.5017e-2, 8.2555e-2),
(1.50, 8.4916e-2, 4.9993e-1, 4.6412e-2, 5.1824e-2),
(2.00, 7.3000e-2, 5.0008e-1, 1.1640e-2, 1.3790e-2),
(2.50, 6.1705e-2, 4.9987e-1, 4.0818e-4, 5.3380e-4),
(3.00, 5.1501e-2, 5.0020e-1, 4.8765e-5, 8.0247e-6),
(3.50, 4.1921e-2, 5.0005e-1, 0, 0),
(4.00, 3.3645e-2, 4.9959e-1, 0, 0),
(5.00, 1.9973e-2, 4.9890e-1, 0, 0),
(6.00, 1.0584e-2, 3.8048e-1, 0, 0),
(7.00, 4.8994e-3, 4.0660e-2, 0, 0),
(8.00, 1.8194e-3, 3.8519e-4, 0, 0),
(9.00, 5.6235e-4, 8.1790e-6, 0, 0),
(10.00, 1.3133e-4, 6.1728e-7, 0, 0),
(11.00, 2.5154e-5, 0, 0, 0),
)
#let pts_unc = raw_data.map(d => (d.at(0), log10(d.at(1))))
#let pts_bf = raw_data.map(d => (d.at(0), log10(d.at(2))))
#let pts_sp = raw_data.map(d => (d.at(0), log10(d.at(3))))
#let pts_ms = raw_data.map(d => (d.at(0), log10(d.at(4))))
#myslide([Waterfall : LDPC (3, 9) $n = 1296, space k = 864, space R = 2/3$])[
#align(center)[
// #rect(fill: gray.lighten(95%), radius: 4pt, inset: 8pt)[
// #set text(size: 16pt)
// Comparaison BER : *Bit-Flipping* (Décision dure) vs *Soft-Decisions* (SP & MS)
// ]
#comparison_waterfall_plot(pts_unc, pts_bf, pts_sp, pts_ms)
]
]
#myslide("Image")[
Test de transmission d'image avec différent ldpc non opti et opti (le H)
#myslide("QC-LDPC")[
]
#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)
]
#[]<fin>
#myslide("Annexe")[
#align(center + horizon)[
Annexe
@ -1176,6 +1279,10 @@
Poser les notations algebriques etc...
]
#myslide("Définition du BER et SFR")[
]
#myslide("Decodage par maximum de vraisemblance")[
Expliquer, quelle distance ? etc
]
@ -1187,3 +1294,11 @@
#myslide("Maths deriere Belief Propagation")[
]
#myslide("AWGN")[
]
#myslide("PEG")[
]