working BAD
This commit is contained in:
@ -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 n = (k * wr) / (wr - wc);
|
||||||
let m = n - k;
|
let m = n - k;
|
||||||
|
|
||||||
// On garde que les matrice de rang m
|
let max_attemps = 50;
|
||||||
loop {
|
let mut best_h = generate_random_h(m, n, wc, wr);
|
||||||
let h_matrix = generate_random_h(m, n, wc, wr);
|
let mut max_rank = 0;
|
||||||
let mut h_test = h_matrix.clone();
|
|
||||||
|
// 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();
|
let (rank, _) = h_test.gauss_jordan_swap_cols();
|
||||||
if rank == m {
|
if rank == m {
|
||||||
return h_matrix;
|
return h_cand;
|
||||||
|
}
|
||||||
|
if rank > max_rank {
|
||||||
|
max_rank = rank;
|
||||||
|
best_h = h_cand;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
best_h
|
||||||
}
|
}
|
||||||
|
|||||||
@ -9,5 +9,5 @@ mod simulation;
|
|||||||
mod tanner;
|
mod tanner;
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
simulation::run_simulation(6, 2, 4, 0.1);
|
simulation::run_simulation(8, 2, 4, 0.1);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -10,7 +10,7 @@ use rand::{Rng, RngExt};
|
|||||||
|
|
||||||
pub fn run_simulation(k: usize, wc: usize, wr: usize, error_prob: f64) {
|
pub fn run_simulation(k: usize, wc: usize, wr: usize, error_prob: f64) {
|
||||||
println!(
|
println!(
|
||||||
"Simulation LDPC : k = {} bits, wc = {}, wr = {}, p = {:.2}",
|
"\nSimulation LDPC : k = {} bits, wc = {}, wr = {}, p = {:.2}",
|
||||||
k, wc, wr, error_prob
|
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);
|
let encoder = DenseEncoder::new(&ldpc);
|
||||||
|
|
||||||
if encoder.k != k {
|
let k = encoder.k;
|
||||||
println!("Erreur: la matrice donne k = {} != {}", encoder.k, k);
|
// if encoder.k != k {
|
||||||
}
|
// println!("Erreur: la matrice donne k = {} != {}", encoder.k, k);
|
||||||
|
// }
|
||||||
|
|
||||||
println!(
|
println!(
|
||||||
" -> Code généré : n = {}, k = {}, k/n = {}",
|
" -> Code généré : n = {}, k = {}, k/n = {:.2}",
|
||||||
encoder.n,
|
encoder.n,
|
||||||
encoder.k,
|
encoder.k,
|
||||||
(encoder.k as f64 / encoder.n as f64)
|
(encoder.k as f64 / encoder.n as f64)
|
||||||
|
|||||||
Reference in New Issue
Block a user