diff --git a/Code/ldpc/src/main.rs b/Code/ldpc/src/main.rs index 18bb1eb..94def57 100644 --- a/Code/ldpc/src/main.rs +++ b/Code/ldpc/src/main.rs @@ -1,74 +1,13 @@ mod analysis; +mod channel; mod code; mod construction; mod decoder; mod encoder; mod matrix; +mod simulation; mod tanner; -use code::LdpcCode; -use construction::random::generate_random_h; -use decoder::bit_flip::BitFlipDecoder; -use encoder::dense::DenseEncoder; - fn main() { - // TODO : Changer la logique pour trouver k => calculer n selon la longueur du message k (en - // rapport des poids) n = (k * w_r) / (w_r - w_c) - println!("LDPC\n"); - - let n = 12; - let m = 6; - let wc = 2; - let wr = 4; - - let mut h_matrix = generate_random_h(m, n, wc, wr); - println!("H aléatoire {m}x{n} :"); - h_matrix.print(); - - let ldpc = LdpcCode::new(h_matrix.clone()); - println!("\nLDPC instancié"); - - println!("Extraction de G"); - let encoder = DenseEncoder::new(&ldpc); - - println!("\n-> Matrcie H après Gauss-Jordan avec inversion de colonne de la forme [I | A]"); - encoder.h_reduced.print(); - - println!("G {}x{}", encoder.k, encoder.n); - encoder.g_matrix.print(); - - let message = vec![1; encoder.k]; - let codeword = encoder.encode(&message); - - println!("\nMessage u : {:?}", message); - println!("\nCodeword s : {:?}", codeword); - - let is_valid = (0..m).all(|r| { - let sum = codeword - .iter() - .enumerate() - .fold(0, |acc, (c, &bit)| acc ^ (bit & h_matrix.get(r, c))); - sum == 0 - }); - - println!("\n{}", if is_valid { "Vrai" } else { "Faux" }); - - println!("\nCorrection (bit-flipping)"); - - let decoder = BitFlipDecoder::new(&ldpc); - let max_iter = 50; - let receiver_codeword = codeword.clone(); - - match decoder.decode(&receiver_codeword, max_iter) { - Some(corrected_codeword) => { - if corrected_codeword == codeword { - println!("Code reconstrui"); - } else { - println!("Convergence mais mauvais codeword") - } - println!("Message original : {:?}", codeword); - println!("Message original : {:?}", corrected_codeword); - } - None => println!("Pas de convergence..."), - } + simulation::run_simulation(6, 2, 4, 0.1); }