#kalman-filter #kalman #signal-processing #filter

无 std 过滤器

Rust 中的卡尔曼滤波和其他最优和非最优估计滤波器

2 个不稳定版本

0.2.0 2020 年 6 月 19 日
0.1.0 2019 年 7 月 28 日

#1329算法

MIT 许可证

42KB
772

filter-rs - Rust 中的卡尔曼滤波和其他最优和非最优估计滤波器。

filter-rsfilterpy 库的移植,旨在为 Rust 提供卡尔曼滤波和最优估计。

这个移植是一个正在进行中的工作,尚不完整。要了解更多关于卡尔曼滤波的信息,请查看 Roger R Labbe Jr. 的出色书籍 Kalman-and-Bayesian-Filters-in-Python

随着我阅读这本书并逐步完成,这个库将不断增长,API 可能也会发展和变得更加 Rust-like。对于 API 设计的反馈总是受欢迎的,以及对于缺失功能的拉取请求。

示例

API 基于 nalgebra 矩阵,具有结构泛型性。这意味着输入的形状可以在静态检查,并且在运行时始终正确。

GH 滤波器

let x0 = 0.0;
let dx0 = 0.0;
let g = 0.2;
let h - 0.2;
let dt = 0.01;

let fgh = GHFilter::new(x0, dx0, g, h, dt);

单变量卡尔曼滤波器

卡尔曼滤波器必须使用合理的值进行初始化。可以构建默认的过滤器,但不应使用它。

let mut kf: KalmanFilter<f64, U2, U1, U1> = KalmanFilter::default();

kf.x = Vector2::new(2.0, 0.0);
kf.F = Matrix2::new(
    1.0, 1.0,
    0.0, 1.0,
);
kf.H = Vector2::new(1.0, 0.0).transpose();
kf.P *= 1000.0;
kf.R = Matrix1::new(5.0);
kf.Q = Matrix2::repeat(0.0001);

let mut results = Vec::default();
for t in 0..100 {
    let z = Vector1::new(t as f64);
    kf.update(&z, None, None);
    kf.predict(None, None, None, None);
    results.push(kf.x.clone());
}

当前状态

每个与 filtyperpy 库具有功能对等的模块都将填充复选框。

  • 线性卡尔曼滤波器

  • 固定滞后平滑器

  • 平方根卡尔曼滤波器

  • 信息滤波器

  • 衰减卡尔曼滤波器

  • MMAE 滤波器库

  • IMM 估计器

  • 扩展卡尔曼滤波器

  • 无迹卡尔曼滤波器

  • 集合卡尔曼滤波器

  • 离散贝叶斯

  • GH-滤波器

  • GHK-滤波器

  • 衰减记忆滤波器

  • H-无穷滤波器

  • 最小二乘滤波器

许可证

根据您的选择,受以下任何一个许可证的约束

贡献

除非您明确声明,否则您提交的任何有意包含在作品中的贡献,如 Apache-2.0 许可证中定义的,均应按上述方式双许可,不附加任何额外条款或条件。

依赖关系

~4MB
~77K SLoC