diff --git a/Code/ldpc/src/construction/random.rs b/Code/ldpc/src/construction/random.rs index 88139c5..faff44e 100644 --- a/Code/ldpc/src/construction/random.rs +++ b/Code/ldpc/src/construction/random.rs @@ -41,13 +41,22 @@ pub fn generate_random_h_for_k(k: usize, wc: usize, wr: usize) -> MatrixGF2 { let n = (k * wr) / (wr - wc); let m = n - k; - // On garde que les matrice de rang m - loop { - let h_matrix = generate_random_h(m, n, wc, wr); - let mut h_test = h_matrix.clone(); + let max_attemps = 50; + let mut best_h = generate_random_h(m, n, wc, wr); + let mut max_rank = 0; + + // On garde que les matrice de rang max + for _ in 0..max_attemps { + let h_cand = generate_random_h(m, n, wc, wr); + let mut h_test = h_cand.clone(); let (rank, _) = h_test.gauss_jordan_swap_cols(); if rank == m { - return h_matrix; + return h_cand; + } + if rank > max_rank { + max_rank = rank; + best_h = h_cand; } } + best_h } diff --git a/Code/ldpc/src/main.rs b/Code/ldpc/src/main.rs index 94def57..f3b2420 100644 --- a/Code/ldpc/src/main.rs +++ b/Code/ldpc/src/main.rs @@ -9,5 +9,5 @@ mod simulation; mod tanner; fn main() { - simulation::run_simulation(6, 2, 4, 0.1); + simulation::run_simulation(8, 2, 4, 0.1); } diff --git a/Code/ldpc/src/simulation.rs b/Code/ldpc/src/simulation.rs index f092cc7..eec5137 100644 --- a/Code/ldpc/src/simulation.rs +++ b/Code/ldpc/src/simulation.rs @@ -10,7 +10,7 @@ use rand::{Rng, RngExt}; pub fn run_simulation(k: usize, wc: usize, wr: usize, error_prob: f64) { println!( - "Simulation LDPC : k = {} bits, wc = {}, wr = {}, p = {:.2}", + "\nSimulation LDPC : k = {} bits, wc = {}, wr = {}, p = {:.2}", k, wc, wr, error_prob ); @@ -21,12 +21,13 @@ pub fn run_simulation(k: usize, wc: usize, wr: usize, error_prob: f64) { let encoder = DenseEncoder::new(&ldpc); - if encoder.k != k { - println!("Erreur: la matrice donne k = {} != {}", encoder.k, k); - } + let k = encoder.k; + // if encoder.k != k { + // println!("Erreur: la matrice donne k = {} != {}", encoder.k, k); + // } println!( - " -> Code généré : n = {}, k = {}, k/n = {}", + " -> Code généré : n = {}, k = {}, k/n = {:.2}", encoder.n, encoder.k, (encoder.k as f64 / encoder.n as f64)