2个不稳定版本
使用旧Rust 2015
0.2.0 | 2018年1月1日 |
---|---|
0.1.0 | 2018年1月1日 |
#26 in #zero-allocation
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);
}