2个不稳定版本
0.2.0 | 2022年12月28日 |
---|---|
0.1.0 | 2022年12月25日 |
1542 在 嵌入式开发 中
每月47次下载
用于 pot-conditioner
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]