convolution-dsp 0.3.0

1-dimensional convolution library intended for use in DSP applications.
Documentation
use std::time::Instant;

use num_complex::Complex32;
use rand::prelude::*;

use convolution_dsp::{Conv1dPlanner, ConvMode};

const KERNEL_SIZE: usize = 1024;
const SIGNAL_SIZE: usize = 1024 * 64;
const ITERATIONS: usize = 10000;

fn main() {
    let mut rng = rand::thread_rng();
    let filter: Vec<f32> = (0..KERNEL_SIZE)
        .map(|_| rng.gen_range(-1_f32..1.))
        .collect();

    let planner = Conv1dPlanner::new();
    let mut conv = planner.plan_conv1d(&filter, ConvMode::Full);

    let now = Instant::now();
    for _ in 0..ITERATIONS {
        let signal: Vec<Complex32> = (0..SIGNAL_SIZE)
            .map(|_| Complex32::new(rng.gen_range(-1_f32..1.), rng.gen_range(-1_f32..1.)))
            .collect();
        conv.process(signal.clone());
    }
    let elapsed = now.elapsed();
    let per = elapsed / ITERATIONS as u32;
    println!(
        "Iterations: {}, Kernel: {}, Signal: {}, Total Time: {} ms, Time Per: {} us",
        ITERATIONS,
        KERNEL_SIZE,
        SIGNAL_SIZE,
        elapsed.as_millis(),
        per.as_micros(),
    );
}