From 12ae71759075a98deed5728d972c50e7131c726f Mon Sep 17 00:00:00 2001 From: ozpv <39195175+ozpv@users.noreply.github.com> Date: Sat, 16 May 2026 16:39:26 -0500 Subject: real time processing --- src/retain.rs | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 src/retain.rs (limited to 'src/retain.rs') diff --git a/src/retain.rs b/src/retain.rs new file mode 100644 index 0000000..bc3934a --- /dev/null +++ b/src/retain.rs @@ -0,0 +1,30 @@ +use hashbrown::HashSet; +use num_complex::Complex; + +#[inline(always)] +pub fn retain_top_n_magnitudes(fft_real_signal: &mut [Complex], n: usize) { + // you'd be keeping the entire signal + if n >= fft_real_signal.len() { + return; + } + + let mut indexed = fft_real_signal + .iter() + .copied() + .enumerate() + .collect::)>>(); + + let target = fft_real_signal.len() - n; + indexed.select_nth_unstable_by(target, |(_, c0), (_, c1)| c0.norm().total_cmp(&c1.norm())); + + let top_indices = indexed[target..] + .iter() + .map(|&(i, _)| i) + .collect::>(); + + for (i, val) in fft_real_signal.iter_mut().enumerate() { + if !top_indices.contains(&i) { + *val = Complex::ZERO; + } + } +} -- cgit v1.2.3