#filter #zero-allocation #fir #dsp

nightly static_fir

具有静态系数的FIR滤波器

2个不稳定版本

使用旧Rust 2015

0.2.0 2018年1月1日
0.1.0 2018年1月1日

#26 in #zero-allocation

MIT 许可证

10KB
155 代码行(不含注释)

static_fir – 具有静态系数的FIR滤波器

文档

此crate提供用于应用编译时tap系数的零分配FIR滤波器的实用工具。

用法

crate可以通过将 cargo 作为依赖项添加到 Cargo.toml

[dependencies]
static_fir = "0.1.0"

并在crate根目录中导入它来使用

extern crate static_fir;

lib.rs:

具有静态tap系数的有限脉冲响应(FIR)卷积。

示例

以下示例显示了典型的API用法

#[macro_use]
extern crate static_fir;

use static_fir::FirFilter;

impl_fir!(LowpassFir, f32, 21, [
    -0.0022183273232,
    -0.00364708336518,
    -0.0058179856702,
    -0.00616633506547,
    2.60007787671e-18,
    0.0172901503422,
    0.0472883481821,
    0.0864914386425,
    0.126465151635,
    0.156489628279,
    0.167650028687,
    0.156489628279,
    0.126465151635,
    0.0864914386425,
    0.0472883481821,
    0.0172901503422,
    2.60007787671e-18,
    -0.00616633506547,
    -0.0058179856702,
    -0.00364708336518,
    -0.0022183273232,
]);

fn main() {
    let mut filt = FirFilter::<LowpassFir>::new();

    // Run filter over a couple samples.
    assert_eq!(filt.feed(1.0), -0.0022183273232);
    assert_eq!(filt.feed(2.0), -0.008083738011580001);

    // Pad out rest of history.
    for _ in 0..19 {
        filt.feed(0.0);
    }

    // Iterate over history in order.
    let mut hist = filt.history();
    assert_eq!(hist.next().unwrap(), &1.0);
    assert_eq!(hist.next().unwrap(), &2.0);
    assert_eq!(hist.next().unwrap(), &0.0);

    // Compute energy of stored samples.
    assert_eq!(filt.history_unordered().fold(0.0, |s, x| {
        s + x.powi(2)
    }), 5.0);
}

无运行时依赖项