| Crates.io | allan |
| lib.rs | allan |
| version | 0.3.0 |
| created_at | 2016-03-28 16:03:07.838565+00 |
| updated_at | 2025-10-01 00:15:05.1102+00 |
| description | allan variance and deviation |
| homepage | https://github.com/brayniac/allan |
| repository | https://github.com/brayniac/allan |
| max_upload_size | |
| id | 4590 |
| size | 102,338 |
A Rust implementation of Allan variance and deviation calculations for analyzing the stability and noise characteristics of time-series data. This is particularly useful for characterizing frequency standards, oscillators, gyroscopes, and other precision measurement instruments.
Allan variance is a method of representing frequency stability in oscillators and other time-series data. Unlike standard deviation, Allan variance converges for most types of noise commonly found in physical systems and can distinguish between different noise types.
This library provides:
use allan::{Allan, ModifiedAllan, Hadamard};
// Allan variance/deviation
let mut allan = Allan::new();
for sample in measurements.iter() {
allan.record(*sample);
}
let tau_1 = allan.get(1).unwrap();
println!("Allan deviation at τ=1: {}", tau_1.deviation().unwrap());
println!("Allan variance at τ=1: {}", tau_1.variance().unwrap());
// Modified Allan variance/deviation (better white PM noise rejection)
let mut modified = ModifiedAllan::new();
for sample in measurements.iter() {
modified.record(*sample);
}
let tau_1 = modified.get(1).unwrap();
println!("Modified Allan deviation at τ=1: {}", tau_1.deviation().unwrap());
println!("Modified Allan variance at τ=1: {}", tau_1.variance().unwrap());
// Hadamard variance/deviation (3rd difference, better drift rejection)
let mut hadamard = Hadamard::new();
for sample in measurements.iter() {
hadamard.record(*sample);
}
let tau_1 = hadamard.get(1).unwrap();
println!("Hadamard deviation at τ=1: {}", tau_1.deviation().unwrap());
println!("Hadamard variance at τ=1: {}", tau_1.variance().unwrap());
API documentation is available at docs.rs/allan.
Licensed under either of
at your option.
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.