channel add noise

This commit is contained in:
2026-02-13 11:44:44 +01:00
parent a6b2690721
commit a7ce4a1a17

View File

@ -1,4 +1,6 @@
pub rand::Rng;
use std::usize;
use rand::{Rng, RngExt};
pub struct Channel {
pub error_prob: f64,
@ -10,5 +12,21 @@ impl Channel {
Self { error_prob }
}
pub fn add_noise(&self, input: &[u8]) -> Vec<u8> {
let mut rng = rand::rng();
let mut out = input.to_vec();
for b in out.iter_mut() {
let r_v: f64 = rng.random_range(0.0..1.0);
if r_v < self.error_prob {
*b ^= 1;
}
}
out
}
pub fn count_errors(original: &[u8], other: &[u8]) -> usize {
assert_eq!(original.len(), other.len(), "Slice pas de la même taille");
original.iter().zip(other).filter(|(a, b)| a != b).count()
}
}