#smoothing #filter #adc #dsp

无需std dyn-smooth

基于Andrew Simper算法的动态平滑滤波器

2个不稳定版本

0.2.0 2022年12月28日
0.1.0 2022年12月25日

1542嵌入式开发

每月47次下载
用于 pot-conditioner

MIT 许可

22KB
346

dyn-smooth

no_std Rust包实现了基于Andrew Simper算法的动态平滑滤波器。

它使用一个低通滤波器,其截止频率由信号本身动态调制,并允许比纯静态版本更快地跟踪信号变化。

此包的主要用途是平滑嵌入式系统中ADC的模拟测量等噪声或阶梯信号。

状态

目前只有使用单精度浮点和32位整数的“高效”变体的实现。

使用示例

浮点数

use dyn_smooth::DynamicSmootherEcoF32;

// Create an instance with suitable settings.
let base_freq = 2.0;
let sample_freq = 1000.0;
let sensitivity = 0.5;
let mut smoother = DynamicSmootherEcoF32::new(base_freq, sample_freq, sensitivity);

// Feed an input value to the smoother and retrieve the smoothed value.
for sample in 0..100 {
    let input_value = sample as f32;   // Dummy value, read some real value from somewhere
    let smoothed_value = smoother.tick(input_value);
}

整数

use dyn_smooth::{DynamicSmootherEcoI32, I32_FRAC_BITS};

// Create an instance with suitable settings.
let base_freq = 2 << I32_FRAC_BITS;
let sample_freq = 1000 << I32_FRAC_BITS;
let sensitivity = (0.5 * ((1 << I32_FRAC_BITS) as f32)) as i32;
let mut smoother = DynamicSmootherEcoI32::new(base_freq, sample_freq, sensitivity);

// Feed an input value to the smoother and retrieve the smoothed value.
for sample in 0..100 {
    let input_value = sample as i32;   // Dummy value, read some real value from somewhere
    let smoothed_value = smoother.tick(input_value);
}

测试

运行 cargo test 以进行单元测试。使用 --nocapture 选项以获取更多输出。

许可

在MIT许可下发布。此项目的所有贡献都必须在相同的许可条件下提供。

作者:Oliver Rockstedt [email protected]

无运行时依赖