use std::collections::VecDeque; use rand::seq::index::sample; use crate::complex::Complex32; pub struct Squelch { window: VecDeque, 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 { 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 } } }