microdsp 0.1.3

DSP algorithms and utilities. Performant, embedded friendly and no_std compatible.
Documentation
use criterion::{black_box, criterion_group, criterion_main, Criterion};
use microdsp::mpm::MpmPitchDetector;
use microdsp::mpm::MpmPitchResult;

fn run_mpm_benchmark(id: &str, c: &mut Criterion, window_size: usize, lag_count: usize) {
    let mut result = MpmPitchResult::new(window_size, lag_count);
    c.bench_function(id, |b| {
        b.iter(|| {
            result.compute(black_box(44100.0));
        })
    });
}
fn result_benchmarks(c: &mut Criterion) {
    run_mpm_benchmark("Window 128, lag 64", c, 128, 64);
    run_mpm_benchmark("Window 128, lag 128", c, 128, 128);

    run_mpm_benchmark("Window 256, lag 128", c, 256, 128);
    run_mpm_benchmark("Window 256, lag 256", c, 256, 256);

    run_mpm_benchmark("Window 512, lag 256", c, 512, 256);
    run_mpm_benchmark("Window 512, lag 512", c, 512, 512);

    run_mpm_benchmark("Window 1024, lag 512", c, 1024, 512);
    run_mpm_benchmark("Window 1024, lag 1024", c, 1024, 1024);

    run_mpm_benchmark("Window 2048, lag 1024", c, 2048, 1024);
    run_mpm_benchmark("Window 2048, lag 2048", c, 2048, 2048);
}

fn run_detector_benchmark(
    id: &str,
    c: &mut Criterion,
    window_size: usize,
    downsampling_factor: usize,
) {
    let mut detector = MpmPitchDetector::from_options(
        44100.,
        window_size,
        window_size,
        window_size / 2,
        downsampling_factor,
    );
    let input_buffer = vec![0.0; window_size];

    c.bench_function(id, |b| {
        b.iter(|| detector.process(black_box(&input_buffer[..]), |_| {}))
    });
}
fn detector_benchmarks(c: &mut Criterion) {
    run_detector_benchmark("Window 2048, downsampling 1", c, 2048, 1);
    run_detector_benchmark("Window 2048, downsampling 2", c, 2048, 2);
    run_detector_benchmark("Window 2048, downsampling 4", c, 2048, 4);
    run_detector_benchmark("Window 2048, downsampling 8", c, 2048, 8);
    run_detector_benchmark("Window 2048, downsampling 16", c, 2048, 16);
}

criterion_group!(benches, detector_benchmarks, result_benchmarks);
criterion_main!(benches);