basic_dsp 0.10.2

Digital signal processing based on real or complex vectors in time or frequency domain.
Documentation
#![feature(test)]
extern crate basic_dsp;
extern crate num;
extern crate test;

pub mod tools;

#[cfg(test)]
mod complex {
    use crate::test::Bencher;
    use crate::tools::*;
    use basic_dsp::conv_types::*;
    use basic_dsp::*;
    use num::complex::Complex32;

    #[bench]
    fn complex_offset_32s_benchmark(b: &mut Bencher) {
        let mut vector = ComplexTime32Box::new(Size::Small);
        b.iter(|| {
            vector.execute(|mut v, _| {
                v.offset(Complex32::new(2.0, -5.0));
                v
            })
        });
    }

    #[bench]
    fn complex_scale_32s_benchmark(b: &mut Bencher) {
        let mut vector = ComplexTime32Box::new(Size::Small);
        b.iter(|| {
            vector.execute(|mut v, _| {
                v.scale(Complex32::new(-2.0, 2.0));
                v
            })
        });
    }

    #[bench]
    fn complex_sin_32s_benchmark(b: &mut Bencher) {
        let mut vector = ComplexTime32Box::new(Size::Small);
        b.iter(|| {
            vector.execute(|mut v, _| {
                v.sin();
                v
            })
        });
    }

    #[bench]
    fn complex_conj_32s_benchmark(b: &mut Bencher) {
        let mut vector = ComplexTime32Box::new(Size::Small);
        b.iter(|| {
            vector.execute(|mut v, _| {
                v.conj();
                v
            })
        });
    }

    #[bench]
    fn complex_abs_to_complex_32s_benchmark(b: &mut Bencher) {
        let mut vector = ComplexTime32Box::new(Size::Small);
        b.iter(|| {
            vector.execute(|v, _| {
                let r = v.magnitude();
                r.to_complex().unwrap()
            })
        });
    }

    #[bench]
    fn complex_vector_multiplication_32s_benchmark(b: &mut Bencher) {
        let mut vector = ComplexTime32Box::new(Size::Small);
        b.iter(|| {
            vector.execute_with_arg(|mut v, o, _| {
                v.mul(&o).unwrap();
                (v, o)
            })
        });
    }

    #[bench]
    fn convolve_vector_with_signal_32s_benchmark(b: &mut Bencher) {
        let mut vector = ComplexTime32Box::new(Size::Small);
        b.iter(|| {
            vector.execute(|mut v, buffer| {
                let sinc: SincFunction<f32> = SincFunction::new();
                let table = RealTimeLinearTableLookup::<f32>::from_conv_function(
                    &sinc as &dyn RealImpulseResponse<f32>,
                    0.2,
                    5,
                );
                v.convolve(buffer, &table as &dyn RealImpulseResponse<f32>, 0.5, 10);
                v
            })
        });
    }

    #[bench]
    fn convolve_vector_with_vector_32t_benchmark(b: &mut Bencher) {
        let mut vector = ComplexTime32Box::new(Size::Tiny);
        b.iter(|| {
            vector.execute_with_arg(|mut v, o, buffer| {
                v.convolve_signal(buffer, &o).unwrap();
                (v, o)
            })
        });
    }

    #[bench]
    fn convolve_vector_with_smaller_vector_32s_benchmark(b: &mut Bencher) {
        let mut vector = ComplexTime32Box::new(Size::Small);
        b.iter(|| {
            vector.execute(|mut v, buffer| {
                let operand = vec![0.0; 100].to_complex_time_vec();
                v.convolve_signal(buffer, &operand).unwrap();
                v
            })
        });
    }

    #[bench]
    fn interpolatei_32t_benchmark(b: &mut Bencher) {
        let mut vector = ComplexTime32Box::new(Size::Small);
        b.iter(|| {
            vector.execute(|mut v, buffer| {
                let len = v.len();
                v.interpolatei(buffer, &RaisedCosineFunction::new(0.35), 10)
                    .unwrap();
                v.resize(len).unwrap();
                v
            })
        });
    }

    #[bench]
    fn interpolatef_32t_benchmark(b: &mut Bencher) {
        let mut vector = ComplexTime32Box::new(Size::Small);
        b.iter(|| {
            vector.execute(|mut v, buffer| {
                let len = v.len();
                v.interpolatef(buffer, &RaisedCosineFunction::new(0.35), 10.0, 0.0, 10);
                v.resize(len).unwrap();
                v
            })
        });
    }

    #[bench]
    fn interpolatef_delayed_32t_benchmark(b: &mut Bencher) {
        let mut vector = ComplexTime32Box::new(Size::Small);
        b.iter(|| {
            vector.execute(|mut v, buffer| {
                let len = v.len();
                v.interpolatef(buffer, &RaisedCosineFunction::new(0.35), 10.0, 0.5, 10);
                v.resize(len).unwrap();
                v
            })
        });
    }
}