Now working CSMA with TCP
This commit is contained in:
34
src/squelch.rs
Normal file
34
src/squelch.rs
Normal file
@ -0,0 +1,34 @@
|
||||
use std::collections::VecDeque;
|
||||
|
||||
use rand::seq::index::sample;
|
||||
|
||||
use crate::complex::Complex32;
|
||||
|
||||
pub struct Squelch {
|
||||
window: VecDeque<f32>,
|
||||
sum: f32,
|
||||
level: f32,
|
||||
}
|
||||
|
||||
impl Squelch {
|
||||
pub fn new(length: usize, level: f32) -> Self {
|
||||
Squelch {
|
||||
window: VecDeque::from(vec![0.; length]),
|
||||
sum: 0.,
|
||||
level,
|
||||
}
|
||||
}
|
||||
|
||||
pub fn next(&mut self, sample: Complex32) -> Option<Complex32> {
|
||||
let oldest = self.window.pop_back().unwrap();
|
||||
self.window.push_front(sample.mag());
|
||||
self.sum -= oldest;
|
||||
self.sum += sample.mag();
|
||||
|
||||
if self.sum / (self.window.len() as f32) > self.level {
|
||||
Some(sample)
|
||||
} else {
|
||||
None
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user