pof
This commit is contained in:
352
composants.typ
352
composants.typ
@ -406,22 +406,25 @@
|
|||||||
accent: black,
|
accent: black,
|
||||||
titre_taille: 1.13em,
|
titre_taille: 1.13em,
|
||||||
corps_taille: 1.2em,
|
corps_taille: 1.2em,
|
||||||
|
compact: false,
|
||||||
contenu,
|
contenu,
|
||||||
) = {
|
) = {
|
||||||
|
let largeur = if compact { auto } else { 100% }
|
||||||
|
let colonne = if compact { (5pt, auto) } else { (5pt, 1fr) }
|
||||||
|
|
||||||
block(
|
block(
|
||||||
width: 100%,
|
width: largeur,
|
||||||
fill: rgb("#f8f9fa"),
|
fill: rgb("#f8f9fa"),
|
||||||
stroke: 0.5pt + gray.lighten(60%),
|
stroke: 0.5pt + gray.lighten(60%),
|
||||||
radius: 8pt,
|
radius: 8pt,
|
||||||
clip: true,
|
clip: true,
|
||||||
|
|
||||||
grid(
|
grid(
|
||||||
columns: (5pt, 1fr),
|
columns: colonne,
|
||||||
rows: auto,
|
rows: auto,
|
||||||
fill: (col, row) => if col == 0 { accent },
|
fill: (col, row) => if col == 0 { accent },
|
||||||
[],
|
[],
|
||||||
block(
|
block(
|
||||||
width: 100%,
|
width: largeur,
|
||||||
inset: (x: 16pt, y: 15pt),
|
inset: (x: 16pt, y: 15pt),
|
||||||
{
|
{
|
||||||
{
|
{
|
||||||
@ -615,6 +618,7 @@
|
|||||||
let col-code-long = blue.darken(20%)
|
let col-code-long = blue.darken(20%)
|
||||||
let col-code-short = gray.lighten(10%)
|
let col-code-short = gray.lighten(10%)
|
||||||
set text(size: 11pt)
|
set text(size: 11pt)
|
||||||
|
let label_size = 18pt
|
||||||
|
|
||||||
move(dx: -5pt, dy: 0pt)[
|
move(dx: -5pt, dy: 0pt)[
|
||||||
#cetz.canvas({
|
#cetz.canvas({
|
||||||
@ -644,14 +648,16 @@
|
|||||||
stroke: 0.5pt + gray,
|
stroke: 0.5pt + gray,
|
||||||
fill: white,
|
fill: white,
|
||||||
padding: 0.2,
|
padding: 0.2,
|
||||||
offset: (-161.4pt, -45.1pt),
|
offset: (-204.8pt, -66.1pt),
|
||||||
|
spacing: 0.4,
|
||||||
),
|
),
|
||||||
|
|
||||||
{
|
{
|
||||||
// 1. Limite de Shannon
|
// 1. Limite de Shannon
|
||||||
plot.add(
|
plot.add(
|
||||||
((1.5, -8.5), (1.5, 0.2)),
|
((1.5, -8.5), (1.5, 0.2)),
|
||||||
style: (stroke: (paint: col-shannon, thickness: 2.5pt, dash: "dashed")),
|
style: (stroke: (paint: col-shannon, thickness: 2.5pt, dash: "dashed")),
|
||||||
label: [Limite de Shannon],
|
label: text(size: label_size)[Limite de Shannon],
|
||||||
)
|
)
|
||||||
|
|
||||||
// 2. Code court (n ≈ 100)
|
// 2. Code court (n ≈ 100)
|
||||||
@ -675,7 +681,7 @@
|
|||||||
style: (stroke: (paint: col-code-short, thickness: 1.5pt, dash: "dashed")),
|
style: (stroke: (paint: col-code-short, thickness: 1.5pt, dash: "dashed")),
|
||||||
mark: "+",
|
mark: "+",
|
||||||
mark-style: (stroke: (paint: col-code-short, thickness: 0.08), size: 0.6),
|
mark-style: (stroke: (paint: col-code-short, thickness: 0.08), size: 0.6),
|
||||||
label: [$n approx 100$],
|
label: text(size: label_size)[$n approx 100$],
|
||||||
)
|
)
|
||||||
|
|
||||||
// 3. Code long (n = 64 800)
|
// 3. Code long (n = 64 800)
|
||||||
@ -699,7 +705,7 @@
|
|||||||
style: (stroke: (paint: col-code-long, thickness: 2.5pt)),
|
style: (stroke: (paint: col-code-long, thickness: 2.5pt)),
|
||||||
mark: "square",
|
mark: "square",
|
||||||
mark-style: (stroke: (paint: col-code-long, thickness: 0.08), fill: white, size: 0.5),
|
mark-style: (stroke: (paint: col-code-long, thickness: 0.08), fill: white, size: 0.5),
|
||||||
label: [$n = 64\,800$],
|
label: text(size: label_size)[$n = 64800$],
|
||||||
)
|
)
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
@ -1230,6 +1236,156 @@
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#let hldpc_col24(row1: 0, row2: 9, row3: 14, col: 24) = {
|
||||||
|
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),
|
||||||
|
(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),
|
||||||
|
)
|
||||||
|
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
|
||||||
|
let col_v = red
|
||||||
|
|
||||||
|
draw.content((-3.4, -7.5), text(size: 1.6em)[$H =$])
|
||||||
|
|
||||||
|
// Fonds de lignes horizontales
|
||||||
|
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)
|
||||||
|
|
||||||
|
// Fond de colonne verticale rouge
|
||||||
|
draw.rect((col, 0.3), (col + 1, -ny - 0.3), fill: col_v.lighten(88%), stroke: none)
|
||||||
|
|
||||||
|
// Label r_24 sous la colonne
|
||||||
|
draw.content(
|
||||||
|
(col + 0.5, -ny - 1.0),
|
||||||
|
text(size: 0.85em, fill: col_v)[$r_(24)$],
|
||||||
|
)
|
||||||
|
|
||||||
|
// 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))
|
||||||
|
|
||||||
|
// Points
|
||||||
|
for (x, y) in points {
|
||||||
|
let d_col = gray.darken(30%)
|
||||||
|
let r = 0.15
|
||||||
|
|
||||||
|
let is_highlighted_row = (y == row1 or y == row2 or y == row3)
|
||||||
|
let is_col = (x == col)
|
||||||
|
|
||||||
|
if is_col and is_highlighted_row {
|
||||||
|
// Intersection : rouge, plus gros, prioritaire
|
||||||
|
d_col = col_v
|
||||||
|
r = 0.30
|
||||||
|
} else 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),
|
||||||
@ -3110,7 +3266,7 @@
|
|||||||
line((0.8, 0), "verdict.west", stroke: (paint: black, thickness: 1.3pt, dash: "dotted"))
|
line((0.8, 0), "verdict.west", stroke: (paint: black, thickness: 1.3pt, dash: "dotted"))
|
||||||
})
|
})
|
||||||
|
|
||||||
// ③ Schéma Min-Sum : comparaison SP vs MS + highlight du terme minimum
|
// Schéma Min-Sum : comparaison SP vs MS + highlight du terme minimum
|
||||||
// #let schema_min_sum_vis() = {
|
// #let schema_min_sum_vis() = {
|
||||||
// cetz.canvas(length: 1cm, {
|
// cetz.canvas(length: 1cm, {
|
||||||
// import cetz.draw: *
|
// import cetz.draw: *
|
||||||
@ -3205,7 +3361,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
rect((-2.5, -0.5), (-1.5, 0.5), name: "cn", stroke: 2pt + orange, fill: orange.lighten(92%))
|
rect((-2.5, -0.5), (-1.5, 0.5), name: "cn", stroke: 2pt + orange, fill: orange.lighten(92%))
|
||||||
content((-2.0, 0), text(size: 1.2em, fill: orange, weight: "bold")[$c$])
|
content((-2.01, 0.07), text(size: 1.2em, fill: orange, weight: "bold")[$c$])
|
||||||
|
|
||||||
for i in (0, 1, 2, 3) {
|
for i in (0, 1, 2, 3) {
|
||||||
let y_pos = 2.25 - i * 1.5
|
let y_pos = 2.25 - i * 1.5
|
||||||
@ -3253,66 +3409,6 @@
|
|||||||
])
|
])
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
#let waterfall_plot(pts_uncoded, pts_bf) = {
|
|
||||||
cetz.canvas({
|
|
||||||
import cetz.draw
|
|
||||||
plot.plot(
|
|
||||||
size: (23, 14.5),
|
|
||||||
x-label: pad(top: 5cm)[],
|
|
||||||
y-label: [BER],
|
|
||||||
x-min: 0,
|
|
||||||
x-max: 8,
|
|
||||||
y-min: -9,
|
|
||||||
y-max: 0.2,
|
|
||||||
x-tick-step: 1,
|
|
||||||
y-tick-step: 1,
|
|
||||||
x-grid: true,
|
|
||||||
y-grid: true,
|
|
||||||
y-format: y => $10^(#int(y))$,
|
|
||||||
x-format: x => pad(top: 1cm)[#x],
|
|
||||||
legend: (2, 6),
|
|
||||||
legend-style: (
|
|
||||||
padding: 0.3,
|
|
||||||
stroke: gray.lighten(50%),
|
|
||||||
fill: white,
|
|
||||||
),
|
|
||||||
{
|
|
||||||
plot.annotate({
|
|
||||||
// for decade in range(-9, 0) {
|
|
||||||
// for minor in (2, 3, 4, 5, 6, 7, 8, 9) {
|
|
||||||
// let y_pos = decade + (calc.log(minor) / calc.log(10))
|
|
||||||
// if y_pos >= -9 and y_pos <= 0 {
|
|
||||||
// draw.line(
|
|
||||||
// (0, y_pos),
|
|
||||||
// (8, y_pos),
|
|
||||||
// stroke: (paint: gray.lighten(70%), thickness: 0.3pt),
|
|
||||||
// )
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
draw.content((4, -10), text(size: 1.2em)[$E_b/N_0$ (dB)])
|
|
||||||
})
|
|
||||||
plot.add(
|
|
||||||
pts_uncoded,
|
|
||||||
label: [Signal non codé],
|
|
||||||
style: (stroke: (paint: orange, thickness: 2pt, dash: "dashed")),
|
|
||||||
mark: "+",
|
|
||||||
mark-style: (stroke: orange, size: 0.5),
|
|
||||||
)
|
|
||||||
|
|
||||||
plot.add(
|
|
||||||
pts_bf,
|
|
||||||
label: [Bit-Flipping],
|
|
||||||
style: (stroke: (paint: blue, thickness: 2.5pt)),
|
|
||||||
mark: "square",
|
|
||||||
mark-style: (stroke: blue, fill: white, size: 0.25),
|
|
||||||
)
|
|
||||||
},
|
|
||||||
)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
#let convergence_plot(iters, syndrms) = {
|
#let convergence_plot(iters, syndrms) = {
|
||||||
let n = iters.len()
|
let n = iters.len()
|
||||||
let max_s = 160.0
|
let max_s = 160.0
|
||||||
@ -3360,8 +3456,8 @@
|
|||||||
import cetz.draw: *
|
import cetz.draw: *
|
||||||
plot.plot(
|
plot.plot(
|
||||||
size: (22, 15),
|
size: (22, 15),
|
||||||
x-label: none,
|
x-label: pad(bottom: 30pt)[#move(dy: 90pt)[#text(size: 1.3em)[$E_b/N_0$ (dB)]]],
|
||||||
y-label: none,
|
y-label: move(dx: -20pt, dy: -10pt)[#text(size: 1.3em)[BER]],
|
||||||
x-min: 0,
|
x-min: 0,
|
||||||
x-max: 10,
|
x-max: 10,
|
||||||
y-min: -9,
|
y-min: -9,
|
||||||
@ -3370,28 +3466,14 @@
|
|||||||
y-tick-step: 1,
|
y-tick-step: 1,
|
||||||
x-grid: true,
|
x-grid: true,
|
||||||
y-grid: true,
|
y-grid: true,
|
||||||
style: (
|
y-format: y => move(dx: -5pt)[$10^(#int(y))$],
|
||||||
axes: (
|
x-format: x => move(dy: 14pt)[#text(size: 16pt)[#int(x)]],
|
||||||
bottom: (tick: (label: (offset: 0.2))), // Chiffres plus proches de l'axe
|
|
||||||
left: (tick: (label: (offset: 0.2))),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
y-format: y => $10^(#int(y))$,
|
|
||||||
x-format: x => [#x],
|
|
||||||
legend: (14.4, 12.9),
|
legend: (14.4, 12.9),
|
||||||
legend-style: (padding: 0.3, stroke: gray.lighten(50%), fill: white),
|
legend-style: (padding: 0.3, stroke: gray.lighten(50%), fill: white),
|
||||||
{
|
{
|
||||||
plot.annotate({
|
plot.annotate({
|
||||||
// for decade in range(-9, 0) {
|
// content((4, -9.9), text(size: 1.3em)[$E_b/N_0$ (dB)])
|
||||||
// for minor in (2, 3, 4, 5, 6, 7, 8, 9) {
|
// content((-1, -4.5), angle: 90deg, text(size: 1.3em)[BER])
|
||||||
// let y_pos = decade + (calc.log(minor) / calc.log(10))
|
|
||||||
// if y_pos >= -9 and y_pos <= 0 {
|
|
||||||
// line((0, y_pos), (8, y_pos), stroke: (paint: gray.lighten(60%), thickness: 0.3pt))
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
content((4, -9.9), text(size: 1.3em)[$E_b/N_0$ (dB)])
|
|
||||||
content((-1, -4.5), angle: 90deg, text(size: 1.3em)[BER])
|
|
||||||
})
|
})
|
||||||
plot.add(
|
plot.add(
|
||||||
pts_uncoded,
|
pts_uncoded,
|
||||||
@ -3412,6 +3494,63 @@
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// #let waterfall_plot(pts_uncoded, pts_bf) = {
|
||||||
|
// cetz.canvas({
|
||||||
|
// import cetz.draw: *
|
||||||
|
// plot.plot(
|
||||||
|
// size: (22, 15),
|
||||||
|
// x-label: none,
|
||||||
|
// y-label: none,
|
||||||
|
// x-min: 0,
|
||||||
|
// x-max: 10,
|
||||||
|
// y-min: -9,
|
||||||
|
// y-max: 0.2,
|
||||||
|
// x-tick-step: 1,
|
||||||
|
// y-tick-step: 1,
|
||||||
|
// x-grid: true,
|
||||||
|
// y-grid: true,
|
||||||
|
// style: (
|
||||||
|
// axes: (
|
||||||
|
// bottom: (tick: (label: (offset: 0.2))), // Chiffres plus proches de l'axe
|
||||||
|
// left: (tick: (label: (offset: 0.2))),
|
||||||
|
// ),
|
||||||
|
// ),
|
||||||
|
// y-format: y => $10^(#int(y))$,
|
||||||
|
// x-format: x => [#x],
|
||||||
|
// legend: (14.4, 12.9),
|
||||||
|
// legend-style: (padding: 0.3, stroke: gray.lighten(50%), fill: white),
|
||||||
|
// {
|
||||||
|
// plot.annotate({
|
||||||
|
// // for decade in range(-9, 0) {
|
||||||
|
// // for minor in (2, 3, 4, 5, 6, 7, 8, 9) {
|
||||||
|
// // let y_pos = decade + (calc.log(minor) / calc.log(10))
|
||||||
|
// // if y_pos >= -9 and y_pos <= 0 {
|
||||||
|
// // line((0, y_pos), (8, y_pos), stroke: (paint: gray.lighten(60%), thickness: 0.3pt))
|
||||||
|
// // }
|
||||||
|
// // }
|
||||||
|
// // }
|
||||||
|
// content((4, -9.9), text(size: 1.3em)[$E_b/N_0$ (dB)])
|
||||||
|
// content((-1, -4.5), angle: 90deg, text(size: 1.3em)[BER])
|
||||||
|
// })
|
||||||
|
// plot.add(
|
||||||
|
// pts_uncoded,
|
||||||
|
// label: [Signal non codé],
|
||||||
|
// style: (stroke: (paint: orange, thickness: 2pt, dash: "dashed")),
|
||||||
|
// mark: "+",
|
||||||
|
// mark-style: (stroke: orange, size: 0.5),
|
||||||
|
// )
|
||||||
|
// plot.add(
|
||||||
|
// pts_bf,
|
||||||
|
// label: [Bit-Flipping LDPC],
|
||||||
|
// style: (stroke: (paint: blue, thickness: 2.5pt)),
|
||||||
|
// mark: "square",
|
||||||
|
// mark-style: (stroke: blue, fill: white, size: 0.25),
|
||||||
|
// )
|
||||||
|
// },
|
||||||
|
// )
|
||||||
|
// })
|
||||||
|
// }
|
||||||
|
|
||||||
#let simulation_image_flow(img_orig, img_noisy, img_r05, img_r66, img_r75, img_w: 150pt, gap_top: 3.0, gap_bot: 4.0) = {
|
#let simulation_image_flow(img_orig, img_noisy, img_r05, img_r66, img_r75, img_w: 150pt, gap_top: 3.0, gap_bot: 4.0) = {
|
||||||
cetz.canvas({
|
cetz.canvas({
|
||||||
import cetz.draw: *
|
import cetz.draw: *
|
||||||
@ -3491,8 +3630,8 @@
|
|||||||
import cetz.draw: *
|
import cetz.draw: *
|
||||||
plot.plot(
|
plot.plot(
|
||||||
size: (21, 15),
|
size: (21, 15),
|
||||||
x-label: none,
|
x-label: pad(bottom: 30pt)[#move(dy: 80pt)[#text(size: 16pt)[$E_b/N_0$ (dB)]]],
|
||||||
y-label: none,
|
y-label: move(dx: -20pt, dy: -10pt)[#text(size: 16pt)[BER]],
|
||||||
x-min: 0,
|
x-min: 0,
|
||||||
x-max: 11,
|
x-max: 11,
|
||||||
y-min: -8,
|
y-min: -8,
|
||||||
@ -3501,33 +3640,11 @@
|
|||||||
y-tick-step: 1,
|
y-tick-step: 1,
|
||||||
x-grid: true,
|
x-grid: true,
|
||||||
y-grid: true,
|
y-grid: true,
|
||||||
style: (
|
y-format: y => move(dx: -5pt)[$10^(#int(y))$],
|
||||||
axes: (
|
x-format: x => move(dy: 14pt)[#text(size: 16pt)[#int(x)]],
|
||||||
bottom: (tick: (label: (offset: 0.2))),
|
|
||||||
left: (tick: (label: (offset: 0.2))),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
y-format: y => $10^(#int(y))$,
|
|
||||||
x-format: x => [#x],
|
|
||||||
legend: (13.2, 11.4),
|
legend: (13.2, 11.4),
|
||||||
legend-style: (padding: 0.3, stroke: gray.lighten(50%), fill: white),
|
legend-style: (padding: 0.3, stroke: gray.lighten(50%), fill: white),
|
||||||
{
|
{
|
||||||
plot.annotate({
|
|
||||||
// Grille logarithmique étendue jusqu'à x=11
|
|
||||||
// for decade in range(-8, 0) {
|
|
||||||
// for minor in (2, 3, 4, 5, 6, 7, 8, 9) {
|
|
||||||
// let y_pos = decade + (calc.log(minor) / calc.log(10))
|
|
||||||
// if y_pos >= -8 and y_pos <= 0 {
|
|
||||||
// line((0, y_pos), (11, y_pos), stroke: (paint: gray.lighten(75%), thickness: 0.3pt))
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// Label X centré sur 11 unités (environ 5.5)
|
|
||||||
content((5.5, -8.7), text(size: 1.3em)[$E_b/N_0$ (dB)])
|
|
||||||
// Label Y
|
|
||||||
content((-1.2, -4.0), angle: 90deg, text(size: 1.3em)[BER])
|
|
||||||
})
|
|
||||||
|
|
||||||
plot.add(
|
plot.add(
|
||||||
pts_unc,
|
pts_unc,
|
||||||
label: [Signal non codé],
|
label: [Signal non codé],
|
||||||
@ -3535,7 +3652,6 @@
|
|||||||
mark: "+",
|
mark: "+",
|
||||||
mark-style: (stroke: orange, size: 1),
|
mark-style: (stroke: orange, size: 1),
|
||||||
)
|
)
|
||||||
|
|
||||||
plot.add(
|
plot.add(
|
||||||
pts_bf,
|
pts_bf,
|
||||||
label: [Bit-Flipping (Hard)],
|
label: [Bit-Flipping (Hard)],
|
||||||
@ -3543,7 +3659,6 @@
|
|||||||
mark: "x",
|
mark: "x",
|
||||||
mark-style: (stroke: red, size: 1),
|
mark-style: (stroke: red, size: 1),
|
||||||
)
|
)
|
||||||
|
|
||||||
plot.add(
|
plot.add(
|
||||||
pts_ms,
|
pts_ms,
|
||||||
label: [Min-Sum (Soft)],
|
label: [Min-Sum (Soft)],
|
||||||
@ -3551,7 +3666,6 @@
|
|||||||
mark: "triangle",
|
mark: "triangle",
|
||||||
mark-style: (stroke: green.darken(20%), fill: white, size: 0.3),
|
mark-style: (stroke: green.darken(20%), fill: white, size: 0.3),
|
||||||
)
|
)
|
||||||
|
|
||||||
plot.add(
|
plot.add(
|
||||||
pts_sp,
|
pts_sp,
|
||||||
label: [Sum-Product (Soft)],
|
label: [Sum-Product (Soft)],
|
||||||
|
|||||||
603
main.typ
603
main.typ
@ -35,12 +35,6 @@
|
|||||||
#v(1fr)
|
#v(1fr)
|
||||||
]
|
]
|
||||||
|
|
||||||
#myslide("Introduction : Communication Numérique")[
|
|
||||||
#place(center + horizon, dy: 8cm)[
|
|
||||||
#canal_shannon_intro()
|
|
||||||
]
|
|
||||||
]
|
|
||||||
|
|
||||||
#myslide("Introduction : Utilisation")[
|
#myslide("Introduction : Utilisation")[
|
||||||
#align(center + horizon)[
|
#align(center + horizon)[
|
||||||
#grid(
|
#grid(
|
||||||
@ -85,6 +79,12 @@
|
|||||||
]
|
]
|
||||||
]
|
]
|
||||||
|
|
||||||
|
#myslide("Introduction : Communication Numérique")[
|
||||||
|
#place(center + horizon, dy: 8cm)[
|
||||||
|
#canal_shannon_intro()
|
||||||
|
]
|
||||||
|
]
|
||||||
|
|
||||||
#myslide("Problématique")[
|
#myslide("Problématique")[
|
||||||
#place(center + horizon, dy: 8.1cm)[#graphe_tanner_fond(0.9cm, 1.75)]
|
#place(center + horizon, dy: 8.1cm)[#graphe_tanner_fond(0.9cm, 1.75)]
|
||||||
#place(center + horizon, dy: 7.7cm)[
|
#place(center + horizon, dy: 7.7cm)[
|
||||||
@ -96,7 +96,6 @@
|
|||||||
]
|
]
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
#myslide("Plan")[
|
#myslide("Plan")[
|
||||||
#grid(
|
#grid(
|
||||||
columns: (auto, 1fr),
|
columns: (auto, 1fr),
|
||||||
@ -114,7 +113,6 @@
|
|||||||
]
|
]
|
||||||
|
|
||||||
#myslide("Définition : Codes Linéaires en Bloc")[
|
#myslide("Définition : Codes Linéaires en Bloc")[
|
||||||
#place(dy: 2.5cm)[
|
|
||||||
#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$
|
||||||
]
|
]
|
||||||
@ -128,10 +126,17 @@
|
|||||||
|
|
||||||
#definition(titre: "Encodage")[
|
#definition(titre: "Encodage")[
|
||||||
$Phi : FF_2^k & -> FF_2^n in cal(L)(FF_2^k, FF_2^n)$
|
$Phi : FF_2^k & -> FF_2^n in cal(L)(FF_2^k, FF_2^n)$
|
||||||
]]
|
]
|
||||||
|
|
||||||
|
#v(-1.3em)
|
||||||
|
|
||||||
|
#align(center + horizon)[
|
||||||
|
#plongement_schema()
|
||||||
|
]
|
||||||
]
|
]
|
||||||
|
|
||||||
#myslide("Définition : Matrice Génératrice")[
|
#myslide("Définition : Matrice Génératrice")[
|
||||||
|
#v(0.80cm)
|
||||||
#definition(titre: "Matrice Génératrice")[
|
#definition(titre: "Matrice Génératrice")[
|
||||||
$G in cal(M)_(k,n)(FF_2)$ dont les lignes sont une base de $cal(C)$
|
$G in cal(M)_(k,n)(FF_2)$ dont les lignes sont une base de $cal(C)$
|
||||||
]
|
]
|
||||||
@ -139,7 +144,7 @@
|
|||||||
#definition(titre: "Encodage")[
|
#definition(titre: "Encodage")[
|
||||||
Pour un message $u in FF_2^k$ le mot de code $c in cal(C)$ est :
|
Pour un message $u in FF_2^k$ le mot de code $c in cal(C)$ est :
|
||||||
$
|
$
|
||||||
c = Phi(u) = u dot.o G
|
c = Phi(u) = u G
|
||||||
$
|
$
|
||||||
]
|
]
|
||||||
|
|
||||||
@ -169,6 +174,7 @@
|
|||||||
]
|
]
|
||||||
|
|
||||||
#myslide("Définition : Matrice de Contrôle")[
|
#myslide("Définition : Matrice de Contrôle")[
|
||||||
|
#v(1.1cm)
|
||||||
#definition(titre: "Matrice de Contrôle")[
|
#definition(titre: "Matrice de Contrôle")[
|
||||||
// $H = mat(
|
// $H = mat(
|
||||||
// P^top, I_(n-k);
|
// P^top, I_(n-k);
|
||||||
@ -187,7 +193,7 @@
|
|||||||
#set text(size: 1.2em)
|
#set text(size: 1.2em)
|
||||||
// - $cal(C) = ker(H) = {v in FF_2^n | H dot.o v^top = 0}$
|
// - $cal(C) = ker(H) = {v in FF_2^n | H dot.o v^top = 0}$
|
||||||
|
|
||||||
- $cal(C) = ker(H)$ -- $H c^top = 0$ $=>$ $c$ mot de code valide
|
- $cal(C) = ker(H)$ -- $H c^top = 0$ $=>$ $c in cal(C)$
|
||||||
|
|
||||||
|
|
||||||
// - $display(G dot.o H^top = 0)$
|
// - $display(G dot.o H^top = 0)$
|
||||||
@ -201,7 +207,7 @@
|
|||||||
]
|
]
|
||||||
#[
|
#[
|
||||||
#set text(size: 1.2em)
|
#set text(size: 1.2em)
|
||||||
- $s = 0 => r space$ mot de code valide
|
- $s = 0 => r in cal(C)$
|
||||||
- $s != 0$ donne la signature de l'erreur $e$
|
- $s != 0$ donne la signature de l'erreur $e$
|
||||||
]
|
]
|
||||||
// Possible décodage par syndrome
|
// Possible décodage par syndrome
|
||||||
@ -257,29 +263,27 @@
|
|||||||
]
|
]
|
||||||
|
|
||||||
#myslide("Exemple d'un code linéaire")[
|
#myslide("Exemple d'un code linéaire")[
|
||||||
#let colp = orange // Partie P (Parité)
|
#let colp = orange
|
||||||
#let colu = blue // Partie I (Identité)
|
#let colu = blue
|
||||||
|
#let cole = red
|
||||||
#set math.mat(delim: "[")
|
#set math.mat(delim: "[")
|
||||||
#v(0.4cm)
|
#v(0.2cm)
|
||||||
|
|
||||||
#set text(size: 1.1em)
|
#set text(size: 1.1em)
|
||||||
Structure systématique de $H$ :
|
Structure systématique de $H$ :
|
||||||
|
#v(0.3em)
|
||||||
#v(0.5em)
|
|
||||||
#align(center)[
|
#align(center)[
|
||||||
#scale(120%)[
|
#scale(108%)[
|
||||||
#dessiner_matrice($H =$, (
|
#dessiner_matrice($H =$, (
|
||||||
(texte: $P^top$, largeur: 2.0, fond: colp.lighten(90%)),
|
(texte: $P^top$, largeur: 2.0, fond: colp.lighten(90%)),
|
||||||
(texte: $I_3$, largeur: 3.0, fond: colu.lighten(90%)),
|
(texte: $I_3$, largeur: 3.0, fond: colu.lighten(90%)),
|
||||||
))
|
))
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
|
#v(0.4em)
|
||||||
#v(0.8em)
|
|
||||||
Ainsi :
|
Ainsi :
|
||||||
|
#v(-1.2em)
|
||||||
#align(center)[
|
#align(center)[
|
||||||
#scale(115%)[
|
#scale(110%)[
|
||||||
$
|
$
|
||||||
H = mat(
|
H = mat(
|
||||||
text(fill: colp, "1"), text(fill: colp, "0"), text(fill: colu, "1"), text(fill: colu, "0"), text(fill: colu, "0");
|
text(fill: colp, "1"), text(fill: colp, "0"), text(fill: colu, "1"), text(fill: colu, "0"), text(fill: colu, "0");
|
||||||
@ -289,23 +293,21 @@
|
|||||||
$
|
$
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
|
#v(0.55em)
|
||||||
#v(0.8em)
|
Mot de code valide $c = (#text(fill: colp)[1], #text(fill: colp)[1], #text(fill: colu)[1], #text(fill: colu)[0], #text(fill: colu)[1])$ : #h(0.4em) $H c^top = mat(0; 0; 0)$ #h(0.5em) #text(fill: green.darken(20%))[✓]
|
||||||
// Vérification du mot de code $c = mat(text(fill: colp, "1"), text(fill: colp, "1"), text(fill: colu, "1"), text(fill: colu, "0"), text(fill: colu, "1"))$ :
|
#v(-0.5em)
|
||||||
Vérification du mot de code $c = (#text(fill: colp)[1], #text(fill: colp)[1], #text(fill: colu)[1], #text(fill: colu)[0], #text(fill: colu)[1])$ :
|
Mot reçu avec #text(fill: cole)[une erreur] : $r = (#text(fill: colp)[1], #text(fill: colp)[1], text(fill: cole, "0"), #text(fill: colu)[0], #text(fill: colu)[1])$
|
||||||
|
|
||||||
#v(0.4em)
|
#v(0.4em)
|
||||||
#align(center)[
|
#align(center)[
|
||||||
#scale(115%)[
|
#scale(110%)[
|
||||||
$
|
$
|
||||||
H c^top = mat(
|
H r^top = mat(
|
||||||
text(fill: colp, "1"), text(fill: colp, "0"), text(fill: colu, "1"), text(fill: colu, "0"), text(fill: colu, "0");
|
text(fill: colp, "1"), text(fill: colp, "0"), text(fill: colu, "1"), text(fill: colu, "0"), text(fill: colu, "0");
|
||||||
text(fill: colp, "1"), text(fill: colp, "1"), text(fill: colu, "0"), text(fill: colu, "1"), text(fill: colu, "0");
|
text(fill: colp, "1"), text(fill: colp, "1"), text(fill: colu, "0"), text(fill: colu, "1"), text(fill: colu, "0");
|
||||||
text(fill: colp, "0"), text(fill: colp, "1"), text(fill: colu, "0"), text(fill: colu, "0"), text(fill: colu, "1")
|
text(fill: colp, "0"), text(fill: colp, "1"), text(fill: colu, "0"), text(fill: colu, "0"), text(fill: colu, "1")
|
||||||
) mat(
|
) mat(
|
||||||
text(fill: colp, "1"), text(fill: colp, "1"), text(fill: colu, "1"), text(fill: colu, "0"), text(fill: colu, "1")
|
text(fill: colp, "1"), text(fill: colp, "1"), text(fill: cole, "0"), text(fill: colu, "0"), text(fill: colu, "1")
|
||||||
)^top
|
)^top = mat(1; 0; 0) != mat(0; 0; 0)
|
||||||
= mat(0; 0; 0)
|
|
||||||
$
|
$
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
@ -334,7 +336,9 @@
|
|||||||
$ hat(bold(c)) = arg min_(bold(c) in cal(C)) d_H (bold(r), bold(c)) $
|
$ hat(bold(c)) = arg min_(bold(c) in cal(C)) d_H (bold(r), bold(c)) $
|
||||||
]
|
]
|
||||||
|
|
||||||
|
#text(size: 21pt)[
|
||||||
- Équivalent à chercher l'erreur $bold(e)$ de poids minimal tel que $bold(H) bold(e)^top = bold(s)$.
|
- Équivalent à chercher l'erreur $bold(e)$ de poids minimal tel que $bold(H) bold(e)^top = bold(s)$.
|
||||||
|
]
|
||||||
|
|
||||||
#v(0.5em)
|
#v(0.5em)
|
||||||
|
|
||||||
@ -350,42 +354,92 @@
|
|||||||
#definition(titre: [Codes LDPC Réguliers])[
|
#definition(titre: [Codes LDPC Réguliers])[
|
||||||
#text(size: 22.97pt)[
|
#text(size: 22.97pt)[
|
||||||
Code linéaire en bloc avec une matrice de contrôle $bold(H)$ *clairsemée*.
|
Code linéaire en bloc avec une matrice de contrôle $bold(H)$ *clairsemée*.
|
||||||
|
#align(center)[
|
||||||
|
#grid(
|
||||||
|
columns: (auto, 3em, auto),
|
||||||
|
align: left,
|
||||||
|
[- Poids de Colonne *$w_c$*], [], [- Poids de Ligne *$w_r$*],
|
||||||
|
)
|
||||||
|
]
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
|
|
||||||
- Poids de Colonne *$w_c$*
|
#place(center, dx: -290pt, dy: 60pt)[
|
||||||
|
#text(size: 13pt, style: "italic", fill: luma(160))[
|
||||||
|
$H in cal(M)_(15, 30)(FF_2)$, $display(R = 1/2)$
|
||||||
|
]
|
||||||
|
]
|
||||||
|
#v(-0.3cm)
|
||||||
|
#align(center)[
|
||||||
|
#scale(100%)[#hldpc()]
|
||||||
|
]
|
||||||
|
|
||||||
- Poids de Ligne *$w_r$*
|
#v(0.0cm)
|
||||||
|
#grid(
|
||||||
#v(0.5em)
|
columns: (1fr, 1fr),
|
||||||
|
column-gutter: 1.75em,
|
||||||
#definition(titre: "Conditions de Faible Densité", accent: black)[
|
[#definition(titre: "Faible Densité", accent: black)[
|
||||||
#set align(center)
|
#set align(center)
|
||||||
$w_c << n - k$ #h(2cm) $w_r << n$
|
$w_c << m$ #h(1cm) $w_r << n$
|
||||||
]
|
]],
|
||||||
|
[#definition(titre: "Rendement")[
|
||||||
#definition(titre: "Rendement")[
|
#set align(center)
|
||||||
// $ display(R = (n - op("rg")(H)) / n >= 1 - m / n) $
|
$R = 1 - m / n$
|
||||||
$ display(R = 1 - m / n) $
|
]],
|
||||||
]
|
)
|
||||||
]
|
]
|
||||||
|
|
||||||
#myslide([Matrice de contrôle])[
|
// #myslide("Définition des Codes LDPC")[
|
||||||
// #definition(titre: [Code LDPC $(6, 3)$])[
|
// #v(1.3cm)
|
||||||
// $m w_r = n w_c$ donc $H in cal(M)_(15, 30)(FF_2)$ et $display(R = 1 - m / n = 1/2)$
|
// #definition(titre: [Codes LDPC Réguliers])[
|
||||||
// ]
|
// #text(size: 22.97pt)[
|
||||||
#definition(titre: [Code LDPC $(6, 3)$])[
|
// Code linéaire en bloc avec une matrice de contrôle $bold(H)$ *clairsemée*.
|
||||||
#v(8pt)
|
// ]
|
||||||
$H in cal(M)_(15, 30)(FF_2)$ et $display(R = 1/2)$
|
// ]
|
||||||
#v(5pt)
|
// #v(0.3em)
|
||||||
]
|
// #align(center + horizon)[
|
||||||
|
// #grid(
|
||||||
#v(2cm)
|
// columns: (auto, 3em, auto),
|
||||||
|
// align: left,
|
||||||
#place(center + horizon, dx: 0cm, dy: 7.3cm)[
|
// [• Poids de Colonne *$w_c$*], [], [• Poids de Ligne *$w_r$*],
|
||||||
#scale(140%)[#hldpc()]
|
// )
|
||||||
]
|
// ]
|
||||||
]
|
// #v(0.5em)
|
||||||
|
//
|
||||||
|
// // - 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$
|
||||||
|
// $w_c << m$ #h(2cm) $w_r << n$
|
||||||
|
// ]
|
||||||
|
//
|
||||||
|
// #definition(titre: "Rendement")[
|
||||||
|
// // $ display(R = (n - op("rg")(H)) / n >= 1 - m / n) $
|
||||||
|
// $ display(R = 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)$
|
||||||
|
// // ]
|
||||||
|
// #definition(titre: [Code LDPC $(6, 3)$])[
|
||||||
|
// #v(8pt)
|
||||||
|
// $H in cal(M)_(15, 30)(FF_2)$ et $display(R = 1/2)$
|
||||||
|
// #v(5pt)
|
||||||
|
// ]
|
||||||
|
//
|
||||||
|
// #v(2cm)
|
||||||
|
//
|
||||||
|
// #place(center + horizon, dx: 0cm, dy: 7.3cm)[
|
||||||
|
// #scale(140%)[#hldpc()]
|
||||||
|
// ]
|
||||||
|
// ]
|
||||||
|
|
||||||
#myslide("De la Matrice aux Équations de Parité")[
|
#myslide("De la Matrice aux Équations de Parité")[
|
||||||
#set text(size: 17pt)
|
#set text(size: 17pt)
|
||||||
@ -471,37 +525,33 @@
|
|||||||
// ]
|
// ]
|
||||||
|
|
||||||
#myslide("L'Entrelacement des Contraintes")[
|
#myslide("L'Entrelacement des Contraintes")[
|
||||||
|
#v(0.7cm)
|
||||||
#set text(size: 20pt)
|
#set text(size: 20pt)
|
||||||
|
|
||||||
#align(center)[
|
#align(center)[
|
||||||
#move(dx: -1.2cm)[
|
#move(dx: -1.2cm)[
|
||||||
#scale(110%)[#hldpc_triple(row1: 0, row2: 7, row3: 14)]
|
// #scale(110%)[#hldpc_triple(row1: 0, row2: 9, row3: 14)]
|
||||||
|
#scale(110%)[#hldpc_col24(row1: 0, row2: 9, row3: 14, col: 24)]
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
|
|
||||||
#v(0.5cm)
|
#v(0.5cm)
|
||||||
- Chaque bit $r_i$ participe à $w_c = 3$ équations distinctes :
|
- Chaque bit $r_i$ participe à $w_c = 3$ équations distinctes :
|
||||||
|
|
||||||
#v(0.3cm)
|
#v(0.3cm)
|
||||||
#align(center)[
|
#align(center)[
|
||||||
#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 quad (f_0)$],
|
#text(fill: orange)[$r_7 plus.o r_10 plus.o r_15 plus.o r_22 plus.o$ #text(fill: red)[$bold(r_24)$] #text(fill: orange)[$plus.o r_29 &= 0 quad (f_0)$]],
|
||||||
#text(fill: green.darken(20%))[$r_0 plus.o r_1 plus.o r_4 plus.o r_9 plus.o r_20 plus.o r_26 &= 0 quad (f_7)$],
|
#text(fill: green.darken(20%))[$r_7 plus.o r_13 plus.o r_23 plus.o$ #text(fill: red)[$bold(r_24)$] #text(fill: green.darken(20%))[$plus.o r_25 plus.o r_27 &= 0 quad (f_9)$]],
|
||||||
#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)$]
|
#text(fill: blue)[$r_1 plus.o r_3 space thick$] #h(0.3pt) #text(fill: blue)[$plus.o r_12 plus.o$ #text(fill: red)[$bold(r_24)$] #text(fill: blue)[$plus.o r_25 plus.o r_28 &= 0 quad (f_14)$]]
|
||||||
)
|
)
|
||||||
$
|
$
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
|
|
||||||
#v(0.5cm)
|
#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$].
|
- *$r_24$* : Surveillé simultanément par #text(fill: orange)[$f_0$], #text(fill: green.darken(20%))[$f_9$] et #text(fill: blue)[$f_14$].
|
||||||
|
- Si $forall #tricolor-j in {#text(fill: orange)[$0$], #text(fill: green.darken(20%))[$9$], #text(fill: blue)[$14$]}, space f_(#scale(80%)[#tricolor-j]) = 1$, alors le bit est considéré suspect.
|
||||||
- Si $forall #tricolor-j in {#text(fill: orange)[$0$], #text(fill: green.darken(20%))[$7$], #text(fill: blue)[$24$]}, space f_(#scale(80%)[#tricolor-j]) = 1$, alors le bit est comme suspect.
|
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
#myslide("Graphe de Tanner : Définition")[
|
#myslide("Graphe de Tanner : Définition")[
|
||||||
#set text(size: 1em)
|
#set text(size: 1em)
|
||||||
#definition(titre: [Graphe de Tanner $cal(G)(bold(H))$])[
|
#definition(titre: [Graphe de Tanner $cal(G)(bold(H))$])[
|
||||||
@ -799,65 +849,6 @@
|
|||||||
// ]
|
// ]
|
||||||
]
|
]
|
||||||
|
|
||||||
#myslide("La Topologie de H : Le Girth")[
|
|
||||||
#set text(size: 20pt)
|
|
||||||
|
|
||||||
#definition(titre: "Définition : Le Girth (La Maille)", accent: blue)[
|
|
||||||
Longueur du plus court cycle dans le graphe de Tanner
|
|
||||||
]
|
|
||||||
|
|
||||||
#v(0.5em)
|
|
||||||
|
|
||||||
- Le girth est *pair*
|
|
||||||
- La valeur minimale est $g = 4$.
|
|
||||||
|
|
||||||
#v(1em)
|
|
||||||
|
|
||||||
#align(center)[
|
|
||||||
#block(fill: rgb("#f8fafc"), stroke: 1pt + blue.lighten(50%), inset: 10pt, radius: 5pt)[
|
|
||||||
Girth élevé $=>$ Meilleure diffusion de l'information.
|
|
||||||
]
|
|
||||||
]
|
|
||||||
|
|
||||||
#v(2.5em)
|
|
||||||
|
|
||||||
#align(center)[
|
|
||||||
#scale(140%)[
|
|
||||||
#grid(
|
|
||||||
columns: (1fr, 1fr),
|
|
||||||
gutter: -7cm,
|
|
||||||
[
|
|
||||||
#schema_girth_4(highlight: false)
|
|
||||||
#v(0.5em)
|
|
||||||
#text(size: 0.8em, style: "italic")[Graphe de Tanner]
|
|
||||||
],
|
|
||||||
[
|
|
||||||
#schema_girth_4(highlight: true)
|
|
||||||
#v(0.5em)
|
|
||||||
#text(size: 0.8em, fill: red, weight: "bold")[4-Cycle]
|
|
||||||
],
|
|
||||||
)
|
|
||||||
]
|
|
||||||
]
|
|
||||||
]
|
|
||||||
|
|
||||||
#myslide("Méthode de génération de H")[
|
|
||||||
#place(center + horizon, dy: 8.1cm)[#graphe_tanner_fond(0.9cm, 1.75)]
|
|
||||||
#place(center + horizon, dy: 7cm)[
|
|
||||||
#block(width: 100%)[
|
|
||||||
#text(size: 1.5em, weight: "bold", fill: black)[
|
|
||||||
Gallager \
|
|
||||||
|
|
||||||
Mackay-Neal \
|
|
||||||
|
|
||||||
Progressive Edge-Growth
|
|
||||||
]
|
|
||||||
]
|
|
||||||
]
|
|
||||||
// #align(center + horizon)[
|
|
||||||
// #image("src/construction.jpg", width: 50%)
|
|
||||||
// ]
|
|
||||||
]
|
|
||||||
|
|
||||||
#myslide("Encodage LDPC : Calcul de G")[
|
#myslide("Encodage LDPC : Calcul de G")[
|
||||||
#set text(size: 18pt)
|
#set text(size: 18pt)
|
||||||
@ -1046,24 +1037,33 @@
|
|||||||
// ]
|
// ]
|
||||||
]
|
]
|
||||||
|
|
||||||
#myslide([Résultats : Convergence syndrome])[
|
// #myslide([Résultats : Convergence syndrome])[
|
||||||
#align(center)[#convergence_plot(iters, syndrms)]
|
// #align(center)[#convergence_plot(iters, syndrms)]
|
||||||
]
|
// ]
|
||||||
|
|
||||||
#myslide("Bit-Flipping : Analyse")[
|
// #myslide("Bit-Flipping : Analyse")[
|
||||||
|
#myslide("Bit-Flipping : Syndrome et Analyse")[
|
||||||
|
#place(center + horizon, dx: -2cm, dy: 8cm)[#convergence_plot(iters, syndrms)]
|
||||||
// TODO PARLER DU GIRTH 4 => MAUVAIS
|
// TODO PARLER DU GIRTH 4 => MAUVAIS
|
||||||
#set text(size: 17pt)
|
#set text(size: 17pt)
|
||||||
|
|
||||||
#place(dy: 4.5cm)[
|
#uncover(2)[
|
||||||
#definition(titre: "Avantages", accent: green.darken(10%))[
|
#place(dx: 13cm, dy: 1.0cm)[
|
||||||
|
#scale(100%)[
|
||||||
|
#definition(titre: "Avantages", accent: green.darken(10%), compact: true)[
|
||||||
#set text(size: 0.88em)
|
#set text(size: 0.88em)
|
||||||
- *Complexité* : simples XOR et compteurs -- $cal(O)(n)$ par itération
|
- *Complexité* : XOR et compteurs
|
||||||
|
- $cal(O)(n)$ par itération
|
||||||
// - *Matériel* : idéal FPGA/ASIC, massivement parallélisable
|
// - *Matériel* : idéal FPGA/ASIC, massivement parallélisable
|
||||||
// - *Simplicité* : inventé par Gallager (1962)
|
// - *Simplicité* : inventé par Gallager (1962)
|
||||||
]
|
]
|
||||||
#definition(titre: "Limite", accent: red)[
|
]
|
||||||
|
|
||||||
|
#place(dx: -1.5cm, dy: 1.0cm)[
|
||||||
|
#scale(100%)[
|
||||||
|
#definition(titre: "Limite", accent: red, compact: true)[
|
||||||
#set text(size: 0.88em)
|
#set text(size: 0.88em)
|
||||||
- Ignore la *confiance* du récepteur physique dans le signal
|
- Ignore la *confiance* du récepteur physique
|
||||||
- Un bit reçu à $0.51$ V est traité comme $0$
|
- Un bit reçu à $0.51$ V est traité comme $0$
|
||||||
// - $=>$ Sous-optimal par rapport à la limite de Shannon
|
// - $=>$ Sous-optimal par rapport à la limite de Shannon
|
||||||
|
|
||||||
@ -1075,8 +1075,10 @@
|
|||||||
// )[$arrow$ Nécessite le *Soft-Decision* (Belief Propagation) pour exploiter les niveaux de gris du signal]
|
// )[$arrow$ Nécessite le *Soft-Decision* (Belief Propagation) pour exploiter les niveaux de gris du signal]
|
||||||
// ]
|
// ]
|
||||||
// ]
|
// ]
|
||||||
|
]]
|
||||||
|
]]
|
||||||
]
|
]
|
||||||
]
|
|
||||||
]
|
]
|
||||||
|
|
||||||
#myslide("Décodage Soft : Le LLR")[
|
#myslide("Décodage Soft : Le LLR")[
|
||||||
@ -1094,13 +1096,15 @@
|
|||||||
$
|
$
|
||||||
]
|
]
|
||||||
|
|
||||||
#v(1.3em)
|
#v(2em)
|
||||||
|
|
||||||
#align(center)[
|
#align(center)[
|
||||||
#scale(125%)[#schema_llr_droite()]
|
#move(dx: 1.05cm)[
|
||||||
|
#scale(160%)[#schema_llr_droite()]
|
||||||
|
]
|
||||||
]
|
]
|
||||||
|
|
||||||
#v(1em)
|
#v(1.7em)
|
||||||
|
|
||||||
// Blocs de légende centrés
|
// Blocs de légende centrés
|
||||||
#align(center)[
|
#align(center)[
|
||||||
@ -1134,6 +1138,8 @@
|
|||||||
#definition(titre: "Information Extrinsèque")[
|
#definition(titre: "Information Extrinsèque")[
|
||||||
Exclure l'avis du destinataire pour éviter l'auto-influence
|
Exclure l'avis du destinataire pour éviter l'auto-influence
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
#block(
|
#block(
|
||||||
fill: orange.lighten(92%),
|
fill: orange.lighten(92%),
|
||||||
stroke: (left: 4pt + orange),
|
stroke: (left: 4pt + orange),
|
||||||
@ -1142,12 +1148,14 @@
|
|||||||
width: 100%,
|
width: 100%,
|
||||||
)[
|
)[
|
||||||
#set text(size: 1.2em)
|
#set text(size: 1.2em)
|
||||||
*Mise à jour CN* \
|
*Mise à jour* \
|
||||||
#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) ) $
|
$ m_(c arrow v) = 2 tanh^(-1) ( product_(u in cal(N)(c) \\ {v}) tanh(m_(u arrow c) / 2) ) $
|
||||||
]
|
]
|
||||||
|
|
||||||
|
#place(dx: 5.2cm, dy: -5.2cm)[#scale(170%)[#icon_chk]]
|
||||||
|
|
||||||
#block(
|
#block(
|
||||||
fill: blue.lighten(92%),
|
fill: blue.lighten(92%),
|
||||||
stroke: (left: 4pt + blue),
|
stroke: (left: 4pt + blue),
|
||||||
@ -1156,12 +1164,14 @@
|
|||||||
width: 100%,
|
width: 100%,
|
||||||
)[
|
)[
|
||||||
#set text(size: 1.2em)
|
#set text(size: 1.2em)
|
||||||
*Mise à jour VN* \
|
*Mise à jour* \
|
||||||
#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^((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) $
|
$ m_(v arrow c) = L_(v"canal") + sum_(c' in cal(N)(v) \\ {c}) m_(c' arrow v) $
|
||||||
]
|
]
|
||||||
|
|
||||||
|
#place(dx: 5.2cm, dy: -3.85cm)[#scale(170%)[#icon_var]]
|
||||||
]
|
]
|
||||||
|
|
||||||
#myslide("Sum-Product")[
|
#myslide("Sum-Product")[
|
||||||
@ -1184,9 +1194,11 @@
|
|||||||
]
|
]
|
||||||
|
|
||||||
#place(right, dx: -4.5cm, dy: 0cm)[
|
#place(right, dx: -4.5cm, dy: 0cm)[
|
||||||
#text(weight: "bold", fill: orange, size: 1.1em * 1.3)[Échange CN]
|
#text(weight: "bold", fill: orange, size: 1.1em * 1.3)[Échange]
|
||||||
]
|
]
|
||||||
|
|
||||||
|
#place(dx: 21cm, dy: 0.1cm)[#scale(170%)[#icon_chk]]
|
||||||
|
|
||||||
#place(right, dx: -1cm, dy: 2.7cm)[
|
#place(right, dx: -1cm, dy: 2.7cm)[
|
||||||
#scale(130%)[
|
#scale(130%)[
|
||||||
#schema_detailed_cn()
|
#schema_detailed_cn()
|
||||||
@ -1194,9 +1206,11 @@
|
|||||||
]
|
]
|
||||||
|
|
||||||
#place(left, dx: 1.5cm, dy: 9cm)[
|
#place(left, dx: 1.5cm, dy: 9cm)[
|
||||||
#text(weight: "bold", fill: blue, size: 1.1em * 1.3)[Échange VN]
|
#text(weight: "bold", fill: blue, size: 1.1em * 1.3)[Échange]
|
||||||
]
|
]
|
||||||
|
|
||||||
|
#place(dx: 5.4cm, dy: 9.15cm)[#scale(170%)[#icon_var]]
|
||||||
|
|
||||||
#place(left, dx: 1.5cm, dy: 11cm)[
|
#place(left, dx: 1.5cm, dy: 11cm)[
|
||||||
#scale(130%)[
|
#scale(130%)[
|
||||||
#schema_detailed_vn()
|
#schema_detailed_vn()
|
||||||
@ -1260,29 +1274,55 @@
|
|||||||
#myslide("Min-Sum")[
|
#myslide("Min-Sum")[
|
||||||
#set text(size: 15pt)
|
#set text(size: 15pt)
|
||||||
|
|
||||||
#grid(
|
// #grid(
|
||||||
columns: (1fr, 1fr),
|
// columns: (1fr, 1fr),
|
||||||
gutter: 0.5cm,
|
// gutter: 0.5cm,
|
||||||
definition(titre: "Avantage Matériel", accent: black)[
|
// definition(titre: "Avantage Matériel", accent: black)[
|
||||||
|
// - *Comparateurs* pour le minimum
|
||||||
|
// - *XOR* pour le produit des signes
|
||||||
|
// #v(0.21cm)
|
||||||
|
// ],
|
||||||
|
// definition(titre: "Mise à jour des 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)|
|
||||||
|
// $
|
||||||
|
// ],
|
||||||
|
// definition(titre: "Mise à jour des CN", accent: orange)[
|
||||||
|
// #set text(size: 19pt)
|
||||||
|
// $
|
||||||
|
// m_(c arrow v) = product_(u in cal(N)(c) \\ {v}) "sgn"(m_(u arrow c)) times min_(u in cal(N)(c) \\ {v}) |m_(u arrow c)|
|
||||||
|
// $
|
||||||
|
// ],
|
||||||
|
// definition(titre: "Mise à jour des CN", accent: orange)[
|
||||||
|
// #set text(size: 19pt)
|
||||||
|
// $
|
||||||
|
// m_(c arrow v) = & product_(u in cal(N)(c) \\ {v}) "sgn"(m_(u arrow c)) \
|
||||||
|
// & times min_(u in cal(N)(c) \\ {v}) |m_(u arrow c)|
|
||||||
|
// $
|
||||||
|
// ],
|
||||||
|
// )
|
||||||
|
#definition(titre: "Avantage Matériel", accent: black, titre_taille: 1.4em)[
|
||||||
- *Comparateurs* pour le minimum
|
- *Comparateurs* pour le minimum
|
||||||
- *XOR* pour le produit des signes
|
- *XOR* pour le produit des signes
|
||||||
#v(0.21cm)
|
#v(0.21cm)
|
||||||
],
|
]
|
||||||
definition(titre: "Mise à jour du CN", accent: orange)[
|
|
||||||
#set text(size: 19pt)
|
#definition(titre: "Mise à jour des CN", accent: orange, titre_taille: 1.4em)[
|
||||||
$
|
#set text(size: 24pt)
|
||||||
m_(c arrow v_i) = product_(j != i) "sgn"(m_(v_j arrow c)) times min_(j != i) |m_(v_j arrow c)|
|
$
|
||||||
$
|
m_(c arrow v) = product_(u in cal(N)(c) \\ {v}) "sgn"(m_(u arrow c)) times min_(u in cal(N)(c) \\ {v}) |m_(u arrow c)|
|
||||||
],
|
$
|
||||||
)
|
]
|
||||||
|
|
||||||
|
#v(1.5em)
|
||||||
|
|
||||||
#v(4.5em)
|
|
||||||
#align(center)[#scale(130%)[#schema_min_sum_complet()]]
|
#align(center)[#scale(130%)[#schema_min_sum_complet()]]
|
||||||
|
|
||||||
#v(0.5em)
|
#v(-0.5em)
|
||||||
#align(center)[
|
#align(center)[
|
||||||
#text(size: 1.1em, fill: gray.darken(40%), style: "italic")[
|
#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)$
|
Pour les VN : $display(m_(v arrow c) = L_"canal" + sum_(c' in cal(N)(v) \\ {c}) m_(c' arrow v))$
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
@ -1343,16 +1383,75 @@
|
|||||||
// ]
|
// ]
|
||||||
// ]
|
// ]
|
||||||
|
|
||||||
|
#myslide("La Topologie de H : Le Girth")[
|
||||||
|
#set text(size: 20pt)
|
||||||
|
|
||||||
|
#definition(titre: "Définition : Le Girth (La Maille)", accent: blue)[
|
||||||
|
Longueur du plus court cycle dans le graphe de Tanner
|
||||||
|
]
|
||||||
|
|
||||||
|
#v(0.5em)
|
||||||
|
|
||||||
|
- Le girth est *pair*
|
||||||
|
- La valeur minimale est $g = 4$.
|
||||||
|
|
||||||
|
#v(1em)
|
||||||
|
|
||||||
|
#align(center)[
|
||||||
|
#block(fill: rgb("#f8fafc"), stroke: 1pt + blue.lighten(50%), inset: 10pt, radius: 5pt)[
|
||||||
|
Girth élevé $=>$ Meilleure diffusion de l'information.
|
||||||
|
]
|
||||||
|
]
|
||||||
|
|
||||||
|
#v(2.5em)
|
||||||
|
|
||||||
|
#align(center)[
|
||||||
|
#scale(140%)[
|
||||||
|
#grid(
|
||||||
|
columns: (1fr, 1fr),
|
||||||
|
gutter: -7cm,
|
||||||
|
[
|
||||||
|
#schema_girth_4(highlight: false)
|
||||||
|
#v(0.5em)
|
||||||
|
#text(size: 0.8em, style: "italic")[Graphe de Tanner]
|
||||||
|
],
|
||||||
|
[
|
||||||
|
#schema_girth_4(highlight: true)
|
||||||
|
#v(0.5em)
|
||||||
|
#text(size: 0.8em, fill: red, weight: "bold")[4-Cycle]
|
||||||
|
],
|
||||||
|
)
|
||||||
|
]
|
||||||
|
]
|
||||||
|
]
|
||||||
|
|
||||||
|
#myslide("Méthode de génération de H")[
|
||||||
|
#place(center + horizon, dy: 8.1cm)[#graphe_tanner_fond(0.9cm, 1.75)]
|
||||||
|
#place(center + horizon, dy: 7cm)[
|
||||||
|
#block(width: 100%)[
|
||||||
|
#text(size: 1.5em, weight: "bold", fill: black)[
|
||||||
|
Gallager \
|
||||||
|
|
||||||
|
Mackay-Neal \
|
||||||
|
|
||||||
|
Progressive Edge-Growth
|
||||||
|
]
|
||||||
|
]
|
||||||
|
]
|
||||||
|
// #align(center + horizon)[
|
||||||
|
// #image("src/construction.jpg", width: 50%)
|
||||||
|
// ]
|
||||||
|
]
|
||||||
#myslide("Conclusion")[
|
#myslide("Conclusion")[
|
||||||
#place(center + horizon, dy: 8.1cm)[#graphe_tanner_fond(0.9cm, 1.75)]
|
#place(center + horizon, dy: 8.1cm)[#graphe_tanner_fond(0.9cm, 1.75)]
|
||||||
#place(center + horizon, dy: 7.7cm)[
|
#place(center + horizon, dy: 7.7cm)[
|
||||||
#block(width: 100%)[
|
#block(width: 100%)[
|
||||||
#text(size: 1.5em, weight: "bold", fill: black)[
|
#text(size: 1.5em, weight: "bold", fill: black)[
|
||||||
|
QC-LDPC Encodage \
|
||||||
|
|
||||||
FPGA \
|
FPGA \
|
||||||
|
|
||||||
QC-LDPC \
|
Test Réels
|
||||||
|
|
||||||
Test réels
|
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
@ -1369,101 +1468,78 @@
|
|||||||
]
|
]
|
||||||
]
|
]
|
||||||
|
|
||||||
#myslide("Définition : Codes Linéaires en Bloc")[
|
// #myslide("Définition : Matrice Génératrice")[
|
||||||
#definition(titre: [Code $display((n,k) in NN^2)$])[
|
// #definition(titre: "Matrice Génératrice")[
|
||||||
$cal(C)$ sous-espace vectoriel de dimension $k$ de $FF_2^n$
|
// $G in cal(M)_(k,n)(FF_2)$ dont les lignes sont une base de $cal(C)$
|
||||||
]
|
// ]
|
||||||
|
//
|
||||||
#[
|
// #definition(titre: "Encodage")[
|
||||||
#set text(size: 1.1em)
|
// Pour un message $u in FF_2^k$ le mot de code $c in cal(C)$ est :
|
||||||
- $k$ : longueur du message original
|
// $
|
||||||
- $n$ : longueur du mot de code
|
// c = Phi(u) = u G
|
||||||
- $m = n - k$ : nombre de bits de parités
|
// $
|
||||||
]
|
// ]
|
||||||
|
//
|
||||||
#definition(titre: "Encodage")[
|
// #definition(titre: "Forme systématique")[
|
||||||
$Phi : FF_2^k & -> FF_2^n in cal(L)(FF_2^k, FF_2^n)$
|
// // TODO : changer [I_k | P] en un graphique jolie avec I et P dans un carré coloré
|
||||||
]
|
// $
|
||||||
|
// #dessiner_matrice($G =$, ((texte: $I_k$, largeur: 2.2, fond: gray.lighten(75%)), (texte: $P$, largeur: 2.2, fond: gray.lighten(75%))))
|
||||||
#v(-1.3em)
|
// // G = mat(
|
||||||
|
// // I_k, P;
|
||||||
#align(center + horizon)[
|
// // augment: #1,
|
||||||
#plongement_schema()
|
// // delim: "[",
|
||||||
]
|
// // )
|
||||||
]
|
// $
|
||||||
|
// ]
|
||||||
#myslide("Définition : Matrice Génératrice")[
|
//
|
||||||
#definition(titre: "Matrice Génératrice")[
|
// #[
|
||||||
$G in cal(M)_(k,n)(FF_2)$ dont les lignes sont une base de $cal(C)$
|
// #set text(size: 1.2em)
|
||||||
]
|
// // - Pour $u in FF_2^k, space display(u dot.o G = mat(u, u dot.o P; augment: #1, delim: "[",))$
|
||||||
|
//
|
||||||
#definition(titre: "Encodage")[
|
// - Pour $u in FF_2^k, space #dessiner_matrice($u G =$, (
|
||||||
Pour un message $u in FF_2^k$ le mot de code $c in cal(C)$ est :
|
// (texte: $u$, largeur: 1.1, fond: gray.lighten(75%)),
|
||||||
$
|
// (texte: $u P$, largeur: 3.0, fond: gray.lighten(75%)),
|
||||||
c = Phi(u) = u dot.o G
|
// ))$
|
||||||
$
|
//
|
||||||
]
|
// - $P in cal(M)_(k ,n-k)(FF_2)$ matrice de parité\
|
||||||
|
// ]
|
||||||
#definition(titre: "Forme systématique")[
|
// ]
|
||||||
// TODO : changer [I_k | P] en un graphique jolie avec I et P dans un carré coloré
|
//
|
||||||
$
|
// #myslide("Définition : Matrice de Contrôle")[
|
||||||
#dessiner_matrice($G =$, ((texte: $I_k$, largeur: 2.2, fond: gray.lighten(75%)), (texte: $P$, largeur: 2.2, fond: gray.lighten(75%))))
|
// #definition(titre: "Matrice de Contrôle")[
|
||||||
// G = mat(
|
// // $H = mat(
|
||||||
// I_k, P;
|
// // P^top, I_(n-k);
|
||||||
// augment: #1,
|
// // augment: #1,
|
||||||
// delim: "[",
|
// // delim: "[",
|
||||||
// )
|
// // )
|
||||||
$
|
// $
|
||||||
]
|
// #dessiner_matrice($H =$, (
|
||||||
|
// (texte: $P^top$, largeur: 2.2, fond: gray.lighten(75%)),
|
||||||
#[
|
// (texte: $I_(n-k)$, largeur: 2.2, fond: gray.lighten(75%)),
|
||||||
#set text(size: 1.2em)
|
// ))
|
||||||
// - Pour $u in FF_2^k, space display(u dot.o G = mat(u, u dot.o P; augment: #1, delim: "[",))$
|
// $
|
||||||
|
//
|
||||||
- Pour $u in FF_2^k, space #dessiner_matrice($u dot.o G =$, (
|
// ]
|
||||||
(texte: $u$, largeur: 1.1, fond: gray.lighten(75%)),
|
// #[
|
||||||
(texte: $u dot.o P$, largeur: 3.0, fond: gray.lighten(75%)),
|
// #set text(size: 1.2em)
|
||||||
))$
|
// - $cal(C) = ker(H) = {v in FF_2^n | H v^top = 0}$
|
||||||
|
//
|
||||||
- $P in cal(M)_(k ,n-k)(FF_2)$ matrice de parité\
|
// - $display(G H^top = 0)$
|
||||||
]
|
// ]
|
||||||
]
|
//
|
||||||
|
// #definition(titre: "Syndrome")[
|
||||||
#myslide("Définition : Matrice de Contrôle")[
|
// Pour un vecteur reçu $r = c + e, space s in FF_2^(n - k)$
|
||||||
#definition(titre: "Matrice de Contrôle")[
|
// $
|
||||||
// $H = mat(
|
// s = H r^top = H c^top + H e^top = 0 + H e^top
|
||||||
// P^top, I_(n-k);
|
// $
|
||||||
// augment: #1,
|
// ]
|
||||||
// delim: "[",
|
// #[
|
||||||
// )
|
// #set text(size: 1.2em)
|
||||||
$
|
// - Si $s = 0, space r$ est un mot de code valide
|
||||||
#dessiner_matrice($H =$, (
|
// - Sinon $s$ donne la signature de l'erreur $e$
|
||||||
(texte: $P^top$, largeur: 2.2, fond: gray.lighten(75%)),
|
// ]
|
||||||
(texte: $I_(n-k)$, largeur: 2.2, fond: gray.lighten(75%)),
|
// // Possible décodage par syndrome
|
||||||
))
|
// ]
|
||||||
$
|
|
||||||
|
|
||||||
]
|
|
||||||
#[
|
|
||||||
#set text(size: 1.2em)
|
|
||||||
- $cal(C) = ker(H) = {v in FF_2^n | H dot.o v^top = 0}$
|
|
||||||
|
|
||||||
- $display(G dot.o H^top = 0)$
|
|
||||||
]
|
|
||||||
|
|
||||||
#definition(titre: "Syndrome")[
|
|
||||||
Pour un vecteur reçu $r = c + e, space s in FF_2^(n - k)$
|
|
||||||
$
|
|
||||||
s = H r^top = H c^top + H e^top = 0 + H e^top
|
|
||||||
$
|
|
||||||
]
|
|
||||||
#[
|
|
||||||
#set text(size: 1.2em)
|
|
||||||
- Si $s = 0, space r$ est un mot de code valide
|
|
||||||
- Sinon $s$ donne la signature de l'erreur $e$
|
|
||||||
]
|
|
||||||
// Possible décodage par syndrome
|
|
||||||
]
|
|
||||||
|
|
||||||
#myslide("Théorie derrière la définition des codes linaires")[
|
#myslide("Théorie derrière la définition des codes linaires")[
|
||||||
Poser les notations algebriques etc...
|
Poser les notations algebriques etc...
|
||||||
@ -1648,4 +1724,3 @@
|
|||||||
#myslide("Progressive Edge-growth")[
|
#myslide("Progressive Edge-growth")[
|
||||||
|
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user