Files
rdsp-experiments/src/squelch.rs

35 lines
746 B
Rust

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
}
}
}