2个不稳定版本
0.2.0 | 2024年7月10日 |
---|---|
0.1.0 | 2024年4月7日 |
第249个 嵌入式开发
每月119次下载
180KB
471 行
flaw
受控制律启发的嵌入式信号滤波,无需std和无需分配兼容。
此库提供了一种简单的方法,用于使用32位浮点数初始化和更新单输入、单输出无限冲激响应滤波器,以及一些常见滤波器的表格滤波系数。滤波器以N阶滤波器的4N+1次浮点运算进行评估。
名称flaw
是filter-law的简称,同时也指出了数字IIR滤波器使用小浮点类型是一个固有的缺陷,因为高阶和低截止滤波器会产生非常小的系数,从而导致浮点舍入误差。该库通过提供测试域内的滤波系数来尝试减轻这个问题。结果是,这些滤波器在有限的但有用的操作范围内可以实现精度和性能,并在嵌入式环境中进行公式化和初始化。
示例:二阶巴特沃斯滤波器
// First, choose a cutoff frequency as a fraction of sampling frequency
let cutoff_ratio = 1e-3;
// Initialize a filter, interpolating coefficients to that cutoff ratio.
let mut filter = flaw::butter2(cutoff_ratio).unwrap(); // Errors if extrapolating
// Update the filter with a new raw measurement
let measurement = 0.3145; // Some number
let estimate = filter.update(measurement); // Latest state estimate
开发状态:早期阶段
这处于实验阶段 - 它似乎工作得很好,但没有完全验证或具有完整功能。
- 需要更多的软件测试来保证滤波器在插值截止比下的性能
- 需要更多的硬件/固件测试来检查在实际微控制器上的性能
- 可以添加更多滤波器类型
系数表
表格滤波器经过测试以确保
- 在最小截止频率的收敛阶跃响应中误差小于0.1%
- 在最大截止频率的收敛阶跃响应中误差小于1ppm
- 在截止频率处,正弦输入的-3dB衰减误差小于5%,当截止比接近奈奎斯特频率时
- 这种误差似乎是测试案例离散化的问题,可以通过使用更好的测试方法(将正弦曲线拟合到结果或对三次插值器进行梯度下降)来减少
具有表格系数的每个滤波器都有一个最小和最大截止比。最小值由阶跃响应收敛的浮点误差决定,而最大值由截止比接近奈奎斯特频率时截止频率的衰减精度决定。
使用对数(cutoff_ratio)作为自变量的三次Hermite方法对这些表中的给定滤波器的系数进行插值。表格值存储并作为64位浮点数进行插值,仅在计算的最后阶段转换为32位浮点数。
滤波系数是从scipy的状态空间表示中提取的,这些表示是传递函数多项式的双线性变换的结果。
滤波器 | 最小截止比 | 最大截止比 |
---|---|---|
Butter1 | 10^-5 | 0.4 |
Butter2 | 10^-3 | 0.4 |
Butter3 | 10^-2.25 (~0.006) | 0.4 |
Butter4 | 10^-1.5 (~0.032) | 0.4 |
Butter5 | 10^-1.5 (~0.032) | 0.4 |
Butter6 | 10^-1.25 (~0.06) | 0.4 |
许可
根据您的选择,许可如下:
- Apache许可证版本2.0,(LICENSE-APACHE 或 https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT许可证 (LICENSE-MIT 或 http://opensource.org/licenses/MIT)
。
依赖项
~685KB
~12K SLoC