X-Git-Url: https://git.nihav.org/?a=blobdiff_plain;f=nihav-core%2Fsrc%2Fdsp%2Fwindow.rs;fp=nihav-core%2Fsrc%2Fdsp%2Fwindow.rs;h=0000000000000000000000000000000000000000;hb=b4d5b8515e75383b4fc59ea2813c90c615d59a96;hp=eb350e3ecbd319208e8b9312a90cecaad6f31358;hpb=2b8bf9a03242bbd6e80091082a50ec13b1a95143;p=nihav.git diff --git a/nihav-core/src/dsp/window.rs b/nihav-core/src/dsp/window.rs deleted file mode 100644 index eb350e3..0000000 --- a/nihav-core/src/dsp/window.rs +++ /dev/null @@ -1,59 +0,0 @@ -//! Window generating functions. -use std::f32::consts; - -/// Known window types. -#[derive(Debug,Clone,Copy,PartialEq)] -pub enum WindowType { - /// Simple square window. - Square, - /// Simple sine window. - Sine, - /// Kaiser-Bessel derived window. - KaiserBessel(f32), -} - -/// Calculates window coefficients for the requested window type and size. -/// -/// Set `half` flag to calculate only the first half of the window. -pub fn generate_window(mode: WindowType, scale: f32, size: usize, half: bool, dst: &mut [f32]) { - match mode { - WindowType::Square => { - for n in 0..size { dst[n] = scale; } - }, - WindowType::Sine => { - let param = if half { - consts::PI / ((2 * size) as f32) - } else { - consts::PI / (size as f32) - }; - for n in 0..size { - dst[n] = (((n as f32) + 0.5) * param).sin() * scale; - } - }, - WindowType::KaiserBessel(alpha) => { - let dlen = if half { size as f32 } else { (size as f32) * 0.5 }; - let alpha2 = f64::from((alpha * consts::PI / dlen) * (alpha * consts::PI / dlen)); - - let mut kb: Vec = Vec::with_capacity(size); - let mut sum = 0.0; - for n in 0..size { - let b = bessel_i0(((n * (size - n)) as f64) * alpha2); - sum += b; - kb.push(sum); - } - sum += 1.0; - for n in 0..size { - dst[n] = (kb[n] / sum).sqrt() as f32; - } - }, - }; -} - -fn bessel_i0(inval: f64) -> f64 { - let mut val: f64 = 1.0; - for n in (1..64).rev() { - val *= inval / f64::from(n * n); - val += 1.0; - } - val -}