lowpassns
Lightweight no_std Low-Pass Filter for Embedded Systems
lowpassns is a small, efficient, and robust first-order low-pass filter crate for no_std Rust environments. Designed for embedded systems like RP2040 or STM32, it smooths sensor readings or signals in real-time while being memory- and CPU-efficient.
Update
#![forbid(unsafe_code)] for safety and opt-level = 3 for speed
Table of Contents
๐ Features
- โ
Pure
no_std: Zero standard library dependencies, perfect for bare-metal and RTOS. - โก Flexible Floating-Point: Default
f64, optionalf32feature for memory-constrained devices. - ๐ง Lightweight: Minimal stack usage, O(1) per update.
- ๐ก๏ธ Stable & Safe: Handles zero/negative dt safely, clamps tiny dt for embedded portability.
- ๐ Smooth Filtering: Simple first-order low-pass behavior for sensor smoothing or signal conditioning.
- โ๏ธ Resettable State: Filter value can be reset at any time.
๐ ๏ธ Installation
Add to your Cargo.toml:
[]
= lowpassns = "0.2.0"
= { ="0.2.0", = ["f32"] }
Build with optimizations:
cargo build --release
๐ Quickstart
use LowPass1;
๐ API Reference
| Method | Signature | Description |
|---|---|---|
new |
LowPass1::new(initial: Float, tau: Float) |
Creates a new low-pass filter. |
update |
update(&mut self, input: Float, dt: Float) -> Float |
Updates the filter state for a timestep. |
reset |
reset(&mut self, value: Float) |
Resets the filter state. |
Type Float = f64 (default) or f32 via feature flag.
โก Performance & Optimization
Speed opt-level = 3
CPU cost: constant time O(1) per update
Stack-only, zero allocations
Ideal for 100 Hz โ 10 kHz control loops on MCUs
๐งช Testing
Includes tests for:
Step response stability Zero/negative dt handling Reset functionality
Run:
cargo test -- --nocapture
โ๏ธ License
GPL-2.0-or-later ยฉ 2026 Jorge Andre Castro.
Free to use, modify, and distribute. Any derivative works must also be GPL-2.0-or-later.