From b343675fa783b89273726605e2d16c3ac771c410 Mon Sep 17 00:00:00 2001 From: zeefaad Date: Fri, 13 Feb 2026 17:13:11 +0100 Subject: [PATCH] vraiment la merde --- Code/ldpc/src/decoder/bit_flip.rs | 2 +- Code/ldpc/src/main.rs | 4 +++- Code/ldpc/src/simulation.rs | 14 +++++++++++--- Code/ldpc/src/utils.rs | 26 ++++++++++++++++++++++++++ 4 files changed, 41 insertions(+), 5 deletions(-) create mode 100644 Code/ldpc/src/utils.rs diff --git a/Code/ldpc/src/decoder/bit_flip.rs b/Code/ldpc/src/decoder/bit_flip.rs index 9cc2ba3..bd57994 100644 --- a/Code/ldpc/src/decoder/bit_flip.rs +++ b/Code/ldpc/src/decoder/bit_flip.rs @@ -35,7 +35,7 @@ impl<'a> BitFlipDecoder<'a> { } } - println!("poid syndome: {s_w}"); + // println!("poid syndome: {s_w}"); // Aucune erreurs if s_w == 0 { return Some(curr_bits); diff --git a/Code/ldpc/src/main.rs b/Code/ldpc/src/main.rs index 4a42bd4..76ebf54 100644 --- a/Code/ldpc/src/main.rs +++ b/Code/ldpc/src/main.rs @@ -7,6 +7,7 @@ mod encoder; mod matrix; mod simulation; mod tanner; +mod utils; use analysis::{AnalysisConfig, Analyzer, DecoderAlgorithm}; @@ -28,5 +29,6 @@ fn main() { // let res = Analyzer::run_batch(config); // Analyzer::save_csv(&res, "ldpc_analysis_results.csv"); - simulation::run_simulation(300, 3, 6, 0.012); + let message = "Je"; + simulation::run_simulation(message, 3, 6, 0.02); } diff --git a/Code/ldpc/src/simulation.rs b/Code/ldpc/src/simulation.rs index 6eac35f..530426d 100644 --- a/Code/ldpc/src/simulation.rs +++ b/Code/ldpc/src/simulation.rs @@ -6,12 +6,15 @@ use crate::code::{self, LdpcCode}; use crate::construction::random::{generate_random_h, generate_random_h_for_k}; use crate::decoder::bit_flip::BitFlipDecoder; use crate::encoder::dense::DenseEncoder; +use crate::utils; use rand::{Rng, RngExt}; -pub fn run_simulation(k: usize, wc: usize, wr: usize, error_prob: f64) { +pub fn run_simulation(text: &str, wc: usize, wr: usize, error_prob: f64) { + let mut message_bits = utils::string_to_bits(text); + let k = message_bits.len(); println!( - "\nSimulation LDPC : k = {} bits, wc = {}, wr = {}, p = {:.2}", - k, wc, wr, error_prob + "\nSimulation LDPC : k = {} bits, wc = {}, wr = {}, p = {:.2}, text : {}", + k, wc, wr, error_prob, text ); println!("Construction"); @@ -68,17 +71,22 @@ pub fn run_simulation(k: usize, wc: usize, wr: usize, error_prob: f64) { match decoder.decode(&received, max_iter) { Some(decoded) => { + let decoded_message = &decoded[0..encoder.k]; + let res_text = utils::bits_to_string(decoded_message); if decoded == codeword { println!(" -> Réussite"); } else { println!(" -> Echec : le decoder a convergé vers un mauvais codeword"); } + println!(" -> Texte recu : {}", res_text); } None => { + let failed_text = utils::bits_to_string(&received[0..encoder.k]); println!( " -> Echec : impossible decorriger après {} itérations", max_iter ); + println!(" -> Texte recu : {}", failed_text); } } } diff --git a/Code/ldpc/src/utils.rs b/Code/ldpc/src/utils.rs new file mode 100644 index 0000000..3c69150 --- /dev/null +++ b/Code/ldpc/src/utils.rs @@ -0,0 +1,26 @@ +pub fn string_to_bits(s: &str) -> Vec { + let mut bits = Vec::new(); + for byte in s.as_bytes() { + for i in (0..8).rev() { + bits.push((byte >> i) & 1); + } + } + bits +} + +pub fn bits_to_string(bits: &[u8]) -> String { + let mut bytes = Vec::new(); + for chunk in bits.chunks(8) { + if chunk.len() < 8 { + break; + } + let mut byte = 0u8; + for (i, &bit) in chunk.iter().enumerate() { + if bit == 1 { + byte |= 1 << (7 - i); + } + } + bytes.push(byte); + } + String::from_utf8_lossy(&bytes).into_owned() +}