#iir-filter #biquad #iir

iir_filters

A Rust re-implementation of some of scipy's digital filters

4 releases

0.1.3 Oct 16, 2023
0.1.2 Aug 22, 2022
0.1.1 Aug 20, 2022
0.1.0 Aug 19, 2022

#5 in #biquad

Download history 107/week @ 2025-09-17 97/week @ 2025-09-24 155/week @ 2025-10-01 119/week @ 2025-10-08 146/week @ 2025-10-15 178/week @ 2025-10-22 199/week @ 2025-10-29 105/week @ 2025-11-05 138/week @ 2025-11-12 346/week @ 2025-11-19 278/week @ 2025-11-26 277/week @ 2025-12-03 285/week @ 2025-12-10 216/week @ 2025-12-17 75/week @ 2025-12-24 101/week @ 2025-12-31

700 downloads per month
Used in code-smore

Apache-2.0

1.5MB
2K SLoC

iir_filters

A Rust re-implementation of some of scipy's digital filters.

Example:

use iir_filters::filter_design::FilterType;
use iir_filters::filter_design::butter;
use iir_filters::sos::zpk2sos;
use iir_filters::filter::DirectForm2Transposed;
use iir_filters::filter::Filter;

fn main() -> Result<(), Box<dyn std::error::Error>> {
    let order = 5;
    let cutoff_low = 1.0;
    let cutoff_hi= 10.0;
    let fs = 81.0;

    let zpk = butter(order, FilterType::BandPass(cutoff_low, cutoff_hi),fs)?;
    let sos = zpk2sos(&zpk, None)?;

    let mut dft2 = DirectForm2Transposed::new(&sos);
    
    let input:Vec<f64>  = vec![1.0, 2.0, 3.0];
    let mut output:Vec<f64> = vec![];
    
    for x in input.iter() {
        output.push( dft2.filter(*x) );
    }
    
    return Ok( () );
}

See: scipy.signal: butter()

⚠️ For now it only implements Butterworth filters, because that's all I'm interested in.

Dependencies