ldpc rust
This commit is contained in:
66
Code/ldpc/src/main.rs
Normal file
66
Code/ldpc/src/main.rs
Normal file
@ -0,0 +1,66 @@
|
||||
mod analysis;
|
||||
mod code;
|
||||
mod construction;
|
||||
mod decoder;
|
||||
mod encoder;
|
||||
mod matrix;
|
||||
mod tanner;
|
||||
|
||||
use code::LdpcCode;
|
||||
use construction::random::generate_random_h;
|
||||
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!("\n Codeword s : {:?}", codeword);
|
||||
|
||||
let mut is_valid = true;
|
||||
for r in 0..m {
|
||||
let mut sum = 0;
|
||||
for c in 0..n {
|
||||
sum ^= codeword[c] & h_matrix.get(r, c);
|
||||
}
|
||||
if sum != 0 {
|
||||
is_valid = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if is_valid {
|
||||
println!("\nVrai");
|
||||
} else {
|
||||
println!("\nFaux");
|
||||
}
|
||||
|
||||
// println!("\nGauss-Jordan sur H :");
|
||||
// h_matrix.gauss_jordan();
|
||||
// h_matrix.print();
|
||||
}
|
||||
Reference in New Issue
Block a user